From 7c39cfa0fc90a1cdc61693f072aa16bce6963dc0 Mon Sep 17 00:00:00 2001 From: etorres Date: Thu, 14 May 2015 18:03:08 +0200 Subject: [PATCH] Change version to 0.2.0 --- README.md | 10 +- .../org.eclipse.wst.common.component | 4 +- lvl-project/lvl-auth/pom.xml | 2 +- lvl-project/lvl-bundle/pom.xml | 2 +- lvl-project/lvl-bundle/src/main/ui/build.js | 2 +- lvl-project/lvl-bundle/src/main/ui/index.html | 2 +- .../js/apps/collection/export/export_view.js | 2 +- .../show/tpls/software-releases-section.html | 8 +- .../src/main/ui/js/requirejs_main.js | 2 +- .../src/main/ui2/css/backgrid-filter.min.css | 1 - .../main/ui2/css/backgrid-paginator.min.css | 1 - .../main/ui2/css/backgrid-select-all.min.css | 1 - .../lvl-bundle/src/main/ui2/css/flags.css | 254 --------- .../lvl-bundle/src/main/ui2/css/lvl.css | 525 ------------------ .../lvl-bundle/src/main/ui2/favicon.ico | Bin 32038 -> 0 bytes .../src/main/ui2/img/ajax_loader_gray_32.gif | Bin 2272 -> 0 bytes .../src/main/ui2/img/back-to-top-arrow.svg | 7 - .../lvl-bundle/src/main/ui2/img/bg.svg | 118 ---- .../lvl-bundle/src/main/ui2/img/blank.gif | Bin 43 -> 0 bytes .../lvl-bundle/src/main/ui2/img/cnpq.png | Bin 12279 -> 0 bytes .../lvl-bundle/src/main/ui2/img/connector.jpg | Bin 11650 -> 0 bytes .../lvl-bundle/src/main/ui2/img/cria.jpg | Bin 7086 -> 0 bytes .../lvl-bundle/src/main/ui2/img/demo1.png | Bin 41024 -> 0 bytes .../lvl-bundle/src/main/ui2/img/demo2.png | Bin 43503 -> 0 bytes .../src/main/ui2/img/eu-comission.png | Bin 15633 -> 0 bytes .../src/main/ui2/img/eubrazilcc.png | Bin 9178 -> 0 bytes .../lvl-bundle/src/main/ui2/img/fiocruz.png | Bin 7429 -> 0 bytes .../lvl-bundle/src/main/ui2/img/flags.png | Bin 267685 -> 0 bytes .../lvl-bundle/src/main/ui2/img/isciii.jpg | Bin 5237 -> 0 bytes .../lvl-bundle/src/main/ui2/img/lvl.png | Bin 7375 -> 0 bytes .../lvl-bundle/src/main/ui2/img/mcti.png | Bin 33872 -> 0 bytes .../src/main/ui2/img/microscope.jpg | Bin 11568 -> 0 bytes .../src/main/ui2/img/phlebotomus.jpg | Bin 12824 -> 0 bytes .../src/main/ui2/img/textured_paper.jpg | Bin 3445 -> 0 bytes .../lvl-bundle/src/main/ui2/img/unew.png | Bin 18071 -> 0 bytes .../lvl-bundle/src/main/ui2/img/upv.png | Bin 22592 -> 0 bytes .../lvl-bundle/src/main/ui2/index.html | 53 -- lvl-project/lvl-bundle/src/main/ui2/js/app.js | 136 ----- .../src/main/ui2/js/apps/access/access_app.js | 45 -- .../main/ui2/js/apps/access/access_router.js | 50 -- .../account-validation_ctrl.js | 21 - .../account-validation_view.js | 110 ---- .../templates/account-validation.html | 42 -- .../authz-callback/authz_callback_ctrl.js | 29 - .../access/legal/privacy_policy_viewer.js | 13 - .../templates/privacy_policy_viewer.html | 27 - .../legal/templates/terms_of_use_viewer.html | 27 - .../apps/access/legal/terms_of_use_viewer.js | 13 - .../js/apps/access/login/access_login_ctrl.js | 21 - .../js/apps/access/login/access_login_view.js | 157 ------ .../js/apps/access/login/templates/login.html | 59 -- .../js/apps/access/profile/profile_viewer.js | 29 - .../access/profile/templates/profile.html | 22 - .../access/register/access_register_ctrl.js | 28 - .../access/register/access_register_view.js | 186 ------- .../access/register/templates/register.html | 81 --- .../src/main/ui2/js/apps/admin/admin_app.js | 27 - .../main/ui2/js/apps/admin/admin_router.js | 51 -- .../js/apps/admin/issues/admin_issues_ctrl.js | 23 - .../js/apps/admin/issues/admin_issues_view.js | 353 ------------ .../apps/admin/issues/tpls/admin_issues.html | 13 - .../js/apps/admin/issues/tpls/toolbar.html | 4 - .../js/apps/admin/layout/admin_layout_ctrl.js | 28 - .../js/apps/admin/layout/admin_layout_view.js | 70 --- .../js/apps/admin/layout/entities/tablinks.js | 75 --- .../apps/admin/layout/tpls/admin-layout.html | 22 - .../js/apps/admin/layout/tpls/tab-link.html | 1 - .../js/apps/admin/layout/tpls/tab-list.html | 1 - .../admin_subscription_requests_ctrl.js | 23 - .../admin_subscription_requests_view.js | 327 ----------- .../tpls/admin_subscription_requests.html | 13 - .../subscription_requests/tpls/toolbar.html | 4 - .../main/ui2/js/apps/analysis/analysis_app.js | 27 - .../ui2/js/apps/analysis/analysis_router.js | 52 -- .../analysis/layout/analysis_layout_ctrl.js | 28 - .../analysis/layout/analysis_layout_view.js | 70 --- .../apps/analysis/layout/entities/tablinks.js | 75 --- .../layout/templates/analysis-layout.html | 23 - .../analysis/layout/templates/tab-link.html | 1 - .../analysis/layout/templates/tab-list.html | 1 - .../pipelines/analysis_pipelines_ctrl.js | 31 -- .../pipelines/analysis_pipelines_view.js | 290 ---------- .../pipelines/tours/pipelines_tour.js | 85 --- .../pipelines/tpls/analysis_pipelines.html | 13 - .../pipelines/tpls/toolbar_browse.html | 4 - .../apps/analysis/runs/analysis_runs_ctrl.js | 23 - .../apps/analysis/runs/analysis_runs_view.js | 319 ----------- .../js/apps/analysis/runs/tours/runs_tour.js | 85 --- .../analysis/runs/tpls/analysis_runs.html | 13 - .../analysis/runs/tpls/toolbar_browse.html | 4 - .../runs_item/analysis_runs_item_ctrl.js | 44 -- .../runs_item/analysis_runs_item_view.js | 123 ---- .../templates/analysis_runs_item.html | 59 -- .../submit/analysis_submit_pipeline_view.js | 180 ------ .../submit/tpls/analysis_submit_pipeline.html | 18 - .../apps/analysis/submit/tpls/parameter.html | 3 - .../apps/analysis/submit/tpls/parameters.html | 3 - .../text_viewer/analysis_text_viewer_view.js | 79 --- .../templates/analysis_text_viewer.html | 20 - .../tree_viewer/analysis_tree_viewer_view.js | 100 ---- .../templates/analysis_tree_viewer.html | 28 - .../browse/collection_browse_ctrl.js | 49 -- .../browse/collection_browse_view.js | 375 ------------- .../browse/templates/collection_browse.html | 13 - .../browse/templates/toolbar_browse.html | 12 - .../browse/tours/collection_tour.js | 85 --- .../ui2/js/apps/collection/collection_app.js | 27 - .../js/apps/collection/collection_router.js | 53 -- .../js/apps/collection/export/export_view.js | 111 ---- .../templates/collection_export_dataset.html | 51 -- .../layout/collection_layout_ctrl.js | 28 - .../layout/collection_layout_view.js | 71 --- .../collection/layout/entities/tablinks.js | 85 --- .../layout/templates/collection-layout.html | 23 - .../collection/layout/templates/tab-link.html | 1 - .../collection/layout/templates/tab-list.html | 1 - .../collection/map/collection_map_ctrl.js | 29 - .../collection/map/collection_map_view.js | 275 --------- .../map/templates/collection_map.html | 20 - .../collection_sequence_viewer.js | 51 -- .../templates/collection_sequence_viewer.html | 42 -- .../collection/stats/collection_stats_ctrl.js | 22 - .../collection/stats/collection_stats_view.js | 123 ---- .../stats/templates/collection_stats.html | 109 ---- .../submit/collection_submit_ctrl.js | 17 - .../submit/collection_submit_view.js | 12 - .../submit/templates/collection_submit.html | 6 - .../apps/config/marionette/configuration.js | 150 ----- .../apps/config/marionette/regions/dialog.js | 40 -- .../apps/config/marionette/regions/fadein.js | 18 - .../js/apps/config/marionette/styles/style.js | 56 -- .../drive/datasets/drive_datasets_ctrl.js | 23 - .../drive/datasets/drive_datasets_view.js | 457 --------------- .../drive/datasets/tours/datasets_tour.js | 85 --- .../drive/datasets/tpls/drive_datasets.html | 13 - .../drive/datasets/tpls/toolbar_browse.html | 4 - .../src/main/ui2/js/apps/drive/drive_app.js | 27 - .../main/ui2/js/apps/drive/drive_router.js | 51 -- .../js/apps/drive/layout/drive_layout_ctrl.js | 28 - .../js/apps/drive/layout/drive_layout_view.js | 69 --- .../js/apps/drive/layout/entities/tablinks.js | 75 --- .../drive/layout/templates/drive-layout.html | 23 - .../apps/drive/layout/templates/tab-link.html | 1 - .../apps/drive/layout/templates/tab-list.html | 1 - .../js/apps/drive/links/drive_links_ctrl.js | 23 - .../js/apps/drive/links/drive_links_view.js | 377 ------------- .../js/apps/drive/links/tours/links_tour.js | 85 --- .../js/apps/drive/links/tpls/drive_links.html | 13 - .../apps/drive/links/tpls/toolbar_browse.html | 4 - .../browse/e-compendium_browse_ctrl.js | 36 -- .../browse/e-compendium_browse_view.js | 269 --------- .../browse/tours/e-compendium_tour.js | 85 --- .../browse/tpls/e-compendium_browse.html | 13 - .../browse/tpls/toolbar_browse.html | 4 - .../e-compendium_citation_viewer.js | 98 ---- .../e-compendium_citation_viewer.html | 36 -- .../js/apps/e-compendium/e-compendium_app.js | 27 - .../apps/e-compendium/e-compendium_router.js | 51 -- .../layout/e-compendium_layout_ctrl.js | 28 - .../layout/e-compendium_layout_view.js | 71 --- .../e-compendium/layout/entities/tablinks.js | 85 --- .../layout/templates/e-compendium-layout.html | 23 - .../layout/templates/tab-link.html | 1 - .../layout/templates/tab-list.html | 1 - .../e-compendium/map/e-compendium_map_ctrl.js | 17 - .../e-compendium/map/e-compendium_map_view.js | 12 - .../map/templates/e-compendium_map.html | 6 - .../stats/e-compendium_stats_ctrl.js | 17 - .../stats/e-compendium_stats_view.js | 12 - .../stats/templates/e-compendium_stats.html | 6 - .../submit/e-compendium_submit_ctrl.js | 17 - .../submit/e-compendium_submit_view.js | 12 - .../submit/templates/e-compendium_submit.html | 6 - .../src/main/ui2/js/apps/enm/enm_app.js | 27 - .../src/main/ui2/js/apps/enm/enm_router.js | 37 -- .../ui2/js/apps/enm/show/enm_show_ctrl.js | 16 - .../ui2/js/apps/enm/show/enm_show_view.js | 11 - .../ui2/js/apps/enm/show/templates/enm.html | 12 - .../src/main/ui2/js/apps/footer/footer_app.js | 35 -- .../js/apps/footer/show/footer_show_ctrl.js | 29 - .../js/apps/footer/show/footer_show_view.js | 26 - .../js/apps/footer/show/templates/footer.html | 59 -- .../src/main/ui2/js/apps/header/header_app.js | 61 -- .../js/apps/header/show/header_admin_ctrl.js | 17 - .../js/apps/header/show/header_admin_view.js | 235 -------- .../js/apps/header/show/header_home_ctrl.js | 17 - .../js/apps/header/show/header_home_view.js | 29 - .../apps/header/show/header_workspace_ctrl.js | 32 -- .../apps/header/show/header_workspace_view.js | 269 --------- .../header/show/templates/header_admin.html | 79 --- .../header/show/templates/header_home.html | 23 - .../header/show/templates/header_nav.html | 6 - .../show/templates/header_nav_link.html | 1 - .../show/templates/header_notifications.html | 17 - .../show/templates/header_workspace.html | 81 --- .../src/main/ui2/js/apps/home/home_app.js | 27 - .../src/main/ui2/js/apps/home/home_router.js | 28 - .../ui2/js/apps/home/show/home_show_ctrl.js | 21 - .../ui2/js/apps/home/show/home_show_view.js | 16 - .../ui2/js/apps/home/show/templates/home.html | 140 ----- .../ui2/js/apps/not-found/not-found_app.js | 27 - .../not-found/show/not-found_show_ctrl.js | 25 - .../not-found/show/not-found_show_view.js | 57 -- .../not-found/show/templates/not-found.html | 62 --- .../show/templates/not-found_nav.html | 5 - .../main/ui2/js/apps/open/about/about_app.js | 27 - .../ui2/js/apps/open/about/about_router.js | 36 -- .../apps/open/about/show/about_show_ctrl.js | 36 -- .../tpls/about-key-featurest-section.html | 59 -- .../about/show/tpls/about-main-section.html | 6 - .../show/tpls/about-project-section.html | 35 -- .../open/documentation/documentation_app.js | 27 - .../documentation/documentation_router.js | 40 -- .../show/documentation_show_ctrl.js | 52 -- .../show/tpls/documentation-main-section.html | 5 - .../documentation-presentations-section.html | 18 - .../documentation-publications-section.html | 22 - .../documentation-screencasts-section.html | 51 -- .../ui2/js/apps/open/layout/entities/event.js | 45 -- .../js/apps/open/layout/entities/layout.js | 37 -- .../js/apps/open/layout/entities/section.js | 53 -- .../ui2/js/apps/open/layout/entities/toc.js | 57 -- .../js/apps/open/layout/open_layout_ctrl.js | 21 - .../js/apps/open/layout/open_layout_view.js | 165 ------ .../open/layout/tpls/event-list-item.html | 1 - .../js/apps/open/layout/tpls/event-list.html | 2 - .../apps/open/layout/tpls/nav-list-item.html | 1 - .../js/apps/open/layout/tpls/nav-list.html | 0 .../js/apps/open/layout/tpls/open-layout.html | 52 -- .../js/apps/open/layout/tpls/subsection.html | 5 - .../open/software/show/software_show_ctrl.js | 42 -- .../tpls/software-development-section.html | 7 - .../show/tpls/software-downloads-section.html | 56 -- .../show/tpls/software-main-section.html | 5 - .../show/tpls/software-releases-section.html | 53 -- .../ui2/js/apps/open/software/software_app.js | 27 - .../js/apps/open/software/software_router.js | 36 -- .../open/support/show/support_show_ctrl.js | 207 ------- .../tpls/support-mailing-list-section.html | 28 - .../show/tpls/support-main-section.html | 6 - .../show/tpls/support-report-an-issue.html | 67 --- .../ui2/js/apps/open/support/support_app.js | 27 - .../js/apps/open/support/support_router.js | 36 -- .../saved-items/layout/entities/tablinks.js | 70 --- .../layout/saved-items_layout_ctrl.js | 28 - .../layout/saved-items_layout_view.js | 70 --- .../layout/tpls/saved-items-layout.html | 23 - .../saved-items/layout/tpls/tab-link.html | 1 - .../saved-items/layout/tpls/tab-list.html | 1 - .../js/apps/saved-items/saved-items_app.js | 27 - .../js/apps/saved-items/saved-items_router.js | 49 -- .../searches/saved-items_searches_ctrl.js | 23 - .../searches/saved-items_searches_view.js | 362 ------------ .../searches/tours/searches_tour.js | 85 --- .../searches/tpls/saved-items_searches.html | 13 - .../searches/tpls/toolbar_browse.html | 4 - .../settings/account/settings_account_ctrl.js | 26 - .../settings/account/settings_account_view.js | 37 -- .../account/tpls/settings_account.html | 68 --- .../instances/settings_instances_ctrl.js | 23 - .../instances/settings_instances_view.js | 300 ---------- .../instances/tours/instances_tour.js | 85 --- .../instances/tpls/settings_instances.html | 13 - .../instances/tpls/toolbar_browse.html | 4 - .../apps/settings/layout/entities/tablinks.js | 75 --- .../settings/layout/settings_layout_ctrl.js | 28 - .../settings/layout/settings_layout_view.js | 70 --- .../layout/templates/settings-layout.html | 23 - .../settings/layout/templates/tab-link.html | 1 - .../settings/layout/templates/tab-list.html | 1 - .../main/ui2/js/apps/settings/settings_app.js | 27 - .../ui2/js/apps/settings/settings_router.js | 51 -- .../js/apps/social/show/social_show_ctrl.js | 16 - .../js/apps/social/show/social_show_view.js | 11 - .../js/apps/social/show/templates/social.html | 12 - .../src/main/ui2/js/apps/social/social_app.js | 27 - .../main/ui2/js/apps/social/social_router.js | 37 -- .../src/main/ui2/js/common/alert.js | 47 -- .../src/main/ui2/js/common/confirm.js | 62 --- .../src/main/ui2/js/common/country_names.js | 253 --------- .../src/main/ui2/js/common/growl.js | 65 --- .../lvl-bundle/src/main/ui2/js/common/info.js | 47 -- .../common/search/tpls/add_search_term.html | 7 - .../js/common/search/tpls/save_search.html | 6 - .../js/common/search/tpls/search_term.html | 1 - .../main/ui2/js/common/templates/alert.html | 15 - .../main/ui2/js/common/templates/confirm.html | 17 - .../main/ui2/js/common/templates/info.html | 15 - .../main/ui2/js/common/templates/loading.html | 0 .../src/main/ui2/js/common/views.js | 64 --- .../src/main/ui2/js/data/config.json | 13 - .../src/main/ui2/js/data/events.json | 12 - .../src/main/ui2/js/data/pipelines.json | 6 - .../src/main/ui2/js/entities/dataset.js | 97 ---- .../src/main/ui2/js/entities/gb_sequence.js | 36 -- .../src/main/ui2/js/entities/instance.js | 69 --- .../src/main/ui2/js/entities/issue.js | 84 --- .../src/main/ui2/js/entities/link.js | 97 ---- .../src/main/ui2/js/entities/navigation.js | 264 --------- .../src/main/ui2/js/entities/pm_citation.js | 30 - .../src/main/ui2/js/entities/reference.js | 75 --- .../src/main/ui2/js/entities/saved_search.js | 76 --- .../src/main/ui2/js/entities/sequence.js | 92 --- .../src/main/ui2/js/entities/statistic.js | 46 -- .../src/main/ui2/js/entities/styles.js | 170 ------ .../ui2/js/entities/subscription_request.js | 79 --- .../src/main/ui2/js/entities/user.js | 99 ---- .../src/main/ui2/js/entities/wf_params.js | 45 -- .../src/main/ui2/js/entities/workflow.js | 71 --- .../src/main/ui2/js/entities/workflow_run.js | 116 ---- .../main/ui2/js/plugins/backbone.oauth2.js | 61 -- .../src/main/ui2/js/requirejs_main.js | 170 ------ .../main/ui2/js/vendor/cached/Chart.min.js | 11 - .../main/ui2/js/vendor/cached/backbone-min.js | 2 - .../vendor/cached/backbone.marionette.min.js | 23 - .../vendor/cached/backbone.routefilter.min.js | 4 - .../js/vendor/cached/backbone.syphon.min.js | 5 - .../main/ui2/js/vendor/cached/backgrid.min.js | 8 - .../ui2/js/vendor/cached/bootstrap.min.js | 7 - .../vendor/cached/bootstrapValidator.min.js | 14 - .../main/ui2/js/vendor/cached/domReady.min.js | 1 - .../ui2/js/vendor/cached/hopscotch.min.js | 17 - .../js/vendor/cached/imagesloaded.pkgd.min.js | 7 - .../main/ui2/js/vendor/cached/jquery.min.js | 4 - .../ui2/js/vendor/cached/jquery.qtip.min.js | 3 - .../ui2/js/vendor/cached/jquery.spin.min.js | 1 - .../main/ui2/js/vendor/cached/moment.min.js | 7 - .../src/main/ui2/js/vendor/cached/ol.min.js | 1 - .../src/main/ui2/js/vendor/cached/pace.min.js | 2 - .../src/main/ui2/js/vendor/cached/spin.min.js | 1 - .../src/main/ui2/js/vendor/cached/text.min.js | 1 - .../src/main/ui2/js/vendor/cached/tpl.min.js | 13 - .../ui2/js/vendor/cached/underscore-min.js | 6 - .../vendor/provided/backbone.paginator.min.js | 8 - .../js/vendor/provided/backbone.picky.min.js | 6 - .../js/vendor/provided/backgrid-filter.min.js | 8 - .../vendor/provided/backgrid-paginator.min.js | 8 - .../provided/backgrid-select-all.min.js | 8 - .../provided/bootstrap3-typeahead.min.js | 1 - .../main/ui2/js/vendor/provided/chance.min.js | 2 - .../ui2/js/vendor/provided/filesize.min.js | 6 - .../js/vendor/provided/filesize.min.js.map | 1 - .../ui2/js/vendor/provided/jsphylosvg-min.js | 75 --- lvl-project/lvl-core/pom.xml | 2 +- .../java/eu/eubrazilcc/lvl/core/BaseFile.java | 6 - .../org.eclipse.wst.common.component | 4 +- lvl-project/lvl-service/pom.xml | 2 +- .../lvl/service/rest/DatasetResource.java | 2 +- .../lvl/service/rest/QueryParamHelper.java | 2 +- lvl-project/lvl-storage/pom.xml | 2 +- lvl-project/lvl-test/pom.xml | 2 +- lvl-project/pom.xml | 4 +- pom.xml | 2 +- 353 files changed, 28 insertions(+), 16509 deletions(-) delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/css/backgrid-filter.min.css delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/css/backgrid-paginator.min.css delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/css/backgrid-select-all.min.css delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/css/flags.css delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/css/lvl.css delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/favicon.ico delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/ajax_loader_gray_32.gif delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/back-to-top-arrow.svg delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/bg.svg delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/blank.gif delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/cnpq.png delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/connector.jpg delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/cria.jpg delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/demo1.png delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/demo2.png delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/eu-comission.png delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/eubrazilcc.png delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/fiocruz.png delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/flags.png delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/isciii.jpg delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/lvl.png delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/mcti.png delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/microscope.jpg delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/phlebotomus.jpg delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/textured_paper.jpg delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/unew.png delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/img/upv.png delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/index.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/access_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/access_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/account-validation/account-validation_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/account-validation/account-validation_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/account-validation/templates/account-validation.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/authz-callback/authz_callback_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/privacy_policy_viewer.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/templates/privacy_policy_viewer.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/templates/terms_of_use_viewer.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/terms_of_use_viewer.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/login/access_login_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/login/access_login_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/login/templates/login.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/profile/profile_viewer.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/profile/templates/profile.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/register/access_register_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/register/access_register_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/access/register/templates/register.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/admin_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/admin_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/admin_issues_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/admin_issues_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/tpls/admin_issues.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/tpls/toolbar.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/admin_layout_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/admin_layout_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/entities/tablinks.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/tpls/admin-layout.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/tpls/tab-link.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/tpls/tab-list.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/admin_subscription_requests_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/admin_subscription_requests_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/tpls/admin_subscription_requests.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/tpls/toolbar.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/analysis_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/analysis_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/analysis_layout_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/analysis_layout_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/entities/tablinks.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/templates/analysis-layout.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/templates/tab-link.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/templates/tab-list.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/analysis_pipelines_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/analysis_pipelines_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/tours/pipelines_tour.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/tpls/analysis_pipelines.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/tpls/toolbar_browse.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/analysis_runs_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/analysis_runs_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/tours/runs_tour.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/tpls/analysis_runs.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/tpls/toolbar_browse.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs_item/analysis_runs_item_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs_item/analysis_runs_item_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs_item/templates/analysis_runs_item.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/submit/analysis_submit_pipeline_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/submit/tpls/analysis_submit_pipeline.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/submit/tpls/parameter.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/submit/tpls/parameters.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/text_viewer/analysis_text_viewer_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/text_viewer/templates/analysis_text_viewer.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/tree_viewer/analysis_tree_viewer_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/tree_viewer/templates/analysis_tree_viewer.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/collection_browse_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/collection_browse_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/templates/collection_browse.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/templates/toolbar_browse.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/tours/collection_tour.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/collection_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/collection_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/export/export_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/export/templates/collection_export_dataset.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/collection_layout_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/collection_layout_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/entities/tablinks.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/templates/collection-layout.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/templates/tab-link.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/templates/tab-list.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/map/collection_map_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/map/collection_map_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/map/templates/collection_map.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/sequence_viewer/collection_sequence_viewer.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/sequence_viewer/templates/collection_sequence_viewer.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/stats/collection_stats_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/stats/collection_stats_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/stats/templates/collection_stats.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/submit/collection_submit_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/submit/collection_submit_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/submit/templates/collection_submit.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/configuration.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/regions/dialog.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/regions/fadein.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/styles/style.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/drive_datasets_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/drive_datasets_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/tours/datasets_tour.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/tpls/drive_datasets.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/tpls/toolbar_browse.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/drive_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/drive_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/drive_layout_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/drive_layout_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/entities/tablinks.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/templates/drive-layout.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/templates/tab-link.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/templates/tab-list.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/drive_links_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/drive_links_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/tours/links_tour.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/tpls/drive_links.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/tpls/toolbar_browse.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/e-compendium_browse_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/e-compendium_browse_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/tours/e-compendium_tour.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/tpls/e-compendium_browse.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/tpls/toolbar_browse.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/citation_viewer/e-compendium_citation_viewer.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/citation_viewer/templates/e-compendium_citation_viewer.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/e-compendium_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/e-compendium_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/e-compendium_layout_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/e-compendium_layout_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/entities/tablinks.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/templates/e-compendium-layout.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/templates/tab-link.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/templates/tab-list.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/map/e-compendium_map_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/map/e-compendium_map_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/map/templates/e-compendium_map.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/stats/e-compendium_stats_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/stats/e-compendium_stats_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/stats/templates/e-compendium_stats.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/submit/e-compendium_submit_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/submit/e-compendium_submit_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/submit/templates/e-compendium_submit.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/enm_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/enm_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/show/enm_show_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/show/enm_show_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/show/templates/enm.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/footer_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/show/footer_show_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/show/footer_show_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/show/templates/footer.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/header/header_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_admin_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_admin_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_home_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_home_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_workspace_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_workspace_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_admin.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_home.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_nav.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_nav_link.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_notifications.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_workspace.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/home/home_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/home/home_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/home/show/home_show_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/home/show/home_show_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/home/show/templates/home.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/not-found_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/not-found_show_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/not-found_show_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/templates/not-found.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/templates/not-found_nav.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/about_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/about_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/about_show_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/tpls/about-key-featurest-section.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/tpls/about-main-section.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/tpls/about-project-section.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/documentation_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/documentation_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/documentation_show_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-main-section.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-presentations-section.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-publications-section.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-screencasts-section.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/event.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/layout.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/section.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/toc.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/open_layout_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/open_layout_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/event-list-item.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/event-list.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/nav-list-item.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/nav-list.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/open-layout.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/subsection.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/software_show_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-development-section.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-downloads-section.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-main-section.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-releases-section.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/software_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/software_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/support_show_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/tpls/support-mailing-list-section.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/tpls/support-main-section.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/tpls/support-report-an-issue.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/support_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/support_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/entities/tablinks.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/saved-items_layout_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/saved-items_layout_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/tpls/saved-items-layout.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/tpls/tab-link.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/tpls/tab-list.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/saved-items_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/saved-items_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/saved-items_searches_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/saved-items_searches_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/tours/searches_tour.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/tpls/saved-items_searches.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/tpls/toolbar_browse.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/account/settings_account_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/account/settings_account_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/account/tpls/settings_account.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/settings_instances_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/settings_instances_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/tours/instances_tour.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/tpls/settings_instances.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/tpls/toolbar_browse.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/entities/tablinks.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/settings_layout_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/settings_layout_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/templates/settings-layout.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/templates/tab-link.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/templates/tab-list.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/settings_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/settings_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/social/show/social_show_ctrl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/social/show/social_show_view.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/social/show/templates/social.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/social/social_app.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/apps/social/social_router.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/common/alert.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/common/confirm.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/common/country_names.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/common/growl.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/common/info.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/common/search/tpls/add_search_term.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/common/search/tpls/save_search.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/common/search/tpls/search_term.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/common/templates/alert.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/common/templates/confirm.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/common/templates/info.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/common/templates/loading.html delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/common/views.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/data/config.json delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/data/events.json delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/data/pipelines.json delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/dataset.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/gb_sequence.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/instance.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/issue.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/link.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/navigation.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/pm_citation.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/reference.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/saved_search.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/sequence.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/statistic.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/styles.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/subscription_request.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/user.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/wf_params.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/workflow.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/entities/workflow_run.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/plugins/backbone.oauth2.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/requirejs_main.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/Chart.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/backbone-min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/backbone.marionette.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/backbone.routefilter.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/backbone.syphon.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/backgrid.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/bootstrap.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/bootstrapValidator.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/domReady.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/hopscotch.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/imagesloaded.pkgd.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/jquery.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/jquery.qtip.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/jquery.spin.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/moment.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/ol.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/pace.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/spin.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/text.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/tpl.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/underscore-min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backbone.paginator.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backbone.picky.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backgrid-filter.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backgrid-paginator.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backgrid-select-all.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/bootstrap3-typeahead.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/chance.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/filesize.min.js delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/filesize.min.js.map delete mode 100644 lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/jsphylosvg-min.js diff --git a/README.md b/README.md index 4654b1e1..0dd7bf30 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Leishmaniasis-Virtual-Lab - [v0.0.1](http://lvl.i3m.upv.es/doc/#installation) +# Leishmaniasis-Virtual-Lab - [v0.2.0](http://lvl.i3m.upv.es/doc/#installation) [http://lvl.i3m.upv.es](http://lvl.i3m.upv.es) - The Leishmaniasis Virtual Laboratory: an open, collaborative environment for research in leishmaniasis. @@ -10,13 +10,13 @@ ## Endpoints -* Sandbox: [http://lvl.i3m.upv.es](http://lvl.i3m.upv.es) -* Production: *TODO* +* Sandbox: [http://dedalo.i3m.upv.es](http://dedalo.i3m.upv.es) +* Production: [http://lvl.i3m.upv.es](http://lvl.i3m.upv.es) ## Documentation -* [Official website development](http://lvl.i3m.upv.es) -* Official website *TODO* +* [Official website development](http://dedalo.i3m.upv.es/apidoc/) +* [Official website](http://lvl.i3m.upv.es/apidoc/) ## Release History diff --git a/lvl-project/lvl-auth/.settings/org.eclipse.wst.common.component b/lvl-project/lvl-auth/.settings/org.eclipse.wst.common.component index 88190fd3..594e44a6 100644 --- a/lvl-project/lvl-auth/.settings/org.eclipse.wst.common.component +++ b/lvl-project/lvl-auth/.settings/org.eclipse.wst.common.component @@ -4,10 +4,10 @@ - + uses - + uses diff --git a/lvl-project/lvl-auth/pom.xml b/lvl-project/lvl-auth/pom.xml index e8fa5272..08dd043f 100644 --- a/lvl-project/lvl-auth/pom.xml +++ b/lvl-project/lvl-auth/pom.xml @@ -27,7 +27,7 @@ that you distribute must include a readable copy of the "NOTICE" text file. eu.eubrazilcc.lvl lvl-project - 0.1.1 + 0.2.0 .. diff --git a/lvl-project/lvl-bundle/pom.xml b/lvl-project/lvl-bundle/pom.xml index 03aeb1ba..31ce7aa5 100644 --- a/lvl-project/lvl-bundle/pom.xml +++ b/lvl-project/lvl-bundle/pom.xml @@ -27,7 +27,7 @@ that you distribute must include a readable copy of the "NOTICE" text file. eu.eubrazilcc.lvl lvl-project - 0.1.1 + 0.2.0 .. diff --git a/lvl-project/lvl-bundle/src/main/ui/build.js b/lvl-project/lvl-bundle/src/main/ui/build.js index 786f1172..4f692260 100644 --- a/lvl-project/lvl-bundle/src/main/ui/build.js +++ b/lvl-project/lvl-bundle/src/main/ui/build.js @@ -1,4 +1,4 @@ -/* r.js -o build.js */ +/* RequireJS optimizer configuration. Usage: r.js -o build.js */ ({ mainConfigFile : 'js/requirejs_main.js', appDir : './', diff --git a/lvl-project/lvl-bundle/src/main/ui/index.html b/lvl-project/lvl-bundle/src/main/ui/index.html index 470f4d88..896c97c0 100644 --- a/lvl-project/lvl-bundle/src/main/ui/index.html +++ b/lvl-project/lvl-bundle/src/main/ui/index.html @@ -51,7 +51,7 @@

Loading the LeishVL...

- + \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui/js/apps/collection/export/export_view.js b/lvl-project/lvl-bundle/src/main/ui/js/apps/collection/export/export_view.js index c32a1032..3612c44f 100644 --- a/lvl-project/lvl-bundle/src/main/ui/js/apps/collection/export/export_view.js +++ b/lvl-project/lvl-bundle/src/main/ui/js/apps/collection/export/export_view.js @@ -39,7 +39,7 @@ define([ 'app', 'tpl!apps/collection/export/tpls/collection_export_dataset', 'ch }; // submit request to LVL server var self = this; - $('#export-btn').attr('disabled', 'disabled'); + $('#export-btn').attr('disabled', 'disabled'); var jqxhr = $.ajax({ type : 'POST', contentType : 'application/json', diff --git a/lvl-project/lvl-bundle/src/main/ui/js/apps/open/software/show/tpls/software-releases-section.html b/lvl-project/lvl-bundle/src/main/ui/js/apps/open/software/show/tpls/software-releases-section.html index 23229e82..7adcf5e5 100644 --- a/lvl-project/lvl-bundle/src/main/ui/js/apps/open/software/show/tpls/software-releases-section.html +++ b/lvl-project/lvl-bundle/src/main/ui/js/apps/open/software/show/tpls/software-releases-section.html @@ -16,9 +16,9 @@ 0.2.02 - (Planned in May, 2015) - Planned upgrade - Release notes + May 14th, 2015 + Upgrade + Release notes 0.1.0 @@ -36,7 +36,7 @@

(1) Version 1.0.0 will be the first complete release, expected after the 100% of the functional requirements are fulfilled.

-

(2) Version 0.2.0 will be the first release openly available for public access.

+

(2) Version 0.2.0 is the first release openly available for public access.


Software versioning
diff --git a/lvl-project/lvl-bundle/src/main/ui/js/requirejs_main.js b/lvl-project/lvl-bundle/src/main/ui/js/requirejs_main.js index 2a67cafd..d56b533c 100644 --- a/lvl-project/lvl-bundle/src/main/ui/js/requirejs_main.js +++ b/lvl-project/lvl-bundle/src/main/ui/js/requirejs_main.js @@ -4,7 +4,7 @@ requirejs.config({ /* avoids cache. Remove on production! */ - //urlArgs : 'bust=' + (new Date()).getTime(), + urlArgs : 'bust=' + (new Date()).getTime(), baseUrl : 'js', paths : { /* jQuery JavaScript library */ diff --git a/lvl-project/lvl-bundle/src/main/ui2/css/backgrid-filter.min.css b/lvl-project/lvl-bundle/src/main/ui2/css/backgrid-filter.min.css deleted file mode 100644 index 5f67d690..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/css/backgrid-filter.min.css +++ /dev/null @@ -1 +0,0 @@ -.backgrid-filter.form-search{position:relative;width:248px;height:30px;margin:20px}.backgrid-filter .search{position:absolute;top:50%;left:6px;z-index:1000;width:10px;height:20px;margin-top:-10px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.backgrid-filter .search:before{position:absolute;top:50%;left:0;width:6px;height:6px;margin-top:-6px;background:transparent;border:3px solid gray;-webkit-border-radius:12px;-moz-border-radius:12px;border-radius:12px;content:"";-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.backgrid-filter .search:after{position:absolute;top:50%;left:10px;width:3px;height:7px;margin-top:2px;background-color:gray;content:"";-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.backgrid-filter .clear{position:absolute;top:50%;right:8px;z-index:1000;width:10px;height:20px;margin-top:-10px;font-family:sans-serif;font-size:20px;font-weight:bold;line-height:20px;color:gray;text-decoration:none}.backgrid-filter input[type="search"]{position:absolute;display:inline-block;width:206px;height:20px;padding:4px 6px;font-weight:normal;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #ccc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}.backgrid-filter input{margin:0;font-family:inherit;font-size:100%;line-height:normal}.backgrid-filter input[disabled]{cursor:default}.backgrid-filter input[type="search"]{outline:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:none}.backgrid-filter input[type="search"]::-ms-clear{display:none}.backgrid-filter input::-moz-focus-inner{padding:0;border:0}.backgrid-filter input[type="search"]{padding-right:18px;padding-left:22px} \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/css/backgrid-paginator.min.css b/lvl-project/lvl-bundle/src/main/ui2/css/backgrid-paginator.min.css deleted file mode 100644 index 285fe810..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/css/backgrid-paginator.min.css +++ /dev/null @@ -1 +0,0 @@ -.backgrid-paginator{text-align:center;border-top:0;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.backgrid-paginator ul{display:inline-block;*display:inline;margin:5px 0;*zoom:1}.backgrid-paginator ul>li{display:inline}.backgrid-paginator ul>li>a,.backgrid-paginator ul>li>span{float:left;width:30px;height:30px;padding:0;line-height:30px;text-decoration:none}.backgrid-paginator ul>li>a:hover,.backgrid-paginator ul>.active>a,.backgrid-paginator ul>.active>span{background-color:#f5f5f5}.backgrid-paginator ul>.active>a,.backgrid-paginator ul>.active>span{color:#999;cursor:default}.backgrid-paginator ul>.disabled>span,.backgrid-paginator ul>.disabled>a,.backgrid-paginator ul>.disabled>a:hover{color:#999;cursor:default} \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/css/backgrid-select-all.min.css b/lvl-project/lvl-bundle/src/main/ui2/css/backgrid-select-all.min.css deleted file mode 100644 index 41624eb4..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/css/backgrid-select-all.min.css +++ /dev/null @@ -1 +0,0 @@ -.backgrid .select-row-cell,.backgrid .select-all-header-cell{text-align:center} \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/css/flags.css b/lvl-project/lvl-bundle/src/main/ui2/css/flags.css deleted file mode 100644 index e8af36a7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/css/flags.css +++ /dev/null @@ -1,254 +0,0 @@ -/* Auto-generated with create_flags_cnjs.sh on 2014-08-10 10:25 CEST */ -.flag { - width: 35px; - height: 16px; - background:url(../img/flags.png) no-repeat -} -.flag.flag-ad { background-position: 0 -0px } -.flag.flag-ae { background-position: 0 -16px } -.flag.flag-af { background-position: 0 -32px } -.flag.flag-ag { background-position: 0 -48px } -.flag.flag-ai { background-position: 0 -64px } -.flag.flag-al { background-position: 0 -80px } -.flag.flag-am { background-position: 0 -96px } -.flag.flag-ao { background-position: 0 -112px } -.flag.flag-aq { background-position: 0 -128px } -.flag.flag-ar { background-position: 0 -144px } -.flag.flag-as { background-position: 0 -160px } -.flag.flag-at { background-position: 0 -176px } -.flag.flag-au { background-position: 0 -192px } -.flag.flag-aw { background-position: 0 -208px } -.flag.flag-ax { background-position: 0 -224px } -.flag.flag-az { background-position: 0 -240px } -.flag.flag-ba { background-position: 0 -256px } -.flag.flag-bb { background-position: 0 -272px } -.flag.flag-bd { background-position: 0 -288px } -.flag.flag-be { background-position: 0 -304px } -.flag.flag-bf { background-position: 0 -320px } -.flag.flag-bg { background-position: 0 -336px } -.flag.flag-bh { background-position: 0 -352px } -.flag.flag-bi { background-position: 0 -368px } -.flag.flag-bj { background-position: 0 -384px } -.flag.flag-bl { background-position: 0 -400px } -.flag.flag-bm { background-position: 0 -416px } -.flag.flag-bn { background-position: 0 -432px } -.flag.flag-bo { background-position: 0 -448px } -.flag.flag-bq { background-position: 0 -464px } -.flag.flag-br { background-position: 0 -480px } -.flag.flag-bs { background-position: 0 -496px } -.flag.flag-bt { background-position: 0 -512px } -.flag.flag-bv { background-position: 0 -528px } -.flag.flag-bw { background-position: 0 -544px } -.flag.flag-by { background-position: 0 -560px } -.flag.flag-bz { background-position: 0 -576px } -.flag.flag-ca { background-position: 0 -592px } -.flag.flag-cc { background-position: 0 -608px } -.flag.flag-cd { background-position: 0 -624px } -.flag.flag-cf { background-position: 0 -640px } -.flag.flag-cg { background-position: 0 -656px } -.flag.flag-ch { background-position: 0 -672px } -.flag.flag-ci { background-position: 0 -688px } -.flag.flag-ck { background-position: 0 -704px } -.flag.flag-cl { background-position: 0 -720px } -.flag.flag-cm { background-position: 0 -736px } -.flag.flag-cn { background-position: 0 -752px } -.flag.flag-co { background-position: 0 -768px } -.flag.flag-cr { background-position: 0 -784px } -.flag.flag-cu { background-position: 0 -800px } -.flag.flag-cv { background-position: 0 -816px } -.flag.flag-cw { background-position: 0 -832px } -.flag.flag-cx { background-position: 0 -848px } -.flag.flag-cy { background-position: 0 -864px } -.flag.flag-cz { background-position: 0 -880px } -.flag.flag-de { background-position: 0 -896px } -.flag.flag-dj { background-position: 0 -912px } -.flag.flag-dk { background-position: 0 -928px } -.flag.flag-dm { background-position: 0 -944px } -.flag.flag-do { background-position: 0 -960px } -.flag.flag-dz { background-position: 0 -976px } -.flag.flag-ec { background-position: 0 -992px } -.flag.flag-ee { background-position: 0 -1008px } -.flag.flag-eg { background-position: 0 -1024px } -.flag.flag-eh { background-position: 0 -1040px } -.flag.flag-er { background-position: 0 -1056px } -.flag.flag-es { background-position: 0 -1072px } -.flag.flag-et { background-position: 0 -1088px } -.flag.flag-fi { background-position: 0 -1104px } -.flag.flag-fj { background-position: 0 -1120px } -.flag.flag-fk { background-position: 0 -1136px } -.flag.flag-fm { background-position: 0 -1152px } -.flag.flag-fo { background-position: 0 -1168px } -.flag.flag-fr { background-position: 0 -1184px } -.flag.flag-ga { background-position: 0 -1200px } -.flag.flag-gb { background-position: 0 -1216px } -.flag.flag-gd { background-position: 0 -1232px } -.flag.flag-ge { background-position: 0 -1248px } -.flag.flag-gf { background-position: 0 -1264px } -.flag.flag-gg { background-position: 0 -1280px } -.flag.flag-gh { background-position: 0 -1296px } -.flag.flag-gi { background-position: 0 -1312px } -.flag.flag-gl { background-position: 0 -1328px } -.flag.flag-gm { background-position: 0 -1344px } -.flag.flag-gn { background-position: 0 -1360px } -.flag.flag-gp { background-position: 0 -1376px } -.flag.flag-gq { background-position: 0 -1392px } -.flag.flag-gr { background-position: 0 -1408px } -.flag.flag-gs { background-position: 0 -1424px } -.flag.flag-gt { background-position: 0 -1440px } -.flag.flag-gu { background-position: 0 -1456px } -.flag.flag-gw { background-position: 0 -1472px } -.flag.flag-gy { background-position: 0 -1488px } -.flag.flag-hk { background-position: 0 -1504px } -.flag.flag-hm { background-position: 0 -1520px } -.flag.flag-hn { background-position: 0 -1536px } -.flag.flag-hr { background-position: 0 -1552px } -.flag.flag-ht { background-position: 0 -1568px } -.flag.flag-hu { background-position: 0 -1584px } -.flag.flag-id { background-position: 0 -1600px } -.flag.flag-ie { background-position: 0 -1616px } -.flag.flag-il { background-position: 0 -1632px } -.flag.flag-im { background-position: 0 -1648px } -.flag.flag-in { background-position: 0 -1664px } -.flag.flag-io { background-position: 0 -1680px } -.flag.flag-iq { background-position: 0 -1696px } -.flag.flag-ir { background-position: 0 -1712px } -.flag.flag-is { background-position: 0 -1728px } -.flag.flag-it { background-position: 0 -1744px } -.flag.flag-je { background-position: 0 -1760px } -.flag.flag-jm { background-position: 0 -1776px } -.flag.flag-jo { background-position: 0 -1792px } -.flag.flag-jp { background-position: 0 -1808px } -.flag.flag-ke { background-position: 0 -1824px } -.flag.flag-kg { background-position: 0 -1840px } -.flag.flag-kh { background-position: 0 -1856px } -.flag.flag-ki { background-position: 0 -1872px } -.flag.flag-km { background-position: 0 -1888px } -.flag.flag-kn { background-position: 0 -1904px } -.flag.flag-kp { background-position: 0 -1920px } -.flag.flag-kr { background-position: 0 -1936px } -.flag.flag-kw { background-position: 0 -1952px } -.flag.flag-ky { background-position: 0 -1968px } -.flag.flag-kz { background-position: 0 -1984px } -.flag.flag-la { background-position: 0 -2000px } -.flag.flag-lb { background-position: 0 -2016px } -.flag.flag-lc { background-position: 0 -2032px } -.flag.flag-li { background-position: 0 -2048px } -.flag.flag-lk { background-position: 0 -2064px } -.flag.flag-lr { background-position: 0 -2080px } -.flag.flag-ls { background-position: 0 -2096px } -.flag.flag-lt { background-position: 0 -2112px } -.flag.flag-lu { background-position: 0 -2128px } -.flag.flag-lv { background-position: 0 -2144px } -.flag.flag-ly { background-position: 0 -2160px } -.flag.flag-ma { background-position: 0 -2176px } -.flag.flag-mc { background-position: 0 -2192px } -.flag.flag-md { background-position: 0 -2208px } -.flag.flag-me { background-position: 0 -2224px } -.flag.flag-mf { background-position: 0 -2240px } -.flag.flag-mg { background-position: 0 -2256px } -.flag.flag-mh { background-position: 0 -2272px } -.flag.flag-mk { background-position: 0 -2288px } -.flag.flag-ml { background-position: 0 -2304px } -.flag.flag-mm { background-position: 0 -2320px } -.flag.flag-mn { background-position: 0 -2336px } -.flag.flag-mo { background-position: 0 -2352px } -.flag.flag-mp { background-position: 0 -2368px } -.flag.flag-mq { background-position: 0 -2384px } -.flag.flag-mr { background-position: 0 -2400px } -.flag.flag-ms { background-position: 0 -2416px } -.flag.flag-mt { background-position: 0 -2432px } -.flag.flag-mu { background-position: 0 -2448px } -.flag.flag-mv { background-position: 0 -2464px } -.flag.flag-mw { background-position: 0 -2480px } -.flag.flag-mx { background-position: 0 -2496px } -.flag.flag-my { background-position: 0 -2512px } -.flag.flag-mz { background-position: 0 -2528px } -.flag.flag-na { background-position: 0 -2544px } -.flag.flag-nc { background-position: 0 -2560px } -.flag.flag-ne { background-position: 0 -2576px } -.flag.flag-nf { background-position: 0 -2592px } -.flag.flag-ng { background-position: 0 -2608px } -.flag.flag-ni { background-position: 0 -2624px } -.flag.flag-nl { background-position: 0 -2640px } -.flag.flag-no { background-position: 0 -2656px } -.flag.flag-np { background-position: 0 -2672px } -.flag.flag-nr { background-position: 0 -2688px } -.flag.flag-nu { background-position: 0 -2704px } -.flag.flag-nz { background-position: 0 -2720px } -.flag.flag-om { background-position: 0 -2736px } -.flag.flag-pa { background-position: 0 -2752px } -.flag.flag-pe { background-position: 0 -2768px } -.flag.flag-pf { background-position: 0 -2784px } -.flag.flag-pg { background-position: 0 -2800px } -.flag.flag-ph { background-position: 0 -2816px } -.flag.flag-pk { background-position: 0 -2832px } -.flag.flag-pl { background-position: 0 -2848px } -.flag.flag-pm { background-position: 0 -2864px } -.flag.flag-pn { background-position: 0 -2880px } -.flag.flag-pr { background-position: 0 -2896px } -.flag.flag-ps { background-position: 0 -2912px } -.flag.flag-pt { background-position: 0 -2928px } -.flag.flag-pw { background-position: 0 -2944px } -.flag.flag-py { background-position: 0 -2960px } -.flag.flag-qa { background-position: 0 -2976px } -.flag.flag-re { background-position: 0 -2992px } -.flag.flag-ro { background-position: 0 -3008px } -.flag.flag-rs { background-position: 0 -3024px } -.flag.flag-ru { background-position: 0 -3040px } -.flag.flag-rw { background-position: 0 -3056px } -.flag.flag-sa { background-position: 0 -3072px } -.flag.flag-sb { background-position: 0 -3088px } -.flag.flag-sc { background-position: 0 -3104px } -.flag.flag-sd { background-position: 0 -3120px } -.flag.flag-se { background-position: 0 -3136px } -.flag.flag-sg { background-position: 0 -3152px } -.flag.flag-sh { background-position: 0 -3168px } -.flag.flag-si { background-position: 0 -3184px } -.flag.flag-sj { background-position: 0 -3200px } -.flag.flag-sk { background-position: 0 -3216px } -.flag.flag-sl { background-position: 0 -3232px } -.flag.flag-sm { background-position: 0 -3248px } -.flag.flag-sn { background-position: 0 -3264px } -.flag.flag-so { background-position: 0 -3280px } -.flag.flag-sr { background-position: 0 -3296px } -.flag.flag-st { background-position: 0 -3312px } -.flag.flag-sv { background-position: 0 -3328px } -.flag.flag-sx { background-position: 0 -3344px } -.flag.flag-sy { background-position: 0 -3360px } -.flag.flag-sz { background-position: 0 -3376px } -.flag.flag-tc { background-position: 0 -3392px } -.flag.flag-td { background-position: 0 -3408px } -.flag.flag-tf { background-position: 0 -3424px } -.flag.flag-tg { background-position: 0 -3440px } -.flag.flag-th { background-position: 0 -3456px } -.flag.flag-tj { background-position: 0 -3472px } -.flag.flag-tk { background-position: 0 -3488px } -.flag.flag-tl { background-position: 0 -3504px } -.flag.flag-tm { background-position: 0 -3520px } -.flag.flag-tn { background-position: 0 -3536px } -.flag.flag-to { background-position: 0 -3552px } -.flag.flag-tr { background-position: 0 -3568px } -.flag.flag-tt { background-position: 0 -3584px } -.flag.flag-tv { background-position: 0 -3600px } -.flag.flag-tw { background-position: 0 -3616px } -.flag.flag-tz { background-position: 0 -3632px } -.flag.flag-ua { background-position: 0 -3648px } -.flag.flag-ug { background-position: 0 -3664px } -.flag.flag-um { background-position: 0 -3680px } -.flag.flag-us { background-position: 0 -3696px } -.flag.flag-uy { background-position: 0 -3712px } -.flag.flag-uz { background-position: 0 -3728px } -.flag.flag-va { background-position: 0 -3744px } -.flag.flag-vc { background-position: 0 -3760px } -.flag.flag-ve { background-position: 0 -3776px } -.flag.flag-vg { background-position: 0 -3792px } -.flag.flag-vi { background-position: 0 -3808px } -.flag.flag-vn { background-position: 0 -3824px } -.flag.flag-vu { background-position: 0 -3840px } -.flag.flag-wf { background-position: 0 -3856px } -.flag.flag-ws { background-position: 0 -3872px } -.flag.flag-ye { background-position: 0 -3888px } -.flag.flag-yt { background-position: 0 -3904px } -.flag.flag-za { background-position: 0 -3920px } -.flag.flag-zm { background-position: 0 -3936px } -.flag.flag-zw { background-position: 0 -3952px } diff --git a/lvl-project/lvl-bundle/src/main/ui2/css/lvl.css b/lvl-project/lvl-bundle/src/main/ui2/css/lvl.css deleted file mode 100644 index 12e8726b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/css/lvl.css +++ /dev/null @@ -1,525 +0,0 @@ -@CHARSET "UTF-8"; - -.lvl-main-container { - padding-top: 68px; -} - -.lvl-login-body { - background-color: #0c84e4; -} - -.lvl-jumbo { - margin-top: 12px; - padding-top: 23px; - padding-bottom: 23px; - background-image: url("../img/bg.svg"); - background-size: auto 100%; - background-origin: content-box; - background-repeat: no-repeat; - background-position: center top; - background-image: url("../img/bg.svg"); - background-color: #f9f9f9; -} - -.lvl-info { - background-color: #f9f9f9; -} - -.lvl-social { - background-color: #f9f9f9; -} - -.lvl-centered-nav { - width: 100%; - text-align: center; -} - -.lvl-centered-nav>li { - float: none; - display: inline-block; -} - -} -.lvl-tiles-top { - margin-top: 23px; -} - -.lvl-tiles-bottom { - margin-bottom: 23px; -} - -.lvl-footer { - box-shadow: 0px 500px 0px 500px #ffffff; - margin-top: 23px; - padding-top: 10px; - padding-bottom: 10px; -} - -.lvl-footer-logo { - margin: 20px 14px 20px; - max-width: 100%; - width: auto; - height: 64px; -} - -.lvl-body-logo { - margin: 0px !important; - padding: 0px !important; - max-width: 100%; - width: auto; - height: auto; -} - -@media ( max-width : 767px) { - .lvl-footer-logo { - height: 54px; - } - .lvl-body-logo { - width: 100%; - } -} - -.lvl-nav-tabs-wrapper { - width: 100% !important; - padding: 0%; - margin: 0%; -} - -.lvl-nav-tabs { - position: fixed; - z-index: +1; - width: inherit; - background-color: white; -} - -.lvl-tab-content { - position: relative; - top: 118px; - z-index: 0; - padding-bottom: 100px; -} - -.lvl-dna-sequence { - font: bold 12px 'Courier New', Courier, monospace; - text-transform: uppercase; - line-height: 1.5em; - letter-spacing: 2px; - white-space: pre; - width: 98%; -} - -.lvl-dna-a { - color: rgb(80, 80, 255); -} - -.lvl-dna-g { - color: rgb(0, 192, 0); -} - -.lvl-dna-t { - color: rgb(230, 230, 0); -} - -.lvl-dna-c { - color: rgb(224, 0, 0); -} - -.lvl-dna-u { - color: rgb(204, 153, 0); -} - -div#lvl-qtip-growl-container { - position: fixed; - top: 116px; - right: 10px; - z-index: +1002 !important; -} - -div#lvl-qtip-growl-container .qtip { - position: static; - min-height: 0; - overflow: hidden; - margin: 0 0 5px 0; -} - -div#lvl-search-box { - opacity: 1; - position: fixed; - top: 67px; - left: 0; - background-color: #f9f9f9; - width: 100%; - height: auto; - z-index: 999; -} - -a.lvl-btn-close:hover, a.lvl-btn-close:focus { - border-radius: 1.5em; - color: #e51c23; - background-color: #f9f9f9; -} - -div#lvl-save-items { - color: #ffffff; - background-color: #666666; - opacity: 0.8; - position: fixed; - top: 65px; - right: 0px; - width: auto; - min-height: 100%; - height: 100%; - z-index: 999; - display: -webkit-flex; - -webkit-align-items: center; - display: flex; - align-items: center; -} - -div#lvl-save-items-target { - white-space: nowrap; - margin: 2px; -} - -div#lvl-save-items-target.over { - background-color: #bbbbbb; - outline: 2px dashed #ffffff; -} - -div#lvl-floating-menu-toggle { - position: fixed; - top: 75px; - right: 5px; - z-index: 997; - height: auto; - width: auto; - padding: 0px; - marging: 0px; -} - -div#lvl-floating-menu { - position: fixed; - top: 74px; - right: 4px; - z-index: 998; - height: auto; - width: auto; - padding: 0px; - marging: 0px; -} - -div.lvl-toggle-menu-icon { - -webkit-transform: scale(3.0, 1.8); - -moz-transform: scale(3.0, 1.8); - -ms-transform: scale(3.0, 1.8); - -o-transform: scale(3.0, 1.8); - transform: scale(3.0, 1.8); -} - -input.lvl-add-term-input { - /* considering placeholder "add term" and font width 0.5em */ - width: 4.1em !important; -} - -input.lvl-add-term-input:focus { - width: auto !important; -} - -*[draggable=true] { - cursor: move; - /* prevent the text contents of draggable elements from being selectable */ - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - user-select: none; - /* make elements draggable in old WebKit */ - -khtml-user-drag: element; - -webkit-user-drag: element; -} - -div.lvl-savable { - color: #bbbbbb; -} - -div.lvl-savable:focus, div.lvl-savable:hover { - color: #666666; -} - -@-webkit-keyframes lvl-fade-in { - 0% { opacity: 0; } - 20% { opacity: 0; } - 40% { opacity: 0.3; } - 60% { opacity: 0.5; } - 80% { opacity: 0.9; } - 100% { opacity: 1; } -} - -@keyframes lvl-fade-in { - 0% { opacity: 0; } - 20% { opacity: 0; } - 40% { opacity: 0.3; } - 60% { opacity: 0.5; } - 80% { opacity: 0.9; } - 100% { opacity: 1; } -} - -span.lvl-savable-msg { - display: none; -} - -div.lvl-savable:hover > span.lvl-savable-msg { - display: inline; - -webkit-animation-name: lvl-fade-in; - -webkit-animation-duration: 0.2s; - animation-name: lvl-fade-in; - animation-duration: 0.2s; -} - -/* Anchor link from Bootstrap website */ - -/* Store the link icon as a base64 embedded icon font */ -@font-face { - font-family: 'lvl-permalink'; - src: - url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg6v8yoAAAC8AAAAYGNtYXDL8RqdAAABHAAAADxnYXNwAAAAEAAAAVgAAAAIZ2x5Zkm2oNUAAAFgAAABWGhlYWQAHd4cAAACuAAAADZoaGVhB3sECwAAAvAAAAAkaG10eAYAAEcAAAMUAAAADGxvY2EACgCsAAADIAAAAAhtYXhwAAYAcAAAAygAAAAgbmFtZUQXtNYAAANIAAABOXBvc3QAAwAAAAAEhAAAACAAAwQAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAACDmAAPA/8D/wAPAAEAAAAAAAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEACgAAAAGAAQAAQACACDmAP//AAAAIOYA////4RoCAAEAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAIARwAHA7kDeQA2AG0AAAEnLgEiBg8BDgEUFh8BHgMXNy4DLwEuATQ2PwE+ATIWHwEeARQGDwEeAxU3PgE0JicBLgMnBx4DHwEeARQGDwEOASImLwEuATQ2PwEuAzUHDgEUFh8BHgEyNj8BPgE0Ji8BA7kEI1ldWiPaIyQkIwQDBgYGBFAEBwYHAwQTExMT2xMwMjETBBMTExNjBwkGA5gkIyMk/r4DBgYGBFAEBwYHAwQTExMT2xMwMjETBBMTExNjBwkGA5gkIyMkBCNZXVoj2iMkJCMEA3UEJCMjJNojWV1aIwQDBgUFA1ACBQUFAwQUMDIxE9oTExMTBBMxMjATYxAhISIRmSNaXVkj/sYDBgUFA1ACBQUFAwQUMDIxE9oTExMTBBMxMjATYxAhISIRmSNaXVkjBCQjIyTaI1ldWiMEAAEAAAABAABR/4xQXw889QALBAAAAAAAzqNM0wAAAADOo0zTAAAAAAO5A3kAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAABHA7kAAQAAAAAAAAAAAAAAAAAAAAMAAAAAAgAAAAQAAEcAAAAAAAoArAABAAAAAwBuAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoAKABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoAKABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADAALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) - format('truetype'), - url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAATwAAsAAAAABKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDq/zKmNtYXAAAAFoAAAAPAAAADzL8RqdZ2FzcAAAAaQAAAAIAAAACAAAABBnbHlmAAABrAAAAVgAAAFYSbag1WhlYWQAAAMEAAAANgAAADYAHd4caGhlYQAAAzwAAAAkAAAAJAd7BAtobXR4AAADYAAAAAwAAAAMBgAAR2xvY2EAAANsAAAACAAAAAgACgCsbWF4cAAAA3QAAAAgAAAAIAAGAHBuYW1lAAADlAAAATkAAAE5RBe01nBvc3QAAATQAAAAIAAAACAAAwAAAAMEAAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAg5gADwP/A/8ADwABAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAAoAAAABgAEAAEAAgAg5gD//wAAACDmAP///+EaAgABAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAACAEcABwO5A3kANgBtAAABJy4BIgYPAQ4BFBYfAR4DFzcuAy8BLgE0Nj8BPgEyFh8BHgEUBg8BHgMVNz4BNCYnAS4DJwceAx8BHgEUBg8BDgEiJi8BLgE0Nj8BLgM1Bw4BFBYfAR4BMjY/AT4BNCYvAQO5BCNZXVoj2iMkJCMEAwYGBgRQBAcGBwMEExMTE9sTMDIxEwQTExMTYwcJBgOYJCMjJP6+AwYGBgRQBAcGBwMEExMTE9sTMDIxEwQTExMTYwcJBgOYJCMjJAQjWV1aI9ojJCQjBAN1BCQjIyTaI1ldWiMEAwYFBQNQAgUFBQMEFDAyMRPaExMTEwQTMTIwE2MQISEiEZkjWl1ZI/7GAwYFBQNQAgUFBQMEFDAyMRPaExMTEwQTMTIwE2MQISEiEZkjWl1ZIwQkIyMk2iNZXVojBAABAAAAAQAAUf+MUF8PPPUACwQAAAAAAM6jTNMAAAAAzqNM0wAAAAADuQN5AAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAARwO5AAEAAAAAAAAAAAAAAAAAAAADAAAAAAIAAAAEAABHAAAAAAAKAKwAAQAAAAMAbgACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAA4AAAABAAAAAAACAA4ARwABAAAAAAADAA4AJAABAAAAAAAEAA4AVQABAAAAAAAFABYADgABAAAAAAAGAAcAMgABAAAAAAAKACgAYwADAAEECQABAA4AAAADAAEECQACAA4ARwADAAEECQADAA4AJAADAAEECQAEAA4AVQADAAEECQAFABYADgADAAEECQAGAA4AOQADAAEECQAKACgAYwBpAGMAbwBtAG8AbwBuAFYAZQByAHMAaQBvAG4AIAAwAC4AMABpAGMAbwBtAG8AbwBuaWNvbW9vbgBpAGMAbwBtAG8AbwBuAFIAZQBnAHUAbABhAHIAaQBjAG8AbQBvAG8AbgBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) - format('woff'); - font-weight: normal; - font-style: normal; -} - -.lvl-permalink-icon { - font-family: 'lvl-permalink'; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -/* Link placement and hover behavior */ -.lvl-permalink { - width: 1em; - height: 1em; - margin-left: 0.2em; - opacity: 0; - color: inherit; - text-align: center; -} - -@media ( max-width : 480px) { - .lvl-permalink { - display: none; - } -} - -*:hover>.lvl-permalink, .lvl-permalink:focus { - opacity: .75; - transition: color .16s linear; -} - -*:hover>.lvl-permalink:hover { - opacity: 1; - text-decoration: none; -} - -.lvl-permalink-icon { - font-size: 60%; - vertical-align: .2em; -} - -.lvl-permalink-icon:before { - content: "\e600"; -} - -/* Back to top */ -.lvl-back-to-top { - display: inline-block; - height: 40px; - width: 40px; - position: fixed; - bottom: 40px; - right: 10px; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.05); - /* image replacement properties */ - overflow: hidden; - text-indent: 100%; - white-space: nowrap; - background: rgba(229, 28, 35, 0.65) url(../img/back-to-top-arrow.svg) no-repeat center 50%; - visibility: hidden; - opacity: 0; - -webkit-transition: opacity .3s 0s, visibility 0s .3s; - -moz-transition: opacity .3s 0s, visibility 0s .3s; - transition: opacity .3s 0s, visibility 0s .3s; -} - -.lvl-back-to-top.btt-is-visible, .lvl-back-to-top.btt-fade-out, .no-touch .lvl-back-to-top:hover { - -webkit-transition: opacity .3s 0s, visibility 0s 0s; - -moz-transition: opacity .3s 0s, visibility 0s 0s; - transition: opacity .3s 0s, visibility 0s 0s; -} - -.lvl-back-to-top.btt-is-visible { - /* the button becomes visible */ - visibility: visible; - opacity: 1; -} - -.lvl-back-to-top.btt-fade-out { - /* if the user keeps scrolling down, the button is out of focus and becomes less visible */ - opacity: .5; -} - -.lvl-back-to-top:hover { - background-color: #e51c23; - opacity: 1; -} - -@media only screen and (max-width: 1023px) { - .lvl-back-to-top { - right: 20px; - bottom: 20px; - } -} - -@media only screen and (min-width: 1024px) { - .lvl-back-to-top { - height: 60px; - width: 60px; - right: 30px; - bottom: 30px; - } -} - -/* Override Backgrid.js styles */ -.backgrid-container { - position: relative; - display: block; - width: 100%; - max-width: 100%; - /* height: 465px; */ - height: auto !important; - padding: 0; - overflow: auto; - border: 0; -} - -.backgrid-paginator ul>li>a, .backgrid-paginator ul>li>span { - float: left; - width: 45px !important; - height: 30px; - padding: 0; - line-height: 30px; - text-decoration: none; -} - -@media all and (max-width: 768px) and (min-width: 0px) { - .backgrid-filter input[type="search"] { - width: 106px !important; - } -} - -/* OpenLayers */ -.lvl-map { - height: 400px; - width: 100%; - background: url(../img/textured_paper.jpg) repeat; -} - -.ol-scale-line { - left: 42px !important; -} - -.lvl-restore-map { - top: 65px; - left: .5em; -} - -.ol-touch .lvl-restore-map { - top: 80px; -} - -/* Chart.js */ -.doughnut-legend { - list-style: none; - position: absolute; - left: -22px; - top: 0; -} - -/* Layout for public pages */ -div.lvl-left-border { - border-left: 1px solid rgba(0,0,0,0.3); -} - -section.lvl-left-border-main-section { - padding-left: 1.2em; -} - -div#lvl-toc-nav { - position: fixed; - background-color: #ffffff; - z-index: 1; -} - -div#lvl-toc-nav > ul { - padding: 0; - margin: 0; - list-style: none; -} - -div#lvl-toc-nav > ul:first-child { - padding-top: 15px; -} - -div#lvl-toc-nav > ul > li { - display: block; -} - -div#lvl-toc-nav > ul > li.active > a { - box-shadow: inset 0 -2px 0 #2196f3; - color: #2196f3; -} - -div#lvl-toc-nav > ul > li.active > a:hover { - cursor: default; - color: #2196f3; -} - -div#lvl-toc-nav > ul > li > a { - display: block; - margin: 0; - padding: 0; - margin-bottom: 15px; - color: #666666; - text-decoration: none; - text-align: right; -} - -div#lvl-toc-nav > ul > li > a:hover { - cursor: pointer; - color: #333; -} - -@media ( max-width : 767px) { - div.lvl-left-border { - border-style: none; - } - section.lvl-left-border-main-section { - padding: 0; - } -} - -/* Override Affix (Bootstrap plugin) styles */ - -.affix { - top: 68px; -} - -.affix-bottom { - position: absolute; -} \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/favicon.ico b/lvl-project/lvl-bundle/src/main/ui2/favicon.ico deleted file mode 100644 index 81df6109ae8e53597b5a1f5d1ec44de2ba7ee40f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32038 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 MN%p+ggnMlN7r}~wWB>pF diff --git a/lvl-project/lvl-bundle/src/main/ui2/img/ajax_loader_gray_32.gif b/lvl-project/lvl-bundle/src/main/ui2/img/ajax_loader_gray_32.gif deleted file mode 100644 index 4ea5e513516982fae62e570dca4f6160793b6853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2272 zcma)-c~nz(7RTS3yqA}T=Mz1na-2sIC)znJr+@YSe}Ct5KHq!q z?<2)J|9~VKpn-7!c=P7X{QUgOmoH~#W*$F&JT*0S^XAPfSFT*Vc=61cGXnzyJv}{b z@2a-8R;SbD<>jTNrP;fH-&W3Vi1qTg*ie~L?&IMFgZ3`x*9eLM6d-;3!dnagePa>S z2?G3iF}6%MSMvGUA(6DkYwSCWTh8phmMAJX*`{J>ZUsNIF=oF|u5p#ITcifUdBgR5 z=)7_4F1;-BRCHEkgBP|Vw&=V2Y6Aet1Q>^dqakoChIt1h>;qE|@O63)Cc)(K(b*;0 zsTLQIbx6;KSk2uK2ql#46F>*`@g64q_7-y_Z0vTc1R1nqJ&p3L2*VJ2({dT;99 zX^+ddqVC^+=>Ek?*{!Z?6JJi3+OAz!-b7{vm%n||IezZhtonx+!ok6_sTWp-AF2aF zra#o|T0bW6c*UJHRHjajfd6#L0Fex%53YIMIN2F`Kg6i|UijMkT=(s3%NM^q@t@~h zgM7tI7O!!f=sx%RH50Y1;%3%{Mz@e(nOkO82%w+5H76EaSK3~vyrL#gRlOJ+7JTS1 zx{`xFUAn@X4&UT#RVud2aS;FG5Gh-6cgDg=fYY8-7jMkdXk!sBYZ#m@kF$OX2KIIU zp|q8iU$A!vOBM`E&~Tm`QjQ|&JA{Z>3f32V{JuL>03PWKZ0_Pi)qU-~Fk&0D^|}n4 z7(8{lzq+T_`Il@Vd$vvh&rWEx6F%SX6w+tQ=n%2p*z!fS9#I}Q=t$jiaNbZ&a<4vJ zZC$d_*q+;vLLZ1(MJG6ljWu6vn0}?`iocveKQL(hY+2w+l&TvoV-jmre#M?FG#=%% z9Z1rlSY5I@dIJTC5e3fhYTALi`e1mc0L~!VYYJVCB1$Q4B{PIz-Dae{ZEcqiM%efZ zFxhs@pG4N%F*h4>;Fz+a6em(fsAyWfPntB=SLKRB(U{#2#y8uNk!bE$D} z@%u-LLa#Fk4R~8w&eJM-8MTIrrT72XJvycx-E2J=28xq8?47t;eV{Y~g|KQhCpS&P zY9vxyf~(_9X(%Q>+Jf)zvkgn8vu*6(e*dfusrlpaeH{#Fr2q zCSJ1$;q{Vj6wATnFet>W!UcE~0NHbPvg0*a1kh#LZ1pE~ZJko*k-tBJh8)N9vMx}R zbB!E}gw_BeyEBU4eiln3IzbLTEp+^mr=<(dVW_kVX7}lA`ZeseT zgsaUAU}?2PloyU*m0Hdklq7i+jMo!+XZhhf#~Tf9+&s9s(ii6VMp{9yi->nQV^&#`5@hIgcU= z2?5G>sV5sN3R&KV8!1k+rGXDu=8HRAu%6?`_#i<92?ln-Jl<~k0!X&q<1bsCBIc8;;Km_wnIq(g!S zAezIb@=nJ3@g<@r{(w7VJn>|Xo92b*|IjIFA)V5w5 zDz}ISM@HD}lC=v+fuCL0O`q^jsSa25+l=tVxyTc~vsdS~o(}uU^TKq$W$_e;U?nG} zyyqCv)6o|a)>18#G0$wq3At>iQk14C6EL(_{PdMLzLy(U8=`sWYK`S%r4+k>N(igm zo$a?FExAfnvfUR;!$pm4HGnT#kbPLx2yGuKx*WeMR#TpEfj-Z{1f>YO<-$cAckS=AB6VSD$o`eRERM&32K0 zn`2GxM}Pp7o^r2Xv6Ns2h`|~Xw z#o!@DuPFvXwEZ1jgGgThh;~u%P)qC4!QreC>%^q}wg>$W1K9)7 diff --git a/lvl-project/lvl-bundle/src/main/ui2/img/back-to-top-arrow.svg b/lvl-project/lvl-bundle/src/main/ui2/img/back-to-top-arrow.svg deleted file mode 100644 index 5468d986..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/img/back-to-top-arrow.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - diff --git a/lvl-project/lvl-bundle/src/main/ui2/img/bg.svg b/lvl-project/lvl-bundle/src/main/ui2/img/bg.svg deleted file mode 100644 index 504c4d0b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/img/bg.svg +++ /dev/null @@ -1,118 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/img/blank.gif b/lvl-project/lvl-bundle/src/main/ui2/img/blank.gif deleted file mode 100644 index e565824aafafe632011b281cba976baf8b3ba89a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 qcmZ?wbhEHbWMp7uXkcLY4+e@qSs1y10y+#p0Fq%~V)9{Rum%7ZWeN!Z diff --git a/lvl-project/lvl-bundle/src/main/ui2/img/cnpq.png b/lvl-project/lvl-bundle/src/main/ui2/img/cnpq.png deleted file mode 100644 index 135fce7bb766eb7e1fa8880ad2ae9ed696c9982e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12279 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 O`o&kASg3Hn_`d-6lg-iq diff --git a/lvl-project/lvl-bundle/src/main/ui2/img/cria.jpg b/lvl-project/lvl-bundle/src/main/ui2/img/cria.jpg deleted file mode 100644 index cbc2b0d74fd4265897dea1901377e4121c7457b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7086 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 diff --git a/lvl-project/lvl-bundle/src/main/ui2/img/demo2.png b/lvl-project/lvl-bundle/src/main/ui2/img/demo2.png deleted file mode 100644 index 1658107322200692c81d9eb3020de1d37015a84e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43503 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 YYPJKhY@7YzA4X;99Gz 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 DxsrPD diff --git a/lvl-project/lvl-bundle/src/main/ui2/img/flags.png b/lvl-project/lvl-bundle/src/main/ui2/img/flags.png deleted file mode 100644 index ac796a84d4f89df13e4242262d93ee1fb381f5b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267685 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]!r6sH^2hFzr`|+wSJ#5OT+l1dyMpAJ}|=99m`4 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®0+WYEu>ojsL16of!AF>7XHffr3WpMc7 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 B4|MzlxJE!gP!tdqbw&yM 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 Sq_uqv)efvMVv%!G? diff --git a/lvl-project/lvl-bundle/src/main/ui2/img/microscope.jpg b/lvl-project/lvl-bundle/src/main/ui2/img/microscope.jpg deleted file mode 100644 index 00c2d6c4d17f02b87c840e23691f9e0ff771be8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11568 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 D;~YF9 diff --git a/lvl-project/lvl-bundle/src/main/ui2/img/phlebotomus.jpg b/lvl-project/lvl-bundle/src/main/ui2/img/phlebotomus.jpg deleted file mode 100644 index 34a05744de761e71891411686508daecaf86941f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12824 zcmb7~byOVP)8_}6!QGufgEI`S8EkNu!JXi)36S70xVyUqcMI+o+zFl_A%uhw2v1m^ zci-Rc{sE8i4smJF|G0eQaG? zidIqLW|%YNDK}^x0iRIBz)B#Xj}||>Zjw3r(OrnjE^U$}cdDj^2>}mhjun3w*gwFc z6C7ZV9#^{`Rl81Mn(X9_o-GDgmmb-Sg}O+~Bd-PC`q)Skik{8kD;dNT5@c3}S zh!~qwmL_dO!0?zWbhVIs;-8210$iaev^=W(OVu&NEW?SJ%owGEsC36DfD$}#&Hc() z#;7I+#(0zhT3je5#92NG6F@3rj}WjMVzQH&!3|a6cS%(l_Xpf=1Z379iDDXhuPuBBj zgtS1LrnL|P@HrgRTgW(^D94P+LN9(#F2!UNpIc^bP8ANcM&^Z6zDo3Q zRA*coq-xf&LZciU8Bd3#e7B_S6W_c}xi221;a@JmPRz15cNXy%QE zB^8h^GT;?a9{rf=6#e)Gnton|kQB!}h!t!4;%#c9ri5~Hyq*rqv2_WJClO0IxNm~B zOHv6c%80OyW>*hF#yo0rfxK4ASQMXCga9GwC<}?C_89R)9&e+?iQd4d(1zd3Gk!O; zovj{96t`-l!RFMZ7Lb=$8pF*)gRua9A_-aK=;M&|R5#V3Zn(>MF;UXeY@{j7lrC|H zsCI-NRV5e-q4XIihRp}WHa0It36MoZY=SlknAcr8_K{6pvX+x+TuMZeBqS`Nlxl=f zj7X%RUKkxcI_?TN)7ZU|k_TZ|cD9Ts4BqB57s_OS6;nh^j7^DLRtUwA#1)s9r));C zvN>plkuDUGomegcP6GI4*)}*{>Epzwacim^Kt2y!j~pIgHy;9GLTK;<^ckqbx-1hnZJMFIU+;-Uhc|3E-Q#ONfX zjD$>N{Nzv>3}zNq+2?e|d`@x{5UP8$M$*ahBM$o$z@x-fWP+^x66vlYE3bqk0@HP2 z$0L9AB`M9agqaAop?XQAdP)!wwW@4otY<_dpt09)UqGSW^cRl_b=j#>9k(d3N#CG}wpu;mRXnoI++*~02_)GBkFkUJS ztj(UePFF=%e$d9x24pG&;+0SBit)VXWp7D)2?(FWx>TUBQ6eSU466ck(S^06dsNwQ*EI_ z*JNHffqs{*CM~z$j|q|n)vZd$6|`PV=}$}q*0Fg1VC#@ObENF3(B*l7*RW*E9iaAOioL^$3>(&+hROKvBsQN0f%1CGK{S@#8kvRK{wVE|?j4sj-^Q_IUoJPl6%A`-r#$vC(2~&lDY#I>^*@@0X1gY>xx&@e|Ym{-) zV}84TYr^#5=PGWfGOa$ZP?y~|8(Wvz6lnoIYj|$AQK|&vG&@g|aXssZiwV@l`^7{{ zriiU69SNG$Be(zYUs2NBc_+>Vo)Hf2m=WYzLvbFPR8=~E!FWhP1^%a+ZbVQ;;X@fg zs+e0gZh=WKom0x@*?k=@;l!KrehDWDGX5X%f21PuS6%4d%q)xGRoPWkuv%t9MqxPL zn^C{wYFdlrd>*==H>}(ToQWo?R)O7Gr{+A%~aUQ za||w_8v&JzH9(Ym0l_?5wc`%ng(?l)v%K&_uSViY8&QFzQas*`JXMkwvENKDgLGp# z>!+sSuk!L-F{p^fz8QODANjYB_LcbJ++nY<%n!%s6hy|vzObvZbvcXNE2M@cNtfsPK;!`HAx%SF}HAhnh?N595Cq z2R7gR3-Lt%8}9!n#3%pPQ~w$JU!v&z-xR3-OCj+L6lkbu7$_ig5D@KOE6=Y0Xhe*} z{4zj75+?<0Zyuop)h7M#J>oo+v2_{wH#iv64cX%b#l_l z&n#U#eXjKDjk774<>dFx^oC%YG7U{dZG1PjQ#@wPLi2ojn!5{6}tEkma zrRcB1n9gr?7TSy{8@@@Clm~Yhx}WFX;c`;}PvK~=i?lOS(ND}Kk9Y&;F|@|_{`*wN zi%NSF8zZvuYGkyKt=VxYo}`yw=xLjkQCqe#!L5uLZf)>K~Xj(~pe%SN;(hHs4XB{rOWPe?`45c#kim ze;J&V>z`|)qq}v6bah#?twBCtgaNu@ZI>2fY|Qs=5GQ&CQENQU$C8Ar*PPKu# zI!zHDSE=Itc!r%1RJjrW%fk~wyKmm5vm~OA#EBE^0``$3I)bPbiX$iq>pdfF^UEYh zRlJIGx^dz0_E14nmBSH({{CL}-9q&51cj4#>-+ktG4;!Ab(E)c zF~9EVVd4%=(?h@>v7TB<`;>2&Dhp&XseSE5LL@dDmUuQU=H6b8f<)&A!qizt(~3g* z!-I~g8F_mAvuF&8I_+NJZa&OTgcczeOZ62heoKc}{`r!^iz(X=)j)h7m-{)l(_amR zx`hweUgK+`+GXqdkqu0W$EUcQ4m%(36<$wOtYiJ~G`={%$`{GLm=1{eeE$M!1Q>A% zz;eIGR=m6#9eN`Hi3@F@M!UF%%!)Sq`Nbtr2wE%${IKQm-&wTsR@d~6%1FQv^dyJUDnhipetZWSwuTxrDBdR6#&hhkH?RRh;V0_iAZX#HXS3JJHv zXgSu)ebuZPHh6Qy?fG*NY9MxV+4$PkV^81-FjJpKKSTbBG!gf``{1vx#Hk-HUYOSS zL(1D}y=()3&8fwsropg@iUaxv_lqJss2Pu#pc~A{$1-h9+OSm{_Wt6`-Biv zNWjuE*;|V#lDt2)oWvUR8NjciHr2etUb=+i`^nb-q`0Urz(`^k{28uv=|8H5_uy;T z-|Md^a&)(lEryYSOGwMrEgjN!fOdYJNMY2$zE`A~PL1%T!5TKPeAhCaRic3$;8&!z ztFH|-beKY?C~I-0dr|QOP}z57s-Go`r3kt0ZfmPrjIW&T%*dRIUlAhs7|F>kOnM`3 zn7uvD$&miXl@UEnlaR?z*od(gB=*h@oV-q<1r-UCx-2Znx$6GdWCUg<+j`F^JAVCD z6L!*pq2luL39X;6*RCvQyjwy=;;gpyGmjBwQZF$4X_h#})NCDJd#PP*T3R+dv(@X= z{!_p9WL><$`89U^Df&Ff$2-_w{_Q)C=25nZ{?xfi zXiVJMe=`n0@?)$sEA8{Q@Y6RkRfVAT*7jsTR`sw+-BlVYRAOtzcD54)40Dw{RwAt6ztW;y=9V`$KxwbxlJ%-1_Zj{_6V%{n}_D)LFNtmXd$&HfhYX>b9p(-PkIV zFX}d5C0Qq>v+>m7ml&G(#xC5N>#x2ntyk6bh)L-)_(wJKFS)JToMA0lK_(kbty{?s zJWlAC*AjlT>u*ZsPG3lri65RVm!WT12j10R*GANijws^Pc5lSYUd{M9U1Y2we(_ct z1lIHlX?1CeZUmMvYcl^d;Owczd9NT`4unug;8Xu9Eg{`?)6cr9zx3uz7!)&k7rchh z2ffx4<2)7LYG^X!_`_x!o6yB15xFuLZgR%t1n*=9hmom}4}{l$Kn#Wyr( z|J&jjTV4=8BgVf21@zzLNfZDPBfpF`p_S(|V>}ba^#S-lc!Bbg@mho(u26l7V_9RA zQ(4XT1OU8I9OoHFItr_&P>eccPkqmWC$kpHv=MdlCdqfGa8k3%5^0$bmudYPnMS0` zHPKk=5gC5WPk#dFjK#Y?0b=e?tF3ChQdxg5AMP<9=pXGNaKYjExtN@V4m^*80W_wC z#qhP}5$!u}tO2A-Le>cSK3OA)10-#9-YKe#`?q1{%vgM9jFj4&1S`ScS~%vI{~XYW zWtCLVztt%U+>qWsbf_x(lc>@n{;tb(`=I{weflqwdIn@TkJqV{ZghyX{s~0Uus{u3 zo0YtPg3sLTpHYKYghb4Q&o&y&e66U0qib;^=HHdRB)gvKFr98_ze!B)#9^R6+0EeY z*0YP&jemD zJ6tSj_*==g^HATAaM*IlUGyD^Rjg2%`O&RIYdQ)U*|MMvu&2($GjK8VVvp6%)#%1K zJGsHtC}z(!frTACcN(C^+!#bX@3|FtAa-qgi*n0NK7Eof zELGHZg@Qd6+260&;MXKBNxvUG*310KE2~-M^Wl*;fqcuvswZNVNV6%@S`n>?S{iYllRX8^+rWp>6I_Oab+cAjipQ#tLEHXZ@9)8^A62{RB0(54W%)-Z8yF^_M3x)?mIJYKd(BEDf>X zK>FvRd!Yk>F#BIMIyGfo2;H7+1DP8eP%AuYDDwLx<%^^ncY z%?p1=C9eEoAx{BhOAmp9a~aY5^Ra*Qz#HQs&aeV666!b|QP zoNsqY*XUYV1*snz%nlFviuk_FIxeeoexonaepS{ZWkEtGMfq{3e5|6_ou{bv%C0+c z+v>V({~>Bp8)5ZEQg3X#UfE&~iE#m=kffrSRQ-}D}z*LFj-&ptEcm#70QS}5M z1~*_B16_xgy?E?2g-9_Qz9qNv5t=eg2V&Ww(dm&S6L`K#K6V$mMG*~al^P?b9Oo>W ztvzfl5eskY-F#@GvGtSvF-KgwR6F_8qTy&mGV=4lJvw>jIp0u_8U?l>WPm8MB$kH3 zFud3dVTh*h#ECGf3d;2*;eHe(zsT&Vp zY>^qUDZ%N?o+B%#&A$jc-TNH4BmmNPjXr_G!fXN`XXmZX z%dF^HwloRIZyC?Dd;D&DO5m&Pl9Fo`A_F?m+!kT4&o2pEuIageDpI{^5j~rcb3+=W z*LRC&2Nrk5L2IV1@IxU>kRLjtnkr5nD*J@;D;-n>fmzB_IU5t#J!rM=^P+_sN zaTL|Pu|j4Fneg&@yu@a8>ES8}ZA1Dn6cWdsa~!VB*49_?kB4{0-{3TV8iX@tRJkiH z@iGZ9>{3n5;{oTO=q*7^?Lq8l`(N_oGpcxjl^sfty#cb(Ap0PM4!c8S`yl|!jFM)DjccN}%$ z`o3aMfUX?%n;{gF%>G$QdHvQYF5Y0ZX4bkSUo_-y%n@H(<?hC1P`-CQxr=*VsBmH^PG&$3O#X9U7`N>p}i@@ z`X^55LEu;_H4A#FADB@V-Zet{mAv=j;*eA|c7;-H!}p+6C8z-x=UVE0hstg7Me4!c z-^y!cg{Ib=r6nUvX`}c7V_3Cl0sp*Yf}VnaKVKrn8s^6;e(Fh-5;`p2Pq(sDTIXyP zV!{(-n$@*q@8oH@jzyyeI1?||tA8!LxCo<7efY({#r~;`gza;QWhOZQM+u#2;TTQXbga?J$cg#G{NX zdf!J5FOfB*@D`&Wzl`b~@$7>PfU(cD=5oJ(hkUu^BJYy7M(DoydWcOK-!ErGZq758 z@{RS%NNa46Y#u+bK=ik^LQ794=_sRjl%R%?B92}oshECzx|)fp2%%JLthJhpfeyUk@Y371qTPy1_`B$_t*K)^UM8aDP97*r*@WA7?{WC!tulShpZTe2{ z^C^doBCiB;ugQ_g6S^FSmc!h*qiWO{8ccRhWxD(vgw@HSMgQqt1OBaG5fTG{s8}pv zSS-(tGGb*GQ~)?t1{|ggeC}%#!@wahAR*?n3{0pDAeLbXLjk4&z{JYnkY^bRFa#5r zj0p@;W&y|m!;}F47)yxKvxX&E2Ar(K67u{L#*z$R2?4MGlmMszKr##nzyznl0MFvo z=Uye&zcS)yzW`te%CkF`XV`r5EX^x`3{6&K8FA#RsuYSA0`7t#RNY`0Z;~` z!dOz3fDHeSvLfOCv#j_(6>QHg|BLbe>l=h;2Y~-({Qn^S!S#2-|FkGy5-xw&W!oP_ zA33!}-^V>fi0GFg|!h-LqQ=@WuNKc%qHu1wfZb=v+s z%qov>hx+&1y;rQG)n23ALrdP6&zTnP;+(l(h9F$BjBlv0EO!r;e{*PH?{-Hw{E^2R zhMN+AAx$gKb&f}h-n2`3PC7KnSF)h*Ee08}t9wbjq=3+%`O(Jb%mqX-521bnbcbyY zkcf)#{K&%e==SH`=Qx*yHP8(YcjZJGw{Ukw$HNp3@H7}mkiXT=Y}Crw`Bwt@06azk zD{>)G>oXIx3lW7_vQldVUB%Txxjc2b3$p_8SJVEcl>xAlQ|)8E)Wf>HH~FRRGdP#Xp^x3~>==!GtHtQnQJ0RDx&xfLUlZz-XjxJ(TMoQB@XOn7JfuunwkDgA zX&t|*w9t~l#VD0cHj!VWKw;ZYfCXJTZTGr#TosR9*qF?@VHRcAS-hfB$Hbwj^I-)W z>({reeGJeT?CRJKXx%xg5br6*sME}4Z%ObpZh)O@ev|1#SO?E9tHe2MWKU z>my+X3>CvL;LE8?3RAkUMFHbyS-Un z+%p~wp%;u|j#1KpkJVI+sWVzuLeLvfLUm$0b%)_3eKXXD6eI;s^*~sLZxpq;Yem^G z-FUlF;-Z*{dskA%krv$`gtm@$WU>ffvfziNR{aV;LYAwpfs-bLTcltD8)5a9%|2iR z6y+-|=|-)gPJ0t#p=-H`rLrG>H8@zwXn3DX&y4O{V>t7jO8^3H{hj0bI!iy@wc` zp0ejRY78mNO=ZjMYy5o{lASVgGSjSqua=XVw>ow=!!0n3)sNenszU;eL*5dd%U+t% zCJn-u7glzk@dOwhoQVlFF7#faEHBw!nbhUPl=rKlcLH3-SGV&^Gtkis1( z4&ikqA)TirzW(4--_!HwJ1TTaRJC_k+vF&U>(h8y=x*|TKqQuK{Pvo_q{*j<*ugBa zdPcn*eR7F_6fIZO8goru;?mU)21t2jN#)s_#E6^s8af>MP$88)&6)}APm>Z^@M?_7=sNcjavOiW`>3*jy2Z-bSATd8HgqUI4lku2v zeo!!V*mKXzsxGI;y4l)&;kAlOx{IiryC9VvCLnVh=&9QtdZ!HIE5nNt<(D5|Zrfx? z`C45gw<~;$(AMm%8)YlIH8twPIsYB`Rv442d`;-jipCe^Rw~OY_8q~FN5zg;3`G4e zEa;{$C{Bwb&p64E$|(lCzE`++=uu8Ow=_X&TlaBFz0oaeUz1W)db&c55)dwl0X!l4 zI9Z-Oj332(@53hKAr(`vhFGgm+ZWV9%&v((FVZ!4N*ToD5HTyX!itSF9+gR3`RGX^DQP2- z@jikZ+}0cD8sU4sDF@_Eo6Dc;Vw@VC5Kj9?$3I zddi8@1iI6*VT*`-oIVk>Vu%4$q-+13H4WMS)?tzaMulc+-b2FVh!FLvU=z7Yiu{om z6lSs|S{9oS1oWX)|I^B>niVhTn-++W)L+Z3bRX+JY>=+hdSEh}AE3_w?Sn7iF%^u` zowHfy_zdpFh!N-EvH!9a3m$Xeq+3x`*Sb*4Zjo$Xvl+ap6=y0Rajy?zfV{>3+|dlm zUX@GmY+v)zRklF}O{!IPqsUA!Sf(#%OtPASq|;U`q++qZ`J9Y;lWkbOYMr)X({p}`E6gKkCTBlIH1$}Z!xFB zc)j~8i)yQ{mSjwT0KZ0&U>drn+;Y1KqINb|aa%K7FFLfQ86YTRWkoMfoNZ#NUx6LN zTv^rNcs#jc_H&l~q+JQ6Wg4us-(Y51Em-JXjpYH zvJ00zm+~Umi?_(G(Fv>Fz<8_*$m~^5R#Yb2j;XZ{O4Bp0Pf<>~Ed0Tf1yVJzKXG<1G*C%JVK678N$yO_+fK z5Up<$=0M{>sLip%>}TUg>ZfIniOrGiX|-dnW>UbfBVh{Xi#$yf870)(v(t$LwF!T% z-fU!d(4n60CKM2mz2rO+b?H?0A&y;bmIRy%iwe=ObNQjA)bg0Tu0rrW0V3lt8C0_4 z9>P{Va$7c$aBx%C*2`>yIE|mRTb|z(=e5Uh_tqx) z%7=l5l3E(RAUDV7ul97@?UDL)O376 zi0fL!_2o;Xe{Q)}Pv^UAoct0dgKsx^agwZG=XRO>T~vNLpSNELK*my4>6VBsw_MzwCe z7g|;=baC`9k1g@JC3@rLc1Pr-D8?2p^zz867VFCRk@a-Z{ML5Dtw0Jjcxo-pN9D+#FDf?A>yRRJQ`vZIZOc{Agi%Ow z6#nxbTJSx+sMw0Q6v{T}n!IsBakv zU=mUrwcpXxX};{Fr~h2o+QfxC@(kJN;qd%yEY-3$sNZGSyNs4jkzP9^zs!S*G+QUU zAI=k_7x`x<7%wwAR=}N{k^8Z`>I)z36;`yTdbHS)1yZh9bQ%6|t>}TmE%_n}p%0r> zl^&I<<{%TJ7O;pCflT9ZKd9$KmQJ2YPG_&!LX!J+$|F#V3TQGJkHR+3e9?%WiNTSO`RQbfxD zbvR@arIGh78+5Z0t^Ax4quCbc@+0Le_r*^&0&a{yq<}c^;F0nzEqM>G`6J>8Biq%= z$-1?ZII28$a*ZT^gl@I3{>}U?8M)ua2>54`S0ThH7y?}9QI{4-o3&E%Xeg%7PpvRM z%e$3Wv$9uijtXwcz?WK4v{r?^*K00i_tY<%eW}!o<0J;S1Ou2ZElmfzl}XSKR)kbz z^&m`}%}&|D>_%#dwDL5)Rnj(&enQck{A(~YA%Io+mD=bD{@*0AXifv;cWnU2-eJSn zg1S0KbBUTP#X5;$^K3hcz?Yr}>xVgYZtc!5V=7~bW=4VH^%bzk38Gi^w%WQnwg`Uy zZ0xVg1A^Z%e5KR%zHI_TUFtj$*f-0<1OlbldREVEim$D^D{il6y)hMn%O!UGQETIB z4KrOe((W@-@hro6mv|enK_Gy!V@CiZwIiV9pl8+$*PUZs@&~?sJjsiE73ljAqa#95 z0gt34UCJfqs^}|yjbV-xJO+MCq-#xe>9(wYSGA_NPqb(T2E6WM=TtjQ>N|>NaDpd9 z9m0x22PKM6dTSF?@2($EwjQjQ+;dR;O^r}b!uvRf?8YltK3C>9_yL20nEGpyUlp_v zFZC!Pd5J$iw9~faa?(s^jZ=$Wj$+b#2tcS1S;o-y1i;1dr}!9!BZNKdgKxd=-ddoV zP>5TQM|+05}w>xpQf?uX&u)02MjyCY`eBs&`7PGBz@dgw%)xz?EI@O1fb8cZ2HUTq~!UfBuEZ2Qt++Afj6AvES zKBKsa&5o9vpC=H;mRZYKEUCcU5K$}2h|PWVQm@ftu%mB=-?#8V?bUz^H`p_<)zsWi?bhOE~Dh8SnkeE82$!`}Og=h`lWHL5Px|C&_9AtiwrC6*) zkqGohUo!PqlN6qXn#lKgG`Bk^*6XjeT^>y}P^ zCDgB#XteDIbs%^%J5!(013yb!4=!#GF^0z><%o!85&5kcx`bZ7ywtm<(6E7D+DaY8 m#Cw*kVdw{HgrJJ}>Pn@iGtZokCIf)emDcAgi1*8<&Hn)(1M!3a diff --git a/lvl-project/lvl-bundle/src/main/ui2/img/textured_paper.jpg b/lvl-project/lvl-bundle/src/main/ui2/img/textured_paper.jpg deleted file mode 100644 index b0bfa66c44529617dfe5d929451b1f6c5fb1a570..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3445 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 e+v)$e^#1|Gs1g*m1^YSx0000%#y diff --git a/lvl-project/lvl-bundle/src/main/ui2/img/upv.png b/lvl-project/lvl-bundle/src/main/ui2/img/upv.png deleted file mode 100644 index 416c311034c3db3d7b8c62b2e163780852a393c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22592 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 - - - - - - - Leishmaniasis Virtual Laboratory | LVL - - - - -
- -
-
-

Loading the LeishVL...

- Loading... -
-
- -
- -
- - - -
- - - - - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/app.js b/lvl-project/lvl-bundle/src/main/ui2/js/app.js deleted file mode 100644 index 3478b215..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/app.js +++ /dev/null @@ -1,136 +0,0 @@ -/** - * RequireJS module that defines the LVL main application. - */ - -define([ 'marionette', 'apps/config/marionette/regions/dialog' ], function(Marionette) { - 'use strict'; - var Lvl = new Marionette.Application(); - - require([ 'domReady' ], function(domReady) { - domReady(function() { - // browser window scroll (in pixels) after which the "back to top" - // link is shown - var offset = 300, - // browser window scroll (in pixels) after which the "back to top" - // link opacity is reduced - offset_opacity = 1200, - // duration of the top scrolling animation (in ms) - scroll_top_duration = 700, - // grab the "back to top" link - $back_to_top = $('.lvl-back-to-top'); - // hide or show the "back to top" link - $(window).scroll(function() { - $back_to_top.removeAttr('style'); - ($(this).scrollTop() > offset) ? $back_to_top.addClass('btt-is-visible') : $back_to_top.removeClass('btt-is-visible btt-fade-out'); - if ($(this).scrollTop() > offset_opacity) { - $back_to_top.addClass('btt-fade-out'); - } - }); - // smooth scroll to top - $back_to_top.on('click', function(event) { - event.preventDefault(); - $('body,html').animate({ - scrollTop : 0, - }, scroll_top_duration); - }); - }); - }); - - Lvl.addRegions({ - headerRegion : '#header-region', - mainRegion : '#main-region', - dialogRegion : Marionette.Region.Dialog.extend({ - el : '#dialog-region' - }), - fullpageRegion : '#fullpage-region', - footerRegion : '#footer-region' - }); - - var flash = { - params : {}, - addParams : function(options) { - this.params = options || {}; - }, - reset : function() { - this.params = {}; - } - }; - - Lvl.flash = function(params) { - flash.addParams(params); - return this; - }; - - Lvl.flashed = function() { - var params = flash.params; - flash.reset(); - return params; - }; - - Lvl.navigate = function(route, options) { - options || (options = {}); - Backbone.history.navigate(route, options); - }; - - Lvl.getCurrentRoute = function() { - return Backbone.history.fragment - }; - - Lvl.vent = new Backbone.Wreqr.EventAggregator(); - - Lvl.startSubApp = function(appName, args) { - var currentApp = appName ? Lvl.module(appName) : null; - if (Lvl.currentApp === currentApp) { - return; - } - if (Lvl.currentApp) { - Lvl.currentApp.stop(); - } - Lvl.currentApp = currentApp; - if (currentApp) { - currentApp.start(args); - } - }; - - var History = Backbone.History.extend({ - loadUrl : function() { - var match = Backbone.History.prototype.loadUrl.apply(this, arguments); - if (!match) { - if (Lvl.getCurrentRoute() !== '') { - require([ 'apps/not-found/not-found_app' ], function() { - Lvl.execute('set:active:header', 'home'); - Lvl.execute('set:active:footer', 'home'); - Lvl.startSubApp('NotFoundApp'); - Lvl.execute('show:not_found'); - }); - } - } - return match; - } - }); - - Lvl.on('start', function() { - if (Backbone.history) { - Backbone.history instanceof History || (Backbone.history = new History()); - require([ 'apps/config/marionette/styles/style', 'apps/header/header_app', 'apps/footer/footer_app', 'apps/home/home_router', - 'apps/access/access_router', 'apps/collection/collection_router', 'apps/social/social_router', 'apps/e-compendium/e-compendium_router', - 'apps/analysis/analysis_router', 'apps/enm/enm_router', 'apps/drive/drive_router', 'apps/saved-items/saved-items_router', - 'apps/settings/settings_router', 'apps/open/about/about_router', 'apps/open/documentation/documentation_router', - 'apps/open/support/support_router', 'apps/open/software/software_router', 'apps/admin/admin_router' ], function(Style) { - // load base styles - new Style().loadBaseStyles(); - // start history - Backbone.history.start(); - // only if the initial call was done from the root folder, load - // the default route - if (Lvl.getCurrentRoute() === '') { - Lvl.navigate('home', { - trigger : true - }); - } - }); - } - }); - - return Lvl; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/access_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/access_app.js deleted file mode 100644 index 77889449..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/access_app.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * RequireJS module that defines the sub-application: access. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('AccessApp', function(AccessApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - AccessApp.startWithParent = false; - - AccessApp.onStart = function() { - console.log('starting AccessApp'); - }; - - AccessApp.onStop = function() { - console.log('stopping AccessApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('show:login', function(target, reason) { - require([ 'apps/access/login/access_login_ctrl' ], function(LoginController) { - LoginController.login(target, reason); - }); - }); - - Lvl.commands.setHandler('show:authz:callback', function(provider, section, email, access_token) { - require([ 'apps/access/authz-callback/authz_callback_ctrl' ], function(AuthzCallbackController) { - AuthzCallbackController.authorize(provider, section, email, access_token); - }); - }); - - Lvl.commands.setHandler('show:registration', function() { - require([ 'apps/access/register/access_register_ctrl' ], function(RegisterController) { - RegisterController.register(); - }); - }); - - Lvl.commands.setHandler('show:account:validation', function(email, code) { - require([ 'apps/access/account-validation/account-validation_ctrl' ], function(AccountController) { - AccountController.validate(email, code); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/access_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/access_router.js deleted file mode 100644 index e67f319f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/access_router.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: access. - */ - -define([ 'app', 'routefilter' ], function(Lvl) { - Lvl.module('Routers.AccessApp', function(LoginAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var Router = Backbone.Router.extend({ - routes : { - 'login(/:target)(/:reason)' : 'showLogin', - 'auth/:provider/:section?email=:email&access_token=:access_token' : 'authorizationCallback', - 'register' : 'showRegistration', - 'account/validation(/:email)(/:code)' : 'validateAccount', - 'logout' : 'logout' - }, - before : function(route) { - require([ 'apps/access/access_app' ], function() { - if (route !== 'logout') { - Lvl.execute('set:active:header', 'no_header'); - Lvl.execute('set:active:footer', 'no_footer'); - } - Lvl.startSubApp('AccessApp'); - }); - }, - showLogin : function(target, reason) { - Lvl.execute('show:login', target, reason); - }, - authorizationCallback : function(provider, section, email, access_token) { - Lvl.execute('show:authz:callback', provider, section, email, access_token); - }, - showRegistration : function() { - Lvl.execute('show:registration'); - }, - validateAccount : function(email, code) { - Lvl.execute('show:account:validation', email, code); - }, - logout : function() { - require([ 'apps/config/marionette/configuration' ], function(Configuration) { - new Configuration().deleteSession(); - }); - Lvl.navigate('home', { - trigger : true - }); - } - }); - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/account-validation/account-validation_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/account-validation/account-validation_ctrl.js deleted file mode 100644 index 34086feb..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/account-validation/account-validation_ctrl.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * RequireJS module that defines the controller: access->account-validation. - */ - -define([ 'app', 'apps/access/account-validation/account-validation_view' ], function(Lvl, View) { - Lvl.module('AccessApp.AccountValidation', function(AccountValidation, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - AccountValidation.Controller = { - validate : function(email, code) { - var view = new View.Content({ - model : new Backbone.Model({ - 'email' : email, - 'code' : code - }) - }); - Lvl.mainRegion.show(view); - } - } - }); - return Lvl.AccessApp.AccountValidation.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/account-validation/account-validation_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/account-validation/account-validation_view.js deleted file mode 100644 index 1b52601a..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/account-validation/account-validation_view.js +++ /dev/null @@ -1,110 +0,0 @@ -/** - * RequireJS module that defines the view: access->account-validation. - */ - -define([ 'app', 'tpl!apps/access/account-validation/templates/account-validation', 'apps/config/marionette/configuration', 'bootstrapvalidator', - 'backbone.syphon' ], function(Lvl, AccountValidationTpl, Configuration) { - Lvl.module('AccessApp.AccountValidation.View', function(View, Lvl, Backbone, Marionette, $, _) { - var lvlAuth = new Configuration().get('auth', ''); - View.Content = Marionette.ItemView.extend({ - template : AccountValidationTpl, - templateHelpers : { - accountEmail : function() { - return this.email ? decodeURIComponent(this.email) : ''; - }, - validationCode : function() { - return this.code ? decodeURIComponent(this.code) : ''; - } - }, - events : { - 'click button#submit_validation_btn' : 'submitValidation' - }, - submitValidation : function(e) { - e.preventDefault(); - $('#submit_validation_btn').attr('disabled', 'disabled'); - // show loading view - require([ 'common/views' ], function(CommonViews) { - var loadingView = new CommonViews.Loading(); - Lvl.fullpageRegion.show(loadingView); - }); - var formData = Backbone.Syphon.serialize(this); - var requestData = { - 'activationCode' : formData.code, - 'user' : { - 'email' : formData.email - } - }; - // submit request to LVL server - var self = this; - var jqxhr = $.ajax({ - type : 'PUT', - contentType : 'application/json', - crossDomain : true, - url : lvlAuth + '/pending_users/' + encodeURIComponent(formData.email), - data : JSON.stringify(requestData) - }).always(function() { - Lvl.fullpageRegion.reset(); - }).done(function(data, textStatus, request) { - Lvl.navigate('login', { - trigger : true, - replace : true - }); - }).fail(function() { - $('#alertBox').removeClass('hidden'); - }); - }, - onBeforeRender : function() { - $('body').addClass('lvl-login-body'); - }, - onShow : function() { - $('#validationForm').on('init.form.bv', function(e, data) { - data.bv.disableSubmitButtons(true); - }).bootstrapValidator({ - feedbackIcons : { - valid : 'fa fa-check', - invalid : 'fa fa-times', - validating : 'fa fa-spinner fa-spin' - }, - submitButtons : 'button[type="submit"]', - fields : { - 'email' : { - verbose : false, - validators : { - notEmpty : { - message : 'The email is required and cannot be empty' - }, - emailAddress : { - message : 'The input is not a valid email address' - } - } - }, - 'code' : { - validators : { - notEmpty : { - message : 'The validation code is required and cannot be empty' - }, - stringLength : { - min : 6, - max : 12, - message : 'The validation code must be more than 6 and less than 12 characters long' - } - } - } - } - }).on('success.field.bv', function(e, data) { - var isValid = data.bv.isValid(); - data.bv.disableSubmitButtons(!isValid); - }); - if (this.model.get('email') && this.model.get('code')) { - $('#validationForm').bootstrapValidator('validate'); - $('#submit_validation_btn').focus(); - } - }, - onDestroy : function() { - $('body').removeClass('lvl-login-body'); - Lvl.fullpageRegion.reset(); - } - }); - }); - return Lvl.AccessApp.AccountValidation.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/account-validation/templates/account-validation.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/account-validation/templates/account-validation.html deleted file mode 100644 index 7eeb153b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/account-validation/templates/account-validation.html +++ /dev/null @@ -1,42 +0,0 @@ -
- -
-
-
-
-
- Registration successful -
-

- Thank you for registering at . - An email has been sent to you with a code which you may use to activate your account. Please, check your - mailbox and enter the code below. Sometimes this can be marked as Spam so check your filtered folder too. - If nothing has arrived within 5 minutes click here and we will send you - the code again. -

-
-
- - - The email address that you provided during registration. -
-
- - - The 6-12 characters code that has been sent to you by email. -
- -
-
-
-
-
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/authz-callback/authz_callback_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/authz-callback/authz_callback_ctrl.js deleted file mode 100644 index 3e38fc0f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/authz-callback/authz_callback_ctrl.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * RequireJS module that defines the controller: access->authorization callback. - */ - -define([ 'app', 'apps/config/marionette/configuration' ], function(Lvl, Configuration) { - Lvl.module('AccessApp.AuthzCallback', function(AuthzCallback, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - AuthzCallback.Controller = { - authorize : function(provider, section, email, access_token) { - var provider2 = provider || 'linkedin'; - var section2 = section || 'home'; - if (email && access_token) { - var config = new Configuration(); - config.saveSession(decodeURIComponent(email), decodeURIComponent(access_token), provider2, false); - Lvl.navigate(decodeURIComponent(section2), { - trigger : true, - replace : true - }); - } else { - Lvl.navigate('login/' + target + '/refused', { - trigger : true, - replace : true - }); - } - } - } - }); - return Lvl.AccessApp.AuthzCallback.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/privacy_policy_viewer.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/privacy_policy_viewer.js deleted file mode 100644 index 96905bfc..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/privacy_policy_viewer.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * RequireJS module that defines the view: access->legal->privacy policy viewer. - */ - -define([ 'app', 'tpl!apps/access/legal/templates/privacy_policy_viewer' ], function(Lvl, PrivacyPolicyTpl) { - Lvl.module('AccessApp.PrivacyPolicy.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - View.Content = Marionette.ItemView.extend({ - template : PrivacyPolicyTpl - }); - }); - return Lvl.AccessApp.PrivacyPolicy.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/templates/privacy_policy_viewer.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/templates/privacy_policy_viewer.html deleted file mode 100644 index 95aa2fec..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/templates/privacy_policy_viewer.html +++ /dev/null @@ -1,27 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/templates/terms_of_use_viewer.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/templates/terms_of_use_viewer.html deleted file mode 100644 index bf020303..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/templates/terms_of_use_viewer.html +++ /dev/null @@ -1,27 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/terms_of_use_viewer.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/terms_of_use_viewer.js deleted file mode 100644 index 428a9b06..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/legal/terms_of_use_viewer.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * RequireJS module that defines the view: access->legal->terms of use viewer. - */ - -define([ 'app', 'tpl!apps/access/legal/templates/terms_of_use_viewer' ], function(Lvl, TermsOfUseTpl) { - Lvl.module('AccessApp.TermsOfUse.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - View.Content = Marionette.ItemView.extend({ - template : TermsOfUseTpl - }); - }); - return Lvl.AccessApp.TermsOfUse.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/login/access_login_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/login/access_login_ctrl.js deleted file mode 100644 index 6438244a..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/login/access_login_ctrl.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * RequireJS module that defines the controller: access->login. - */ - -define([ 'app', 'apps/access/login/access_login_view' ], function(Lvl, View) { - Lvl.module('AccessApp.Login', function(Login, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Login.Controller = { - login : function(target, reason) { - var view = new View.Content({ - model : new Backbone.Model({ - 'target' : target, - 'reason' : reason - }) - }); - Lvl.mainRegion.show(view); - } - } - }); - return Lvl.AccessApp.Login.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/login/access_login_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/login/access_login_view.js deleted file mode 100644 index 84fc738f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/login/access_login_view.js +++ /dev/null @@ -1,157 +0,0 @@ -/** - * RequireJS module that defines the view: access->login. - */ - -define([ 'app', 'tpl!apps/access/login/templates/login', 'apps/config/marionette/configuration', 'chance', 'bootstrapvalidator' ], function(Lvl, LoginTpl, - Configuration, Chance) { - Lvl.module('AccessApp.Login.View', function(View, Lvl, Backbone, Marionette, $, _) { - var config = new Configuration(); - View.Content = Marionette.ItemView.extend({ - template : LoginTpl, - templateHelpers : { - alertMessage : function() { - var message; - switch (this.reason) { - case "refused": - message = 'Authorization has been refused for the provided credentials.'; - break; - case "unauthenticated": - message = 'The section you are trying to access requires authentication.'; - break - default: - message = 'The application has encountered an unknown error.'; - } - return message; - } - }, - events : { - 'click a#signup_linkedin_btn' : 'signupLinkedin' - }, - signupLinkedin : function(e) { - e.preventDefault(); - var self = this; - $('#signup_linkedin_btn').attr('disabled', 'disabled'); - // show loading view - require([ 'common/views' ], function(CommonViews) { - var loadingView = new CommonViews.Loading(); - Lvl.fullpageRegion.show(loadingView); - }); - var challenge = new Chance().string({ - length : 16, - pool : 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' - }); - // register state with LVL server - var target = self.model.get('target') || 'home'; - var jqxhr = $.ajax({ - type : 'POST', - contentType : 'application/x-www-form-urlencoded; charset=UTF-8', - crossDomain : true, - url : config.get('auth') + '/linkedin/state', - data : { - 'state' : challenge, - 'redirect_uri' : config.redirectUri(), - 'callback' : config.get('endpoint') + '/#auth/linkedin/' + target - } - }).done(function(data, textStatus, request) { - window.location.replace(config.linkedInAuthEndpoint(challenge)); - }).fail(function() { - $('#alertBox').removeClass('hidden'); - }).always(function() { - Lvl.fullpageRegion.reset(); - }); - }, - onBeforeRender : function() { - $('body').addClass('lvl-login-body'); - }, - onShow : function() { - var target = this.model.get('target') || 'home'; - $('#login-remember').focus(); - $('#login-pass').focus(); - $('#login-email').focus(); - if (this.model.get('reason')) { - $('#alertBox').removeClass('hidden'); - } - $('#signinForm').on('init.form.bv', function(e, data) { - data.bv.disableSubmitButtons(true); - }).bootstrapValidator({ - submitButtons : 'button[type="submit"]', - fields : { - 'login-email' : { - validators : { - notEmpty : { - message : 'The email is required and cannot be empty' - }, - emailAddress : { - message : 'The input is not a valid email address' - } - } - }, - 'login-pass' : { - validators : { - notEmpty : { - message : 'The password is required and cannot be empty' - } - } - } - } - }).on('success.field.bv', function(e, data) { - var isValid = data.bv.isValid(); - data.bv.disableSubmitButtons(!isValid); - }).on( - 'success.form.bv', - function(e) { - e.preventDefault(); - $('#submit-login-button').blur(); - // show loading view - require([ 'common/views' ], function(CommonViews) { - var loadingView = new CommonViews.Loading(); - Lvl.fullpageRegion.show(loadingView); - }); - // contact the LVL authorization service - var jqxhr = $.ajax({ - type : 'POST', - url : config.get('auth') + '/token', - data : { - 'client_id' : config.get('oauth2_app').client_id, - 'client_secret' : config.get('oauth2_app').client_secret, - 'grant_type' : 'password', - 'username' : $('input[name=login-email]').val(), - 'password' : $('input[name=login-pass]').val(), - 'use_email' : 'true' - }, - headers : { - 'Content-Type' : 'application/x-www-form-urlencoded' - } - }).always(function() { - Lvl.fullpageRegion.reset(); - }); - jqxhr.done(function(data) { - if (data['access_token'] !== undefined) { - config.saveSession($('input[name=login-email]').val(), data['access_token'], 'lvl', $('input[name=login-remember]').is( - ":checked")); - Lvl.navigate(decodeURIComponent(target), { - trigger : true - }); - } else { - Lvl.navigate('login/' + target + '/invalid_server_response', { - trigger : true, - replace : true - }); - } - }); - jqxhr.fail(function() { - Lvl.navigate('login/' + target + '/refused', { - trigger : true, - replace : true - }); - }); - }); - }, - onDestroy : function() { - $('body').removeClass('lvl-login-body'); - Lvl.fullpageRegion.reset(); - } - }); - }); - return Lvl.AccessApp.Login.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/login/templates/login.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/login/templates/login.html deleted file mode 100644 index f2ca411c..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/login/templates/login.html +++ /dev/null @@ -1,59 +0,0 @@ -
- -
-
-
-
-
- Sign in to LeishVL -
- -
- -
-
-
- -
- -
-
-
-
-
- -
-
-
-
- -
-
-
- -
-
-
-
-
-
-
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/profile/profile_viewer.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/profile/profile_viewer.js deleted file mode 100644 index 22db46d3..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/profile/profile_viewer.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * RequireJS module that defines the view: access->profile->user profile viewer. - */ - -define([ 'app', 'tpl!apps/access/profile/templates/profile' ], function(Lvl, UserProfileTpl) { - Lvl.module('AccessApp.UserProfile.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - View.Content = Marionette.ItemView.extend({ - template : UserProfileTpl, - templateHelpers : function() { - return { - username : this.model.get('userid'), - provider : this.model.get('provider') || 'lvl', - formattedname : this.model.get('firstname') + ' ' + this.model.get('lastname'), - pictureUrl : this.model.get('pictureUrl'), - roles : (this.model.get('roles') || [ 'user' ]).join(', ') - } - }, - initialize : function() { - this.listenTo(this.model, 'change', this.render); - var self = this; - self.model.fetch({ - reset : true - }); - } - }); - }); - return Lvl.AccessApp.UserProfile.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/profile/templates/profile.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/profile/templates/profile.html deleted file mode 100644 index 9ed82c14..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/profile/templates/profile.html +++ /dev/null @@ -1,22 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/register/access_register_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/register/access_register_ctrl.js deleted file mode 100644 index 7c6a66a8..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/register/access_register_ctrl.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * RequireJS module that defines the controller: access->register. - */ - -define([ 'app', 'apps/access/register/access_register_view' ], function(Lvl, View) { - Lvl.module('AccessApp.Register', function(Register, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Register.Controller = { - register : function() { - var view = new View.Content(); - view.on('access:view:privacy_policy', function(accession) { - require([ 'apps/access/legal/privacy_policy_viewer' ], function(PrivacyPolicyView) { - var dialogView = new PrivacyPolicyView.Content(); - Lvl.dialogRegion.show(dialogView); - }); - }); - view.on('access:view:terms_and_conditions', function(accession) { - require([ 'apps/access/legal/terms_of_use_viewer' ], function(TermsOfUseView) { - var dialogView = new TermsOfUseView.Content(); - Lvl.dialogRegion.show(dialogView); - }); - }); - Lvl.mainRegion.show(view); - } - } - }); - return Lvl.AccessApp.Register.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/register/access_register_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/register/access_register_view.js deleted file mode 100644 index bd37d362..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/register/access_register_view.js +++ /dev/null @@ -1,186 +0,0 @@ -/** - * RequireJS module that defines the view: login->register. - */ - -define([ 'app', 'tpl!apps/access/register/templates/register', 'apps/config/marionette/styles/style', 'apps/config/marionette/configuration', - 'bootstrapvalidator', 'backbone.syphon' ], function(Lvl, RegisterTpl, Style, Configuration) { - Lvl.module('AccessApp.Register.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var lvlAuth = new Configuration().get('auth', ''); - View.Content = Marionette.ItemView.extend({ - template : RegisterTpl, - events : { - 'click a#privacy_policy_btn' : 'showPrivacyPolicy', - 'click a#terms_and_conditions_btn' : 'showTermsAndConditions', - 'click button#sign_up_btn' : 'signUp' - }, - showPrivacyPolicy : function(e) { - e.preventDefault(); - this.trigger('access:view:privacy_policy'); - }, - showTermsAndConditions : function(e) { - e.preventDefault(); - this.trigger('access:view:terms_and_conditions'); - }, - signUp : function(e) { - e.preventDefault(); - $('#sign_up_btn').attr('disabled', 'disabled'); - // show loading view - require([ 'common/views' ], function(CommonViews) { - var loadingView = new CommonViews.Loading(); - Lvl.fullpageRegion.show(loadingView); - }); - var formData = Backbone.Syphon.serialize(this); - var requestData = { - 'userid' : formData.username, - 'email' : formData.email, - 'password' : formData.password, - 'firstname' : formData.firstname, - 'lastname' : formData.lastname, - 'industry' : formData.institution_type, - 'positions' : [ formData.institution ] - }; - // submit request to LVL server - var self = this; - var jqxhr = $.ajax({ - type : 'POST', - contentType : 'application/json', - crossDomain : true, - url : lvlAuth + '/pending_users', - data : JSON.stringify(requestData) - }).always(function() { - Lvl.fullpageRegion.reset(); - }).done(function(data, textStatus, request) { - Lvl.navigate('account/validation/' + encodeURIComponent(formData.email), { - trigger : true, - replace : true - }); - }).fail(function() { - $('#alertBox').removeClass('hidden'); - }); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - new Style().loadCss(Lvl.request('styles:form-validation:entities').toJSON()); - }); - $('body').addClass('lvl-login-body'); - }, - onShow : function() { - $('#signupForm').on('init.form.bv', function(e, data) { - data.bv.disableSubmitButtons(true); - }).bootstrapValidator({ - feedbackIcons : { - valid : 'fa fa-check', - invalid : 'fa fa-times', - validating : 'fa fa-spinner fa-spin' - }, - submitButtons : 'button[type="submit"]', - fields : { - 'username' : { - verbose : false, - validators : { - notEmpty : { - message : 'The username is required and cannot be empty' - }, - different : { - field : 'password', - message : 'The username cannot be same as password' - }, - stringLength : { - min : 3, - max : 24, - message : 'The username must be more than 3 and less than 24 characters long' - }, - regexp : { - regexp : /^[a-zA-Z0-9_]+$/, - message : 'The username can only consist of alphabetical, number and underscore' - }, - remote : { - message : 'The username is not available', - url : lvlAuth + '/pending_users/check_availability', - data : { - type : 'username' - }, - type : 'POST', - delay : 2000, - threshold : 3 - } - } - }, - 'firstname' : { - verbose : false, - validators : { - notEmpty : { - message : 'The name is required and cannot be empty' - }, - stringLength : { - min : 1, - max : 128, - message : 'The name must be more than 1 and less than 128 characters long' - } - } - }, - 'lastname' : { - verbose : false, - validators : { - notEmpty : { - message : 'The lastname is required and cannot be empty' - }, - stringLength : { - min : 1, - max : 128, - message : 'The lastname must be more than 1 and less than 128 characters long' - } - } - }, - 'email' : { - verbose : false, - validators : { - notEmpty : { - message : 'The email is required and cannot be empty' - }, - emailAddress : { - message : 'The input is not a valid email address' - }, - remote : { - message : 'The email is not available', - url : lvlAuth + '/pending_users/check_availability', - data : { - type : 'email' - }, - type : 'POST', - delay : 2000, - threshold : 3 - } - } - }, - 'password' : { - validators : { - notEmpty : { - message : 'The password is required and cannot be empty' - }, - different : { - field : 'username', - message : 'The password cannot be same as username' - }, - stringLength : { - min : 6, - max : 32, - message : 'The password must be more than 6 and less than 32 characters long' - } - } - } - } - }).on('success.field.bv', function(e, data) { - var isValid = data.bv.isValid(); - data.bv.disableSubmitButtons(!isValid); - }); - }, - onDestroy : function() { - $('body').removeClass('lvl-login-body'); - Lvl.fullpageRegion.reset(); - } - }); - }); - return Lvl.AccessApp.Register.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/register/templates/register.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/register/templates/register.html deleted file mode 100644 index b97b6566..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/access/register/templates/register.html +++ /dev/null @@ -1,81 +0,0 @@ -
- -
-
-
-
-
- Sign up to - - - -
-
- - -
-
-
-
- - -
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - Institution type - -
-
-
-
- -
-
-
-
-

By signing up you are agreeing to our Privacy Policy and - Terms & Conditions.

-
-
-
-
-
-
-
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/admin_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/admin_app.js deleted file mode 100644 index ea7992f6..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/admin_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: admin. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('AdminApp', function(AdminApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - AdminApp.startWithParent = false; - - AdminApp.onStart = function() { - console.log('starting AdminApp'); - }; - - AdminApp.onStop = function() { - console.log('stopping AdminApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('admin:set:active', function(section) { - require([ 'apps/admin/layout/admin_layout_ctrl' ], function(LayoutController) { - AdminApp.currentSection = LayoutController.showLayout(section); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/admin_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/admin_router.js deleted file mode 100644 index d0a4c2a3..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/admin_router.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: admin. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'routefilter' ], function(Lvl, Configuration) { - Lvl.module('Routers.AdminApp', function(AdminAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var Router = Backbone.Router.extend({ - routes : { - 'admin' : 'showAdmin', - 'admin/:section' : 'showAdmin' - }, - before : function() { - if (!config.isAuthenticated()) { - Lvl.navigate('login/' + encodeURIComponent(Backbone.history.fragment) + '/unauthenticated', { - trigger : true, - replace : true - }); - return false; - } - require([ 'apps/admin/admin_app' ], function() { - Lvl.execute('set:active:header', 'admin'); - Lvl.execute('set:active:footer', 'home'); - Lvl.startSubApp('AdminApp'); - }); - return true; - }, - showAdmin : function(section) { - section = (section || 'issues').toLowerCase(); - if (section === 'issues') { - Lvl.navigate('admin/' + section, { - trigger : false, - replace : true - }); - Lvl.execute('admin:set:active', section); - } else if (section === 'subscription_requests') { - Lvl.execute('admin:set:active', 'subscription_requests'); - } else { - Lvl.navigate('not-found', { - trigger : true, - replace : true - }); - } - } - }); - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/admin_issues_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/admin_issues_ctrl.js deleted file mode 100644 index 1aca80dd..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/admin_issues_ctrl.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * RequireJS module that defines the controller: admin->issues. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'entities/issue', 'apps/admin/issues/admin_issues_view' ], function(Lvl, Configuration, IssueEntity, - View) { - Lvl.module('AdminApp.Issues', function(Issues, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Issues.Controller = { - showSection : function() { - var view = new View.Content({ - collection : new IssueEntity.IssuePageableCollection({ - oauth2_token : config.authorizationToken() - }) - }); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.AdminApp.Issues.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/admin_issues_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/admin_issues_view.js deleted file mode 100644 index a2b26461..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/admin_issues_view.js +++ /dev/null @@ -1,353 +0,0 @@ -/** - * RequireJS module that defines the view: admin->issues. - */ - -define([ 'app', 'tpl!apps/admin/issues/tpls/admin_issues', 'tpl!apps/admin/issues/tpls/toolbar', 'tpl!common/search/tpls/search_term', - 'tpl!common/search/tpls/add_search_term', 'tpl!common/search/tpls/save_search', 'apps/config/marionette/styles/style', - 'apps/config/marionette/configuration', 'entities/issue', 'pace', 'moment', 'backbone.oauth2', 'backgrid', 'backgrid-paginator', 'backgrid-select-all', - 'backgrid-filter' ], function(Lvl, IssuesTpl, ToolbarTpl, SearchTermTpl, AddSearchTermTpl, SaveSearchTpl, Style, Configuration, SearchEntity, pace, - moment) { - Lvl.module('AdminApp.Issues.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var columns = [ - { - name : 'status', - label : 'Status', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - if (rawValue !== undefined) { - var color = 'label-default'; - if ('NEW' === rawValue) { - color = 'label-info'; - } else if ('ASSIGNED' === rawValue) { - color = 'label-success'; - } else if ('CLOSED' === rawValue) { - color = 'label-danger'; - } else if ('REOPENED' === rawValue) { - color = 'label-warning'; - } - this.$el.append('' + rawValue + ' '); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'opened', - label : 'Opened', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'number') { - this.$el.append(' ' + moment(formattedValue).format('MMM DD[,] YYYY [at] HH[:]mm')); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'closed', - label : 'Closed', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'number') { - this.$el.append(' ' + moment(formattedValue).format('MMM DD[,] YYYY [at] HH[:]mm')); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'email', - label : 'Reporter', - editable : false, - cell : 'string' - }, - { - name : 'browser', - label : 'Browser', - editable : false, - cell : 'string' - }, - { - name : 'system', - label : 'System', - editable : false, - cell : 'string' - }, - { - name : 'description', - label : 'Description', - editable : false, - cell : 'string' - }, - { - name : 'screenshot', - label : 'Screenshot', - editable : false, - cell : 'string' - }, - { - name : 'id', - label : '', - editable : false, - sortable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append(''); - } - this.delegateEvents(); - return this; - } - }) - } ]; - View.Content = Marionette.ItemView.extend({ - id : 'issues', - template : IssuesTpl, - initialize : function() { - this.listenTo(this.collection, 'request', this.displaySpinner); - this.listenTo(this.collection, 'sync error', this.removeSpinner); - this.grid = new Backgrid.Grid({ - columns : [ { - name : '', - cell : 'select-row', - headerCell : 'select-all' - } ].concat(columns), - collection : this.collection, - emptyText : 'No issues found' - }); - // setup search - Lvl.vent.on('search:form:submitted', this.searchSavedIssues); - // setup menu - $('#lvl-floating-menu-toggle').show(0); - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu').empty(); - $('#lvl-floating-menu').append(ToolbarTpl({})); - $('a#uncheck-btn').on('click', { - grid : this.grid - }, this.deselectAll); - }, - displaySpinner : function() { - pace.restart(); - $('#grid-container').fadeTo('fast', 0.4); - }, - removeSpinner : function() { - pace.stop(); - var self = this; - $('#grid-container').fadeTo('fast', 1); - $('html,body').animate({ - scrollTop : 0 - }, '500', 'swing', function() { - // reset search terms - var searchCont = $('#lvl-search-terms-container'); - searchCont.empty(); - // setup search terms from server response - if (self.collection.formattedQuery && self.collection.formattedQuery.length > 0) { - var i = 1; - _.each(self.collection.formattedQuery, function(item) { - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_' + (i++), - sterm_text : item['term'], - sterm_icon : Boolean(item['valid']) ? 'label-success' : 'label-warning', - sterm_title : 'Remove' - })); - }); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_-1', - sterm_text : 'clear all', - sterm_icon : 'label-danger', - sterm_title : 'Remove All' - })); - searchCont.append(AddSearchTermTpl({})); - searchCont.append(SaveSearchTpl({})); - $('#lvl-search-terms').show('fast'); - } else { - $('#lvl-search-terms').hide('fast'); - } - }); - }, - events : { - 'click a[data-search-term]' : 'resetSearchTerms', - 'submit form#lvl-add-search-term-form' : 'addSearchTerm', - 'click div.lvl-savable' : 'handleClickSavable', - 'dragstart div.lvl-savable' : 'handleDragStart', - 'dragend div.lvl-savable' : 'handleDragEnd', - 'click a[data-remove-issue]' : 'removeIssue' - }, - deselectAll : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - e.data.grid.clearSelectedModels(); - }, - searchIssues : function(search) { - var backgridFilter = $('form.backgrid-filter:first'); - backgridFilter.find('input:first').val(search); - // TODO backgridFilter.submit(); - // TODO - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Operation unavailable', 'Search feature is coming soon. Stay tuned!', false); - }); - // TODO - }, - resetSearchTerms : function(e) { - e.preventDefault(); - var target = $(e.target); - var search = ''; - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-search-term') : target.attr('data-search-term'); - if (itemId !== 'sterm_-1') { - var searchCont = $('#lvl-search-terms-container'); - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - if ($(this).attr('data-search-term') !== itemId) { - search += $(this).parent().text() + ' '; - } - }); - } - this.searchIssues(search); - }, - addSearchTerm : function(e) { - e.preventDefault(); - var newTermInput = this.$('#lvl-add-search-term-input'), newTerm = newTermInput.val().trim(); - if (newTerm.length > 0) { - this.$('li#lvl-add-search-term-container').hide(); - var searchCont = this.$('#lvl-search-terms-container'); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_0', - sterm_text : newTerm, - sterm_icon : 'label-default', - sterm_title : 'Remove' - })); - var search = ''; - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - search += $(this).parent().text() + ' '; - }); - this.searchSequences(search); - } else { - newTermInput.val(''); - } - }, - handleClickSavable : function(e) { - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Unsaved search', - 'Start dragging the icon to open your saved items', - false); - }); - }, - handleDragStart : function(e) { - var self = this; - e.originalEvent.dataTransfer.setData('srcId', $(e.target).attr('data-savable-id')); - e.originalEvent.dataTransfer.setData('savableType', 'issue'); - e.originalEvent.dataTransfer.setData('savable', JSON.stringify(new SavedSearchEntity.SavedSearch({ - type : 'sequences;' + self.data_source, - description : '', - search : self.collection.formattedQuery - }).toJSON())); - Lvl.vent.trigger('editable:items:dragstart'); - }, - handleDragEnd : function(e) { - Lvl.vent.trigger('editable:items:dragend'); - }, - removeIssue : function(e) { - e.preventDefault(); - var self = this; - var target = $(e.target); - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-remove-issue') : target.attr('data-remove-issue'); - var item = this.collection.get(itemId); - item.oauth2_token = config.authorizationToken(); - require([ 'common/confirm' ], function(confirmDialog) { - confirmDialog('Confirm deletion', 'This action will delete the selected issue. Are you sure?', function() { - self.collection.remove(item); - item.destroy({ - success : function(e) { - }, - error : function(e) { - require([ 'common/alert' ], function(alertDialog) { - alertDialog('Error', 'The issue cannot be removed.'); - }); - } - }); - }, { - btn_text : 'Delete' - }); - }); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:backgrid:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:pace:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:flags:entities').toJSON()); - }); - }, - onDestroy : function() { - // don't remove the styles in order to enable them to be reused - pace.stop(); - this.stopListening(); - // remove all event handlers - Lvl.vent.off('search:form:submitted'); - $('#lvl-search-form').unbind(); - $('button#lvl-feature-tour-btn').unbind(); - // clean menu - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu-toggle').hide(0); - $('#lvl-floating-menu').empty(); - }, - onRender : function() { - var self = this; - pace.start(); - - var gridContainer = this.$('#grid-container'); - gridContainer.append(this.grid.render().el); - - var paginator = new Backgrid.Extension.Paginator({ - collection : this.collection, - windowSize : 14, - slideScale : 0.5, - goBackFirstOnSort : true - }); - - gridContainer.after(paginator.render().el); - - $(paginator.el).css({ - 'margin-top' : '20px' - }); - - var filter = new Backgrid.Extension.ServerSideFilter({ - collection : this.collection, - name : 'q', - placeholder : 'filter citations' - }); - - var filterToolbar = this.$('#grid-filter-toolbar'); - filterToolbar.append(filter.render().el); - - $(filter.el).addClass('hidden'); - - this.grid.clearSelectedModels(); - - this.collection.fetch({ - reset : true - }); - } - }); - }); - return Lvl.AdminApp.Issues.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/tpls/admin_issues.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/tpls/admin_issues.html deleted file mode 100644 index 17348db7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/tpls/admin_issues.html +++ /dev/null @@ -1,13 +0,0 @@ - - -
-
-
-
-
- - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/tpls/toolbar.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/tpls/toolbar.html deleted file mode 100644 index d52336b9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/issues/tpls/toolbar.html +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/admin_layout_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/admin_layout_ctrl.js deleted file mode 100644 index 863c5107..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/admin_layout_ctrl.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * RequireJS module that defines the controller: admin->layout. - */ - -define([ 'app', 'apps/admin/layout/admin_layout_view' ], function(Lvl, View) { - Lvl.module('AdminApp.Layout', function(Layout, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Layout.Controller = { - showLayout : function(section) { - require([ 'apps/admin/' + section + '/admin_' + section + '_ctrl', 'apps/admin/layout/entities/tablinks' ], - function(SectionController) { - var tabLinks = Lvl.request('admin:navigation:entities'); - var tabLinkToSelect = tabLinks.find(function(tabLink) { - return tabLink.get('link') === section; - }); - tabLinkToSelect.select(); - tabLinks.trigger('reset'); - var view = new View.Layout({ - navigation : tabLinks - }); - Lvl.mainRegion.show(view); - return SectionController.showSection(); - }); - } - } - }); - return Lvl.AdminApp.Layout.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/admin_layout_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/admin_layout_view.js deleted file mode 100644 index 3ff64bf5..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/admin_layout_view.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * RequireJS module that defines the view: admin->layout. - */ - -define([ 'app', 'apps/config/marionette/regions/fadein', 'tpl!apps/admin/layout/tpls/admin-layout', 'tpl!apps/admin/layout/tpls/tab-list', - 'tpl!apps/admin/layout/tpls/tab-link' ], function(Lvl, FadeInRegion, LayoutTpl, TabListTpl, TabLinkTpl) { - Lvl.module('AdminApp.Layout.View', function(View, Lvl, Backbone, Marionette, $, _) { - View.TabLink = Marionette.ItemView.extend({ - tagName : 'li', - template : TabLinkTpl, - onRender : function() { - if (this.model.selected) { - this.$el.addClass('active'); - } - } - }); - View.TabList = Marionette.CompositeView.extend({ - template : TabListTpl, - childView : View.TabLink, - childViewContainer : 'ul' - }); - View.Layout = Marionette.LayoutView.extend({ - template : LayoutTpl, - regions : { - tabList : '#section-tab-list', - tabContent : FadeInRegion.extend({ - el : '#section-tab-content' - }) - }, - initialize : function(options) { - this.navLinks = options.navigation; - // subscribe to events - $(document).on('keyup', this.handleEscKeyUpEvent); - }, - onDestroy : function() { - // unsubscribe from events - $(document).off('keyup', this.handleEscKeyUpEvent); - }, - onBeforeShow : function() { - this.showChildView('tabList', new View.TabList({ - collection : this.navLinks - })); - }, - events : { - 'click button#lvl-toggle-toolbar-btn' : 'toggleToolbar', - 'click a#lvl-collapse-toolbar-btn' : 'closeToolbar' - }, - toggleToolbar : function(e) { - e.preventDefault(); - var toolbar = $('#lvl-floating-menu'); - if (toolbar.is(':visible')) { - toolbar.hide('fast'); - } else { - toolbar.show('fast'); - } - }, - closeToolbar : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - }, - handleEscKeyUpEvent : function(e) { - var toolbar = $('#lvl-floating-menu'); - if (e.which == 27 && toolbar.is(':visible')) { - toolbar.hide('fast'); - } - } - }); - }); - return Lvl.AdminApp.Layout.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/entities/tablinks.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/entities/tablinks.js deleted file mode 100644 index 0080f894..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/entities/tablinks.js +++ /dev/null @@ -1,75 +0,0 @@ -/** - * RequireJS module that defines the entity: admin->tab-link. - */ - -define([ 'app', 'backbone.picky' ], function(Lvl) { - Lvl.module('AdminApp.Entities', function(Entities, Lvl, Backbone, Marionette, $, _) { - Entities.Navigation = Backbone.Model.extend({ - defaults : { - link : '', - icon : 'fa-chain-broken', - text : 'Unknown' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.link) { - errors.link = 'can\'t be empty'; - } - if (!attrs.icon) { - errors.icon = 'can\'t be empty'; - } - if (!attrs.text) { - errors.text = 'can\'t be empty'; - } else { - if (attrs.text.length < 2) { - errors.text = 'is too short'; - } - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - - Entities.NavigationAdmin = Backbone.Collection.extend({ - model : Entities.Navigation, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - - var iniNavigationLinks = function() { - Entities.navigationLinks = new Entities.NavigationAdmin([ { - id : 1, - link : 'issues', - icon : 'fa-bug', - text : 'Issues' - }, { - id : 2, - link : 'subscription_requests', - icon : 'fa-user-plus', - text : 'Subscription requests' - } ]); - }; - - var API = { - getNavigationEntities : function() { - if (Entities.navigationLinks === undefined) { - iniNavigationLinks(); - } - return Entities.navigationLinks; - } - } - - Lvl.reqres.setHandler('admin:navigation:entities', function() { - return API.getNavigationEntities(); - }); - }); - return; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/tpls/admin-layout.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/tpls/admin-layout.html deleted file mode 100644 index 605e7536..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/tpls/admin-layout.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - -
- - -
-
-
-
-
- -
-
- -

 

 

 

 

-

 

 

 

 

-
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/tpls/tab-link.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/tpls/tab-link.html deleted file mode 100644 index f6ae2abc..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/tpls/tab-link.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/tpls/tab-list.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/tpls/tab-list.html deleted file mode 100644 index fecedd0c..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/layout/tpls/tab-list.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/admin_subscription_requests_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/admin_subscription_requests_ctrl.js deleted file mode 100644 index 6ac0bce8..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/admin_subscription_requests_ctrl.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * RequireJS module that defines the controller: admin->subscription_requests. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'entities/subscription_request', 'apps/admin/subscription_requests/admin_subscription_requests_view' ], - function(Lvl, Configuration, SubscReqEntity, View) { - Lvl.module('AdminApp.SubscReqs', function(SubscReqs, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - SubscReqs.Controller = { - showSection : function() { - var view = new View.Content({ - collection : new SubscReqEntity.SubscrReqPageableCollection({ - oauth2_token : config.authorizationToken() - }) - }); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.AdminApp.SubscReqs.Controller; - }); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/admin_subscription_requests_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/admin_subscription_requests_view.js deleted file mode 100644 index 845d73fd..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/admin_subscription_requests_view.js +++ /dev/null @@ -1,327 +0,0 @@ -/** - * RequireJS module that defines the view: admin->subscription_requests. - */ - -define([ 'app', 'tpl!apps/admin/subscription_requests/tpls/admin_subscription_requests', 'tpl!apps/admin/subscription_requests/tpls/toolbar', - 'tpl!common/search/tpls/search_term', 'tpl!common/search/tpls/add_search_term', 'tpl!common/search/tpls/save_search', - 'apps/config/marionette/styles/style', 'apps/config/marionette/configuration', 'entities/subscription_request', 'pace', 'moment', 'backbone.oauth2', - 'backgrid', 'backgrid-paginator', 'backgrid-select-all', 'backgrid-filter' ], function(Lvl, SubscReqsTpl, ToolbarTpl, SearchTermTpl, AddSearchTermTpl, - SaveSearchTpl, Style, Configuration, SubscReqsEntity, pace, moment) { - Lvl.module('AdminApp.SubscReqs.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var columns = [ - { - name : 'email', - label : 'Email', - editable : false, - cell : 'string' - }, - { - name : 'channels', - label : 'Channels', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - if (rawValue !== undefined) { - var names = ''; - for (var i = 0; i < rawValue.length; i++) { - var color = 'label-default'; - if ('mailing list' === rawValue[i]) { - color = 'label-success'; - } - names += '' + rawValue[i] + ' '; - } - this.$el.append(names.trim()); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'requested', - label : 'Requested', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'number') { - this.$el.append(' ' + moment(formattedValue).format('MMM DD[,] YYYY [at] HH[:]mm')); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'fulfilled', - label : 'Fulfilled', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'number') { - this.$el.append(' ' + moment(formattedValue).format('MMM DD[,] YYYY [at] HH[:]mm')); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'id', - label : '', - editable : false, - sortable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append(''); - } - this.delegateEvents(); - return this; - } - }) - } ]; - View.Content = Marionette.ItemView.extend({ - id : 'subscription_requests', - template : SubscReqsTpl, - initialize : function() { - this.listenTo(this.collection, 'request', this.displaySpinner); - this.listenTo(this.collection, 'sync error', this.removeSpinner); - this.grid = new Backgrid.Grid({ - columns : [ { - name : '', - cell : 'select-row', - headerCell : 'select-all' - } ].concat(columns), - collection : this.collection, - emptyText : 'No requests found' - }); - // setup search - Lvl.vent.on('search:form:submitted', this.searchSubscrReqs); - // setup menu - $('#lvl-floating-menu-toggle').show(0); - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu').empty(); - $('#lvl-floating-menu').append(ToolbarTpl({})); - $('a#uncheck-btn').on('click', { - grid : this.grid - }, this.deselectAll); - $('button#lvl-feature-tour-btn').on('click', this.startTour); - }, - displaySpinner : function() { - pace.restart(); - $('#grid-container').fadeTo('fast', 0.4); - }, - removeSpinner : function() { - pace.stop(); - var self = this; - $('#grid-container').fadeTo('fast', 1); - $('html,body').animate({ - scrollTop : 0 - }, '500', 'swing', function() { - // reset search terms - var searchCont = $('#lvl-search-terms-container'); - searchCont.empty(); - // setup search terms from server response - if (self.collection.formattedQuery && self.collection.formattedQuery.length > 0) { - var i = 1; - _.each(self.collection.formattedQuery, function(item) { - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_' + (i++), - sterm_text : item['term'], - sterm_icon : Boolean(item['valid']) ? 'label-success' : 'label-warning', - sterm_title : 'Remove' - })); - }); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_-1', - sterm_text : 'clear all', - sterm_icon : 'label-danger', - sterm_title : 'Remove All' - })); - searchCont.append(AddSearchTermTpl({})); - searchCont.append(SaveSearchTpl({})); - $('#lvl-search-terms').show('fast'); - } else { - $('#lvl-search-terms').hide('fast'); - } - }); - }, - events : { - 'click a[data-search-term]' : 'resetSearchTerms', - 'submit form#lvl-add-search-term-form' : 'addSearchTerm', - 'click div.lvl-savable' : 'handleClickSavable', - 'dragstart div.lvl-savable' : 'handleDragStart', - 'dragend div.lvl-savable' : 'handleDragEnd', - 'click a[data-remove-subscr-req]' : 'removeSubscrReq' - }, - deselectAll : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - e.data.grid.clearSelectedModels(); - }, - searchSubscrReqs : function(search) { - var backgridFilter = $('form.backgrid-filter:first'); - backgridFilter.find('input:first').val(search); - // TODO backgridFilter.submit(); - // TODO - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Operation unavailable', 'Search feature is coming soon. Stay tuned!', false); - }); - // TODO - }, - resetSearchTerms : function(e) { - e.preventDefault(); - var target = $(e.target); - var search = ''; - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-search-term') : target.attr('data-search-term'); - if (itemId !== 'sterm_-1') { - var searchCont = $('#lvl-search-terms-container'); - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - if ($(this).attr('data-search-term') !== itemId) { - search += $(this).parent().text() + ' '; - } - }); - } - this.searchSubscrReqs(search); - }, - addSearchTerm : function(e) { - e.preventDefault(); - var newTermInput = this.$('#lvl-add-search-term-input'), newTerm = newTermInput.val().trim(); - if (newTerm.length > 0) { - this.$('li#lvl-add-search-term-container').hide(); - var searchCont = this.$('#lvl-search-terms-container'); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_0', - sterm_text : newTerm, - sterm_icon : 'label-default', - sterm_title : 'Remove' - })); - var search = ''; - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - search += $(this).parent().text() + ' '; - }); - this.searchSequences(search); - } else { - newTermInput.val(''); - } - }, - handleClickSavable : function(e) { - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Unsaved search', - 'Start dragging the icon to open your saved items', - false); - }); - }, - handleDragStart : function(e) { - var self = this; - e.originalEvent.dataTransfer.setData('srcId', $(e.target).attr('data-savable-id')); - e.originalEvent.dataTransfer.setData('savableType', 'saved_search'); - e.originalEvent.dataTransfer.setData('savable', JSON.stringify(new SavedSearchEntity.SavedSearch({ - type : 'sequences;' + self.data_source, - description : '', - search : self.collection.formattedQuery - }).toJSON())); - Lvl.vent.trigger('editable:items:dragstart'); - }, - handleDragEnd : function(e) { - Lvl.vent.trigger('editable:items:dragend'); - }, - removeSubscrReq : function(e) { - e.preventDefault(); - var self = this; - var target = $(e.target); - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-remove-subscr-req') : target.attr('data-remove-subscr-req'); - var item = this.collection.get(itemId); - item.oauth2_token = config.authorizationToken(); - require([ 'common/confirm' ], function(confirmDialog) { - confirmDialog('Confirm deletion', 'This action will delete the selected request. Are you sure?', function() { - self.collection.remove(item); - item.destroy({ - success : function(e) { - }, - error : function(e) { - require([ 'common/alert' ], function(alertDialog) { - alertDialog('Error', 'The request cannot be removed.'); - }); - } - }); - }, { - btn_text : 'Delete' - }); - }); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:backgrid:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:pace:entities').toJSON()); - }); - }, - onDestroy : function() { - // don't remove the styles in order to enable them to be reused - pace.stop(); - this.stopListening(); - // remove all event handlers - Lvl.vent.off('search:form:submitted'); - $('#lvl-search-form').unbind(); - $('button#lvl-feature-tour-btn').unbind(); - // clean menu - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu-toggle').hide(0); - $('#lvl-floating-menu').empty(); - }, - onRender : function() { - var self = this; - pace.start(); - - var gridContainer = this.$('#grid-container'); - gridContainer.append(this.grid.render().el); - - var paginator = new Backgrid.Extension.Paginator({ - collection : this.collection, - windowSize : 14, - slideScale : 0.5, - goBackFirstOnSort : true - }); - - gridContainer.after(paginator.render().el); - - $(paginator.el).css({ - 'margin-top' : '20px' - }); - - var filter = new Backgrid.Extension.ServerSideFilter({ - collection : this.collection, - name : 'q', - placeholder : 'filter citations' - }); - - var filterToolbar = this.$('#grid-filter-toolbar'); - filterToolbar.append(filter.render().el); - - $(filter.el).addClass('hidden'); - - this.grid.clearSelectedModels(); - - this.collection.fetch({ - reset : true - }); - } - }); - }); - return Lvl.AdminApp.SubscReqs.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/tpls/admin_subscription_requests.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/tpls/admin_subscription_requests.html deleted file mode 100644 index 17348db7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/tpls/admin_subscription_requests.html +++ /dev/null @@ -1,13 +0,0 @@ - - -
-
-
-
-
- - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/tpls/toolbar.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/tpls/toolbar.html deleted file mode 100644 index d52336b9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/admin/subscription_requests/tpls/toolbar.html +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/analysis_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/analysis_app.js deleted file mode 100644 index fb0a959c..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/analysis_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: analysis. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('AnalysisApp', function(AnalysisApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - AnalysisApp.startWithParent = false; - - AnalysisApp.onStart = function() { - console.log('starting AnalysisApp'); - }; - - AnalysisApp.onStop = function() { - console.log('stopping AnalysisApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('analysis:set:active', function(section, subsection) { - require([ 'apps/analysis/layout/analysis_layout_ctrl' ], function(LayoutController) { - AnalysisApp.currentSection = LayoutController.showLayout(section, subsection); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/analysis_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/analysis_router.js deleted file mode 100644 index 7e9246dc..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/analysis_router.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: analysis. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'routefilter' ], function(Lvl, Configuration) { - Lvl.module('Routers.AnalysisApp', function(AnalysisAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var Router = Backbone.Router.extend({ - routes : { - 'analysis' : 'showAnalysis', - 'analysis/:section' : 'showAnalysis', - 'analysis/:section/:subsection' : 'showAnalysis' - }, - before : function() { - if (!config.isAuthenticated()) { - Lvl.navigate('login/' + encodeURIComponent(Backbone.history.fragment) + '/unauthenticated', { - trigger : true, - replace : true - }); - return false; - } - require([ 'apps/analysis/analysis_app' ], function() { - Lvl.execute('set:active:header', 'workspace', 'analysis'); - Lvl.execute('set:active:footer', 'workspace'); - Lvl.startSubApp('AnalysisApp'); - }); - return true; - }, - showAnalysis : function(section, subsection) { - section = (section || 'pipelines').toLowerCase(); - if (section === 'pipelines') { - Lvl.navigate('analysis/' + section, { - trigger : false, - replace : true - }); - Lvl.execute('analysis:set:active', section); - } else if (section === 'runs') { - Lvl.execute('analysis:set:active', section, subsection); - } else { - Lvl.navigate('not-found', { - trigger : true, - replace : true - }); - } - } - }); - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/analysis_layout_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/analysis_layout_ctrl.js deleted file mode 100644 index d8205160..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/analysis_layout_ctrl.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * RequireJS module that defines the controller: analysis->layout. - */ - -define([ 'app', 'apps/analysis/layout/analysis_layout_view' ], function(Lvl, View) { - Lvl.module('AnalysisApp.Layout', function(Layout, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Layout.Controller = { - showLayout : function(section, id) { - var subapp = section + (id ? '_item' : ''); - require([ 'apps/analysis/' + subapp + '/analysis_' + subapp + '_ctrl', 'apps/analysis/layout/entities/tablinks' ], function(SectionController) { - var tabLinks = Lvl.request('analysis:navigation:entities'); - var tabLinkToSelect = tabLinks.find(function(tabLink) { - return tabLink.get('link') === section; - }); - tabLinkToSelect.select(); - tabLinks.trigger('reset'); - var view = new View.Layout({ - navigation : tabLinks - }); - Lvl.mainRegion.show(view); - return SectionController.showSection(id); - }); - } - } - }); - return Lvl.AnalysisApp.Layout.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/analysis_layout_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/analysis_layout_view.js deleted file mode 100644 index 8a916401..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/analysis_layout_view.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * RequireJS module that defines the view: analysis->layout. - */ - -define([ 'app', 'apps/config/marionette/regions/fadein', 'tpl!apps/analysis/layout/templates/analysis-layout', 'tpl!apps/analysis/layout/templates/tab-list', - 'tpl!apps/analysis/layout/templates/tab-link' ], function(Lvl, FadeInRegion, LayoutTpl, TabListTpl, TabLinkTpl) { - Lvl.module('AnalysisApp.Layout.View', function(View, Lvl, Backbone, Marionette, $, _) { - View.TabLink = Marionette.ItemView.extend({ - tagName : 'li', - template : TabLinkTpl, - onRender : function() { - if (this.model.selected) { - this.$el.addClass('active'); - } - } - }); - View.TabList = Marionette.CompositeView.extend({ - template : TabListTpl, - childView : View.TabLink, - childViewContainer : 'ul' - }); - View.Layout = Marionette.LayoutView.extend({ - template : LayoutTpl, - regions : { - tabList : '#section-tab-list', - tabContent : FadeInRegion.extend({ - el : '#section-tab-content' - }) - }, - initialize : function(options) { - this.navLinks = options.navigation; - // subscribe to events - $(document).on('keyup', this.handleEscKeyUpEvent); - }, - onDestroy : function() { - // unsubscribe from events - $(document).off('keyup', this.handleEscKeyUpEvent); - }, - onBeforeShow : function() { - this.showChildView('tabList', new View.TabList({ - collection : this.navLinks - })); - }, - events : { - 'click button#lvl-toggle-toolbar-btn' : 'toggleToolbar', - 'click a#lvl-collapse-toolbar-btn' : 'closeToolbar' - }, - toggleToolbar : function(e) { - e.preventDefault(); - var toolbar = $('#lvl-floating-menu'); - if (toolbar.is(':visible')) { - toolbar.hide('fast'); - } else { - toolbar.show('fast'); - } - }, - closeToolbar : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - }, - handleEscKeyUpEvent : function(e) { - var toolbar = $('#lvl-floating-menu'); - if (e.which == 27 && toolbar.is(':visible')) { - toolbar.hide('fast'); - } - } - }); - }); - return Lvl.AnalysisApp.Layout.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/entities/tablinks.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/entities/tablinks.js deleted file mode 100644 index 6d4b535b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/entities/tablinks.js +++ /dev/null @@ -1,75 +0,0 @@ -/** - * RequireJS module that defines the entity: analysis->tab-link. - */ - -define([ 'app', 'backbone.picky' ], function(Lvl) { - Lvl.module('AnalysisApp.Entities', function(Entities, Lvl, Backbone, Marionette, $, _) { - Entities.Navigation = Backbone.Model.extend({ - defaults : { - link : '', - icon : 'fa-chain-broken', - text : 'Unknown' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.link) { - errors.link = 'can\'t be empty'; - } - if (!attrs.icon) { - errors.icon = 'can\'t be empty'; - } - if (!attrs.text) { - errors.text = 'can\'t be empty'; - } else { - if (attrs.text.length < 2) { - errors.text = 'is too short'; - } - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - - Entities.NavigationAnalysis = Backbone.Collection.extend({ - model : Entities.Navigation, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - - var iniNavigationLinks = function() { - Entities.navigationLinks = new Entities.NavigationAnalysis([ { - id : 1, - link : 'pipelines', - icon : 'fa-sitemap', - text : 'Pipelines' - }, { - id : 2, - link : 'runs', - icon : 'fa-desktop', - text : 'Runs' - } ]); - }; - - var API = { - getNavigationEntities : function() { - if (Entities.navigationLinks === undefined) { - iniNavigationLinks(); - } - return Entities.navigationLinks; - } - } - - Lvl.reqres.setHandler('analysis:navigation:entities', function() { - return API.getNavigationEntities(); - }); - }); - return; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/templates/analysis-layout.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/templates/analysis-layout.html deleted file mode 100644 index 0fd96668..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/templates/analysis-layout.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - -
- - -
-
-
-
-
- -
-
- -

 

 

 

 

-

 

 

 

 

-
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/templates/tab-link.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/templates/tab-link.html deleted file mode 100644 index bc95ac78..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/templates/tab-link.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/templates/tab-list.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/templates/tab-list.html deleted file mode 100644 index dea83450..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/layout/templates/tab-list.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/analysis_pipelines_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/analysis_pipelines_ctrl.js deleted file mode 100644 index d1e6c504..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/analysis_pipelines_ctrl.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * RequireJS module that defines the controller: analysis->pipelines. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'entities/workflow', 'apps/analysis/pipelines/analysis_pipelines_view' ], function(Lvl, Configuration, - WorkflowModel, View) { - Lvl.module('AnalysisApp.Pipelines', function(Pipelines, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Pipelines.Controller = { - showSection : function() { - var view = new View.Content({ - collection : new WorkflowModel.WorkflowDefinitionPageableCollection({ - oauth2_token : config.authorizationToken() - }) - }); - view.on('analysis:pipeline:run', function(workflowId) { - require([ 'apps/analysis/submit/analysis_submit_pipeline_view' ], function(SubmitView) { - var dialogView = new SubmitView.Content({ - 'workflowId' : workflowId - }); - Lvl.dialogRegion.show(dialogView); - }); - }); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.AnalysisApp.Pipelines.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/analysis_pipelines_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/analysis_pipelines_view.js deleted file mode 100644 index ad17c097..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/analysis_pipelines_view.js +++ /dev/null @@ -1,290 +0,0 @@ -/** - * RequireJS module that defines the view: analysis->pipelines. - */ - -define([ 'app', 'tpl!apps/analysis/pipelines/tpls/analysis_pipelines', 'tpl!apps/e-compendium/browse/tpls/toolbar_browse', - 'tpl!common/search/tpls/search_term', 'tpl!common/search/tpls/add_search_term', 'tpl!common/search/tpls/save_search', - 'apps/config/marionette/styles/style', 'entities/workflow', 'text!data/pipelines.json', 'pace', 'backbone.oauth2', 'backgrid', 'backgrid-paginator', - 'backgrid-select-all', 'backgrid-filter' ], function(Lvl, PipelinesTpl, ToolbarTpl, SearchTermTpl, AddSearchTermTpl, SaveSearchTpl, Style, - WorkflowModel, PipelinesJson, pace) { - Lvl.module('AnalysisApp.Pipelines.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var pipelinesObj = []; - try { - pipelinesObj = JSON.parse(PipelinesJson); - } catch (err) { - console.log('Failed to load pipelines configuration: ' + err); - } - var columns = [ - { - name : 'id', - label : 'Identifier', - editable : false, - cell : 'string' - }, - { - name : 'version', - label : 'Version', - editable : false, - cell : 'string' - }, - { - name : 'name', - label : 'Name', - editable : false, - cell : 'string' - }, - { - name : 'description', - label : 'Description', - editable : false, - cell : 'string' - }, - { - name : 'id', - label : '', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - var pipeline = _.find(pipelinesObj, function(item) { - return item.id === formattedValue; - }); - if (pipeline) { - this.$el.append(''); - } else { - this.$el.append(''); - } - } - this.delegateEvents(); - return this; - } - }) - } ]; - View.Content = Marionette.ItemView.extend({ - id : 'pipelines', - template : PipelinesTpl, - initialize : function() { - this.listenTo(this.collection, 'request', this.displaySpinner); - this.listenTo(this.collection, 'sync error', this.removeSpinner); - this.grid = new Backgrid.Grid({ - columns : [ { - name : '', - cell : 'select-row', - headerCell : 'select-all' - } ].concat(columns), - collection : this.collection, - emptyText : 'No pipelines found' - }); - // setup search - Lvl.vent.on('search:form:submitted', this.searchPipelines); - // setup menu - $('#lvl-floating-menu-toggle').show(0); - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu').empty(); - $('#lvl-floating-menu').append(ToolbarTpl({})); - $('a#uncheck-btn').on('click', { - grid : this.grid - }, this.deselectAll); - $('button#lvl-feature-tour-btn').on('click', this.startTour); - }, - displaySpinner : function() { - pace.restart(); - $('#grid-container').fadeTo('fast', 0.4); - }, - removeSpinner : function() { - pace.stop(); - var self = this; - $('#grid-container').fadeTo('fast', 1); - $('html,body').animate({ - scrollTop : 0 - }, '500', 'swing', function() { - // reset search terms - var searchCont = $('#lvl-search-terms-container'); - searchCont.empty(); - // setup search terms from server response - if (self.collection.formattedQuery && self.collection.formattedQuery.length > 0) { - var i = 1; - _.each(self.collection.formattedQuery, function(item) { - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_' + (i++), - sterm_text : item['term'], - sterm_icon : Boolean(item['valid']) ? 'label-success' : 'label-warning', - sterm_title : 'Remove' - })); - }); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_-1', - sterm_text : 'clear all', - sterm_icon : 'label-danger', - sterm_title : 'Remove All' - })); - searchCont.append(AddSearchTermTpl({})); - searchCont.append(SaveSearchTpl({})); - $('#lvl-search-terms').show('fast'); - } else { - $('#lvl-search-terms').hide('fast'); - } - }); - }, - events : { - 'click a[data-search-term]' : 'resetSearchTerms', - 'submit form#lvl-add-search-term-form' : 'addSearchTerm', - 'click div.lvl-savable' : 'handleClickSavable', - 'dragstart div.lvl-savable' : 'handleDragStart', - 'dragend div.lvl-savable' : 'handleDragEnd', - 'click a[data-pipeline]' : 'runPipeline' - }, - deselectAll : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - e.data.grid.clearSelectedModels(); - }, - searchPipelines : function(search) { - var backgridFilter = $('form.backgrid-filter:first'); - backgridFilter.find('input:first').val(search); - // TODO backgridFilter.submit(); - // TODO - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Operation unavailable', 'Search feature is coming soon. Stay tuned!', false); - }); - // TODO - }, - resetSearchTerms : function(e) { - e.preventDefault(); - var target = $(e.target); - var search = ''; - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-search-term') : target.attr('data-search-term'); - if (itemId !== 'sterm_-1') { - var searchCont = $('#lvl-search-terms-container'); - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - if ($(this).attr('data-search-term') !== itemId) { - search += $(this).parent().text() + ' '; - } - }); - } - this.searchPipelines(search); - }, - addSearchTerm : function(e) { - e.preventDefault(); - var newTermInput = this.$('#lvl-add-search-term-input'), newTerm = newTermInput.val().trim(); - if (newTerm.length > 0) { - this.$('li#lvl-add-search-term-container').hide(); - var searchCont = this.$('#lvl-search-terms-container'); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_0', - sterm_text : newTerm, - sterm_icon : 'label-default', - sterm_title : 'Remove' - })); - var search = ''; - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - search += $(this).parent().text() + ' '; - }); - this.searchSequences(search); - } else { - newTermInput.val(''); - } - }, - handleClickSavable : function(e) { - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Unsaved search', - 'Start dragging the icon to open your saved items', - false); - }); - }, - handleDragStart : function(e) { - var self = this; - e.originalEvent.dataTransfer.setData('srcId', $(e.target).attr('data-savable-id')); - e.originalEvent.dataTransfer.setData('savableType', 'saved_search'); - e.originalEvent.dataTransfer.setData('savable', JSON.stringify(new SavedSearchEntity.SavedSearch({ - type : 'sequences;' + self.data_source, - description : '', - search : self.collection.formattedQuery - }).toJSON())); - Lvl.vent.trigger('editable:items:dragstart'); - }, - handleDragEnd : function(e) { - Lvl.vent.trigger('editable:items:dragend'); - }, - startTour : function(e) { - e.preventDefault(); - require([ 'apps/analysis/pipelines/tours/pipelines_tour' ], function(tour) { - tour(); - }); - }, - runPipeline : function(e) { - e.preventDefault(); - var target = $(e.target); - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-pipeline') : target.getAttribute('data-pipeline'); - this.trigger('analysis:pipeline:run', itemId); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:backgrid:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:pace:entities').toJSON()); - }); - }, - onDestroy : function() { - // don't remove the styles in order to enable them to be reused - pace.stop(); - this.stopListening(); - // remove all event handlers - Lvl.vent.off('search:form:submitted'); - $('#lvl-search-form').unbind(); - $('button#lvl-feature-tour-btn').unbind(); - // clean menu - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu-toggle').hide(0); - $('#lvl-floating-menu').empty(); - // clean tour - require([ 'hopscotch' ], function(hopscotch) { - hopscotch.endTour(); - }); - }, - onRender : function() { - var self = this; - pace.start(); - - var gridContainer = this.$('#grid-container'); - gridContainer.append(this.grid.render().el); - - var paginator = new Backgrid.Extension.Paginator({ - collection : this.collection, - windowSize : 14, - slideScale : 0.5, - goBackFirstOnSort : true - }); - - gridContainer.after(paginator.render().el); - - $(paginator.el).css({ - 'margin-top' : '20px' - }); - - var filter = new Backgrid.Extension.ServerSideFilter({ - collection : this.collection, - name : 'q', - placeholder : 'filter pipelines' - }); - - var filterToolbar = this.$('#grid-filter-toolbar'); - filterToolbar.append(filter.render().el); - - $(filter.el).addClass('hidden'); - - this.grid.clearSelectedModels(); - - this.collection.fetch({ - reset : true - }); - } - }); - }); - return Lvl.AnalysisApp.Pipelines.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/tours/pipelines_tour.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/tours/pipelines_tour.js deleted file mode 100644 index 9d5f07bb..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/tours/pipelines_tour.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * RequireJS module that defines the tour: analysis->pipelines->tour. - */ - -define( - [ 'app', 'apps/config/marionette/styles/style', 'hopscotch' ], - function(Lvl, Style, hopscotch) { - return function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:hopscotch:entities').toJSON()); - }); - var tour = { - id : 'analysis-pipelines', - showPrevButton : false, - skipIfNoElement : true, - steps : [ - { - target : document.querySelector('div#section-tab-list'), - placement : 'bottom', - fixedElement : true, - title : 'This is the navigation menu', - content : 'Use the links here to get around on the pipelines features.' - }, - { - target : document.querySelector('a#btnSearchToggle'), - placement : 'left', - fixedElement : true, - title : 'This is the search button', - content : 'Use it to search for items. Click on the search icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, - { - delay : 300, - target : document.querySelector('input#lvl-search-form-input'), - placement : 'bottom', - fixedElement : true, - title : 'This is the search box', - content : 'It supports the LvLQL query language to search the pipelines. Enter pipeline in the input box and hit enter. Once the search is completed continue this tour.' - }, - { - target : document.querySelector('ul#lvl-search-terms-container'), - placement : 'bottom', - title : 'Your search terms are listed', - content : 'Use the provided controls to clear/add search terms. Drag the icon to save your search terms.', - }, - { - target : document.querySelector('div#grid-container'), - placement : 'top', - yOffset : 100, - title : 'This is the result dataset', - content : 'Columns are sortable, rows are selectable. Additional controls are found at the right lateral side of the grid.' - }, - { - target : document.querySelector('button#lvl-toggle-toolbar-btn'), - placement : 'left', - fixedElement : true, - title : 'This is the Tools menu', - content : 'Use the controls here to perform additionl actions on the dataset and the selected items. Click on the menu icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, { - delay : 300, - target : document.querySelector('div#lvl-floating-menu-toggle'), - placement : 'left', - xOffset : -10, - fixedElement : true, - title : 'Additional controls are displayed', - content : 'Include deselecting all selected items.', - onNext : function() { - $('button#lvl-toggle-toolbar-btn').click(); - } - }, { - delay : 300, - target : document.querySelector('button#lvl-feature-tour-btn'), - placement : 'left', - fixedElement : true, - title : 'You\'re all set!', - content : 'Run this tour as many times as you need.' - } ] - }; - hopscotch.startTour(tour); - } - }); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/tpls/analysis_pipelines.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/tpls/analysis_pipelines.html deleted file mode 100644 index 17348db7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/tpls/analysis_pipelines.html +++ /dev/null @@ -1,13 +0,0 @@ - - -
-
-
-
-
- - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/tpls/toolbar_browse.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/tpls/toolbar_browse.html deleted file mode 100644 index d52336b9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/pipelines/tpls/toolbar_browse.html +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/analysis_runs_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/analysis_runs_ctrl.js deleted file mode 100644 index fed749fb..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/analysis_runs_ctrl.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * RequireJS module that defines the controller: analysis->runs. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'entities/workflow_run', 'apps/analysis/runs/analysis_runs_view' ], function(Lvl, Configuration, - WorkflowRunModel, View) { - Lvl.module('AnalysisApp.Runs', function(Runs, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Runs.Controller = { - showSection : function() { - var view = new View.Content({ - collection : new WorkflowRunModel.WorkflowRunPageableCollection({ - oauth2_token : config.authorizationToken() - }) - }); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.AnalysisApp.Runs.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/analysis_runs_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/analysis_runs_view.js deleted file mode 100644 index 32a0762a..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/analysis_runs_view.js +++ /dev/null @@ -1,319 +0,0 @@ -/** - * RequireJS module that defines the view: analysis->runs. - */ - -define( - [ 'app', 'tpl!apps/analysis/runs/tpls/analysis_runs', 'tpl!apps/e-compendium/browse/tpls/toolbar_browse', 'tpl!common/search/tpls/search_term', - 'tpl!common/search/tpls/add_search_term', 'tpl!common/search/tpls/save_search', 'apps/config/marionette/styles/style', 'entities/workflow_run', - 'apps/config/marionette/configuration', 'pace', 'moment', 'backbone.oauth2', 'backgrid', 'backgrid-paginator', 'backgrid-select-all', - 'backgrid-filter' ], function(Lvl, RunsTpl, ToolbarTpl, SearchTermTpl, AddSearchTermTpl, SaveSearchTpl, Style, WorkflowRunModel, Configuration, - pace, moment) { - Lvl.module('AnalysisApp.Runs.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var columns = [ - { - name : 'id', - label : 'Identifier', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append('' + formattedValue + ''); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'workflowId', - label : 'Workflow', - editable : false, - cell : 'string' - }, - { - name : 'invocationId', - label : 'Invocation', - editable : false, - cell : 'string' - }, - { - name : 'submitted', - label : 'Submitted', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'number') { - this.$el.append(moment(formattedValue).format('MMM DD[,] YYYY [at] HH[:]mm')); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'id', - label : '', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append(''); - } - this.delegateEvents(); - return this; - } - }) - } ]; - View.Content = Marionette.ItemView.extend({ - id : 'runs', - template : RunsTpl, - initialize : function() { - this.listenTo(this.collection, 'request', this.displaySpinner); - this.listenTo(this.collection, 'sync error remove', this.removeSpinner); - this.grid = new Backgrid.Grid({ - columns : [ { - name : '', - cell : 'select-row', - headerCell : 'select-all' - } ].concat(columns), - collection : this.collection, - emptyText : 'No executions found' - }); - // setup search - Lvl.vent.on('search:form:submitted', this.searchLinks); - // setup menu - $('#lvl-floating-menu-toggle').show(0); - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu').empty(); - $('#lvl-floating-menu').append(ToolbarTpl({})); - $('a#uncheck-btn').on('click', { - grid : this.grid - }, this.deselectAll); - $('button#lvl-feature-tour-btn').on('click', this.startTour); - }, - displaySpinner : function() { - pace.restart(); - $('#grid-container').fadeTo('fast', 0.4); - }, - removeSpinner : function() { - pace.stop(); - var self = this; - $('#grid-container').fadeTo('fast', 1); - $('html,body').animate({ - scrollTop : 0 - }, '500', 'swing', function() { - // reset search terms - var searchCont = $('#lvl-search-terms-container'); - searchCont.empty(); - // setup search terms from server response - if (self.collection.formattedQuery && self.collection.formattedQuery.length > 0) { - var i = 1; - _.each(self.collection.formattedQuery, function(item) { - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_' + (i++), - sterm_text : item['term'], - sterm_icon : Boolean(item['valid']) ? 'label-success' : 'label-warning', - sterm_title : 'Remove' - })); - }); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_-1', - sterm_text : 'clear all', - sterm_icon : 'label-danger', - sterm_title : 'Remove All' - })); - searchCont.append(AddSearchTermTpl({})); - searchCont.append(SaveSearchTpl({})); - $('#lvl-search-terms').show('fast'); - } else { - $('#lvl-search-terms').hide('fast'); - } - }); - }, - events : { - 'click a[data-search-term]' : 'resetSearchTerms', - 'submit form#lvl-add-search-term-form' : 'addSearchTerm', - 'click div.lvl-savable' : 'handleClickSavable', - 'dragstart div.lvl-savable' : 'handleDragStart', - 'dragend div.lvl-savable' : 'handleDragEnd', - 'click a[data-remove]' : 'removeRun' - }, - deselectAll : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - e.data.grid.clearSelectedModels(); - }, - searchLinks : function(search) { - var backgridFilter = $('form.backgrid-filter:first'); - backgridFilter.find('input:first').val(search); - // TODO backgridFilter.submit(); - // TODO - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Operation unavailable', 'Search feature is coming soon. Stay tuned!', false); - }); - // TODO - }, - resetSearchTerms : function(e) { - e.preventDefault(); - var target = $(e.target); - var search = ''; - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-search-term') : target.attr('data-search-term'); - if (itemId !== 'sterm_-1') { - var searchCont = $('#lvl-search-terms-container'); - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - if ($(this).attr('data-search-term') !== itemId) { - search += $(this).parent().text() + ' '; - } - }); - } - this.searchLinks(search); - }, - addSearchTerm : function(e) { - e.preventDefault(); - var newTermInput = this.$('#lvl-add-search-term-input'), newTerm = newTermInput.val().trim(); - if (newTerm.length > 0) { - this.$('li#lvl-add-search-term-container').hide(); - var searchCont = this.$('#lvl-search-terms-container'); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_0', - sterm_text : newTerm, - sterm_icon : 'label-default', - sterm_title : 'Remove' - })); - var search = ''; - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - search += $(this).parent().text() + ' '; - }); - this.searchSequences(search); - } else { - newTermInput.val(''); - } - }, - handleClickSavable : function(e) { - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Unsaved search', - 'Start dragging the icon to open your saved items', - false); - }); - }, - handleDragStart : function(e) { - var self = this; - e.originalEvent.dataTransfer.setData('srcId', $(e.target).attr('data-savable-id')); - e.originalEvent.dataTransfer.setData('savableType', 'saved_search'); - e.originalEvent.dataTransfer.setData('savable', JSON.stringify(new SavedSearchEntity.SavedSearch({ - type : 'sequences;' + self.data_source, - description : '', - search : self.collection.formattedQuery - }).toJSON())); - Lvl.vent.trigger('editable:items:dragstart'); - }, - handleDragEnd : function(e) { - Lvl.vent.trigger('editable:items:dragend'); - }, - startTour : function(e) { - e.preventDefault(); - require([ 'apps/analysis/runs/tours/runs_tour' ], function(tour) { - tour(); - }); - }, - removeRun : function(e) { - e.preventDefault(); - var self = this; - var target = $(e.target); - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-remove') : target.getAttribute('data-remove'); - var item = this.collection.get(itemId); - item.oauth2_token = config.authorizationToken(); - require([ 'common/confirm' ], function(confirmDialog) { - confirmDialog('Confirm deletion', 'This action will delete the products associated to the selected run. Are you sure?', function() { - self.collection.remove(item); - item.destroy({ - success : function(e) { - }, - error : function(e) { - require([ 'common/alert' ], function(alertDialog) { - alertDialog('Error', 'The execution cannot be canceled.'); - }); - } - }); - }, { - btn_text : 'Delete' - }); - }); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:backgrid:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:pace:entities').toJSON()); - }); - }, - onDestroy : function() { - // don't remove the styles in order to enable them to be reused - pace.stop(); - this.stopListening(); - // remove all event handlers - Lvl.vent.off('search:form:submitted'); - $('#lvl-search-form').unbind(); - $('button#lvl-feature-tour-btn').unbind(); - // clean menu - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu-toggle').hide(0); - $('#lvl-floating-menu').empty(); - // clean tour - require([ 'hopscotch' ], function(hopscotch) { - hopscotch.endTour(); - }); - }, - onRender : function() { - var self = this; - pace.start(); - - var gridContainer = this.$('#grid-container'); - gridContainer.append(this.grid.render().el); - - var paginator = new Backgrid.Extension.Paginator({ - collection : this.collection, - windowSize : 14, - slideScale : 0.5, - goBackFirstOnSort : true - }); - - gridContainer.after(paginator.render().el); - - $(paginator.el).css({ - 'margin-top' : '20px' - }); - - var filter = new Backgrid.Extension.ServerSideFilter({ - collection : this.collection, - name : 'q', - placeholder : 'filter executions' - }); - - var filterToolbar = this.$('#grid-filter-toolbar'); - filterToolbar.append(filter.render().el); - - $(filter.el).addClass('hidden'); - - this.grid.clearSelectedModels(); - - this.collection.fetch({ - reset : true - }); - } - }); - }); - return Lvl.AnalysisApp.Runs.View; - }); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/tours/runs_tour.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/tours/runs_tour.js deleted file mode 100644 index 6ba168dc..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/tours/runs_tour.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * RequireJS module that defines the tour: analysis->runs->tour. - */ - -define( - [ 'app', 'apps/config/marionette/styles/style', 'hopscotch' ], - function(Lvl, Style, hopscotch) { - return function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:hopscotch:entities').toJSON()); - }); - var tour = { - id : 'analysis-runs', - showPrevButton : false, - skipIfNoElement : true, - steps : [ - { - target : document.querySelector('div#section-tab-list'), - placement : 'bottom', - fixedElement : true, - title : 'This is the navigation menu', - content : 'Use the links here to get around on the runs features.' - }, - { - target : document.querySelector('a#btnSearchToggle'), - placement : 'left', - fixedElement : true, - title : 'This is the search button', - content : 'Use it to search for items. Click on the search icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, - { - delay : 300, - target : document.querySelector('input#lvl-search-form-input'), - placement : 'bottom', - fixedElement : true, - title : 'This is the search box', - content : 'It supports the LvLQL query language to search the runs. Enter 2015 in the input box and hit enter. Once the search is completed continue this tour.' - }, - { - target : document.querySelector('ul#lvl-search-terms-container'), - placement : 'bottom', - title : 'Your search terms are listed', - content : 'Use the provided controls to clear/add search terms. Drag the icon to save your search terms.', - }, - { - target : document.querySelector('div#grid-container'), - placement : 'top', - yOffset : 100, - title : 'This is the result dataset', - content : 'Columns are sortable, rows are selectable. Additional controls are found at the right lateral side of the grid.' - }, - { - target : document.querySelector('button#lvl-toggle-toolbar-btn'), - placement : 'left', - fixedElement : true, - title : 'This is the Tools menu', - content : 'Use the controls here to perform additionl actions on the dataset and the selected items. Click on the menu icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, { - delay : 300, - target : document.querySelector('div#lvl-floating-menu-toggle'), - placement : 'left', - xOffset : -10, - fixedElement : true, - title : 'Additional controls are displayed', - content : 'Include deselecting all selected items.', - onNext : function() { - $('button#lvl-toggle-toolbar-btn').click(); - } - }, { - delay : 300, - target : document.querySelector('button#lvl-feature-tour-btn'), - placement : 'left', - fixedElement : true, - title : 'You\'re all set!', - content : 'Run this tour as many times as you need.' - } ] - }; - hopscotch.startTour(tour); - } - }); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/tpls/analysis_runs.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/tpls/analysis_runs.html deleted file mode 100644 index 17348db7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/tpls/analysis_runs.html +++ /dev/null @@ -1,13 +0,0 @@ - - -
-
-
-
-
- - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/tpls/toolbar_browse.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/tpls/toolbar_browse.html deleted file mode 100644 index d52336b9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs/tpls/toolbar_browse.html +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs_item/analysis_runs_item_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs_item/analysis_runs_item_ctrl.js deleted file mode 100644 index e0260ab5..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs_item/analysis_runs_item_ctrl.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * RequireJS module that defines the controller: analysis->runs_item. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'entities/workflow_run', 'apps/analysis/runs_item/analysis_runs_item_view' ], function(Lvl, - Configuration, WorkflowRunModel, View) { - Lvl.module('AnalysisApp.RunsItem', function(RunsItem, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - RunsItem.Controller = { - showSection : function(itemId) { - var runModel = new WorkflowRunModel.WorkflowRun(); - runModel.set('id', itemId); - runModel.oauth2_token = config.authorizationToken(); - var view = new View.Content({ - model : runModel - }); - view.on('analysis:pipeline:product:show', function(productJSON) { - var product = JSON.parse(productJSON); - if (product.path.substr(product.path.length - '.nwk'.length, product.path.length) === '.nwk') { - // TODO require([ 'apps/analysis/tree_viewer/analysis_tree_viewer_view' ], function(TreeViewerView) { - // TODO var dialogView = new TreeViewerView.Content({ - require([ 'apps/analysis/text_viewer/analysis_text_viewer_view' ], function(TextViewerView) { - var dialogView = new TextViewerView.Content({ - 'product' : product - }); - Lvl.dialogRegion.show(dialogView); - }); - } else { - require([ 'apps/analysis/text_viewer/analysis_text_viewer_view' ], function(TextViewerView) { - var dialogView = new TextViewerView.Content({ - 'product' : product - }); - Lvl.dialogRegion.show(dialogView); - }); - } - }); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.AnalysisApp.RunsItem.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs_item/analysis_runs_item_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs_item/analysis_runs_item_view.js deleted file mode 100644 index 754f3fe6..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs_item/analysis_runs_item_view.js +++ /dev/null @@ -1,123 +0,0 @@ -/** - * RequireJS module that defines the view: analysis->runs_item. - */ - -define([ 'app', 'tpl!apps/analysis/runs_item/templates/analysis_runs_item', 'apps/config/marionette/styles/style', 'entities/workflow_run', - 'apps/config/marionette/configuration', 'pace', 'backbone.oauth2' ], function(Lvl, RunItemTpl, Style, WorkflowRunModel, Configuration, pace) { - Lvl.module('AnalysisApp.RunsItem.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - View.Content = Marionette.ItemView.extend({ - id : 'runs', - template : RunItemTpl, - templateHelpers : function() { - return { - statusClass : function() { - var clazz = 'default'; - if (!this.status || !this.status.status) { - return clazz; - } - switch (this.status.status) { - case 'Queued': - clazz = 'default'; - break; - case 'Running': - clazz = 'primary'; - break; - case 'Finished': - clazz = 'success'; - break; - case 'ExecutionError': - clazz = 'danger'; - break; - case 'Unknown': - clazz = 'warning'; - break; - } - return clazz; - } - }; - }, - initialize : function() { - this.listenTo(this.model, 'request', this.displaySpinner); - this.listenTo(this.model, 'sync error', this.removeSpinner); - this.listenTo(this.model, 'change', this.render); - var self = this; - this.timer = setInterval(function() { - self.updateModel(); - }, 2000); - }, - displaySpinner : function() { - pace.restart(); - $('#item-container').fadeTo('fast', 0.4); - }, - removeSpinner : function() { - pace.stop(); - $('#item-container').fadeTo('fast', 1); - $('html,body').animate({ - scrollTop : 0 - }, '500', 'swing'); - }, - events : { - 'click a#hide-edition-toolbar-btn' : 'hideToolbar', - 'click a#show-edition-toolbar-btn' : 'showToolbar', - 'click a[data-open]' : 'openRun', - 'click a#refresh-btn' : 'refreshRun' - }, - hideToolbar : function(e) { - e.preventDefault(); - this.$('#edition-toolbar').hide(); - this.$('#show-edition-toolbar-btn').removeClass('hidden'); - this.$('#show-edition-toolbar-btn').show(); - }, - showToolbar : function(e) { - e.preventDefault(); - this.$('#show-edition-toolbar-btn').hide(); - this.$('#edition-toolbar').show(); - }, - openRun : function(e) { - e.preventDefault(); - var self = this; - var target = $(e.target); - var productId = target.attr('data-open'); - self.trigger('analysis:pipeline:product:show', productId); - }, - refreshRun : function(e) { - e.preventDefault(); - var self = this; - self.updateModel(); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:pace:entities').toJSON()); - }); - }, - onDestroy : function() { - this.terminateTimer(); - pace.stop(); - }, - onRender : function() { - var self = this; - pace.start(); - self.updateModel(); - }, - updateModel : function() { - var self = this; - self.model.fetch({ - reset : true - }).done(function() { - var status = self.model.get('status'); - if (status && (status.status === 'Finished' || status.status === 'ExecutionError' || status.status === 'Unknown')) { - self.terminateTimer(); - } - }); - }, - terminateTimer : function() { - clearInterval(this.timer); - // console.log('runs_item timer destroy'); - } - }); - }); - return Lvl.AnalysisApp.RunsItem.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs_item/templates/analysis_runs_item.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs_item/templates/analysis_runs_item.html deleted file mode 100644 index a21234cf..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/runs_item/templates/analysis_runs_item.html +++ /dev/null @@ -1,59 +0,0 @@ -
-
-
-
- - -
-
-
-
-
-
-
-
-
Invocation Id: <%= id %>
-

 

-
Progress: <% if (status) { %><%= status.completeness %><% } else { %><% print('0') %><% } %>%
-
-
- <% if (status) { %><%= status.completeness %><% } else { %><% print('0') %><% } %>% -
-
-
Status: - <% if (status) { %><%= status.status %><% } else { %><% print('Unknown') %><% } %> - -
- <% if (status && status.description) { %>
Remote error
<%= status.description %>
<% } %> -
-
-
-
- <% if (products) { %> -
-
- -
-
- -
-
-
-
- <% } %> -
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/submit/analysis_submit_pipeline_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/submit/analysis_submit_pipeline_view.js deleted file mode 100644 index b529497e..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/submit/analysis_submit_pipeline_view.js +++ /dev/null @@ -1,180 +0,0 @@ -/** - * RequireJS module that defines the view: analysis->run_workflow. - */ - -define([ 'app', 'tpl!apps/analysis/submit/tpls/analysis_submit_pipeline', 'tpl!apps/analysis/submit/tpls/parameters', - 'tpl!apps/analysis/submit/tpls/parameter', 'apps/config/marionette/configuration', 'entities/wf_params', 'text!data/pipelines.json', 'backbone.syphon', - 'bootstrap3-typeahead' ], function(Lvl, SubmitPipelineTpl, ParametersTpl, ParamTpl, Configuration, ParamsEntity, PipelinesJson) { - Lvl.module('AnalysisApp.Submit.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - View.ParamItem = Marionette.ItemView.extend({ - tagName : 'div', - template : ParamTpl, - onRender : function() { - this.$el.addClass('form-group'); - if (this.model.get('name') === 'HTTPGet-RequestHeaders') { - this.$el.addClass('hidden'); - } else if (this.model.get('name') === 'SequenceURL') { - this.$el.find('input.form-control').attr({ - 'data-provide' : 'typeahead', - 'autocomplete' : 'off' - }); - this.$el.find('input[data-provide="typeahead"]').typeahead({ - delay : 200, - source : function(query, process) { - return $.ajax({ - type : 'GET', - dataType : 'json', - crossDomain : true, - url : config.get('service', '') + '/datasets/objects/~/' + query + '/typeahead', - headers : config.authorizationHeader() - }).done(function(data) { - return process(data); - }); - } - }); - } - }, - onDestroy : function() { - this.$el.find('input[data-provide="typeahead"]').typeahead('destroy'); - } - }); - View.Parameters = Marionette.CompositeView.extend({ - template : ParametersTpl, - childView : View.ParamItem, - childViewContainer : 'fieldset', - onRender : function() { - this.collection.fetch({ - reset : true - }); - } - }); - View.Content = Marionette.LayoutView.extend({ - template : SubmitPipelineTpl, - regions : { - parametersRegion : '#lvl-wf-params' - }, - initialize : function(options) { - this.workflowId = options.workflowId; - this.parameters = new ParamsEntity.WorkflowParametersCollection({ - oauth2_token : config.authorizationToken(), - workflowId : this.workflowId - }); - this.listenTo(this.parameters, 'reset', this.startTypeahead); - }, - events : { - 'click button#submit-btn' : 'submitWorkflow' - }, - submitWorkflow : function(e) { - e.preventDefault(); - var formData = Backbone.Syphon.serialize(this); - var self = this; - var pipelinesObj = []; - try { - pipelinesObj = JSON.parse(PipelinesJson); - } catch (err) { - console.log('Failed to load pipelines configuration: ' + err); - } - var pipeline = _.find(pipelinesObj, function(item) { - return item.id === self.workflowId; - }); - var requestData = { - 'id' : null, - 'workflowId' : self.workflowId, - 'version' : pipeline ? pipeline.stable || 0 : 0, - 'invocationId' : null, - 'parameters' : { - 'parameters' : [] - } - }; - this.parameters.each(function(param) { - var value = ''; - switch (param.get('name')) { - case 'HTTPGet-RequestHeaders': - value = 'Authorization: Bearer ' + config.authorizationToken() - break; - case 'SequenceURL': - value = config.get('service') + '/datasets/objects/~/' + encodeURIComponent(formData[param.get('name')]) + '/download' - break; - default: - value = formData[param.get('name')]; - break; - } - requestData.parameters.parameters.push({ - 'name' : param.get('name'), - 'value' : value - }); - }); - // submit request to LVL server - $('#submit-btn').attr('disabled', 'disabled'); - var jqxhr = $.ajax({ - type : 'POST', - contentType : 'application/json', - crossDomain : true, - url : config.get('service', '') + '/pipelines/runs/~', - data : JSON.stringify(requestData), - headers : config.authorizationHeader() - }).done(function(data, textStatus, request) { - self.trigger('destroy'); - require([ 'common/growl' ], function(createGrowl) { - var anchor = $('', { - href : request.getResponseHeader('Location') - })[0]; - var id = anchor.pathname.substring(anchor.pathname.lastIndexOf('/') + 1); - createGrowl('Pipeline submitted: show', false); - }); - }).fail(function() { - self.trigger('destroy'); - require([ 'qtip' ], function(qtip) { - var message = $('

', { - text : 'Failed to submit molecular pipeline to the LVL service.' - }), ok = $(' -

- - - - - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/submit/tpls/parameter.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/submit/tpls/parameter.html deleted file mode 100644 index bef75807..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/submit/tpls/parameter.html +++ /dev/null @@ -1,3 +0,0 @@ - - -<%= description %> \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/submit/tpls/parameters.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/submit/tpls/parameters.html deleted file mode 100644 index 7e834eb3..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/submit/tpls/parameters.html +++ /dev/null @@ -1,3 +0,0 @@ -
- Execution parameters -
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/text_viewer/analysis_text_viewer_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/text_viewer/analysis_text_viewer_view.js deleted file mode 100644 index 60e45217..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/text_viewer/analysis_text_viewer_view.js +++ /dev/null @@ -1,79 +0,0 @@ -/** - * RequireJS module that defines the view: analysis->text_viewer. - */ - -define([ 'app', 'tpl!apps/analysis/text_viewer/templates/analysis_text_viewer', 'apps/config/marionette/configuration', 'pace' ], function(Lvl, TreeViewerTpl, - Configuration, pace) { - Lvl.module('AnalysisApp.TreeViewer.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - View.Content = Marionette.ItemView.extend({ - template : TreeViewerTpl, - initialize : function(options) { - this.product = options.product; - }, - onRender : function() { - var self = this; - pace.start(); - var jqxhr = $.ajax( - { - type : 'GET', - dataType : 'text', - crossDomain : true, - url : config.get('service', '') + '/pipelines/runs/text_product/~/' + self.product.id + '/' - + btoa(unescape(encodeURIComponent(self.product.path))), - headers : config.authorizationHeader() - }).done(function(data) { - self.$('#textCanvas').html('
' + data + '
'); - }).fail(function() { - self.trigger('destroy'); - require([ 'qtip' ], function(qtip) { - var message = $('

', { - text : 'Failed to load text product from the LVL service.' - }), ok = $(' -

- - - - - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/tree_viewer/analysis_tree_viewer_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/tree_viewer/analysis_tree_viewer_view.js deleted file mode 100644 index 293a6f35..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/analysis/tree_viewer/analysis_tree_viewer_view.js +++ /dev/null @@ -1,100 +0,0 @@ -/** - * RequireJS module that defines the view: analysis->tree_viewer. - */ - -define([ 'app', 'tpl!apps/analysis/tree_viewer/templates/analysis_tree_viewer', 'apps/config/marionette/configuration', 'pace' ], function(Lvl, TreeViewerTpl, - Configuration, pace) { - Lvl.module('AnalysisApp.TreeViewer.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - View.Content = Marionette.ItemView.extend({ - template : TreeViewerTpl, - initialize : function(options) { - this.product = options.product; - this.dataObject = { - newick : '()' - }; - }, - events : { - 'click a#display-tree-btn' : 'displayTree', - 'click a#display-circle-btn' : 'displayCircle' - }, - displayTree : function() { - this.$('#svgCanvas').html(''); - var phylocanvas = new Smits.PhyloCanvas(this.dataObject, 'svgCanvas', 500, 500); - }, - displayCircle : function() { - this.$('#svgCanvas').html(''); - var phylocanvas = new Smits.PhyloCanvas(this.dataObject, 'svgCanvas', 800, 800, 'circular'); - }, - onRender : function() { - var self = this; - pace.start(); - require([ 'raphael', 'jsphylosvg' ], function(Raphael, Smits) { - var jqxhr = $.ajax( - { - type : 'GET', - dataType : 'text', - crossDomain : true, - url : config.get('service', '') + '/pipelines/runs/text_product/~/' + self.product.id + '/' - + btoa(unescape(encodeURIComponent(self.product.path))), - headers : config.authorizationHeader() - }).done(function(data) { - self.dataObject = { - newick : data, - fileSource : true - }; - self.displayTree(); - }).fail(function() { - self.trigger('destroy'); - require([ 'qtip' ], function(qtip) { - var message = $('

', { - text : 'Failed to load phylogenetic study from the LVL service.' - }), ok = $(' -

- - - - - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/collection_browse_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/collection_browse_ctrl.js deleted file mode 100644 index 30b2fee4..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/collection_browse_ctrl.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * RequireJS module that defines the controller: collection->browse. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'entities/sequence', 'apps/collection/browse/collection_browse_view' ], function(Lvl, Configuration, - SequenceModel, View) { - Lvl.module('CollectionApp.Browse', function(Browse, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Browse.Controller = { - showSection : function(id) { - var collectionId = id || 'sandflies'; - var view = new View.Content({ - collection : new SequenceModel.SequencePageableCollection({ - oauth2_token : new Configuration().authorizationToken(), - data_source : collectionId - }) - }); - view.on('sequences:view:sequence', function(collectionId, accession) { - require([ 'apps/collection/sequence_viewer/collection_sequence_viewer', 'entities/gb_sequence' ], function(SequenceView, GbSequenceModel) { - var gbSequenceModel = new GbSequenceModel.GbSequence({ - 'dataSource' : collectionId, - 'gbSeqPrimaryAccession' : accession - }); - gbSequenceModel.oauth2_token = new Configuration().authorizationToken(); - var dialogView = new SequenceView.Content({ - model : gbSequenceModel - }); - Lvl.dialogRegion.show(dialogView); - }); - }); - view.on('sequences:file:export', function(collectionId, selectedModels) { - require([ 'apps/collection/export/export_view' ], function(EditView) { - var sequences = selectedModels.filter(function(element) { - return element !== undefined && element !== null; - }); - var dialogView = new EditView.Content({ - collection : new SequenceModel.SequenceCollection(sequences), - data_source : collectionId - }); - Lvl.dialogRegion.show(dialogView); - }); - }); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.CollectionApp.Browse.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/collection_browse_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/collection_browse_view.js deleted file mode 100644 index 7a620133..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/collection_browse_view.js +++ /dev/null @@ -1,375 +0,0 @@ -/** - * RequireJS module that defines the view: collection->browse. - */ - -define([ 'app', 'tpl!apps/collection/browse/templates/collection_browse', 'tpl!apps/collection/browse/templates/toolbar_browse', - 'tpl!common/search/tpls/search_term', 'tpl!common/search/tpls/add_search_term', 'tpl!common/search/tpls/save_search', - 'apps/config/marionette/styles/style', 'entities/sequence', 'entities/saved_search', 'pace', 'common/country_names', 'backbone.oauth2', 'backgrid', - 'backgrid-paginator', 'backgrid-select-all', 'backgrid-filter' ], function(Lvl, BrowseTpl, ToolbarTpl, SearchTermTpl, AddSearchTermTpl, SaveSearchTpl, - Style, SequenceEntity, SavedSearchEntity, pace, mapCn) { - Lvl.module('CollectionApp.Browse.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var columns = [ - { - name : 'dataSource', - label : 'Source', - editable : false, - cell : 'string' - }, - { - name : 'definition', - label : 'Definition', - editable : false, - cell : 'string' - }, - { - name : 'accession', - label : 'Accession', - editable : false, - cell : 'string' - }, - { - name : 'length', - label : 'Length', - editable : false, - cell : 'integer', - formatter : _.extend({}, Backgrid.CellFormatter.prototype, { - innerFormatter : new Backgrid.NumberFormatter({ - decimals : 0 - }), - fromRaw : function(rawValue, model) { - var self = this; - return self.innerFormatter.fromRaw(rawValue) + " bp"; - } - }) - }, - { - name : 'gene', - label : 'Gene', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - if (rawValue !== undefined) { - var names = ''; - for (var i = 0; i < rawValue.length; i++) { - names += rawValue[i] + ' '; - } - this.$el.append(names.trim()); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'organism', - label : 'Organism', - editable : false, - cell : 'string' - }, - { - name : 'locale', - label : 'Country', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - var twoLetterCode = formattedValue.split("_")[1]; - var code2 = twoLetterCode ? twoLetterCode.toUpperCase() : ''; - var countryName = mapCn[code2]; - if (countryName) { - this.$el.append('' + countryName + ''); - } - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'id', - label : '', - editable : false, - sortable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append(''); - } - this.delegateEvents(); - return this; - } - }) - } ]; - View.Content = Marionette.ItemView.extend({ - id : 'browse', - template : BrowseTpl, - initialize : function() { - this.data_source = this.collection.data_source || 'sandflies'; - this.listenTo(this.collection, 'request', this.displaySpinner); - this.listenTo(this.collection, 'sync error', this.removeSpinner); - this.grid = new Backgrid.Grid({ - columns : [ { - name : '', - cell : 'select-row', - headerCell : 'select-all' - } ].concat(columns), - collection : this.collection, - emptyText : 'No sequences found' - }); - // setup search - Lvl.vent.on('search:form:submitted', this.searchSequences); - // setup menu - $('#lvl-floating-menu-toggle').show(0); - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu').empty(); - $('#lvl-floating-menu').append(ToolbarTpl({ - isSanflies : 'sandflies' === this.data_source, - isLeishmania : 'leishmania' === this.data_source - })); - $('a#export-btn').on('click', { - view : this - }, this.exportFile); - $('a#uncheck-btn').on('click', { - grid : this.grid - }, this.deselectAll); - $('button#lvl-feature-tour-btn').on('click', this.startTour); - }, - displaySpinner : function() { - pace.restart(); - $('#grid-container').fadeTo('fast', 0.4); - }, - removeSpinner : function() { - pace.stop(); - var self = this; - $('#grid-container').fadeTo('fast', 1); - $('html,body').animate({ - scrollTop : 0 - }, '500', 'swing', function() { - // reset search terms - var searchCont = $('#lvl-search-terms-container'); - searchCont.empty(); - // setup search terms from server response - if (self.collection.formattedQuery && self.collection.formattedQuery.length > 0) { - var i = 1; - _.each(self.collection.formattedQuery, function(item) { - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_' + (i++), - sterm_text : item['term'], - sterm_icon : Boolean(item['valid']) ? 'label-success' : 'label-warning', - sterm_title : 'Remove' - })); - }); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_-1', - sterm_text : 'clear all', - sterm_icon : 'label-danger', - sterm_title : 'Remove All' - })); - searchCont.append(AddSearchTermTpl({})); - searchCont.append(SaveSearchTpl({})); - $('#lvl-search-terms').show('fast'); - } else { - $('#lvl-search-terms').hide('fast'); - } - }); - }, - events : { - 'click a[data-search-term]' : 'resetSearchTerms', - 'submit form#lvl-add-search-term-form' : 'addSearchTerm', - 'click div.lvl-savable' : 'handleClickSavable', - 'dragstart div.lvl-savable' : 'handleDragStart', - 'dragend div.lvl-savable' : 'handleDragEnd', - 'click a[data-country-code2]' : 'filterByCountry', - 'click a[data-seq_id]' : 'showSequenceRecord' - }, - exportFile : function(e, data) { - e.preventDefault(); - var selectedModels = e.data.view.grid.getSelectedModels(); - if (selectedModels && selectedModels.length > 0) { - $('#lvl-floating-menu').hide('fast'); - e.data.view.trigger('sequences:file:export', e.data.view.collection.data_source, selectedModels); - } else { - $('#lvl-floating-menu').hide('0'); - require([ 'common/growl' ], function(createGrowl) { - createGrowl('No sequences selected', 'Select at least one sequence to be exported', false); - }); - } - }, - deselectAll : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - e.data.grid.clearSelectedModels(); - }, - searchSequences : function(search) { - var backgridFilter = $('form.backgrid-filter:first'); - backgridFilter.find('input:first').val(search); - backgridFilter.submit(); - }, - resetSearchTerms : function(e) { - e.preventDefault(); - var target = $(e.target); - var search = ''; - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-search-term') : target.attr('data-search-term'); - if (itemId !== 'sterm_-1') { - var searchCont = $('#lvl-search-terms-container'); - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - if ($(this).attr('data-search-term') !== itemId) { - search += $(this).parent().text() + ' '; - } - }); - } - this.searchSequences(search); - }, - addSearchTerm : function(e) { - e.preventDefault(); - var newTermInput = this.$('#lvl-add-search-term-input'), newTerm = newTermInput.val().trim(); - if (newTerm.length > 0) { - this.$('li#lvl-add-search-term-container').hide(); - var searchCont = this.$('#lvl-search-terms-container'); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_0', - sterm_text : newTerm, - sterm_icon : 'label-default', - sterm_title : 'Remove' - })); - var search = ''; - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - search += $(this).parent().text() + ' '; - }); - this.searchSequences(search); - } else { - newTermInput.val(''); - } - }, - filterByCountry : function(e) { - e.preventDefault(); - var _self = this; - var target = $(e.target); - var countryCode = target.is('span') || target.is('img') ? target.parent('a').get(0).getAttribute('data-country-code2') : target - .attr('data-country-code2'); - this.searchSequences('locale:_' + countryCode.toUpperCase()); - }, - handleClickSavable : function(e) { - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Unsaved search', - 'Start dragging the icon to open your saved items', - false); - }); - }, - handleDragStart : function(e) { - var self = this; - e.originalEvent.dataTransfer.setData('srcId', $(e.target).attr('data-savable-id')); - e.originalEvent.dataTransfer.setData('savableType', 'saved_search'); - e.originalEvent.dataTransfer.setData('savable', JSON.stringify(new SavedSearchEntity.SavedSearch({ - type : 'collection;browse;' + self.data_source, - description : '', - search : self.collection.formattedQuery - }).toJSON())); - Lvl.vent.trigger('editable:items:dragstart'); - }, - handleDragEnd : function(e) { - Lvl.vent.trigger('editable:items:dragend'); - }, - startTour : function(e) { - e.preventDefault(); - require([ 'apps/collection/browse/tours/collection_tour' ], function(tour) { - tour(); - }); - }, - showSequenceRecord : function(e) { - e.preventDefault(); - var self = this; - var target = $(e.target); - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-seq_id') : target.attr('data-seq_id'); - this.trigger('sequences:view:sequence', self.collection.data_source, itemId); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:backgrid:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:pace:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:flags:entities').toJSON()); - }); - }, - onDestroy : function() { - // don't remove the styles in order to enable them to be reused - pace.stop(); - this.stopListening(); - // remove all event handlers - Lvl.vent.off('search:form:submitted'); - $('#lvl-search-form').unbind(); - $('a#export-btn').unbind(); - $('a#uncheck-btn').unbind(); - $('button#lvl-feature-tour-btn').unbind(); - // clean menu - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu-toggle').hide(0); - $('#lvl-floating-menu').empty(); - // clean tour - require([ 'hopscotch' ], function(hopscotch) { - hopscotch.endTour(); - }); - }, - onRender : function() { - var self = this; - pace.start(); - - var gridContainer = this.$('#grid-container'); - gridContainer.append(this.grid.render().el); - - var paginator = new Backgrid.Extension.Paginator({ - collection : this.collection, - windowSize : 14, - slideScale : 0.5, - goBackFirstOnSort : true - }); - - gridContainer.after(paginator.render().el); - - $(paginator.el).css({ - 'margin-top' : '20px' - }); - - var filter = new Backgrid.Extension.ServerSideFilter({ - collection : this.collection, - name : 'q', - placeholder : 'filter sequences' - }); - - var filterToolbar = this.$('#grid-filter-toolbar'); - filterToolbar.append(filter.render().el); - - $(filter.el).addClass('hidden'); - - this.grid.clearSelectedModels(); - }, - onShow : function() { - var _self = this; - var params = Lvl.flashed(); - if (!$.isEmptyObject(params) && params.get('type') === 'collection;browse;' + _self.data_source) { - var search = ''; - _.each(params.get('search'), function(item) { - search += item.term; - }); - _self.searchSequences(search); - } else { - this.collection.fetch({ - reset : true - }); - } - } - }); - }); - return Lvl.CollectionApp.Browse.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/templates/collection_browse.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/templates/collection_browse.html deleted file mode 100644 index 17348db7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/templates/collection_browse.html +++ /dev/null @@ -1,13 +0,0 @@ - - -
-
-
-
-
- - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/templates/toolbar_browse.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/templates/toolbar_browse.html deleted file mode 100644 index c73d8572..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/templates/toolbar_browse.html +++ /dev/null @@ -1,12 +0,0 @@ -
- - - - - - - -
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/tours/collection_tour.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/tours/collection_tour.js deleted file mode 100644 index 9eabe592..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/browse/tours/collection_tour.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * RequireJS module that defines the tour: collection->tour. - */ - -define( - [ 'app', 'apps/config/marionette/styles/style', 'hopscotch' ], - function(Lvl, Style, hopscotch) { - return function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:hopscotch:entities').toJSON()); - }); - var tour = { - id : 'collection-browse', - showPrevButton : false, - skipIfNoElement : true, - steps : [ - { - target : document.querySelector('div#section-tab-list'), - placement : 'bottom', - fixedElement : true, - title : 'This is the navigation menu', - content : 'Use the links here to get around on the collection features.' - }, - { - target : document.querySelector('a#btnSearchToggle'), - placement : 'left', - fixedElement : true, - title : 'This is the search button', - content : 'Use it to search for items. Click on the search icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, - { - delay : 300, - target : document.querySelector('input#lvl-search-form-input'), - placement : 'bottom', - fixedElement : true, - title : 'This is the search box', - content : 'It supports the LvLQL query language to search the collection. Enter partial sequence in the input box and hit enter. Once the search is completed continue this tour.' - }, - { - target : document.querySelector('ul#lvl-search-terms-container'), - placement : 'bottom', - title : 'Your search terms are listed', - content : 'Use the provided controls to clear/add search terms. Drag the icon to save your search terms.', - }, - { - target : document.querySelector('div#grid-container'), - placement : 'top', - yOffset : 100, - title : 'This is the result dataset', - content : 'Columns are sortable, rows are selectable. Additional controls are found at the right lateral side of the grid.' - }, - { - target : document.querySelector('button#lvl-toggle-toolbar-btn'), - placement : 'left', - fixedElement : true, - title : 'This is the Tools menu', - content : 'Use the controls here to perform additionl actions on the dataset and the selected items. Click on the menu icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, { - delay : 300, - target : document.querySelector('div#lvl-floating-menu-toggle'), - placement : 'left', - xOffset : -10, - fixedElement : true, - title : 'Additional controls are displayed', - content : 'Include exporting the selected items and switching to another collection.', - onNext : function() { - $('button#lvl-toggle-toolbar-btn').click(); - } - }, { - delay : 300, - target : document.querySelector('button#lvl-feature-tour-btn'), - placement : 'left', - fixedElement : true, - title : 'You\'re all set!', - content : 'Run this tour as many times as you need.' - } ] - }; - hopscotch.startTour(tour); - } - }); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/collection_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/collection_app.js deleted file mode 100644 index 7d316613..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/collection_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: collection. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('CollectionApp', function(CollectionApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - CollectionApp.startWithParent = false; - - CollectionApp.onStart = function() { - console.log('starting CollectionApp'); - }; - - CollectionApp.onStop = function() { - console.log('stopping CollectionApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('collection:set:active', function(section, subsection) { - require([ 'apps/collection/layout/collection_layout_ctrl' ], function(LayoutController) { - CollectionApp.currentSection = LayoutController.showLayout(section, subsection); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/collection_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/collection_router.js deleted file mode 100644 index 947d5305..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/collection_router.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: collection. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'routefilter' ], function(Lvl, Configuration) { - Lvl.module('Routers.CollectionApp', function(CollectionAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var Router = Backbone.Router.extend({ - routes : { - 'collection' : 'showCollection', - 'collection/:section' : 'showCollection', - 'collection/:section/:subsection' : 'showCollection' - }, - before : function() { - if (!config.isAuthenticated()) { - Lvl.navigate('login/' + encodeURIComponent(Backbone.history.fragment) + '/unauthenticated', { - trigger : true, - replace : true - }); - return false; - } - require([ 'apps/collection/collection_app' ], function() { - Lvl.execute('set:active:header', 'workspace', 'collection'); - Lvl.execute('set:active:footer', 'workspace'); - Lvl.startSubApp('CollectionApp'); - }); - return true; - }, - showCollection : function(section, subsection) { - section = (section || 'browse').toLowerCase(); - if (section === 'browse') { - subsection = (subsection || 'sandflies').toLowerCase(); - Lvl.navigate('collection/' + section + '/' + subsection, { - trigger : false, - replace : true - }); - Lvl.execute('collection:set:active', section, subsection); - } else if (section === 'map' || section === 'stats' || section === 'submit') { - Lvl.execute('collection:set:active', section); - } else { - Lvl.navigate('not-found', { - trigger : true, - replace : true - }); - } - } - }); - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/export/export_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/export/export_view.js deleted file mode 100644 index af2efc07..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/export/export_view.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * RequireJS module that defines the view: collection->export_dataset. - */ - -define([ 'app', 'tpl!apps/collection/export/templates/collection_export_dataset', 'apps/config/marionette/configuration', 'chance', 'backbone.syphon' ], - function(Lvl, ExportDatasetTpl, Configuration, Chance) { - Lvl.module('CollectionApp.Export.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - View.Content = Marionette.ItemView.extend({ - template : ExportDatasetTpl, - templateHelpers : { - defaultFilename : function() { - return 'sequences-' + new Chance().string({ - length : 8, - pool : 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' - }); - } - }, - initialize : function(options) { - this.data_source = options.data_source || 'sandflies'; - }, - events : { - 'click button#export-btn' : 'exportDataset' - }, - exportDataset : function(e) { - e.preventDefault(); - var formData = Backbone.Syphon.serialize(this); - var requestData = { - 'filename' : formData.filename_input, - 'metadata' : { - 'description' : formData.description_input, - 'target' : { - 'collection' : this.data_source, - 'compression' : formData.compression_select, - 'filter' : formData.filter_select, - 'ids' : _.pluck(this.collection.toJSON(), 'id'), - 'type' : 'sequence' - } - } - }; - // submit request to LVL server - var self = this; - $('#export-btn').attr('disabled', 'disabled'); - var jqxhr = $.ajax({ - type : 'POST', - contentType : 'application/json', - crossDomain : true, - url : config.get('service', '') + '/datasets/objects/~', - data : JSON.stringify(requestData), - headers : config.authorizationHeader() - }).done( - function(data, textStatus, request) { - self.trigger('destroy'); - require([ 'common/growl' ], function(createGrowl) { - var anchor = $('', { - href : request.getResponseHeader('Location') - })[0]; - var filename = anchor.pathname.substring(anchor.pathname.lastIndexOf('/') + 1); - createGrowl('New dataset created', filename - + ' datasets', false); - }); - }).fail(function() { - self.trigger('destroy'); - require([ 'qtip' ], function(qtip) { - var message = $('

', { - text : 'Failed to create dataset.' - }), ok = $(' -

- - - - - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/collection_layout_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/collection_layout_ctrl.js deleted file mode 100644 index 75f2e8bd..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/collection_layout_ctrl.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * RequireJS module that defines the controller: collection->layout. - */ - -define([ 'app', 'apps/collection/layout/collection_layout_view' ], function(Lvl, View) { - Lvl.module('CollectionApp.Layout', function(Layout, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Layout.Controller = { - showLayout : function(section, id) { - require([ 'apps/collection/' + section + '/collection_' + section + '_ctrl', 'apps/collection/layout/entities/tablinks' ], function( - SectionController) { - var tabLinks = Lvl.request('collection:navigation:entities'); - var tabLinkToSelect = tabLinks.find(function(tabLink) { - return tabLink.get('link') === section; - }); - tabLinkToSelect.select(); - tabLinks.trigger('reset'); - var view = new View.Layout({ - navigation : tabLinks - }); - Lvl.mainRegion.show(view); - return SectionController.showSection(id); - }); - } - } - }); - return Lvl.CollectionApp.Layout.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/collection_layout_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/collection_layout_view.js deleted file mode 100644 index 3906c15f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/collection_layout_view.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * RequireJS module that defines the view: collection->layout. - */ - -define([ 'app', 'apps/config/marionette/regions/fadein', 'tpl!apps/collection/layout/templates/collection-layout', - 'tpl!apps/collection/layout/templates/tab-list', 'tpl!apps/collection/layout/templates/tab-link' ], function(Lvl, FadeInRegion, LayoutTpl, TabListTpl, - TabLinkTpl) { - Lvl.module('CollectionApp.Layout.View', function(View, Lvl, Backbone, Marionette, $, _) { - View.TabLink = Marionette.ItemView.extend({ - tagName : 'li', - template : TabLinkTpl, - onRender : function() { - if (this.model.selected) { - this.$el.addClass('active'); - } - } - }); - View.TabList = Marionette.CompositeView.extend({ - template : TabListTpl, - childView : View.TabLink, - childViewContainer : 'ul' - }); - View.Layout = Marionette.LayoutView.extend({ - template : LayoutTpl, - regions : { - tabList : '#section-tab-list', - tabContent : FadeInRegion.extend({ - el : '#section-tab-content' - }) - }, - initialize : function(options) { - this.navLinks = options.navigation; - // subscribe to events - $(document).on('keyup', this.handleEscKeyUpEvent); - }, - onDestroy : function() { - // unsubscribe from events - $(document).off('keyup', this.handleEscKeyUpEvent); - }, - onBeforeShow : function() { - this.showChildView('tabList', new View.TabList({ - collection : this.navLinks - })); - }, - events : { - 'click button#lvl-toggle-toolbar-btn' : 'toggleToolbar', - 'click a#lvl-collapse-toolbar-btn' : 'closeToolbar' - }, - toggleToolbar : function(e) { - e.preventDefault(); - var toolbar = $('#lvl-floating-menu'); - if (toolbar.is(':visible')) { - toolbar.hide('fast'); - } else { - toolbar.show('fast'); - } - }, - closeToolbar : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - }, - handleEscKeyUpEvent : function(e) { - var toolbar = $('#lvl-floating-menu'); - if (e.which == 27 && toolbar.is(':visible')) { - toolbar.hide('fast'); - } - } - }); - }); - return Lvl.CollectionApp.Layout.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/entities/tablinks.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/entities/tablinks.js deleted file mode 100644 index 8a0550c9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/entities/tablinks.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * RequireJS module that defines the entity: collection->tab-link. - */ - -define([ 'app', 'backbone.picky' ], function(Lvl) { - Lvl.module('CollectionApp.Entities', function(Entities, Lvl, Backbone, Marionette, $, _) { - Entities.Navigation = Backbone.Model.extend({ - defaults : { - link : '', - icon : 'fa-chain-broken', - text : 'Unknown' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.link) { - errors.link = 'can\'t be empty'; - } - if (!attrs.icon) { - errors.icon = 'can\'t be empty'; - } - if (!attrs.text) { - errors.text = 'can\'t be empty'; - } else { - if (attrs.text.length < 2) { - errors.text = 'is too short'; - } - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - - Entities.NavigationCollection = Backbone.Collection.extend({ - model : Entities.Navigation, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - - var iniNavigationLinks = function() { - Entities.navigationLinks = new Entities.NavigationCollection([ { - id : 1, - link : 'browse', - icon : 'fa-table', - text : 'Browse' - }, { - id : 2, - link : 'map', - icon : 'fa-map-marker', - text : 'Map' - }, { - id : 3, - link : 'stats', - icon : 'fa-bar-chart-o', - text : 'Stats' - }, { - id : 4, - link : 'submit', - icon : 'fa-cloud-upload', - text : 'Submit' - } ]); - }; - - var API = { - getNavigationEntities : function() { - if (Entities.navigationLinks === undefined) { - iniNavigationLinks(); - } - return Entities.navigationLinks; - } - } - - Lvl.reqres.setHandler('collection:navigation:entities', function() { - return API.getNavigationEntities(); - }); - }); - return; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/templates/collection-layout.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/templates/collection-layout.html deleted file mode 100644 index f86f1ab5..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/templates/collection-layout.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - -
- - -
-
-
-
-
- -
-
- -

 

 

 

 

-

 

 

 

 

-
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/templates/tab-link.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/templates/tab-link.html deleted file mode 100644 index e8e7438d..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/templates/tab-link.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/templates/tab-list.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/templates/tab-list.html deleted file mode 100644 index fecedd0c..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/layout/templates/tab-list.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/map/collection_map_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/map/collection_map_ctrl.js deleted file mode 100644 index 7bd3c3a7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/map/collection_map_ctrl.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * RequireJS module that defines the controller: collection->map. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'apps/collection/map/collection_map_view' ], function(Lvl, Configuration, View) { - Lvl.module('CollectionApp.Map', function(Map, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Map.Controller = { - showSection : function() { - var view = new View.Content(); - view.on('sequences:view:sequence', function(accession) { - require([ 'apps/collection/sequence_viewer/collection_sequence_viewer', 'entities/gb_sequence' ], function(SequenceView, GbSequenceModel) { - var gbSequenceModel = new GbSequenceModel.GbSequence({ - 'gbSeqPrimaryAccession' : accession - }); - gbSequenceModel.oauth2_token = new Configuration().authorizationToken(); - var dialogView = new SequenceView.Content({ - model : gbSequenceModel - }); - Lvl.dialogRegion.show(dialogView); - }); - }); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.CollectionApp.Map.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/map/collection_map_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/map/collection_map_view.js deleted file mode 100644 index b757b6f8..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/map/collection_map_view.js +++ /dev/null @@ -1,275 +0,0 @@ -/** - * RequireJS module that defines the view: collection->map. - */ - -define([ 'app', 'tpl!apps/collection/map/templates/collection_map', 'apps/config/marionette/styles/style', 'apps/config/marionette/configuration' ], function( - Lvl, MapTpl, Style, Configuration) { - Lvl.module('CollectionApp.Map.View', function(View, Lvl, Backbone, Marionette, $, _) { - var config = new Configuration(); - var center = { - lon : 3.7036, - lat : 40.4169 - }; - var zoom = 5.5; - View.Content = Marionette.ItemView.extend({ - id : 'map', - template : MapTpl, - initialize : function() { - $(window).on('resize', this.resize); - }, - events : { - 'click a[data-seq_id]' : 'showSequenceRecord' - }, - showSequenceRecord : function(e) { - e.preventDefault(); - var self = this; - var target = $(e.target); - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-seq_id') : target.attr('data-seq_id'); - this.trigger('sequences:view:sequence', itemId); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var styleLoader = new Style(); - styleLoader.loadCss(Lvl.request('styles:openlayers:entities').toJSON()); - }); - }, - onRender : function() { - var self = this; - // find user location, load the map and resize it to fit the screen area - var userLocation = config.session.get('user.location'); - if (userLocation) { - center = userLocation.center; - zoom = userLocation.zoom; - self.loadMap(); - self.resize(); - } else { - config.getUserLocation(function(location) { - if (location && location.longitude && location.latitude && (location.longitude != 0 || location.latitude != 0)) { - center = { - lon : location.longitude, - lat : location.latitude - }; - zoom = 7; - config.session.set('user.location', { - 'center' : center, - 'zoom' : zoom - }); - } - self.loadMap(); - self.resize(); - }); - } - }, - onDestroy : function() { - // unsubscribe from events - $(window).off('resize', this.resize); - // TODO : more events? (see commented code below) - }, - loadMap : function() { - require([ 'openlayers' ], function(ol) { - var createTextStyle = function(text) { - return new ol.style.Text({ - font : '12px Lato, Helvetica, Arial, sans-serif', - text : text, - fill : new ol.style.Fill({ - color : '#C0392B' - }), - stroke : new ol.style.Stroke({ - color : '#fff', - width : 3 - }) - }); - }; - - var createFeatureStyle = function(type, text, resolution) { - var style; - if (type === 'Point') { - style = [ new ol.style.Style({ - image : new ol.style.Circle({ - fill : new ol.style.Fill({ - color : 'rgba(192,57,43,0.5)' - }), - radius : resolution < 5000 ? 7 : 5, - stroke : new ol.style.Stroke({ - color : '#E74C3C', - width : 1 - }) - }), - text : createTextStyle(text) - }) ]; - } - return style; - } - - var styleCache = {}; - - var vectorLayer = new ol.layer.Vector({ - source : new ol.source.GeoJSON({ - projection : 'EPSG:3857', - url : config.get('service', '') + '/sequences/sandflies/nearby/0.0/0.0?maxDistance=6500000.0&group=true&heatmap=false&' - + config.authorizationQuery() - }), - style : function(feature, resolution) { - var text = resolution < 5000 ? feature.get('count') : ''; - if (!styleCache[text]) { - styleCache[text] = createFeatureStyle(feature.getGeometry().getType(), text, resolution); - } - return styleCache[text]; - }, - visible : false - }); - - var heatmapLayer = new ol.layer.Heatmap({ - source : new ol.source.GeoJSON({ - extractStyles : false, - projection : 'EPSG:3857', - url : config.get('service', '') + '/sequences/sandflies/nearby/0.0/0.0?maxDistance=6500000.0&group=true&heatmap=true&' - + config.authorizationQuery() - }), - radius : 5 - }); - - heatmapLayer.getSource().on('addfeature', function(event) { - var count = event.feature.get('count'); - var magnitude = parseFloat(count); - event.feature.set('weight', magnitude); - }); - - var osmRaster = new ol.layer.Tile({ - preload : Infinity, - source : new ol.source.OSM(), - visible : false - }); - - var tonerRaster = new ol.layer.Tile({ - preload : Infinity, - source : new ol.source.Stamen({ - layer : 'toner' - }) - }); - - // custom control to restore initial map view - var RestoreMapControl = function(opt_options) { - var options = opt_options || {}; - - var button = document.createElement('button'); - button.innerHTML = ''; - button.title = "Restore"; - - var this_ = this; - var handleRestore = function(e) { - var map_center = ol.proj.transform([ center.lon, center.lat ], 'EPSG:4326', 'EPSG:3857'); - $.when(this_.getMap().getView().setCenter(map_center)).done(function() { - this_.getMap().getView().setZoom(zoom); - }); - } - - button.addEventListener('click', handleRestore, false); - button.addEventListener('touchstart', handleRestore, false); - - var element = document.createElement('div'); - element.className = 'lvl-restore-map ol-unselectable ol-control'; - element.appendChild(button); - - ol.control.Control.call(this, { - element : element, - target : options.target - }); - }; - ol.inherits(RestoreMapControl, ol.control.Control); - - // setup map - this.map = new ol.Map({ - controls : ol.control.defaults({ - attribution : false - }).extend([ new ol.control.ScaleLine({ - units : 'metric' - }), new ol.control.OverviewMap({ - layers : [ new ol.layer.Tile({ - source : new ol.source.OSM({ - 'url' : '//{a-c}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png' - }) - }) ], - collapsed : true - }), new RestoreMapControl() ]), - interactions : ol.interaction.defaults().extend([ new ol.interaction.DragRotateAndZoom() ]), - layers : [ new ol.layer.Group({ - layers : [ osmRaster, vectorLayer, tonerRaster, heatmapLayer ] - }) ], - // fastest renderer - renderer : 'canvas', - // div HTML element with id='map-container' - target : 'map-container', - view : new ol.View({ - 'center' : ol.proj.transform([ center.lon, center.lat ], 'EPSG:4326', 'EPSG:3857'), - 'zoom' : zoom - }), - ol3Logo : false - }); - new ol.dom.Input($('#opts_map_types_heatmap')[0]).bindTo('checked', tonerRaster, 'visible'); - new ol.dom.Input($('#opts_map_types_heatmap')[0]).bindTo('checked', heatmapLayer, 'visible'); - new ol.dom.Input($('#opts_map_types_vectormap')[0]).bindTo('checked', osmRaster, 'visible'); - new ol.dom.Input($('#opts_map_types_vectormap')[0]).bindTo('checked', vectorLayer, 'visible'); - - // add popup - var createSeqLinks = function(name) { - var text = ''; - var seqs = name.split(','); - for (i = 0; i < seqs.length; i++) { - text += '' + seqs[i] + ' '; - } - return text; - } - var popupElem = document.getElementById('map-popup'); - var popup = new ol.Overlay({ - element : popupElem, - positioning : 'bottom-center', - stopEvent : false - }); - this.map.addOverlay(popup); - var this_ = this; - this.map.on('click', function(evt) { - $(popupElem).popover('destroy'); - var feature = this_.map.forEachFeatureAtPixel(evt.pixel, function(feature, layer) { - return feature; - }); - if (feature) { - var geometry = feature.getGeometry(); - var coord = geometry.getCoordinates(); - popup.setPosition(coord); - $(popupElem).popover({ - 'container' : '#map-container', - 'placement' : 'top', - 'animation' : false, - 'html' : true, - 'content' : createSeqLinks(feature.get('name')) - }); - $(popupElem).popover('show'); - } - }); - $(this.map.getViewport()).on('mousemove', function(e) { - var pixel = this_.map.getEventPixel(e.originalEvent); - var hit = this_.map.forEachFeatureAtPixel(pixel, function(feature, layer) { - return true; - }); - var mapElem = document.getElementById(this_.map.getTarget()); - if (hit) { - mapElem.style.cursor = 'pointer'; - } else { - mapElem.style.cursor = ''; - } - }); - }); - }, - resize : function() { - require([ 'openlayers' ], function() { - var windowHeight = $(window).height(); - var offset = $('#section-tab-content').offset().top + $('#map-toolbar').height(); - $('#map-container').height(windowHeight - offset); - this.map.updateSize(); - }); - } - }); - }); - return Lvl.CollectionApp.Map.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/map/templates/collection_map.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/map/templates/collection_map.html deleted file mode 100644 index 6526d2bc..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/map/templates/collection_map.html +++ /dev/null @@ -1,20 +0,0 @@ -
-
-
-
-
- - Heatmap   -
-
- Vector map -
-
-
-
-
-
-
-
-
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/sequence_viewer/collection_sequence_viewer.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/sequence_viewer/collection_sequence_viewer.js deleted file mode 100644 index 1f9dd2a8..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/sequence_viewer/collection_sequence_viewer.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * RequireJS module that defines the view: collection->view_sequence. - * - * @see: Sequence Viewer: https://gist.github.com/lsauer/2763251 - * @see: DRuMS Color Codes: http://www.umass.edu/molvis/drums/codes.html#nucleic - */ - -define([ 'app', 'tpl!apps/collection/sequence_viewer/templates/collection_sequence_viewer' ], function(Lvl, DisplaySequenceTpl) { - Lvl.module('CollectionApp.Sequence.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - View.Content = Marionette.ItemView.extend({ - template : DisplaySequenceTpl, - templateHelpers : { - gbField : function(id, encode) { - var encode = encode || false; - return encode ? encodeURIComponent(this[id]) : this[id]; - }, - gbGI : function() { - var gi = ''; - if (this['gbseqOtherSeqids'] && this['gbseqOtherSeqids'].gbseqid) { - var seqIds = this['gbseqOtherSeqids'].gbseqid; - for (var i = 0; i < seqIds.length; i++) { - var seqId = seqIds[i].value.trim().toLowerCase(); - if (seqId.substring(0, 3) === 'gi|') { - gi = seqId.substr(3); - } - } - } - return gi; - }, - gbSequence : function() { - var seq = this['gbseqSequence']; - return seq ? seq.split(/(.{10})/gm).filter(Boolean).map( - function(e, i, a) { - var pos = (i * 10) + 1; - return (!(i % 6) ? '\n' + ' '.slice(0, 4 - ('' + pos).length) + (pos) + ' ' + e : e).replace(/(.{1})/g, - '\$1') - }).join(' ') : ''; - } - }, - initialize : function() { - this.listenTo(this.model, 'change', this.render); - var self = this; - self.model.fetch({ - reset : true - }); - } - }); - }); - return Lvl.CollectionApp.Sequence.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/sequence_viewer/templates/collection_sequence_viewer.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/sequence_viewer/templates/collection_sequence_viewer.html deleted file mode 100644 index 43474e46..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/sequence_viewer/templates/collection_sequence_viewer.html +++ /dev/null @@ -1,42 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/stats/collection_stats_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/stats/collection_stats_ctrl.js deleted file mode 100644 index a1f1ca4b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/stats/collection_stats_ctrl.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * RequireJS module that defines the controller: collection->stats. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'entities/statistic', 'apps/collection/stats/collection_stats_view' ], function(Lvl, Configuration, - StatsModel, View) { - Lvl.module('CollectionApp.Stats', function(Stats, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Stats.Controller = { - showSection : function() { - var view = new View.Content({ - model : new StatsModel.Statistic({ - oauth2_token : new Configuration().authorizationToken() - }) - }); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.CollectionApp.Stats.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/stats/collection_stats_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/stats/collection_stats_view.js deleted file mode 100644 index 9237497e..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/stats/collection_stats_view.js +++ /dev/null @@ -1,123 +0,0 @@ -/** - * RequireJS module that defines the view: collection->stats. - */ - -define([ 'app', 'tpl!apps/collection/stats/templates/collection_stats' ], function(Lvl, StatsTpl) { - Lvl.module('CollectionApp.Stats.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - View.Content = Marionette.ItemView.extend({ - id : 'stats', - template : StatsTpl, - onRender : function() { - var bin_colors = [ 'rgba(13, 162, 23, 1)', 'rgba(229, 28, 33, 1)' ]; - var bin_highlights = [ 'rgba(13, 162, 23, 0.8)', 'rgba(229, 28, 33, 0.8)' ]; - var colors = [ 'rgba(1, 87, 154, 1)', 'rgba(33, 152, 243, 1)', 'rgba(0, 134, 9, 1)', 'rgba(13, 162, 23, 1)', 'rgba(106, 1, 124, 1)', - 'rgba(156, 39, 176, 1)', 'rgba(153, 92, 0, 1)', 'rgba(255, 153, 0, 1)', 'rgba(147, 0, 4, 1)', 'rgba(229, 28, 33, 1)', - 'rgba(193, 191, 191, 1)' ]; - var highlights = [ 'rgba(1, 87, 154, 0.8)', 'rgba(33, 152, 243, 0.8)', 'rgba(0, 134, 9, 0.8)', 'rgba(13, 162, 23, 0.8)', - 'rgba(106, 1, 124, 0.8)', 'rgba(156, 39, 176, 0.8)', 'rgba(153, 92, 0, 0.8)', 'rgba(255, 153, 0, 0.8)', 'rgba(147, 0, 4, 0.8)', - 'rgba(229, 28, 33, 0.8)', 'rgba(193, 191, 191, 0.8)' ]; - // data sources - var data = this.model.get('sandflies.source') || undefined; - if (data) { - for (var i = 0; i < data.length && colors.length; i++) { - data[i].color = colors[i]; - data[i].highlight = highlights[i]; - } - this.drawChart(data, 'sandflies-sources'); - } - data = this.model.get('leishmania.source') || undefined; - if (data) { - for (var i = 0; i < data.length && colors.length; i++) { - data[i].color = colors[i]; - data[i].highlight = highlights[i]; - } - this.drawChart(data, 'leishmania-sources'); - } - // genes - data = this.model.get('sandflies.gene') || undefined; - if (data) { - for (var i = 0; i < data.length && colors.length; i++) { - data[i].color = colors[i]; - data[i].highlight = highlights[i]; - } - this.drawChart(data, 'sandflies-genes'); - } - data = this.model.get('leishmania.gene') || undefined; - if (data) { - for (var i = 0; i < data.length && colors.length; i++) { - data[i].color = colors[i]; - data[i].highlight = highlights[i]; - } - this.drawChart(data, 'leishmania-genes'); - } - // geo-referenced - data = this.model.get('sandflies.gis') || undefined; - if (data) { - for (var i = 0; i < data.length; i++) { - if ('Yes' === data[i].label) { - data[i].color = bin_colors[0]; - data[i].highlight = bin_highlights[0]; - } else if ('No' === data[i].label) { - data[i].color = bin_colors[1]; - data[i].highlight = bin_highlights[1]; - } - } - this.drawChart(data, 'sandflies-gis'); - } - data = this.model.get('leishmania.gis') || undefined; - if (data) { - for (var i = 0; i < data.length; i++) { - if ('Yes' === data[i].label) { - data[i].color = bin_colors[0]; - data[i].highlight = bin_highlights[0]; - } else if ('No' === data[i].label) { - data[i].color = bin_colors[1]; - data[i].highlight = bin_highlights[1]; - } - } - this.drawChart(data, 'leishmania-gis'); - } - }, - drawChart : function(data, container) { - require([ 'chartjs' ], function(Chart) { - var options = { - tooltipTemplate : "<%if (label){%><%=label%>: <%}%><%= value %>", - tooltipFillColor : "rgba(255,255,255,0.8)", - tooltipFontColor : "#000", - animationEasing : "easeOutQuart", - animateRotate : true, - animateScale : true, - animationSteps : 100 - }; - var helpers = Chart.helpers; - var chart = new Chart(document.getElementById(container).getContext("2d")).Doughnut(data, options); - var legendHolder = document.createElement('div'); - legendHolder.innerHTML = chart.generateLegend(); - helpers.each(legendHolder.firstChild.childNodes, function(legendNode, index) { - helpers.addEvent(legendNode, 'mouseover', function() { - var activeSegment = chart.segments[index]; - activeSegment.save(); - activeSegment.fillColor = activeSegment.highlightColor; - chart.showTooltip([ activeSegment ]); - activeSegment.restore(); - }); - }); - helpers.addEvent(legendHolder.firstChild, 'mouseout', function() { - chart.draw(); - }); - chart.chart.canvas.parentNode.parentNode.appendChild(legendHolder.firstChild); - var Chartjs = Chart.noConflict(); - }); - }, - initialize : function() { - this.listenTo(this.model, 'change', this.render); - var self = this; - self.model.fetch({ - reset : true - }); - } - }); - }); - return Lvl.CollectionApp.Stats.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/stats/templates/collection_stats.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/stats/templates/collection_stats.html deleted file mode 100644 index bc164493..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/stats/templates/collection_stats.html +++ /dev/null @@ -1,109 +0,0 @@ -
-
-
-
-
-
- Sandflies -
-
-
-
- -
-
-

Sources

-
-
-
-
-
-
-
-
-
-
- Leishmania -
-
-
-
- -
-
-

Sources

-
-
-
-
-
-
-
-
-
-
-
-
- Sandflies -
-
-
-
- -
-
-

Genes

-
-
-
-
-
-
-
-
-
-
- Leishmania -
-
-
-
- -
-
-

Genes

-
-
-
-
-
-
-
-
-
-
-
-
- Geo-referenced -
-
-
-
- -
-
-

Sandflies

-
-
-
-
- -
-
-

Leishmania

-
-
-
-
-
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/submit/collection_submit_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/submit/collection_submit_ctrl.js deleted file mode 100644 index 0f0d1e27..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/submit/collection_submit_ctrl.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * RequireJS module that defines the controller: collection->submit. - */ - -define([ 'app', 'apps/collection/submit/collection_submit_view' ], function(Lvl, View) { - Lvl.module('CollectionApp.Submit', function(Submit, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Submit.Controller = { - showSection : function() { - var view = new View.Content(); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.CollectionApp.Submit.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/submit/collection_submit_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/submit/collection_submit_view.js deleted file mode 100644 index c2df58f5..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/submit/collection_submit_view.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * RequireJS module that defines the view: collection->submit. - */ - -define([ 'marionette', 'tpl!apps/collection/submit/templates/collection_submit' ], function(Marionette, SubmitTpl) { - return { - Content : Marionette.ItemView.extend({ - id : 'submit', - template : SubmitTpl - }) - }; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/submit/templates/collection_submit.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/submit/templates/collection_submit.html deleted file mode 100644 index cb9ec011..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/collection/submit/templates/collection_submit.html +++ /dev/null @@ -1,6 +0,0 @@ -

Sequence submission

-

Submission tools coming soon. Stay tuned!

-

 

-

 

-

 

-

 

\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/configuration.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/configuration.js deleted file mode 100644 index cebb4103..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/configuration.js +++ /dev/null @@ -1,150 +0,0 @@ -/** - * RequireJS module that defines configuration parameters that are globally available - * to all the other modules of the application. Note that this module uses the - * 'requirejs.s.contexts._.config' hack to read values of configuration that could - * change or disappear in the next versions of RequireJS without warning. - */ - -define([ 'marionette', 'underscore', 'jquery', 'text!data/config.json' ], function(Marionette, _, $, ConfigJson) { - var bust = requirejs.s.contexts._.config.urlArgs ? '?' + requirejs.s.contexts._.config.urlArgs : ''; - Marionette.Object.Configuration = Marionette.Object.extend({ - initialize : function() { - var configObj; - try { - configObj = JSON.parse(ConfigJson); - } catch (err) { - alert('Failed to load configuration: ' + err); - throw err; - } - this.endpoint = configObj.endpoint.url; - this.config = [ { - id : 'bust', - value : bust - }, { - id : 'endpoint', - value : this.endpoint - }, { - id : 'auth', - value : this.endpoint + '/lvl-auth/oauth2/v' + configObj.endpoint.api_version - }, { - id : 'service', - value : this.endpoint + '/lvl-service/rest/v' + configObj.endpoint.api_version - }, { - id : 'oauth2_app', - value : { - 'client_id' : configObj.oauth2.client_id, - 'client_secret' : configObj.oauth2.client_secret - } - }, { - id : 'linkedin_api_key', - value : configObj.linkedin.api_key - } ]; - }, - get : function(id, _def) { - var res = _.find(this.config, function(obj) { - return obj.id === id - }); - return res ? res.value : _def; - }, - getUserLocation : function(callback, error) { - if ('function' === typeof callback) { - $.ajax('https://freegeoip.net/json/').done(function(location) { - callback(location); - }).fail(function(jqXHR, textStatus) { - if ('function' === typeof error) { - error(textStatus); - } else { - console.log('Failed to get user location', textStatus); - } - }); - } - }, - session : { - get : function(key) { - var value = sessionStorage.getItem(key); - return value ? JSON.parse(value) : value; - }, - set : function(key, value) { - if (key && value) { - sessionStorage.setItem(key, JSON.stringify(value)); - } - }, - check : function(key) { - return key ? sessionStorage.getItem(key) == null : false; - }, - clear : function(key) { - if (key) { - sessionStorage.removeItem(key); - } - } - }, - storage : { - get : function(key) { - var value = localStorage.getItem(key); - return value ? JSON.parse(value) : value; - }, - set : function(key, value) { - if (key && value) { - localStorage.setItem(key, JSON.stringify(value)); - } - }, - check : function(key) { - return key ? localStorage.getItem(key) == null : false; - }, - clear : function(key) { - if (key) { - localStorage.removeItem(key); - } - } - }, - loadPreviousSession : function() { - var session = this.storage.get('user.session'); - if (session) { - this.session.set('user.session', session); - } - return session; - }, - saveSession : function(email, token, provider, permanent) { - var provider2 = provider || 'lvl'; - var session = { - 'email' : email, - 'token' : token, - 'provider' : provider2 - }; - this.session.set('user.session', session); - if (permanent === true) { - this.storage.set('user.session', session); - } - }, - deleteSession : function() { - this.storage.clear('user.session'); - this.session.clear('user.session'); - }, - isAuthenticated : function() { - var session = this.session.get('user.session') || this.loadPreviousSession(); - return session !== undefined && session !== null; - }, - authorizationToken : function() { - var session = this.session.get('user.session'); - return (session !== undefined && session !== null && session.token !== undefined ? session.token : null); - }, - authorizationHeader : function() { - var token = this.authorizationToken(); - return (token !== null ? { - 'Authorization' : 'Bearer ' + token - } : null); - }, - authorizationQuery : function() { - var token = this.authorizationToken(); - return (token !== null ? 'access_token=' + encodeURIComponent(token) : null); - }, - redirectUri : function() { - return this.get('auth') + '/linkedin/callback'; - }, - linkedInAuthEndpoint : function(state) { - return 'https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=' + this.get('linkedin_api_key') + '&redirect_uri=' - + encodeURIComponent(this.redirectUri()) + '&state=' + state + '&scope=r_basicprofile%20r_emailaddress'; - } - }); - return Marionette.Object.Configuration; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/regions/dialog.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/regions/dialog.js deleted file mode 100644 index 16eaaa77..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/regions/dialog.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Defines a region to display modal windows (dialogs) within the application. - */ - -define([ 'marionette' ], function(Marionette) { - Marionette.Region.Dialog = Backbone.Marionette.Region.extend({ - constructor : function() { - _.bindAll(this, 'getEl', 'showModal', 'hideModal'); - Backbone.Marionette.Region.prototype.constructor.apply(this, arguments); - this.listenTo(this, 'show', this.showModal, this); - }, - getEl : function(selector) { - var $el = $(selector); - $el.attr('class', 'modal fade'); - // allow keyboard access (e.g. escape key to destroy dialog) - $el.attr('tabindex', '-1'); - // makes modal accessible - $el.attr('role', 'dialog'); - $el.attr('aria-labelledby', 'myModalLabel'); - $el.attr('aria-hidden', 'true'); - // react when the dialog is destroy - $el.on('hidden.bs.modal', { - 'selector' : selector - }, this.destroyDialog); - return $el; - }, - showModal : function(view) { - this.listenTo(view, 'destroy', this.hideModal, this); - this.$el.modal('show'); - }, - hideModal : function() { - this.$el.modal('hide'); - }, - destroyDialog : function(event) { - var $el = $(event.data.selector); - $el.empty(); - } - }); - return Marionette.Region.Dialog; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/regions/fadein.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/regions/fadein.js deleted file mode 100644 index 5089b3d8..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/regions/fadein.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * RequireJS module that defines a region common to all the application that - * uses a dissolve transition. - */ - -define([ 'marionette' ], function(Marionette) { - Marionette.Region.FadeInRegion = Marionette.Region.extend({ - open : function(view) { - this.$el.hide(); - this.$el.html(view.el); - this.$el.fadeIn(); - }, - onBeforeShow : function(view) { - window.scrollTo(0, 0); - } - }); - return Marionette.Region.FadeInRegion; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/styles/style.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/styles/style.js deleted file mode 100644 index e93b07ff..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/config/marionette/styles/style.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * RequireJS module that defines styles that are dynamically loaded in the - * application. - */ - -define([ 'marionette', 'apps/config/marionette/configuration' ], function(Marionette, Configuration) { - Marionette.Object.Style = Marionette.Object.extend({ - initialize : function(options) { - this.bust = new Configuration().get('bust', ''); - this.baseStyles = [ { - id : 'bootstrap', - url : '//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css' + this.bust - }, { - id : 'font-awesome', - url : '//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css' + this.bust - }, { - id : 'theme', - url : '//maxcdn.bootstrapcdn.com/bootswatch/3.3.4/paper/bootstrap.min.css' + this.bust - }, { - id : 'lvl', - url : '/css/lvl.css' + this.bust - } ]; - }, - loadSingleCss : function(id, url) { - if (id !== undefined && url !== undefined) { - var element = $('head #' + id); - if (element.length === 0) { - var link = document.createElement('link'); - link.type = 'text/css'; - link.rel = 'stylesheet'; - link.href = url; - link.id = id; - document.getElementsByTagName('head')[0].appendChild(link); - } - } - }, - loadCss : function(list) { - if (list !== undefined) { - for (index = 0; index < list.length; ++index) { - this.loadSingleCss(list[index].id, list[index].url); - } - } - }, - deleteCss : function(list) { - if (list !== undefined) { - for (index = 0; index < list.length; ++index) { - $('head #' + list[index].id).remove(); - } - } - }, - loadBaseStyles : function() { - this.loadCss(this.baseStyles); - } - }); - return Marionette.Object.Style; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/drive_datasets_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/drive_datasets_ctrl.js deleted file mode 100644 index 429a6461..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/drive_datasets_ctrl.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * RequireJS module that defines the controller: drive->datasets. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'entities/dataset', 'apps/drive/datasets/drive_datasets_view' ], function(Lvl, Configuration, - DatasetModel, View) { - Lvl.module('DriveApp.Datasets', function(Datasets, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Datasets.Controller = { - showSection : function() { - var view = new View.Content({ - collection : new DatasetModel.DatasetPageableCollection({ - oauth2_token : config.authorizationToken() - }) - }); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.DriveApp.Datasets.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/drive_datasets_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/drive_datasets_view.js deleted file mode 100644 index 40068037..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/drive_datasets_view.js +++ /dev/null @@ -1,457 +0,0 @@ -/** - * RequireJS module that defines the view: drive->datasets. - */ - -define([ 'app', 'marionette', 'tpl!apps/drive/datasets/tpls/drive_datasets', 'tpl!apps/drive/datasets/tpls/toolbar_browse', - 'tpl!common/search/tpls/search_term', 'tpl!common/search/tpls/add_search_term', 'tpl!common/search/tpls/save_search', - 'apps/config/marionette/styles/style', 'apps/config/marionette/configuration', 'pace', 'moment', 'filesize', 'backbone.oauth2', 'backgrid', - 'backgrid-paginator', 'backgrid-select-all', 'backgrid-filter' ], function(Lvl, Marionette, DatasetsTpl, ToolbarTpl, SearchTermTpl, AddSearchTermTpl, - SaveSearchTpl, Style, Configuration, pace, moment, filesize) { - Lvl.module('DriveApp.Datasets.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var columns = [ - { - name : 'filename', - label : 'Name', - editable : false, - cell : 'string' - }, - { - name : 'tags', - label : 'Tags', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var metadata = this.model.get('metadata'); - var rawValue = metadata ? metadata[this.column.get('name')] : undefined; - if (rawValue !== undefined) { - var names = ''; - for (var i = 0; i < rawValue.length; i++) { - var color = 'label-default'; - if ('pipeline_product' === rawValue[i]) { - color = 'label-success'; - } else if ('fasta' === rawValue[i]) { - color = 'label-info'; - } - names += '' + rawValue[i] + ' '; - } - this.$el.append(names.trim()); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'length', - label : 'Size', - editable : false, - cell : 'integer', - formatter : _.extend({}, Backgrid.CellFormatter.prototype, { - fromRaw : function(rawValue, model) { - return rawValue ? filesize(rawValue) : rawValue; - } - }) - }, - { - name : 'contentType', - label : 'Type', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - var image = '', type = ''; - switch (formattedValue.trim().toLowerCase()) { - case 'text/plain': - image = 'fa-file-text-o'; - type = 'text'; - break; - case 'application/gzip': - image = 'fa-file-zip-o'; - type = 'zip'; - break; - default: - image = 'fa-file-o'; - type = 'unknown'; - break; - } - this.$el.append(' ' + type); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'uploadDate', - label : 'Created', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'number') { - this.$el.append(moment(formattedValue).format('MMM DD[,] YYYY [at] HH[:]mm')); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'filename', - label : 'Description', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var metadata = this.model.get('metadata'); - var rawValue = metadata !== undefined ? metadata.description : undefined; - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append(formattedValue); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'filename', - label : '', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append(''); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'filename', - label : '', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append(''); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'filename', - label : '', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append(''); - } - this.delegateEvents(); - return this; - } - }) - } ]; - View.Content = Marionette.ItemView.extend({ - id : 'datasets', - template : DatasetsTpl, - initialize : function() { - this.listenTo(this.collection, 'request', this.displaySpinner); - this.listenTo(this.collection, 'sync error', this.removeSpinner); - this.grid = new Backgrid.Grid({ - columns : [ { - name : '', - cell : 'select-row', - headerCell : 'select-all' - } ].concat(columns), - collection : this.collection, - emptyText : 'No datasets found' - }); - // setup search - Lvl.vent.on('search:form:submitted', this.searchDatasets); - // setup menu - $('#lvl-floating-menu-toggle').show(0); - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu').empty(); - $('#lvl-floating-menu').append(ToolbarTpl({})); - $('a#uncheck-btn').on('click', { - grid : this.grid - }, this.deselectAll); - $('button#lvl-feature-tour-btn').on('click', this.startTour); - }, - displaySpinner : function() { - pace.restart(); - $('#grid-container').fadeTo('fast', 0.4); - }, - removeSpinner : function() { - pace.stop(); - var self = this; - $('#grid-container').fadeTo('fast', 1); - $('html,body').animate({ - scrollTop : 0 - }, '500', 'swing', function() { - // reset search terms - var searchCont = $('#lvl-search-terms-container'); - searchCont.empty(); - // setup search terms from server response - if (self.collection.formattedQuery && self.collection.formattedQuery.length > 0) { - var i = 1; - _.each(self.collection.formattedQuery, function(item) { - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_' + (i++), - sterm_text : item['term'], - sterm_icon : Boolean(item['valid']) ? 'label-success' : 'label-warning', - sterm_title : 'Remove' - })); - }); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_-1', - sterm_text : 'clear all', - sterm_icon : 'label-danger', - sterm_title : 'Remove All' - })); - searchCont.append(AddSearchTermTpl({})); - searchCont.append(SaveSearchTpl({})); - $('#lvl-search-terms').show('fast'); - } else { - $('#lvl-search-terms').hide('fast'); - } - }); - }, - events : { - 'click a[data-search-term]' : 'resetSearchTerms', - 'submit form#lvl-add-search-term-form' : 'addSearchTerm', - 'click div.lvl-savable' : 'handleClickSavable', - 'dragstart div.lvl-savable' : 'handleDragStart', - 'dragend div.lvl-savable' : 'handleDragEnd', - 'click a[data-dataset]' : 'createLink', - 'click a[data-remove]' : 'removeDataset' - }, - deselectAll : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - e.data.grid.clearSelectedModels(); - }, - searchDatasets : function(search) { - var backgridFilter = $('form.backgrid-filter:first'); - backgridFilter.find('input:first').val(search); - // TODO backgridFilter.submit(); - // TODO - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Operation unavailable', 'Search feature is coming soon. Stay tuned!', false); - }); - // TODO - }, - resetSearchTerms : function(e) { - e.preventDefault(); - var target = $(e.target); - var search = ''; - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-search-term') : target.attr('data-search-term'); - if (itemId !== 'sterm_-1') { - var searchCont = $('#lvl-search-terms-container'); - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - if ($(this).attr('data-search-term') !== itemId) { - search += $(this).parent().text() + ' '; - } - }); - } - this.searchSequences(search); - }, - addSearchTerm : function(e) { - e.preventDefault(); - var newTermInput = this.$('#lvl-add-search-term-input'), newTerm = newTermInput.val().trim(); - if (newTerm.length > 0) { - this.$('li#lvl-add-search-term-container').hide(); - var searchCont = this.$('#lvl-search-terms-container'); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_0', - sterm_text : newTerm, - sterm_icon : 'label-default', - sterm_title : 'Remove' - })); - var search = ''; - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - search += $(this).parent().text() + ' '; - }); - this.searchSequences(search); - } else { - newTermInput.val(''); - } - }, - handleClickSavable : function(e) { - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Unsaved search', - 'Start dragging the icon to open your saved items', - false); - }); - }, - handleDragStart : function(e) { - var self = this; - e.originalEvent.dataTransfer.setData('srcId', $(e.target).attr('data-savable-id')); - e.originalEvent.dataTransfer.setData('savableType', 'saved_search'); - e.originalEvent.dataTransfer.setData('savable', JSON.stringify(new SavedSearchEntity.SavedSearch({ - type : 'sequences;' + self.data_source, - description : '', - search : self.collection.formattedQuery - }).toJSON())); - Lvl.vent.trigger('editable:items:dragstart'); - }, - handleDragEnd : function(e) { - Lvl.vent.trigger('editable:items:dragend'); - }, - startTour : function(e) { - e.preventDefault(); - require([ 'apps/drive/datasets/tours/datasets_tour' ], function(tour) { - tour(); - }); - }, - createLink : function(e) { - e.preventDefault(); - var self = this; - var target = $(e.target); - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-dataset') : target.getAttribute('data-dataset'); - require([ 'common/confirm', 'entities/link' ], function(confirmDialog, LinkModel) { - confirmDialog('Confirm public link creation', 'Create a public link to the dataset: ' + itemId + '?', function() { - var newLink = new LinkModel.LinkCreate(); - newLink.oauth2_token = config.authorizationToken(); - newLink.save({ - 'filename' : itemId - }, { - success : function(model, resp, options) { - require([ 'common/growl' ], function(createGrowl) { - var anchor = $('', { - href : options.xhr.getResponseHeader('Location') - })[0]; - var filename = anchor.pathname.substring(anchor.pathname.lastIndexOf('/') + 1); - createGrowl('New link created', filename - + ' links', false); - }); - }, - error : function(model, resp, options) { - require([ 'common/alert' ], function(alertDialog) { - alertDialog('Error', 'Failed to create link.'); - }); - } - }); - self.collection.add([ newLink ]); - }, { - icon : 'fa-info-circle', - icon_color : 'text-info', - btn_text : 'Create' - }); - }); - }, - removeDataset : function(e) { - e.preventDefault(); - var self = this; - var target = $(e.target); - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-remove') : target.attr('data-remove'); - var item = this.collection.get(itemId); - item.oauth2_token = config.authorizationToken(); - require([ 'common/confirm' ], function(confirmDialog) { - confirmDialog('Confirm deletion', 'This action will delete the selected dataset. Are you sure?', function() { - self.collection.remove(item); - item.destroy({ - success : function(e) { - }, - error : function(e) { - require([ 'common/alert' ], function(alertDialog) { - alertDialog('Error', 'The dataset cannot be removed.'); - }); - } - }); - }, { - btn_text : 'Delete' - }); - }); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:backgrid:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:pace:entities').toJSON()); - }); - }, - onDestroy : function() { - // don't remove the styles in order to enable them to be reused - pace.stop(); - this.stopListening(); - // remove all event handlers - Lvl.vent.off('search:form:submitted'); - $('#lvl-search-form').unbind(); - $('button#lvl-feature-tour-btn').unbind(); - // clean menu - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu-toggle').hide(0); - $('#lvl-floating-menu').empty(); - // clean tour - require([ 'hopscotch' ], function(hopscotch) { - hopscotch.endTour(); - }); - }, - onRender : function() { - var self = this; - pace.start(); - - var gridContainer = this.$('#grid-container'); - gridContainer.append(this.grid.render().el); - - var paginator = new Backgrid.Extension.Paginator({ - collection : this.collection, - windowSize : 14, - slideScale : 0.5, - goBackFirstOnSort : true - }); - - gridContainer.after(paginator.render().el); - - $(paginator.el).css({ - 'margin-top' : '20px' - }); - - var filter = new Backgrid.Extension.ServerSideFilter({ - collection : this.collection, - name : 'q', - placeholder : 'filter datasets' - }); - - var filterToolbar = this.$('#grid-filter-toolbar'); - filterToolbar.append(filter.render().el); - - $(filter.el).addClass('hidden'); - - this.grid.clearSelectedModels(); - - this.collection.fetch({ - reset : true - }); - } - }); - }); - return Lvl.DriveApp.Datasets.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/tours/datasets_tour.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/tours/datasets_tour.js deleted file mode 100644 index 8cb693b0..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/tours/datasets_tour.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * RequireJS module that defines the tour: drive->datasets->tour. - */ - -define( - [ 'app', 'apps/config/marionette/styles/style', 'hopscotch' ], - function(Lvl, Style, hopscotch) { - return function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:hopscotch:entities').toJSON()); - }); - var tour = { - id : 'drive-datasets', - showPrevButton : false, - skipIfNoElement : true, - steps : [ - { - target : document.querySelector('div#section-tab-list'), - placement : 'bottom', - fixedElement : true, - title : 'This is the navigation menu', - content : 'Use the links here to get around on the datasets features.' - }, - { - target : document.querySelector('a#btnSearchToggle'), - placement : 'left', - fixedElement : true, - title : 'This is the search button', - content : 'Use it to search for items. Click on the search icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, - { - delay : 300, - target : document.querySelector('input#lvl-search-form-input'), - placement : 'bottom', - fixedElement : true, - title : 'This is the search box', - content : 'It supports the LvLQL query language to search the datasets. Enter text in the input box and hit enter. Once the search is completed continue this tour.' - }, - { - target : document.querySelector('ul#lvl-search-terms-container'), - placement : 'bottom', - title : 'Your search terms are listed', - content : 'Use the provided controls to clear/add search terms. Drag the icon to save your search terms.', - }, - { - target : document.querySelector('div#grid-container'), - placement : 'top', - yOffset : 100, - title : 'This is the result dataset', - content : 'Columns are sortable, rows are selectable. Additional controls are found at the right lateral side of the grid.' - }, - { - target : document.querySelector('button#lvl-toggle-toolbar-btn'), - placement : 'left', - fixedElement : true, - title : 'This is the Tools menu', - content : 'Use the controls here to perform additionl actions on the dataset and the selected items. Click on the menu icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, { - delay : 300, - target : document.querySelector('div#lvl-floating-menu-toggle'), - placement : 'left', - xOffset : -10, - fixedElement : true, - title : 'Additional controls are displayed', - content : 'Include deselecting all selected items.', - onNext : function() { - $('button#lvl-toggle-toolbar-btn').click(); - } - }, { - delay : 300, - target : document.querySelector('button#lvl-feature-tour-btn'), - placement : 'left', - fixedElement : true, - title : 'You\'re all set!', - content : 'Run this tour as many times as you need.' - } ] - }; - hopscotch.startTour(tour); - } - }); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/tpls/drive_datasets.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/tpls/drive_datasets.html deleted file mode 100644 index 17348db7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/tpls/drive_datasets.html +++ /dev/null @@ -1,13 +0,0 @@ - - -
-
-
-
-
- - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/tpls/toolbar_browse.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/tpls/toolbar_browse.html deleted file mode 100644 index d52336b9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/datasets/tpls/toolbar_browse.html +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/drive_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/drive_app.js deleted file mode 100644 index 7af405c8..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/drive_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: drive. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('DriveApp', function(DriveApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - DriveApp.startWithParent = false; - - DriveApp.onStart = function() { - console.log('starting DriveApp'); - }; - - DriveApp.onStop = function() { - console.log('stopping DriveApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('drive:set:active', function(section) { - require([ 'apps/drive/layout/drive_layout_ctrl' ], function(LayoutController) { - DriveApp.currentSection = LayoutController.showLayout(section); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/drive_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/drive_router.js deleted file mode 100644 index 394fb601..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/drive_router.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: drive. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'routefilter' ], function(Lvl, Configuration) { - Lvl.module('Routers.DriveApp', function(DriveAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var Router = Backbone.Router.extend({ - routes : { - 'drive' : 'showDrive', - 'drive/:section' : 'showDrive' - }, - before : function() { - if (!config.isAuthenticated()) { - Lvl.navigate('login/' + encodeURIComponent(Backbone.history.fragment) + '/unauthenticated', { - trigger : true, - replace : true - }); - return false; - } - require([ 'apps/drive/drive_app' ], function() { - Lvl.execute('set:active:header', 'workspace', 'drive'); - Lvl.execute('set:active:footer', 'workspace'); - Lvl.startSubApp('DriveApp'); - }); - return true; - }, - showDrive : function(section) { - section = (section || 'datasets').toLowerCase(); - if (section === 'datasets') { - Lvl.navigate('drive/' + section, { - trigger : false, - replace : true - }); - Lvl.execute('drive:set:active', section); - } else if (section === 'links') { - Lvl.execute('drive:set:active', section); - } else { - Lvl.navigate('not-found', { - trigger : true, - replace : true - }); - } - } - }); - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/drive_layout_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/drive_layout_ctrl.js deleted file mode 100644 index 09979c80..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/drive_layout_ctrl.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * RequireJS module that defines the controller: drive->layout. - */ - -define([ 'app', 'apps/drive/layout/drive_layout_view' ], function(Lvl, View) { - Lvl.module('DriveApp.Layout', function(Layout, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Layout.Controller = { - showLayout : function(section, id) { - var subapp = section + (id ? '_item' : ''); - require([ 'apps/drive/' + subapp + '/drive_' + subapp + '_ctrl', 'apps/drive/layout/entities/tablinks' ], function(SectionController) { - var tabLinks = Lvl.request('drive:navigation:entities'); - var tabLinkToSelect = tabLinks.find(function(tabLink) { - return tabLink.get('link') === section; - }); - tabLinkToSelect.select(); - tabLinks.trigger('reset'); - var view = new View.Layout({ - navigation : tabLinks - }); - Lvl.mainRegion.show(view); - return SectionController.showSection(id); - }); - } - } - }); - return Lvl.DriveApp.Layout.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/drive_layout_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/drive_layout_view.js deleted file mode 100644 index 6fe92d92..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/drive_layout_view.js +++ /dev/null @@ -1,69 +0,0 @@ -/** - * RequireJS module that defines the view: drive->layout. - */ - -define([ 'app', 'apps/config/marionette/regions/fadein', 'tpl!apps/drive/layout/templates/drive-layout', 'tpl!apps/drive/layout/templates/tab-list', - 'tpl!apps/drive/layout/templates/tab-link' ], function(Lvl, FadeInRegion, LayoutTpl, TabListTpl, TabLinkTpl) { - Lvl.module('DriveApp.Layout.View', function(View, Lvl, Backbone, Marionette, $, _) { - View.TabLink = Marionette.ItemView.extend({ - tagName : 'li', - template : TabLinkTpl, - onRender : function() { - if (this.model.selected) { - this.$el.addClass('active'); - } - } - }); - View.TabList = Marionette.CompositeView.extend({ - template : TabListTpl, - childView : View.TabLink, - childViewContainer : 'ul', - }); - View.Layout = Marionette.LayoutView.extend({ - template : LayoutTpl, - regions : { - tabList : '#section-tab-list', - tabContent : FadeInRegion.extend({ - el : '#section-tab-content' - }) - }, - initialize : function(options) { - this.navLinks = options.navigation;// subscribe to events - $(document).on('keyup', this.handleEscKeyUpEvent); - }, - onDestroy : function() { - // unsubscribe from events - $(document).off('keyup', this.handleEscKeyUpEvent); - }, - onBeforeShow : function() { - this.showChildView('tabList', new View.TabList({ - collection : this.navLinks - })); - }, - events : { - 'click button#lvl-toggle-toolbar-btn' : 'toggleToolbar', - 'click a#lvl-collapse-toolbar-btn' : 'closeToolbar' - }, - toggleToolbar : function(e) { - e.preventDefault(); - var toolbar = $('#lvl-floating-menu'); - if (toolbar.is(':visible')) { - toolbar.hide('fast'); - } else { - toolbar.show('fast'); - } - }, - closeToolbar : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - }, - handleEscKeyUpEvent : function(e) { - var toolbar = $('#lvl-floating-menu'); - if (e.which == 27 && toolbar.is(':visible')) { - toolbar.hide('fast'); - } - } - }); - }); - return Lvl.DriveApp.Layout.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/entities/tablinks.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/entities/tablinks.js deleted file mode 100644 index a903861f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/entities/tablinks.js +++ /dev/null @@ -1,75 +0,0 @@ -/** - * RequireJS module that defines the entity: drive->tab-link. - */ - -define([ 'app', 'backbone.picky' ], function(Lvl) { - Lvl.module('DriveApp.Entities', function(Entities, Lvl, Backbone, Marionette, $, _) { - Entities.Navigation = Backbone.Model.extend({ - defaults : { - link : '', - icon : 'fa-chain-broken', - text : 'Unknown' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.link) { - errors.link = 'can\'t be empty'; - } - if (!attrs.icon) { - errors.icon = 'can\'t be empty'; - } - if (!attrs.text) { - errors.text = 'can\'t be empty'; - } else { - if (attrs.text.length < 2) { - errors.text = 'is too short'; - } - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - - Entities.NavigationDrive = Backbone.Collection.extend({ - model : Entities.Navigation, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - - var iniNavigationLinks = function() { - Entities.navigationLinks = new Entities.NavigationDrive([ { - id : 1, - link : 'datasets', - icon : 'fa-cloud', - text : 'Datasets' - }, { - id : 2, - link : 'links', - icon : 'fa-link', - text : 'Links' - } ]); - }; - - var API = { - getNavigationEntities : function() { - if (Entities.navigationLinks === undefined) { - iniNavigationLinks(); - } - return Entities.navigationLinks; - } - } - - Lvl.reqres.setHandler('drive:navigation:entities', function() { - return API.getNavigationEntities(); - }); - }); - return; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/templates/drive-layout.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/templates/drive-layout.html deleted file mode 100644 index d49b1ef7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/templates/drive-layout.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - -
- - -
-
-
-
-
- -
-
- -

 

 

 

 

-

 

 

 

 

-
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/templates/tab-link.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/templates/tab-link.html deleted file mode 100644 index a27ce706..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/templates/tab-link.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/templates/tab-list.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/templates/tab-list.html deleted file mode 100644 index fecedd0c..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/layout/templates/tab-list.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/drive_links_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/drive_links_ctrl.js deleted file mode 100644 index dd356d86..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/drive_links_ctrl.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * RequireJS module that defines the controller: drive->links. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'entities/link', 'apps/drive/links/drive_links_view' ], - function(Lvl, Configuration, LinkModel, View) { - Lvl.module('DriveApp.Links', function(Links, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Links.Controller = { - showSection : function() { - var view = new View.Content({ - collection : new LinkModel.LinkPageableCollection({ - oauth2_token : config.authorizationToken() - }) - }); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.DriveApp.Links.Controller; - }); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/drive_links_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/drive_links_view.js deleted file mode 100644 index 3db61b04..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/drive_links_view.js +++ /dev/null @@ -1,377 +0,0 @@ -/** - * RequireJS module that defines the view: drive->links. - */ - -define( - [ 'app', 'marionette', 'tpl!apps/drive/links/tpls/drive_links', 'tpl!apps/drive/links/tpls/toolbar_browse', 'tpl!common/search/tpls/search_term', - 'tpl!common/search/tpls/add_search_term', 'tpl!common/search/tpls/save_search', 'apps/config/marionette/styles/style', - 'apps/config/marionette/configuration', 'pace', 'moment', 'backbone.oauth2', 'backgrid', 'backgrid-paginator', 'backgrid-select-all', - 'backgrid-filter' ], - function(Lvl, Marionette, LinksTpl, ToolbarTpl, SearchTermTpl, AddSearchTermTpl, SaveSearchTpl, Style, Configuration, pace, moment) { - Lvl - .module( - 'DriveApp.Links.View', - function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var columns = [ - { - name : 'openAccessLink', - label : 'Secret', - editable : false, - cell : 'string' - }, - { - name : 'filename', - label : 'Source', - editable : false, - cell : 'string' - }, - { - name : 'openAccessDate', - label : 'Created', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'number') { - this.$el.append(moment(formattedValue).format('MMM DD[,] YYYY [at] HH[:]mm')); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'openAccessLink', - label : '', - editable : false, - cell : Backgrid.Cell - .extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el - .append(''); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'openAccessLink', - label : '', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append(''); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'filename', - label : '', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append(''); - } - this.delegateEvents(); - return this; - } - }) - } ]; - View.Content = Marionette.ItemView - .extend({ - id : 'links', - template : LinksTpl, - initialize : function() { - this.listenTo(this.collection, 'request', this.displaySpinner); - this.listenTo(this.collection, 'sync error', this.removeSpinner); - this.grid = new Backgrid.Grid({ - columns : [ { - name : '', - cell : 'select-row', - headerCell : 'select-all' - } ].concat(columns), - collection : this.collection, - emptyText : 'No links found' - }); - // setup search - Lvl.vent.on('search:form:submitted', this.searchLinks); - // setup menu - $('#lvl-floating-menu-toggle').show(0); - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu').empty(); - $('#lvl-floating-menu').append(ToolbarTpl({})); - $('a#uncheck-btn').on('click', { - grid : this.grid - }, this.deselectAll); - $('button#lvl-feature-tour-btn').on('click', this.startTour); - }, - displaySpinner : function() { - pace.restart(); - $('#grid-container').fadeTo('fast', 0.4); - }, - removeSpinner : function() { - pace.stop(); - var self = this; - $('#grid-container').fadeTo('fast', 1); - $('html,body').animate({ - scrollTop : 0 - }, '500', 'swing', function() { - // reset search terms - var searchCont = $('#lvl-search-terms-container'); - searchCont.empty(); - // setup search terms from - // server response - if (self.collection.formattedQuery && self.collection.formattedQuery.length > 0) { - var i = 1; - _.each(self.collection.formattedQuery, function(item) { - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_' + (i++), - sterm_text : item['term'], - sterm_icon : Boolean(item['valid']) ? 'label-success' : 'label-warning', - sterm_title : 'Remove' - })); - }); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_-1', - sterm_text : 'clear all', - sterm_icon : 'label-danger', - sterm_title : 'Remove All' - })); - searchCont.append(AddSearchTermTpl({})); - searchCont.append(SaveSearchTpl({})); - $('#lvl-search-terms').show('fast'); - } else { - $('#lvl-search-terms').hide('fast'); - } - }); - }, - events : { - 'click a[data-search-term]' : 'resetSearchTerms', - 'submit form#lvl-add-search-term-form' : 'addSearchTerm', - 'click div.lvl-savable' : 'handleClickSavable', - 'dragstart div.lvl-savable' : 'handleDragStart', - 'dragend div.lvl-savable' : 'handleDragEnd', - 'click a[data-shortened-url]' : 'shortenUrl', - 'click a[data-remove]' : 'removeLink' - }, - deselectAll : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - e.data.grid.clearSelectedModels(); - }, - searchLinks : function(search) { - var backgridFilter = $('form.backgrid-filter:first'); - backgridFilter.find('input:first').val(search); - // TODO backgridFilter.submit(); - // TODO - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Operation unavailable', 'Search feature is coming soon. Stay tuned!', false); - }); - // TODO - }, - resetSearchTerms : function(e) { - e.preventDefault(); - var target = $(e.target); - var search = ''; - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-search-term') : target - .attr('data-search-term'); - if (itemId !== 'sterm_-1') { - var searchCont = $('#lvl-search-terms-container'); - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - if ($(this).attr('data-search-term') !== itemId) { - search += $(this).parent().text() + ' '; - } - }); - } - this.searchSequences(search); - }, - addSearchTerm : function(e) { - e.preventDefault(); - var newTermInput = this.$('#lvl-add-search-term-input'), newTerm = newTermInput.val().trim(); - if (newTerm.length > 0) { - this.$('li#lvl-add-search-term-container').hide(); - var searchCont = this.$('#lvl-search-terms-container'); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_0', - sterm_text : newTerm, - sterm_icon : 'label-default', - sterm_title : 'Remove' - })); - var search = ''; - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - search += $(this).parent().text() + ' '; - }); - this.searchSequences(search); - } else { - newTermInput.val(''); - } - }, - handleClickSavable : function(e) { - require( - [ 'common/growl' ], - function(createGrowl) { - createGrowl( - 'Unsaved search', - 'Start dragging the icon to open your saved items', - false); - }); - }, - handleDragStart : function(e) { - var self = this; - e.originalEvent.dataTransfer.setData('srcId', $(e.target).attr('data-savable-id')); - e.originalEvent.dataTransfer.setData('savableType', 'saved_search'); - e.originalEvent.dataTransfer.setData('savable', JSON.stringify(new SavedSearchEntity.SavedSearch({ - type : 'sequences;' + self.data_source, - description : '', - search : self.collection.formattedQuery - }).toJSON())); - Lvl.vent.trigger('editable:items:dragstart'); - }, - handleDragEnd : function(e) { - Lvl.vent.trigger('editable:items:dragend'); - }, - startTour : function(e) { - e.preventDefault(); - require([ 'apps/drive/links/tours/links_tour' ], function(tour) { - tour(); - }); - }, - shortenUrl : function(e) { - e.preventDefault(); - var self = this; - var target = $(e.target); - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-shortened-url') : target - .attr('data-shortened-url'); - $.ajax({ - type : 'GET', - dataType : 'text', - crossDomain : true, - url : config.get('service', '') + '/public/datasets/' + encodeURIComponent(itemId) + '/shortened_url', - headers : config.authorizationHeader() - }).done(function(data) { - require([ 'common/info' ], function(infoDialog) { - infoDialog('Shortened URL', '' + data + ''); - }); - }).fail(function() { - require([ 'common/alert' ], function(alertDialog) { - alertDialog('Error', 'The shortened link cannot be created.'); - }); - }); - }, - removeLink : function(e) { - e.preventDefault(); - var self = this; - var target = $(e.target); - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-remove') : target - .attr('data-remove'); - var item = this.collection.get(itemId); - item.oauth2_token = config.authorizationToken(); - require([ 'common/confirm' ], function(confirmDialog) { - confirmDialog('Confirm deletion', 'This action will delete the selected public link. Are you sure?', - function() { - self.collection.remove(item); - item.destroy({ - success : function(e) { - }, - error : function(e) { - require([ 'common/alert' ], function(alertDialog) { - alertDialog('Error', 'The public link cannot be removed.'); - }); - } - }); - }, { - btn_text : 'Delete' - }); - }); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:backgrid:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:pace:entities').toJSON()); - }); - }, - onDestroy : function() { - // don't remove the styles in order to enable them to be reused - pace.stop(); - this.stopListening(); - // remove all event handlers - Lvl.vent.off('search:form:submitted'); - $('#lvl-search-form').unbind(); - $('button#lvl-feature-tour-btn').unbind(); - // clean menu - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu-toggle').hide(0); - $('#lvl-floating-menu').empty(); - // clean tour - require([ 'hopscotch' ], function(hopscotch) { - hopscotch.endTour(); - }); - }, - onRender : function() { - var self = this; - pace.start(); - - var gridContainer = this.$('#grid-container'); - gridContainer.append(this.grid.render().el); - - var paginator = new Backgrid.Extension.Paginator({ - collection : this.collection, - windowSize : 14, - slideScale : 0.5, - goBackFirstOnSort : true - }); - - gridContainer.after(paginator.render().el); - - $(paginator.el).css({ - 'margin-top' : '20px' - }); - - var filter = new Backgrid.Extension.ServerSideFilter({ - collection : this.collection, - name : 'q', - placeholder : 'filter links' - }); - - var filterToolbar = this.$('#grid-filter-toolbar'); - filterToolbar.append(filter.render().el); - - $(filter.el).addClass('hidden'); - - this.grid.clearSelectedModels(); - - this.collection.fetch({ - reset : true - }); - } - }); - }); - return Lvl.DriveApp.Links.View; - }); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/tours/links_tour.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/tours/links_tour.js deleted file mode 100644 index 17fc14ee..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/tours/links_tour.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * RequireJS module that defines the tour: drive->links->tour. - */ - -define( - [ 'app', 'apps/config/marionette/styles/style', 'hopscotch' ], - function(Lvl, Style, hopscotch) { - return function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:hopscotch:entities').toJSON()); - }); - var tour = { - id : 'drive-links', - showPrevButton : false, - skipIfNoElement : true, - steps : [ - { - target : document.querySelector('div#section-tab-list'), - placement : 'bottom', - fixedElement : true, - title : 'This is the navigation menu', - content : 'Use the links here to get around on the links features.' - }, - { - target : document.querySelector('a#btnSearchToggle'), - placement : 'left', - fixedElement : true, - title : 'This is the search button', - content : 'Use it to search for items. Click on the search icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, - { - delay : 300, - target : document.querySelector('input#lvl-search-form-input'), - placement : 'bottom', - fixedElement : true, - title : 'This is the search box', - content : 'It supports the LvLQL query language to search the links. Enter year:1999 in the input box and hit enter. Once the search is completed continue this tour.' - }, - { - target : document.querySelector('ul#lvl-search-terms-container'), - placement : 'bottom', - title : 'Your search terms are listed', - content : 'Use the provided controls to clear/add search terms. Drag the icon to save your search terms.', - }, - { - target : document.querySelector('div#grid-container'), - placement : 'top', - yOffset : 100, - title : 'This is the result dataset', - content : 'Columns are sortable, rows are selectable. Additional controls are found at the right lateral side of the grid.' - }, - { - target : document.querySelector('button#lvl-toggle-toolbar-btn'), - placement : 'left', - fixedElement : true, - title : 'This is the Tools menu', - content : 'Use the controls here to perform additionl actions on the dataset and the selected items. Click on the menu icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, { - delay : 300, - target : document.querySelector('div#lvl-floating-menu-toggle'), - placement : 'left', - xOffset : -10, - fixedElement : true, - title : 'Additional controls are displayed', - content : 'Include deselecting all selected items.', - onNext : function() { - $('button#lvl-toggle-toolbar-btn').click(); - } - }, { - delay : 300, - target : document.querySelector('button#lvl-feature-tour-btn'), - placement : 'left', - fixedElement : true, - title : 'You\'re all set!', - content : 'Run this tour as many times as you need.' - } ] - }; - hopscotch.startTour(tour); - } - }); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/tpls/drive_links.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/tpls/drive_links.html deleted file mode 100644 index 17348db7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/tpls/drive_links.html +++ /dev/null @@ -1,13 +0,0 @@ - - -
-
-
-
-
- - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/tpls/toolbar_browse.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/tpls/toolbar_browse.html deleted file mode 100644 index d52336b9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/drive/links/tpls/toolbar_browse.html +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/e-compendium_browse_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/e-compendium_browse_ctrl.js deleted file mode 100644 index 41bb3ec0..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/e-compendium_browse_ctrl.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * RequireJS module that defines the controller: e-compendium->browse. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'entities/reference', 'apps/e-compendium/browse/e-compendium_browse_view' ], function(Lvl, - Configuration, ReferenceModel, View) { - Lvl.module('ECompendiumApp.Browse', function(Browse, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Browse.Controller = { - showSection : function() { - var view = new View.Content({ - collection : new ReferenceModel.ReferencePageableCollection({ - oauth2_token : config.authorizationToken() - }) - }); - view.on('references:view:citation', function(pmid) { - require([ 'apps/e-compendium/citation_viewer/e-compendium_citation_viewer', 'entities/pm_citation' ], function(CitationView, - PmCitationModel) { - var pmCitationModel = new PmCitationModel.PmCitation({ - id : pmid - }); - pmCitationModel.oauth2_token = config.authorizationToken(); - var dialogView = new CitationView.Content({ - model : pmCitationModel - }); - Lvl.dialogRegion.show(dialogView); - }); - }); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.ECompendiumApp.Browse.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/e-compendium_browse_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/e-compendium_browse_view.js deleted file mode 100644 index f541a324..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/e-compendium_browse_view.js +++ /dev/null @@ -1,269 +0,0 @@ -/** - * RequireJS module that defines the view: e-compendium->browse. - */ - -define([ 'app', 'tpl!apps/e-compendium/browse/tpls/e-compendium_browse', 'tpl!apps/e-compendium/browse/tpls/toolbar_browse', - 'tpl!common/search/tpls/search_term', 'tpl!common/search/tpls/add_search_term', 'tpl!common/search/tpls/save_search', - 'apps/config/marionette/styles/style', 'entities/reference', 'pace', 'common/country_names', 'backbone.oauth2', 'backgrid', 'backgrid-paginator', - 'backgrid-select-all', 'backgrid-filter' ], function(Lvl, BrowseTpl, ToolbarTpl, SearchTermTpl, AddSearchTermTpl, SaveSearchTpl, Style, - ReferenceEntity, pace, mapCn) { - Lvl.module('ECompendiumApp.Browse.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var columns = [ { - name : 'pubmedId', - label : 'PMID', - editable : false, - cell : 'string' - }, { - name : 'publicationYear', - label : 'Year', - editable : false, - cell : 'string' - }, { - name : 'title', - label : 'Title', - editable : false, - cell : 'string' - }, { - name : 'pubmedId', - label : '', - editable : false, - sortable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append(''); - } - this.delegateEvents(); - return this; - } - }) - } ]; - View.Content = Marionette.ItemView.extend({ - id : 'browse', - template : BrowseTpl, - initialize : function() { - this.listenTo(this.collection, 'request', this.displaySpinner); - this.listenTo(this.collection, 'sync error', this.removeSpinner); - this.grid = new Backgrid.Grid({ - columns : [ { - name : '', - cell : 'select-row', - headerCell : 'select-all' - } ].concat(columns), - collection : this.collection, - emptyText : 'No references found' - }); - // setup search - Lvl.vent.on('search:form:submitted', this.searchCitations); - // setup menu - $('#lvl-floating-menu-toggle').show(0); - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu').empty(); - $('#lvl-floating-menu').append(ToolbarTpl({})); - $('a#uncheck-btn').on('click', { - grid : this.grid - }, this.deselectAll); - $('button#lvl-feature-tour-btn').on('click', this.startTour); - }, - displaySpinner : function() { - pace.restart(); - $('#grid-container').fadeTo('fast', 0.4); - }, - removeSpinner : function() { - pace.stop(); - var self = this; - $('#grid-container').fadeTo('fast', 1); - $('html,body').animate({ - scrollTop : 0 - }, '500', 'swing', function() { - // reset search terms - var searchCont = $('#lvl-search-terms-container'); - searchCont.empty(); - // setup search terms from server response - if (self.collection.formattedQuery && self.collection.formattedQuery.length > 0) { - var i = 1; - _.each(self.collection.formattedQuery, function(item) { - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_' + (i++), - sterm_text : item['term'], - sterm_icon : Boolean(item['valid']) ? 'label-success' : 'label-warning', - sterm_title : 'Remove' - })); - }); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_-1', - sterm_text : 'clear all', - sterm_icon : 'label-danger', - sterm_title : 'Remove All' - })); - searchCont.append(AddSearchTermTpl({})); - searchCont.append(SaveSearchTpl({})); - $('#lvl-search-terms').show('fast'); - } else { - $('#lvl-search-terms').hide('fast'); - } - }); - }, - events : { - 'click a[data-search-term]' : 'resetSearchTerms', - 'submit form#lvl-add-search-term-form' : 'addSearchTerm', - 'click div.lvl-savable' : 'handleClickSavable', - 'dragstart div.lvl-savable' : 'handleDragStart', - 'dragend div.lvl-savable' : 'handleDragEnd', - 'click a[data-pmid]' : 'showCitationRecord' - }, - deselectAll : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - e.data.grid.clearSelectedModels(); - }, - searchCitations : function(search) { - var backgridFilter = $('form.backgrid-filter:first'); - backgridFilter.find('input:first').val(search); - // TODO backgridFilter.submit(); - // TODO - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Operation unavailable', 'Search feature is coming soon. Stay tuned!', false); - }); - // TODO - }, - resetSearchTerms : function(e) { - e.preventDefault(); - var target = $(e.target); - var search = ''; - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-search-term') : target.attr('data-search-term'); - if (itemId !== 'sterm_-1') { - var searchCont = $('#lvl-search-terms-container'); - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - if ($(this).attr('data-search-term') !== itemId) { - search += $(this).parent().text() + ' '; - } - }); - } - this.searchCitations(search); - }, - addSearchTerm : function(e) { - e.preventDefault(); - var newTermInput = this.$('#lvl-add-search-term-input'), newTerm = newTermInput.val().trim(); - if (newTerm.length > 0) { - this.$('li#lvl-add-search-term-container').hide(); - var searchCont = this.$('#lvl-search-terms-container'); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_0', - sterm_text : newTerm, - sterm_icon : 'label-default', - sterm_title : 'Remove' - })); - var search = ''; - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - search += $(this).parent().text() + ' '; - }); - this.searchSequences(search); - } else { - newTermInput.val(''); - } - }, - handleClickSavable : function(e) { - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Unsaved search', - 'Start dragging the icon to open your saved items', - false); - }); - }, - handleDragStart : function(e) { - var self = this; - e.originalEvent.dataTransfer.setData('srcId', $(e.target).attr('data-savable-id')); - e.originalEvent.dataTransfer.setData('savableType', 'saved_search'); - e.originalEvent.dataTransfer.setData('savable', JSON.stringify(new SavedSearchEntity.SavedSearch({ - type : 'sequences;' + self.data_source, - description : '', - search : self.collection.formattedQuery - }).toJSON())); - Lvl.vent.trigger('editable:items:dragstart'); - }, - handleDragEnd : function(e) { - Lvl.vent.trigger('editable:items:dragend'); - }, - startTour : function(e) { - e.preventDefault(); - require([ 'apps/e-compendium/browse/tours/e-compendium_tour' ], function(tour) { - tour(); - }); - }, - showCitationRecord : function(e) { - e.preventDefault(); - var self = this; - var target = $(e.target); - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-pmid') : target.attr('data-pmid'); - this.trigger('references:view:citation', itemId); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:backgrid:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:pace:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:flags:entities').toJSON()); - }); - }, - onDestroy : function() { - // don't remove the styles in order to enable them to be reused - pace.stop(); - this.stopListening(); - // remove all event handlers - Lvl.vent.off('search:form:submitted'); - $('#lvl-search-form').unbind(); - $('button#lvl-feature-tour-btn').unbind(); - // clean menu - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu-toggle').hide(0); - $('#lvl-floating-menu').empty(); - // clean tour - require([ 'hopscotch' ], function(hopscotch) { - hopscotch.endTour(); - }); - }, - onRender : function() { - var self = this; - pace.start(); - - var gridContainer = this.$('#grid-container'); - gridContainer.append(this.grid.render().el); - - var paginator = new Backgrid.Extension.Paginator({ - collection : this.collection, - windowSize : 14, - slideScale : 0.5, - goBackFirstOnSort : true - }); - - gridContainer.after(paginator.render().el); - - $(paginator.el).css({ - 'margin-top' : '20px' - }); - - var filter = new Backgrid.Extension.ServerSideFilter({ - collection : this.collection, - name : 'q', - placeholder : 'filter citations' - }); - - var filterToolbar = this.$('#grid-filter-toolbar'); - filterToolbar.append(filter.render().el); - - $(filter.el).addClass('hidden'); - - this.grid.clearSelectedModels(); - - this.collection.fetch({ - reset : true - }); - } - }); - }); - return Lvl.ECompendiumApp.Browse.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/tours/e-compendium_tour.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/tours/e-compendium_tour.js deleted file mode 100644 index 857b364b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/tours/e-compendium_tour.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * RequireJS module that defines the tour: e-compendium->tour. - */ - -define( - [ 'app', 'apps/config/marionette/styles/style', 'hopscotch' ], - function(Lvl, Style, hopscotch) { - return function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:hopscotch:entities').toJSON()); - }); - var tour = { - id : 'e-compendium-browse', - showPrevButton : false, - skipIfNoElement : true, - steps : [ - { - target : document.querySelector('div#section-tab-list'), - placement : 'bottom', - fixedElement : true, - title : 'This is the navigation menu', - content : 'Use the links here to get around on the e-compendium features.' - }, - { - target : document.querySelector('a#btnSearchToggle'), - placement : 'left', - fixedElement : true, - title : 'This is the search button', - content : 'Use it to search for items. Click on the search icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, - { - delay : 300, - target : document.querySelector('input#lvl-search-form-input'), - placement : 'bottom', - fixedElement : true, - title : 'This is the search box', - content : 'It supports the LvLQL query language to search the e-compendium. Enter year:1999 in the input box and hit enter. Once the search is completed continue this tour.' - }, - { - target : document.querySelector('ul#lvl-search-terms-container'), - placement : 'bottom', - title : 'Your search terms are listed', - content : 'Use the provided controls to clear/add search terms. Drag the icon to save your search terms.', - }, - { - target : document.querySelector('div#grid-container'), - placement : 'top', - yOffset : 100, - title : 'This is the result dataset', - content : 'Columns are sortable, rows are selectable. Additional controls are found at the right lateral side of the grid.' - }, - { - target : document.querySelector('button#lvl-toggle-toolbar-btn'), - placement : 'left', - fixedElement : true, - title : 'This is the Tools menu', - content : 'Use the controls here to perform additionl actions on the dataset and the selected items. Click on the menu icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, { - delay : 300, - target : document.querySelector('div#lvl-floating-menu-toggle'), - placement : 'left', - xOffset : -10, - fixedElement : true, - title : 'Additional controls are displayed', - content : 'Include deselecting all selected items.', - onNext : function() { - $('button#lvl-toggle-toolbar-btn').click(); - } - }, { - delay : 300, - target : document.querySelector('button#lvl-feature-tour-btn'), - placement : 'left', - fixedElement : true, - title : 'You\'re all set!', - content : 'Run this tour as many times as you need.' - } ] - }; - hopscotch.startTour(tour); - } - }); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/tpls/e-compendium_browse.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/tpls/e-compendium_browse.html deleted file mode 100644 index 17348db7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/tpls/e-compendium_browse.html +++ /dev/null @@ -1,13 +0,0 @@ - - -
-
-
-
-
- - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/tpls/toolbar_browse.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/tpls/toolbar_browse.html deleted file mode 100644 index d52336b9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/browse/tpls/toolbar_browse.html +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/citation_viewer/e-compendium_citation_viewer.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/citation_viewer/e-compendium_citation_viewer.js deleted file mode 100644 index f4844a66..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/citation_viewer/e-compendium_citation_viewer.js +++ /dev/null @@ -1,98 +0,0 @@ -/** - * RequireJS module that defines the view: e-compendium->view_citation. - */ - -define([ 'app', 'tpl!apps/e-compendium/citation_viewer/templates/e-compendium_citation_viewer' ], function(Lvl, DisplayCitationTpl) { - Lvl.module('ECompendiumApp.Citation.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - View.Content = Marionette.ItemView.extend({ - template : DisplayCitationTpl, - templateHelpers : { - gbField : function(id, encode) { - var encode = encode || false; - return encode ? encodeURIComponent(this[id]) : this[id]; - }, - getISOAbbreviation : function() { - var abbr = ''; - if (this['medlineCitation'] && this['medlineCitation'].article) { - abbr = this['medlineCitation'].article.journal.isoabbreviation; - } - return abbr; - }, - getIssue : function() { - var issue = ''; - if (this['medlineCitation'] && this['medlineCitation'].article) { - var objIssue = this['medlineCitation'].article.journal.journalIssue; - var pubDate = objIssue.pubDate.yearOrMonthOrDayOrSeasonOrMedlineDate; - var year = '', month = '', day = '', pages = ''; - for (var i = 0; i < pubDate.length && (year === '' || month === '' || day === ''); i++) { - if (year === '') { - year = pubDate[i].value; - } else if (month === '') { - month = pubDate[i].value; - } else if (day === '') { - day = pubDate[i].value; - } - } - var pagination = this['medlineCitation'].article.paginationOrELocationID; - for (var i = 0; i < pagination.length && pages === ''; i++) { - if (pagination[i].startPageOrEndPageOrMedlinePgn) { - var pagination2 = pagination[i].startPageOrEndPageOrMedlinePgn; - for (var j = 0; j < pagination2.length && pages === ''; j++) { - if (pagination2[j].value) { - pages = pagination2[j].value; - } - } - } - } - issue = year + ' ' + month + ' ' + day + '; ' + objIssue.issue + '(' + objIssue.volume + '):' + pages; - } - return issue; - }, - getTitle : function() { - var title = ''; - if (this['medlineCitation'] && this['medlineCitation'].article) { - title = this['medlineCitation'].article.articleTitle; - } - return title; - }, - getAuthors : function() { - var authors = ''; - if (this['medlineCitation'] && this['medlineCitation'].article) { - var authorList = this['medlineCitation'].article.authorList.author; - for (var i = 0; i < authorList.length; i++) { - var author = authorList[i].lastNameOrForeNameOrInitialsOrSuffixOrNameIDOrCollectiveName; - var initials = '', lastname = ''; - for (var j = 0; j < author.length && (initials === '' || lastname === ''); j++) { - if (lastname === '') { - lastname = author[j].value; - } else if (initials === '') { - initials = author[j].value; - } - } - if (initials !== '' || lastname !== '') { - authors += lastname + ' ' + initials + ', '; - } - } - } - return authors.length >= 2 ? authors.substring(0, authors.length - 2) : ''; - }, - getAbstract : function() { - var citAbstract = ''; - if (this['medlineCitation'] && this['medlineCitation'].article) { - citAbstract = this['medlineCitation'].article.abstract.abstractText; - } - return citAbstract; - } - }, - initialize : function() { - this.listenTo(this.model, 'change', this.render); - var self = this; - self.model.fetch({ - reset : true - }); - } - }); - }); - return Lvl.ECompendiumApp.Citation.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/citation_viewer/templates/e-compendium_citation_viewer.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/citation_viewer/templates/e-compendium_citation_viewer.html deleted file mode 100644 index 80bcf7d0..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/citation_viewer/templates/e-compendium_citation_viewer.html +++ /dev/null @@ -1,36 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/e-compendium_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/e-compendium_app.js deleted file mode 100644 index 8c43e2d1..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/e-compendium_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: e-compendium. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('ECompendiumApp', function(ECompendiumApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - ECompendiumApp.startWithParent = false; - - ECompendiumApp.onStart = function() { - console.log('starting ECompendiumApp'); - }; - - ECompendiumApp.onStop = function() { - console.log('stopping ECompendiumApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('e-compendium:set:active', function(section) { - require([ 'apps/e-compendium/layout/e-compendium_layout_ctrl' ], function(LayoutController) { - ECompendiumApp.currentSection = LayoutController.showLayout(section); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/e-compendium_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/e-compendium_router.js deleted file mode 100644 index 2af87605..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/e-compendium_router.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: e-compendium. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'routefilter' ], function(Lvl, Configuration) { - Lvl.module('Routers.ECompendiumApp', function(ECompendiumAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var Router = Backbone.Router.extend({ - routes : { - 'e-compendium' : 'showECompendium', - 'e-compendium/:section' : 'showECompendium' - }, - before : function() { - if (!config.isAuthenticated()) { - Lvl.navigate('login/' + encodeURIComponent(Backbone.history.fragment) + '/unauthenticated', { - trigger : true, - replace : true - }); - return false; - } - require([ 'apps/e-compendium/e-compendium_app' ], function() { - Lvl.execute('set:active:header', 'workspace', 'e-compendium'); - Lvl.execute('set:active:footer', 'workspace'); - Lvl.startSubApp('ECompendiumApp'); - }); - return true; - }, - showECompendium : function(section) { - section = (section || 'browse').toLowerCase(); - if (section === 'browse') { - Lvl.navigate('e-compendium/' + section, { - trigger : false, - replace : true - }); - Lvl.execute('e-compendium:set:active', section); - } else if (section === 'map' || section === 'stats' || section === 'submit') { - Lvl.execute('e-compendium:set:active', section); - } else { - Lvl.navigate('not-found', { - trigger : true, - replace : true - }); - } - } - }); - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/e-compendium_layout_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/e-compendium_layout_ctrl.js deleted file mode 100644 index 1556bbf6..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/e-compendium_layout_ctrl.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * RequireJS module that defines the controller: e-compendium->layout. - */ - -define([ 'app', 'apps/e-compendium/layout/e-compendium_layout_view' ], function(Lvl, View) { - Lvl.module('ECompendiumApp.Layout', function(Layout, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Layout.Controller = { - showLayout : function(section) { - require([ 'apps/e-compendium/' + section + '/e-compendium_' + section + '_ctrl', 'apps/e-compendium/layout/entities/tablinks' ], function( - SectionController) { - var tabLinks = Lvl.request('e-compendium:navigation:entities'); - var tabLinkToSelect = tabLinks.find(function(tabLink) { - return tabLink.get('link') === section; - }); - tabLinkToSelect.select(); - tabLinks.trigger('reset'); - var view = new View.Layout({ - navigation : tabLinks - }); - Lvl.mainRegion.show(view); - return SectionController.showSection(); - }); - } - } - }); - return Lvl.ECompendiumApp.Layout.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/e-compendium_layout_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/e-compendium_layout_view.js deleted file mode 100644 index 1ee674af..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/e-compendium_layout_view.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * RequireJS module that defines the view: e-compendium->layout. - */ - -define([ 'app', 'apps/config/marionette/regions/fadein', 'tpl!apps/e-compendium/layout/templates/e-compendium-layout', - 'tpl!apps/e-compendium/layout/templates/tab-list', 'tpl!apps/e-compendium/layout/templates/tab-link' ], function(Lvl, FadeInRegion, LayoutTpl, - TabListTpl, TabLinkTpl) { - Lvl.module('ECompendiumApp.Layout.View', function(View, Lvl, Backbone, Marionette, $, _) { - View.TabLink = Marionette.ItemView.extend({ - tagName : 'li', - template : TabLinkTpl, - onRender : function() { - if (this.model.selected) { - this.$el.addClass('active'); - } - } - }); - View.TabList = Marionette.CompositeView.extend({ - template : TabListTpl, - childView : View.TabLink, - childViewContainer : 'ul' - }); - View.Layout = Marionette.LayoutView.extend({ - template : LayoutTpl, - regions : { - tabList : '#section-tab-list', - tabContent : FadeInRegion.extend({ - el : '#section-tab-content' - }) - }, - initialize : function(options) { - this.navLinks = options.navigation; - // subscribe to events - $(document).on('keyup', this.handleEscKeyUpEvent); - }, - onDestroy : function() { - // unsubscribe from events - $(document).off('keyup', this.handleEscKeyUpEvent); - }, - onBeforeShow : function() { - this.showChildView('tabList', new View.TabList({ - collection : this.navLinks - })); - }, - events : { - 'click button#lvl-toggle-toolbar-btn' : 'toggleToolbar', - 'click a#lvl-collapse-toolbar-btn' : 'closeToolbar' - }, - toggleToolbar : function(e) { - e.preventDefault(); - var toolbar = $('#lvl-floating-menu'); - if (toolbar.is(':visible')) { - toolbar.hide('fast'); - } else { - toolbar.show('fast'); - } - }, - closeToolbar : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - }, - handleEscKeyUpEvent : function(e) { - var toolbar = $('#lvl-floating-menu'); - if (e.which == 27 && toolbar.is(':visible')) { - toolbar.hide('fast'); - } - } - }); - }); - return Lvl.ECompendiumApp.Layout.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/entities/tablinks.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/entities/tablinks.js deleted file mode 100644 index 4a468f0a..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/entities/tablinks.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * RequireJS module that defines the entity: e-compendium->tab-link. - */ - -define([ 'app', 'backbone.picky' ], function(Lvl) { - Lvl.module('ECompendiumApp.Entities', function(Entities, Lvl, Backbone, Marionette, $, _) { - Entities.Navigation = Backbone.Model.extend({ - defaults : { - link : '', - icon : 'fa-chain-broken', - text : 'Unknown' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.link) { - errors.link = 'can\'t be empty'; - } - if (!attrs.icon) { - errors.icon = 'can\'t be empty'; - } - if (!attrs.text) { - errors.text = 'can\'t be empty'; - } else { - if (attrs.text.length < 2) { - errors.text = 'is too short'; - } - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - - Entities.NavigationECompendium = Backbone.Collection.extend({ - model : Entities.Navigation, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - - var iniNavigationLinks = function() { - Entities.navigationLinks = new Entities.NavigationECompendium([ { - id : 1, - link : 'browse', - icon : 'fa-table', - text : 'Browse' - }, { - id : 2, - link : 'map', - icon : 'fa-map-marker', - text : 'Map' - }, { - id : 3, - link : 'stats', - icon : 'fa-bar-chart-o', - text : 'Stats' - }, { - id : 4, - link : 'submit', - icon : 'fa-cloud-upload', - text : 'Submit' - } ]); - }; - - var API = { - getNavigationEntities : function() { - if (Entities.navigationLinks === undefined) { - iniNavigationLinks(); - } - return Entities.navigationLinks; - } - } - - Lvl.reqres.setHandler('e-compendium:navigation:entities', function() { - return API.getNavigationEntities(); - }); - }); - return; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/templates/e-compendium-layout.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/templates/e-compendium-layout.html deleted file mode 100644 index 0b1edb99..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/templates/e-compendium-layout.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - -
- - -
-
-
-
-
- -
-
- -

 

 

 

 

-

 

 

 

 

-
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/templates/tab-link.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/templates/tab-link.html deleted file mode 100644 index 1e254528..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/templates/tab-link.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/templates/tab-list.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/templates/tab-list.html deleted file mode 100644 index fecedd0c..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/layout/templates/tab-list.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/map/e-compendium_map_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/map/e-compendium_map_ctrl.js deleted file mode 100644 index 5f1f49c9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/map/e-compendium_map_ctrl.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * RequireJS module that defines the controller: e-compendium->map. - */ - -define([ 'app', 'apps/e-compendium/map/e-compendium_map_view' ], function(Lvl, View) { - Lvl.module('CollectionApp.Map', function(Map, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Map.Controller = { - showSection : function() { - var view = new View.Content(); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.CollectionApp.Map.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/map/e-compendium_map_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/map/e-compendium_map_view.js deleted file mode 100644 index ec48d477..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/map/e-compendium_map_view.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * RequireJS module that defines the view: e-compendium->map. - */ - -define([ 'marionette', 'tpl!apps/e-compendium/map/templates/e-compendium_map' ], function(Marionette, MapTpl) { - return { - Content : Marionette.ItemView.extend({ - id : 'map', - template : MapTpl - }) - }; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/map/templates/e-compendium_map.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/map/templates/e-compendium_map.html deleted file mode 100644 index 125f0d07..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/map/templates/e-compendium_map.html +++ /dev/null @@ -1,6 +0,0 @@ -

Citations map

-

Geo-referenced citations coming soon. Stay tuned!

-

 

-

 

-

 

-

 

\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/stats/e-compendium_stats_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/stats/e-compendium_stats_ctrl.js deleted file mode 100644 index b5ee6f5f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/stats/e-compendium_stats_ctrl.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * RequireJS module that defines the controller: e-compendium->stats. - */ - -define([ 'app', 'apps/e-compendium/stats/e-compendium_stats_view' ], function(Lvl, View) { - Lvl.module('CollectionApp.Stats', function(Stats, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Stats.Controller = { - showSection : function() { - var view = new View.Content(); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.CollectionApp.Stats.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/stats/e-compendium_stats_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/stats/e-compendium_stats_view.js deleted file mode 100644 index 35a3f76f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/stats/e-compendium_stats_view.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * RequireJS module that defines the view: e-compendium->stats. - */ - -define([ 'marionette', 'tpl!apps/e-compendium/stats/templates/e-compendium_stats' ], function(Marionette, StatsTpl) { - return { - Content : Marionette.ItemView.extend({ - id : 'stats', - template : StatsTpl - }) - }; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/stats/templates/e-compendium_stats.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/stats/templates/e-compendium_stats.html deleted file mode 100644 index f7a5b8c5..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/stats/templates/e-compendium_stats.html +++ /dev/null @@ -1,6 +0,0 @@ -

Citations statistics

-

Citations statistics coming soon. Stay tuned!

-

 

-

 

-

 

-

 

\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/submit/e-compendium_submit_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/submit/e-compendium_submit_ctrl.js deleted file mode 100644 index 936ae352..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/submit/e-compendium_submit_ctrl.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * RequireJS module that defines the controller: e-compendium->submit. - */ - -define([ 'app', 'apps/e-compendium/submit/e-compendium_submit_view' ], function(Lvl, View) { - Lvl.module('CollectionApp.Submit', function(Submit, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Submit.Controller = { - showSection : function() { - var view = new View.Content(); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.CollectionApp.Submit.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/submit/e-compendium_submit_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/submit/e-compendium_submit_view.js deleted file mode 100644 index 368a98b3..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/submit/e-compendium_submit_view.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * RequireJS module that defines the view: e-compendium->submit. - */ - -define([ 'marionette', 'tpl!apps/e-compendium/submit/templates/e-compendium_submit' ], function(Marionette, SubmitTpl) { - return { - Content : Marionette.ItemView.extend({ - id : 'submit', - template : SubmitTpl - }) - }; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/submit/templates/e-compendium_submit.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/submit/templates/e-compendium_submit.html deleted file mode 100644 index 477f8074..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/e-compendium/submit/templates/e-compendium_submit.html +++ /dev/null @@ -1,6 +0,0 @@ -

Citation submission

-

Submission tools coming soon. Stay tuned!

-

 

-

 

-

 

-

 

\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/enm_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/enm_app.js deleted file mode 100644 index 9c73cedb..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/enm_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: enm. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('EnmApp', function(EnmApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - EnmApp.startWithParent = false; - - EnmApp.onStart = function() { - console.log('starting EnmApp'); - }; - - EnmApp.onStop = function() { - console.log('stopping EnmApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('show:enm', function() { - require([ 'apps/enm/show/enm_show_ctrl' ], function(ShowController) { - ShowController.showEnm(); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/enm_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/enm_router.js deleted file mode 100644 index 2e4437bc..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/enm_router.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: enm. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'routefilter' ], function(Lvl, Configuration) { - Lvl.module('Routers.EnmApp', function(EnmAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var Router = Backbone.Router.extend({ - routes : { - 'enm' : 'showEnm' - }, - before : function() { - if (!config.isAuthenticated()) { - Lvl.navigate('login/' + encodeURIComponent(Backbone.history.fragment) + '/unauthenticated', { - trigger : true, - replace : true - }); - return false; - } - require([ 'apps/enm/enm_app' ], function() { - Lvl.execute('set:active:header', 'workspace', 'enm'); - Lvl.execute('set:active:footer', 'workspace'); - Lvl.startSubApp('EnmApp'); - }); - return true; - }, - showEnm : function() { - Lvl.execute('show:enm'); - } - }); - - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/show/enm_show_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/show/enm_show_ctrl.js deleted file mode 100644 index 4372e03f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/show/enm_show_ctrl.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * RequireJS module that defines the controller: enm->show. - */ - -define([ 'app', 'apps/enm/show/enm_show_view' ], function(Lvl, View) { - Lvl.module('EnmApp.Show', function(Show, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Show.Controller = { - showEnm : function() { - var view = new View.Content(); - Lvl.mainRegion.show(view); - } - } - }); - return Lvl.EnmApp.Show.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/show/enm_show_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/show/enm_show_view.js deleted file mode 100644 index 085ca863..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/show/enm_show_view.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * RequireJS module that defines the view: enm->show. - */ - -define([ 'marionette', 'tpl!apps/enm/show/templates/enm' ], function(Marionette, EnmTpl) { - return { - Content : Marionette.ItemView.extend({ - template : EnmTpl - }) - }; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/show/templates/enm.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/show/templates/enm.html deleted file mode 100644 index bdf95982..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/enm/show/templates/enm.html +++ /dev/null @@ -1,12 +0,0 @@ -
-
-
-

Ecological Niche modeling

-

ENM tools coming soon. Stay tuned!

-

 

-

 

-

 

-

 

-
-
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/footer_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/footer_app.js deleted file mode 100644 index dee94404..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/footer_app.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * RequireJS module that defines the sub-application: footer. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('FooterApp', function(FooterApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - FooterApp.startWithParent = true; - - FooterApp.onStart = function() { - console.log('starting FooterApp'); - }; - - FooterApp.onStop = function() { - console.log('stopping FooterApp'); - }; - - FooterApp.currentFooter = null; - - Lvl.commands.setHandler('set:active:footer', function(id) { - id = id || 'default'; - if (FooterApp.currentFooter !== id) { - if (id === 'no_footer') { - Lvl.footerRegion.reset(); - FooterApp.currentFooter = null; - } else { - require([ 'apps/footer/show/footer_show_ctrl' ], function(FooterCtrl) { - FooterApp.currentFooter = FooterCtrl.showFooter(); - }); - } - } - }); - }); - return Lvl.FooterApp; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/show/footer_show_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/show/footer_show_ctrl.js deleted file mode 100644 index b68ebe70..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/show/footer_show_ctrl.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * RequireJS module that defines the controller: footer->show. - */ - -define([ 'app', 'apps/footer/show/footer_show_view' ], function(Lvl, View) { - Lvl.module('FooterApp.Show', function(Show, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Show.Controller = { - showFooter : function() { - var view = new View.Footer(); - view.on('access:view:privacy_policy', function(accession) { - require([ 'apps/access/legal/privacy_policy_viewer' ], function(PrivacyPolicyView) { - var dialogView = new PrivacyPolicyView.Content(); - Lvl.dialogRegion.show(dialogView); - }); - }); - view.on('access:view:terms_and_conditions', function(accession) { - require([ 'apps/access/legal/terms_of_use_viewer' ], function(TermsOfUseView) { - var dialogView = new TermsOfUseView.Content(); - Lvl.dialogRegion.show(dialogView); - }); - }); - Lvl.footerRegion.show(view); - return View.Footer.id; - } - } - }); - return Lvl.FooterApp.Show.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/show/footer_show_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/show/footer_show_view.js deleted file mode 100644 index 18c1327e..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/show/footer_show_view.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * RequireJS module that defines the view: footer->show. - */ - -define([ 'app', 'tpl!apps/footer/show/templates/footer' ], function(Lvl, FooterTpl) { - Lvl.module('FooterApp.Show.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - View.Footer = Marionette.ItemView.extend({ - id : 'default', - template : FooterTpl, - events : { - 'click a#privacy_policy_btn' : 'showPrivacyPolicy', - 'click a#terms_and_conditions_btn' : 'showTermsAndConditions' - }, - showPrivacyPolicy : function(e) { - e.preventDefault(); - this.trigger('access:view:privacy_policy'); - }, - showTermsAndConditions : function(e) { - e.preventDefault(); - this.trigger('access:view:terms_and_conditions'); - } - }); - }); - return Lvl.FooterApp.Show.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/show/templates/footer.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/show/templates/footer.html deleted file mode 100644 index d0a0ea95..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/footer/show/templates/footer.html +++ /dev/null @@ -1,59 +0,0 @@ - - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/header_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/header_app.js deleted file mode 100644 index 3ffb53fe..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/header_app.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * RequireJS module that defines the sub-application: header. - */ - -define([ 'app', 'entities/navigation' ], function(Lvl) { - Lvl.module('HeaderApp', function(HeaderApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - HeaderApp.startWithParent = true; - - HeaderApp.onStart = function() { - console.log('starting HeaderApp'); - }; - - HeaderApp.onStop = function() { - console.log('stopping HeaderApp'); - }; - - HeaderApp.navLinks = Lvl.request('navigation:links+settings:entities'); - - HeaderApp.currentHeader = null; - - /** - * Sets the active header. The 'id' parameter defines the header type: - * home, workspace, admin or no_header (default option). The - * 'application' parameter defines the current application: DNA sequence - * collection, social network, e-compendium, etc. - */ - Lvl.commands.setHandler('set:active:header', function(id, application) { - id = (id || 'default').toLowerCase(); - application = (application || 'home').toLowerCase(); - // load header based on the id - if (HeaderApp.currentHeader !== id) { - if (id === 'home') { - require([ 'apps/header/show/header_home_ctrl' ], function(HomeHeaderCtrl) { - HeaderApp.currentHeader = HomeHeaderCtrl.showHeader(); - }); - } else if (id === 'workspace') { - require([ 'apps/header/show/header_workspace_ctrl' ], function(WorkspaceHeaderCtrl) { - HeaderApp.currentHeader = WorkspaceHeaderCtrl.showHeader(HeaderApp.navLinks); - }); - } else if (id === 'admin') { - require([ 'apps/header/show/header_admin_ctrl' ], function(AdminHeaderCtrl) { - HeaderApp.currentHeader = AdminHeaderCtrl.showHeader(); - }); - } else { - Lvl.headerRegion.reset(); - HeaderApp.currentHeader = null; - } - } - // select a link based on the application - if (id === 'workspace' && (HeaderApp.navLinks.selected === undefined || HeaderApp.navLinks.selected.get('href') !== '/#' + application)) { - var navLinkToSelect = HeaderApp.navLinks.find(function(link) { - return link.get('href') === '/#' + application; - }); - navLinkToSelect.select(); - HeaderApp.navLinks.trigger('reset'); - } - }); - }); - return Lvl.HeaderApp; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_admin_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_admin_ctrl.js deleted file mode 100644 index b9ab3227..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_admin_ctrl.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * RequireJS module that defines the controller: header->admin. - */ - -define([ 'app', 'apps/header/show/header_admin_view' ], function(Lvl, View) { - Lvl.module('HeaderApp.Admin', function(Admin, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Admin.Controller = { - showHeader : function() { - var view = new View.Header(); - Lvl.headerRegion.show(view); - return View.Header.id; - } - } - }); - return Lvl.HeaderApp.Admin.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_admin_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_admin_view.js deleted file mode 100644 index 773a5441..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_admin_view.js +++ /dev/null @@ -1,235 +0,0 @@ -/** - * RequireJS module that defines the view: header->admin. - */ - -define([ 'app', 'tpl!apps/header/show/templates/header_admin', 'tpl!apps/header/show/templates/header_nav', - 'tpl!apps/header/show/templates/header_nav_link', 'tpl!apps/header/show/templates/header_notifications', 'apps/config/marionette/styles/style', - 'apps/config/marionette/configuration', 'moment', 'qtip' ], function(Lvl, AdminHeaderTpl, NavigationTpl, NavigationLinkTpl, NotificationsTpl, - Style, Configuration, moment) { - Lvl.module('HeaderApp.Admin.View', function(View, Lvl, Backbone, Marionette, $, _) { - var config = new Configuration(); - function openSearchForm() { - var searchBox = $('#lvl-search-box'); - if (!searchBox.is(':visible')) { - searchBox.show('fast', function() { - $('#lvl-search-form-input').focus(); - }); - } - } - function closeSearchForm(duration) { - var searchBox = $('#lvl-search-box'); - if (searchBox.is(':visible')) { - if (duration === undefined) - duration = 'fast'; - searchBox.hide(duration); - } - } - View.id = 'admin'; - View.Header = Marionette.LayoutView.extend({ - template : AdminHeaderTpl, - templateHelpers : function() { - $.ajax({ - type : 'GET', - url : config.get('auth') + '/users/' + config.session.get('user.session').email + "?use_email=true", - headers : config.authorizationHeader(), - dataType : 'json' - }).done(function(data, textStatus, request) { - if (data.firstname) { - $('#username').html(function(idx, oldhtml) { - return oldhtml.replace(/Noname/, data.firstname); - }); - } - if (data.roles && $.isArray(data.roles) && _.contains(data.roles, 'admin')) { - $('#sectionAdmin').removeClass('hidden'); - } - }); - return { - username : function() { - return 'Noname'; - } - } - }, - events : { - 'click a#btnSearchToggle' : 'toggleSearchForm', - 'click a#btnProfile' : 'showUserProfile', - 'click a#lvl-search-form-collapse-btn' : 'collapseSearchForm', - 'click button#lvl-search-form-submit-btn-xs' : 'submitSearchFormXs', - 'submit form#lvl-search-form' : 'submitSearchForm', - 'submit form#lvl-search-form-xs' : 'submitSearchFormXs', - 'dragover div#lvl-save-items-target' : 'saveItemsDragOverHandler', - 'dragenter div#lvl-save-items-target' : 'saveItemsDragEnterHandler', - 'dragleave div#lvl-save-items-target' : 'saveItemsDragLeaveHandler', - 'drop div#lvl-save-items-target' : 'saveItemsDropHandler' - }, - toggleSearchForm : function(e) { - e.preventDefault(); - if ($('#lvl-search-box').is(':visible')) { - closeSearchForm(); - } else { - openSearchForm(); - } - }, - collapseSearchForm : function(e) { - e.preventDefault(); - closeSearchForm(); - }, - handleEscKeyUpEvent : function(e) { - if (e.which == 27 && $('#lvl-search-box').is(':visible')) { - closeSearchForm(); - } - }, - showUserProfile : function(e) { - e.preventDefault(); - this.trigger('access:user:profile'); - }, - submitSearchFormXs : function(e) { - e.preventDefault(); - var searchInputXs = this.$('#lvl-search-form-input-xs'); - var searchInput = this.$('#lvl-search-form-input'); - searchInput.val(searchInputXs.val()); - this.$('#lvl-search-form').submit(); - searchInputXs.val(''); - }, - submitSearchForm : function(e) { - e.preventDefault(); - var searchInput = this.$('#lvl-search-form-input'); - Lvl.vent.trigger('search:form:submitted', searchInput.val()); - searchInput.val(''); - closeSearchForm(0); - }, - saveItemsDragOverHandler : function(e) { - e.preventDefault(); - e.originalEvent.dataTransfer.dropEffect = 'copy'; - $('div#lvl-save-items-target').addClass('over'); - return false; - }, - saveItemsDragEnterHandler : function(e) { - $('div#lvl-save-items-target').addClass('over'); - }, - saveItemsDragLeaveHandler : function(e) { - $('div#lvl-save-items-target').removeClass('over'); - }, - saveItemsDropHandler : function(e) { - e.preventDefault(); - var srcId = e.originalEvent.dataTransfer.getData('srcId'); - var srcElem = $('div[data-savable-id="' + srcId + '"]'); - var savableType = e.originalEvent.dataTransfer.getData('savableType'); - var savable = e.originalEvent.dataTransfer.getData('savable'); - if (savableType && savable) { - require([ 'entities/' + savableType ], function(SavableEntity) { - switch (savableType) { - case 'saved_search': - var savableObj = new SavableEntity.SavedSearch(JSON.parse(savable)); - savableObj.oauth2_token = config.authorizationToken(); - savableObj.save({}, { - success : function(model, resp, options) { - require([ 'common/growl' ], function(createGrowl) { - var anchor = $('', { - href : options.xhr.getResponseHeader('Location') - })[0]; - var filename = anchor.pathname.substring(anchor.pathname.lastIndexOf('/') + 1); - createGrowl('Search saved', - ' Saved searches', false); - }); - }, - error : function(model, resp, options) { - require([ 'common/alert' ], function(alertDialog) { - alertDialog('Error', 'Failed to save search.'); - }); - } - }); - break; - default: - console.error('Unsupported savable type ignored: ' + savableType); - break; - } - }); - } - srcElem.remove(); - console.log && console.log('dropped element: ' + srcElem.prop('tagName').toLowerCase() + ', with id: ' + srcId); - this.hideMySavedItems(); - }, - showMySavedItems : function() { - $('div#lvl-save-items').show('fast'); - }, - hideMySavedItems : function() { - $('div#lvl-save-items-target').removeClass('over'); - $('div#lvl-save-items').hide('fast'); - }, - regions : { - navigation : '#section-navigation' - }, - initialize : function(options) { - this.navLinks = options.navigation; - // setup items saving - Lvl.vent.on('editable:items:dragstart', this.showMySavedItems); - Lvl.vent.on('editable:items:dragend', this.hideMySavedItems); - // subscribe to events - $(document).on('keyup', this.handleEscKeyUpEvent); - }, - onDestroy : function() { - closeSearchForm(0); - // remove all event handlers - Lvl.vent.off('editable:items:dragstart'); - Lvl.vent.off('editable:items:dragend'); - $(document).off('keyup', this.handleEscKeyUpEvent); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:qtip:entities').toJSON()); - }); - }, - onRender : function(options) { - this.$('#btnAlerts').click(function(event) { - event.preventDefault(); - }).qtip({ - content : { - text : function(event, api) { - api.elements.content.html('Loading...'); - return $.ajax({ - url : config.get('service', '') + '/notifications', - type : 'GET', - headers : config.authorizationHeader(), - dataType : 'json' - }).then(function(content) { - var tplData = { - notifications : null - }; - if (content && content.elements) { - content.elements.sort(function(a, b) { - return b.date - a.date; - }); - var notifications = []; - for (i = 0; i < content.elements.length && i < 5; i++) { - var msg = content.elements[i].message || ''; - notifications.push({ - date : moment(content.elements[i].issuedAt).format('MMM DD[,] YYYY [at] HH[:]mm'), - message : (msg.length > 24 ? msg.substr(0, 23) + '…' : msg) - }); - } - tplData = { - 'notifications' : notifications - }; - } - return NotificationsTpl(tplData); - }, function(xhr, status, error) { - api.set('content.text', status + ': ' + error); - }); - } - }, - style : { - classes : 'qtip-bootstrap lvl-notifications-container' - }, - show : 'click', - hide : 'unfocus', - position : { - my : 'top center', - at : 'bottom center' - } - }); - } - }); - }); - return Lvl.HeaderApp.Admin.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_home_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_home_ctrl.js deleted file mode 100644 index ca9ec6d2..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_home_ctrl.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * RequireJS module that defines the controller: header->home. - */ - -define([ 'app', 'apps/header/show/header_home_view' ], function(Lvl, View) { - Lvl.module('HeaderApp.Home', function(Home, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Home.Controller = { - showHeader : function() { - var view = new View.Header(); - Lvl.headerRegion.show(view); - return View.Header.id; - } - } - }); - return Lvl.HeaderApp.Home.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_home_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_home_view.js deleted file mode 100644 index 70b0e074..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_home_view.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * RequireJS module that defines the view: header->home. - */ - -define([ 'app', 'tpl!apps/header/show/templates/header_home', 'apps/config/marionette/styles/style', 'apps/config/marionette/configuration', 'qtip' ], - function(Lvl, HomeHeaderTpl, Style, Configuration) { - var config = new Configuration(); - Lvl.module('HeaderApp.Home.View', function(View, Lvl, Backbone, Marionette, $, _) { - View.id = 'home'; - View.Header = Marionette.ItemView.extend({ - template : HomeHeaderTpl, - templateHelpers : { - sessionLink : function() { - return config.isAuthenticated() ? 'logout' : 'login'; - }, - sessionText : function() { - return config.isAuthenticated() ? ' Sign out' : ' Sign in'; - } - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:qtip:entities').toJSON()); - }); - }, - }); - }); - return Lvl.HeaderApp.Home.View; - }); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_workspace_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_workspace_ctrl.js deleted file mode 100644 index 2a10b6f8..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_workspace_ctrl.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * RequireJS module that defines the controller: header->workspace. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'apps/header/show/header_workspace_view' ], function(Lvl, Configuration, View) { - Lvl.module('HeaderApp.Workspace', function(Workspace, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Workspace.Controller = { - showHeader : function(navLinks) { - var view = new View.Header({ - navigation : navLinks - }); - view.on('access:user:profile', function(accession) { - require([ 'apps/access/profile/profile_viewer', 'entities/user' ], function(UserProfileView, UserModel) { - var userModel = new UserModel.User({ - 'email' : config.session.get('user.session').email - }); - userModel.oauth2_token = new Configuration().authorizationToken(); - var dialogView = new UserProfileView.Content({ - model : userModel - }); - Lvl.dialogRegion.show(dialogView); - }); - }); - Lvl.headerRegion.show(view); - return View.id; - } - } - }); - return Lvl.HeaderApp.Workspace.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_workspace_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_workspace_view.js deleted file mode 100644 index e2ec062c..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/header_workspace_view.js +++ /dev/null @@ -1,269 +0,0 @@ -/** - * RequireJS module that defines the view: header->workspace. - */ - -define([ 'app', 'tpl!apps/header/show/templates/header_workspace', 'tpl!apps/header/show/templates/header_nav', - 'tpl!apps/header/show/templates/header_nav_link', 'tpl!apps/header/show/templates/header_notifications', 'apps/config/marionette/styles/style', - 'apps/config/marionette/configuration', 'moment', 'qtip' ], function(Lvl, WorkspaceHeaderTpl, NavigationTpl, NavigationLinkTpl, NotificationsTpl, - Style, Configuration, moment) { - Lvl.module('HeaderApp.Workspace.View', function(View, Lvl, Backbone, Marionette, $, _) { - var config = new Configuration(); - function openSearchForm() { - var searchBox = $('#lvl-search-box'); - if (!searchBox.is(':visible')) { - searchBox.show('fast', function() { - $('#lvl-search-form-input').focus(); - }); - } - } - function closeSearchForm(duration) { - var searchBox = $('#lvl-search-box'); - if (searchBox.is(':visible')) { - if (duration === undefined) - duration = 'fast'; - searchBox.hide(duration); - } - } - View.id = 'workspace'; - View.NavigationLink = Marionette.ItemView.extend({ - tagName : 'li', - template : NavigationLinkTpl, - onRender : function() { - this.$el.attr('role', 'presentation'); - if (this.model.get('text').toLowerCase() !== 'separator') { - if (this.model.selected) { - this.$el.addClass('hidden'); - } - } else { - this.$el.empty(); - this.$el.addClass('divider'); - } - } - }); - View.Navigation = Marionette.CompositeView.extend({ - template : NavigationTpl, - childView : View.NavigationLink, - childViewContainer : 'ul', - collectionEvents : { - 'reset' : 'render' - }, - onBeforeRender : function() { - var selectedNavLink = this.collection.selected || this.collection.at(0); - this.model.set({ - 'selected_icon' : selectedNavLink.get('icon'), - 'selected_text' : selectedNavLink.get('text') - }); - } - }); - View.Header = Marionette.LayoutView.extend({ - template : WorkspaceHeaderTpl, - templateHelpers : function() { - $.ajax({ - type : 'GET', - url : config.get('auth') + '/users/' + config.session.get('user.session').email + "?use_email=true", - headers : config.authorizationHeader(), - dataType : 'json' - }).done(function(data, textStatus, request) { - if (data.firstname) { - $('#username').html(function(idx, oldhtml) { - return oldhtml.replace(/Noname/, data.firstname); - }); - } - if (data.roles && $.isArray(data.roles) && _.contains(data.roles, 'admin')) { - $('#sectionAdmin').removeClass('hidden'); - } - }); - return { - username : function() { - return 'Noname'; - } - } - }, - events : { - 'click a#btnSearchToggle' : 'toggleSearchForm', - 'click a#btnProfile' : 'showUserProfile', - 'click a#lvl-search-form-collapse-btn' : 'collapseSearchForm', - 'click button#lvl-search-form-submit-btn-xs' : 'submitSearchFormXs', - 'submit form#lvl-search-form' : 'submitSearchForm', - 'submit form#lvl-search-form-xs' : 'submitSearchFormXs', - 'dragover div#lvl-save-items-target' : 'saveItemsDragOverHandler', - 'dragenter div#lvl-save-items-target' : 'saveItemsDragEnterHandler', - 'dragleave div#lvl-save-items-target' : 'saveItemsDragLeaveHandler', - 'drop div#lvl-save-items-target' : 'saveItemsDropHandler' - }, - toggleSearchForm : function(e) { - e.preventDefault(); - if ($('#lvl-search-box').is(':visible')) { - closeSearchForm(); - } else { - openSearchForm(); - } - }, - collapseSearchForm : function(e) { - e.preventDefault(); - closeSearchForm(); - }, - handleEscKeyUpEvent : function(e) { - if (e.which == 27 && $('#lvl-search-box').is(':visible')) { - closeSearchForm(); - } - }, - showUserProfile : function(e) { - e.preventDefault(); - this.trigger('access:user:profile'); - }, - submitSearchFormXs : function(e) { - e.preventDefault(); - var searchInputXs = this.$('#lvl-search-form-input-xs'); - var searchInput = this.$('#lvl-search-form-input'); - searchInput.val(searchInputXs.val()); - this.$('#lvl-search-form').submit(); - searchInputXs.val(''); - }, - submitSearchForm : function(e) { - e.preventDefault(); - var searchInput = this.$('#lvl-search-form-input'); - Lvl.vent.trigger('search:form:submitted', searchInput.val()); - searchInput.val(''); - closeSearchForm(0); - }, - saveItemsDragOverHandler : function(e) { - e.preventDefault(); - e.originalEvent.dataTransfer.dropEffect = 'copy'; - $('div#lvl-save-items-target').addClass('over'); - return false; - }, - saveItemsDragEnterHandler : function(e) { - $('div#lvl-save-items-target').addClass('over'); - }, - saveItemsDragLeaveHandler : function(e) { - $('div#lvl-save-items-target').removeClass('over'); - }, - saveItemsDropHandler : function(e) { - e.preventDefault(); - var srcId = e.originalEvent.dataTransfer.getData('srcId'); - var srcElem = $('div[data-savable-id="' + srcId + '"]'); - var savableType = e.originalEvent.dataTransfer.getData('savableType'); - var savable = e.originalEvent.dataTransfer.getData('savable'); - if (savableType && savable) { - require([ 'entities/' + savableType ], function(SavableEntity) { - switch (savableType) { - case 'saved_search': - var savableObj = new SavableEntity.SavedSearch(JSON.parse(savable)); - savableObj.oauth2_token = config.authorizationToken(); - savableObj.save({}, { - success : function(model, resp, options) { - require([ 'common/growl' ], function(createGrowl) { - var anchor = $('', { - href : options.xhr.getResponseHeader('Location') - })[0]; - var filename = anchor.pathname.substring(anchor.pathname.lastIndexOf('/') + 1); - createGrowl('Search saved', - ' Saved searches', false); - }); - }, - error : function(model, resp, options) { - require([ 'common/alert' ], function(alertDialog) { - alertDialog('Error', 'Failed to save search.'); - }); - } - }); - break; - default: - console.error('Unsupported savable type ignored: ' + savableType); - break; - } - }); - } - srcElem.remove(); - console.log && console.log('dropped element: ' + srcElem.prop('tagName').toLowerCase() + ', with id: ' + srcId); - this.hideMySavedItems(); - }, - showMySavedItems : function() { - $('div#lvl-save-items').show('fast'); - }, - hideMySavedItems : function() { - $('div#lvl-save-items-target').removeClass('over'); - $('div#lvl-save-items').hide('fast'); - }, - regions : { - navigation : '#section-navigation' - }, - initialize : function(options) { - this.navLinks = options.navigation; - // setup items saving - Lvl.vent.on('editable:items:dragstart', this.showMySavedItems); - Lvl.vent.on('editable:items:dragend', this.hideMySavedItems); - // subscribe to events - $(document).on('keyup', this.handleEscKeyUpEvent); - }, - onDestroy : function() { - closeSearchForm(0); - // remove all event handlers - Lvl.vent.off('editable:items:dragstart'); - Lvl.vent.off('editable:items:dragend'); - $(document).off('keyup', this.handleEscKeyUpEvent); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:qtip:entities').toJSON()); - }); - }, - onRender : function(options) { - this.navigation.show(new View.Navigation({ - model : options.navLinks.selected || options.navLinks.at(0), - collection : options.navLinks - })); - this.$('#btnAlerts').click(function(event) { - event.preventDefault(); - }).qtip({ - content : { - text : function(event, api) { - api.elements.content.html('Loading...'); - return $.ajax({ - url : config.get('service', '') + '/notifications', - type : 'GET', - headers : config.authorizationHeader(), - dataType : 'json' - }).then(function(content) { - var tplData = { - notifications : null - }; - if (content && content.elements) { - content.elements.sort(function(a, b) { - return b.date - a.date; - }); - var notifications = []; - for (i = 0; i < content.elements.length && i < 5; i++) { - var msg = content.elements[i].message || ''; - notifications.push({ - date : moment(content.elements[i].issuedAt).format('MMM DD[,] YYYY [at] HH[:]mm'), - message : (msg.length > 24 ? msg.substr(0, 23) + '…' : msg) - }); - } - tplData = { - 'notifications' : notifications - }; - } - return NotificationsTpl(tplData); - }, function(xhr, status, error) { - api.set('content.text', status + ': ' + error); - }); - } - }, - style : { - classes : 'qtip-bootstrap lvl-notifications-container' - }, - show : 'click', - hide : 'unfocus', - position : { - my : 'top center', - at : 'bottom center' - } - }); - } - }); - }); - return Lvl.HeaderApp.Workspace.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_admin.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_admin.html deleted file mode 100644 index 3da79b2b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_admin.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_home.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_home.html deleted file mode 100644 index f46459c1..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_home.html +++ /dev/null @@ -1,23 +0,0 @@ - - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_nav.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_nav.html deleted file mode 100644 index 21814b41..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_nav.html +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_nav_link.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_nav_link.html deleted file mode 100644 index 9e25e014..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_nav_link.html +++ /dev/null @@ -1 +0,0 @@ - <%= text %> \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_notifications.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_notifications.html deleted file mode 100644 index 680fec8b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_notifications.html +++ /dev/null @@ -1,17 +0,0 @@ -
-
- - <% if (notifications) { %> -
- <% _.each(notifications, function(item){ %> -
<%= item.date %>
-
<%= item.message %>
-
- <% }); %> - <% } %> -
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_workspace.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_workspace.html deleted file mode 100644 index 7147bed0..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/header/show/templates/header_workspace.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/home_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/home_app.js deleted file mode 100644 index 2b34f555..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/home_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: home. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('HomeApp', function(HomeApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - HomeApp.startWithParent = false; - - HomeApp.onStart = function() { - console.log('starting HomeApp'); - }; - - HomeApp.onStop = function() { - console.log('stopping HomeApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('show:home', function() { - require([ 'apps/home/show/home_show_ctrl' ], function(ShowController) { - ShowController.showHome(); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/home_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/home_router.js deleted file mode 100644 index 969bfd5b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/home_router.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: home. - */ - -define([ 'app', 'routefilter' ], function(Lvl) { - Lvl.module('Routers.HomeApp', function(HomeAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var Router = Backbone.Router.extend({ - routes : { - 'home' : 'showHome' - }, - before : function() { - require([ 'apps/home/home_app' ], function() { - Lvl.execute('set:active:header', 'home'); - Lvl.execute('set:active:footer', 'home'); - Lvl.startSubApp('HomeApp'); - }); - }, - showHome : function() { - Lvl.execute('show:home'); - } - }); - - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/show/home_show_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/show/home_show_ctrl.js deleted file mode 100644 index 28972f89..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/show/home_show_ctrl.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * RequireJS module that defines the controller: home->show. - */ - -define([ 'app', 'apps/home/show/home_show_view', 'apps/config/marionette/configuration' ], function(Lvl, View, Configuration) { - Lvl.module('HomeApp.Show', function(Show, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var lvlEndpoint = new Configuration().get('endpoint', ''); - Show.Controller = { - showHome : function() { - var view = new View.Content({ - model : new Backbone.Model({ - endpoint : lvlEndpoint - }) - }); - Lvl.mainRegion.show(view); - } - } - }); - return Lvl.HomeApp.Show.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/show/home_show_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/show/home_show_view.js deleted file mode 100644 index ff106370..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/show/home_show_view.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * RequireJS module that defines the view: home->show. - */ - -define([ 'marionette', 'tpl!apps/home/show/templates/home' ], function(Marionette, HomeTpl) { - return { - Content : Marionette.ItemView.extend({ - template : HomeTpl, - templateHelpers : { - encodeEndpoint : function() { - return encodeURIComponent(this.endpoint) - } - } - }) - }; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/show/templates/home.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/show/templates/home.html deleted file mode 100644 index e5815f81..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/home/show/templates/home.html +++ /dev/null @@ -1,140 +0,0 @@ - -
-
-
-
-
-

 

 

 

 

-

- Join the Leishmaniasis Virtual Laboratory to gain access to an - open, collaborative research environment for leishmaniasis -

- - - - - Start using it - -

 

-
-
-
-
- -
-
-
-
- - -
-
-
-

Focused on molecular surveillance of Leishmania and their vectors, the Leishmaniasis Virtual Laboratory - (LeishVL) contains a number of online collaborative and research tools for advancing - the current knowledge about leishmaniasis. These tools allow public health workers and researchers, but also international - organizations, pharmaceutical companies and public sectors workers to access the LeishVL - and supply relevant and in-depth information or data on the parasite and vector responsible for this disease from a unique entry - point. The LeishVL is the result of the joint effort of Europeans and Brazilian research - teams involved in the EUBrazilCC project.

-
-
-
-
-

Bring the power of the Cloud to your lab

-
-
-
-
-
- Connect -
-

Leish online research community

-

Participate in a collaborate workspace, sharing your sequences and protocols with other researchers and - deciding who can access your files. Create permanent links to your files to reference them in scientific - papers.

-

Get involved in the community

-
-
-
-
-
- Share -
-

Leishmania & sand fly collections

-

Search the database built from CLIOC, - COLFLEB and - ISCIII-WHO-CCL. Cluster & - aggregate your results by area (country, shaped area) and visualize simultaneously unrelated data - (papers, sequences, species occurrences).

-

Get access to collections

-
-
-
-
-
- Research -
-

Molecular analysis of DNA sequences

-

Customize the pipelines to add your own parameters. Execute your experiments in a large-scale computing - infrastructure and interpret the results online. Share your experiments and results to be referenced on - publications.

-

Enter the analysis section

-
-
-
-
-
- - -
-
-
- -
-
-
-
-
-
-
-
-
-

 

-

The Leishmaniasis Virtual Laboratory is built on top of the EUBrazilCC - infrastructure. Data access and pipeline execution are provided through a RESTful JSON API that - supports open standards like GeoJSON. The infrastructure is interoperable with the - EGI Federated Cloud and provides developers with the necessary - tools to deploy virtual infrastructures using different frameworks like private clouds, supercomputing and opportunistic desktop resources.

-
-
-
-

 

-

EUBrazilCC project facts

-
    -
  • Cloud-based infrastructure.
  • -
  • Built upon open standards.
  • -
  • Federated, heterogeneous resources.
  • -
  • Services and data from Brazil & Europe.
  • -
  • Three selected scientific use cases.
  • -
-

More info:  eubrazilcloudconnect.eu 

-

 

-
-
-
-
-
-
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/not-found_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/not-found_app.js deleted file mode 100644 index 66dadc91..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/not-found_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: not-found. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('NotFoundApp', function(NotFoundApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - NotFoundApp.startWithParent = false; - - NotFoundApp.onStart = function() { - console.log('starting NotFoundApp'); - }; - - NotFoundApp.onStop = function() { - console.log('stopping NotFoundApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('show:not_found', function() { - require([ 'apps/not-found/show/not-found_show_ctrl' ], function(ShowController) { - ShowController.showNotFound(); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/not-found_show_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/not-found_show_ctrl.js deleted file mode 100644 index 90320e83..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/not-found_show_ctrl.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * RequireJS module that defines the controller: not-found->show. - */ - -define([ 'app', 'apps/not-found/show/not-found_show_view' ], function(Lvl, View) { - Lvl.module('NotFoundApp.Show', function(Show, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Show.Controller = { - showNotFound : function() { - require([ 'entities/navigation' ], function() { - var view = new View.Content({ - navigation : Lvl.request('navigation:links:entities'), - settings : Lvl.request('navigation:settings:entities'), - about : Lvl.request('navigation:about:entities'), - documentation : Lvl.request('navigation:documentation:entities'), - support : Lvl.request('navigation:support:entities'), - software : Lvl.request('navigation:software:entities') - }); - Lvl.mainRegion.show(view); - }); - } - } - }); - return Lvl.NotFoundApp.Show.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/not-found_show_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/not-found_show_view.js deleted file mode 100644 index 1394c9c0..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/not-found_show_view.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * RequireJS module that defines the view: not-found->show. - */ - -define([ 'app', 'tpl!apps/not-found/show/templates/not-found', 'tpl!apps/not-found/show/templates/not-found_nav' ], function(Lvl, NotFoundTpl, NavigationTpl) { - Lvl.module('NotFoundApp.Show.View', function(View, Lvl, Backbone, Marionette, $, _) { - View.Navigation = Marionette.ItemView.extend({ - template : NavigationTpl - }); - View.Support = Marionette.ItemView.extend({ - template : NavigationTpl - }); - View.Software = Marionette.ItemView.extend({ - template : NavigationTpl - }); - View.Content = Marionette.LayoutView.extend({ - template : NotFoundTpl, - regions : { - navigation : '#section-navigation', - settings : '#section-settings', - about : '#section-about', - documentation : '#section-documentation', - support : '#section-support', - software : '#section-software' - }, - initialize : function(options) { - this.navLinks = options.navigation; - this.settingsLinks = options.settings; - this.aboutLinks = options.about; - this.documentationLinks = options.documentation; - this.supportLinks = options.support; - this.softwareLinks = options.software; - }, - onRender : function(options) { - this.navigation.show(new View.Navigation({ - collection : options.navLinks - })); - this.settings.show(new View.Navigation({ - collection : options.settingsLinks - })); - this.about.show(new View.Navigation({ - collection : options.aboutLinks - })); - this.documentation.show(new View.Navigation({ - collection : options.documentationLinks - })); - this.support.show(new View.Support({ - collection : options.supportLinks - })); - this.software.show(new View.Software({ - collection : options.softwareLinks - })); - } - }); - }); - return Lvl.NotFoundApp.Show.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/templates/not-found.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/templates/not-found.html deleted file mode 100644 index fb03d2f8..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/templates/not-found.html +++ /dev/null @@ -1,62 +0,0 @@ - -
-
-
-
-
-

 

-

- Oops, 404! -

-

The page you were looking for could not be found.

-
-
-
-
-
-
- - - - -
-
-

 

-
-
-
-
-
- - -
-
-
-
-
-
-

Navigation

-
-

Settings

-
-
-
-

About

-
-

Documentation

-
-

Support

-
-

Software

-
-
-
-
-

About this site

-

- The Leishmaniasis Virtual Laboratory is a open, collaborative environment for research in leishmaniasis. -

-
-
-
-
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/templates/not-found_nav.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/templates/not-found_nav.html deleted file mode 100644 index 0bcead36..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/not-found/show/templates/not-found_nav.html +++ /dev/null @@ -1,5 +0,0 @@ -
    - <% _.each(items, function(item){ %> -
  • > <%= item.text %><%= typeof(item.isExternal)!== 'undefined' ? '' : '' %>
  • - <% }); %> -
\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/about_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/about_app.js deleted file mode 100644 index 8a37657e..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/about_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: open->about. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('AboutApp', function(AboutApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - AboutApp.startWithParent = false; - - AboutApp.onStart = function() { - console.log('starting AboutApp'); - }; - - AboutApp.onStop = function() { - console.log('stopping AboutApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('show:about', function(section) { - require([ 'apps/open/about/show/about_show_ctrl' ], function(ShowController) { - ShowController.showAbout(section); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/about_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/about_router.js deleted file mode 100644 index e637a55f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/about_router.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: open->about. - */ - -define([ 'app', 'routefilter' ], function(Lvl) { - Lvl.module('Routers.AboutApp', function(AboutAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var Router = Backbone.Router.extend({ - routes : { - 'about' : 'showAbout', - 'about/:section' : 'showAbout' - }, - before : function() { - require([ 'apps/open/about/about_app' ], function() { - Lvl.execute('set:active:header', 'home'); - Lvl.execute('set:active:footer', 'home'); - Lvl.startSubApp('AboutApp'); - }); - }, - showAbout : function(section) { - section = (section || 'about').toLowerCase(); - if (section === 'about' || section === 'project' || section === 'key-features') { - Lvl.execute('show:about', section); - } else { - Lvl.navigate('not-found', { - trigger : true, - replace : true - }); - } - } - }); - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/about_show_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/about_show_ctrl.js deleted file mode 100644 index 74fbd4a7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/about_show_ctrl.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * RequireJS module that defines the controller: open->about->show. - */ - -define([ 'app', 'apps/open/layout/open_layout_ctrl', 'text!apps/open/about/show/tpls/about-main-section.html', - 'text!apps/open/about/show/tpls/about-project-section.html', 'text!apps/open/about/show/tpls/about-key-featurest-section.html', - 'apps/open/layout/entities/section' ], function(Lvl, LayoutController, MainSectionHtml, ProjectSectionHtml, KeyFeaturesSectionHtml, SectionEntity) { - Lvl.module('AboutApp.Show', function(Show, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Show.Controller = { - showAbout : function(section) { - var section = section || 'about'; - LayoutController.showLayout({ - activeSection : section, - mainSection : new SectionEntity.Section({ - section : 'about', - name : 'About', - htmlContent : MainSectionHtml - }), - subSections : new SectionEntity.SectionCollection([ new SectionEntity.Section({ - id : 0, - section : 'project', - name : 'Project', - htmlContent : ProjectSectionHtml - }), new SectionEntity.Section({ - id : 1, - section : 'key-features', - name : 'Key features', - htmlContent : KeyFeaturesSectionHtml - }) ]) - }); - } - } - }); - return Lvl.AboutApp.Show.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/tpls/about-key-featurest-section.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/tpls/about-key-featurest-section.html deleted file mode 100644 index bf2481c1..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/tpls/about-key-featurest-section.html +++ /dev/null @@ -1,59 +0,0 @@ -

- This section describes some of the key features that make the - LeishVL a unique and valuable tool for the - Leishmaniasis research community. -

-
-
Data collections curated by experts
-

- Despite the detached data exist independently in other major databases, such as GenBank - and PubMed, there are many evidences that the records - of these databases can be polluted by errors arising from various sources, including erroneous classification of the species and other inaccurate - annotations. Therefore, one of the major contributions of the - LeishVL is to provide a database curated - by experts where the major part of those errors have been identified and eliminated. -

-
-
Connecting communities as the means to success
-

- Expert users are notified when new data become available in the - LeishVL, and they are provided with a list - of possible improvements as well as possible relationships that could exist with other data previously included in the - LeishVL. These revisions are approved by - consensus, relying on social network technologies to share and discuss the identified improvements. This strategy facilitates the participation - of community members in the process of data curation, with the objective of maximizing the number of reviews that is performed on an unreleased - dataset. -

-
-
Augmented metadata
-

- The data is annotated with additional metadata, computed from the existing fields in the source databases and cross-validated with additional - information found in other databases. The automatic inference of geospatial coordinates deserves special mention, because of its importance - for understanding the spread of Leishmaniasis. Currently, the number of DNA sequences annotated with geospatial coordinates on - GenBank is insufficient to allow this kind of analysis. The - LeishVL has geo-annotated thousands of - DNA sequences distributed worldwide combining the analysis of GenBank - and PubMed records. -

-
-
Maintains data provenance
-

- The new data is integrated in the LeishVL - with the original information about the origin of the data, how the data has been collected, stored and altered. Every data manipulation and - edit can be tracked, discovered and audited. -

-
-
Continuously updating
-

- The LeishVL delivers a set of specific tools - to monitor the source databases where the data is originally submitted, automatically detecting any new information that could be relevant for the - LeishVL, fetching the data from the source - database and performing a pre-process to identify possible errors and missing content. Our users can benefit immediately from these updates, - without needing to wait for a new release of the database. -

-
-
Open access & interoperability are first-class citizens
-

- Data format compatibility with major biological databases is maintained. The connectors, manuals and instructions for gathering and processing - the records from our collections are also provided as open-source, in order to facilitate interoperability with other system and databases. -

diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/tpls/about-main-section.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/tpls/about-main-section.html deleted file mode 100644 index 368d1c68..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/tpls/about-main-section.html +++ /dev/null @@ -1,6 +0,0 @@ -

- Conceived in the project EUBrazilCC, the - LeishVL aims at becoming an indispensable - tool to increase the current knowledge about leishmaniasis and promoting new ways of cooperation to stop the rapid spread of this disease. -

- \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/tpls/about-project-section.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/tpls/about-project-section.html deleted file mode 100644 index 4f89d40e..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/about/show/tpls/about-project-section.html +++ /dev/null @@ -1,35 +0,0 @@ -

- The main objective of the LeishVL is to - provide a database of quality data composed of DNA sequences, journal citations and other clinical and biological data related to Leishmaniasis, - as well as the parasite (Leishmania spp.) that causes the disease and the vector (phlebotomine sandflies) that spreads it. -

-

- The major part of this data is collected from public biological databases, such as GenBank - and PubMed. More specific but equally important collections, such as - CLIOC, COLFLEB and the - ISCIII-WHO-CCL collection, are also included in the system. -

-

- The LeishVL contributes to improve the - quality of these datasets and make them available for Leishmania and sandfly species identification and other tasks that are of paramount - importance for the prevention and control of Leishmaniasis. -

-

- The objectives of this project also include standardizing and maintaining the different collections integrated within this system, - as well as designing the curation processes and developing the quality verification and validation tools that assist researchers in their work. -

-

- Whithin the LeishVL, the data is seamless - integrated with the data processing tools in a single location. The following list provides an example of the tools and datasets provided: -

-
    -
  • Pre-processing and data curation pipelines;
  • -
  • Species consensus DNA sequences;
  • -
  • Molecular pipelines for the identification and classification of species;
  • -
  • Tools for automatic annotation of records.
  • -
-

- The LeishVL takes over from the Leishmaniasis - e-compendium of the WHO Leishmaniasis Control Programme to produce an updated e-compendium - of peer-reviewed literature on leishmaniasis epidemiology. -

\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/documentation_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/documentation_app.js deleted file mode 100644 index ba3bb9d8..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/documentation_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: documentation. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('DocumentationApp', function(DocumentationApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - DocumentationApp.startWithParent = false; - - DocumentationApp.onStart = function() { - console.log('starting DocumentationApp'); - }; - - DocumentationApp.onStop = function() { - console.log('stopping DocumentationApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('show:documentation', function(section) { - require([ 'apps/open/documentation/show/documentation_show_ctrl' ], function(ShowController) { - ShowController.showDocumentation(section); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/documentation_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/documentation_router.js deleted file mode 100644 index d9792bdf..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/documentation_router.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: documentation. - */ - -define([ 'app', 'routefilter' ], function(Lvl) { - Lvl.module('Routers.DocumentationApp', function(DocumentationAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var Router = Backbone.Router.extend({ - routes : { - 'documentation' : 'showDocumentation', - 'documentation/:section' : 'showDocumentation', - 'doc' : 'showDocumentation', - 'doc/:section' : 'showDocumentation' - }, - before : function() { - require([ 'apps/open/documentation/documentation_app' ], function() { - Lvl.execute('set:active:header', 'home'); - Lvl.execute('set:active:footer', 'home'); - Lvl.startSubApp('DocumentationApp'); - }); - }, - showDocumentation : function(section) { - section = (section || 'doc').toLowerCase(); - if (section === 'doc' || section === 'screencasts' || section === 'presentations' || section === 'publications') { - Lvl.execute('show:documentation', section); - } else if (section === 'documentation') { - Lvl.execute('show:documentation', 'doc'); - } else { - Lvl.navigate('not-found', { - trigger : true, - replace : true - }); - } - } - }); - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/documentation_show_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/documentation_show_ctrl.js deleted file mode 100644 index 8b5c7984..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/documentation_show_ctrl.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * RequireJS module that defines the controller: open->documentation->show. - */ - -define([ 'app', 'apps/open/layout/open_layout_ctrl', 'text!apps/open/documentation/show/tpls/documentation-main-section.html', - 'text!apps/open/documentation/show/tpls/documentation-screencasts-section.html', - 'text!apps/open/documentation/show/tpls/documentation-presentations-section.html', - 'text!apps/open/documentation/show/tpls/documentation-publications-section.html', 'apps/open/layout/entities/section' ], function(Lvl, - LayoutController, MainSectionHtml, ScreencastsSectionHtml, PresentationsSectionHtml, PublicationsSectionHtml, SectionEntity) { - Lvl.module('DocumentationApp.Show', function(Show, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Show.Controller = { - showDocumentation : function(section) { - var section = section || 'doc'; - LayoutController.showLayout({ - activeSection : section, - mainSection : new SectionEntity.Section({ - section : 'doc', - name : 'Documentation', - htmlContent : MainSectionHtml - }), - subSections : new SectionEntity.SectionCollection([ new SectionEntity.Section({ - id : 0, - section : 'screencasts', - name : 'Screencasts', - htmlContent : ScreencastsSectionHtml, - events : { - 'show.bs.modal #modalVideoViewer' : function(e) { - var caller = $(e.relatedTarget); - var data = caller.data('whatever'); - var modal = $('#modalVideoViewer'); - modal.find('.modal-title').text(data.title); - modal.find('.modal-body div iframe').attr('src', data.url); - } - } - }), new SectionEntity.Section({ - id : 1, - section : 'presentations', - name : 'Presentations', - htmlContent : PresentationsSectionHtml - }), new SectionEntity.Section({ - id : 2, - section : 'publications', - name : 'Publications', - htmlContent : PublicationsSectionHtml - }) ]) - }); - } - } - }); - return Lvl.DocumentationApp.Show.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-main-section.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-main-section.html deleted file mode 100644 index a3f9f656..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-main-section.html +++ /dev/null @@ -1,5 +0,0 @@ -

- The following documentation corresponds to the latest stable version - (0.1.0) - of the LeishVL, released on April 2015. -

\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-presentations-section.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-presentations-section.html deleted file mode 100644 index fabc4c3d..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-presentations-section.html +++ /dev/null @@ -1,18 +0,0 @@ -

- Cloud computing to assist Surveillance of - Neglected Tropical Diseases: The Leishmaniasis Virtual Laboratory in EUBrazilCC". Presented by - Ignacio Blanquer (UPV) and Israel Cruz (ISCIII) in - Cloudscape Brazil 2014, - Rio de Janeiro, Brazil. October 20, 2014. -

-

- Download slides -

-
-

- Molecular Surveillance of Leishmaniasis in Spain". - Presented by Israel Cruz (ISCIII) in LeiSHield Kick off Meeting, Paris, France. March, 23-25 2014. -

-

- Download slides -

\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-publications-section.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-publications-section.html deleted file mode 100644 index e17d79e9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-publications-section.html +++ /dev/null @@ -1,22 +0,0 @@ -

- Leishmaniasis Virtual Laboratory (Lvl) - A New - Tool For The Study Of American Sand Flies (Diptera, Psychodidade, Phlebotominae)". - Authored by Felipe Dutra Rêgo, Israel de Souza Pinto, Caroline Amaral Machado, Gabriel Eduardo Melim - Ferreira, Elisa Cupollilo, and Paloma Helena Fernandes Shimabukuro in - ISOPS VIII - VIII International Symposium on Phlebotomine - Sandflies, Puerto Iguazu, Argentina. September 24, 2014. -

-

- Download conference abstracts - -

-
-

- Virtual laboratory to fight Leishmaniasis". - Position paper authored by Israel Cruz (ISCIII), Gabriel Melim (FIOCRUZ) in - Cloudscape Brazil 2014, - Rio de Janeiro, Brazil. October 20, 2014. -

-

- Access full text -

\ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-screencasts-section.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-screencasts-section.html deleted file mode 100644 index 0eea3600..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/documentation/show/tpls/documentation-screencasts-section.html +++ /dev/null @@ -1,51 +0,0 @@ -
-
- - Early prototype usage demonstration - -
-
-
Overview and general usage
-

- This demonstration recorded for the 1st review of the project EUBrazilCC presents an overview of the - LeishVL portal. Although it was recorded - with the early prototype, the information is still current. -

-
-
-
-
-
- - Deploying a second instance - -
-
-
Deploying new instances
-

- A second instance of the LVL service is started from the - EGI AppDB and configured using the - IM. The new instance adds new processing capacities new to an existing - deployment of the LeishVL - . -

-
-
- \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/event.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/event.js deleted file mode 100644 index 61a3a6ea..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/event.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * RequireJS module that defines the entity: open->layout->event. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('Entities.OpenContent.Event', function(Entities, Lvl, Backbone, Marionette, $, _) { - Entities.Event = Backbone.Model.extend({ - urlRoot : '/js/data/events.json?burst=' + Math.random(), - defaults : { - event : 'Unknown', - link : '', - where : '', - when : '' - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.event) { - errors.event = 'can\'t be empty'; - } else { - if (attrs.event.length < 2) { - errors.event = 'is too short'; - } - } - if (!attrs.link) { - errors.link = 'can\'t be empty'; - } - if (!attrs.where) { - errors.where = 'can\'t be empty'; - } - if (!attrs.when) { - errors.when = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - - Entities.EventCollection = Backbone.Collection.extend({ - url : '/js/data/events.json?burst=' + Math.random(), - model : Entities.Event - }); - }); - return Lvl.Entities.OpenContent.Event; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/layout.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/layout.js deleted file mode 100644 index 95b1c9b6..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/layout.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * RequireJS module that defines the entity: open->layout->layout. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('Entities.OpenContent.Layout', function(Entities, Lvl, Backbone, Marionette, $, _) { - Entities.Layout = Backbone.Model.extend({ - defaults : { - name : 'Unknown', - application : 'unknown', - section : 'unknown', - agenda : '' - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.application) { - errors.application = 'can\'t be empty'; - } else { - if (attrs.application.length < 2) { - errors.application = 'is too short'; - } - } - if (!attrs.section) { - errors.section = 'can\'t be empty'; - } else { - if (attrs.section.length < 2) { - errors.section = 'is too short'; - } - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - }); - return Lvl.Entities.OpenContent.Layout; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/section.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/section.js deleted file mode 100644 index e587e1d8..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/section.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * RequireJS module that defines the entity: entity: open->layout->section. - */ - -define([ 'app', 'backbone.picky' ], function(Lvl) { - Lvl.module('Entities.OpenContent.Section', function(Entities, Lvl, Backbone, Marionette, $, _) { - Entities.Section = Backbone.Model.extend({ - defaults : { - section : 'unknown', - name : 'Unknown', - htmlContent : '' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.section) { - errors.section = 'can\'t be empty'; - } else { - if (attrs.section.length < 2) { - errors.section = 'is too short'; - } - } - if (!attrs.name) { - errors.name = 'can\'t be empty'; - } else { - if (attrs.name.length < 2) { - errors.name = 'is too short'; - } - } - if (!attrs.htmlContent) { - errors.htmlContent = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - - Entities.SectionCollection = Backbone.Collection.extend({ - model : Entities.Section, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - - }); - return Lvl.Entities.OpenContent.Section; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/toc.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/toc.js deleted file mode 100644 index b43badde..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/entities/toc.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * RequireJS module that defines the entity: entity: open->layout->Table of contents (ToC). - */ - -define([ 'app', 'backbone.picky' ], function(Lvl) { - Lvl.module('Entities.OpenContent.Toc', function(Entities, Lvl, Backbone, Marionette, $, _) { - Entities.Toc = Backbone.Model.extend({ - defaults : { - application : 'unknown', - section : 'unknown', - text : 'Unknown' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.application) { - errors.application = 'can\'t be empty'; - } else { - if (attrs.application.length < 2) { - errors.application = 'is too short'; - } - } - if (!attrs.section) { - errors.section = 'can\'t be empty'; - } else { - if (attrs.section.length < 2) { - errors.section = 'is too short'; - } - } - if (!attrs.text) { - errors.text = 'can\'t be empty'; - } else { - if (attrs.text.length < 2) { - errors.text = 'is too short'; - } - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - - Entities.TocCollection = Backbone.Collection.extend({ - model : Entities.Toc, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - - }); - return Lvl.Entities.OpenContent.Toc; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/open_layout_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/open_layout_ctrl.js deleted file mode 100644 index a28e3234..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/open_layout_ctrl.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * RequireJS module that defines the controller: open->layout. - */ - -define([ 'app', 'apps/open/layout/open_layout_view', 'apps/open/layout/entities/layout', 'apps/open/layout/entities/event' ], function(Lvl, View, LayoutEntity, - EventEntity) { - Lvl.module('OpenContent.Layout', function(Show, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Show.Controller = { - showLayout : function(options) { - options = options || {}; - options.agenda = new EventEntity.EventCollection(); - var view = new View.Layout({ - model : new LayoutEntity.Layout(options) - }); - Lvl.mainRegion.show(view); - } - } - }); - return Lvl.OpenContent.Layout.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/open_layout_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/open_layout_view.js deleted file mode 100644 index ff04991d..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/open_layout_view.js +++ /dev/null @@ -1,165 +0,0 @@ -/** - * RequireJS module that defines the view: open->layout. - */ - -define([ 'app', 'tpl!apps/open/layout/tpls/open-layout', 'tpl!apps/open/layout/tpls/subsection', 'tpl!apps/open/layout/tpls/nav-list', - 'tpl!apps/open/layout/tpls/nav-list-item', 'tpl!apps/open/layout/tpls/event-list', 'tpl!apps/open/layout/tpls/event-list-item', - 'apps/open/layout/entities/toc', 'apps/config/marionette/styles/style' ], function(Lvl, LayoutTpl, SubsectionTpl, NavListTpl, NavItemTpl, EventListTpl, - EventItemTpl, TocEntity, Style) { - Lvl.module('OpenContent.Layout.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - View.NavItem = Marionette.ItemView.extend({ - tagName : 'li', - template : NavItemTpl, - onRender : function() { - if (this.model.selected) { - this.$el.addClass('active'); - } - } - }); - View.NavList = Marionette.CompositeView.extend({ - tagName : 'ul', - template : NavListTpl, - childView : View.NavItem - }); - View.EventItem = Marionette.ItemView.extend({ - tagName : 'li', - template : EventItemTpl - }); - View.EventList = Marionette.CompositeView.extend({ - template : EventListTpl, - childView : View.EventItem, - childViewContainer : 'ul', - onRender : function() { - this.collection.fetch({ - reset : true - }); - }, - }); - View.SubSection = Marionette.ItemView.extend({ - template : SubsectionTpl, - templateHelpers : function() { - return { - application : this.model.get('subsection-application'), - section : this.model.get('subsection-section'), - name : this.model.get('subsection-name'), - content : this.model.get('subsection-content') - } - } - }); - View.Layout = Marionette.LayoutView.extend({ - template : LayoutTpl, - templateHelpers : function() { - return { - name : this.model.get('mainSection').get('name'), - application : this.model.get('mainSection').get('section') - } - }, - regions : { - tocNavigationBar : '#lvl-toc-nav', - mainSectionContent : '#lvl-main-section-content', - eventList : '#lvl-events-list' - }, - initialize : function(options) { - this.activeSection = options.activeSection; - this.mainSection = options.mainSection; - this.subSections = options.subSections; - this.agenda = options.agenda; - $(window).on('resize', this.setupAffix); - }, - onDestroy : function() { - this.stopListening(); - $(window).off('resize', this.setupAffix); - }, - setupAffix : function() { - var _self = this; - require([ 'domReady' ], function(domReady) { - domReady(function() { - $('div#lvl-toc-nav').affix({ - offset : { - top : $('div#lvl-toc-nav').offset().top, - bottom : $('div#footer-region').outerHeight(true) - } - }); - }); - }); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:pace:entities').toJSON()); - }); - }, - onBeforeShow : function() { - // start the table of content (ToC) - var toc = new TocEntity.TocCollection([ { - id : 0, - application : this.model.get('mainSection').get('section'), - section : this.model.get('mainSection').get('section'), - text : this.model.get('mainSection').get('name') - } ]); - // create main section - var MainSectionView = Marionette.ItemView.extend({ - template : _.template(this.model.get('mainSection').get('htmlContent')) - }); - this.showChildView('mainSectionContent', new MainSectionView()); - // create sub-sections and add then to the ToC - for (var i = 0; i < this.model.get('subSections').length; i++) { - this.addRegion('lvl-subsection_' + i, "#lvl-subsection_" + i); - var subsectionView = new View.SubSection({ - model : new Backbone.Model({ - 'subsection-application' : this.model.get('mainSection').get('section'), - 'subsection-name' : this.model.get('subSections').at(i).get('name'), - 'subsection-section' : this.model.get('subSections').at(i).get('section'), - 'subsection-content' : this.model.get('subSections').at(i).get('htmlContent') - + (i < this.model.get('subSections').length - 1 ? '
' : '') - }) - }); - if (this.model.get('subSections').at(i).get('events')) { - subsectionView.delegateEvents(this.model.get('subSections').at(i).get('events')); - } - this.getRegion('lvl-subsection_' + i).show(subsectionView); - toc.add([ { - id : i + 1, - application : this.model.get('mainSection').get('section'), - section : this.model.get('subSections').at(i).get('section'), - text : this.model.get('subSections').at(i).get('name') - } ]); - } - // find which is the active section - var activeSection = this.model.get('activeSection') || this.model.get('mainSection').get('section'); - var tocItemToSelect = toc.find(function(tocItem) { - return tocItem.get('section') === activeSection; - }); - tocItemToSelect.select(); - toc.trigger('reset'); - this.showChildView('tocNavigationBar', new View.NavList({ - collection : toc - })); - // events list (agenda) - this.showChildView('eventList', new View.EventList({ - collection : this.model.get('agenda') - })); - }, - onShow : function() { - var _self = this, application = _self.model.get('mainSection').get('section'), activeSection = (_self.model.get('activeSection') || _self.model - .get('mainSection').get('section')); - $('div#lvl-toc-nav > ul > li').each(function() { - if ($(this).find('a').attr('href') === '/#' + application + '/' + activeSection) { - $(this).addClass('active'); - } else { - $(this).removeClass('active'); - } - }); - var emSize = parseFloat($('section#' + activeSection).css('font-size')); - $('html, body').animate({ - scrollTop : $('section#' + activeSection).offset().top - (_self.$el.offset().top + 6.5 * emSize) - }, 700); - }, - onDomRefresh : function() { - this.setupAffix(); - } - }); - }); - return Lvl.OpenContent.Layout.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/event-list-item.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/event-list-item.html deleted file mode 100644 index 9baff8b3..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/event-list-item.html +++ /dev/null @@ -1 +0,0 @@ -<%= event %>, <%= where %>, <%= when %>. \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/event-list.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/event-list.html deleted file mode 100644 index e7d1c141..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/event-list.html +++ /dev/null @@ -1,2 +0,0 @@ -
Meet us at
-
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/nav-list-item.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/nav-list-item.html deleted file mode 100644 index 9b430b7c..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/nav-list-item.html +++ /dev/null @@ -1 +0,0 @@ -<%= text %> \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/nav-list.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/nav-list.html deleted file mode 100644 index e69de29b..00000000 diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/open-layout.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/open-layout.html deleted file mode 100644 index 8b6c2de5..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/open-layout.html +++ /dev/null @@ -1,52 +0,0 @@ -
    - -
    -
    - -
    -
    -
    -
    -

    <%= name %>

    - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/subsection.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/subsection.html deleted file mode 100644 index 7f9f9b87..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/layout/tpls/subsection.html +++ /dev/null @@ -1,5 +0,0 @@ -
    -

    <%= name %>

    - - <%= content %> -
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/software_show_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/software_show_ctrl.js deleted file mode 100644 index 489326c4..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/software_show_ctrl.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * RequireJS module that defines the controller: open->software->show. - */ - -define([ 'app', 'apps/open/layout/open_layout_ctrl', 'text!apps/open/software/show/tpls/software-main-section.html', - 'text!apps/open/software/show/tpls/software-releases-section.html', 'text!apps/open/software/show/tpls/software-downloads-section.html', - 'text!apps/open/software/show/tpls/software-development-section.html', 'apps/open/layout/entities/section' ], function(Lvl, LayoutController, - MainSectionHtml, ReleasesSectionHtml, DownloadsSectionHtml, DevelopmentSectionHtml, SectionEntity) { - Lvl.module('SoftwareApp.Show', function(Show, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Show.Controller = { - showSoftware : function(section) { - var section = section || 'software'; - LayoutController.showLayout({ - activeSection : section, - mainSection : new SectionEntity.Section({ - section : 'software', - name : 'Software', - htmlContent : MainSectionHtml - }), - subSections : new SectionEntity.SectionCollection([ new SectionEntity.Section({ - id : 0, - section : 'releases', - name : 'Releases', - htmlContent : ReleasesSectionHtml - }), new SectionEntity.Section({ - id : 1, - section : 'downloads', - name : 'Downloads', - htmlContent : DownloadsSectionHtml - }), new SectionEntity.Section({ - id : 2, - section : 'development', - name : 'Development', - htmlContent : DevelopmentSectionHtml - }) ]) - }); - } - } - }); - return Lvl.SoftwareApp.Show.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-development-section.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-development-section.html deleted file mode 100644 index 8e0c1b15..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-development-section.html +++ /dev/null @@ -1,7 +0,0 @@ -

    - The most current version of the source code is publicly available in the GitHub - repository of the project. The API Documentation is available online. -

    -

    - Access development project -

    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-downloads-section.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-downloads-section.html deleted file mode 100644 index e1935af5..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-downloads-section.html +++ /dev/null @@ -1,56 +0,0 @@ -

    - There are several ways to download and install the LeishVL. -

    -

    - The preferred way to install the LeishVL - is using the virtual appliances stored in the EGI Applications database (EGI AppDB). - These appliances are pre-configured and tested virtual machine (VM) images, ready to run both in the EUBrazilCC infrastructure and in EGI. - Installation options are provided in the Administration & Development Guide. -

    -

    - Get virtual appliances -

    -
    -

    - The LeishVL is built and assembled - using Apache Maven. Stable releases are deployed to a Maven repository based on - Bintray. These releases are very modular, consisting of several JAR and WAR files. - You can declare a dependency on a LeishVL - module or build the complete distribution using Maven. -

    -

    - Access Maven repository -

    -
    -

    - The source code of source code of the latest stable release of the - LeishVL is available for download - in the GitHub repository of the project. Instructions to install the LeishVL - from the source are available in the Administration & Development Guide. -

    -

    - Download source code -

    -
    -
    -
    Software licenses
    -

    - The LeishVL source code, - binary distribution and virtual machine images are provided under the terms of the EUPL license. The text of the - EUPL license is available in PDF - file format in the 22 official languages of the EU. -

    -

    - A readable version - of the license extracted from the original English version and formatted to align within 80 columns is provided with the - LeishVL distribution. -

    -

    - The EUPL license is compatible - with most commonly used open-source licenses, such as Apache, - MIT and LGPL, - always depending on the use of the licensed software. A copyright notice - is distributed with each version or release, to specify the use of external software in the - LeishVL. -

    -
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-main-section.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-main-section.html deleted file mode 100644 index e42741bb..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-main-section.html +++ /dev/null @@ -1,5 +0,0 @@ -

    - The project EUBrazilCC provides the basis for the development of the first - version of the LeishVL. The responsibility - for developing and leading future versions will be rotated among the team members after the end of the project in January 2016. -

    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-releases-section.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-releases-section.html deleted file mode 100644 index 23229e82..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/show/tpls/software-releases-section.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    VersionDateType Information
    1.0.01(Planned in June, 2015)Planned upgradeRelease notes
    0.2.02(Planned in May, 2015)Planned upgradeRelease notes
    0.1.0Apr 28th, 2015UpgradeRelease notes
    0.0.1Mar 17th, 2015First releaseRelease notes
    -

    (1) Version 1.0.0 will be the first complete release, expected after the 100% of the functional requirements - are fulfilled.

    -

    (2) Version 0.2.0 will be the first release openly available for public access.

    -
    -
    -
    Software versioning
    -

    - The LeishVL implements a - release model where new versions with incremental version number are frequently released. New versions are named following the - standard GNU version numbering scheme (major.minor.revision): -

    -
      -
    1. major version than makes incompatible API changes,
    2. -
    3. minor version that adds functionality in a backwards-compatible manner, and
    4. -
    5. revision version that makes backwards-compatible bug fixes.
    6. -
    -
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/software_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/software_app.js deleted file mode 100644 index 3af4ae4a..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/software_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: open->software. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('SoftwareApp', function(SoftwareApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - SoftwareApp.startWithParent = false; - - SoftwareApp.onStart = function() { - console.log('starting SoftwareApp'); - }; - - SoftwareApp.onStop = function() { - console.log('stopping SoftwareApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('show:software', function(section) { - require([ 'apps/open/software/show/software_show_ctrl' ], function(ShowController) { - ShowController.showSoftware(section); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/software_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/software_router.js deleted file mode 100644 index 6ac41568..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/software/software_router.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: open->software. - */ - -define([ 'app', 'routefilter' ], function(Lvl) { - Lvl.module('Routers.SoftwareApp', function(SoftwareAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var Router = Backbone.Router.extend({ - routes : { - 'software' : 'showSoftware', - 'software/:section' : 'showSoftware' - }, - before : function() { - require([ 'apps/open/software/software_app' ], function() { - Lvl.execute('set:active:header', 'home'); - Lvl.execute('set:active:footer', 'home'); - Lvl.startSubApp('SoftwareApp'); - }); - }, - showSoftware : function(section) { - section = (section || 'software').toLowerCase(); - if (section === 'software' || section === 'releases' || section === 'downloads' || section === 'development') { - Lvl.execute('show:software', section); - } else { - Lvl.navigate('not-found', { - trigger : true, - replace : true - }); - } - } - }); - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/support_show_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/support_show_ctrl.js deleted file mode 100644 index 5eca9d20..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/support_show_ctrl.js +++ /dev/null @@ -1,207 +0,0 @@ -/** - * RequireJS module that defines the controller: open->support->show. - */ - -define([ 'app', 'apps/open/layout/open_layout_ctrl', 'text!apps/open/support/show/tpls/support-main-section.html', - 'text!apps/open/support/show/tpls/support-mailing-list-section.html', 'text!apps/open/support/show/tpls/support-report-an-issue.html', - 'apps/open/layout/entities/section', 'apps/config/marionette/configuration', 'pace', 'bootstrapvalidator', 'backbone.syphon' ], function(Lvl, - LayoutController, MainSectionHtml, MailingListSectionHtml, ReportAnIssueSectionHtml, SectionEntity, Configuration, pace) { - Lvl.module('SupportApp.Show', function(Show, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var lvlService = new Configuration().get('service', ''); - Show.Controller = { - showSupport : function(section) { - var section = section || 'support'; - LayoutController.showLayout({ - activeSection : section, - mainSection : new SectionEntity.Section({ - section : 'support', - name : 'Support', - htmlContent : MainSectionHtml - }), - subSections : new SectionEntity.SectionCollection([ - new SectionEntity.Section({ - id : 0, - section : 'mailing-list', - name : 'Mailing list', - htmlContent : MailingListSectionHtml, - events : { - 'focus #lvlSubscribeForm input.form-control' : function(e) { - var form = $('#lvlSubscribeForm'); - if (Boolean(form.attr('data-pristine') === 'true')) { - form.attr('data-pristine', 'false'); - form.on('init.form.bv', function(e, data) { - data.bv.disableSubmitButtons(true); - }).bootstrapValidator({ - submitButtons : 'button[type="submit"]', - fields : { - 'email' : { - verbose : false, - validators : { - notEmpty : { - message : 'The email is required and cannot be empty' - }, - emailAddress : { - message : 'The input is not a valid email address' - } - } - } - } - }).on('success.field.bv', function(e, data) { - var isValid = data.bv.isValid(); - data.bv.disableSubmitButtons(!isValid); - }); - } - }, - 'click #lvlSubscribeBtn' : function(e) { - e.preventDefault(); - pace.restart(); - $('#lvlSubscribeForm button[type="submit"]').attr('disabled', 'disabled'); - var formData = Backbone.Syphon.serialize(this); - var requestData = { - 'email' : formData.email, - 'channels' : [ 'mailing list' ] - }; - // submit request to LVL server - var self = this; - var jqxhr = $.ajax({ - type : 'POST', - contentType : 'application/json', - crossDomain : true, - url : lvlService + '/support/subscriptions/requests', - data : JSON.stringify(requestData) - }).always(function() { - pace.stop(); - var form = $('#lvlSubscribeForm'); - form.bootstrapValidator('resetForm', true); - form.bootstrapValidator('disableSubmitButtons', true); - }).done( - function(data, textStatus, request) { - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Subscription successful', 'You should receive a confirmation e-mail ' - + 'at the address that you provided.', false); - }); - }).fail(function(jqXHR, textStatus, errorThrown) { - if (jqXHR.status !== 404) { - require([ 'common/alert' ], function(alertDialog) { - alertDialog('Error', 'The subscription request cannot be sent.'); - }); - } - }); - } - } - }), - new SectionEntity.Section({ - id : 1, - section : 'report-an-issue', - name : 'Report an issue', - htmlContent : ReportAnIssueSectionHtml, - events : { - 'focus #lvlIssueReportForm input.form-control' : function(e) { - var form = $('#lvlIssueReportForm'); - if (Boolean(form.attr('data-pristine') === 'true')) { - form.attr('data-pristine', 'false'); - form.on('init.form.bv', function(e, data) { - data.bv.disableSubmitButtons(true); - }).bootstrapValidator({ - submitButtons : 'button[type="submit"]', - fields : { - 'email' : { - verbose : false, - validators : { - notEmpty : { - message : 'The email is required and cannot be empty' - }, - emailAddress : { - message : 'The input is not a valid email address' - } - } - }, - 'browser' : { - verbose : false, - validators : { - notEmpty : { - message : 'The browser is required and cannot be empty' - } - } - }, - 'system' : { - verbose : false, - validators : { - notEmpty : { - message : 'The system is required and cannot be empty' - } - } - }, - 'description' : { - verbose : false, - validators : { - notEmpty : { - message : 'The description is required and cannot be empty' - } - } - } - } - }).on('success.field.bv', function(e, data) { - var isValid = data.bv.isValid(); - data.bv.disableSubmitButtons(!isValid); - }); - } - }, - 'click #lvlReportIssueBtn' : function(e) { - e.preventDefault(); - pace.restart(); - $('#lvlIssueReportForm button[type="submit"]').attr('disabled', 'disabled'); - var formData = Backbone.Syphon.serialize(this); - var request = new FormData(); - var issueBlob = new Blob([ JSON.stringify({ - 'email' : formData.email, - 'browser' : formData.browser, - 'system' : formData.system, - 'configuration' : formData.config, - 'steps' : formData.steps, - 'description' : formData.description - }) ], { - type : 'application/json' - }); - request.append('issue', issueBlob); - var inputScreenshot = $('#screenshot'); - if (inputScreenshot.val()) { - request.append('file', inputScreenshot.get(0).files[0]); - } - // submit request to LVL server - var self = this; - var jqxhr = $.ajax({ - type : 'POST', - processData : false, - contentType : false, - crossDomain : true, - url : lvlService + '/support/issues/with-attachment', - data : request - }).always(function() { - pace.stop(); - var form = $('#lvlIssueReportForm'); - form.bootstrapValidator('resetForm', true); - form.bootstrapValidator('disableSubmitButtons', true); - }).done( - function(data, textStatus, request) { - require([ 'common/growl' ], function(createGrowl) { - createGrowl('New issue report created', 'Our team will investigate your report and will send you a ' - + 'follow-up e-mail at the address that you provided.', false); - }); - }).fail(function(jqXHR, textStatus, errorThrown) { - if (jqXHR.status !== 404) { - require([ 'common/alert' ], function(alertDialog) { - alertDialog('Error', 'The issue report cannot be sent.'); - }); - } - }); - } - } - }) ]) - }); - } - } - }); - return Lvl.SupportApp.Show.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/tpls/support-mailing-list-section.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/tpls/support-mailing-list-section.html deleted file mode 100644 index 0c766726..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/tpls/support-mailing-list-section.html +++ /dev/null @@ -1,28 +0,0 @@ -

    - You can find help in the LeishVL - users list. You need to subscribe before you can post a message to the list. Once you receive the notification email, ask about the - problem in the list. Please, be specific and include as much information as possible about your problem and your system configuration. - Always consider updating your system to the most current version before reporting an issue. We also recommend that you use the latest - stable release of the LeishVL - to receive optimal support from the development team in the shortest time possible. -

    -
    -
    Subscribing to the users list
    -
    -
    -
    - Subscription form -
    - -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/tpls/support-main-section.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/tpls/support-main-section.html deleted file mode 100644 index 1b4e5e64..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/tpls/support-main-section.html +++ /dev/null @@ -1,6 +0,0 @@ -

    - The LeishVL is an open-source project - supported by a growing community of users and developers. The documentation is the definitive source for information about - the LeishVL, however it is not the only - way to obtain support. -

    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/tpls/support-report-an-issue.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/tpls/support-report-an-issue.html deleted file mode 100644 index 98eae9c3..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/show/tpls/support-report-an-issue.html +++ /dev/null @@ -1,67 +0,0 @@ -

    - If you find something that is not working as expected on the - LeishVL, please report your issue using the following - form: -

    -
    -
    -
    - Issue report form -
    - -
    - - We will send you a response after your report is investigated. -
    -
    -
    - -
    - - For example: Firefox 37.0.1 -
    -
    -
    - -
    - - For example: Windows 7 -
    -
    -
    - -
    - - Any configuration details that might be relevant (unusual browser configuration, extensions used if any). -
    -
    -
    - -
    - - Steps that need to be followed to see the error. -
    -
    -
    - -
    - - Description of what happens and what you think is wrong. -
    -
    -
    - -
    - - Adding an screenshot will help us find the problem. -
    -
    -
    -
    - -
    -
    - -
    -
    -
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/support_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/support_app.js deleted file mode 100644 index 222a59b7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/support_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: open->support. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('SupportApp', function(SupportApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - SupportApp.startWithParent = false; - - SupportApp.onStart = function() { - console.log('starting SupportApp'); - }; - - SupportApp.onStop = function() { - console.log('stopping SupportApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('show:support', function(section) { - require([ 'apps/open/support/show/support_show_ctrl' ], function(ShowController) { - ShowController.showSupport(section); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/support_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/support_router.js deleted file mode 100644 index decb1457..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/open/support/support_router.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: open->support. - */ - -define([ 'app', 'routefilter' ], function(Lvl) { - Lvl.module('Routers.SupportApp', function(SupportAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var Router = Backbone.Router.extend({ - routes : { - 'support' : 'showSupport', - 'support/:section' : 'showSupport' - }, - before : function() { - require([ 'apps/open/support/support_app' ], function() { - Lvl.execute('set:active:header', 'home'); - Lvl.execute('set:active:footer', 'home'); - Lvl.startSubApp('SupportApp'); - }); - }, - showSupport : function(section) { - section = (section || 'support').toLowerCase(); - if (section === 'support' || section === 'mailing-list' || section === 'report-an-issue') { - Lvl.execute('show:support', section); - } else { - Lvl.navigate('not-found', { - trigger : true, - replace : true - }); - } - } - }); - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/entities/tablinks.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/entities/tablinks.js deleted file mode 100644 index 618891b9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/entities/tablinks.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * RequireJS module that defines the entity: saved-items->tab-link. - */ - -define([ 'app', 'backbone.picky' ], function(Lvl) { - Lvl.module('SavedItemsApp.Entities', function(Entities, Lvl, Backbone, Marionette, $, _) { - Entities.Navigation = Backbone.Model.extend({ - defaults : { - link : '', - icon : 'fa-chain-broken', - text : 'Unknown' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.link) { - errors.link = 'can\'t be empty'; - } - if (!attrs.icon) { - errors.icon = 'can\'t be empty'; - } - if (!attrs.text) { - errors.text = 'can\'t be empty'; - } else { - if (attrs.text.length < 2) { - errors.text = 'is too short'; - } - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - - Entities.NavigationSavedItems = Backbone.Collection.extend({ - model : Entities.Navigation, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - - var iniNavigationLinks = function() { - Entities.navigationLinks = new Entities.NavigationSavedItems([ { - id : 1, - link : 'searches', - icon : 'fa-search', - text : 'Searches' - } ]); - }; - - var API = { - getNavigationEntities : function() { - if (Entities.navigationLinks === undefined) { - iniNavigationLinks(); - } - return Entities.navigationLinks; - } - } - - Lvl.reqres.setHandler('saved-items:navigation:entities', function() { - return API.getNavigationEntities(); - }); - }); - return; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/saved-items_layout_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/saved-items_layout_ctrl.js deleted file mode 100644 index 66263167..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/saved-items_layout_ctrl.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * RequireJS module that defines the controller: saved-items->layout. - */ - -define([ 'app', 'apps/saved-items/layout/saved-items_layout_view' ], function(Lvl, View) { - Lvl.module('SavedItemsApp.Layout', function(Layout, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Layout.Controller = { - showLayout : function(section) { - require([ 'apps/saved-items/' + section + '/saved-items_' + section + '_ctrl', 'apps/saved-items/layout/entities/tablinks' ], - function(SectionController) { - var tabLinks = Lvl.request('saved-items:navigation:entities'); - var tabLinkToSelect = tabLinks.find(function(tabLink) { - return tabLink.get('link') === section; - }); - tabLinkToSelect.select(); - tabLinks.trigger('reset'); - var view = new View.Layout({ - navigation : tabLinks - }); - Lvl.mainRegion.show(view); - return SectionController.showSection(); - }); - } - } - }); - return Lvl.SavedItemsApp.Layout.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/saved-items_layout_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/saved-items_layout_view.js deleted file mode 100644 index 01bcd17f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/saved-items_layout_view.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * RequireJS module that defines the view: saved-items->layout. - */ - -define([ 'app', 'apps/config/marionette/regions/fadein', 'tpl!apps/saved-items/layout/tpls/saved-items-layout', 'tpl!apps/saved-items/layout/tpls/tab-list', - 'tpl!apps/saved-items/layout/tpls/tab-link' ], function(Lvl, FadeInRegion, LayoutTpl, TabListTpl, TabLinkTpl) { - Lvl.module('SavedItemsApp.Layout.View', function(View, Lvl, Backbone, Marionette, $, _) { - View.TabLink = Marionette.ItemView.extend({ - tagName : 'li', - template : TabLinkTpl, - onRender : function() { - if (this.model.selected) { - this.$el.addClass('active'); - } - } - }); - View.TabList = Marionette.CompositeView.extend({ - template : TabListTpl, - childView : View.TabLink, - childViewContainer : 'ul' - }); - View.Layout = Marionette.LayoutView.extend({ - template : LayoutTpl, - regions : { - tabList : '#section-tab-list', - tabContent : FadeInRegion.extend({ - el : '#section-tab-content' - }) - }, - initialize : function(options) { - this.navLinks = options.navigation; - // subscribe to events - $(document).on('keyup', this.handleEscKeyUpEvent); - }, - onDestroy : function() { - // unsubscribe from events - $(document).off('keyup', this.handleEscKeyUpEvent); - }, - onBeforeShow : function() { - this.showChildView('tabList', new View.TabList({ - collection : this.navLinks - })); - }, - events : { - 'click button#lvl-toggle-toolbar-btn' : 'toggleToolbar', - 'click a#lvl-collapse-toolbar-btn' : 'closeToolbar' - }, - toggleToolbar : function(e) { - e.preventDefault(); - var toolbar = $('#lvl-floating-menu'); - if (toolbar.is(':visible')) { - toolbar.hide('fast'); - } else { - toolbar.show('fast'); - } - }, - closeToolbar : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - }, - handleEscKeyUpEvent : function(e) { - var toolbar = $('#lvl-floating-menu'); - if (e.which == 27 && toolbar.is(':visible')) { - toolbar.hide('fast'); - } - } - }); - }); - return Lvl.SavedItemsApp.Layout.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/tpls/saved-items-layout.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/tpls/saved-items-layout.html deleted file mode 100644 index 0fd96668..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/tpls/saved-items-layout.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - -
    - - -
    -
    -
    -
    -
    - -
    -
    - -

     

     

     

     

    -

     

     

     

     

    -
    -
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/tpls/tab-link.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/tpls/tab-link.html deleted file mode 100644 index b3948654..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/tpls/tab-link.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/tpls/tab-list.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/tpls/tab-list.html deleted file mode 100644 index fecedd0c..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/layout/tpls/tab-list.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/saved-items_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/saved-items_app.js deleted file mode 100644 index 76b319ae..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/saved-items_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: saved-items. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('SavedItemsApp', function(SavedItemsApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - SavedItemsApp.startWithParent = false; - - SavedItemsApp.onStart = function() { - console.log('starting SavedItemsApp'); - }; - - SavedItemsApp.onStop = function() { - console.log('stopping SavedItemsApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('saved-items:set:active', function(section) { - require([ 'apps/saved-items/layout/saved-items_layout_ctrl' ], function(LayoutController) { - SavedItemsApp.currentSection = LayoutController.showLayout(section); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/saved-items_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/saved-items_router.js deleted file mode 100644 index d3d169b3..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/saved-items_router.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: saved-items. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'routefilter' ], function(Lvl, Configuration) { - Lvl.module('Routers.SavedItemsApp', function(SavedItemsAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var Router = Backbone.Router.extend({ - routes : { - 'saved-items' : 'showSavedItems', - 'saved-items/:section' : 'showSavedItems' - }, - before : function() { - if (!config.isAuthenticated()) { - Lvl.navigate('login/' + encodeURIComponent(Backbone.history.fragment) + '/unauthenticated', { - trigger : true, - replace : true - }); - return false; - } - require([ 'apps/saved-items/saved-items_app' ], function() { - Lvl.execute('set:active:header', 'workspace', 'saved-items'); - Lvl.execute('set:active:footer', 'workspace'); - Lvl.startSubApp('SavedItemsApp'); - }); - return true; - }, - showSavedItems : function(section) { - section = (section || 'searches').toLowerCase(); - if (section === 'searches') { - Lvl.navigate('saved-items/' + section, { - trigger : false, - replace : true - }); - Lvl.execute('saved-items:set:active', section); - } else { - Lvl.navigate('not-found', { - trigger : true, - replace : true - }); - } - } - }); - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/saved-items_searches_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/saved-items_searches_ctrl.js deleted file mode 100644 index fb725526..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/saved-items_searches_ctrl.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * RequireJS module that defines the controller: saved-items->searches. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'entities/saved_search', 'apps/saved-items/searches/saved-items_searches_view' ], function(Lvl, - Configuration, SearchEntity, View) { - Lvl.module('SavedItemsApp.Searches', function(Searches, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Searches.Controller = { - showSection : function() { - var view = new View.Content({ - collection : new SearchEntity.SavedSearchPageableCollection({ - oauth2_token : config.authorizationToken() - }) - }); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.SavedItemsApp.Searches.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/saved-items_searches_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/saved-items_searches_view.js deleted file mode 100644 index 7053cc1c..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/saved-items_searches_view.js +++ /dev/null @@ -1,362 +0,0 @@ -/** - * RequireJS module that defines the view: saved-items->searches. - */ - -define([ 'app', 'tpl!apps/saved-items/searches/tpls/saved-items_searches', 'tpl!apps/saved-items/searches/tpls/toolbar_browse', - 'tpl!common/search/tpls/search_term', 'tpl!common/search/tpls/add_search_term', 'tpl!common/search/tpls/save_search', - 'apps/config/marionette/styles/style', 'apps/config/marionette/configuration', 'entities/saved_search', 'pace', 'moment', 'backbone.oauth2', - 'backgrid', 'backgrid-paginator', 'backgrid-select-all', 'backgrid-filter' ], function(Lvl, SearchesTpl, ToolbarTpl, SearchTermTpl, AddSearchTermTpl, - SaveSearchTpl, Style, Configuration, SearchEntity, pace, moment) { - Lvl.module('SavedItems.Searches.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var columns = [ - { - name : 'type', - label : 'Target', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - if (rawValue !== undefined) { - this.$el.append(rawValue.replace(/;/g, ' ')); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'saved', - label : 'Saved', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'number') { - this.$el.append(' ' + moment(formattedValue).format('MMM DD[,] YYYY [at] HH[:]mm')); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'search', - label : 'Search', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - if (rawValue !== undefined) { - var names = ''; - for (var i = 0; i < rawValue.length; i++) { - var color = Boolean(rawValue[i]['valid']) ? 'label-success' : 'label-warning'; - names += '' + rawValue[i]['term'] + ' '; - } - this.$el.append(names.trim()); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'description', - label : 'Description', - editable : false, - cell : 'string' - }, - { - name : 'id', - label : '', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append(''); - } - this.delegateEvents(); - return this; - } - }) - }, - { - name : 'id', - label : '', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'string') { - this.$el.append(''); - } - this.delegateEvents(); - return this; - } - }) - } ]; - View.Content = Marionette.ItemView.extend({ - id : 'searches', - template : SearchesTpl, - initialize : function() { - this.listenTo(this.collection, 'request', this.displaySpinner); - this.listenTo(this.collection, 'sync error', this.removeSpinner); - this.grid = new Backgrid.Grid({ - columns : [ { - name : '', - cell : 'select-row', - headerCell : 'select-all' - } ].concat(columns), - collection : this.collection, - emptyText : 'No searches found' - }); - // setup search - Lvl.vent.on('search:form:submitted', this.searchSavedSearches); - // setup menu - $('#lvl-floating-menu-toggle').show(0); - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu').empty(); - $('#lvl-floating-menu').append(ToolbarTpl({})); - $('a#uncheck-btn').on('click', { - grid : this.grid - }, this.deselectAll); - $('button#lvl-feature-tour-btn').on('click', this.startTour); - }, - displaySpinner : function() { - pace.restart(); - $('#grid-container').fadeTo('fast', 0.4); - }, - removeSpinner : function() { - pace.stop(); - var self = this; - $('#grid-container').fadeTo('fast', 1); - $('html,body').animate({ - scrollTop : 0 - }, '500', 'swing', function() { - // reset search terms - var searchCont = $('#lvl-search-terms-container'); - searchCont.empty(); - // setup search terms from server response - if (self.collection.formattedQuery && self.collection.formattedQuery.length > 0) { - var i = 1; - _.each(self.collection.formattedQuery, function(item) { - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_' + (i++), - sterm_text : item['term'], - sterm_icon : Boolean(item['valid']) ? 'label-success' : 'label-warning', - sterm_title : 'Remove' - })); - }); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_-1', - sterm_text : 'clear all', - sterm_icon : 'label-danger', - sterm_title : 'Remove All' - })); - searchCont.append(AddSearchTermTpl({})); - searchCont.append(SaveSearchTpl({})); - $('#lvl-search-terms').show('fast'); - } else { - $('#lvl-search-terms').hide('fast'); - } - }); - }, - events : { - 'click a[data-search-term]' : 'resetSearchTerms', - 'submit form#lvl-add-search-term-form' : 'addSearchTerm', - 'click div.lvl-savable' : 'handleClickSavable', - 'dragstart div.lvl-savable' : 'handleDragStart', - 'dragend div.lvl-savable' : 'handleDragEnd', - 'click a[data-run-search]' : 'runSearch', - 'click a[data-remove-search]' : 'removeSearch' - }, - deselectAll : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - e.data.grid.clearSelectedModels(); - }, - searchSavedSearches : function(search) { - var backgridFilter = $('form.backgrid-filter:first'); - backgridFilter.find('input:first').val(search); - // TODO backgridFilter.submit(); - // TODO - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Operation unavailable', 'Search feature is coming soon. Stay tuned!', false); - }); - // TODO - }, - resetSearchTerms : function(e) { - e.preventDefault(); - var target = $(e.target); - var search = ''; - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-search-term') : target.attr('data-search-term'); - if (itemId !== 'sterm_-1') { - var searchCont = $('#lvl-search-terms-container'); - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - if ($(this).attr('data-search-term') !== itemId) { - search += $(this).parent().text() + ' '; - } - }); - } - this.searchSavedSearches(search); - }, - addSearchTerm : function(e) { - e.preventDefault(); - var newTermInput = this.$('#lvl-add-search-term-input'), newTerm = newTermInput.val().trim(); - if (newTerm.length > 0) { - this.$('li#lvl-add-search-term-container').hide(); - var searchCont = this.$('#lvl-search-terms-container'); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_0', - sterm_text : newTerm, - sterm_icon : 'label-default', - sterm_title : 'Remove' - })); - var search = ''; - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - search += $(this).parent().text() + ' '; - }); - this.searchSequences(search); - } else { - newTermInput.val(''); - } - }, - handleClickSavable : function(e) { - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Unsaved search', - 'Start dragging the icon to open your saved items', - false); - }); - }, - handleDragStart : function(e) { - var self = this; - e.originalEvent.dataTransfer.setData('srcId', $(e.target).attr('data-savable-id')); - e.originalEvent.dataTransfer.setData('savableType', 'saved_search'); - e.originalEvent.dataTransfer.setData('savable', JSON.stringify(new SavedSearchEntity.SavedSearch({ - type : 'sequences;' + self.data_source, - description : '', - search : self.collection.formattedQuery - }).toJSON())); - Lvl.vent.trigger('editable:items:dragstart'); - }, - handleDragEnd : function(e) { - Lvl.vent.trigger('editable:items:dragend'); - }, - startTour : function(e) { - e.preventDefault(); - require([ 'apps/saved-items/searches/tours/searches_tour' ], function(tour) { - tour(); - }); - }, - runSearch : function(e) { - e.preventDefault(); - var self = this; - var target = $(e.target); - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-run-search') : target.attr('data-run-search'); - var item = this.collection.get(itemId); - Lvl.flash(item).navigate(item.get('type').replace(/;/g, '/').replace(/\s+/g, ''), { - trigger : true - }); - }, - removeSearch : function(e) { - e.preventDefault(); - var self = this; - var target = $(e.target); - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-remove-search') : target.attr('data-remove-search'); - var item = this.collection.get(itemId); - item.oauth2_token = config.authorizationToken(); - require([ 'common/confirm' ], function(confirmDialog) { - confirmDialog('Confirm deletion', 'This action will delete the selected search. Are you sure?', function() { - self.collection.remove(item); - item.destroy({ - success : function(e) { - }, - error : function(e) { - require([ 'common/alert' ], function(alertDialog) { - alertDialog('Error', 'The search cannot be removed.'); - }); - } - }); - }, { - btn_text : 'Delete' - }); - }); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:backgrid:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:pace:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:flags:entities').toJSON()); - }); - }, - onDestroy : function() { - // don't remove the styles in order to enable them to be reused - pace.stop(); - this.stopListening(); - // remove all event handlers - Lvl.vent.off('search:form:submitted'); - $('#lvl-search-form').unbind(); - $('button#lvl-feature-tour-btn').unbind(); - // clean menu - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu-toggle').hide(0); - $('#lvl-floating-menu').empty(); - // clean tour - require([ 'hopscotch' ], function(hopscotch) { - hopscotch.endTour(); - }); - }, - onRender : function() { - var self = this; - pace.start(); - - var gridContainer = this.$('#grid-container'); - gridContainer.append(this.grid.render().el); - - var paginator = new Backgrid.Extension.Paginator({ - collection : this.collection, - windowSize : 14, - slideScale : 0.5, - goBackFirstOnSort : true - }); - - gridContainer.after(paginator.render().el); - - $(paginator.el).css({ - 'margin-top' : '20px' - }); - - var filter = new Backgrid.Extension.ServerSideFilter({ - collection : this.collection, - name : 'q', - placeholder : 'filter citations' - }); - - var filterToolbar = this.$('#grid-filter-toolbar'); - filterToolbar.append(filter.render().el); - - $(filter.el).addClass('hidden'); - - this.grid.clearSelectedModels(); - - this.collection.fetch({ - reset : true - }); - } - }); - }); - return Lvl.SavedItems.Searches.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/tours/searches_tour.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/tours/searches_tour.js deleted file mode 100644 index 6eee339f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/tours/searches_tour.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * RequireJS module that defines the tour: saved-items->searches->tour. - */ - -define( - [ 'app', 'apps/config/marionette/styles/style', 'hopscotch' ], - function(Lvl, Style, hopscotch) { - return function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:hopscotch:entities').toJSON()); - }); - var tour = { - id : 'saved-items-searches', - showPrevButton : false, - skipIfNoElement : true, - steps : [ - { - target : document.querySelector('div#section-tab-list'), - placement : 'bottom', - fixedElement : true, - title : 'This is the navigation menu', - content : 'Use the links here to get around on the saved searches features.' - }, - { - target : document.querySelector('a#btnSearchToggle'), - placement : 'left', - fixedElement : true, - title : 'This is the search button', - content : 'Use it to search for items. Click on the search icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, - { - delay : 300, - target : document.querySelector('input#lvl-search-form-input'), - placement : 'bottom', - fixedElement : true, - title : 'This is the search box', - content : 'It supports the LvLQL query language to search the saved searches. Enter 2015 in the input box and hit enter. Once the search is completed continue this tour.' - }, - { - target : document.querySelector('ul#lvl-search-terms-container'), - placement : 'bottom', - title : 'Your search terms are listed', - content : 'Use the provided controls to clear/add search terms. Drag the icon to save your search terms.', - }, - { - target : document.querySelector('div#grid-container'), - placement : 'top', - yOffset : 100, - title : 'This is the result dataset', - content : 'Columns are sortable, rows are selectable. Additional controls are found at the right lateral side of the grid.' - }, - { - target : document.querySelector('button#lvl-toggle-toolbar-btn'), - placement : 'left', - fixedElement : true, - title : 'This is the Tools menu', - content : 'Use the controls here to perform additionl actions on the dataset and the selected items. Click on the menu icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, { - delay : 300, - target : document.querySelector('div#lvl-floating-menu-toggle'), - placement : 'left', - xOffset : -10, - fixedElement : true, - title : 'Additional controls are displayed', - content : 'Include deselecting all selected items.', - onNext : function() { - $('button#lvl-toggle-toolbar-btn').click(); - } - }, { - delay : 300, - target : document.querySelector('button#lvl-feature-tour-btn'), - placement : 'left', - fixedElement : true, - title : 'You\'re all set!', - content : 'Run this tour as many times as you need.' - } ] - }; - hopscotch.startTour(tour); - } - }); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/tpls/saved-items_searches.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/tpls/saved-items_searches.html deleted file mode 100644 index 17348db7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/tpls/saved-items_searches.html +++ /dev/null @@ -1,13 +0,0 @@ - - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/tpls/toolbar_browse.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/tpls/toolbar_browse.html deleted file mode 100644 index d52336b9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/saved-items/searches/tpls/toolbar_browse.html +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/account/settings_account_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/account/settings_account_ctrl.js deleted file mode 100644 index dd194b14..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/account/settings_account_ctrl.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * RequireJS module that defines the controller: settings->account. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'apps/settings/account/settings_account_view' ], function(Lvl, Configuration, View) { - Lvl.module('SettingsApp.Account', function(Account, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Account.Controller = { - showSection : function() { - require([ 'entities/user' ], function(UserModel) { - var userModel = new UserModel.User({ - 'email' : config.session.get('user.session').email - }); - userModel.oauth2_token = new Configuration().authorizationToken(); - var view = new View.Content({ - model : userModel - }); - Lvl.mainRegion.currentView.tabContent.show(view); - }); - return View.Content.id; - } - } - }); - return Lvl.SettingsApp.Account.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/account/settings_account_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/account/settings_account_view.js deleted file mode 100644 index fbe06e92..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/account/settings_account_view.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * RequireJS module that defines the view: settings->account. - */ - -define([ 'marionette', 'tpl!apps/settings/account/tpls/settings_account' ], function(Marionette, AccountTpl) { - return { - Content : Marionette.ItemView.extend({ - id : 'account', - template : AccountTpl, - templateHelpers : function() { - return { - username : this.model.get('userid'), - provider : this.model.get('provider') || 'lvl', - formattedname : this.model.get('firstname') + ' ' + this.model.get('lastname'), - email : this.model.get('email'), - firstname : this.model.get('firstname'), - lastname : this.model.get('lastname'), - pictureUrl : this.model.get('pictureUrl'), - roles : (this.model.get('roles') || [ 'user' ]).join(', '), - positions : (this.model.get('positions') || [ '' ]).join('; '), - industry : this.model.get('industry') || '' - } - }, - initialize : function() { - this.listenTo(this.model, 'change', this.render); - var search_params = { - 'plain' : 'true' - }; - var self = this; - self.model.fetch({ - reset : true, - data : $.param(search_params) - }); - } - }) - }; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/account/tpls/settings_account.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/account/tpls/settings_account.html deleted file mode 100644 index de48fd69..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/account/tpls/settings_account.html +++ /dev/null @@ -1,68 +0,0 @@ -
    -
    -

    Account settings

    -
    -
    -
    -
    -
    -
    - <%= formattedname %> -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/settings_instances_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/settings_instances_ctrl.js deleted file mode 100644 index 01acbd44..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/settings_instances_ctrl.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * RequireJS module that defines the controller: settings->instances. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'entities/instance', 'apps/settings/instances/settings_instances_view' ], function(Lvl, Configuration, - InstanceModel, View) { - Lvl.module('SettingsApp.Instances', function(Instances, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Instances.Controller = { - showSection : function() { - var view = new View.Content({ - collection : new InstanceModel.InstancePageableCollection({ - oauth2_token : config.authorizationToken() - }) - }); - Lvl.mainRegion.currentView.tabContent.show(view); - return View.Content.id; - } - } - }); - return Lvl.SettingsApp.Instances.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/settings_instances_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/settings_instances_view.js deleted file mode 100644 index defa2bfd..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/settings_instances_view.js +++ /dev/null @@ -1,300 +0,0 @@ -/** - * RequireJS module that defines the view: settings->instances. - */ - -define([ 'app', 'tpl!apps/settings/instances/tpls/settings_instances', 'tpl!apps/settings/instances/tpls/toolbar_browse', 'tpl!common/search/tpls/search_term', - 'tpl!common/search/tpls/add_search_term', 'tpl!common/search/tpls/save_search', 'apps/config/marionette/styles/style', 'entities/reference', 'pace', - 'moment', 'common/country_names', 'backbone.oauth2', 'backgrid', 'backgrid-paginator', 'backgrid-select-all', 'backgrid-filter' ], function(Lvl, - InstanceTpl, ToolbarTpl, SearchTermTpl, AddSearchTermTpl, SaveSearchTpl, Style, SequenceModel, pace, moment, mapCn) { - Lvl.module('SettingsApp.Instance.View', function(View, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var columns = [ { - name : 'instanceId', - label : 'Id', - editable : false, - cell : 'string' - }, { - name : 'roles', - label : 'Roles', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - if (rawValue !== undefined) { - var names = ''; - for (var i = 0; i < rawValue.length; i++) { - var color = 'label-default'; - if ('broker' === rawValue[i]) { - color = 'label-primary'; - } else if ('shard' === rawValue[i]) { - color = 'label-info'; - } else if ('auth' === rawValue[i]) { - color = 'label-warning'; - } - names += '' + rawValue[i] + ' '; - } - this.$el.append(names.trim()); - } - this.delegateEvents(); - return this; - } - }) - }, { - name : 'heartbeat', - label : 'Heartbeat', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - var formattedValue = this.formatter.fromRaw(rawValue, this.model); - if (formattedValue && typeof formattedValue === 'number') { - var color = (formattedValue + 43200) > new Date().getTime() ? 'text-success' : 'text-danger'; - this.$el.append(' ' + moment(formattedValue).format('MMM DD[,] YYYY [at] HH[:]mm')); - } - this.delegateEvents(); - return this; - } - }) - }, { - name : 'location', - label : 'Location', - editable : false, - cell : Backgrid.Cell.extend({ - render : function() { - this.$el.empty(); - var rawValue = this.model.get(this.column.get('name')); - if (rawValue !== undefined && rawValue.coordinates !== undefined) { - var longitude = rawValue.coordinates[0]; - var latitude = rawValue.coordinates[1]; - if (longitude && typeof longitude === 'number' && latitude && typeof latitude === 'number') { - this.$el.append('lon:' + longitude + ', lat:' + latitude + ''); - } - } - this.delegateEvents(); - return this; - } - }) - } ]; - View.Content = Marionette.ItemView.extend({ - id : 'instances', - template : InstanceTpl, - initialize : function() { - this.listenTo(this.collection, 'request', this.displaySpinner); - this.listenTo(this.collection, 'sync error', this.removeSpinner); - this.grid = new Backgrid.Grid({ - columns : [ { - name : '', - cell : 'select-row', - headerCell : 'select-all' - } ].concat(columns), - collection : this.collection, - emptyText : 'No instances found' - }); - // setup search - Lvl.vent.on('search:form:submitted', this.searchInstances); - // setup menu - $('#lvl-floating-menu-toggle').show(0); - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu').empty(); - $('#lvl-floating-menu').append(ToolbarTpl({})); - $('a#uncheck-btn').on('click', { - grid : this.grid - }, this.deselectAll); - $('button#lvl-feature-tour-btn').on('click', this.startTour); - }, - displaySpinner : function() { - pace.restart(); - $('#grid-container').fadeTo('fast', 0.4); - }, - removeSpinner : function() { - pace.stop(); - var self = this; - $('#grid-container').fadeTo('fast', 1); - $('html,body').animate({ - scrollTop : 0 - }, '500', 'swing', function() { - // reset search terms - var searchCont = $('#lvl-search-terms-container'); - searchCont.empty(); - // setup search terms from server response - if (self.collection.formattedQuery && self.collection.formattedQuery.length > 0) { - var i = 1; - _.each(self.collection.formattedQuery, function(item) { - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_' + (i++), - sterm_text : item['term'], - sterm_icon : Boolean(item['valid']) ? 'label-success' : 'label-warning', - sterm_title : 'Remove' - })); - }); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_-1', - sterm_text : 'clear all', - sterm_icon : 'label-danger', - sterm_title : 'Remove All' - })); - searchCont.append(AddSearchTermTpl({})); - searchCont.append(SaveSearchTpl({})); - $('#lvl-search-terms').show('fast'); - } else { - $('#lvl-search-terms').hide('fast'); - } - }); - }, - events : { - 'click a[data-search-term]' : 'resetSearchTerms', - 'submit form#lvl-add-search-term-form' : 'addSearchTerm', - 'click div.lvl-savable' : 'handleClickSavable', - 'dragstart div.lvl-savable' : 'handleDragStart', - 'dragend div.lvl-savable' : 'handleDragEnd' - }, - deselectAll : function(e) { - e.preventDefault(); - this.grid.clearSelectedModels(); - }, - deselectAll : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - e.data.grid.clearSelectedModels(); - }, - searchInstances : function(search) { - var backgridFilter = $('form.backgrid-filter:first'); - backgridFilter.find('input:first').val(search); - // TODO backgridFilter.submit(); - // TODO - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Operation unavailable', 'Search feature is coming soon. Stay tuned!', false); - }); - // TODO - }, - resetSearchTerms : function(e) { - e.preventDefault(); - var target = $(e.target); - var search = ''; - var itemId = target.is('i') ? target.parent('a').get(0).getAttribute('data-search-term') : target.attr('data-search-term'); - if (itemId !== 'sterm_-1') { - var searchCont = $('#lvl-search-terms-container'); - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - if ($(this).attr('data-search-term') !== itemId) { - search += $(this).parent().text() + ' '; - } - }); - } - this.searchInstances(search); - }, - addSearchTerm : function(e) { - e.preventDefault(); - var newTermInput = this.$('#lvl-add-search-term-input'), newTerm = newTermInput.val().trim(); - if (newTerm.length > 0) { - this.$('li#lvl-add-search-term-container').hide(); - var searchCont = this.$('#lvl-search-terms-container'); - searchCont.append(SearchTermTpl({ - sterm_id : 'sterm_0', - sterm_text : newTerm, - sterm_icon : 'label-default', - sterm_title : 'Remove' - })); - var search = ''; - searchCont.find('a[data-search-term!="sterm_-1"]').each(function(i) { - search += $(this).parent().text() + ' '; - }); - this.searchSequences(search); - } else { - newTermInput.val(''); - } - }, - handleClickSavable : function(e) { - require([ 'common/growl' ], function(createGrowl) { - createGrowl('Unsaved search', - 'Start dragging the icon to open your saved items', - false); - }); - }, - handleDragStart : function(e) { - var self = this; - e.originalEvent.dataTransfer.setData('srcId', $(e.target).attr('data-savable-id')); - e.originalEvent.dataTransfer.setData('savableType', 'saved_search'); - e.originalEvent.dataTransfer.setData('savable', JSON.stringify(new SavedSearchEntity.SavedSearch({ - type : 'sequences;' + self.data_source, - description : '', - search : self.collection.formattedQuery - }).toJSON())); - Lvl.vent.trigger('editable:items:dragstart'); - }, - handleDragEnd : function(e) { - Lvl.vent.trigger('editable:items:dragend'); - }, - startTour : function(e) { - e.preventDefault(); - require([ 'apps/settings/instances/tours/instances_tour' ], function(tour) { - tour(); - }); - }, - onBeforeRender : function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:backgrid:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:pace:entities').toJSON()); - stylesLoader.loadCss(Lvl.request('styles:flags:entities').toJSON()); - }); - }, - onDestroy : function() { - // don't remove the styles in order to enable them to be reused - pace.stop(); - this.stopListening(); - // remove all event handlers - Lvl.vent.off('search:form:submitted'); - $('#lvl-search-form').unbind(); - $('button#lvl-feature-tour-btn').unbind(); - // clean menu - $('#lvl-floating-menu').hide(0); - $('#lvl-floating-menu-toggle').hide(0); - $('#lvl-floating-menu').empty(); - // clean tour - require([ 'hopscotch' ], function(hopscotch) { - hopscotch.endTour(); - }); - }, - onRender : function() { - var self = this; - pace.start(); - - var gridContainer = this.$('#grid-container'); - gridContainer.append(this.grid.render().el); - - var paginator = new Backgrid.Extension.Paginator({ - collection : this.collection, - windowSize : 14, - slideScale : 0.5, - goBackFirstOnSort : true - }); - - gridContainer.after(paginator.render().el); - - $(paginator.el).css({ - 'margin-top' : '20px' - }); - - var filter = new Backgrid.Extension.ServerSideFilter({ - collection : this.collection, - name : 'q', - placeholder : 'filter instances' - }); - - var filterToolbar = this.$('#grid-filter-toolbar'); - filterToolbar.append(filter.render().el); - - $(filter.el).addClass('hidden'); - - this.grid.clearSelectedModels(); - - this.collection.fetch({ - reset : true - }); - } - }); - }); - return Lvl.SettingsApp.Instance.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/tours/instances_tour.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/tours/instances_tour.js deleted file mode 100644 index b7d4128e..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/tours/instances_tour.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * RequireJS module that defines the tour: settings->instances->tour. - */ - -define( - [ 'app', 'apps/config/marionette/styles/style', 'hopscotch' ], - function(Lvl, Style, hopscotch) { - return function() { - require([ 'entities/styles' ], function() { - var stylesLoader = new Style(); - stylesLoader.loadCss(Lvl.request('styles:hopscotch:entities').toJSON()); - }); - var tour = { - id : 'settings-instances', - showPrevButton : false, - skipIfNoElement : true, - steps : [ - { - target : document.querySelector('div#section-tab-list'), - placement : 'bottom', - fixedElement : true, - title : 'This is the navigation menu', - content : 'Use the links here to get around on the instances features.' - }, - { - target : document.querySelector('a#btnSearchToggle'), - placement : 'left', - fixedElement : true, - title : 'This is the search button', - content : 'Use it to search for items. Click on the search icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, - { - delay : 300, - target : document.querySelector('input#lvl-search-form-input'), - placement : 'bottom', - fixedElement : true, - title : 'This is the search box', - content : 'It supports the LvLQL query language to search the instances. Enter roles:auth in the input box and hit enter. Once the search is completed continue this tour.' - }, - { - target : document.querySelector('ul#lvl-search-terms-container'), - placement : 'bottom', - title : 'Your search terms are listed', - content : 'Use the provided controls to clear/add search terms. Drag the icon to save your search terms.', - }, - { - target : document.querySelector('div#grid-container'), - placement : 'top', - yOffset : 100, - title : 'This is the result dataset', - content : 'Columns are sortable, rows are selectable. Additional controls are found at the right lateral side of the grid.' - }, - { - target : document.querySelector('button#lvl-toggle-toolbar-btn'), - placement : 'left', - fixedElement : true, - title : 'This is the Tools menu', - content : 'Use the controls here to perform additionl actions on the dataset and the selected items. Click on the menu icon to continue this tour.', - showNextButton : false, - nextOnTargetClick : true - }, { - delay : 300, - target : document.querySelector('div#lvl-floating-menu-toggle'), - placement : 'left', - xOffset : -10, - fixedElement : true, - title : 'Additional controls are displayed', - content : 'Include deselecting all selected items.', - onNext : function() { - $('button#lvl-toggle-toolbar-btn').click(); - } - }, { - delay : 300, - target : document.querySelector('button#lvl-feature-tour-btn'), - placement : 'left', - fixedElement : true, - title : 'You\'re all set!', - content : 'Run this tour as many times as you need.' - } ] - }; - hopscotch.startTour(tour); - } - }); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/tpls/settings_instances.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/tpls/settings_instances.html deleted file mode 100644 index 17348db7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/tpls/settings_instances.html +++ /dev/null @@ -1,13 +0,0 @@ - - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/tpls/toolbar_browse.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/tpls/toolbar_browse.html deleted file mode 100644 index d52336b9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/instances/tpls/toolbar_browse.html +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/entities/tablinks.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/entities/tablinks.js deleted file mode 100644 index ed88e958..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/entities/tablinks.js +++ /dev/null @@ -1,75 +0,0 @@ -/** - * RequireJS module that defines the entity: settings->tab-link. - */ - -define([ 'app', 'backbone.picky' ], function(Lvl) { - Lvl.module('SettingsApp.Entities', function(Entities, Lvl, Backbone, Marionette, $, _) { - Entities.Navigation = Backbone.Model.extend({ - defaults : { - link : '', - icon : 'fa-chain-broken', - text : 'Unknown' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.link) { - errors.link = 'can\'t be empty'; - } - if (!attrs.icon) { - errors.icon = 'can\'t be empty'; - } - if (!attrs.text) { - errors.text = 'can\'t be empty'; - } else { - if (attrs.text.length < 2) { - errors.text = 'is too short'; - } - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - - Entities.NavigationSettings = Backbone.Collection.extend({ - model : Entities.Navigation, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - - var iniNavigationLinks = function() { - Entities.navigationLinks = new Entities.NavigationSettings([ { - id : 1, - link : 'account', - icon : 'fa-user', - text : 'Account' - }, { - id : 2, - link : 'instances', - icon : 'fa-cloud', - text : 'Instances' - } ]); - }; - - var API = { - getNavigationEntities : function() { - if (Entities.navigationLinks === undefined) { - iniNavigationLinks(); - } - return Entities.navigationLinks; - } - } - - Lvl.reqres.setHandler('settings:navigation:entities', function() { - return API.getNavigationEntities(); - }); - }); - return; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/settings_layout_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/settings_layout_ctrl.js deleted file mode 100644 index 149111e9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/settings_layout_ctrl.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * RequireJS module that defines the controller: settings->layout. - */ - -define([ 'app', 'apps/settings/layout/settings_layout_view' ], function(Lvl, View) { - Lvl.module('SettingsApp.Layout', function(Layout, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Layout.Controller = { - showLayout : function(section) { - require([ 'apps/settings/' + section + '/settings_' + section + '_ctrl', 'apps/settings/layout/entities/tablinks' ], - function(SectionController) { - var tabLinks = Lvl.request('settings:navigation:entities'); - var tabLinkToSelect = tabLinks.find(function(tabLink) { - return tabLink.get('link') === section; - }); - tabLinkToSelect.select(); - tabLinks.trigger('reset'); - var view = new View.Layout({ - navigation : tabLinks - }); - Lvl.mainRegion.show(view); - return SectionController.showSection(); - }); - } - } - }); - return Lvl.SettingsApp.Layout.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/settings_layout_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/settings_layout_view.js deleted file mode 100644 index f7a32fa4..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/settings_layout_view.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * RequireJS module that defines the view: settings->layout. - */ - -define([ 'app', 'apps/config/marionette/regions/fadein', 'tpl!apps/settings/layout/templates/settings-layout', 'tpl!apps/settings/layout/templates/tab-list', - 'tpl!apps/settings/layout/templates/tab-link' ], function(Lvl, FadeInRegion, LayoutTpl, TabListTpl, TabLinkTpl) { - Lvl.module('SettingsApp.Layout.View', function(View, Lvl, Backbone, Marionette, $, _) { - View.TabLink = Marionette.ItemView.extend({ - tagName : 'li', - template : TabLinkTpl, - onRender : function() { - if (this.model.selected) { - this.$el.addClass('active'); - } - } - }); - View.TabList = Marionette.CompositeView.extend({ - template : TabListTpl, - childView : View.TabLink, - childViewContainer : 'ul' - }); - View.Layout = Marionette.LayoutView.extend({ - template : LayoutTpl, - regions : { - tabList : '#section-tab-list', - tabContent : FadeInRegion.extend({ - el : '#section-tab-content' - }) - }, - initialize : function(options) { - this.navLinks = options.navigation; - // subscribe to events - $(document).on('keyup', this.handleEscKeyUpEvent); - }, - onDestroy : function() { - // unsubscribe from events - $(document).off('keyup', this.handleEscKeyUpEvent); - }, - onBeforeShow : function() { - this.showChildView('tabList', new View.TabList({ - collection : this.navLinks - })); - }, - events : { - 'click button#lvl-toggle-toolbar-btn' : 'toggleToolbar', - 'click a#lvl-collapse-toolbar-btn' : 'closeToolbar' - }, - toggleToolbar : function(e) { - e.preventDefault(); - var toolbar = $('#lvl-floating-menu'); - if (toolbar.is(':visible')) { - toolbar.hide('fast'); - } else { - toolbar.show('fast'); - } - }, - closeToolbar : function(e) { - e.preventDefault(); - $('#lvl-floating-menu').hide('fast'); - }, - handleEscKeyUpEvent : function(e) { - var toolbar = $('#lvl-floating-menu'); - if (e.which == 27 && toolbar.is(':visible')) { - toolbar.hide('fast'); - } - } - }); - }); - return Lvl.SettingsApp.Layout.View; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/templates/settings-layout.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/templates/settings-layout.html deleted file mode 100644 index 0fd96668..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/templates/settings-layout.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - -
    - - -
    -
    -
    -
    -
    - -
    -
    - -

     

     

     

     

    -

     

     

     

     

    -
    -
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/templates/tab-link.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/templates/tab-link.html deleted file mode 100644 index 7142ca52..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/templates/tab-link.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/templates/tab-list.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/templates/tab-list.html deleted file mode 100644 index fecedd0c..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/layout/templates/tab-list.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/settings_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/settings_app.js deleted file mode 100644 index a16b20ec..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/settings_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: settings. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('SettingsApp', function(SettingsApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - SettingsApp.startWithParent = false; - - SettingsApp.onStart = function() { - console.log('starting SettingsApp'); - }; - - SettingsApp.onStop = function() { - console.log('stopping SettingsApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('settings:set:active', function(section) { - require([ 'apps/settings/layout/settings_layout_ctrl' ], function(LayoutController) { - SettingsApp.currentSection = LayoutController.showLayout(section); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/settings_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/settings_router.js deleted file mode 100644 index 26d61bfa..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/settings/settings_router.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: settings. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'routefilter' ], function(Lvl, Configuration) { - Lvl.module('Routers.SettingsApp', function(SettingsAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var Router = Backbone.Router.extend({ - routes : { - 'settings' : 'showSettings', - 'settings/:section' : 'showSettings' - }, - before : function() { - if (!config.isAuthenticated()) { - Lvl.navigate('login/' + encodeURIComponent(Backbone.history.fragment) + '/unauthenticated', { - trigger : true, - replace : true - }); - return false; - } - require([ 'apps/settings/settings_app' ], function() { - Lvl.execute('set:active:header', 'workspace', 'settings'); - Lvl.execute('set:active:footer', 'workspace'); - Lvl.startSubApp('SettingsApp'); - }); - return true; - }, - showSettings : function(section) { - section = (section || 'account').toLowerCase(); - if (section === 'account') { - Lvl.navigate('settings/' + section, { - trigger : false, - replace : true - }); - Lvl.execute('settings:set:active', section); - } else if (section === 'instances') { - Lvl.execute('settings:set:active', section); - } else { - Lvl.navigate('not-found', { - trigger : true, - replace : true - }); - } - } - }); - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/show/social_show_ctrl.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/show/social_show_ctrl.js deleted file mode 100644 index d4646514..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/show/social_show_ctrl.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * RequireJS module that defines the controller: social->show. - */ - -define([ 'app', 'apps/social/show/social_show_view' ], function(Lvl, View) { - Lvl.module('SocialApp.Show', function(Show, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - Show.Controller = { - showSocial : function() { - var view = new View.Content(); - Lvl.mainRegion.show(view); - } - } - }); - return Lvl.SocialApp.Show.Controller; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/show/social_show_view.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/show/social_show_view.js deleted file mode 100644 index 3ead77eb..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/show/social_show_view.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * RequireJS module that defines the view: social->show. - */ - -define([ 'marionette', 'tpl!apps/social/show/templates/social' ], function(Marionette, SocialTpl) { - return { - Content : Marionette.ItemView.extend({ - template : SocialTpl - }) - }; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/show/templates/social.html b/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/show/templates/social.html deleted file mode 100644 index cd5b725f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/show/templates/social.html +++ /dev/null @@ -1,12 +0,0 @@ -
    -
    -
    -

    Leish online research community

    -

    Social tools coming soon. Stay tuned!

    -

     

    -

     

    -

     

    -

     

    -
    -
    -
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/social_app.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/social_app.js deleted file mode 100644 index 86d22acc..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/social_app.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * RequireJS module that defines the sub-application: social. - */ - -define([ 'app' ], function(Lvl) { - Lvl.module('SocialApp', function(SocialApp, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - - /* Initialization & finalization */ - SocialApp.startWithParent = false; - - SocialApp.onStart = function() { - console.log('starting SocialApp'); - }; - - SocialApp.onStop = function() { - console.log('stopping SocialApp'); - }; - - /* Commands and events */ - Lvl.commands.setHandler('show:social', function() { - require([ 'apps/social/show/social_show_ctrl' ], function(ShowController) { - ShowController.showSocial(); - }); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/social_router.js b/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/social_router.js deleted file mode 100644 index 4a9f1add..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/apps/social/social_router.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * RequireJS module that defines the routes of the sub-application: social. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'routefilter' ], function(Lvl, Configuration) { - Lvl.module('Routers.SocialApp', function(SocialAppRouter, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - var Router = Backbone.Router.extend({ - routes : { - 'social' : 'showSocial' - }, - before : function() { - if (!config.isAuthenticated()) { - Lvl.navigate('login/' + encodeURIComponent(Backbone.history.fragment) + '/unauthenticated', { - trigger : true, - replace : true - }); - return false; - } - require([ 'apps/social/social_app' ], function() { - Lvl.execute('set:active:header', 'workspace', 'social'); - Lvl.execute('set:active:footer', 'workspace'); - Lvl.startSubApp('SocialApp'); - }); - return true; - }, - showSocial : function() { - Lvl.execute('show:social'); - } - }); - - Lvl.addInitializer(function() { - var router = new Router(); - }); - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/common/alert.js b/lvl-project/lvl-bundle/src/main/ui2/js/common/alert.js deleted file mode 100644 index d1cee9f9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/common/alert.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Creates alert dialogs using qTip2. - */ - -define([ 'qtip', 'tpl!common/templates/alert' ], function(qtip, AlertTpl) { - return function(title, message) { - var title2 = title || ''; - var message2 = message || ''; - $('
    ').qtip({ - content : { - text : AlertTpl({ - message : message2 - }), - title : { - text : title2, - button : true - } - }, - position : { - my : 'center', - at : 'center', - target : $(window) - }, - show : { - ready : true, - modal : { - on : true, - blur : false - } - }, - hide : false, - style : { - classes : 'qtip-bootstrap dialogue' - }, - events : { - render : function(event, api) { - $('button', api.elements.content).click(function(e) { - api.hide(e); - }); - }, - hide : function(event, api) { - api.destroy(); - } - } - }); - } -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/common/confirm.js b/lvl-project/lvl-bundle/src/main/ui2/js/common/confirm.js deleted file mode 100644 index d5c6281b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/common/confirm.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Creates confirm dialogs using qTip2. - */ - -define([ 'qtip', 'tpl!common/templates/confirm' ], function(qtip, ConfirmTpl) { - return function(title, message, callback, options) { - var title2 = title || ''; - var message2 = message || ''; - var o_icon = 'fa-warning', o_icon_color = 'text-warning', o_btn_text = 'OK'; - if (options) { - o_icon = options['icon'] || o_icon; - o_icon_color = options['icon_color'] || o_icon_color; - o_btn_text = options['btn_text'] || o_btn_text; - } - $('
    ').qtip({ - content : { - text : ConfirmTpl({ - message : message2, - icon : o_icon, - icon_color : o_icon_color, - btn_text : o_btn_text - }), - title : { - text : title2, - button : true - } - }, - position : { - my : 'center', - at : 'center', - target : $(window) - }, - show : { - ready : true, - modal : { - on : true, - blur : false - } - }, - hide : false, - style : { - classes : 'qtip-bootstrap dialogue' - }, - events : { - render : function(event, api) { - $('#confirmOkBtn', api.elements.content).click(function(e) { - api.hide(e); - if (callback) { - callback(); - } - }); - $('#confirmCancelBtn', api.elements.content).click(function(e) { - api.hide(e); - }); - }, - hide : function(event, api) { - api.destroy(); - } - } - }); - } -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/common/country_names.js b/lvl-project/lvl-bundle/src/main/ui2/js/common/country_names.js deleted file mode 100644 index 3320902b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/common/country_names.js +++ /dev/null @@ -1,253 +0,0 @@ -/* Auto-generated with create_flags_cnjs.sh on 2014-08-10 10:25 CEST */ -define(function () { - return { - "AF":"Afghanistan", - "AX":"Aland Islands", - "AL":"Albania", - "DZ":"Algeria", - "AS":"American Samoa", - "AD":"Andorra", - "AO":"Angola", - "AI":"Anguilla", - "AQ":"Antarctica", - "AG":"Antigua and Barbuda", - "AR":"Argentina", - "AM":"Armenia", - "AW":"Aruba", - "AU":"Australia", - "AT":"Austria", - "AZ":"Azerbaijan", - "BS":"Bahamas", - "BH":"Bahrain", - "BD":"Bangladesh", - "BB":"Barbados", - "BY":"Belarus", - "BE":"Belgium", - "BZ":"Belize", - "BJ":"Benin", - "BM":"Bermuda", - "BT":"Bhutan", - "BO":"Plurinational State of Bolivia", - "BQ":"Bonaire, Saint Eustatius and Saba", - "BA":"Bosnia and Herzegovina", - "BW":"Botswana", - "BV":"Bouvet Island", - "BR":"Brazil", - "IO":"British Indian Ocean Territory", - "BN":"Brunei Darussalam", - "BG":"Bulgaria", - "BF":"Burkina Faso", - "BI":"Burundi", - "KH":"Cambodia", - "CM":"Cameroon", - "CA":"Canada", - "CV":"Cape Verde", - "KY":"Cayman Islands", - "CF":"Central African Republic", - "TD":"Chad", - "CL":"Chile", - "CN":"China", - "CX":"Christmas Island", - "CC":"Cocos (Keeling) Islands", - "CO":"Colombia", - "KM":"Comoros", - "CG":"Congo", - "CD":"The Democratic Republic of the Congo", - "CK":"Cook Islands", - "CR":"Costa Rica", - "CI":"Cote d'Ivoire", - "HR":"Croatia", - "CU":"Cuba", - "CW":"Curacao", - "CY":"Cyprus", - "CZ":"Czech Republic", - "DK":"Denmark", - "DJ":"Djibouti", - "DM":"Dominica", - "DO":"Dominican Republic", - "EC":"Ecuador", - "EG":"Egypt", - "SV":"El Salvador", - "GQ":"Equatorial Guinea", - "ER":"Eritrea", - "EE":"Estonia", - "ET":"Ethiopia", - "FK":"Falkland Islands (Malvinas)", - "FO":"Faroe Islands", - "FJ":"Fiji", - "FI":"Finland", - "FR":"France", - "GF":"French Guiana", - "PF":"French Polynesia", - "TF":"French Southern Territories", - "GA":"Gabon", - "GM":"Gambia", - "GE":"Georgia", - "DE":"Germany", - "GH":"Ghana", - "GI":"Gibraltar", - "GR":"Greece", - "GL":"Greenland", - "GD":"Grenada", - "GP":"Guadeloupe", - "GU":"Guam", - "GT":"Guatemala", - "GG":"Guernsey", - "GN":"Guinea", - "GW":"Guinea-Bissau", - "GY":"Guyana", - "HT":"Haiti", - "HM":"Heard Island and McDonald Islands", - "VA":"Holy See (Vatican City State)", - "HN":"Honduras", - "HK":"Hong Kong", - "HU":"Hungary", - "IS":"Iceland", - "IN":"India", - "ID":"Indonesia", - "IR":"Islamic Republic of Iran", - "IQ":"Iraq", - "IE":"Ireland", - "IM":"Isle of Man", - "IL":"Israel", - "IT":"Italy", - "JM":"Jamaica", - "JP":"Japan", - "JE":"Jersey", - "JO":"Jordan", - "KZ":"Kazakhstan", - "KE":"Kenya", - "KI":"Kiribati", - "KP":"Democratic People's Republic of Korea", - "KR":"Republic of Korea", - "KW":"Kuwait", - "KG":"Kyrgyzstan", - "LA":"Lao People's Democratic Republic", - "LV":"Latvia", - "LB":"Lebanon", - "LS":"Lesotho", - "LR":"Liberia", - "LY":"Libyan Arab Jamahiriya", - "LI":"Liechtenstein", - "LT":"Lithuania", - "LU":"Luxembourg", - "MO":"Macao", - "MK":"The Former Yugoslav Republic of Macedonia", - "MG":"Madagascar", - "MW":"Malawi", - "MY":"Malaysia", - "MV":"Maldives", - "ML":"Mali", - "MT":"Malta", - "MH":"Marshall Islands", - "MQ":"Martinique", - "MR":"Mauritania", - "MU":"Mauritius", - "YT":"Mayotte", - "MX":"Mexico", - "FM":"Federated States of Micronesia", - "MD":"Republic of Moldova", - "MC":"Monaco", - "MN":"Mongolia", - "ME":"Montenegro", - "MS":"Montserrat", - "MA":"Morocco", - "MZ":"Mozambique", - "MM":"Myanmar", - "NA":"Namibia", - "NR":"Nauru", - "NP":"Nepal", - "NL":"Netherlands", - "NC":"New Caledonia", - "NZ":"New Zealand", - "NI":"Nicaragua", - "NE":"Niger", - "NG":"Nigeria", - "NU":"Niue", - "NF":"Norfolk Island", - "MP":"Northern Mariana Islands", - "NO":"Norway", - "PS":"Occupied Palestinian Territory", - "OM":"Oman", - "PK":"Pakistan", - "PW":"Palau", - "PA":"Panama", - "PG":"Papua New Guinea", - "PY":"Paraguay", - "PE":"Peru", - "PH":"Philippines", - "PN":"Pitcairn", - "PL":"Poland", - "PT":"Portugal", - "PR":"Puerto Rico", - "QA":"Qatar", - "RE":"Reunion", - "RO":"Romania", - "RU":"Russian Federation", - "RW":"Rwanda", - "BL":"Saint Barthelemy", - "SH":"Saint Helena, Ascension and Tristan da Cunha", - "KN":"Saint Kitts and Nevis", - "LC":"Saint Lucia", - "MF":"Saint Martin (French part)", - "PM":"Saint Pierre and Miquelon", - "VC":"Saint Vincent and The Grenadines", - "WS":"Samoa", - "SM":"San Marino", - "ST":"Sao Tome and Principe", - "SA":"Saudi Arabia", - "SN":"Senegal", - "RS":"Serbia", - "SC":"Seychelles", - "SL":"Sierra Leone", - "SG":"Singapore", - "SX":"Sint Maarten (Dutch part)", - "SK":"Slovakia", - "SI":"Slovenia", - "SB":"Solomon Islands", - "SO":"Somalia", - "ZA":"South Africa", - "GS":"South Georgia and the South Sandwich Islands", - "ES":"Spain", - "LK":"Sri Lanka", - "SD":"Sudan", - "SR":"Suriname", - "SJ":"Svalbard and Jan Mayen", - "SZ":"Swaziland", - "SE":"Sweden", - "CH":"Switzerland", - "SY":"Syrian Arab Republic", - "TW":"Taiwan, Province of China", - "TJ":"Tajikistan", - "TZ":"United Republic of Tanzania", - "TH":"Thailand", - "TL":"Timor-Leste", - "TG":"Togo", - "TK":"Tokelau", - "TO":"Tonga", - "TT":"Trinidad and Tobago", - "TN":"Tunisia", - "TR":"Turkey", - "TM":"Turkmenistan", - "TC":"Turks and Caicos Islands", - "TV":"Tuvalu", - "UG":"Uganda", - "UA":"Ukraine", - "AE":"United Arab Emirates", - "GB":"United Kingdom", - "US":"United States", - "UM":"United States Minor Outlying Islands", - "UY":"Uruguay", - "UZ":"Uzbekistan", - "VU":"Vanuatu", - "VE":"Bolivarian Republic of Venezuela", - "VN":"Viet Nam", - "VG":"British Virgin Islands", - "VI":"U.S. Virgin Islands", - "WF":"Wallis and Futuna", - "EH":"Western Sahara", - "YE":"Yemen", - "ZM":"Zambia", - "ZW":"Zimbabwe" - } -}); diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/common/growl.js b/lvl-project/lvl-bundle/src/main/ui2/js/common/growl.js deleted file mode 100644 index 3dcac7a6..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/common/growl.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Creates Growl like notifications using qTip2. - */ - -define([ 'qtip' ], function(qtip) { - return function(title, alert, persistent) { - var target = $('.qtip.jgrowl:visible:last'); - var growlTitle = title || ''; - var growlAlert = alert || ''; - var growlPersistent = persistent || false; - $('
    ').qtip({ - content : { - text : growlAlert, - title : { - text : growlTitle, - button : true - } - }, - position : { - target : [ 0, 0 ], - container : $('#lvl-qtip-growl-container') - }, - show : { - event : false, - ready : true, - effect : function() { - $(this).stop(0, 1).animate({ - height : 'toggle' - }, 400, 'swing'); - }, - delay : 0, - persistent : growlPersistent - }, - hide : { - event : false, - effect : function(api) { - $(this).stop(0, 1).animate({ - height : 'toggle' - }, 400, 'swing'); - } - }, - style : { - width : 250, - classes : 'qtip-bootstrap jgrowl', - tip : false - }, - events : { - render : function(event, api) { - if (!api.options.show.persistent) { - $(this).bind('mouseover mouseout', function(e) { - var lifespan = 5000; - - clearTimeout(api.timer); - if (e.type !== 'mouseover') { - api.timer = setTimeout(function() { - api.hide(e) - }, lifespan); - } - }).triggerHandler('mouseout'); - } - } - } - }); - } -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/common/info.js b/lvl-project/lvl-bundle/src/main/ui2/js/common/info.js deleted file mode 100644 index a13978e0..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/common/info.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Creates informative dialogs using qTip2. - */ - -define([ 'qtip', 'tpl!common/templates/info' ], function(qtip, InfoTpl) { - return function(title, message) { - var title2 = title || ''; - var message2 = message || ''; - $('
    ').qtip({ - content : { - text : InfoTpl({ - message : message2 - }), - title : { - text : title2, - button : true - } - }, - position : { - my : 'center', - at : 'center', - target : $(window) - }, - show : { - ready : true, - modal : { - on : true, - blur : false - } - }, - hide : false, - style : { - classes : 'qtip-bootstrap dialogue' - }, - events : { - render : function(event, api) { - $('button', api.elements.content).click(function(e) { - api.hide(e); - }); - }, - hide : function(event, api) { - api.destroy(); - } - } - }); - } -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/common/search/tpls/add_search_term.html b/lvl-project/lvl-bundle/src/main/ui2/js/common/search/tpls/add_search_term.html deleted file mode 100644 index 752fae97..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/common/search/tpls/add_search_term.html +++ /dev/null @@ -1,7 +0,0 @@ -
  • -
    -
    - -
    -
    -
  • \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/common/search/tpls/save_search.html b/lvl-project/lvl-bundle/src/main/ui2/js/common/search/tpls/save_search.html deleted file mode 100644 index 86a6c543..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/common/search/tpls/save_search.html +++ /dev/null @@ -1,6 +0,0 @@ -
  • -
    - - -
    -
  • \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/common/search/tpls/search_term.html b/lvl-project/lvl-bundle/src/main/ui2/js/common/search/tpls/search_term.html deleted file mode 100644 index c8031aee..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/common/search/tpls/search_term.html +++ /dev/null @@ -1 +0,0 @@ -
  • <%= sterm_text %>
  • \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/common/templates/alert.html b/lvl-project/lvl-bundle/src/main/ui2/js/common/templates/alert.html deleted file mode 100644 index 7732ed3f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/common/templates/alert.html +++ /dev/null @@ -1,15 +0,0 @@ -
    -
    -

    - -

    -
    -
    -

    <%= message %>

    -
    -
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/common/templates/confirm.html b/lvl-project/lvl-bundle/src/main/ui2/js/common/templates/confirm.html deleted file mode 100644 index 9403e88b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/common/templates/confirm.html +++ /dev/null @@ -1,17 +0,0 @@ -
    -
    -

    - -

    -
    -
    -

    <%= message %>

    -
    -
    -
    -
    - -   - -
    -
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/common/templates/info.html b/lvl-project/lvl-bundle/src/main/ui2/js/common/templates/info.html deleted file mode 100644 index ec687949..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/common/templates/info.html +++ /dev/null @@ -1,15 +0,0 @@ -
    -
    -

    - -

    -
    -
    -

    <%= message %>

    -
    -
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/common/templates/loading.html b/lvl-project/lvl-bundle/src/main/ui2/js/common/templates/loading.html deleted file mode 100644 index e69de29b..00000000 diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/common/views.js b/lvl-project/lvl-bundle/src/main/ui2/js/common/views.js deleted file mode 100644 index 40137db0..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/common/views.js +++ /dev/null @@ -1,64 +0,0 @@ -/** - * RequireJS module that defines the views that are common to all the application and sub-applications. - * TODO : check whether this is still needed. Otherwise, remove. - */ - -define([ 'app', 'tpl!common/templates/loading', 'jquery.spin' ], function(Lvl, LoadingTpl, ErrorDialogTpl) { - Lvl.module('Common.Views', function(Views, Lvl, Backbone, Marionette, $, _) { - Views.Loading = Marionette.ItemView.extend({ - template : LoadingTpl, - onShow : function() { - var docHeight = $(document).height(); - $('body').append("
    "); - $('#lvl-loading-overlay').height(docHeight).css({ - 'opacity' : 0.4, - 'position' : 'absolute', - 'top' : 0, - 'left' : 0, - 'background-color' : 'black', - 'width' : '100%', - 'z-index' : 5000 - }); - $('body').append(""); - var opts = { - lines : 13, - length : 20, - width : 10, - radius : 30, - corners : 1, - rotate : 0, - direction : 1, - color : '#000', - speed : 1, - trail : 60, - shadow : false, - hwaccel : false, - className : 'spinner', - zIndex : 2e9, - top : '50%', - left : '50%' - }; - $('#lvl-loading-spinner').spin(opts); - $('#lvl-loading-spinner').fadeToggle('fast'); - }, - onBeforeClose : function() { - $.when($('#lvl-loading-spinner').spin(false)).then(function() { - $('#lvl-loading-overlay').animate({ - 'opacity' : '0', - }, { - 'duration' : 'fast', - 'complete' : function() { - $('#lvl-loading-spinner').remove(); - $('#lvl-loading-overlay').remove(); - } - }); - }); - }, - onDestroy : function() { - $('#lvl-loading-spinner').remove(); - $('#lvl-loading-overlay').remove(); - } - }); - }); - return Lvl.Common.Views; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/data/config.json b/lvl-project/lvl-bundle/src/main/ui2/js/data/config.json deleted file mode 100644 index 65a77db6..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/data/config.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "endpoint" : { - "url" : "http://lvl.i3m.upv.es", - "api_version" : "1" - }, - "oauth2" : { - "client_id" : "lvl_portal", - "client_secret" : "changeit" - }, - "linkedin" : { - "api_key" : "771s7duqp3m4zc" - } -} \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/data/events.json b/lvl-project/lvl-bundle/src/main/ui2/js/data/events.json deleted file mode 100644 index 9a3c75cf..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/data/events.json +++ /dev/null @@ -1,12 +0,0 @@ -[ { - "event" : "EGI Conference 2015", - "link" : "http://conf2015.egi.eu/", - "where" : "Lisbon, Portugal", - "when" : "May 18-22, 2015" - }, - { - "event" : "ICT 2015", - "link" : "http://ec.europa.eu/digital-agenda/ICT2015", - "where" : "Lisbon, Portugal", - "when" : "Oct 20-22, 2015" -} ] \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/data/pipelines.json b/lvl-project/lvl-bundle/src/main/ui2/js/data/pipelines.json deleted file mode 100644 index f296753c..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/data/pipelines.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "id" : "workflows-eubcc-nj_pipeline-1.0", - "stable" : "3193" - } -] \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/dataset.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/dataset.js deleted file mode 100644 index 9dd5f886..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/dataset.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * RequireJS module that defines the entity: dataset. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.paginator' ], function(Lvl, Configuration) { - Lvl.module('Entities.Dataset', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.Dataset = Backbone.Model.extend({ - urlRoot : config.get('service', '') + '/datasets/objects/~/', - idAttribute : 'filename', - defaults : { - description : '', - downloadUri : '', - mime : '', - path : '', - target : {} - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.downloadUri) { - errors.downloadUri = 'can\'t be empty'; - } - if (!attrs.mime) { - errors.mime = 'can\'t be empty'; - } - if (!attrs.path) { - errors.path = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - Entities.DatasetPageableCollection = Backbone.PageableCollection.extend({ - model : Entities.Dataset, - mode : 'server', - // url : 'datasets.json?burst=' + Math.random(), - url : config.get('service', '') + '/datasets/objects/~', - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 100, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - Entities.DatasetAllCollection = Backbone.PageableCollection.extend({ - model : Entities.Dataset, - url : config.get('service', '') + '/datasets/objects/~', - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 1000000, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - }); - return Lvl.Entities.Dataset; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/gb_sequence.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/gb_sequence.js deleted file mode 100644 index 330f3a75..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/gb_sequence.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * RequireJS module that defines the entity: GenBank sequence. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.picky' ], function(Lvl, Configuration) { - Lvl.module('Entities.GbSequence', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.GbSequence = Backbone.Model.extend({ - urlRoot : config.get('service', '') + '/sequences/', - url : function() { - return this.urlRoot + this.get('dataSource') + '/' + this.id + '/export/gb/xml'; - }, - idAttribute : 'gbSeqPrimaryAccession', - defaults : { - 'gbSeqLocus' : '', - 'gbSeqPrimaryAccession' : '', - 'dataSource' : 'sandflies' - }, - initialize : function(options) { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.GBSeq_locus) { - errors.GBSeq_locus = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - }); - return Lvl.Entities.GbSequence; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/instance.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/instance.js deleted file mode 100644 index d644d574..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/instance.js +++ /dev/null @@ -1,69 +0,0 @@ -/** - * RequireJS module that defines the entity: LVL instance. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.picky', 'backbone.paginator' ], function(Lvl, Configuration) { - Lvl.module('Entities.Instance', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.Instance = Backbone.Model.extend({ - defaults : { - instanceId : '', - roles : [], - heartbeat : '', - location : '' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.instanceId) { - errors.instanceId = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - Entities.InstanceCollection = Backbone.Collection.extend({ - model : Entities.Instance, - comparator : 'instanceId', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - Entities.InstancePageableCollection = Backbone.PageableCollection.extend({ - model : Entities.Instance, - mode : 'server', - // url : 'instances.json?burst=' + Math.random(), - url : config.get('service', '') + '/instances', - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 100, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - }); - return Lvl.Entities.Instance; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/issue.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/issue.js deleted file mode 100644 index c7af722b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/issue.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * RequireJS module that defines the entity: issue. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.picky', 'backbone.paginator' ], function(Lvl, Configuration) { - Lvl.module('Entities.Issue', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.Issue = Backbone.Model.extend({ - urlRoot : config.get('service', '') + '/support/issues', - defaults : { - id : '', - email : '', - opened : '', - browser : '', - system : '', - description : '', - screenshot : '', - status : '', - owner : '', - closed : '' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.id) { - errors.id = 'can\'t be empty'; - } - if (!attrs.email) { - errors.email = 'can\'t be empty'; - } - if (!attrs.requested) { - errors.requested = 'can\'t be empty'; - } - if (!attrs.channels) { - errors.channels = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - Entities.IssueCollection = Backbone.Collection.extend({ - model : Entities.Issue, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - Entities.IssuePageableCollection = Backbone.PageableCollection.extend({ - model : Entities.Issue, - mode : 'server', - url : config.get('service', '') + '/support/issues', - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 100, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - }); - return Lvl.Entities.Issue; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/link.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/link.js deleted file mode 100644 index 540442e5..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/link.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * RequireJS module that defines the entity: link. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.paginator' ], function(Lvl, Configuration) { - Lvl.module('Entities.Link', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.Link = Backbone.Model.extend({ - urlRoot : config.get('service', '') + '/datasets/open_access/~/', - idAttribute : 'filename', - defaults : { - openAccessLink : '', - openAccessDate : '' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.downloadUri) { - errors.downloadUri = 'can\'t be empty'; - } - if (!attrs.mime) { - errors.mime = 'can\'t be empty'; - } - if (!attrs.path) { - errors.path = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - Entities.LinkCreate = Backbone.Model.extend({ - urlRoot : config.get('service', '') + '/datasets/open_access/~/' - }); - Entities.LinkPageableCollection = Backbone.PageableCollection.extend({ - model : Entities.Link, - mode : 'server', - // url : 'datasets.json?burst=' + Math.random(), - url : config.get('service', '') + '/datasets/open_access/~', - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 100, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - Entities.LinkAllCollection = Backbone.PageableCollection.extend({ - model : Entities.Link, - url : config.get('service', '') + '/datasets/open_access/~', - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 1000000, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - }); - return Lvl.Entities.Link; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/navigation.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/navigation.js deleted file mode 100644 index 8b9a0429..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/navigation.js +++ /dev/null @@ -1,264 +0,0 @@ -/** - * RequireJS module that defines the entity: navigation link. - */ - -define([ 'app', 'backbone.picky' ], function(Lvl) { - Lvl.module('Entities', function(Entities, Lvl, Backbone, Marionette, $, _) { - Entities.Navigation = Backbone.Model.extend({ - defaults : { - href : '/#home', - icon : 'fa-chain-broken', - text : 'Unknown', - isExternal : undefined - /* labels external links that should be opened in a new tab/window */ - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.href) { - errors.href = 'can\'t be empty'; - } - if (!attrs.icon) { - errors.icon = 'can\'t be empty'; - } - if (!attrs.text) { - errors.text = 'can\'t be empty'; - } else { - if (attrs.text.length < 2) { - errors.text = 'is too short'; - } - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - - Entities.NavigationCollection = Backbone.Collection.extend({ - model : Entities.Navigation, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - - var iniNavigationLinks = function() { - Entities.navigationLinks = new Entities.NavigationCollection([ { - id : 1, - href : '/#home', - icon : 'fa-home', - text : 'Home' - }, { - id : 2, - href : '/#social', - icon : 'fa-comments', - text : 'Community' - }, { - id : 3, - href : '/#collection', - icon : 'fa-database', - text : 'Collection' - }, { - id : 4, - href : '/#e-compendium', - icon : 'fa-file-text', - text : 'e-Compendium' - }, { - id : 5, - href : '/#analysis', - icon : 'fa-barcode', - text : 'Molecular Analysis' - }, { - id : 6, - href : '/#enm', - icon : 'fa-globe', - text : 'Ecological Niche Modelling' - }, { - id : 7, - href : '/#drive', - icon : 'fa-hdd-o', - text : 'Drive' - } ]); - }; - - var iniSettingsLinks = function() { - Entities.settingsLinks = new Entities.NavigationCollection([ { - id : 9, - href : '/#saved-items', - icon : 'fa-archive', - text : 'Saved Items' - }, { - id : 10, - href : '/#settings', - icon : 'fa-cog', - text : 'Settings' - } ]); - }; - - var iniAdminLinks = function() { - Entities.adminLinks = new Entities.NavigationCollection([ { - id : 12, - href : '/#admin', - icon : 'fa-wrench', - text : 'Admin' - } ]); - }; - - var iniAboutLinks = function() { - Entities.aboutLinks = new Entities.NavigationCollection([ { - id : 14, - href : '/#about/project', - icon : 'fa-group', - text : 'Project' - }, { - id : 15, - href : '/#about/key-features', - icon : 'fa-key', - text : 'Key Features' - } ]); - }; - - var iniDocumentationLinks = function() { - Entities.documentationLinks = new Entities.NavigationCollection([ { - id : 17, - href : '/#doc/screencasts', - icon : 'fa-video-camera', - text : 'Screencasts' - }, { - id : 18, - href : '/#doc/presentations', - icon : 'fa-desktop', - text : 'Presentations' - }, { - id : 19, - href : '/#doc/publications', - icon : 'fa-file-text-o', - text : 'Publications' - } ]); - }; - - var iniSupportLinks = function() { - Entities.supportLinks = new Entities.NavigationCollection([ { - id : 21, - href : '/#support/mailing-list', - icon : 'fa-envelope-o', - text : 'Mailing list' - } ]); - }; - - var iniSoftwareLinks = function() { - Entities.softwareLinks = new Entities.NavigationCollection([ { - id : 23, - href : '/#software/releases', - icon : 'fa-bullhorn', - text : 'Releases' - }, { - id : 24, - href : '/#software/downloads', - icon : 'fa-download', - text : 'Downloads' - }, { - id : 25, - href : '/#software/development', - icon : 'fa-github-alt', - text : 'Development' - }, { - id : 26, - href : '/apidoc/', - icon : 'fa-book', - text : 'API Documentation', - isExternal : true - } ]); - }; - - var API = { - getNavigationEntities : function() { - if (Entities.navigationLinks === undefined) { - iniNavigationLinks(); - } - return Entities.navigationLinks; - }, - getSettingEntities : function() { - if (Entities.settingsLinks === undefined) { - iniSettingsLinks(); - } - return Entities.settingsLinks; - }, - getAboutEntities : function() { - if (Entities.aboutLinks === undefined) { - iniAboutLinks(); - } - return Entities.aboutLinks; - }, - getDocumentationEntities : function() { - if (Entities.documentationLinks === undefined) { - iniDocumentationLinks(); - } - return Entities.documentationLinks; - }, - getSupportEntities : function() { - if (Entities.supportLinks === undefined) { - iniSupportLinks(); - } - return Entities.supportLinks; - }, - getSoftwareEntities : function() { - if (Entities.softwareLinks === undefined) { - iniSoftwareLinks(); - } - return Entities.softwareLinks; - }, - getNavigationSettingEntities : function() { - if (Entities.navigationLinks === undefined) { - iniNavigationLinks(); - } - if (Entities.settingsLinks === undefined) { - iniSettingsLinks(); - } - var navigationLinksJson = Entities.navigationLinks.toJSON(); - return new Entities.NavigationCollection(navigationLinksJson.concat({ - 'id' : _.max(navigationLinksJson, function(link) { - return link.id; - }).id + 1, - 'href' : '#', - 'icon' : 'fa-minus', - 'text' : 'separator' - }).concat(Entities.settingsLinks.toJSON())); - } - } - - Lvl.reqres.setHandler('navigation:links:entities', function() { - return API.getNavigationEntities(); - }); - - Lvl.reqres.setHandler('navigation:settings:entities', function() { - return API.getSettingEntities(); - }); - - Lvl.reqres.setHandler('navigation:about:entities', function() { - return API.getAboutEntities(); - }); - - Lvl.reqres.setHandler('navigation:documentation:entities', function() { - return API.getDocumentationEntities(); - }); - - Lvl.reqres.setHandler('navigation:support:entities', function() { - return API.getSupportEntities(); - }); - - Lvl.reqres.setHandler('navigation:software:entities', function() { - return API.getSoftwareEntities(); - }); - - Lvl.reqres.setHandler('navigation:links+settings:entities', function() { - return API.getNavigationSettingEntities(); - }); - }); - - return; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/pm_citation.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/pm_citation.js deleted file mode 100644 index 9e4a8944..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/pm_citation.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * RequireJS module that defines the entity: PubMed citation. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.picky' ], function(Lvl, Configuration) { - Lvl.module('Entities.PmCitation', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.PmCitation = Backbone.Model.extend({ - urlRoot : config.get('service', '') + '/citations/', - url : function() { - return this.urlRoot + this.id + '/export/pubmed'; - }, - defaults : { - 'medlineCitation' : { - 'pmid' : '' - } - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - parse : function(resp) { - resp.id = resp.medlineCitation.pmid.value; - return resp; - } - }); - }); - return Lvl.Entities.PmCitation; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/reference.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/reference.js deleted file mode 100644 index b5350b5b..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/reference.js +++ /dev/null @@ -1,75 +0,0 @@ -/** - * RequireJS module that defines the entity: reference. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.picky', 'backbone.paginator' ], function(Lvl, Configuration) { - Lvl.module('Entities.Reference', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.Reference = Backbone.Model.extend({ - defaults : { - pubmedId : '', - publicationYear : '', - seqids : [], - title : '' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.pubmedId) { - errors.pubmedId = 'can\'t be empty'; - } - if (!attrs.publicationYear) { - errors.publicationYear = 'can\'t be empty'; - } - if (!attrs.title) { - errors.title = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - Entities.ReferenceCollection = Backbone.Collection.extend({ - model : Entities.Reference, - comparator : 'pubmedId', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - Entities.ReferencePageableCollection = Backbone.PageableCollection.extend({ - model : Entities.Reference, - mode : 'server', - // url : 'citations.json?burst=' + Math.random(), - url : config.get('service', '') + '/citations', - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 100, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - }); - return Lvl.Entities.Reference; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/saved_search.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/saved_search.js deleted file mode 100644 index 232c21c9..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/saved_search.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * RequireJS module that defines the entity: saved_search. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.picky', 'backbone.paginator' ], function(Lvl, Configuration) { - Lvl.module('Entities.SavedSearch', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.SavedSearch = Backbone.Model.extend({ - urlRoot : config.get('service', '') + '/saved/searches/~/', - defaults : { - type : '', - saved : '', - description : '', - search : {} - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.type) { - errors.type = 'can\'t be empty'; - } - if (!attrs.search) { - errors.search = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - Entities.SavedSearchCollection = Backbone.Collection.extend({ - model : Entities.SavedSearch, - comparator : 'searchId', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - Entities.SavedSearchPageableCollection = Backbone.PageableCollection.extend({ - model : Entities.SavedSearch, - mode : 'server', - url : function() { - return config.get('service', '') + '/saved/searches/~'; - }, - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 100, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - // set additional properties before returning to caller - this.formattedQuery = resp.formattedQuery; - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - }); - return Lvl.Entities.SavedSearch; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/sequence.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/sequence.js deleted file mode 100644 index 4329fb74..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/sequence.js +++ /dev/null @@ -1,92 +0,0 @@ -/** - * RequireJS module that defines the entity: sequence. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.picky', 'backbone.paginator' ], function(Lvl, Configuration) { - Lvl.module('Entities.Sequence', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.Sequence = Backbone.Model.extend({ - defaults : { - id : '', - dataSource : '', - definition : '', - accession : '', - version : '', - organism : '', - length : 0 - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.id) { - errors.id = 'can\'t be empty'; - } - if (!attrs.dataSource) { - errors.dataSource = 'can\'t be empty'; - } - if (!attrs.accession) { - errors.accession = 'can\'t be empty'; - } - if (!attrs.version) { - errors.version = 'can\'t be empty'; - } - if (!attrs.organism) { - errors.organism = 'can\'t be empty'; - } - if (!attrs.length) { - errors.length = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - Entities.SequenceCollection = Backbone.Collection.extend({ - model : Entities.Sequence, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - Entities.SequencePageableCollection = Backbone.PageableCollection.extend({ - model : Entities.Sequence, - mode : 'server', - // url : 'sequences.json?burst=' + Math.random(), - url : function() { - return config.get('service', '') + '/sequences/' + this.data_source; - }, - initialize : function(options) { - this.oauth2_token = options.oauth2_token, - this.data_source = options.data_source || 'sandflies' - }, - state : { - pageSize : 100, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - // set additional properties before returning to caller - this.formattedQuery = resp.formattedQuery; - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - }); - return Lvl.Entities.Sequence; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/statistic.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/statistic.js deleted file mode 100644 index 8e51f1f3..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/statistic.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * RequireJS module that defines the entity: statistic. - */ - -define([ 'app', 'apps/config/marionette/configuration' ], function(Lvl, Configuration) { - Lvl.module('Entities.Statistic', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.Statistic = Backbone.Model.extend({ - urlRoot : config.get('service', '') + '/instances/stats/collection', - defaults : { - 'leishmania.gene' : [ { - "label" : "", - "value" : 0 - } ], - 'leishmania.gis' : [ { - "label" : "No", - "value" : 0 - } ], - 'leishmania.source' : [ { - "label" : "GenBank", - "value" : 0 - } ], - 'sandflies.gene' : [ { - "label" : "", - "value" : 0 - } ], - 'sandflies.gis' : [ { - "label" : "No", - "value" : 0 - } ], - 'sandflies.source' : [ { - "label" : "GenBank", - "value" : 0 - } ] - }, - validate : function(attrs, options) { - var errors = {}; - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - }); - return Lvl.Entities.Statistic; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/styles.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/styles.js deleted file mode 100644 index 6f53a881..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/styles.js +++ /dev/null @@ -1,170 +0,0 @@ -/** - * RequireJS module that defines the entity: dynamic styles. - */ - -define([ 'app', 'apps/config/marionette/configuration' ], function(Lvl, Configuration) { - Lvl.module('Entities', function(Entities, Lvl, Backbone, Marionette, $, _) { - var bust = new Configuration().get('bust', ''); - - Entities.Style = Backbone.Model.extend({ - defaults : { - id : 'none', - url : '' - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.id) { - errors.id = 'can\'t be empty'; - } else { - if (attrs.id.length < 2) { - errors.id = 'is too short'; - } - } - if (!attrs.url) { - errors.url = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - - Entities.StyleCollection = Backbone.Collection.extend({ - model : Entities.Style, - comparator : 'id' - }); - - var iniFlagsSpriteStyles = function() { - Entities.flagsSpriteStyles = new Entities.StyleCollection([ { - id : 'flags', - url : '/css/flags.css' + bust - } ]); - }; - - var iniFormValidationStyles = function() { - Entities.formValidationStyles = new Entities.StyleCollection([ { - id : 'bootstrapvalidator', - url : '//cdnjs.cloudflare.com/ajax/libs/jquery.bootstrapvalidator/0.5.3/css/bootstrapValidator.min.css' + bust - } ]); - }; - - var iniBackgridStyles = function() { - Entities.backgridStyles = new Entities.StyleCollection([ { - id : 'backgrid', - url : '//cdnjs.cloudflare.com/ajax/libs/backgrid.js/0.3.5/backgrid.min.css' + bust - }, { - id : 'backgrid-paginator', - url : '/css/backgrid-paginator.min.css' + bust - }, { - id : 'backgrid-select-all', - url : '/css/backgrid-select-all.min.css' + bust - }, { - id : 'backgrid-filter', - url : '/css/backgrid-filter.min.css' + bust - } ]); - }; - - var iniOpenLayersStyles = function() { - Entities.openLayersStyles = new Entities.StyleCollection([ { - id : 'ol', - url : '//cdnjs.cloudflare.com/ajax/libs/ol3/3.4.0/ol.min.css' + bust - } ]); - }; - - var iniPaceStyles = function() { - Entities.paceStyles = new Entities.StyleCollection([ { - id : 'pace', - url : '//cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/themes/black/pace-theme-center-simple.css' + bust - } ]); - }; - - var iniQtipStyles = function() { - Entities.qtipStyles = new Entities.StyleCollection([ { - id : 'qtip', - url : '//cdn.jsdelivr.net/qtip2/2.2.0/jquery.qtip.min.css' + bust - } ]); - }; - - var iniHopscotchStyles = function() { - Entities.hopscotchStyles = new Entities.StyleCollection([ { - id : 'hopscotch', - url : '//cdnjs.cloudflare.com/ajax/libs/hopscotch/0.2.3/css/hopscotch.min.css' + bust - } ]); - }; - - var API = { - getFlagsSpriteStyles : function() { - if (Entities.flagsSpriteStyles === undefined) { - iniFlagsSpriteStyles(); - } - return Entities.flagsSpriteStyles; - }, - getFormValidationStyles : function() { - if (Entities.formValidationStyles === undefined) { - iniFormValidationStyles(); - } - return Entities.formValidationStyles; - }, - getBackgridStyles : function() { - if (Entities.backgridStyles === undefined) { - iniBackgridStyles(); - } - return Entities.backgridStyles; - }, - getOpenLayersStyles : function() { - if (Entities.openLayersStyles === undefined) { - iniOpenLayersStyles(); - } - return Entities.openLayersStyles; - }, - getPaceStyles : function() { - if (Entities.paceStyles === undefined) { - iniPaceStyles(); - } - return Entities.paceStyles; - }, - getQtipStyles : function() { - if (Entities.qtipStyles === undefined) { - iniQtipStyles(); - } - return Entities.qtipStyles; - }, - getHopscotchStyles : function() { - if (Entities.hopscotchStyles === undefined) { - iniHopscotchStyles(); - } - return Entities.hopscotchStyles; - } - } - - Lvl.reqres.setHandler('styles:flags:entities', function() { - return API.getFlagsSpriteStyles(); - }); - - Lvl.reqres.setHandler('styles:form-validation:entities', function() { - return API.getFormValidationStyles(); - }); - - Lvl.reqres.setHandler('styles:backgrid:entities', function() { - return API.getBackgridStyles(); - }); - - Lvl.reqres.setHandler('styles:openlayers:entities', function() { - return API.getOpenLayersStyles(); - }); - - Lvl.reqres.setHandler('styles:pace:entities', function() { - return API.getPaceStyles(); - }); - - Lvl.reqres.setHandler('styles:qtip:entities', function() { - return API.getQtipStyles(); - }); - - Lvl.reqres.setHandler('styles:hopscotch:entities', function() { - return API.getHopscotchStyles(); - }); - - return; - }); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/subscription_request.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/subscription_request.js deleted file mode 100644 index 1937ef83..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/subscription_request.js +++ /dev/null @@ -1,79 +0,0 @@ -/** - * RequireJS module that defines the entity: subscription request. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.picky', 'backbone.paginator' ], function(Lvl, Configuration) { - Lvl.module('Entities.SubscrReq', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.SubscrReq = Backbone.Model.extend({ - urlRoot : config.get('service', '') + '/support/subscriptions/requests', - defaults : { - id : '', - email : '', - requested : '', - channels : [], - fulfilled : '' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.id) { - errors.id = 'can\'t be empty'; - } - if (!attrs.email) { - errors.email = 'can\'t be empty'; - } - if (!attrs.requested) { - errors.requested = 'can\'t be empty'; - } - if (!attrs.channels) { - errors.channels = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - Entities.SubscrReqCollection = Backbone.Collection.extend({ - model : Entities.SubscrReq, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - Entities.SubscrReqPageableCollection = Backbone.PageableCollection.extend({ - model : Entities.SubscrReq, - mode : 'server', - url : config.get('service', '') + '/support/subscriptions/requests', - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 100, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - }); - return Lvl.Entities.SubscrReq; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/user.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/user.js deleted file mode 100644 index 159df3f4..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/user.js +++ /dev/null @@ -1,99 +0,0 @@ -/** - * RequireJS module that defines the entity: dataset. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.paginator' ], function(Lvl, Configuration) { - Lvl.module('Entities.User', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.User = Backbone.Model.extend({ - urlRoot : config.get('auth', '') + '/users/', - url : function() { - return this.urlRoot + this.id + '?use_email=true'; - }, - idAttribute : 'email', - defaults : { - provider : '', - userid : '', - email : '' - }, - initialize : function(options) { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - this.oauth2_token = options.oauth2_token; - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.provider) { - errors.provider = 'can\'t be empty'; - } - if (!attrs.userid) { - errors.userid = 'can\'t be empty'; - } - if (!attrs.email) { - errors.email = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - Entities.UserPageableCollection = Backbone.PageableCollection.extend({ - model : Entities.User, - mode : 'server', - // url : 'users.json?burst=' + Math.random(), - url : config.get('auth', '') + '/users', - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 100, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - Entities.UserAllCollection = Backbone.PageableCollection.extend({ - model : Entities.User, - url : config.get('auth', '') + '/users', - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 1000000, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - }); - return Lvl.Entities.User; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/wf_params.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/wf_params.js deleted file mode 100644 index 771869b2..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/wf_params.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * RequireJS module that defines the entity: workflow parameters. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.picky', 'backbone.paginator' ], function(Lvl, Configuration) { - Lvl.module('Entities.WorkflowParameters', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.WorkflowParameters = Backbone.Model.extend({ - defaults : { - description : '', - name : '', - type : '', - value : '' - }, - initialize : function(options) { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.name) { - errors.name = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - Entities.WorkflowParametersCollection = Backbone.Collection.extend({ - urlRoot : config.get('service', '') + '/pipelines/definitions/', - url : function() { - return this.urlRoot + this.workflowId + '/params'; - }, - model : Entities.WorkflowParameters, - comparator : 'name', - initialize : function(options) { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - this.oauth2_token = options.oauth2_token, this.workflowId = options.workflowId - } - }); - }); - return Lvl.Entities.WorkflowParameters; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/workflow.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/workflow.js deleted file mode 100644 index 3101ad02..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/workflow.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * RequireJS module that defines the entity: workflow. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.picky', 'backbone.paginator' ], function(Lvl, Configuration) { - Lvl.module('Entities.Workflow', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.WorkflowDefinition = Backbone.Model.extend({ - defaults : { - id : '', - name : '', - description : '' - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.id) { - errors.id = 'can\'t be empty'; - } - if (!attrs.name) { - errors.name = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - Entities.WorkflowDefinitionCollection = Backbone.Collection.extend({ - model : Entities.WorkflowDefinition, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - Entities.WorkflowDefinitionPageableCollection = Backbone.PageableCollection.extend({ - model : Entities.WorkflowDefinition, - mode : 'server', - // url : 'wrokflow_definition.json?burst=' + Math.random(), - url : config.get('service', '') + '/pipelines/definitions', - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 100, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - }); - return Lvl.Entities.Workflow; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/entities/workflow_run.js b/lvl-project/lvl-bundle/src/main/ui2/js/entities/workflow_run.js deleted file mode 100644 index b487ac3f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/entities/workflow_run.js +++ /dev/null @@ -1,116 +0,0 @@ -/** - * RequireJS module that defines the entity: workflow_run. - */ - -define([ 'app', 'apps/config/marionette/configuration', 'backbone.picky', 'backbone.paginator' ], function(Lvl, Configuration) { - Lvl.module('Entities.WorkflowRun', function(Entities, Lvl, Backbone, Marionette, $, _) { - 'use strict'; - var config = new Configuration(); - Entities.WorkflowRun = Backbone.Model.extend({ - urlRoot : config.get('service', '') + '/pipelines/runs/~/', - defaults : { - id : '', - workflowId : '', - invocationId : '', - parameters : null, - submitter : '', - submitted : '', - status : { - 'completeness' : 0, - 'status' : 'Retrieving status...' - }, - products : null - }, - initialize : function() { - var selectable = new Backbone.Picky.Selectable(this); - _.extend(this, selectable); - }, - validate : function(attrs, options) { - var errors = {}; - if (!attrs.id) { - errors.id = 'can\'t be empty'; - } - if (!attrs.workflowId) { - errors.workflowId = 'can\'t be empty'; - } - if (!attrs.invocationId) { - errors.invocationId = 'can\'t be empty'; - } - if (!attrs.submitter) { - errors.submitter = 'can\'t be empty'; - } - if (!attrs.submitted) { - errors.submitted = 'can\'t be empty'; - } - if (!_.isEmpty(errors)) { - return errors; - } - } - }); - Entities.WorkflowRunCollection = Backbone.Collection.extend({ - model : Entities.WorkflowRun, - comparator : 'id', - initialize : function() { - var singleSelect = new Backbone.Picky.SingleSelect(this); - _.extend(this, singleSelect); - } - }); - Entities.WorkflowRunPageableCollection = Backbone.PageableCollection.extend({ - model : Entities.WorkflowRun, - mode : 'server', - // url : 'workflow_data.json?burst=' + Math.random(), - url : config.get('service', '') + '/pipelines/runs/~', - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 100, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - Entities.WorkflowRunAllCollection = Backbone.PageableCollection.extend({ - model : Entities.WorkflowRun, - url : config.get('service', '') + '/pipelines/runs/~', - initialize : function(options) { - this.oauth2_token = options.oauth2_token - }, - state : { - pageSize : 1000000, - firstPage : 0 - }, - queryParams : { - totalPages : null, - totalRecords : null, - currentPage : 'page', - pageSize : 'per_page', - sortKey : 'sort', - order : 'order' - }, - parseState : function(resp, queryParams, state, options) { - return { - totalRecords : resp.totalCount - }; - }, - parseRecords : function(resp, options) { - return resp.elements; - } - }); - }); - return Lvl.Entities.WorkflowRun; -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/plugins/backbone.oauth2.js b/lvl-project/lvl-bundle/src/main/ui2/js/plugins/backbone.oauth2.js deleted file mode 100644 index 593bf5a0..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/plugins/backbone.oauth2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Backbone.OAuth2 -// Copyright 2014-2015 EUBrazilCC (EU‐Brazil Cloud Connect) -// Licensed under the EUPL license -// Author: Erik Torres -// For HTTP basic authentication with login and password see: https://github.com/fiznool/backbone.basicauth -// For explanation of error wrapper see: https://coderwall.com/p/b047sw/handling-non-200-status-codes-in-backbone - -(function(root, factory) { - if (typeof exports === 'object') { - var underscore = require('underscore'); - var backbone = require('backbone'); - module.exports = factory(underscore, backbone); - } else if (typeof define === 'function' && define.amd) { - define([ 'underscore', 'backbone' ], factory); - } -}(this, function(_, Backbone) { - 'option strict'; - - Backbone.OAuth2 = { - getHeader : function(token) { - return { - 'Authorization' : 'Bearer ' + token - }; - } - }; - - var backboneSync = Backbone.sync; - - // handle non-200 status codes, which are incorrectly considered errors in Backbone - wrapError = function(method, success, error) { - var successCodes = { - create : 201 - }; - if (!successCodes[method]) { - return error; - } - return function(jqXHR, textStatus, errorThrown) { - var wasSuccessful = jqXHR.status === successCodes[method], response; - if (wasSuccessful && _.isFunction(success)) { - response = jqXHR.responseJSON ? jqXHR.responseJSON : {}; - success(response, textStatus, jqXHR); - } else if (_.isFunction(error)) { - error(jqXHR, textStatus, errorThrown); - } - }; - }; - - Backbone.sync = function(method, model, options) { - options = options || {}; - options.error = wrapError(method, options.success, options.error); - var token; - if (model.oauth2_token) { - token = _.result(model, 'oauth2_token'); - } - if (token != null) { - options.headers = options.headers || {}; - _.extend(options.headers, Backbone.OAuth2.getHeader(token)); - } - return backboneSync.call(model, method, model, options); - }; -})); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/requirejs_main.js b/lvl-project/lvl-bundle/src/main/ui2/js/requirejs_main.js deleted file mode 100644 index 731c5201..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/requirejs_main.js +++ /dev/null @@ -1,170 +0,0 @@ -/** - * RequireJS entry point. - */ - -requirejs.config({ - /* avoids cache. Remove on production! */ - urlArgs : 'bust=' + (new Date()).getTime(), - baseUrl : 'js', - paths : { - /* jQuery JavaScript library */ - 'jquery' : [ '//code.jquery.com/jquery-2.1.3.min', 'vendor/cached/jquery.min' ], - 'spin' : [ '//cdnjs.cloudflare.com/ajax/libs/spin.js/2.0.1/spin.min', 'vendor/cached/spin.min' ], // 2.1.0 is unavailable in CDN - 'jquery.spin' : [ '//cdnjs.cloudflare.com/ajax/libs/spin.js/2.0.1/jquery.spin.min', 'vendor/cached/jquery.spin.min' ], // 2.1.0 is unavailable in CDN - /* Boostrap front-end framework */ - 'bootstrap' : [ '//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min', 'vendor/cached/bootstrap.min' ], - 'bootstrapvalidator' : [ '//cdnjs.cloudflare.com/ajax/libs/jquery.bootstrapvalidator/0.5.3/js/bootstrapValidator.min', 'vendor/cached/bootstrapValidator.min' ], // 0.6.2: commercial license - 'bootstrap3-typeahead' : 'vendor/provided/bootstrap3-typeahead.min', - /* Backbone + Marionette MVC framework */ - 'underscore' : [ '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min', 'vendor/cached/underscore-min' ], - 'backbone' : [ '//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min', 'vendor/cached/backbone-min' ], - 'marionette' : [ '//cdnjs.cloudflare.com/ajax/libs/backbone.marionette/2.4.1/backbone.marionette.min', 'vendor/cached/backbone.marionette.min' ], - /* Useful backbone plug-ins */ - 'routefilter' : [ '//cdnjs.cloudflare.com/ajax/libs/backbone.routefilter/0.2.0/backbone.routefilter.min', 'vendor/cached/backbone.routefilter.min' ], - 'backbone.syphon' : [ '//cdnjs.cloudflare.com/ajax/libs/backbone.syphon/0.4.1/backbone.syphon.min', 'vendor/cached/backbone.syphon.min' ], - 'backbone.picky' : 'vendor/provided/backbone.picky.min', - 'backbone.paginator' : 'vendor/provided/backbone.paginator.min', - 'backbone.oauth2' : 'plugins/backbone.oauth2', - /* Data grid based on Backbone */ - 'backgrid' : [ '//cdnjs.cloudflare.com/ajax/libs/backgrid.js/0.3.5/backgrid.min', 'vendor/cached/backgrid.min' ], - 'backgrid-paginator' : 'vendor/provided/backgrid-paginator.min', - 'backgrid-select-all' : 'vendor/provided/backgrid-select-all.min', - 'backgrid-filter' : 'vendor/provided/backgrid-filter.min', - /* OpenLayers */ - 'openlayers' : [ '//cdnjs.cloudflare.com/ajax/libs/ol3/3.4.0/ol.min', 'vendor/cached/ol.min' ], - /* Filesize.js */ - 'filesize' : 'vendor/provided/filesize.min', - /* Chance.js */ - 'chance' : 'vendor/provided/chance.min', // remove map line from JS library to avoid unavailable map error - /* Moment.js */ - 'moment' : [ '//cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.2/moment.min', 'vendor/cached/moment.min' ], - /* Pace */ - 'pace' : [ '//cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min', 'vendor/cached/pace.min' ], - /* qTip2 */ - 'imagesloaded' : [ '//cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/3.1.8/imagesloaded.pkgd.min', 'vendor/cached/imagesloaded.pkgd.min' ], - 'qtip' : [ '//cdn.jsdelivr.net/qtip2/2.2.0/jquery.qtip.min', 'vendor/cached/jquery.qtip.min' ], // use 2.2.0 instead of 2.2.1 to avoid unavailable map error - /* jsPhyloSVG */ - 'raphael' : [ '//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.2/raphael-min', 'vendor/cached/raphael-min' ], - 'jsphylosvg' : 'vendor/provided/jsphylosvg-min', - /* Chart.js */ - 'chartjs' : [ '//cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.min', 'vendor/cached/Chart.min' ], - /* Hopscotch */ - 'hopscotch' : [ '//cdnjs.cloudflare.com/ajax/libs/hopscotch/0.2.3/js/hopscotch.min', 'vendor/cached/hopscotch.min' ], - /* Add support for underscore templates */ - 'text' : [ '//cdnjs.cloudflare.com/ajax/libs/require-text/2.0.12/text.min', 'vendor/cached/text.min' ], - 'tpl' : [ '//cdnjs.cloudflare.com/ajax/libs/requirejs-tpl/0.0.2/tpl.min', 'vendor/cached/tpl.min' ], - /* Wait for the DOM is ready */ - 'domReady' : [ '//cdnjs.cloudflare.com/ajax/libs/require-domReady/2.0.1/domReady.min', 'vendor/cached/domReady.min' ] - }, - shim : { - 'jquery.spin' : { - deps : [ 'spin', 'jquery' ] - }, - 'bootstrap' : { - deps : [ 'jquery' ] - }, - 'bootstrapvalidator' : { - deps : [ 'bootstrap' ], - exports : 'BootstrapValidator' - }, - 'bootstrap3-typeahead' : { - deps : [ 'bootstrap' ] - }, - 'underscore' : { - exports : '_' - }, - 'backbone' : { - deps : [ 'jquery', 'underscore' ], - exports : 'Backbone' - }, - 'routefilter' : { - deps : [ 'backbone' ] - }, - 'backbone.syphon' : { - deps : [ 'backbone' ] - }, - 'backbone.picky' : { - deps : [ 'backbone' ] - }, - 'backbone.paginator' : { - deps : [ 'backbone' ] - }, - 'backbone.oauth2' : { - deps : [ 'backbone' ] - }, - 'backgrid' : { - deps : [ 'backbone' ], - exports : 'Backgrid' - }, - 'backgrid-paginator' : { - deps : [ 'backgrid', 'backbone.paginator' ] - }, - 'backgrid-select-all' : { - deps : [ 'backgrid' ] - }, - 'backgrid-filter' : { - deps : [ 'backgrid' ] - }, - 'marionette' : { - deps : [ 'backbone' ], - exports : 'Marionette' - }, - 'openlayers' : { - deps : [ 'jquery' ], - exports : 'ol' - }, - 'chance' : { - exports : 'Chance' - }, - 'moment' : { - deps : [ 'jquery' ] - }, - 'imagesloaded' : { - deps : [ 'jquery' ] - }, - 'qtip' : { - deps : [ 'jquery', 'imagesloaded' ] - }, - 'raphael' : { - exports : 'Raphael' - }, - 'jsphylosvg' : { - deps : [ 'raphael' ], - exports : 'Smits' - }, - 'chartjs' : { - exports : 'Chart' - }, - 'hopscotch' : { - exports : 'hopscotch' - }, - 'tpl' : { - deps : [ 'text' ] - }, - 'domReady' : [] - }, - callback : function() { - require([ 'jquery' ], function() { - // tell jQuery to watch for any 401, 403 or 404 errors and handle them - // appropriately - $.ajaxSetup({ - statusCode : { - 401 : function() { - window.location.replace('#login/home/unauthenticated'); - }, - 403 : function() { - window.location.replace('#denied'); - }, - 404 : function() { - window.location.replace('#not-found'); - } - } - }); - }); - }, - waitSeconds : 7 -}); - -require([ 'app', 'jquery', 'bootstrap' ], function(Lvl) { - Lvl.start(); -}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/Chart.min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/Chart.min.js deleted file mode 100644 index c4c4ef05..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/Chart.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * Chart.js - * http://chartjs.org/ - * Version: 1.0.1 - * - * Copyright 2015 Nick Downie - * Released under the MIT license - * https://github.com/nnnick/Chart.js/blob/master/LICENSE.md - */ -(function(){"use strict";var t=this,i=t.Chart,e=function(t){this.canvas=t.canvas,this.ctx=t;var i=function(t,i){return t["offset"+i]?t["offset"+i]:document.defaultView.getComputedStyle(t).getPropertyValue(i)},e=this.width=i(t.canvas,"Width"),n=this.height=i(t.canvas,"Height");t.canvas.width=e,t.canvas.height=n;var e=this.width=t.canvas.width,n=this.height=t.canvas.height;return this.aspectRatio=this.width/this.height,s.retinaScale(this),this};e.defaults={global:{animation:!0,animationSteps:60,animationEasing:"easeOutQuart",showScale:!0,scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!0,scaleLabel:"<%=value%>",scaleIntegersOnly:!0,scaleBeginAtZero:!1,scaleFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",responsive:!1,maintainAspectRatio:!0,showTooltips:!0,customTooltips:!1,tooltipEvents:["mousemove","touchstart","touchmove","mouseout"],tooltipFillColor:"rgba(0,0,0,0.8)",tooltipFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",tooltipFontSize:14,tooltipFontStyle:"normal",tooltipFontColor:"#fff",tooltipTitleFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",tooltipTitleFontSize:14,tooltipTitleFontStyle:"bold",tooltipTitleFontColor:"#fff",tooltipYPadding:6,tooltipXPadding:6,tooltipCaretSize:8,tooltipCornerRadius:6,tooltipXOffset:10,tooltipTemplate:"<%if (label){%><%=label%>: <%}%><%= value %>",multiTooltipTemplate:"<%= value %>",multiTooltipKeyBackground:"#fff",onAnimationProgress:function(){},onAnimationComplete:function(){}}},e.types={};var s=e.helpers={},n=s.each=function(t,i,e){var s=Array.prototype.slice.call(arguments,3);if(t)if(t.length===+t.length){var n;for(n=0;n=0;s--){var n=t[s];if(i(n))return n}},s.inherits=function(t){var i=this,e=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return i.apply(this,arguments)},s=function(){this.constructor=e};return s.prototype=i.prototype,e.prototype=new s,e.extend=r,t&&a(e.prototype,t),e.__super__=i.prototype,e}),c=s.noop=function(){},u=s.uid=function(){var t=0;return function(){return"chart-"+t++}}(),d=s.warn=function(t){window.console&&"function"==typeof window.console.warn&&console.warn(t)},p=s.amd="function"==typeof define&&define.amd,f=s.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},g=s.max=function(t){return Math.max.apply(Math,t)},m=s.min=function(t){return Math.min.apply(Math,t)},v=(s.cap=function(t,i,e){if(f(i)){if(t>i)return i}else if(f(e)&&e>t)return e;return t},s.getDecimalPlaces=function(t){return t%1!==0&&f(t)?t.toString().split(".")[1].length:0}),S=s.radians=function(t){return t*(Math.PI/180)},x=(s.getAngleFromPoint=function(t,i){var e=i.x-t.x,s=i.y-t.y,n=Math.sqrt(e*e+s*s),o=2*Math.PI+Math.atan2(s,e);return 0>e&&0>s&&(o+=2*Math.PI),{angle:o,distance:n}},s.aliasPixel=function(t){return t%2===0?0:.5}),y=(s.splineCurve=function(t,i,e,s){var n=Math.sqrt(Math.pow(i.x-t.x,2)+Math.pow(i.y-t.y,2)),o=Math.sqrt(Math.pow(e.x-i.x,2)+Math.pow(e.y-i.y,2)),a=s*n/(n+o),h=s*o/(n+o);return{inner:{x:i.x-a*(e.x-t.x),y:i.y-a*(e.y-t.y)},outer:{x:i.x+h*(e.x-t.x),y:i.y+h*(e.y-t.y)}}},s.calculateOrderOfMagnitude=function(t){return Math.floor(Math.log(t)/Math.LN10)}),C=(s.calculateScaleRange=function(t,i,e,s,n){var o=2,a=Math.floor(i/(1.5*e)),h=o>=a,l=g(t),r=m(t);l===r&&(l+=.5,r>=.5&&!s?r-=.5:l+=.5);for(var c=Math.abs(l-r),u=y(c),d=Math.ceil(l/(1*Math.pow(10,u)))*Math.pow(10,u),p=s?0:Math.floor(r/(1*Math.pow(10,u)))*Math.pow(10,u),f=d-p,v=Math.pow(10,u),S=Math.round(f/v);(S>a||a>2*S)&&!h;)if(S>a)v*=2,S=Math.round(f/v),S%1!==0&&(h=!0);else if(n&&u>=0){if(v/2%1!==0)break;v/=2,S=Math.round(f/v)}else v/=2,S=Math.round(f/v);return h&&(S=o,v=f/S),{steps:S,stepValue:v,min:p,max:p+S*v}},s.template=function(t,i){function e(t,i){var e=/\W/.test(t)?new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+t.replace(/[\r\t\n]/g," ").split("<%").join(" ").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split(" ").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');"):s[t]=s[t];return i?e(i):e}if(t instanceof Function)return t(i);var s={};return e(t,i)}),w=(s.generateLabels=function(t,i,e,s){var o=new Array(i);return labelTemplateString&&n(o,function(i,n){o[n]=C(t,{value:e+s*(n+1)})}),o},s.easingEffects={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-1*t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-0.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return 1*((t=t/1-1)*t*t+1)},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-1*((t=t/1-1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-0.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return 1*(t/=1)*t*t*t*t},easeOutQuint:function(t){return 1*((t=t/1-1)*t*t*t*t+1)},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return-1*Math.cos(t/1*(Math.PI/2))+1},easeOutSine:function(t){return 1*Math.sin(t/1*(Math.PI/2))},easeInOutSine:function(t){return-0.5*(Math.cos(Math.PI*t/1)-1)},easeInExpo:function(t){return 0===t?1:1*Math.pow(2,10*(t/1-1))},easeOutExpo:function(t){return 1===t?1:1*(-Math.pow(2,-10*t/1)+1)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(-Math.pow(2,-10*--t)+2)},easeInCirc:function(t){return t>=1?t:-1*(Math.sqrt(1-(t/=1)*t)-1)},easeOutCirc:function(t){return 1*Math.sqrt(1-(t=t/1-1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-0.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var i=1.70158,e=0,s=1;return 0===t?0:1==(t/=1)?1:(e||(e=.3),st?-.5*s*Math.pow(2,10*(t-=1))*Math.sin(2*(1*t-i)*Math.PI/e):s*Math.pow(2,-10*(t-=1))*Math.sin(2*(1*t-i)*Math.PI/e)*.5+1)},easeInBack:function(t){var i=1.70158;return 1*(t/=1)*t*((i+1)*t-i)},easeOutBack:function(t){var i=1.70158;return 1*((t=t/1-1)*t*((i+1)*t+i)+1)},easeInOutBack:function(t){var i=1.70158;return(t/=.5)<1?.5*t*t*(((i*=1.525)+1)*t-i):.5*((t-=2)*t*(((i*=1.525)+1)*t+i)+2)},easeInBounce:function(t){return 1-w.easeOutBounce(1-t)},easeOutBounce:function(t){return(t/=1)<1/2.75?7.5625*t*t:2/2.75>t?1*(7.5625*(t-=1.5/2.75)*t+.75):2.5/2.75>t?1*(7.5625*(t-=2.25/2.75)*t+.9375):1*(7.5625*(t-=2.625/2.75)*t+.984375)},easeInOutBounce:function(t){return.5>t?.5*w.easeInBounce(2*t):.5*w.easeOutBounce(2*t-1)+.5}}),b=s.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)}}(),P=s.cancelAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||window.oCancelAnimationFrame||window.msCancelAnimationFrame||function(t){return window.clearTimeout(t,1e3/60)}}(),L=(s.animationLoop=function(t,i,e,s,n,o){var a=0,h=w[e]||w.linear,l=function(){a++;var e=a/i,r=h(e);t.call(o,r,e,a),s.call(o,r,e),i>a?o.animationFrame=b(l):n.apply(o)};b(l)},s.getRelativePosition=function(t){var i,e,s=t.originalEvent||t,n=t.currentTarget||t.srcElement,o=n.getBoundingClientRect();return s.touches?(i=s.touches[0].clientX-o.left,e=s.touches[0].clientY-o.top):(i=s.clientX-o.left,e=s.clientY-o.top),{x:i,y:e}},s.addEvent=function(t,i,e){t.addEventListener?t.addEventListener(i,e):t.attachEvent?t.attachEvent("on"+i,e):t["on"+i]=e}),k=s.removeEvent=function(t,i,e){t.removeEventListener?t.removeEventListener(i,e,!1):t.detachEvent?t.detachEvent("on"+i,e):t["on"+i]=c},F=(s.bindEvents=function(t,i,e){t.events||(t.events={}),n(i,function(i){t.events[i]=function(){e.apply(t,arguments)},L(t.chart.canvas,i,t.events[i])})},s.unbindEvents=function(t,i){n(i,function(i,e){k(t.chart.canvas,e,i)})}),R=s.getMaximumWidth=function(t){var i=t.parentNode;return i.clientWidth},T=s.getMaximumHeight=function(t){var i=t.parentNode;return i.clientHeight},A=(s.getMaximumSize=s.getMaximumWidth,s.retinaScale=function(t){var i=t.ctx,e=t.canvas.width,s=t.canvas.height;window.devicePixelRatio&&(i.canvas.style.width=e+"px",i.canvas.style.height=s+"px",i.canvas.height=s*window.devicePixelRatio,i.canvas.width=e*window.devicePixelRatio,i.scale(window.devicePixelRatio,window.devicePixelRatio))}),M=s.clear=function(t){t.ctx.clearRect(0,0,t.width,t.height)},W=s.fontString=function(t,i,e){return i+" "+t+"px "+e},z=s.longestText=function(t,i,e){t.font=i;var s=0;return n(e,function(i){var e=t.measureText(i).width;s=e>s?e:s}),s},B=s.drawRoundedRectangle=function(t,i,e,s,n,o){t.beginPath(),t.moveTo(i+o,e),t.lineTo(i+s-o,e),t.quadraticCurveTo(i+s,e,i+s,e+o),t.lineTo(i+s,e+n-o),t.quadraticCurveTo(i+s,e+n,i+s-o,e+n),t.lineTo(i+o,e+n),t.quadraticCurveTo(i,e+n,i,e+n-o),t.lineTo(i,e+o),t.quadraticCurveTo(i,e,i+o,e),t.closePath()};e.instances={},e.Type=function(t,i,s){this.options=i,this.chart=s,this.id=u(),e.instances[this.id]=this,i.responsive&&this.resize(),this.initialize.call(this,t)},a(e.Type.prototype,{initialize:function(){return this},clear:function(){return M(this.chart),this},stop:function(){return P(this.animationFrame),this},resize:function(t){this.stop();var i=this.chart.canvas,e=R(this.chart.canvas),s=this.options.maintainAspectRatio?e/this.chart.aspectRatio:T(this.chart.canvas);return i.width=this.chart.width=e,i.height=this.chart.height=s,A(this.chart),"function"==typeof t&&t.apply(this,Array.prototype.slice.call(arguments,1)),this},reflow:c,render:function(t){return t&&this.reflow(),this.options.animation&&!t?s.animationLoop(this.draw,this.options.animationSteps,this.options.animationEasing,this.options.onAnimationProgress,this.options.onAnimationComplete,this):(this.draw(),this.options.onAnimationComplete.call(this)),this},generateLegend:function(){return C(this.options.legendTemplate,this)},destroy:function(){this.clear(),F(this,this.events);var t=this.chart.canvas;t.width=this.chart.width,t.height=this.chart.height,t.style.removeProperty?(t.style.removeProperty("width"),t.style.removeProperty("height")):(t.style.removeAttribute("width"),t.style.removeAttribute("height")),delete e.instances[this.id]},showTooltip:function(t,i){"undefined"==typeof this.activeElements&&(this.activeElements=[]);var o=function(t){var i=!1;return t.length!==this.activeElements.length?i=!0:(n(t,function(t,e){t!==this.activeElements[e]&&(i=!0)},this),i)}.call(this,t);if(o||i){if(this.activeElements=t,this.draw(),this.options.customTooltips&&this.options.customTooltips(!1),t.length>0)if(this.datasets&&this.datasets.length>1){for(var a,h,r=this.datasets.length-1;r>=0&&(a=this.datasets[r].points||this.datasets[r].bars||this.datasets[r].segments,h=l(a,t[0]),-1===h);r--);var c=[],u=[],d=function(){var t,i,e,n,o,a=[],l=[],r=[];return s.each(this.datasets,function(i){t=i.points||i.bars||i.segments,t[h]&&t[h].hasValue()&&a.push(t[h])}),s.each(a,function(t){l.push(t.x),r.push(t.y),c.push(s.template(this.options.multiTooltipTemplate,t)),u.push({fill:t._saved.fillColor||t.fillColor,stroke:t._saved.strokeColor||t.strokeColor})},this),o=m(r),e=g(r),n=m(l),i=g(l),{x:n>this.chart.width/2?n:i,y:(o+e)/2}}.call(this,h);new e.MultiTooltip({x:d.x,y:d.y,xPadding:this.options.tooltipXPadding,yPadding:this.options.tooltipYPadding,xOffset:this.options.tooltipXOffset,fillColor:this.options.tooltipFillColor,textColor:this.options.tooltipFontColor,fontFamily:this.options.tooltipFontFamily,fontStyle:this.options.tooltipFontStyle,fontSize:this.options.tooltipFontSize,titleTextColor:this.options.tooltipTitleFontColor,titleFontFamily:this.options.tooltipTitleFontFamily,titleFontStyle:this.options.tooltipTitleFontStyle,titleFontSize:this.options.tooltipTitleFontSize,cornerRadius:this.options.tooltipCornerRadius,labels:c,legendColors:u,legendColorBackground:this.options.multiTooltipKeyBackground,title:t[0].label,chart:this.chart,ctx:this.chart.ctx,custom:this.options.customTooltips}).draw()}else n(t,function(t){var i=t.tooltipPosition();new e.Tooltip({x:Math.round(i.x),y:Math.round(i.y),xPadding:this.options.tooltipXPadding,yPadding:this.options.tooltipYPadding,fillColor:this.options.tooltipFillColor,textColor:this.options.tooltipFontColor,fontFamily:this.options.tooltipFontFamily,fontStyle:this.options.tooltipFontStyle,fontSize:this.options.tooltipFontSize,caretHeight:this.options.tooltipCaretSize,cornerRadius:this.options.tooltipCornerRadius,text:C(this.options.tooltipTemplate,t),chart:this.chart,custom:this.options.customTooltips}).draw()},this);return this}},toBase64Image:function(){return this.chart.canvas.toDataURL.apply(this.chart.canvas,arguments)}}),e.Type.extend=function(t){var i=this,s=function(){return i.apply(this,arguments)};if(s.prototype=o(i.prototype),a(s.prototype,t),s.extend=e.Type.extend,t.name||i.prototype.name){var n=t.name||i.prototype.name,l=e.defaults[i.prototype.name]?o(e.defaults[i.prototype.name]):{};e.defaults[n]=a(l,t.defaults),e.types[n]=s,e.prototype[n]=function(t,i){var o=h(e.defaults.global,e.defaults[n],i||{});return new s(t,o,this)}}else d("Name not provided for this chart, so it hasn't been registered");return i},e.Element=function(t){a(this,t),this.initialize.apply(this,arguments),this.save()},a(e.Element.prototype,{initialize:function(){},restore:function(t){return t?n(t,function(t){this[t]=this._saved[t]},this):a(this,this._saved),this},save:function(){return this._saved=o(this),delete this._saved._saved,this},update:function(t){return n(t,function(t,i){this._saved[i]=this[i],this[i]=t},this),this},transition:function(t,i){return n(t,function(t,e){this[e]=(t-this._saved[e])*i+this._saved[e]},this),this},tooltipPosition:function(){return{x:this.x,y:this.y}},hasValue:function(){return f(this.value)}}),e.Element.extend=r,e.Point=e.Element.extend({display:!0,inRange:function(t,i){var e=this.hitDetectionRadius+this.radius;return Math.pow(t-this.x,2)+Math.pow(i-this.y,2)=this.startAngle&&e.angle<=this.endAngle,o=e.distance>=this.innerRadius&&e.distance<=this.outerRadius;return n&&o},tooltipPosition:function(){var t=this.startAngle+(this.endAngle-this.startAngle)/2,i=(this.outerRadius-this.innerRadius)/2+this.innerRadius;return{x:this.x+Math.cos(t)*i,y:this.y+Math.sin(t)*i}},draw:function(t){var i=this.ctx;i.beginPath(),i.arc(this.x,this.y,this.outerRadius,this.startAngle,this.endAngle),i.arc(this.x,this.y,this.innerRadius,this.endAngle,this.startAngle,!0),i.closePath(),i.strokeStyle=this.strokeColor,i.lineWidth=this.strokeWidth,i.fillStyle=this.fillColor,i.fill(),i.lineJoin="bevel",this.showStroke&&i.stroke()}}),e.Rectangle=e.Element.extend({draw:function(){var t=this.ctx,i=this.width/2,e=this.x-i,s=this.x+i,n=this.base-(this.base-this.y),o=this.strokeWidth/2;this.showStroke&&(e+=o,s-=o,n+=o),t.beginPath(),t.fillStyle=this.fillColor,t.strokeStyle=this.strokeColor,t.lineWidth=this.strokeWidth,t.moveTo(e,this.base),t.lineTo(e,n),t.lineTo(s,n),t.lineTo(s,this.base),t.fill(),this.showStroke&&t.stroke()},height:function(){return this.base-this.y},inRange:function(t,i){return t>=this.x-this.width/2&&t<=this.x+this.width/2&&i>=this.y&&i<=this.base}}),e.Tooltip=e.Element.extend({draw:function(){var t=this.chart.ctx;t.font=W(this.fontSize,this.fontStyle,this.fontFamily),this.xAlign="center",this.yAlign="above";var i=this.caretPadding=2,e=t.measureText(this.text).width+2*this.xPadding,s=this.fontSize+2*this.yPadding,n=s+this.caretHeight+i;this.x+e/2>this.chart.width?this.xAlign="left":this.x-e/2<0&&(this.xAlign="right"),this.y-n<0&&(this.yAlign="below");var o=this.x-e/2,a=this.y-n;if(t.fillStyle=this.fillColor,this.custom)this.custom(this);else{switch(this.yAlign){case"above":t.beginPath(),t.moveTo(this.x,this.y-i),t.lineTo(this.x+this.caretHeight,this.y-(i+this.caretHeight)),t.lineTo(this.x-this.caretHeight,this.y-(i+this.caretHeight)),t.closePath(),t.fill();break;case"below":a=this.y+i+this.caretHeight,t.beginPath(),t.moveTo(this.x,this.y+i),t.lineTo(this.x+this.caretHeight,this.y+i+this.caretHeight),t.lineTo(this.x-this.caretHeight,this.y+i+this.caretHeight),t.closePath(),t.fill()}switch(this.xAlign){case"left":o=this.x-e+(this.cornerRadius+this.caretHeight);break;case"right":o=this.x-(this.cornerRadius+this.caretHeight)}B(t,o,a,e,s,this.cornerRadius),t.fill(),t.fillStyle=this.textColor,t.textAlign="center",t.textBaseline="middle",t.fillText(this.text,o+e/2,a+s/2)}}}),e.MultiTooltip=e.Element.extend({initialize:function(){this.font=W(this.fontSize,this.fontStyle,this.fontFamily),this.titleFont=W(this.titleFontSize,this.titleFontStyle,this.titleFontFamily),this.height=this.labels.length*this.fontSize+(this.labels.length-1)*(this.fontSize/2)+2*this.yPadding+1.5*this.titleFontSize,this.ctx.font=this.titleFont;var t=this.ctx.measureText(this.title).width,i=z(this.ctx,this.font,this.labels)+this.fontSize+3,e=g([i,t]);this.width=e+2*this.xPadding;var s=this.height/2;this.y-s<0?this.y=s:this.y+s>this.chart.height&&(this.y=this.chart.height-s),this.x>this.chart.width/2?this.x-=this.xOffset+this.width:this.x+=this.xOffset},getLineHeight:function(t){var i=this.y-this.height/2+this.yPadding,e=t-1;return 0===t?i+this.titleFontSize/2:i+(1.5*this.fontSize*e+this.fontSize/2)+1.5*this.titleFontSize},draw:function(){if(this.custom)this.custom(this);else{B(this.ctx,this.x,this.y-this.height/2,this.width,this.height,this.cornerRadius);var t=this.ctx;t.fillStyle=this.fillColor,t.fill(),t.closePath(),t.textAlign="left",t.textBaseline="middle",t.fillStyle=this.titleTextColor,t.font=this.titleFont,t.fillText(this.title,this.x+this.xPadding,this.getLineHeight(0)),t.font=this.font,s.each(this.labels,function(i,e){t.fillStyle=this.textColor,t.fillText(i,this.x+this.xPadding+this.fontSize+3,this.getLineHeight(e+1)),t.fillStyle=this.legendColorBackground,t.fillRect(this.x+this.xPadding,this.getLineHeight(e+1)-this.fontSize/2,this.fontSize,this.fontSize),t.fillStyle=this.legendColors[e].fill,t.fillRect(this.x+this.xPadding,this.getLineHeight(e+1)-this.fontSize/2,this.fontSize,this.fontSize)},this)}}}),e.Scale=e.Element.extend({initialize:function(){this.fit()},buildYLabels:function(){this.yLabels=[];for(var t=v(this.stepValue),i=0;i<=this.steps;i++)this.yLabels.push(C(this.templateString,{value:(this.min+i*this.stepValue).toFixed(t)}));this.yLabelWidth=this.display&&this.showLabels?z(this.ctx,this.font,this.yLabels):0},addXLabel:function(t){this.xLabels.push(t),this.valuesCount++,this.fit()},removeXLabel:function(){this.xLabels.shift(),this.valuesCount--,this.fit()},fit:function(){this.startPoint=this.display?this.fontSize:0,this.endPoint=this.display?this.height-1.5*this.fontSize-5:this.height,this.startPoint+=this.padding,this.endPoint-=this.padding;var t,i=this.endPoint-this.startPoint;for(this.calculateYRange(i),this.buildYLabels(),this.calculateXLabelRotation();i>this.endPoint-this.startPoint;)i=this.endPoint-this.startPoint,t=this.yLabelWidth,this.calculateYRange(i),this.buildYLabels(),tthis.yLabelWidth+10?e/2:this.yLabelWidth+10,this.xLabelRotation=0,this.display){var n,o=z(this.ctx,this.font,this.xLabels);this.xLabelWidth=o;for(var a=Math.floor(this.calculateX(1)-this.calculateX(0))-6;this.xLabelWidth>a&&0===this.xLabelRotation||this.xLabelWidth>a&&this.xLabelRotation<=90&&this.xLabelRotation>0;)n=Math.cos(S(this.xLabelRotation)),t=n*e,i=n*s,t+this.fontSize/2>this.yLabelWidth+8&&(this.xScalePaddingLeft=t+this.fontSize/2),this.xScalePaddingRight=this.fontSize/2,this.xLabelRotation++,this.xLabelWidth=n*o;this.xLabelRotation>0&&(this.endPoint-=Math.sin(S(this.xLabelRotation))*o+3)}else this.xLabelWidth=0,this.xScalePaddingRight=this.padding,this.xScalePaddingLeft=this.padding},calculateYRange:c,drawingArea:function(){return this.startPoint-this.endPoint},calculateY:function(t){var i=this.drawingArea()/(this.min-this.max);return this.endPoint-i*(t-this.min)},calculateX:function(t){var i=(this.xLabelRotation>0,this.width-(this.xScalePaddingLeft+this.xScalePaddingRight)),e=i/Math.max(this.valuesCount-(this.offsetGridLines?0:1),1),s=e*t+this.xScalePaddingLeft;return this.offsetGridLines&&(s+=e/2),Math.round(s)},update:function(t){s.extend(this,t),this.fit()},draw:function(){var t=this.ctx,i=(this.endPoint-this.startPoint)/this.steps,e=Math.round(this.xScalePaddingLeft);this.display&&(t.fillStyle=this.textColor,t.font=this.font,n(this.yLabels,function(n,o){var a=this.endPoint-i*o,h=Math.round(a),l=this.showHorizontalLines;t.textAlign="right",t.textBaseline="middle",this.showLabels&&t.fillText(n,e-10,a),0!==o||l||(l=!0),l&&t.beginPath(),o>0?(t.lineWidth=this.gridLineWidth,t.strokeStyle=this.gridLineColor):(t.lineWidth=this.lineWidth,t.strokeStyle=this.lineColor),h+=s.aliasPixel(t.lineWidth),l&&(t.moveTo(e,h),t.lineTo(this.width,h),t.stroke(),t.closePath()),t.lineWidth=this.lineWidth,t.strokeStyle=this.lineColor,t.beginPath(),t.moveTo(e-5,h),t.lineTo(e,h),t.stroke(),t.closePath()},this),n(this.xLabels,function(i,e){var s=this.calculateX(e)+x(this.lineWidth),n=this.calculateX(e-(this.offsetGridLines?.5:0))+x(this.lineWidth),o=this.xLabelRotation>0,a=this.showVerticalLines;0!==e||a||(a=!0),a&&t.beginPath(),e>0?(t.lineWidth=this.gridLineWidth,t.strokeStyle=this.gridLineColor):(t.lineWidth=this.lineWidth,t.strokeStyle=this.lineColor),a&&(t.moveTo(n,this.endPoint),t.lineTo(n,this.startPoint-3),t.stroke(),t.closePath()),t.lineWidth=this.lineWidth,t.strokeStyle=this.lineColor,t.beginPath(),t.moveTo(n,this.endPoint),t.lineTo(n,this.endPoint+5),t.stroke(),t.closePath(),t.save(),t.translate(s,o?this.endPoint+12:this.endPoint+8),t.rotate(-1*S(this.xLabelRotation)),t.font=this.font,t.textAlign=o?"right":"center",t.textBaseline=o?"middle":"top",t.fillText(i,0,0),t.restore()},this))}}),e.RadialScale=e.Element.extend({initialize:function(){this.size=m([this.height,this.width]),this.drawingArea=this.display?this.size/2-(this.fontSize/2+this.backdropPaddingY):this.size/2},calculateCenterOffset:function(t){var i=this.drawingArea/(this.max-this.min);return(t-this.min)*i},update:function(){this.lineArc?this.drawingArea=this.display?this.size/2-(this.fontSize/2+this.backdropPaddingY):this.size/2:this.setScaleSize(),this.buildYLabels()},buildYLabels:function(){this.yLabels=[];for(var t=v(this.stepValue),i=0;i<=this.steps;i++)this.yLabels.push(C(this.templateString,{value:(this.min+i*this.stepValue).toFixed(t)}))},getCircumference:function(){return 2*Math.PI/this.valuesCount},setScaleSize:function(){var t,i,e,s,n,o,a,h,l,r,c,u,d=m([this.height/2-this.pointLabelFontSize-5,this.width/2]),p=this.width,g=0;for(this.ctx.font=W(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily),i=0;ip&&(p=t.x+s,n=i),t.x-sp&&(p=t.x+e,n=i):i>this.valuesCount/2&&t.x-e0){var s,n=e*(this.drawingArea/this.steps),o=this.yCenter-n;if(this.lineWidth>0)if(t.strokeStyle=this.lineColor,t.lineWidth=this.lineWidth,this.lineArc)t.beginPath(),t.arc(this.xCenter,this.yCenter,n,0,2*Math.PI),t.closePath(),t.stroke();else{t.beginPath();for(var a=0;a=0;i--){if(this.angleLineWidth>0){var e=this.getPointPosition(i,this.calculateCenterOffset(this.max));t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(e.x,e.y),t.stroke(),t.closePath()}var s=this.getPointPosition(i,this.calculateCenterOffset(this.max)+5);t.font=W(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily),t.fillStyle=this.pointLabelFontColor;var o=this.labels.length,a=this.labels.length/2,h=a/2,l=h>i||i>o-h,r=i===h||i===o-h;t.textAlign=0===i?"center":i===a?"center":a>i?"left":"right",t.textBaseline=r?"middle":l?"bottom":"top",t.fillText(this.labels[i],s.x,s.y)}}}}}),s.addEvent(window,"resize",function(){var t;return function(){clearTimeout(t),t=setTimeout(function(){n(e.instances,function(t){t.options.responsive&&t.resize(t.render,!0)})},50)}}()),p?define(function(){return e}):"object"==typeof module&&module.exports&&(module.exports=e),t.Chart=e,e.noConflict=function(){return t.Chart=i,e}}).call(this),function(){"use strict";var t=this,i=t.Chart,e=i.helpers,s={scaleBeginAtZero:!0,scaleShowGridLines:!0,scaleGridLineColor:"rgba(0,0,0,.05)",scaleGridLineWidth:1,scaleShowHorizontalLines:!0,scaleShowVerticalLines:!0,barShowStroke:!0,barStrokeWidth:2,barValueSpacing:5,barDatasetSpacing:1,legendTemplate:'
      <% for (var i=0; i
    • <%if(datasets[i].label){%><%=datasets[i].label%><%}%>
    • <%}%>
    '};i.Type.extend({name:"Bar",defaults:s,initialize:function(t){var s=this.options;this.ScaleClass=i.Scale.extend({offsetGridLines:!0,calculateBarX:function(t,i,e){var n=this.calculateBaseWidth(),o=this.calculateX(e)-n/2,a=this.calculateBarWidth(t);return o+a*i+i*s.barDatasetSpacing+a/2},calculateBaseWidth:function(){return this.calculateX(1)-this.calculateX(0)-2*s.barValueSpacing},calculateBarWidth:function(t){var i=this.calculateBaseWidth()-(t-1)*s.barDatasetSpacing;return i/t}}),this.datasets=[],this.options.showTooltips&&e.bindEvents(this,this.options.tooltipEvents,function(t){var i="mouseout"!==t.type?this.getBarsAtEvent(t):[];this.eachBars(function(t){t.restore(["fillColor","strokeColor"])}),e.each(i,function(t){t.fillColor=t.highlightFill,t.strokeColor=t.highlightStroke}),this.showTooltip(i)}),this.BarClass=i.Rectangle.extend({strokeWidth:this.options.barStrokeWidth,showStroke:this.options.barShowStroke,ctx:this.chart.ctx}),e.each(t.datasets,function(i){var s={label:i.label||null,fillColor:i.fillColor,strokeColor:i.strokeColor,bars:[]};this.datasets.push(s),e.each(i.data,function(e,n){s.bars.push(new this.BarClass({value:e,label:t.labels[n],datasetLabel:i.label,strokeColor:i.strokeColor,fillColor:i.fillColor,highlightFill:i.highlightFill||i.fillColor,highlightStroke:i.highlightStroke||i.strokeColor}))},this)},this),this.buildScale(t.labels),this.BarClass.prototype.base=this.scale.endPoint,this.eachBars(function(t,i,s){e.extend(t,{width:this.scale.calculateBarWidth(this.datasets.length),x:this.scale.calculateBarX(this.datasets.length,s,i),y:this.scale.endPoint}),t.save()},this),this.render()},update:function(){this.scale.update(),e.each(this.activeElements,function(t){t.restore(["fillColor","strokeColor"])}),this.eachBars(function(t){t.save()}),this.render()},eachBars:function(t){e.each(this.datasets,function(i,s){e.each(i.bars,t,this,s)},this)},getBarsAtEvent:function(t){for(var i,s=[],n=e.getRelativePosition(t),o=function(t){s.push(t.bars[i])},a=0;a<% for (var i=0; i
  • <%if(segments[i].label){%><%=segments[i].label%><%}%>
  • <%}%>'};i.Type.extend({name:"Doughnut",defaults:s,initialize:function(t){this.segments=[],this.outerRadius=(e.min([this.chart.width,this.chart.height])-this.options.segmentStrokeWidth/2)/2,this.SegmentArc=i.Arc.extend({ctx:this.chart.ctx,x:this.chart.width/2,y:this.chart.height/2}),this.options.showTooltips&&e.bindEvents(this,this.options.tooltipEvents,function(t){var i="mouseout"!==t.type?this.getSegmentsAtEvent(t):[];e.each(this.segments,function(t){t.restore(["fillColor"])}),e.each(i,function(t){t.fillColor=t.highlightColor}),this.showTooltip(i)}),this.calculateTotal(t),e.each(t,function(t,i){this.addData(t,i,!0)},this),this.render()},getSegmentsAtEvent:function(t){var i=[],s=e.getRelativePosition(t);return e.each(this.segments,function(t){t.inRange(s.x,s.y)&&i.push(t)},this),i},addData:function(t,i,e){var s=i||this.segments.length;this.segments.splice(s,0,new this.SegmentArc({value:t.value,outerRadius:this.options.animateScale?0:this.outerRadius,innerRadius:this.options.animateScale?0:this.outerRadius/100*this.options.percentageInnerCutout,fillColor:t.color,highlightColor:t.highlight||t.color,showStroke:this.options.segmentShowStroke,strokeWidth:this.options.segmentStrokeWidth,strokeColor:this.options.segmentStrokeColor,startAngle:1.5*Math.PI,circumference:this.options.animateRotate?0:this.calculateCircumference(t.value),label:t.label})),e||(this.reflow(),this.update())},calculateCircumference:function(t){return 2*Math.PI*(Math.abs(t)/this.total)},calculateTotal:function(t){this.total=0,e.each(t,function(t){this.total+=Math.abs(t.value)},this)},update:function(){this.calculateTotal(this.segments),e.each(this.activeElements,function(t){t.restore(["fillColor"])}),e.each(this.segments,function(t){t.save()}),this.render()},removeData:function(t){var i=e.isNumber(t)?t:this.segments.length-1;this.segments.splice(i,1),this.reflow(),this.update()},reflow:function(){e.extend(this.SegmentArc.prototype,{x:this.chart.width/2,y:this.chart.height/2}),this.outerRadius=(e.min([this.chart.width,this.chart.height])-this.options.segmentStrokeWidth/2)/2,e.each(this.segments,function(t){t.update({outerRadius:this.outerRadius,innerRadius:this.outerRadius/100*this.options.percentageInnerCutout})},this)},draw:function(t){var i=t?t:1;this.clear(),e.each(this.segments,function(t,e){t.transition({circumference:this.calculateCircumference(t.value),outerRadius:this.outerRadius,innerRadius:this.outerRadius/100*this.options.percentageInnerCutout},i),t.endAngle=t.startAngle+t.circumference,t.draw(),0===e&&(t.startAngle=1.5*Math.PI),e<% for (var i=0; i
  • <%if(datasets[i].label){%><%=datasets[i].label%><%}%>
  • <%}%>'};i.Type.extend({name:"Line",defaults:s,initialize:function(t){this.PointClass=i.Point.extend({strokeWidth:this.options.pointDotStrokeWidth,radius:this.options.pointDotRadius,display:this.options.pointDot,hitDetectionRadius:this.options.pointHitDetectionRadius,ctx:this.chart.ctx,inRange:function(t){return Math.pow(t-this.x,2)0&&ithis.scale.endPoint?t.controlPoints.outer.y=this.scale.endPoint:t.controlPoints.outer.ythis.scale.endPoint?t.controlPoints.inner.y=this.scale.endPoint:t.controlPoints.inner.y0&&(s.lineTo(h[h.length-1].x,this.scale.endPoint),s.lineTo(h[0].x,this.scale.endPoint),s.fillStyle=t.fillColor,s.closePath(),s.fill()),e.each(h,function(t){t.draw()})},this)}})}.call(this),function(){"use strict";var t=this,i=t.Chart,e=i.helpers,s={scaleShowLabelBackdrop:!0,scaleBackdropColor:"rgba(255,255,255,0.75)",scaleBeginAtZero:!0,scaleBackdropPaddingY:2,scaleBackdropPaddingX:2,scaleShowLine:!0,segmentShowStroke:!0,segmentStrokeColor:"#fff",segmentStrokeWidth:2,animationSteps:100,animationEasing:"easeOutBounce",animateRotate:!0,animateScale:!1,legendTemplate:'
      <% for (var i=0; i
    • <%if(segments[i].label){%><%=segments[i].label%><%}%>
    • <%}%>
    '};i.Type.extend({name:"PolarArea",defaults:s,initialize:function(t){this.segments=[],this.SegmentArc=i.Arc.extend({showStroke:this.options.segmentShowStroke,strokeWidth:this.options.segmentStrokeWidth,strokeColor:this.options.segmentStrokeColor,ctx:this.chart.ctx,innerRadius:0,x:this.chart.width/2,y:this.chart.height/2}),this.scale=new i.RadialScale({display:this.options.showScale,fontStyle:this.options.scaleFontStyle,fontSize:this.options.scaleFontSize,fontFamily:this.options.scaleFontFamily,fontColor:this.options.scaleFontColor,showLabels:this.options.scaleShowLabels,showLabelBackdrop:this.options.scaleShowLabelBackdrop,backdropColor:this.options.scaleBackdropColor,backdropPaddingY:this.options.scaleBackdropPaddingY,backdropPaddingX:this.options.scaleBackdropPaddingX,lineWidth:this.options.scaleShowLine?this.options.scaleLineWidth:0,lineColor:this.options.scaleLineColor,lineArc:!0,width:this.chart.width,height:this.chart.height,xCenter:this.chart.width/2,yCenter:this.chart.height/2,ctx:this.chart.ctx,templateString:this.options.scaleLabel,valuesCount:t.length}),this.updateScaleRange(t),this.scale.update(),e.each(t,function(t,i){this.addData(t,i,!0)},this),this.options.showTooltips&&e.bindEvents(this,this.options.tooltipEvents,function(t){var i="mouseout"!==t.type?this.getSegmentsAtEvent(t):[];e.each(this.segments,function(t){t.restore(["fillColor"])}),e.each(i,function(t){t.fillColor=t.highlightColor}),this.showTooltip(i)}),this.render()},getSegmentsAtEvent:function(t){var i=[],s=e.getRelativePosition(t);return e.each(this.segments,function(t){t.inRange(s.x,s.y)&&i.push(t)},this),i},addData:function(t,i,e){var s=i||this.segments.length;this.segments.splice(s,0,new this.SegmentArc({fillColor:t.color,highlightColor:t.highlight||t.color,label:t.label,value:t.value,outerRadius:this.options.animateScale?0:this.scale.calculateCenterOffset(t.value),circumference:this.options.animateRotate?0:this.scale.getCircumference(),startAngle:1.5*Math.PI})),e||(this.reflow(),this.update())},removeData:function(t){var i=e.isNumber(t)?t:this.segments.length-1;this.segments.splice(i,1),this.reflow(),this.update()},calculateTotal:function(t){this.total=0,e.each(t,function(t){this.total+=t.value},this),this.scale.valuesCount=this.segments.length},updateScaleRange:function(t){var i=[];e.each(t,function(t){i.push(t.value)});var s=this.options.scaleOverride?{steps:this.options.scaleSteps,stepValue:this.options.scaleStepWidth,min:this.options.scaleStartValue,max:this.options.scaleStartValue+this.options.scaleSteps*this.options.scaleStepWidth}:e.calculateScaleRange(i,e.min([this.chart.width,this.chart.height])/2,this.options.scaleFontSize,this.options.scaleBeginAtZero,this.options.scaleIntegersOnly);e.extend(this.scale,s,{size:e.min([this.chart.width,this.chart.height]),xCenter:this.chart.width/2,yCenter:this.chart.height/2})},update:function(){this.calculateTotal(this.segments),e.each(this.segments,function(t){t.save()}),this.reflow(),this.render()},reflow:function(){e.extend(this.SegmentArc.prototype,{x:this.chart.width/2,y:this.chart.height/2}),this.updateScaleRange(this.segments),this.scale.update(),e.extend(this.scale,{xCenter:this.chart.width/2,yCenter:this.chart.height/2}),e.each(this.segments,function(t){t.update({outerRadius:this.scale.calculateCenterOffset(t.value)})},this)},draw:function(t){var i=t||1;this.clear(),e.each(this.segments,function(t,e){t.transition({circumference:this.scale.getCircumference(),outerRadius:this.scale.calculateCenterOffset(t.value)},i),t.endAngle=t.startAngle+t.circumference,0===e&&(t.startAngle=1.5*Math.PI),e<% for (var i=0; i
  • <%if(datasets[i].label){%><%=datasets[i].label%><%}%>
  • <%}%>'},initialize:function(t){this.PointClass=i.Point.extend({strokeWidth:this.options.pointDotStrokeWidth,radius:this.options.pointDotRadius,display:this.options.pointDot,hitDetectionRadius:this.options.pointHitDetectionRadius,ctx:this.chart.ctx}),this.datasets=[],this.buildScale(t),this.options.showTooltips&&e.bindEvents(this,this.options.tooltipEvents,function(t){var i="mouseout"!==t.type?this.getPointsAtEvent(t):[];this.eachPoints(function(t){t.restore(["fillColor","strokeColor"])}),e.each(i,function(t){t.fillColor=t.highlightFill,t.strokeColor=t.highlightStroke}),this.showTooltip(i)}),e.each(t.datasets,function(i){var s={label:i.label||null,fillColor:i.fillColor,strokeColor:i.strokeColor,pointColor:i.pointColor,pointStrokeColor:i.pointStrokeColor,points:[]};this.datasets.push(s),e.each(i.data,function(e,n){var o;this.scale.animation||(o=this.scale.getPointPosition(n,this.scale.calculateCenterOffset(e))),s.points.push(new this.PointClass({value:e,label:t.labels[n],datasetLabel:i.label,x:this.options.animation?this.scale.xCenter:o.x,y:this.options.animation?this.scale.yCenter:o.y,strokeColor:i.pointStrokeColor,fillColor:i.pointColor,highlightFill:i.pointHighlightFill||i.pointColor,highlightStroke:i.pointHighlightStroke||i.pointStrokeColor}))},this)},this),this.render()},eachPoints:function(t){e.each(this.datasets,function(i){e.each(i.points,t,this)},this)},getPointsAtEvent:function(t){var i=e.getRelativePosition(t),s=e.getAngleFromPoint({x:this.scale.xCenter,y:this.scale.yCenter},i),n=2*Math.PI/this.scale.valuesCount,o=Math.round((s.angle-1.5*Math.PI)/n),a=[];return(o>=this.scale.valuesCount||0>o)&&(o=0),s.distance<=this.scale.drawingArea&&e.each(this.datasets,function(t){a.push(t.points[o])}),a},buildScale:function(t){this.scale=new i.RadialScale({display:this.options.showScale,fontStyle:this.options.scaleFontStyle,fontSize:this.options.scaleFontSize,fontFamily:this.options.scaleFontFamily,fontColor:this.options.scaleFontColor,showLabels:this.options.scaleShowLabels,showLabelBackdrop:this.options.scaleShowLabelBackdrop,backdropColor:this.options.scaleBackdropColor,backdropPaddingY:this.options.scaleBackdropPaddingY,backdropPaddingX:this.options.scaleBackdropPaddingX,lineWidth:this.options.scaleShowLine?this.options.scaleLineWidth:0,lineColor:this.options.scaleLineColor,angleLineColor:this.options.angleLineColor,angleLineWidth:this.options.angleShowLineOut?this.options.angleLineWidth:0,pointLabelFontColor:this.options.pointLabelFontColor,pointLabelFontSize:this.options.pointLabelFontSize,pointLabelFontFamily:this.options.pointLabelFontFamily,pointLabelFontStyle:this.options.pointLabelFontStyle,height:this.chart.height,width:this.chart.width,xCenter:this.chart.width/2,yCenter:this.chart.height/2,ctx:this.chart.ctx,templateString:this.options.scaleLabel,labels:t.labels,valuesCount:t.datasets[0].data.length}),this.scale.setScaleSize(),this.updateScaleRange(t.datasets),this.scale.buildYLabels()},updateScaleRange:function(t){var i=function(){var i=[];return e.each(t,function(t){t.data?i=i.concat(t.data):e.each(t.points,function(t){i.push(t.value)})}),i}(),s=this.options.scaleOverride?{steps:this.options.scaleSteps,stepValue:this.options.scaleStepWidth,min:this.options.scaleStartValue,max:this.options.scaleStartValue+this.options.scaleSteps*this.options.scaleStepWidth}:e.calculateScaleRange(i,e.min([this.chart.width,this.chart.height])/2,this.options.scaleFontSize,this.options.scaleBeginAtZero,this.options.scaleIntegersOnly);e.extend(this.scale,s)},addData:function(t,i){this.scale.valuesCount++,e.each(t,function(t,e){var s=this.scale.getPointPosition(this.scale.valuesCount,this.scale.calculateCenterOffset(t));this.datasets[e].points.push(new this.PointClass({value:t,label:i,x:s.x,y:s.y,strokeColor:this.datasets[e].pointStrokeColor,fillColor:this.datasets[e].pointColor}))},this),this.scale.labels.push(i),this.reflow(),this.update()},removeData:function(){this.scale.valuesCount--,this.scale.labels.shift(),e.each(this.datasets,function(t){t.points.shift()},this),this.reflow(),this.update()},update:function(){this.eachPoints(function(t){t.save()}),this.reflow(),this.render()},reflow:function(){e.extend(this.scale,{width:this.chart.width,height:this.chart.height,size:e.min([this.chart.width,this.chart.height]),xCenter:this.chart.width/2,yCenter:this.chart.height/2}),this.updateScaleRange(this.datasets),this.scale.setScaleSize(),this.scale.buildYLabels()},draw:function(t){var i=t||1,s=this.chart.ctx;this.clear(),this.scale.draw(),e.each(this.datasets,function(t){e.each(t.points,function(t,e){t.hasValue()&&t.transition(this.scale.getPointPosition(e,this.scale.calculateCenterOffset(t.value)),i)},this),s.lineWidth=this.options.datasetStrokeWidth,s.strokeStyle=t.strokeColor,s.beginPath(),e.each(t.points,function(t,i){0===i?s.moveTo(t.x,t.y):s.lineTo(t.x,t.y)},this),s.closePath(),s.stroke(),s.fillStyle=t.fillColor,s.fill(),e.each(t.points,function(t){t.hasValue()&&t.draw()})},this)}})}.call(this); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/backbone-min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/backbone-min.js deleted file mode 100644 index 8ea4b13d..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/backbone-min.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(t,e){if(typeof define==="function"&&define.amd){define(["underscore","jquery","exports"],function(i,r,s){t.Backbone=e(t,s,i,r)})}else if(typeof exports!=="undefined"){var i=require("underscore");e(t,exports,i)}else{t.Backbone=e(t,{},t._,t.jQuery||t.Zepto||t.ender||t.$)}})(this,function(t,e,i,r){var s=t.Backbone;var n=[];var a=n.push;var o=n.slice;var h=n.splice;e.VERSION="1.1.2";e.$=r;e.noConflict=function(){t.Backbone=s;return this};e.emulateHTTP=false;e.emulateJSON=false;var u=e.Events={on:function(t,e,i){if(!c(this,"on",t,[e,i])||!e)return this;this._events||(this._events={});var r=this._events[t]||(this._events[t]=[]);r.push({callback:e,context:i,ctx:i||this});return this},once:function(t,e,r){if(!c(this,"once",t,[e,r])||!e)return this;var s=this;var n=i.once(function(){s.off(t,n);e.apply(this,arguments)});n._callback=e;return this.on(t,n,r)},off:function(t,e,r){var s,n,a,o,h,u,l,f;if(!this._events||!c(this,"off",t,[e,r]))return this;if(!t&&!e&&!r){this._events=void 0;return this}o=t?[t]:i.keys(this._events);for(h=0,u=o.length;h").attr(t);this.setElement(r,false)}else{this.setElement(i.result(this,"el"),false)}}});e.sync=function(t,r,s){var n=T[t];i.defaults(s||(s={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var a={type:n,dataType:"json"};if(!s.url){a.url=i.result(r,"url")||M()}if(s.data==null&&r&&(t==="create"||t==="update"||t==="patch")){a.contentType="application/json";a.data=JSON.stringify(s.attrs||r.toJSON(s))}if(s.emulateJSON){a.contentType="application/x-www-form-urlencoded";a.data=a.data?{model:a.data}:{}}if(s.emulateHTTP&&(n==="PUT"||n==="DELETE"||n==="PATCH")){a.type="POST";if(s.emulateJSON)a.data._method=n;var o=s.beforeSend;s.beforeSend=function(t){t.setRequestHeader("X-HTTP-Method-Override",n);if(o)return o.apply(this,arguments)}}if(a.type!=="GET"&&!s.emulateJSON){a.processData=false}if(a.type==="PATCH"&&k){a.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}var h=s.xhr=e.ajax(i.extend(a,s));r.trigger("request",r,h,s);return h};var k=typeof window!=="undefined"&&!!window.ActiveXObject&&!(window.XMLHttpRequest&&(new XMLHttpRequest).dispatchEvent);var T={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var $=e.Router=function(t){t||(t={});if(t.routes)this.routes=t.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var S=/\((.*?)\)/g;var H=/(\(\?)?:\w+/g;var A=/\*\w+/g;var I=/[\-{}\[\]+?.,\\\^$|#\s]/g;i.extend($.prototype,u,{initialize:function(){},route:function(t,r,s){if(!i.isRegExp(t))t=this._routeToRegExp(t);if(i.isFunction(r)){s=r;r=""}if(!s)s=this[r];var n=this;e.history.route(t,function(i){var a=n._extractParameters(t,i);n.execute(s,a);n.trigger.apply(n,["route:"+r].concat(a));n.trigger("route",r,a);e.history.trigger("route",n,r,a)});return this},execute:function(t,e){if(t)t.apply(this,e)},navigate:function(t,i){e.history.navigate(t,i);return this},_bindRoutes:function(){if(!this.routes)return;this.routes=i.result(this,"routes");var t,e=i.keys(this.routes);while((t=e.pop())!=null){this.route(t,this.routes[t])}},_routeToRegExp:function(t){t=t.replace(I,"\\$&").replace(S,"(?:$1)?").replace(H,function(t,e){return e?t:"([^/?]+)"}).replace(A,"([^?]*?)");return new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var r=t.exec(e).slice(1);return i.map(r,function(t,e){if(e===r.length-1)return t||null;return t?decodeURIComponent(t):null})}});var N=e.History=function(){this.handlers=[];i.bindAll(this,"checkUrl");if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var R=/^[#\/]|\s+$/g;var O=/^\/+|\/+$/g;var P=/msie [\w.]+/;var C=/\/$/;var j=/#.*$/;N.started=false;i.extend(N.prototype,u,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getFragment:function(t,e){if(t==null){if(this._hasPushState||!this._wantsHashChange||e){t=decodeURI(this.location.pathname+this.location.search);var i=this.root.replace(C,"");if(!t.indexOf(i))t=t.slice(i.length)}else{t=this.getHash()}}return t.replace(R,"")},start:function(t){if(N.started)throw new Error("Backbone.history has already been started");N.started=true;this.options=i.extend({root:"/"},this.options,t);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var r=this.getFragment();var s=document.documentMode;var n=P.exec(navigator.userAgent.toLowerCase())&&(!s||s<=7);this.root=("/"+this.root+"/").replace(O,"/");if(n&&this._wantsHashChange){var a=e.$('';s.extend(C.prototype,{_scroll:function(){var e=this.qtip.elements.overlay;e&&(e[0].style.top=s(t).scrollTop()+"px")},init:function(i){var o=i.tooltip;1>s("select, object").length&&(this.bgiframe=i.elements.bgiframe=s(Ie).appendTo(o),i._bind(o,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=s("
    ",{id:X+"-rcontainer"}).appendTo(e.body),i.elements.overlay&&i.elements.overlay.addClass("qtipmodal-ie6fix")&&(i._bind(t,["scroll","resize"],this._scroll,this._ns,this),i._bind(o,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var t,e,i=this.qtip.tooltip,s={height:i.outerHeight(k),width:i.outerWidth(k)},o=this.qtip.plugins.tip,n=this.qtip.elements.tip;e=parseInt(i.css("borderLeftWidth"),10)||0,e={left:-e,top:-e},o&&n&&(t="x"===o.corner.precedance?[A,F]:[B,D],e[t[1]]-=n[t[0]]()),this.bgiframe.css(e).css(s)},redraw:function(){if(1>this.qtip.rendered||this.drawing)return this;var t,e,i,s,o=this.qtip.tooltip,n=this.qtip.options.style,r=this.qtip.options.position.container;return this.qtip.drawing=1,n.height&&o.css(B,n.height),n.width?o.css(A,n.width):(o.css(A,"").appendTo(this.redrawContainer),e=o.width(),1>e%2&&(e+=1),i=o.css("maxWidth")||"",s=o.css("minWidth")||"",t=(i+s).indexOf("%")>-1?r.width()/100:0,i=(i.indexOf("%")>-1?t:1)*parseInt(i,10)||e,s=(s.indexOf("%")>-1?t:1)*parseInt(s,10)||0,e=i+s?Math.min(Math.max(e,s),i):e,o.css(A,Math.round(e)).appendTo(r)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([t,this.qtip.tooltip],this._ns)}}),Me=R.ie6=function(t){return 6===oe.ie?new C(t):k},Me.initialize="render",M.ie6={"^content|style$":function(){this.redraw()}}})})(window,document); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/jquery.spin.min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/jquery.spin.min.js deleted file mode 100644 index 47fb711f..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/jquery.spin.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a){if("object"==typeof exports)a(require("jquery"),require("spin"));else if("function"==typeof define&&define.amd)define(["jquery","spin"],a);else{if(!window.Spinner)throw new Error("Spin.js not present");a(window.jQuery,window.Spinner)}}(function(a,b){a.fn.spin=function(c,d){return this.each(function(){var e=a(this),f=e.data();f.spinner&&(f.spinner.stop(),delete f.spinner),c!==!1&&(c=a.extend({color:d||e.css("color")},a.fn.spin.presets[c]||c),f.spinner=new b(c).spin(this))})},a.fn.spin.presets={tiny:{lines:8,length:2,width:2,radius:3},small:{lines:8,length:4,width:3,radius:5},large:{lines:10,length:8,width:4,radius:8}}}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/moment.min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/moment.min.js deleted file mode 100644 index d0b48f73..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/moment.min.js +++ /dev/null @@ -1,7 +0,0 @@ -//! moment.js -//! version : 2.10.2 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com -!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return Ac.apply(null,arguments)}function b(a){Ac=a}function c(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function d(a){return"[object Array]"===Object.prototype.toString.call(a)}function e(a){return"[object Date]"===Object.prototype.toString.call(a)||a instanceof Date}function f(a,b){var c,d=[];for(c=0;c0)for(c in Cc)d=Cc[c],e=b[d],"undefined"!=typeof e&&(a[d]=e);return a}function m(b){l(this,b),this._d=new Date(+b._d),Dc===!1&&(Dc=!0,a.updateOffset(this),Dc=!1)}function n(a){return a instanceof m||null!=a&&g(a,"_isAMomentObject")}function o(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=b>=0?Math.floor(b):Math.ceil(b)),c}function p(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&o(a[d])!==o(b[d]))&&g++;return g+f}function q(){}function r(a){return a?a.toLowerCase().replace("_","-"):a}function s(a){for(var b,c,d,e,f=0;f0;){if(d=t(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&p(e,c,!0)>=b-1)break;b--}f++}return null}function t(a){var b=null;if(!Ec[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=Bc._abbr,require("./locale/"+a),u(b)}catch(c){}return Ec[a]}function u(a,b){var c;return a&&(c="undefined"==typeof b?w(a):v(a,b),c&&(Bc=c)),Bc._abbr}function v(a,b){return null!==b?(b.abbr=a,Ec[a]||(Ec[a]=new q),Ec[a].set(b),u(a),Ec[a]):(delete Ec[a],null)}function w(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return Bc;if(!d(a)){if(b=t(a))return b;a=[a]}return s(a)}function x(a,b){var c=a.toLowerCase();Fc[c]=Fc[c+"s"]=Fc[b]=a}function y(a){return"string"==typeof a?Fc[a]||Fc[a.toLowerCase()]:void 0}function z(a){var b,c,d={};for(c in a)g(a,c)&&(b=y(c),b&&(d[b]=a[c]));return d}function A(b,c){return function(d){return null!=d?(C(this,b,d),a.updateOffset(this,c),this):B(this,b)}}function B(a,b){return a._d["get"+(a._isUTC?"UTC":"")+b]()}function C(a,b,c){return a._d["set"+(a._isUTC?"UTC":"")+b](c)}function D(a,b){var c;if("object"==typeof a)for(c in a)this.set(c,a[c]);else if(a=y(a),"function"==typeof this[a])return this[a](b);return this}function E(a,b,c){for(var d=""+Math.abs(a),e=a>=0;d.lengthb;b++)d[b]=Jc[d[b]]?Jc[d[b]]:G(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function I(a,b){return a.isValid()?(b=J(b,a.localeData()),Ic[b]||(Ic[b]=H(b)),Ic[b](a)):a.localeData().invalidDate()}function J(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Hc.lastIndex=0;d>=0&&Hc.test(a);)a=a.replace(Hc,c),Hc.lastIndex=0,d-=1;return a}function K(a,b,c){Yc[a]="function"==typeof b?b:function(a){return a&&c?c:b}}function L(a,b){return g(Yc,a)?Yc[a](b._strict,b._locale):new RegExp(M(a))}function M(a){return a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}).replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function N(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),"number"==typeof b&&(d=function(a,c){c[b]=o(a)}),c=0;cd;d++){if(e=i([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function U(a,b){var c;return"string"==typeof b&&(b=a.localeData().monthsParse(b),"number"!=typeof b)?a:(c=Math.min(a.date(),Q(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a)}function V(b){return null!=b?(U(this,b),a.updateOffset(this,!0),this):B(this,"Month")}function W(){return Q(this.year(),this.month())}function X(a){var b,c=a._a;return c&&-2===a._pf.overflow&&(b=c[_c]<0||c[_c]>11?_c:c[ad]<1||c[ad]>Q(c[$c],c[_c])?ad:c[bd]<0||c[bd]>24||24===c[bd]&&(0!==c[cd]||0!==c[dd]||0!==c[ed])?bd:c[cd]<0||c[cd]>59?cd:c[dd]<0||c[dd]>59?dd:c[ed]<0||c[ed]>999?ed:-1,a._pf._overflowDayOfYear&&($c>b||b>ad)&&(b=ad),a._pf.overflow=b),a}function Y(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function Z(a,b){var c=!0;return h(function(){return c&&(Y(a),c=!1),b.apply(this,arguments)},b)}function $(a,b){hd[a]||(Y(b),hd[a]=!0)}function _(a){var b,c,d=a._i,e=id.exec(d);if(e){for(a._pf.iso=!0,b=0,c=jd.length;c>b;b++)if(jd[b][1].exec(d)){a._f=jd[b][0]+(e[6]||" ");break}for(b=0,c=kd.length;c>b;b++)if(kd[b][1].exec(d)){a._f+=kd[b][0];break}d.match(Vc)&&(a._f+="Z"),sa(a)}else a._isValid=!1}function aa(b){var c=ld.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(_(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}function ba(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function ca(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function da(a){return ea(a)?366:365}function ea(a){return a%4===0&&a%100!==0||a%400===0}function fa(){return ea(this.year())}function ga(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=za(a).add(f,"d"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function ha(a){return ga(a,this._week.dow,this._week.doy).week}function ia(){return this._week.dow}function ja(){return this._week.doy}function ka(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function la(a){var b=ga(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function ma(a,b,c,d,e){var f,g,h=ca(a,0,1).getUTCDay();return h=0===h?7:h,c=null!=c?c:e,f=e-h+(h>d?7:0)-(e>h?7:0),g=7*(b-1)+(c-e)+f+1,{year:g>0?a:a-1,dayOfYear:g>0?g:da(a-1)+g}}function na(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function oa(a,b,c){return null!=a?a:null!=b?b:c}function pa(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function qa(a){var b,c,d,e,f=[];if(!a._d){for(d=pa(a),a._w&&null==a._a[ad]&&null==a._a[_c]&&ra(a),a._dayOfYear&&(e=oa(a._a[$c],d[$c]),a._dayOfYear>da(e)&&(a._pf._overflowDayOfYear=!0),c=ca(e,0,a._dayOfYear),a._a[_c]=c.getUTCMonth(),a._a[ad]=c.getUTCDate()),b=0;3>b&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;7>b;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[bd]&&0===a._a[cd]&&0===a._a[dd]&&0===a._a[ed]&&(a._nextDay=!0,a._a[bd]=0),a._d=(a._useUTC?ca:ba).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[bd]=24)}}function ra(a){var b,c,d,e,f,g,h;b=a._w,null!=b.GG||null!=b.W||null!=b.E?(f=1,g=4,c=oa(b.GG,a._a[$c],ga(za(),1,4).year),d=oa(b.W,1),e=oa(b.E,1)):(f=a._locale._week.dow,g=a._locale._week.doy,c=oa(b.gg,a._a[$c],ga(za(),f,g).year),d=oa(b.w,1),null!=b.d?(e=b.d,f>e&&++d):e=null!=b.e?b.e+f:f),h=ma(c,d,e,g,f),a._a[$c]=h.year,a._dayOfYear=h.dayOfYear}function sa(b){if(b._f===a.ISO_8601)return void _(b);b._a=[],b._pf.empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=J(b._f,b._locale).match(Gc)||[],c=0;c0&&b._pf.unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length),Jc[f]?(d?b._pf.empty=!1:b._pf.unusedTokens.push(f),P(f,d,b)):b._strict&&!d&&b._pf.unusedTokens.push(f);b._pf.charsLeftOver=i-j,h.length>0&&b._pf.unusedInput.push(h),b._pf.bigHour===!0&&b._a[bd]<=12&&(b._pf.bigHour=void 0),b._a[bd]=ta(b._locale,b._a[bd],b._meridiem),qa(b),X(b)}function ta(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&12>b&&(b+=12),d||12!==b||(b=0),b):b}function ua(a){var b,d,e,f,g;if(0===a._f.length)return a._pf.invalidFormat=!0,void(a._d=new Date(0/0));for(f=0;fg)&&(e=g,d=b));h(a,d||b)}function va(a){if(!a._d){var b=z(a._i);a._a=[b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],qa(a)}}function wa(a){var b,c=a._i,e=a._f;return a._locale=a._locale||w(a._l),null===c||void 0===e&&""===c?k({nullInput:!0}):("string"==typeof c&&(a._i=c=a._locale.preparse(c)),n(c)?new m(X(c)):(d(e)?ua(a):e?sa(a):xa(a),b=new m(X(a)),b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b))}function xa(b){var c=b._i;void 0===c?b._d=new Date:e(c)?b._d=new Date(+c):"string"==typeof c?aa(b):d(c)?(b._a=f(c.slice(0),function(a){return parseInt(a,10)}),qa(b)):"object"==typeof c?va(b):"number"==typeof c?b._d=new Date(c):a.createFromInputFallback(b)}function ya(a,b,d,e,f){var g={};return"boolean"==typeof d&&(e=d,d=void 0),g._isAMomentObject=!0,g._useUTC=g._isUTC=f,g._l=d,g._i=a,g._f=b,g._strict=e,g._pf=c(),wa(g)}function za(a,b,c,d){return ya(a,b,c,d,!1)}function Aa(a,b){var c,e;if(1===b.length&&d(b[0])&&(b=b[0]),!b.length)return za();for(c=b[0],e=1;ea&&(a=-a,c="-"),c+E(~~(a/60),2)+b+E(~~a%60,2)})}function Ga(a){var b=(a||"").match(Vc)||[],c=b[b.length-1]||[],d=(c+"").match(qd)||["-",0,0],e=+(60*d[1])+o(d[2]);return"+"===d[0]?e:-e}function Ha(b,c){var d,f;return c._isUTC?(d=c.clone(),f=(n(b)||e(b)?+b:+za(b))-+d,d._d.setTime(+d._d+f),a.updateOffset(d,!1),d):za(b).local();return c._isUTC?za(b).zone(c._offset||0):za(b).local()}function Ia(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Ja(b,c){var d,e=this._offset||0;return null!=b?("string"==typeof b&&(b=Ga(b)),Math.abs(b)<16&&(b=60*b),!this._isUTC&&c&&(d=Ia(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?Za(this,Ua(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?e:Ia(this)}function Ka(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function La(a){return this.utcOffset(0,a)}function Ma(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Ia(this),"m")),this}function Na(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Ga(this._i)),this}function Oa(a){return a=a?za(a).utcOffset():0,(this.utcOffset()-a)%60===0}function Pa(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Qa(){if(this._a){var a=this._isUTC?i(this._a):za(this._a);return this.isValid()&&p(this._a,a.toArray())>0}return!1}function Ra(){return!this._isUTC}function Sa(){return this._isUTC}function Ta(){return this._isUTC&&0===this._offset}function Ua(a,b){var c,d,e,f=a,h=null;return Ea(a)?f={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(f={},b?f[b]=a:f.milliseconds=a):(h=rd.exec(a))?(c="-"===h[1]?-1:1,f={y:0,d:o(h[ad])*c,h:o(h[bd])*c,m:o(h[cd])*c,s:o(h[dd])*c,ms:o(h[ed])*c}):(h=sd.exec(a))?(c="-"===h[1]?-1:1,f={y:Va(h[2],c),M:Va(h[3],c),d:Va(h[4],c),h:Va(h[5],c),m:Va(h[6],c),s:Va(h[7],c),w:Va(h[8],c)}):null==f?f={}:"object"==typeof f&&("from"in f||"to"in f)&&(e=Xa(za(f.from),za(f.to)),f={},f.ms=e.milliseconds,f.M=e.months),d=new Da(f),Ea(a)&&g(a,"_locale")&&(d._locale=a._locale),d}function Va(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function Wa(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function Xa(a,b){var c;return b=Ha(b,a),a.isBefore(b)?c=Wa(a,b):(c=Wa(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c}function Ya(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||($(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period)."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Ua(c,d),Za(this,e,a),this}}function Za(b,c,d,e){var f=c._milliseconds,g=c._days,h=c._months;e=null==e?!0:e,f&&b._d.setTime(+b._d+f*d),g&&C(b,"Date",B(b,"Date")+g*d),h&&U(b,B(b,"Month")+h*d),e&&a.updateOffset(b,g||h)}function $a(a){var b=a||za(),c=Ha(b,this).startOf("day"),d=this.diff(c,"days",!0),e=-6>d?"sameElse":-1>d?"lastWeek":0>d?"lastDay":1>d?"sameDay":2>d?"nextDay":7>d?"nextWeek":"sameElse";return this.format(this.localeData().calendar(e,this,za(b)))}function _a(){return new m(this)}function ab(a,b){var c;return b=y("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=n(a)?a:za(a),+this>+a):(c=n(a)?+a:+za(a),c<+this.clone().startOf(b))}function bb(a,b){var c;return b=y("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=n(a)?a:za(a),+a>+this):(c=n(a)?+a:+za(a),+this.clone().endOf(b)a?Math.ceil(a):Math.floor(a)}function fb(a,b,c){var d,e,f=Ha(a,this),g=6e4*(f.utcOffset()-this.utcOffset());return b=y(b),"year"===b||"month"===b||"quarter"===b?(e=gb(this,f),"quarter"===b?e/=3:"year"===b&&(e/=12)):(d=this-f,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-g)/864e5:"week"===b?(d-g)/6048e5:d),c?e:eb(e)}function gb(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return 0>b-f?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)}function hb(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ib(){var a=this.clone().utc();return 0b;b++)if(this._weekdaysParse[b]||(c=za([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b}function Jb(a){var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Eb(a,this.localeData()),this.add(a-b,"d")):b}function Kb(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Lb(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)}function Mb(a,b){F(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function Nb(a,b){return b._meridiemParse}function Ob(a){return"p"===(a+"").toLowerCase().charAt(0)}function Pb(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Qb(a){F(0,[a,3],0,"millisecond")}function Rb(){return this._isUTC?"UTC":""}function Sb(){return this._isUTC?"Coordinated Universal Time":""}function Tb(a){return za(1e3*a)}function Ub(){return za.apply(null,arguments).parseZone()}function Vb(a,b,c){var d=this._calendar[a];return"function"==typeof d?d.call(b,c):d}function Wb(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b}function Xb(){return this._invalidDate}function Yb(a){return this._ordinal.replace("%d",a)}function Zb(a){return a}function $b(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)}function _b(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)}function ac(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function bc(a,b,c,d){var e=w(),f=i().set(d,b);return e[c](f,a)}function cc(a,b,c,d,e){if("number"==typeof a&&(b=a,a=void 0),a=a||"",null!=b)return bc(a,b,c,e);var f,g=[];for(f=0;d>f;f++)g[f]=bc(a,f,c,e);return g}function dc(a,b){return cc(a,b,"months",12,"month")}function ec(a,b){return cc(a,b,"monthsShort",12,"month")}function fc(a,b){return cc(a,b,"weekdays",7,"day")}function gc(a,b){return cc(a,b,"weekdaysShort",7,"day")}function hc(a,b){return cc(a,b,"weekdaysMin",7,"day")}function ic(){var a=this._data;return this._milliseconds=Od(this._milliseconds),this._days=Od(this._days),this._months=Od(this._months),a.milliseconds=Od(a.milliseconds),a.seconds=Od(a.seconds),a.minutes=Od(a.minutes),a.hours=Od(a.hours),a.months=Od(a.months),a.years=Od(a.years),this}function jc(a,b,c,d){var e=Ua(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function kc(a,b){return jc(this,a,b,1)}function lc(a,b){return jc(this,a,b,-1)}function mc(){var a,b,c,d=this._milliseconds,e=this._days,f=this._months,g=this._data,h=0;return g.milliseconds=d%1e3,a=eb(d/1e3),g.seconds=a%60,b=eb(a/60),g.minutes=b%60,c=eb(b/60),g.hours=c%24,e+=eb(c/24),h=eb(nc(e)),e-=eb(oc(h)),f+=eb(e/30),e%=30,h+=eb(f/12),f%=12,g.days=e,g.months=f,g.years=h,this}function nc(a){return 400*a/146097}function oc(a){return 146097*a/400}function pc(a){var b,c,d=this._milliseconds;if(a=y(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+12*nc(b),"month"===a?c:c/12;switch(b=this._days+Math.round(oc(this._months/12)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 24*b*60+d/6e4;case"second":return 24*b*60*60+d/1e3;case"millisecond":return Math.floor(24*b*60*60*1e3)+d;default:throw new Error("Unknown unit "+a)}}function qc(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*o(this._months/12)}function rc(a){return function(){return this.as(a)}}function sc(a){return a=y(a),this[a+"s"]()}function tc(a){return function(){return this._data[a]}}function uc(){return eb(this.days()/7)}function vc(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function wc(a,b,c){var d=Ua(a).abs(),e=ce(d.as("s")),f=ce(d.as("m")),g=ce(d.as("h")),h=ce(d.as("d")),i=ce(d.as("M")),j=ce(d.as("y")),k=e0,k[4]=c,vc.apply(null,k)}function xc(a,b){return void 0===de[a]?!1:void 0===b?de[a]:(de[a]=b,!0)}function yc(a){var b=this.localeData(),c=wc(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function zc(){var a=ee(this.years()),b=ee(this.months()),c=ee(this.days()),d=ee(this.hours()),e=ee(this.minutes()),f=ee(this.seconds()+this.milliseconds()/1e3),g=this.asSeconds();return g?(0>g?"-":"")+"P"+(a?a+"Y":"")+(b?b+"M":"")+(c?c+"D":"")+(d||e||f?"T":"")+(d?d+"H":"")+(e?e+"M":"")+(f?f+"S":""):"P0D"}var Ac,Bc,Cc=a.momentProperties=[],Dc=!1,Ec={},Fc={},Gc=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g,Hc=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ic={},Jc={},Kc=/\d/,Lc=/\d\d/,Mc=/\d{3}/,Nc=/\d{4}/,Oc=/[+-]?\d{6}/,Pc=/\d\d?/,Qc=/\d{1,3}/,Rc=/\d{1,4}/,Sc=/[+-]?\d{1,6}/,Tc=/\d+/,Uc=/[+-]?\d+/,Vc=/Z|[+-]\d\d:?\d\d/gi,Wc=/[+-]?\d+(\.\d{1,3})?/,Xc=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,Yc={},Zc={},$c=0,_c=1,ad=2,bd=3,cd=4,dd=5,ed=6;F("M",["MM",2],"Mo",function(){return this.month()+1}),F("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),F("MMMM",0,0,function(a){return this.localeData().months(this,a)}),x("month","M"),K("M",Pc),K("MM",Pc,Lc),K("MMM",Xc),K("MMMM",Xc),N(["M","MM"],function(a,b){b[_c]=o(a)-1}),N(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);null!=e?b[_c]=e:c._pf.invalidMonth=a});var fd="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),gd="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),hd={};a.suppressDeprecationWarnings=!1;var id=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,jd=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],kd=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],ld=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=Z("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),F(0,["YY",2],0,function(){return this.year()%100}),F(0,["YYYY",4],0,"year"),F(0,["YYYYY",5],0,"year"),F(0,["YYYYYY",6,!0],0,"year"),x("year","y"),K("Y",Uc),K("YY",Pc,Lc),K("YYYY",Rc,Nc),K("YYYYY",Sc,Oc),K("YYYYYY",Sc,Oc),N(["YYYY","YYYYY","YYYYYY"],$c),N("YY",function(b,c){c[$c]=a.parseTwoDigitYear(b)}),a.parseTwoDigitYear=function(a){return o(a)+(o(a)>68?1900:2e3)};var md=A("FullYear",!1);F("w",["ww",2],"wo","week"),F("W",["WW",2],"Wo","isoWeek"),x("week","w"),x("isoWeek","W"),K("w",Pc),K("ww",Pc,Lc),K("W",Pc),K("WW",Pc,Lc),O(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=o(a)});var nd={dow:0,doy:6};F("DDD",["DDDD",3],"DDDo","dayOfYear"),x("dayOfYear","DDD"),K("DDD",Qc),K("DDDD",Mc),N(["DDD","DDDD"],function(a,b,c){c._dayOfYear=o(a)}),a.ISO_8601=function(){};var od=Z("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var a=za.apply(null,arguments);return this>a?this:a}),pd=Z("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var a=za.apply(null,arguments);return a>this?this:a});Fa("Z",":"),Fa("ZZ",""),K("Z",Vc),K("ZZ",Vc),N(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Ga(a)});var qd=/([\+\-]|\d\d)/gi;a.updateOffset=function(){};var rd=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,sd=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Ua.fn=Da.prototype;var td=Ya(1,"add"),ud=Ya(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var vd=Z("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});F(0,["gg",2],0,function(){return this.weekYear()%100}),F(0,["GG",2],0,function(){return this.isoWeekYear()%100}),xb("gggg","weekYear"),xb("ggggg","weekYear"),xb("GGGG","isoWeekYear"),xb("GGGGG","isoWeekYear"),x("weekYear","gg"),x("isoWeekYear","GG"),K("G",Uc),K("g",Uc),K("GG",Pc,Lc),K("gg",Pc,Lc),K("GGGG",Rc,Nc),K("gggg",Rc,Nc),K("GGGGG",Sc,Oc),K("ggggg",Sc,Oc),O(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=o(a)}),O(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),F("Q",0,0,"quarter"),x("quarter","Q"),K("Q",Kc),N("Q",function(a,b){b[_c]=3*(o(a)-1)}),F("D",["DD",2],"Do","date"),x("date","D"),K("D",Pc),K("DD",Pc,Lc),K("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),N(["D","DD"],ad),N("Do",function(a,b){b[ad]=o(a.match(Pc)[0],10)});var wd=A("Date",!0);F("d",0,"do","day"),F("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),F("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),F("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),F("e",0,0,"weekday"),F("E",0,0,"isoWeekday"),x("day","d"),x("weekday","e"),x("isoWeekday","E"),K("d",Pc),K("e",Pc),K("E",Pc),K("dd",Xc),K("ddd",Xc),K("dddd",Xc),O(["dd","ddd","dddd"],function(a,b,c){var d=c._locale.weekdaysParse(a);null!=d?b.d=d:c._pf.invalidWeekday=a}),O(["d","e","E"],function(a,b,c,d){b[d]=o(a)});var xd="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),yd="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),zd="Su_Mo_Tu_We_Th_Fr_Sa".split("_");F("H",["HH",2],0,"hour"),F("h",["hh",2],0,function(){return this.hours()%12||12}),Mb("a",!0),Mb("A",!1),x("hour","h"),K("a",Nb),K("A",Nb),K("H",Pc),K("h",Pc),K("HH",Pc,Lc),K("hh",Pc,Lc),N(["H","HH"],bd),N(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),N(["h","hh"],function(a,b,c){b[bd]=o(a),c._pf.bigHour=!0});var Ad=/[ap]\.?m?\.?/i,Bd=A("Hours",!0);F("m",["mm",2],0,"minute"),x("minute","m"),K("m",Pc),K("mm",Pc,Lc),N(["m","mm"],cd);var Cd=A("Minutes",!1);F("s",["ss",2],0,"second"),x("second","s"),K("s",Pc),K("ss",Pc,Lc),N(["s","ss"],dd);var Dd=A("Seconds",!1);F("S",0,0,function(){return~~(this.millisecond()/100)}),F(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Qb("SSS"),Qb("SSSS"),x("millisecond","ms"),K("S",Qc,Kc),K("SS",Qc,Lc),K("SSS",Qc,Mc),K("SSSS",Tc),N(["S","SS","SSS","SSSS"],function(a,b){b[ed]=o(1e3*("0."+a))});var Ed=A("Milliseconds",!1);F("z",0,0,"zoneAbbr"),F("zz",0,0,"zoneName");var Fd=m.prototype;Fd.add=td,Fd.calendar=$a,Fd.clone=_a,Fd.diff=fb,Fd.endOf=pb,Fd.format=jb,Fd.from=kb,Fd.fromNow=lb,Fd.get=D,Fd.invalidAt=wb,Fd.isAfter=ab,Fd.isBefore=bb,Fd.isBetween=cb,Fd.isSame=db,Fd.isValid=ub,Fd.lang=vd,Fd.locale=mb,Fd.localeData=nb,Fd.max=pd,Fd.min=od,Fd.parsingFlags=vb,Fd.set=D,Fd.startOf=ob,Fd.subtract=ud,Fd.toArray=tb,Fd.toDate=sb,Fd.toISOString=ib,Fd.toJSON=ib,Fd.toString=hb,Fd.unix=rb,Fd.valueOf=qb,Fd.year=md,Fd.isLeapYear=fa,Fd.weekYear=zb,Fd.isoWeekYear=Ab,Fd.quarter=Fd.quarters=Db,Fd.month=V,Fd.daysInMonth=W,Fd.week=Fd.weeks=ka,Fd.isoWeek=Fd.isoWeeks=la,Fd.weeksInYear=Cb,Fd.isoWeeksInYear=Bb,Fd.date=wd,Fd.day=Fd.days=Jb,Fd.weekday=Kb,Fd.isoWeekday=Lb,Fd.dayOfYear=na,Fd.hour=Fd.hours=Bd,Fd.minute=Fd.minutes=Cd,Fd.second=Fd.seconds=Dd,Fd.millisecond=Fd.milliseconds=Ed,Fd.utcOffset=Ja,Fd.utc=La,Fd.local=Ma,Fd.parseZone=Na,Fd.hasAlignedHourOffset=Oa,Fd.isDST=Pa,Fd.isDSTShifted=Qa,Fd.isLocal=Ra,Fd.isUtcOffset=Sa,Fd.isUtc=Ta,Fd.isUTC=Ta,Fd.zoneAbbr=Rb,Fd.zoneName=Sb,Fd.dates=Z("dates accessor is deprecated. Use date instead.",wd),Fd.months=Z("months accessor is deprecated. Use month instead",V),Fd.years=Z("years accessor is deprecated. Use year instead",md),Fd.zone=Z("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ka);var Gd=Fd,Hd={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Id={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},Jd="Invalid date",Kd="%d",Ld=/\d{1,2}/,Md={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Nd=q.prototype;Nd._calendar=Hd,Nd.calendar=Vb,Nd._longDateFormat=Id,Nd.longDateFormat=Wb,Nd._invalidDate=Jd,Nd.invalidDate=Xb,Nd._ordinal=Kd,Nd.ordinal=Yb,Nd._ordinalParse=Ld, -Nd.preparse=Zb,Nd.postformat=Zb,Nd._relativeTime=Md,Nd.relativeTime=$b,Nd.pastFuture=_b,Nd.set=ac,Nd.months=R,Nd._months=fd,Nd.monthsShort=S,Nd._monthsShort=gd,Nd.monthsParse=T,Nd.week=ha,Nd._week=nd,Nd.firstDayOfYear=ja,Nd.firstDayOfWeek=ia,Nd.weekdays=Fb,Nd._weekdays=xd,Nd.weekdaysMin=Hb,Nd._weekdaysMin=zd,Nd.weekdaysShort=Gb,Nd._weekdaysShort=yd,Nd.weekdaysParse=Ib,Nd.isPM=Ob,Nd._meridiemParse=Ad,Nd.meridiem=Pb,u("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===o(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),a.lang=Z("moment.lang is deprecated. Use moment.locale instead.",u),a.langData=Z("moment.langData is deprecated. Use moment.localeData instead.",w);var Od=Math.abs,Pd=rc("ms"),Qd=rc("s"),Rd=rc("m"),Sd=rc("h"),Td=rc("d"),Ud=rc("w"),Vd=rc("M"),Wd=rc("y"),Xd=tc("milliseconds"),Yd=tc("seconds"),Zd=tc("minutes"),$d=tc("hours"),_d=tc("days"),ae=tc("months"),be=tc("years"),ce=Math.round,de={s:45,m:45,h:22,d:26,M:11},ee=Math.abs,fe=Da.prototype;fe.abs=ic,fe.add=kc,fe.subtract=lc,fe.as=pc,fe.asMilliseconds=Pd,fe.asSeconds=Qd,fe.asMinutes=Rd,fe.asHours=Sd,fe.asDays=Td,fe.asWeeks=Ud,fe.asMonths=Vd,fe.asYears=Wd,fe.valueOf=qc,fe._bubble=mc,fe.get=sc,fe.milliseconds=Xd,fe.seconds=Yd,fe.minutes=Zd,fe.hours=$d,fe.days=_d,fe.weeks=uc,fe.months=ae,fe.years=be,fe.humanize=yc,fe.toISOString=zc,fe.toString=zc,fe.toJSON=zc,fe.locale=mb,fe.localeData=nb,fe.toIsoString=Z("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",zc),fe.lang=vd,F("X",0,0,"unix"),F("x",0,0,"valueOf"),K("x",Uc),K("X",Wc),N("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),N("x",function(a,b,c){c._d=new Date(o(a))}),a.version="2.10.2",b(za),a.fn=Gd,a.min=Ba,a.max=Ca,a.utc=i,a.unix=Tb,a.months=dc,a.isDate=e,a.locale=u,a.invalid=k,a.duration=Ua,a.isMoment=n,a.weekdays=fc,a.parseZone=Ub,a.localeData=w,a.isDuration=Ea,a.monthsShort=ec,a.weekdaysMin=hc,a.defineLocale=v,a.weekdaysShort=gc,a.normalizeUnits=y,a.relativeTimeThreshold=xc;var ge=a;return ge}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/ol.min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/ol.min.js deleted file mode 100644 index 76aa7814..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/ol.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(b,c){if(typeof define==="function"&&define.amd){define([],c)}else{if(typeof exports==="object"){module.exports=c()}else{b.ol=c()}}}(this,function(){var GB={};var IN,KZ=KZ||{},J9=this;function IL(l){return void 0!==l}function ID(l,v,t){l=l.split(".");t=t||J9;l[0] in t||!t.execScript||t.execScript("var "+l[0]);for(var m;l.length&&(m=l.shift());){!l.length&&IL(v)?t[m]=v:t[m]?t=t[m]:t=t[m]={}}}function I1(){}function H7(l){l.Pa=function(){return l.xf?l.xf:l.xf=new l}}function HI(l){var t=typeof l;if("object"==t){if(l){if(l instanceof Array){return"array"}if(l instanceof Object){return t}var m=Object.prototype.toString.call(l);if("[object Window]"==m){return"object"}if("[object Array]"==m||"number"==typeof l.length&&"undefined"!=typeof l.splice&&"undefined"!=typeof l.propertyIsEnumerable&&!l.propertyIsEnumerable("splice")){return"array"}if("[object Function]"==m||"undefined"!=typeof l.call&&"undefined"!=typeof l.propertyIsEnumerable&&!l.propertyIsEnumerable("call")){return"function"}}else{return"null"}}else{if("function"==t&&"undefined"==typeof l.call){return"object"}}return t}function GU(l){return null===l}function F4(l){return"array"==HI(l)}function FF(l){var m=HI(l);return"array"==m||"object"==m&&"number"==typeof l.length}function EQ(l){return"string"==typeof l}function D2(l){return"number"==typeof l}function DC(l){return"function"==HI(l)}function CM(l){var m=typeof l;return"object"==m&&null!=l||"function"==m}function BX(l){return l[A7]||(l[A7]=++AI)}var A7="closure_uid_"+(1000000000*Math.random()>>>0),AI=0;function zT(l,t,m){return l.call.apply(l.bind,arguments)}function y3(l,v,t){if(!l){throw Error()}if(2")&&(l=l.replace(m6,">"));-1!=l.indexOf('"')&&(l=l.replace(mH,"""));-1!=l.indexOf("'")&&(l=l.replace(lS,"'"));-1!=l.indexOf("\x00")&&(l=l.replace(k3,"�"));return l}var oJ=/&/g,nU=//g,mH=/"/g,lS=/'/g,k3=/\x00/g,o9=/[\x00&<>"']/;function kE(l){l=IL(void 0)?l.toFixed(void 0):String(l);var m=l.indexOf(".");-1==m&&(m=l.length);m=Math.max(0,2-m);return Array(m+1).join("0")+l}function jP(I,H){for(var G=0,F=rD(String(I)).split("."),D=rD(String(H)).split("."),C=Math.max(F.length,D.length),B=0;0==G&&Bm?1:0}var hO=Array.prototype;function gZ(l,m){return hO.indexOf.call(l,m,void 0)}function gB(l,t,m){hO.forEach.call(l,t,m)}function fN(l,m){return hO.filter.call(l,m,void 0)}function eY(l,t,m){return hO.map.call(l,t,m)}function eb(l,m){return hO.some.call(l,m,void 0)}function dL(l,t){var m=cX(l,t,void 0);return 0>m?null:EQ(l)?l.charAt(m):l[m]}function cX(l,B,w){for(var v=l.length,t=EQ(l)?l.split(""):l,m=0;m=arguments.length?hO.slice.call(l,t):hO.slice.call(l,t,m)}function H6(l,m){l.sort(m||GT)}function F3(l,w){if(!FF(l)||!FF(w)||l.length!=w.length){return !1}for(var v=l.length,t=FE,m=0;mm?1:lparseFloat(l))?String(m):l}(),hN={};function gY(l){return hN[l]||(hN[l]=0<=jP(iC,l))}var gA=J9.document,fM=gA&&m5?i0()||("CSS1Compat"==gA.compatMode?parseInt(iC,10):5):void 0;var eX="https:"===J9.location.protocol,d9=m5&&!gY("9.0")&&""!==iC;function cW(l,t,m){return Math.min(Math.max(l,t),m)}function b7(l,t){var m=l%t;return 0>m*t?m+t:m}function bJ(l,t,m){return l+m*(t-l)}function aU(l){return l*Math.PI/180}function L(l){return function(m){if(IL(m)){return[cW(m[0],l[0],l[2]),cW(m[1],l[1],l[3])]}}}function r0(l){return l}function KX(l,v,t){var m=l.length;if(l[0]<=v){return 0}if(!(v<=l[m-1])){if(0t){for(t=1;tv?1:0.5,B=Math.floor(Math.log(t/B)/Math.log(l)+v),w=Math.max(B+w,0),IL(m)&&(w=Math.min(w,m)),t/Math.pow(l,w)}}}function H5(l){if(IL(l)){return 0}}function HH(l,m){if(IL(l)){return l+m}}function GS(l){var m=2*Math.PI/l;return function(t,v){if(IL(t)){return t=Math.floor((t+v)/m+0.5)*m}}}function F2(){var l=aU(5);return function(t,m){if(IL(t)){return Math.abs(t+m)<=l?0:t+m}}}function FD(l,t,m){this.center=l;this.resolution=t;this.rotation=m}var EO=!m5||m5&&9<=fM,D0=!m5||m5&&9<=fM,DA=m5&&!gY("9");!lR||gY("528");mG&&gY("1.9b")||m5&&gY("8")||nT&&gY("9.5")||lR&&gY("528");mG&&!gY("8")||m5&&gY("9");function CK(){0!=BV&&(A6[BX(this)]=this);this.oa=this.oa;this.qa=this.qa}var BV=0,A6={};CK.prototype.oa=!1;CK.prototype.Jc=function(){if(!this.oa&&(this.oa=!0,this.P(),0!=BV)){var l=BX(this);delete A6[l]}};function AG(l,t){var m=xO(zR,t);l.oa?m.call(void 0):(l.qa||(l.qa=[]),l.qa.push(IL(void 0)?yE(m,void 0):m))}CK.prototype.P=function(){if(this.qa){for(;this.qa.length;){this.qa.shift()()}}};function zR(l){l&&"function"==typeof l.Jc&&l.Jc()}function y1(l,m){this.type=l;this.b=this.target=m;this.e=!1;this.og=!0}y1.prototype.pb=function(){this.e=!0};y1.prototype.preventDefault=function(){this.og=!1};function yC(l){l.pb()}function wY(l){l.preventDefault()}var v8=m5?"focusout":"DOMFocusOut";function vI(l){vI[" "](l);return l}vI[" "]=I1;function uS(l,m){y1.call(this,l?l.type:"");this.relatedTarget=this.b=this.target=null;this.i=this.f=this.button=this.screenY=this.screenX=this.clientY=this.clientX=this.offsetY=this.offsetX=0;this.k=this.d=this.c=this.n=!1;this.state=null;this.g=!1;this.a=null;l&&t2(this,l,m)}IB(uS,y1);var tC=[1,4,2];function t2(l,B,w){l.a=B;var v=l.type=B.type;l.target=B.target||B.srcElement;l.b=w;if(w=B.relatedTarget){if(mG){var t;a:{try{vI(w.nodeName);t=!0;break a}catch(m){}t=!1}t||(w=null)}}else{"mouseover"==v?w=B.fromElement:"mouseout"==v&&(w=B.toElement)}l.relatedTarget=w;Object.defineProperties?Object.defineProperties(l,{offsetX:{configurable:!0,enumerable:!0,get:l.of,set:l.cm},offsetY:{configurable:!0,enumerable:!0,get:l.pf,set:l.dm}}):(l.offsetX=l.of(),l.offsetY=l.pf());l.clientX=void 0!==B.clientX?B.clientX:B.pageX;l.clientY=void 0!==B.clientY?B.clientY:B.pageY;l.screenX=B.screenX||0;l.screenY=B.screenY||0;l.button=B.button;l.f=B.keyCode||0;l.i=B.charCode||("keypress"==v?B.keyCode:0);l.n=B.ctrlKey;l.c=B.altKey;l.d=B.shiftKey;l.k=B.metaKey;l.g=k2?B.metaKey:B.ctrlKey;l.state=B.state;B.defaultPrevented&&l.preventDefault()}function sM(l){return(EO?0==l.a.button:"click"==l.type?!0:!!(l.a.button&tC[0]))&&!(lR&&k2&&l.n)}IN=uS.prototype;IN.pb=function(){uS.T.pb.call(this);this.a.stopPropagation?this.a.stopPropagation():this.a.cancelBubble=!0};IN.preventDefault=function(){uS.T.preventDefault.call(this);var l=this.a;if(l.preventDefault){l.preventDefault()}else{if(l.returnValue=!1,DA){try{if(l.ctrlKey||112<=l.keyCode&&123>=l.keyCode){l.keyCode=-1}}catch(m){}}}};IN.zh=function(){return this.a};IN.of=function(){return lR||void 0!==this.a.offsetX?this.a.offsetX:this.a.layerX};IN.cm=function(l){Object.defineProperties(this,{offsetX:{writable:!0,enumerable:!0,configurable:!0,value:l}})};IN.pf=function(){return lR||void 0!==this.a.offsetY?this.a.offsetY:this.a.layerY};IN.dm=function(l){Object.defineProperties(this,{offsetY:{writable:!0,enumerable:!0,configurable:!0,value:l}})};var rB="closure_listenable_"+(1000000*Math.random()|0);function qL(l){return !(!l||!l[rB])}var pX=0;function o7(l,w,v,t,m){this.$b=l;this.a=null;this.src=w;this.type=v;this.Bc=!!t;this.yd=m;this.key=++pX;this.uc=this.cd=!1}function oH(l){l.uc=!0;l.$b=null;l.a=null;l.src=null;l.yd=null}function nS(l){this.src=l;this.a={};this.c=0}nS.prototype.add=function(l,C,B,w,v){var t=l.toString();l=this.a[t];l||(l=this.a[t]=[],this.c++);var m=m4(l,C,w,v);-1w.keyCode||void 0!=w.returnValue)){a:{var v=!1;if(0==w.keyCode){try{w.keyCode=-1;break a}catch(t){v=!0}}if(v||void 0==w.returnValue){w.returnValue=!0}}w=[];for(v=C.b;v;v=v.parentNode){w.push(v)}for(var v=F.type,m=w.length-1;!C.e&&0<=m;m--){C.b=w[m];var l=bI(w[m],v,!0,C),B=B&&l}for(m=0;!C.e&&m>>0);function hM(l){if(DC(l)){return l}l[E]||(l[E]=function(m){return l.handleEvent(m)});return l[E]}function rZ(l){return function(){return l}}var KW=rZ(!1),J5=rZ(!0),IY=rZ(null);function H4(l){return l}function HG(l){var m;m=m||0;return function(){return l.apply(this,Array.prototype.slice.call(arguments,0,m))}}function GR(l){var t=arguments,m=t.length;return function(){for(var v,w=0;w=D||(1<=D?(v=t,B=w):(v+=D*m,B+=D*l));return[v,B]}function t1(l,v){var t=b7(l+180,360)-180,m=Math.abs(Math.round(3600*t));return Math.floor(m/3600)+"\u00b0 "+Math.floor(m/60%60)+"\u2032 "+Math.floor(m%60)+"\u2033 "+v.charAt(0>t?1:0)}function tB(l,t,m){return IL(l)?t.replace("{x}",l[0].toFixed(m)).replace("{y}",l[1].toFixed(m)):""}function sL(l,v){for(var t=!0,m=l.length-1;0<=m;--m){if(l[m]!=v[m]){t=!1;break}}return t}function rA(l,w){var v=Math.cos(w),t=Math.sin(w),m=l[1]*v+l[0]*t;l[0]=l[0]*v-l[1]*t;l[1]=m;return l}function qK(l,v){var t=l[0]-v[0],m=l[1]-v[1];return t*t+m*m}function pW(l,m){return tB(l,"{x}, {y}",m)}function o6(l){this.length=l.length||l;for(var m=0;mB&&(m=m|4);tw&&(m|=2);0===m&&(m=1);return m}function eV(){return[Infinity,Infinity,-Infinity,-Infinity]}function cU(l,w,v,t,m){return IL(m)?(m[0]=l,m[1]=w,m[2]=v,m[3]=t,m):[l,w,v,t]}function J3(l,v){var t=l[0],m=l[1];return cU(t,m,t,m,v)}function IX(l,m){return l[0]==m[0]&&l[2]==m[2]&&l[1]==m[1]&&l[3]==m[3]}function H3(l,m){m[0]l[2]&&(l[2]=m[2]);m[1]l[3]&&(l[3]=m[3]);return l}function d7(l,m){m[0]l[2]&&(l[2]=m[0]);m[1]l[3]&&(l[3]=m[1])}function HF(l,D,C,B,w){for(;Cv;++v){t=w[v],m=B[v],w[v]=l[0]+t*D-m*C,B[v]=l[1]+t*C+m*D}return dJ(w,B,void 0)}function A4(l){return l[3]-l[1]}function AE(l,t,m){m=IL(m)?m:eV();zP(l,t)&&(m[0]=l[0]>t[0]?l[0]:t[0],m[1]=l[1]>t[1]?l[1]:t[1],m[2]=l[2]=m[0]&&l[1]<=m[3]&&l[3]>=m[1]}function yA(l){return l[2]this.H)}return IL(l)?this.o+l:l};IN.pe=function(l,v){if(!yA(l)){this.Ha(C8(l));var t=this.k(l,v),m=this.constrainResolution(t,0,0);ml?rX(2*l):1-rX(2*(l-0.5))}function IW(l){var C=l.source,B=IL(l.start)?l.start:w0(),w=C[0],v=C[1],t=IL(l.duration)?l.duration:1000,m=IL(l.easing)?l.easing:rX;return function(D,I){if(I.time>=1}return w.join("")}function DX(l){return FZ(l[0],l[1],l[2])}function C7(l,v,t,m){this.a=l;this.d=v;this.b=t;this.c=m}function CH(l,w,v,t,m){return IL(m)?(m.a=l,m.d=w,m.b=v,m.c=t,m):new C7(l,w,v,t)}C7.prototype.contains=function(l){return BS(this,l[1],l[2])};function BS(l,t,m){return l.a<=t&&t<=l.d&&l.b<=m&&m<=l.c}function A3(l,m){return l.a==m.a&&l.b==m.b&&l.d==m.d&&l.c==m.c}function AD(l){return l.d-l.a+1}function zO(l,m){return l.a<=m.d&&l.d>=m.a&&l.b<=m.c&&l.c>=m.b}function yY(l){this.c=l.html;this.a=IL(l.tileRanges)?l.tileRanges:null}yY.prototype.b=function(){return this.c};var x9=!m5||m5&&9<=fM;!mG&&!m5||m5&&m5&&9<=fM||mG&&gY("1.9.1");m5&&gY("9");oI("area base br col command embed hr img input keygen link meta param source track wbr".split(" "));oI("action","cite","data","formaction","href","manifest","poster","src");oI("embed","iframe","link","object","script","style","template");function xL(l,m){this.x=IL(l)?l:0;this.y=IL(m)?m:0}IN=xL.prototype;IN.clone=function(){return new xL(this.x,this.y)};IN.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};IN.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};IN.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};IN.scale=function(l,t){var m=D2(t)?t:l;this.x*=l;this.y*=m;return this};function wV(l,m){this.width=l;this.height=m}IN=wV.prototype;IN.clone=function(){return new wV(this.width,this.height)};IN.la=function(){return !(this.width*this.height)};IN.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};IN.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};IN.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};IN.scale=function(l,t){var m=D2(t)?t:l;this.width*=l;this.height*=m;return this};function v5(l){return l?new vF(uP(l)):t4||(t4=new vF)}function tZ(l){var m=document;return EQ(l)?m.getElementById(l):l}function s9(l,m){BW(m,function(v,t){"style"==t?l.style.cssText=v:"class"==t?l.className=v:"for"==t?l.htmlFor=v:t in sJ?l.setAttribute(sJ[t],v):0==t.lastIndexOf("aria-",0)||0==t.lastIndexOf("data-",0)?l.setAttribute(t,v):l[t]=v})}var sJ={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"};function q8(l){l=l.document.documentElement;return new wV(l.clientWidth,l.clientHeight)}function qI(l,D,C){var B=arguments,w=document,v=B[0],t=B[1];if(!x9&&t&&(t.name||t.type)){v=["<",v];t.name&&v.push(' name="',qN(t.name),'"');if(t.type){v.push(' type="',qN(t.type),'"');var m={};o8(m,t);delete m.type;t=m}v.push(">");v=v.join("")}v=w.createElement(v);t&&(EQ(t)?v.className=t:F4(t)?v.className=t.join(" "):s9(v,t));2v;++v){t[v]=w[v].toFixed(6)}v=t.join(",")}else{v=w.join(",")}f7(l,"matrix3d("+v+")")}else{if(hJ()){t=[w[0],w[1],w[4],w[5],w[12],w[13]];if(IL(6)){var m=Array(6);for(v=0;6>v;++v){m[v]=t[v].toFixed(6)}v=m.join(",")}else{v=t.join(",")}f7(l,"matrix("+v+")")}else{l.style.left=Math.round(w[12])+"px",l.style.top=Math.round(w[13])+"px"}}}var eT=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function d5(l,B){var w,v,t=eT.length;for(v=0;v=this.left&&l.right<=this.right&&l.top>=this.top&&l.bottom<=this.bottom:l.x>=this.left&&l.x<=this.right&&l.y>=this.top&&l.y<=this.bottom:!1};IN.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};IN.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};IN.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};IN.scale=function(l,t){var m=D2(t)?t:l;this.left*=l;this.right*=l;this.top*=m;this.bottom*=m;return this};function pT(l,v,t,m){this.left=l;this.top=v;this.width=t;this.height=m}IN=pT.prototype;IN.clone=function(){return new pT(this.left,this.top,this.width,this.height)};IN.contains=function(l){return l instanceof pT?this.left<=l.left&&this.left+this.width>=l.left+l.width&&this.top<=l.top&&this.top+this.height>=l.top+l.height:l.x>=this.left&&l.x<=this.left+this.width&&l.y>=this.top&&l.y<=this.top+this.height};function o3(l,v){var t=v.xl.f}function x(l,m){FC.call(this);this.a=l;this.state=m}IB(x,FC);function rV(l){l.dispatchEvent("change")}x.prototype.qb=function(){return BX(this).toString()};x.prototype.e=function(){return this.a};function KR(l){y0.call(this);this.e=sK(l.projection);this.f=IL(l.attributions)?l.attributions:null;this.D=l.logo;this.q=IL(l.state)?l.state:"ready"}IB(KR,y0);IN=KR.prototype;IN.Jd=I1;IN.Y=function(){return this.f};IN.X=function(){return this.D};IN.Z=function(){return this.e};IN.$=function(){return this.q};function JY(l,m){l.q=m;l.l()}function IU(l){this.minZoom=IL(l.minZoom)?l.minZoom:0;this.a=l.resolutions;this.maxZoom=this.a.length-1;this.f=IL(l.origin)?l.origin:null;this.g=null;IL(l.origins)&&(this.g=l.origins);this.c=null;IL(l.tileSizes)&&(this.c=l.tileSizes);this.e=IL(l.tileSize)?l.tileSize:null===this.c?256:void 0;this.b=null;IL(l.widths)&&(this.b=l.widths)}var H0=[0,0,0];IN=IU.prototype;IN.Db=function(){return H4};IN.gd=function(l,w,v,t,m){m=HC(this,l,m);for(l=l[0]-1;l>=this.minZoom;){if(w.call(v,l,GN(this,m,l,t))){return !0}--l}return !1};IN.md=function(){return this.maxZoom};IN.pd=function(){return this.minZoom};IN.Lb=function(l){return null===this.f?this.g[l]:this.f};IN.na=function(l){return this.a[l]};IN.Qd=function(){return this.a};IN.td=function(l,t,m){return l[0]W.d){if(zO(t,new C7(b7(C.a,B),b7(C.d,B),C.b,C.c))||AD(C)>B&&zO(t,W)){M=!0;break a}}}}}M=!1}}}else{M=!1}M?(T in G&&delete G[T],I[T]=V):G[T]=V}}}}ac=[I,G];ab=ac[0];ac=ac[1];for(var v in this.k){v in ab?(this.e[v]||(iW(this.k[v],!0),this.e[v]=!0),delete ab[v]):v in ac?(this.e[v]&&(iW(this.k[v],!1),delete this.e[v]),delete ac[v]):(lN(this.k[v]),delete this.k[v],delete this.e[v])}for(v in ab){aa=oE("LI"),aa.innerHTML=ab[v].c,this.r.appendChild(aa),this.k[v]=aa,this.e[v]=!0}for(v in ac){aa=oE("LI"),aa.innerHTML=ac[v].c,iW(aa,!1),this.r.appendChild(aa),this.k[v]=aa}v=!uT(this.e)||!uT(ad.logos);this.p!=v&&(iW(this.element,v),this.p=v);v&&uT(this.e)?s8(this.element,"ol-logo-only"):sI(this.element,"ol-logo-only");var m;ad=ad.logos;v=this.N;for(m in v){m in ad||(lN(v[m]),delete v[m])}for(var l in ad){l in v||(m=new Image,m.src=l,ab=ad[l],""===ab?ab=m:(ab=qI("A",{href:ab}),ab.appendChild(m)),this.o.appendChild(ab),v[l]=ab)}iW(this.o,!uT(ad))}}IN=wT.prototype;IN.Dj=function(l){l.preventDefault();vD(this)};function vD(l){q7(l.element,"ol-collapsed");l.d?kY(l.D,l.H):kY(l.H,l.D);l.d=!l.d}IN.Cj=function(){return this.g};IN.Fj=function(l){this.g!==l&&(this.g=l,q7(this.element,"ol-uncollapsible"),!l&&this.d&&vD(this))};IN.Ej=function(l){this.g&&this.d!==l&&vD(this)};IN.Bj=function(){return this.d};function uN(l){l=IL(l)?l:{};var t=IL(l.className)?l.className:"ol-rotate",m=IL(l.label)?l.label:"\u21e7";this.d=null;EQ(m)?this.d=qI("SPAN","ol-compass",m):(this.d=m,s8(this.d,"ol-compass"));m=qI("BUTTON",{"class":t+"-reset",type:"button",title:IL(l.tipLabel)?l.tipLabel:"Reset rotation"},this.d);Iz(m,"click",uN.prototype.o,!1,this);Iz(m,["mouseout",v8],function(){this.blur()},!1);t=qI("DIV",t+" ol-unselectable ol-control",m);dG.call(this,{element:t,render:IL(l.render)?l.render:tX,target:l.target});this.g=IL(l.duration)?l.duration:250;this.e=IL(l.autoHide)?l.autoHide:!0;this.k=void 0;this.e&&s8(this.element,"ol-hidden")}IB(uN,dG);uN.prototype.o=function(l){l.preventDefault();l=this.a;var t=l.a();if(null!==t){for(var m=t.d();m<-Math.PI;){m+=2*Math.PI}for(;m>Math.PI;){m-=2*Math.PI}IL(m)&&(02*this.b&&dF(this),!0):!1};function dF(l){if(l.b!=l.a.length){for(var w=0,v=0;w=l||96<=l&&106>=l||65<=l&&90>=l||lR&&0==l){return !0}switch(l){case 32:case 63:case 107:case 109:case 110:case 111:case 186:case 59:case 189:case 187:case 61:case 188:case 190:case 191:case 192:case 222:case 219:case 220:case 221:return !0;default:return !1}}function KQ(l){if(mG){l=JW(l)}else{if(k2&&lR){a:switch(l){case 93:l=91;break a}}}return l}function JW(l){switch(l){case 61:return 187;case 59:return 186;case 173:return 189;case 224:return 91;case 0:return 224;default:return l}}function IT(l,m){FC.call(this);l&&HZ(this,l,m)}IB(IT,FC);IN=IT.prototype;IN.ba=null;IN.Ad=null;IN.ue=null;IN.Bd=null;IN.Qa=-1;IN.Gb=-1;IN.je=!1;var HB={3:13,12:144,63232:38,63233:40,63234:37,63235:39,63236:112,63237:113,63238:114,63239:115,63240:116,63241:117,63242:118,63243:119,63244:120,63245:121,63246:122,63247:123,63248:44,63272:46,63273:36,63275:35,63276:33,63277:34,63289:144,63302:45},GM={Up:38,Down:40,Left:37,Right:39,Enter:13,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,"U+007F":46,Home:36,End:35,PageUp:33,PageDown:34,Insert:45},FW=m5||lR&&gY("525"),E8=k2&&mG;IT.prototype.a=function(l){lR&&(17==this.Qa&&!l.n||18==this.Qa&&!l.c||k2&&91==this.Qa&&!l.k)&&(this.Gb=this.Qa=-1);-1==this.Qa&&(l.n&&17!=l.f?this.Qa=17:l.c&&18!=l.f?this.Qa=18:l.k&&91!=l.f&&(this.Qa=91));FW&&!aO(l.f,this.Qa,l.d,l.n,l.c)?this.handleEvent(l):(this.Gb=KQ(l.f),E8&&(this.je=l.c))};IT.prototype.c=function(l){this.Gb=this.Qa=-1;this.je=l.c};IT.prototype.handleEvent=function(l){var C=l.a,B,w,v=C.altKey;m5&&"keypress"==l.type?(B=this.Gb,w=13!=B&&27!=B?C.keyCode:0):lR&&"keypress"==l.type?(B=this.Gb,w=0<=C.charCode&&63232>C.charCode&&rU(B)?C.charCode:0):nT?(B=this.Gb,w=rU(B)?C.keyCode:0):(B=C.keyCode||this.Gb,w=C.charCode||0,E8&&(v=this.je),k2&&63==w&&224==B&&(B=191));var t=B=KQ(B),m=C.keyIdentifier;B?63232<=B&&B in HB?t=HB[B]:25==B&&l.d&&(t=9):m&&m in GM&&(t=GM[m]);this.Qa=t;l=new EJ(t,w,0,C);l.c=v;this.dispatchEvent(l)};function HZ(l,t,m){l.Bd&&DU(l);l.ba=t;l.Ad=Iz(l.ba,"keypress",l,m);l.ue=Iz(l.ba,"keydown",l.a,m,l);l.Bd=Iz(l.ba,"keyup",l.c,m,l)}function DU(l){l.Ad&&(b6(l.Ad),b6(l.ue),b6(l.Bd),l.Ad=null,l.ue=null,l.Bd=null);l.ba=null;l.Qa=-1;l.Gb=-1}IT.prototype.P=function(){IT.T.P.call(this);DU(this)};function EJ(l,v,t,m){uS.call(this,m);this.type="key";this.f=l;this.i=v}IB(EJ,uS);function C4(l,t){FC.call(this);var m=this.ba=l;(m=CM(m)&&1==m.nodeType?this.ba:this.ba?this.ba.body:null)&&nO(m,"direction");this.a=Iz(this.ba,mG?"DOMMouseScroll":"mousewheel",this,t)}IB(C4,FC);C4.prototype.handleEvent=function(l){var v=0,t=0,m=0;l=l.a;if("mousewheel"==l.type){t=1;if(m5||lR&&(kD||gY("532.0"))){t=40}m=CE(-l.wheelDelta,t);IL(l.wheelDeltaX)?(v=CE(-l.wheelDeltaX,t),t=CE(-l.wheelDeltaY,t)):t=m}else{m=l.detail,100m&&(m=-3),IL(l.axis)&&l.axis===l.HORIZONTAL_AXIS?v=m:t=m}D2(this.c)&&cW(v,-this.c,this.c);D2(this.b)&&(t=cW(t,-this.b,this.b));v=new BP(m,l,0,t);this.dispatchEvent(v)};function CE(l,m){return lR&&(k2||jO)&&0!=l%m?l:l/m}C4.prototype.P=function(){C4.T.P.call(this);b6(this.a);this.a=null};function BP(l,v,t,m){uS.call(this,v);this.type="mousewheel";this.detail=l;this.q=m}IB(BP,uS);function A0(l,t,m){y1.call(this,l);this.a=t;l=IL(m)?m:{};this.buttons=AA(l);this.pressure=zL(l,this.buttons);this.bubbles=sN(l,"bubbles",!1);this.cancelable=sN(l,"cancelable",!1);this.view=sN(l,"view",null);this.detail=sN(l,"detail",null);this.screenX=sN(l,"screenX",0);this.screenY=sN(l,"screenY",0);this.clientX=sN(l,"clientX",0);this.clientY=sN(l,"clientY",0);this.button=sN(l,"button",0);this.relatedTarget=sN(l,"relatedTarget",null);this.pointerId=sN(l,"pointerId",0);this.width=sN(l,"width",0);this.height=sN(l,"height",0);this.pointerType=sN(l,"pointerType","");this.isPrimary=sN(l,"isPrimary",!1);t.preventDefault&&(this.preventDefault=function(){t.preventDefault()})}IB(A0,y1);function AA(l){if(l.buttons||yV){l=l.buttons}else{switch(l.which){case 1:l=1;break;case 2:l=4;break;case 3:l=2;break;default:l=0}}return l}function zL(l,t){var m=0;l.pressure?m=l.pressure:m=t?0.5:0;return m}var yV=!1;try{yV=1===(new MouseEvent("click",{buttons:1})).buttons}catch(x6){}function xI(l,m){this.a=l;this.f=m}function wS(l){xI.call(this,l,{mousedown:this.Wi,mousemove:this.Xi,mouseup:this.$i,mouseover:this.Zi,mouseout:this.Yi});this.c=l.c;this.b=[]}IB(wS,xI);function v2(F,D){for(var C=F.b,B=D.clientX,w=D.clientY,v=0,t=C.length,m;v=Math.abs(B-m[0])&&25>=l){return !0}}return !1}function vC(l){var t=uM(l,l.a),m=t.preventDefault;t.preventDefault=function(){l.preventDefault();m()};t.pointerId=1;t.isPrimary=!0;t.pointerType="mouse";return t}IN=wS.prototype;IN.Wi=function(l){if(!v2(this,l)){(1).toString() in this.c&&this.cancel(l);var m=vC(l);this.c[(1).toString()]=l;tW(this.a,s6,m,l)}};IN.Xi=function(l){if(!v2(this,l)){var m=vC(l);tW(this.a,sG,m,l)}};IN.$i=function(l){if(!v2(this,l)){var m=this.c[(1).toString()];m&&m.button===l.button&&(m=vC(l),tW(this.a,q5,m,l),tD(this.c,(1).toString()))}};IN.Zi=function(l){if(!v2(this,l)){var m=vC(l);qF(this.a,m,l)}};IN.Yi=function(l){if(!v2(this,l)){var m=vC(l);pR(this.a,m,l)}};IN.cancel=function(l){var m=vC(l);this.a.cancel(m,l);tD(this.c,(1).toString())};function o1(l){xI.call(this,l,{MSPointerDown:this.ej,MSPointerMove:this.fj,MSPointerUp:this.ij,MSPointerOut:this.gj,MSPointerOver:this.hj,MSPointerCancel:this.dj,MSGotPointerCapture:this.bj,MSLostPointerCapture:this.cj});this.c=l.c;this.b=["","unavailable","touch","pen","mouse"]}IB(o1,xI);function oB(l,t){var m=t;D2(t.a.pointerType)&&(m=uM(t,t.a),m.pointerType=l.b[t.a.pointerType]);return m}IN=o1.prototype;IN.ej=function(l){this.c[l.a.pointerId]=l;var m=oB(this,l);tW(this.a,s6,m,l)};IN.fj=function(l){var m=oB(this,l);tW(this.a,sG,m,l)};IN.ij=function(l){var m=oB(this,l);tW(this.a,q5,m,l);tD(this.c,l.a.pointerId)};IN.gj=function(l){var m=oB(this,l);pR(this.a,m,l)};IN.hj=function(l){var m=oB(this,l);qF(this.a,m,l)};IN.dj=function(l){var m=oB(this,l);this.a.cancel(m,l);tD(this.c,l.a.pointerId)};IN.cj=function(l){this.a.dispatchEvent(new A0("lostpointercapture",l,l.a))};IN.bj=function(l){this.a.dispatchEvent(new A0("gotpointercapture",l,l.a))};function nM(l){xI.call(this,l,{pointerdown:this.ql,pointermove:this.rl,pointerup:this.ul,pointerout:this.sl,pointerover:this.tl,pointercancel:this.pl,gotpointercapture:this.li,lostpointercapture:this.Vi})}IB(nM,xI);IN=nM.prototype;IN.ql=function(l){mY(this.a,l)};IN.rl=function(l){mY(this.a,l)};IN.ul=function(l){mY(this.a,l)};IN.sl=function(l){mY(this.a,l)};IN.tl=function(l){mY(this.a,l)};IN.pl=function(l){mY(this.a,l)};IN.Vi=function(l){mY(this.a,l)};IN.li=function(l){mY(this.a,l)};function l9(l,m){xI.call(this,l,{touchstart:this.pm,touchmove:this.om,touchend:this.nm,touchcancel:this.mm});this.c=l.c;this.g=m;this.b=void 0;this.e=0;this.d=void 0}IB(l9,xI);IN=l9.prototype;IN.ng=function(){this.e=0;this.d=void 0};function lK(l,t,m){t=uM(t,m);t.pointerId=m.identifier+2;t.bubbles=!0;t.cancelable=!0;t.detail=l.e;t.button=0;t.buttons=1;t.width=m.webkitRadiusX||m.radiusX||0;t.height=m.webkitRadiusY||m.radiusY||0;t.pressure=m.webkitForce||m.force||0.5;t.isPrimary=l.b===m.identifier;t.pointerType="touch";t.clientX=m.clientX;t.clientY=m.clientY;t.screenX=m.screenX;t.screenY=m.screenY;return t}function kV(l,D,C){function B(){D.preventDefault()}var w=Array.prototype.slice.call(D.a.changedTouches),v=w.length,t,m;for(t=0;t=G.length){var C=[],B,w,v;for(B=0;B=l.minResolution&&ml.d&&(l.d=m.d),m.bl.c&&(l.c=m.c)):l[v][t]=m:(l[v]={},l[v][t]=m)}function uL(l,t,m){return[t*(Math.round(l[0]/t)+m[0]%2/2),t*(Math.round(l[1]/t)+m[1]%2/2)]}function tV(T,S,P,O,M,K,J,I,H,G){var D=BX(S).toString();D in T.wantedTiles||(T.wantedTiles[D]={});var C=T.wantedTiles[D];T=T.tileQueue;var B=P.minZoom,v,m,l,F,w,t;for(t=J;t>=B;--t){for(m=GN(P,K,t,m),l=P.na(t),F=m.a;F<=m.d;++F){for(w=m.b;w<=m.c;++w){J-t<=I?(v=S.Vb(t,F,w,O,M),0==v.state&&(C[DX(v.a)]=!0,v.qb() in T.b||s5(T,[v,D,EK(P,v.a),l])),IL(H)&&H.call(G,v)):S.Oe(t,F,w)}}}}function sF(l){this.o=l.opacity;this.p=l.rotateWithView;this.i=l.rotation;this.k=l.scale;this.r=l.snapToPixel}IN=sF.prototype;IN.Ld=function(){return this.o};IN.rd=function(){return this.p};IN.Md=function(){return this.i};IN.Nd=function(){return this.k};IN.sd=function(){return this.r};IN.Od=function(l){this.i=l};IN.Pd=function(l){this.k=l};function q4(l){l=IL(l)?l:{};this.f=IL(l.anchor)?l.anchor:[0.5,0.5];this.d=null;this.c=IL(l.anchorOrigin)?l.anchorOrigin:"top-left";this.g=IL(l.anchorXUnits)?l.anchorXUnits:"fraction";this.n=IL(l.anchorYUnits)?l.anchorYUnits:"fraction";var C=IL(l.crossOrigin)?l.crossOrigin:null,B=IL(l.img)?l.img:null,w=l.src;IL(w)&&0!==w.length||null===B||(w=B.src);var v=IL(l.src)?0:2,t=qE.Pa(),m=t.get(w,C);null===m&&(m=new pQ(B,w,C,v),t.set(w,C,m));this.a=m;this.D=IL(l.offset)?l.offset:[0,0];this.b=IL(l.offsetOrigin)?l.offsetOrigin:"top-left";this.e=null;this.q=IL(l.size)?l.size:null;sF.call(this,{opacity:IL(l.opacity)?l.opacity:1,rotation:IL(l.rotation)?l.rotation:0,scale:IL(l.scale)?l.scale:1,snapToPixel:IL(l.snapToPixel)?l.snapToPixel:!0,rotateWithView:IL(l.rotateWithView)?l.rotateWithView:!1})}IB(q4,sF);IN=q4.prototype;IN.wb=function(){if(null!==this.d){return this.d}var l=this.f,m=this.gb();if("fraction"==this.g||"fraction"==this.n){if(null===m){return null}l=this.f.slice();"fraction"==this.g&&(l[0]*=m[0]);"fraction"==this.n&&(l[1]*=m[1])}if("top-left"!=this.c){if(null===m){return null}l===this.f&&(l=this.f.slice());if("top-right"==this.c||"bottom-right"==this.c){l[0]=-l[0]+m[0]}if("bottom-left"==this.c||"bottom-right"==this.c){l[1]=-l[1]+m[1]}}return this.d=l};IN.Bb=function(){return this.a.a};IN.kd=function(){return this.a.c};IN.Pc=function(){return this.a.b};IN.Kd=function(){var l=this.a;if(null===l.f){if(l.n){var v=l.c[0],t=l.c[1],m=h8(v,t);m.fillRect(0,0,v,t);l.f=m.canvas}else{l.f=l.a}}return l.f};IN.Cb=function(){if(null!==this.e){return this.e}var l=this.D;if("top-left"!=this.b){var t=this.gb(),m=this.a.c;if(null===t||null===m){return null}l=l.slice();if("top-right"==this.b||"bottom-right"==this.b){l[0]=m[0]-t[0]-l[0]}if("bottom-left"==this.b||"bottom-right"==this.b){l[1]=m[1]-t[1]-l[1]}}return this.e=l};IN.Gk=function(){return this.a.e};IN.gb=function(){return null===this.q?this.a.c:this.q};IN.we=function(l,m){return Iz(this.a,"change",l,!1,m)};IN.load=function(){this.a.load()};IN.Ne=function(l,m){cV(this.a,"change",l,!1,m)};function pQ(l,v,t,m){FC.call(this);this.f=null;this.a=null===l?new Image:l;null!==t&&(this.a.crossOrigin=t);this.d=null;this.b=m;this.c=null;this.e=v;this.n=!1}IB(pQ,FC);pQ.prototype.g=function(){this.b=3;gB(this.d,b6);this.d=null;this.dispatchEvent("change")};pQ.prototype.i=function(){this.b=2;this.c=[this.a.width,this.a.height];gB(this.d,b6);this.d=null;var l=h8(1,1);l.drawImage(this.a,0,0);try{l.getImageData(0,0,1,1)}catch(m){this.n=!0}this.dispatchEvent("change")};pQ.prototype.load=function(){if(0==this.b){this.b=1;this.d=[dK(this.a,"error",this.g,!1,this),dK(this.a,"load",this.i,!1,this)];try{this.a.src=this.e}catch(l){this.g()}}};function qE(){this.a={};this.c=0}H7(qE);qE.prototype.clear=function(){this.a={};this.c=0};qE.prototype.get=function(l,t){var m=t+":"+l;return m in this.a?this.a[m]:null};qE.prototype.set=function(l,t,m){this.a[t+":"+l]=m;++this.c};function o0(l,m){CK.call(this);this.g=m;this.b=null;this.e={};this.q={}}IB(o0,CK);function oA(l){var t=l.viewState,m=l.coordinateToPixelMatrix;CD(m,l.size[0]/2,l.size[1]/2,1/t.resolution,-1/t.resolution,-t.rotation,-t.center[0],-t.center[1]);iA(m,l.pixelToCoordinateMatrix)}IN=o0.prototype;IN.P=function(){BW(this.e,zR);o0.T.P.call(this)};function nL(){var l=qE.Pa();if(32>1;){var m=2*F+1,l=2*F+2,m=lC;){var m=B-1>>1;if(l[m]>t){w[B]=w[m],l[B]=l[m],B=m}else{break}}w[B]=v;l[B]=t}function iT(F){var D=F.e,C=F.a,B=F.c,w=0,v=C.length,t,m,l;for(m=0;m>1)-1;0<=D;D--){j5(F,D)}}function h4(l,m){lJ.call(this,function(t){return l.apply(null,t)},function(t){return t[0].qb()});this.n=m;this.d=0}IB(h4,lJ);h4.prototype.g=function(l){l=l.target.state;if(2===l||3===l||4===l){--this.d,this.n()}};function hF(l,t,m){this.d=l;this.b=t;this.e=m;this.a=[];this.c=this.f=0}hF.prototype.update=function(l,m){this.a.push(l,m,w0())};function gR(l,B){var w=l.d,v=l.c,t=l.b-v,m=f3(l);return IW({source:B,duration:m,easing:function(C){return v*(Math.exp(w*C*m)-1)/t}})}function f3(l){return Math.log(l.b/l.c)/l.d}function fE(l){y0.call(this);this.k=null;this.d(!0);this.handleEvent=l.handleEvent}IB(fE,y0);fE.prototype.b=function(){return this.get("active")};fE.prototype.getActive=fE.prototype.b;fE.prototype.d=function(l){this.set("active",l)};fE.prototype.setActive=fE.prototype.d;fE.prototype.setMap=function(l){this.k=l};function eP(l,C,B,w,v){if(null!=B){var t=C.d(),m=C.b();IL(t)&&IL(m)&&IL(v)&&0B.a.length){B=!1}else{var w=w0()-B.e,v=B.a.length-3;if(B.a[v+2]w;){t-=3}var w=B.a[v+2]-B.a[t+2],m=B.a[v]-B.a[t],v=B.a[v+1]-B.a[t+1];B.f=Math.atan2(v,m);B.c=Math.sqrt(m*m+v*v)/w;B=B.c>B.b}}}B&&(B=this.a,B=(B.b-B.c)/B.d,v=this.a.f,t=C.b(),this.g=gR(this.a,t),l.La(this.g),t=l.e(t),B=l.sa([t[0]-B*Math.cos(v),t[1]-B*Math.sin(v)]),B=C.i(B),C.Ha(B));aR(C,-1);l.render();return !1}this.e=null;return !0}function EH(l){if(0l||0!==this.g&&l<=this.g){return this}var t=l.toString();if(this.e.hasOwnProperty(t)){return this.e[t]}var m=this.oc(l);if(m.j.lengthw&&(w=v);v=m;t=l}return w}function qD(l,D,C,B,w){var v,t;v=0;for(t=C.length;vI){for(;Sv&&(G=D,v=t)}v>M&&(H[(G-S)/O]=1,B+Ol&&vl)&&(0>T&&mT)||(C[V++]=F,C[V++]=t,M=F,H=t);F=w;t=B}}C[V++]=F;C[V++]=t}}S.push(V);aa=K}return V}function jF(l,m){x4.call(this);this.b=this.n=-1;this.W(l,m)}IB(jF,x4);IN=jF.prototype;IN.clone=function(){var l=new jF(null);iS(l,this.a,this.j.slice());return l};IN.Ya=function(l,v,t,m){if(mB!=l>B&&C<(m-v)*(B-t)/(l-t)+v&&(w=!w);v=m;t=l}return w}function fD(l,C,B,w,v,t){if(0===B.length||!f2(l,C,B[0],w,v,t)){return !1}var m;C=1;for(m=B.length;Cl&&(t=(t+m)/2,fD(K,I,G,F,t,O)&&(J=t,l=H));t=m}isNaN(J)&&(J=D[C]);return IL(B)?(B.push(J,O),B):[J,O]}function d0(F,D,C,B,w,v){for(var t=[F[D],F[D+1]],m=[],l;D+B=t[0]&&m[2]<=t[2]||m[1]>=t[1]&&m[3]<=t[3]?!0:d0(l,B,w,v,function(M,J){var H=!1,G=KU(t,M),F=KU(t,J);if(1===G||1===F){H=!0}else{var C=t[0],S=t[1],O=t[2],K=t[3],I=J[0],D=J[1],P=(D-M[1])/(I-M[0]);F&2&&!(G&2)?(S=I-(D-K)/P,H=S>=C&&S<=O):F&4&&!(G&4)?(C=D-(I-O)*P,H=C>=S&&C<=K):F&8&&!(G&8)?(S=I-(D-S)/P,H=S>=C&&S<=O):F&16&&!(G&16)&&(C=D-(I-C)*P,H=C>=S&&C<=K)}return H}):!1}function cN(l,B,w,v,t){var m=w[0];if(!(dC(l,B,m,v,t)||f2(l,B,m,v,t[0],t[1])||f2(l,B,m,v,t[0],t[3])||f2(l,B,m,v,t[2],t[1])||f2(l,B,m,v,t[2],t[3]))){return !1}if(1===w.length){return !0}B=1;for(m=w.length;Bl||this.b.length<=l){return null}var m=new jF(null);iS(m,this.a,this.j.slice(0===l?0:this.b[l-1],this.b[l]));return m};IN.ld=function(){var F=this.a,D=this.j,C=this.b,B=[],w=0,v,t;v=0;for(t=C.length;vv;++v){w[v]=C.charCodeAt(B++)|C.charCodeAt(B++)<<8|C.charCodeAt(B++)<<16|C.charCodeAt(B++)<<24}}else{for(v=0;16>v;++v){w[v]=C[B++]|C[B++]<<8|C[B++]<<16|C[B++]<<24}}C=l.a[0];B=l.a[1];var v=l.a[2],t=l.a[3],m=0,m=C+(t^B&(v^t))+w[0]+3614090360&4294967295;C=B+(m<<7&4294967295|m>>>25);m=t+(v^C&(B^v))+w[1]+3905402710&4294967295;t=C+(m<<12&4294967295|m>>>20);m=v+(B^t&(C^B))+w[2]+606105819&4294967295;v=t+(m<<17&4294967295|m>>>15);m=B+(C^v&(t^C))+w[3]+3250441966&4294967295;B=v+(m<<22&4294967295|m>>>10);m=C+(t^B&(v^t))+w[4]+4118548399&4294967295;C=B+(m<<7&4294967295|m>>>25);m=t+(v^C&(B^v))+w[5]+1200080426&4294967295;t=C+(m<<12&4294967295|m>>>20);m=v+(B^t&(C^B))+w[6]+2821735955&4294967295;v=t+(m<<17&4294967295|m>>>15);m=B+(C^v&(t^C))+w[7]+4249261313&4294967295;B=v+(m<<22&4294967295|m>>>10);m=C+(t^B&(v^t))+w[8]+1770035416&4294967295;C=B+(m<<7&4294967295|m>>>25);m=t+(v^C&(B^v))+w[9]+2336552879&4294967295;t=C+(m<<12&4294967295|m>>>20);m=v+(B^t&(C^B))+w[10]+4294925233&4294967295;v=t+(m<<17&4294967295|m>>>15);m=B+(C^v&(t^C))+w[11]+2304563134&4294967295;B=v+(m<<22&4294967295|m>>>10);m=C+(t^B&(v^t))+w[12]+1804603682&4294967295;C=B+(m<<7&4294967295|m>>>25);m=t+(v^C&(B^v))+w[13]+4254626195&4294967295;t=C+(m<<12&4294967295|m>>>20);m=v+(B^t&(C^B))+w[14]+2792965006&4294967295;v=t+(m<<17&4294967295|m>>>15);m=B+(C^v&(t^C))+w[15]+1236535329&4294967295;B=v+(m<<22&4294967295|m>>>10);m=C+(v^t&(B^v))+w[1]+4129170786&4294967295;C=B+(m<<5&4294967295|m>>>27);m=t+(B^v&(C^B))+w[6]+3225465664&4294967295;t=C+(m<<9&4294967295|m>>>23);m=v+(C^B&(t^C))+w[11]+643717713&4294967295;v=t+(m<<14&4294967295|m>>>18);m=B+(t^C&(v^t))+w[0]+3921069994&4294967295;B=v+(m<<20&4294967295|m>>>12);m=C+(v^t&(B^v))+w[5]+3593408605&4294967295;C=B+(m<<5&4294967295|m>>>27);m=t+(B^v&(C^B))+w[10]+38016083&4294967295;t=C+(m<<9&4294967295|m>>>23);m=v+(C^B&(t^C))+w[15]+3634488961&4294967295;v=t+(m<<14&4294967295|m>>>18);m=B+(t^C&(v^t))+w[4]+3889429448&4294967295;B=v+(m<<20&4294967295|m>>>12);m=C+(v^t&(B^v))+w[9]+568446438&4294967295;C=B+(m<<5&4294967295|m>>>27);m=t+(B^v&(C^B))+w[14]+3275163606&4294967295;t=C+(m<<9&4294967295|m>>>23);m=v+(C^B&(t^C))+w[3]+4107603335&4294967295;v=t+(m<<14&4294967295|m>>>18);m=B+(t^C&(v^t))+w[8]+1163531501&4294967295;B=v+(m<<20&4294967295|m>>>12);m=C+(v^t&(B^v))+w[13]+2850285829&4294967295;C=B+(m<<5&4294967295|m>>>27);m=t+(B^v&(C^B))+w[2]+4243563512&4294967295;t=C+(m<<9&4294967295|m>>>23);m=v+(C^B&(t^C))+w[7]+1735328473&4294967295;v=t+(m<<14&4294967295|m>>>18);m=B+(t^C&(v^t))+w[12]+2368359562&4294967295;B=v+(m<<20&4294967295|m>>>12);m=C+(B^v^t)+w[5]+4294588738&4294967295;C=B+(m<<4&4294967295|m>>>28);m=t+(C^B^v)+w[8]+2272392833&4294967295;t=C+(m<<11&4294967295|m>>>21);m=v+(t^C^B)+w[11]+1839030562&4294967295;v=t+(m<<16&4294967295|m>>>16);m=B+(v^t^C)+w[14]+4259657740&4294967295;B=v+(m<<23&4294967295|m>>>9);m=C+(B^v^t)+w[1]+2763975236&4294967295;C=B+(m<<4&4294967295|m>>>28);m=t+(C^B^v)+w[4]+1272893353&4294967295;t=C+(m<<11&4294967295|m>>>21);m=v+(t^C^B)+w[7]+4139469664&4294967295;v=t+(m<<16&4294967295|m>>>16);m=B+(v^t^C)+w[10]+3200236656&4294967295;B=v+(m<<23&4294967295|m>>>9);m=C+(B^v^t)+w[13]+681279174&4294967295;C=B+(m<<4&4294967295|m>>>28);m=t+(C^B^v)+w[0]+3936430074&4294967295;t=C+(m<<11&4294967295|m>>>21);m=v+(t^C^B)+w[3]+3572445317&4294967295;v=t+(m<<16&4294967295|m>>>16);m=B+(v^t^C)+w[6]+76029189&4294967295;B=v+(m<<23&4294967295|m>>>9);m=C+(B^v^t)+w[9]+3654602809&4294967295;C=B+(m<<4&4294967295|m>>>28);m=t+(C^B^v)+w[12]+3873151461&4294967295;t=C+(m<<11&4294967295|m>>>21);m=v+(t^C^B)+w[15]+530742520&4294967295;v=t+(m<<16&4294967295|m>>>16);m=B+(v^t^C)+w[2]+3299628645&4294967295;B=v+(m<<23&4294967295|m>>>9);m=C+(v^(B|~t))+w[0]+4096336452&4294967295;C=B+(m<<6&4294967295|m>>>26);m=t+(B^(C|~v))+w[7]+1126891415&4294967295;t=C+(m<<10&4294967295|m>>>22);m=v+(C^(t|~B))+w[14]+2878612391&4294967295;v=t+(m<<15&4294967295|m>>>17);m=B+(t^(v|~C))+w[5]+4237533241&4294967295;B=v+(m<<21&4294967295|m>>>11);m=C+(v^(B|~t))+w[12]+1700485571&4294967295;C=B+(m<<6&4294967295|m>>>26);m=t+(B^(C|~v))+w[3]+2399980690&4294967295;t=C+(m<<10&4294967295|m>>>22);m=v+(C^(t|~B))+w[10]+4293915773&4294967295;v=t+(m<<15&4294967295|m>>>17);m=B+(t^(v|~C))+w[1]+2240044497&4294967295;B=v+(m<<21&4294967295|m>>>11);m=C+(v^(B|~t))+w[8]+1873313359&4294967295;C=B+(m<<6&4294967295|m>>>26);m=t+(B^(C|~v))+w[15]+4264355552&4294967295;t=C+(m<<10&4294967295|m>>>22);m=v+(C^(t|~B))+w[6]+2734768916&4294967295;v=t+(m<<15&4294967295|m>>>17);m=B+(t^(v|~C))+w[13]+1309151649&4294967295;B=v+(m<<21&4294967295|m>>>11);m=C+(v^(B|~t))+w[4]+4149444226&4294967295;C=B+(m<<6&4294967295|m>>>26);m=t+(B^(C|~v))+w[11]+3174756917&4294967295;t=C+(m<<10&4294967295|m>>>22);m=v+(C^(t|~B))+w[2]+718787259&4294967295;v=t+(m<<15&4294967295|m>>>17);m=B+(t^(v|~C))+w[9]+3951481745&4294967295;l.a[0]=l.a[0]+C&4294967295;l.a[1]=l.a[1]+(v+(m<<21&4294967295|m>>>11))&4294967295;l.a[2]=l.a[2]+v&4294967295;l.a[3]=l.a[3]+t&4294967295}AX.prototype.update=function(l,B){IL(B)||(B=l.length);for(var w=B-this.c,v=this.f,t=this.b,m=0;mw.b?w.c:2*w.c)-w.b);v[0]=128;for(l=1;ll;++l){for(var m=0;32>m;m+=8){v[t++]=w.a[l]>>>m&255}}if(8192>v.length){w=String.fromCharCode.apply(null,v)}else{for(w="",l=0;lthis.o&&(this.a=!0));this.g=t;l=l.map;t=kX(l.b);m=FU(this.f);m[0]-=t.x;m[1]-=t.y;this.e=l.sa(m);this.a&&(t=l.a(),m=t.d(),l.render(),eP(l,t,m+v,this.e))}function jE(l){if(2>this.f.length){l=l.map;var v=l.a();aR(v,-1);if(this.a){var t=v.d(),m=this.e,t=v.constrainRotation(t,0);eP(l,v,t,m,250)}return !1}return !0}function kS(l){return 2<=this.f.length?(l=l.map,this.e=null,this.g=void 0,this.a=!1,this.i=0,this.q||aR(l.a(),1),l.render(),!0):!1}lH.prototype.r=KW;function iR(l){Hz.call(this,{handleDownEvent:h2,handleDragEvent:hD,handleUpEvent:gP});l=IL(l)?l:{};this.e=null;this.i=IL(l.duration)?l.duration:400;this.a=void 0;this.g=1}IB(iR,Hz);function hD(l){var B=1,w=this.f[0],v=this.f[1],t=w.clientX-v.clientX,w=w.clientY-v.clientY,t=Math.sqrt(t*t+w*w);IL(this.a)&&(B=this.a/t);this.a=t;1!=B&&(this.g=B);l=l.map;var t=l.a(),w=t.a(),v=kX(l.b),m=FU(this.f);m[0]-=v.x;m[1]-=v.y;this.e=l.sa(m);l.render();dD(l,t,w*B,this.e)}function gP(l){if(2>this.f.length){l=l.map;var w=l.a();aR(w,-1);var v=w.a(),t=this.e,m=this.i,v=w.constrainResolution(v,0,this.g-1);dD(l,w,v,t,m);return !1}return !0}function h2(l){return 2<=this.f.length?(l=l.map,this.e=null,this.a=void 0,this.g=1,this.q||aR(l.a(),1),l.render(),!0):!1}iR.prototype.r=KW;function f1(l){l=IL(l)?l:{};var t=new CG,m=new hF(-0.005,0.05,100);(IL(l.altShiftDragRotate)?l.altShiftDragRotate:1)&&t.push(new CC);(IL(l.doubleClickZoom)?l.doubleClickZoom:1)&&t.push(new cO({delta:l.zoomDelta,duration:l.zoomDuration}));(IL(l.dragPan)?l.dragPan:1)&&t.push(new E6({kinetic:m}));(IL(l.pinchRotate)?l.pinchRotate:1)&&t.push(new lH);(IL(l.pinchZoom)?l.pinchZoom:1)&&t.push(new iR({duration:l.zoomDuration}));if(IL(l.keyboard)?l.keyboard:1){t.push(new pO),t.push(new n9({delta:l.zoomDelta,duration:l.zoomDuration}))}(IL(l.mouseWheelZoom)?l.mouseWheelZoom:1)&&t.push(new mV({duration:l.zoomDuration}));(IL(l.shiftDragZoom)?l.shiftDragZoom:1)&&t.push(new qC);return t}function JX(l){var m=IL(l)?l:{};l=qM(m);delete l.layers;m=m.layers;J4.call(this,l);this.a=null;Iz(this,v7("layers"),this.Di,!1,this);null!=m?F4(m)&&(m=new CG(m.slice())):m=new CG;this.r(m)}IB(JX,J4);IN=JX.prototype;IN.sf=function(){this.b()&&this.l()};IN.Di=function(){null!==this.a&&(gB(y2(this.a),b6),this.a=null);var l=this.ac();if(null!=l){this.a={add:Iz(l,"add",this.Ci,!1,this),remove:Iz(l,"remove",this.Ei,!1,this)};var l=l.a,v,t,m;v=0;for(t=l.length;vthis.f&&(this.f=this.b.lineWidth,this.d=null)};function uI(l,t,m){BL.call(this,l,t,m);this.b={ff:void 0,Ic:void 0,Dc:void 0,Ec:null,Fc:void 0,Gc:void 0,Hc:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}IB(uI,BL);function tS(G,F,D,C,B){var w=G.b,v=[1];G.c.push(v);G.a.push(v);var t,v=0;for(t=C.length;vthis.f&&(this.f=t.lineWidth,this.d=null))};function s2(F){var D=F.b,C=D.fillStyle,B=D.strokeStyle,w=D.lineCap,v=D.lineDash,t=D.lineJoin,m=D.lineWidth,l=D.miterLimit;IL(C)&&D.ff!=C&&(F.c.push([9,C]),D.ff=D.fillStyle);!IL(B)||D.Ic==B&&D.Dc==w&&D.Ec==v&&D.Fc==t&&D.Gc==m&&D.Hc==l||(F.c.push([10,B,m,w,t,l,v]),D.Ic=B,D.Dc=w,D.Ec=v,D.Fc=t,D.Gc=m,D.Hc=l)}function sC(l,t,m){BL.call(this,l,t,m);this.D=this.r=this.p=null;this.n="";this.o=this.q=this.k=this.i=0;this.g=this.e=this.b=null}IB(sC,BL);sC.prototype.vb=function(l,D,C,B,w,v){if(""!==this.n&&null!==this.g&&(null!==this.b||null!==this.e)){if(null!==this.b){w=this.b;var t=this.p;if(null===t||t.fillStyle!=w.fillStyle){var m=[9,w.fillStyle];this.c.push(m);this.a.push(m);null===t?this.p={fillStyle:w.fillStyle}:t.fillStyle=w.fillStyle}}null!==this.e&&(w=this.e,t=this.r,null===t||t.lineCap!=w.lineCap||t.lineDash!=w.lineDash||t.lineJoin!=w.lineJoin||t.lineWidth!=w.lineWidth||t.miterLimit!=w.miterLimit||t.strokeStyle!=w.strokeStyle)&&(m=[10,w.strokeStyle,w.lineWidth,w.lineCap,w.lineJoin,w.miterLimit,w.lineDash,!1],this.c.push(m),this.a.push(m),null===t?this.r={lineCap:w.lineCap,lineDash:w.lineDash,lineJoin:w.lineJoin,lineWidth:w.lineWidth,miterLimit:w.miterLimit,strokeStyle:w.strokeStyle}:(t.lineCap=w.lineCap,t.lineDash=w.lineDash,t.lineJoin=w.lineJoin,t.lineWidth=w.lineWidth,t.miterLimit=w.miterLimit,t.strokeStyle=w.strokeStyle));w=this.g;t=this.D;if(null===t||t.font!=w.font||t.textAlign!=w.textAlign||t.textBaseline!=w.textBaseline){m=[11,w.font,w.textAlign,w.textBaseline],this.c.push(m),this.a.push(m),null===t?this.D={font:w.font,textAlign:w.textAlign,textBaseline:w.textBaseline}:(t.font=w.font,t.textAlign=w.textAlign,t.textBaseline=w.textBaseline)}z7(this,v);w=this.coordinates.length;l=AW(this,l,D,C,B,!1);l=[5,w,l,this.n,this.i,this.k,this.q,this.o,null!==this.b,null!==this.e];this.c.push(l);this.a.push(l);x2(this,v)}};sC.prototype.Ca=function(F){if(null===F){this.n=""}else{var D=F.a;null===D?this.b=null:(D=D.a,D=xK(null===D?x3:D),null===this.b?this.b={fillStyle:D}:this.b.fillStyle=D);var C=F.e;if(null===C){this.e=null}else{var D=C.a,B=C.d,w=C.b,v=C.f,t=C.c,C=C.e,B=IL(B)?B:"round",w=null!=w?w.slice():xF,v=IL(v)?v:"round",t=IL(t)?t:1,C=IL(C)?C:10,D=xK(null===D?wP:D);if(null===this.e){this.e={lineCap:B,lineDash:w,lineJoin:v,lineWidth:t,miterLimit:C,strokeStyle:D}}else{var m=this.e;m.lineCap=B;m.lineDash=w;m.lineJoin=v;m.lineWidth=t;m.miterLimit=C;m.strokeStyle=D}}var l=F.d,D=F.i,B=F.k,w=F.f,t=F.c,C=F.b,v=F.g,m=F.n;F=IL(l)?l:"10px sans-serif";v=IL(v)?v:"center";m=IL(m)?m:"middle";null===this.g?this.g={font:F,textAlign:v,textBaseline:m}:(l=this.g,l.font=F,l.textAlign=v,l.textBaseline=m);this.n=IL(C)?C:"";this.i=IL(D)?D:0;this.k=IL(B)?B:0;this.q=IL(w)?w:0;this.o=IL(t)?t:1}};function q1(l,v,t,m){this.i=l;this.d=v;this.n=t;this.f=m;this.c={};this.e=h8(1,1);this.g=mE()}function qB(l){for(var v in l.c){var t=l.c[v],m;for(m in t){t[m].Kb()}}}q1.prototype.b=function(l,D,C,B,w){var v=this.g;CD(v,0.5,0.5,1/D,-1/D,-C,-l[0],-l[1]);var t=this.e;t.clearRect(0,0,1,1);var m;IL(this.f)&&(m=eV(),d7(m,l),b5(m,D*this.f,m));return pN(this,t,v,C,B,function(F){if(0F||0!==this.g&&F>1,m=B(G,C[t]),0J?(G=(G-C[-J-2])/(C[-J-1]-C[-J-2]),H+=(-J-2)*F,C=bJ(I[H],I[H+F],G),B=bJ(I[H+1],I[H+F+1],G)):(C=I[H+J*F],B=I[H+J*F+1])}}}return null!=D?(D[0]=C,D[1]=B,D):[C,B]}function fB(l,C,B,w,v,t){if(B==C){return null}if(v>1,vl||this.b.length<=l){return null}var m=new dY(null);dA(m,this.a,this.j.slice(0===l?0:this.b[l-1],this.b[l]));return m};IN.Lc=function(){var F=this.j,D=this.b,C=this.a,B=[],w=0,v,t;v=0;for(t=D.length;vl||m<=l){return null}m=new h3(null);hE(m,this.a,this.j.slice(l*this.B,(l+1)*this.B));return m};IN.Gd=function(){var l=this.j,C=this.a,B=this.B,w=[],v,t;v=0;for(t=l.length;vl||this.b.length<=l){return null}var w;0===l?w=0:(w=this.b[l-1],w=w[w.length-1]);l=this.b[l].slice();var v=l[l.length-1];if(0!==w){var t,m;t=0;for(m=l.length;t=M[0]&&O[3]>=M[1]}function m(M,W,V,T,S){for(var P=[W,V],O;P.length;){V=P.pop(),W=P.pop(),V-W<=T||(O=W+Math.ceil((V-W)/T/2)*T,K(M,W,V,O,S),P.push(W,O,O,V))}}function K(Z,Y,X,W,V){for(var T,S,P,O,M;X>Y;){600S-T/2?-1:1),P=Math.max(Y,Math.floor(W-S*O/T+M)),S=Math.min(X,Math.floor(W+(T-S)*O/T+M)),K(Z,P,S,W,V));T=Z[W];S=Y;O=X;J(Z,Y,W);for(0V(Z[S],T);){S++}for(;0this.ie){this.eh(P,T),T--}else{break}}this.Yg(S,P,T)},eh:function(M,T){var S=M[T],P=S.children.length,O=this.Ye;this.Zg(S,O,P);P={children:S.children.splice(this.$g(S,O,P)),height:S.height};S.za&&(P.za=!0);H(S,this.Ka);H(P,this.Ka);T?M[T-1].children.push(P):this.Ze(S,P)},Ze:function(M,O){this.data={children:[M,O],height:M.height+1};H(this.data,this.Ka)},$g:function(aa,Y,X){var W,V,T,S,P,O,M;P=O=Infinity;for(W=Y;W<=X-Y;W++){V=G(aa,0,W,this.Ka);T=G(aa,W,X,this.Ka);var ad=V,ab=T;S=Math.max(ad[0],ab[0]);var ac=Math.max(ad[1],ab[1]),Z=Math.min(ad[2],ab[2]),ad=Math.min(ad[3],ab[3]);S=Math.max(0,Z-S)*Math.max(0,ad-ac);V=B(V)+B(T);S=X;O--){M=Y.children[O],F(S,Y.za?V(M):M.bbox),P+=w(S)}return P},Yg:function(M,P,O){for(;0<=O;O--){F(P[O].bbox,M)}},bh:function(M){for(var P=M.length-1,O;0<=P;P--){0===M[P].children.length?0K||this.b[1]>J)?(W.width=K,W.height=J,this.b=[K,J],this.i=!kR(this.b),this.d=null):(K=this.b[0],J=this.b[1],(W=ab!=this.o)||(W=this.d,W=!(W.a<=T.a&&T.d<=W.d&&W.b<=T.b&&T.c<=W.c)),W&&(this.d=null)));var D,F;null===this.d?(K/=aa,J/=aa,D=T.a-Math.floor((K-AD(T))/2),F=T.b-Math.floor((J-(T.c-T.b+1))/2),this.o=ab,this.p=aa,this.d=new C7(D,D+K-1,F,F+J-1),this.n=Array(K*J),J=this.d):(J=this.d,K=AD(J));W={};W[ab]={};var v=[],w=this.ed(ah,W),l=ai.ea(),B=eV(),af=new C7(0,0,0,0),O,H,G;for(F=T.a;F<=T.d;++F){for(G=T.b;G<=T.c;++G){H=ah.Vb(ab,F,G,al,aj),D=H.state,2==D||4==D||3==D&&!l?W[ab][DX(H.a)]=H:(O=ag.gd(H.a,w,null,af,B),O||(v.push(H),O=ag.td(H.a,af,B),null===O||w(ab+1,O)))}}w=0;for(O=v.length;wB&&mC(this.target,J.target,0)}else{if(!ai.viewHints[0]&&!ai.viewHints[1]){D=GN(J.d,S,J.b[0],P);B=[];M=I=void 0;for(M in J.c){I=J.c[M],D.contains(I.a)||B.push(I)}F=D=void 0;D=0;for(F=B.length;D=I;){H=this.b[G];v=this.k[G];t=BX(v).toString();if(!IL(C[t])&&(!IL(m)||zP(m,v.R().J()))&&(K.clear(K.COLOR_BUFFER_BIT|K.DEPTH_BUFFER_BIT),K.drawElements(4,D-H,O,H*T),D=B(v))){C=D;break a}D=H;G--}}C=void 0}}else{K.clear(K.COLOR_BUFFER_BIT|K.DEPTH_BUFFER_BIT),BJ(this,K,T,C,this.g,this.e),C=(C=B(null))?C:void 0}t=C}else{BJ(this,K,T,C,this.ia,this.o)}K.disableVertexAttribArray(F.d);K.disableVertexAttribArray(F.a);K.disableVertexAttribArray(F.f);K.disableVertexAttribArray(F.c);K.disableVertexAttribArray(F.b);return t};function BJ(I,H,G,F,D,C){var B=G.b?5125:5123;G=G.b?4:2;if(uT(F)){var w;I=0;F=D.length;for(w=0;ID[0]||D[0]>w[0]||0>D[1]||D[1]>w[1])&&(null===this.g&&(this.g=h8(1,1)),this.g.clearRect(0,0,1,1),this.g.drawImage(this.d.a(),D[0],D[1],1,1,0,0,1,1),0w?C[0]=w-B:0>v&&(C[0]=Math.abs(v)+B),0>t?C[1]=t-B:0>m&&(C[1]=Math.abs(m)+B),0===C[0]&&0===C[1])||(B=l.a().b(),w=l.e(B),C=[w[0]+C[0],w[1]+C[1]],null!==this.g&&(this.g.source=B,l.La(IW(this.g))),l.a().Ha(l.sa(C)))}}};IN.Li=function(){c8(this)};IN.Le=function(l){this.set("element",l)};JM.prototype.setElement=JM.prototype.Le;JM.prototype.setMap=function(l){this.set("map",l)};JM.prototype.setMap=JM.prototype.setMap;JM.prototype.o=function(l){this.set("offset",l)};JM.prototype.setOffset=JM.prototype.o;JM.prototype.e=function(l){this.set("position",l)};JM.prototype.setPosition=JM.prototype.e;function cJ(l,w){var v=uP(l);nO(l,"position");var t=new xL(0,0),m;m=v?uP(v):document;m=!m5||m5&&9<=fM||jK(v5(m))?m.documentElement:m.body;l!=m&&(m=lM(l),v=iX(v5(v)),t.x=m.left+v.x,t.y=m.top+v.y);return[t.x,t.y,t.x+w[0],t.y+w[1]]}JM.prototype.p=function(l){this.set("positioning",l)};JM.prototype.setPositioning=JM.prototype.p;function c8(l){var C=l.d(),B=l.q();if(IL(C)&&null!==C.d&&IL(B)){var B=C.e(B),w=C.f(),C=l.ba.style,v=l.i(),t=l.k(),m=v[0],v=v[1];if("bottom-right"==t||"center-right"==t||"top-right"==t){""!==l.a.Dd&&(l.a.Dd=C.left=""),m=Math.round(w[0]-B[0]-m)+"px",l.a.Zd!=m&&(l.a.Zd=C.right=m)}else{""!==l.a.Zd&&(l.a.Zd=C.right="");if("bottom-center"==t||"center-center"==t||"top-center"==t){m-=j8(l.ba).width/2}m=Math.round(B[0]+m)+"px";l.a.Dd!=m&&(l.a.Dd=C.left=m)}if("bottom-left"==t||"bottom-center"==t||"bottom-right"==t){""!==l.a.$d&&(l.a.$d=C.top=""),B=Math.round(w[1]-B[1]-v)+"px",l.a.bd!=B&&(l.a.bd=C.bottom=B)}else{""!==l.a.bd&&(l.a.bd=C.bottom="");if("center-left"==t||"center-center"==t||"center-right"==t){v-=j8(l.ba).height/2}B=Math.round(B[1]+v)+"px";l.a.$d!=B&&(l.a.$d=C.top=B)}l.a.visible||(iW(l.ba,!0),l.a.visible=!0)}else{l.a.visible&&(iW(l.ba,!1),l.a.visible=!1)}}function bV(l){l=IL(l)?l:{};this.e=IL(l.collapsed)?l.collapsed:!0;this.g=IL(l.collapsible)?l.collapsible:!0;this.g||(this.e=!1);var B=IL(l.className)?l.className:"ol-overviewmap",w=IL(l.tipLabel)?l.tipLabel:"Overview map",v=IL(l.collapseLabel)?l.collapseLabel:"\u00ab";this.o=EQ(v)?qI("SPAN",{},v):v;v=IL(l.label)?l.label:"\u00bb";this.p=EQ(v)?qI("SPAN",{},v):v;w=qI("BUTTON",{type:"button",title:w},this.g&&!this.e?this.o:this.p);Iz(w,"click",this.Ij,!1,this);Iz(w,["mouseout",v8],function(){this.blur()},!1);var v=qI("DIV","ol-overviewmap-map"),t=this.d=new JP({controls:new CG,interactions:new CG,target:v});IL(l.layers)&&l.layers.forEach(function(C){t.af(C)},this);var m=qI("DIV","ol-overviewmap-box");this.k=new JM({position:[0,0],positioning:"bottom-left",element:m});this.d.bf(this.k);B=qI("DIV",B+" ol-unselectable ol-control"+(this.e&&this.g?" ol-collapsed":"")+(this.g?"":" ol-uncollapsible"),v,w);dG.call(this,{element:B,render:IL(l.render)?l.render:a6,target:l.target})}IB(bV,dG);IN=bV.prototype;IN.setMap=function(l){var m=this.a;null===l&&null!==m&&cV(m,v7("view"),this.Ff,!1,this);bV.T.setMap.call(this,l);null!==l&&(0===this.d.ea().Ib()&&this.d.K("layergroup",l),aH(this),Iz(l,v7("view"),this.Ff,!1,this),this.d.q(),n(this))};function aH(l){var m=l.a.a();null===m||l.d.a().K("rotation",m)}function a6(){var l=this.a,w=this.d;if(null!==l.d&&null!==w.d){var v=l.f(),l=l.a().g(v),t=w.f(),v=w.a().g(t),m=w.e(DY(l)),w=w.e(FB(l)),w=new wV(Math.abs(m[0]-w[0]),Math.abs(m[1]-w[1])),m=t[0],t=t[1];w.width<0.1*m||w.height<0.1*t||w.width>0.75*m||w.height>0.75*t?n(this):A(v,l)||(l=this.d,v=this.a.a(),l.a().Ha(v.b()))}rO(this)}IN.Ff=function(){aH(this)};function n(l){var v=l.a;l=l.d;var t=v.f(),v=v.a().g(t),t=l.f();l=l.a();var m=Math.log(7.5)/Math.LN2;xM(v,1/(0.1*Math.pow(2,m/2)));l.pe(v,t)}function rO(l){var D=l.a,C=l.d;if(null!==D.d&&null!==C.d){var B=D.f(),w=D.a(),v=C.a();C.f();var D=w.d(),t=l.k,C=l.k.b(),w=w.g(B),B=v.a(),v=F0(w),w=EM(w),m;l=l.a.a().b();IL(l)&&(m=[v[0]-l[0],v[1]-l[1]],rA(m,D),vH(m,l));t.e(m);null!=C&&(m=new wV(Math.abs((v[0]-w[0])/B),Math.abs((w[1]-v[1])/B)),D=jK(v5(uP(C))),!m5||gY("10")||D&&gY("8")?(C=C.style,mG?C.MozBoxSizing="border-box":lR?C.WebkitBoxSizing="border-box":C.boxSizing="border-box",C.width=Math.max(m.width,0)+"px",C.height=Math.max(m.height,0)+"px"):(l=C.style,D?(D=gU(C,"padding"),C=eS(C),l.pixelWidth=m.width-C.left-D.left-D.right-C.right,l.pixelHeight=m.height-C.top-D.top-D.bottom-C.bottom):(l.pixelWidth=m.width,l.pixelHeight=m.height)))}}IN.Ij=function(l){l.preventDefault();KJ(this)};function KJ(l){q7(l.element,"ol-collapsed");l.e?kY(l.o,l.p):kY(l.p,l.o);l.e=!l.e;var m=l.d;l.e||null!==m.d||(m.q(),n(l),dK(m,"postrender",function(){rO(this)},!1,l))}IN.Hj=function(){return this.g};IN.Kj=function(l){this.g!==l&&(this.g=l,q7(this.element,"ol-uncollapsible"),!l&&this.e&&KJ(this))};IN.Jj=function(l){this.g&&this.e!==l&&KJ(this)};IN.Gj=function(){return this.e};function JK(l){l=IL(l)?l:{};var m=IL(l.className)?l.className:"ol-scale-line";this.g=qI("DIV",m+"-inner");this.ba=qI("DIV",m+" ol-unselectable",this.g);this.r=null;this.k=IL(l.minWidth)?l.minWidth:64;this.d=!1;this.H=void 0;this.D="";this.e=null;dG.call(this,{element:this.ba,render:IL(l.render)?l.render:IK,target:l.target});Iz(this,v7("units"),this.N,!1,this);this.p(l.units||"metric")}IB(JK,dG);var HT=[1,2,5];JK.prototype.o=function(){return this.get("units")};JK.prototype.getUnits=JK.prototype.o;function IK(l){l=l.frameState;null===l?this.r=null:this.r=l.viewState;G5(this)}JK.prototype.N=function(){G5(this)};JK.prototype.p=function(l){this.set("units",l)};JK.prototype.setUnits=JK.prototype.p;function G5(l){var B=l.r;if(null===B){l.d&&(iW(l.ba,!1),l.d=!1)}else{var w=B.center,v=B.projection,B=v.getPointResolution(B.resolution,w),t=v.c,m=l.o();"degrees"!=t||"metric"!=m&&"imperial"!=m&&"us"!=m&&"nautical"!=m?"degrees"!=t&&"degrees"==m?(null===l.e&&(l.e=o5(v,sK("EPSG:4326"))),w=Math.cos(aU(l.e(w)[1])),v=vG.radius,v/=uQ[t],B*=180/(Math.PI*w*v)):l.e=null:(l.e=null,w=Math.cos(aU(w[1])),B*=Math.PI*w*vG.radius/180);w=l.k*B;t="";"degrees"==m?w<1/60?(t="\u2033",B*=3600):1>w?(t="\u2032",B*=60):t="\u00b0":"imperial"==m?0.9144>w?(t="in",B/=0.0254):1609.344>w?(t="ft",B/=0.3048):(t="mi",B/=1609.344):"nautical"==m?(B/=1852,t="nm"):"metric"==m?1>w?(t="mm",B*=1000):1000>w?t="m":(t="km",B/=1000):"us"==m&&(0.9144>w?(t="in",B*=39.37):1609.344>w?(t="ft",B/=0.30480061):(t="mi",B/=1609.3472));for(w=3*Math.floor(Math.log(l.k*B)/Math.log(10));;){v=HT[w%3]*Math.pow(10,Math.floor(w/3));m=Math.round(v/B);if(isNaN(m)){iW(l.ba,!1);l.d=!1;return}if(m>=l.k){break}++w}B=v+" "+t;l.D!=B&&(l.g.innerHTML=B,l.D=B);l.H!=m&&(l.g.style.width=m+"px",l.H=m);l.d||(iW(l.ba,!0),l.d=!0)}}function GF(l){CK.call(this);this.c=l;this.a={}}IB(GF,CK);var FQ=[];GF.prototype.Ra=function(l,B,w,v){F4(B)||(B&&(FQ[0]=B.toString()),B=FQ);for(var t=0;tv.height?(this.g=1,v=new pT(0,0,t,0)):(this.g=xZ,v=new pT(0,0,0,w));this.d.a=v||new pT(NaN,NaN,NaN,NaN);this.o=!0}l=l.frameState.viewState.resolution;l!==this.e&&(this.e=l,l=1-b4(this.a.a())(l),v=this.d,w=j9(this.element),1==this.g?m0(w,v.a.left+v.a.width*l):m0(w,v.a.left,v.a.top+v.a.height*l))}}IN.ni=function(l){var v=this.a,t=v.a(),m=t.a();v.La(HE({resolution:m,duration:200,easing:z}));l=wL(this,l.offsetX-this.k[0]/2,l.offsetY-this.k[1]/2);l=vV(this,l);t.f(t.constrainResolution(l))};IN.qi=function(){aR(this.a.a(),1)};IN.oi=function(l){l=wL(this,l.left,l.top);this.e=vV(this,l);this.a.a().f(this.e)};IN.pi=function(){var l=this.a,m=l.a();aR(m,-1);l.La(HE({resolution:this.e,duration:200,easing:z}));l=m.constrainResolution(this.e);m.f(l)};function wL(l,v,t){var m=l.d.a;return cW(1===l.g?(v-m.left)/m.width:(t-m.top)/m.height,0,1)}function vV(l,m){return cT(l.a.a())(1-m)}function u5(l){l=IL(l)?l:{};this.d=IL(l.extent)?l.extent:null;var t=IL(l.className)?l.className:"ol-zoom-extent",m=qI("BUTTON",{type:"button",title:IL(l.tipLabel)?l.tipLabel:"Fit to extent"},IL(l.label)?l.label:"E");Iz(m,"click",this.e,!1,this);Iz(m,["mouseout",v8],function(){this.blur()},!1);t=qI("DIV",t+" ol-unselectable ol-control",m);dG.call(this,{element:t,target:l.target})}IB(u5,dG);u5.prototype.e=function(l){l.preventDefault();var t=this.a;l=t.a();var m=null===this.d?l.p.J():this.d,t=t.f();l.pe(m,t)};function uF(l){y0.call(this);l=IL(l)?l:{};this.a=null;Iz(this,v7("tracking"),this.k,!1,this);this.b(IL(l.tracking)?l.tracking:!1)}IB(uF,y0);uF.prototype.P=function(){this.b(!1);uF.T.P.call(this)};uF.prototype.q=function(l){l=l.a;if(null!=l.alpha){var m=aU(l.alpha);this.set("alpha",m);"boolean"==typeof l.absolute&&l.absolute?this.set("heading",m):null!=l.webkitCompassHeading&&null!=l.webkitCompassAccuracy&&-1!=l.webkitCompassAccuracy&&this.set("heading",aU(l.webkitCompassHeading))}null!=l.beta&&this.set("beta",aU(l.beta));null!=l.gamma&&this.set("gamma",aU(l.gamma));this.l()};uF.prototype.f=function(){return this.get("alpha")};uF.prototype.getAlpha=uF.prototype.f;uF.prototype.e=function(){return this.get("beta")};uF.prototype.getBeta=uF.prototype.e;uF.prototype.g=function(){return this.get("gamma")};uF.prototype.getGamma=uF.prototype.g;uF.prototype.i=function(){return this.get("heading")};uF.prototype.getHeading=uF.prototype.i;uF.prototype.d=function(){return this.get("tracking")};uF.prototype.getTracking=uF.prototype.d;uF.prototype.k=function(){if(rW){var l=this.d();l&&null===this.a?this.a=Iz(J9,"deviceorientation",this.q,!1,this):l||null===this.a||(b6(this.a),this.a=null)}};uF.prototype.b=function(l){this.set("tracking",l)};uF.prototype.setTracking=uF.prototype.b;function tP(l){y0.call(this);this.i=l;Iz(this.i,["change","input"],this.g,!1,this);Iz(this,v7("value"),this.k,!1,this);Iz(this,v7("checked"),this.e,!1,this)}IB(tP,y0);tP.prototype.a=function(){return this.get("checked")};tP.prototype.getChecked=tP.prototype.a;tP.prototype.b=function(){return this.get("value")};tP.prototype.getValue=tP.prototype.b;tP.prototype.f=function(l){this.set("value",l)};tP.prototype.setValue=tP.prototype.f;tP.prototype.d=function(l){this.set("checked",l)};tP.prototype.setChecked=tP.prototype.d;tP.prototype.g=function(){var l=this.i;"checkbox"===l.type||"radio"===l.type?this.d(l.checked):this.f(l.value)};tP.prototype.e=function(){this.i.checked=this.a()};tP.prototype.k=function(){this.i.value=this.b()};function JJ(l){y0.call(this);this.aa=void 0;this.b="geometry";this.g=null;this.a=void 0;this.e=null;Iz(this,v7(this.b),this.xd,!1,this);IL(l)&&(l instanceof zJ||null===l?this.Sa(l):this.C(l))}IB(JJ,y0);JJ.prototype.clone=function(){var l=new JJ(this.I());l.f(this.b);var m=this.R();null!=m&&l.Sa(m.clone());m=this.g;null===m||l.i(m);return l};JJ.prototype.R=function(){return this.get(this.b)};JJ.prototype.getGeometry=JJ.prototype.R;IN=JJ.prototype;IN.Jh=function(){return this.aa};IN.Ih=function(){return this.b};IN.qj=function(){return this.g};IN.rj=function(){return this.a};IN.xi=function(){this.l()};IN.xd=function(){null!==this.e&&(b6(this.e),this.e=null);var l=this.R();null!=l&&(this.e=Iz(l,"change",this.xi,!1,this),this.l())};IN.Sa=function(l){this.set(this.b,l)};JJ.prototype.setGeometry=JJ.prototype.Sa;JJ.prototype.i=function(l){this.g=l;null===l?l=void 0:DC(l)||(l=F4(l)?l:[l],l=rZ(l));this.a=l;this.l()};JJ.prototype.d=function(l){this.aa=l;this.l()};JJ.prototype.f=function(l){cV(this,v7(this.b),this.xd,!1,this);this.b=l;Iz(this,v7(this.b),this.xd,!1,this);this.xd()};function sZ(l){l=IL(l)?l:{};this.g=this.f=this.d=this.c=this.b=this.a=null;this.e=void 0;this.Ef(IL(l.style)?l.style:sD);IL(l.features)?F4(l.features)?this.Tc(new CG(l.features.slice())):this.Tc(l.features):this.Tc(new CG);IL(l.map)&&this.setMap(l.map)}IN=sZ.prototype;IN.Cf=function(l){this.a.push(l)};IN.kj=function(){return this.a};IN.lj=function(){return this.d};IN.Df=function(){sc(this)};IN.vi=function(l){l=l.element;this.c[BX(l).toString()]=Iz(l,"change",this.Df,!1,this);sc(this)};IN.wi=function(l){l=BX(l.element).toString();b6(this.c[l]);delete this.c[l];sc(this)};IN.oj=function(){sc(this)};IN.pj=function(F){if(null!==this.a){var D=this.e;IL(D)||(D=sD);var C=F.a;F=F.frameState;var B=F.viewState.resolution,w=IO(B,F.pixelRatio),v,t,m,l;this.a.forEach(function(G){l=G.a;m=IL(l)?l.call(G,B):D(G,B);if(null!=m){for(t=m.length,v=0;vm?l[1]="?":m==t.length-1&&(l[1]=void 0)}return l.join("")}function c5(l,v,t){if(F4(v)){for(var m=0;mm){throw Error("Bad port number "+m)}l.tc=m}else{l.tc=null}}function i(l,t,m){t instanceof KG?(l.a=t,FN(l.a,l.Yb)):(m||(t=JF(t,EY)),l.a=new KG(t,0,l.Yb))}function EA(l){return l instanceof bS?l.clone():new bS(l,void 0)}function DK(G,F){G instanceof bS||(G=EA(G));F instanceof bS||(F=EA(F));var D=G,C=F,B=D.clone(),w=!!C.Pb;w?a3(B,C.Pb):w=!!C.gc;w?B.gc=C.gc:w=!!C.sb;w?B.sb=C.sb:w=null!=C.tc;var v=C.rb;if(w){aE(B,C.tc)}else{if(w=!!C.rb){if("/"!=v.charAt(0)&&(D.sb&&!D.rb?v="/"+v:(D=B.rb.lastIndexOf("/"),-1!=D&&(v=B.rb.substr(0,D+1)+v))),D=v,".."==D||"."==D){v=""}else{if(-1!=D.indexOf("./")||-1!=D.indexOf("/.")){for(var v=0==D.lastIndexOf("/",0),D=D.split("/"),t=[],m=0;m>4&15).toString(16)+(l&15).toString(16)}var IH=/[#\/\?@]/g,G2=/[\#\?:]/g,HQ=/[\#\?]/g,EY=/[\#\?@]/g,GC=/#/g;function KG(l,t,m){this.a=l||null;this.c=!!m}function B5(l){l.ga||(l.ga=new d3,l.ya=0,l.a&&eH(l.a,function(t,m){l.add(decodeURIComponent(t.replace(/\+/g," ")),m)}))}IN=KG.prototype;IN.ga=null;IN.ya=null;IN.Tb=function(){B5(this);return this.ya};IN.add=function(l,t){B5(this);this.a=null;l=BF(this,l);var m=this.ga.get(l);m||this.ga.set(l,m=[]);m.push(t);this.ya++;return this};IN.remove=function(l){B5(this);l=BF(this,l);return cQ(this.ga.c,l)?(this.a=null,this.ya-=this.ga.get(l).length,this.ga.remove(l)):!1};IN.clear=function(){this.ga=this.a=null;this.ya=0};IN.la=function(){B5(this);return 0==this.ya};function AQ(l,m){B5(l);m=BF(l,m);return cQ(l.ga.c,m)}IN.G=function(){B5(this);for(var l=this.ga.ob(),B=this.ga.G(),w=[],v=0;vt;++t){var m=parseInt(v[t],10).toString(16);v[t]=1==m.length?"0"+m:m}g8(l,v.join(""))}function zA(l,t,m){p8({node:l},yL,xV,[t],m)}function w7(l,w,v){var t={node:l};null!=w.aa&&l.setAttribute("id",w.aa);l=w.I();var m=w.a;IL(m)&&(m=m.call(w,0),null!==m&&0w?~(w<<1):w<<1}C="";B=0;for(w=l.length;B>=5}t=v+63;m+=String.fromCharCode(t);C+=m}return C}function pF(F,D){var C=IL(D)?D:100000,B=[],w=0,v=0,t,m;t=0;for(m=F.length;tl?(B.push(w),v=w=0):v+=5}w=0;for(v=B.length;w>1):t>>1}w=0;for(v=B.length;w=l||"."==l&&!m}function HN(l){var w=l.c.charAt(++l.a),v={position:l.a,value:w};if("("==w){v.type=2}else{if(","==w){v.type=5}else{if(")"==w){v.type=3}else{if(F9(w)||"-"==w){v.type=4;var t,w=l.a,m=!1;do{"."==t&&(m=!0),t=l.c.charAt(++l.a)}while(F9(t,m));l=parseFloat(l.c.substring(w,l.a--));v.value=l}else{if("a"<=w&&"z">=w||"A"<=w&&"Z">=w){v.type=1;w=l.a;do{t=l.c.charAt(++l.a)}while("a"<=t&&"z">=t||"A"<=t&&"Z">=t);l=l.c.substring(w,l.a--).toUpperCase();v.value=l}else{if(" "==w||"\t"==w||"\r"==w||"\n"==w){return HN(l)}if(""===w){v.type=6}else{throw Error("Unexpected character: "+w)}}}}}}return v}function JA(l){this.c=l}IN=JA.prototype;IN.match=function(l){if(l=this.a.type==l){this.a=HN(this.c)}return l};function GZ(l){var v=l.a;if(l.match(1)){var t=v.value;if("GEOMETRYCOLLECTION"==t){a:{if(l.match(2)){v=[];do{v.push(GZ(l))}while(l.match(5));if(l.match(3)){l=v;break a}}else{if(FK(l)){l=[];break a}}throw Error(EV(l))}return new iQ(l)}var m=D7[t],v=DH[t];if(!IL(m)||!IL(v)){throw Error("Invalid geometry type: "+t)}l=m.call(l);return new v(l)}throw Error(EV(l))}IN.De=function(){if(this.match(2)){var l=CR(this);if(this.match(3)){return l}}else{if(FK(this)){return null}}throw Error(EV(this))};IN.Ce=function(){if(this.match(2)){var l=B2(this);if(this.match(3)){return l}}else{if(FK(this)){return[]}}throw Error(EV(this))};IN.Ee=function(){if(this.match(2)){var l=BC(this);if(this.match(3)){return l}}else{if(FK(this)){return[]}}throw Error(EV(this))};IN.nl=function(){if(this.match(2)){var l;if(2==this.a.type){for(l=[this.De()];this.match(5);){l.push(this.De())}}else{l=B2(this)}if(this.match(3)){return l}}else{if(FK(this)){return[]}}throw Error(EV(this))};IN.ml=function(){if(this.match(2)){var l=BC(this);if(this.match(3)){return l}}else{if(FK(this)){return[]}}throw Error(EV(this))};IN.ol=function(){if(this.match(2)){for(var l=[this.Ee()];this.match(5);){l.push(this.Ee())}if(this.match(3)){return l}}else{if(FK(this)){return[]}}throw Error(EV(this))};function CR(l){for(var v=[],t=0;2>t;++t){var m=l.a;if(l.match(4)){v.push(m.value)}else{break}}if(2==v.length){return v}throw Error(EV(l))}function B2(l){for(var m=[CR(l)];l.match(5);){m.push(CR(l))}return m}function BC(l){for(var m=[l.Ce()];l.match(5);){m.push(l.Ce())}return m}function FK(l){var m=1==l.a.type&&"EMPTY"==l.a.value;m&&(l.a=HN(l.c));return m}function EV(l){return"Unexpected `"+l.a.value+"` at position "+l.a.position+" in `"+l.c.c+"`"}var DH={POINT:h3,LINESTRING:dY,POLYGON:JZ,MULTIPOINT:aJ,MULTILINESTRING:cL,MULTIPOLYGON:p},D7={POINT:JA.prototype.De,LINESTRING:JA.prototype.Ce,POLYGON:JA.prototype.Ee,MULTIPOINT:JA.prototype.nl,MULTILINESTRING:JA.prototype.ml,MULTIPOLYGON:JA.prototype.ol};function AN(){this.version=void 0}IB(AN,FL);AN.prototype.c=function(l){for(l=l.firstChild;null!==l;l=l.nextSibling){if(1==l.nodeType){return this.a(l)}}return null};AN.prototype.a=function(l){this.version=rD(l.getAttribute("version"));l=Jz({version:this.version},zY,l,[]);return IL(l)?l:null};function y8(l,m){return Jz({},yJ,l,m)}function xT(l,m){return Jz({},w5,l,m)}function wF(l,v){var t=y8(l,v);if(IL(t)){var m=[iM(l.getAttribute("width")),iM(l.getAttribute("height"))];t.size=m;return t}}function vP(l,m){return Jz([],uZ,l,m)}var t9=[null,"http://www.opengis.net/wms"],zY=JD(t9,{Service:JH(function(l,m){return Jz({},tJ,l,m)}),Capability:JH(function(l,m){return Jz({},sT,l,m)})}),sT=JD(t9,{Request:JH(function(l,m){return Jz({},r5,l,m)}),Exception:JH(function(l,m){return Jz([],qS,l,m)}),Layer:JH(function(l,m){return Jz({},p3,l,m)})}),tJ=JD(t9,{Name:JH(I8),Title:JH(I8),Abstract:JH(I8),KeywordList:JH(vP),OnlineResource:JH(Gz),ContactInformation:JH(function(l,m){return Jz({},pE,l,m)}),Fees:JH(I8),AccessConstraints:JH(I8),LayerLimit:JH(i9),MaxWidth:JH(i9),MaxHeight:JH(i9)}),pE=JD(t9,{ContactPersonPrimary:JH(function(l,m){return Jz({},oO,l,m)}),ContactPosition:JH(I8),ContactAddress:JH(function(l,m){return Jz({},nZ,l,m)}),ContactVoiceTelephone:JH(I8),ContactFacsimileTelephone:JH(I8),ContactElectronicMailAddress:JH(I8)}),oO=JD(t9,{ContactPerson:JH(I8),ContactOrganization:JH(I8)}),nZ=JD(t9,{AddressType:JH(I8),Address:JH(I8),City:JH(I8),StateOrProvince:JH(I8),PostCode:JH(I8),Country:JH(I8)}),qS=JD(t9,{Format:xY(I8)}),p3=JD(t9,{Name:JH(I8),Title:JH(I8),Abstract:JH(I8),KeywordList:JH(vP),CRS:wK(I8),EX_GeographicBoundingBox:JH(function(l,B){var w=Jz({},nb,l,B);if(IL(w)){var v=w.westBoundLongitude,t=w.southBoundLatitude,m=w.eastBoundLongitude,w=w.northBoundLatitude;return IL(v)&&IL(t)&&IL(m)&&IL(w)?[v,t,m,w]:void 0}}),BoundingBox:wK(function(l){var t=[jY(l.getAttribute("minx")),jY(l.getAttribute("miny")),jY(l.getAttribute("maxx")),jY(l.getAttribute("maxy"))],m=[jY(l.getAttribute("resx")),jY(l.getAttribute("resy"))];return{crs:l.getAttribute("CRS"),extent:t,res:m}}),Dimension:wK(function(l){return{name:l.getAttribute("name"),units:l.getAttribute("units"),unitSymbol:l.getAttribute("unitSymbol"),"default":l.getAttribute("default"),multipleValues:l1(l.getAttribute("multipleValues")),nearestValue:l1(l.getAttribute("nearestValue")),current:l1(l.getAttribute("current")),values:I8(l)}}),Attribution:JH(function(l,m){return Jz({},mL,l,m)}),AuthorityURL:wK(function(l,t){var m=y8(l,t);if(IL(m)){return m.name=l.getAttribute("name"),m}}),Identifier:wK(I8),MetadataURL:wK(function(l,t){var m=y8(l,t);if(IL(m)){return m.type=l.getAttribute("type"),m}}),DataURL:wK(y8),FeatureListURL:wK(y8),Style:wK(function(l,m){return Jz({},lW,l,m)}),MinScaleDenominator:JH(kN),MaxScaleDenominator:JH(kN),Layer:wK(function(l,w){var v=w[w.length-1],t=Jz({},p3,l,w);if(IL(t)){var m=l1(l.getAttribute("queryable"));IL(m)||(m=v.queryable);t.queryable=IL(m)?m:!1;m=iM(l.getAttribute("cascaded"));IL(m)||(m=v.cascaded);t.cascaded=m;m=l1(l.getAttribute("opaque"));IL(m)||(m=v.opaque);t.opaque=IL(m)?m:!1;m=l1(l.getAttribute("noSubsets"));IL(m)||(m=v.noSubsets);t.noSubsets=IL(m)?m:!1;m=jY(l.getAttribute("fixedWidth"));IL(m)||(m=v.fixedWidth);t.fixedWidth=m;m=jY(l.getAttribute("fixedHeight"));IL(m)||(m=v.fixedHeight);t.fixedHeight=m;gB(["Style","CRS","AuthorityURL"],function(B){var D=v[B];if(IL(D)){var C=rC(t,B),C=C.concat(D);t[B]=C}});gB("EX_GeographicBoundingBox BoundingBox Dimension Attribution MinScaleDenominator MaxScaleDenominator".split(" "),function(B){IL(t[B])||(t[B]=v[B])});return t}})}),mL=JD(t9,{Title:JH(I8),OnlineResource:JH(Gz),LogoURL:JH(wF)}),nb=JD(t9,{westBoundLongitude:JH(kN),eastBoundLongitude:JH(kN),southBoundLatitude:JH(kN),northBoundLatitude:JH(kN)}),r5=JD(t9,{GetCapabilities:JH(xT),GetMap:JH(xT),GetFeatureInfo:JH(xT)}),w5=JD(t9,{Format:wK(I8),DCPType:wK(function(l,m){return Jz({},k7,l,m)})}),k7=JD(t9,{HTTP:JH(function(l,m){return Jz({},kI,l,m)})}),kI=JD(t9,{Get:JH(y8),Post:JH(y8)}),lW=JD(t9,{Name:JH(I8),Title:JH(I8),Abstract:JH(I8),LegendURL:wK(wF),StyleSheetURL:JH(y8),StyleURL:JH(y8)}),yJ=JD(t9,{Format:JH(I8),OnlineResource:JH(Gz)}),uZ=JD(t9,{Keyword:xY(I8)});function jT(){this.b="http://mapserver.gis.umn.edu/mapserver";this.c=new rM;this.defaultDataProjection=null}IB(jT,pJ);function i4(l,w,v){w.namespaceURI=l.b;var t=rN(w),m=[];if(0===w.childNodes.length){return m}"msGMLOutput"==t&&gB(w.childNodes,function(B){if(1===B.nodeType){var G=v[0],D=B.localName,F=RegExp,C;C="_layer".replace(/([-()\[\]{}+?*.$\^|,:#=m.n&&m.cancel())}this.o?this.o.call(this.q,this):this.i=!0;this.a||(l=new jS,i3(this),iG(this,!1,l))}};kH.prototype.k=function(l,m){this.g=!1;iG(this,l,m)};function iG(l,t,m){l.a=!0;l.b=m;l.d=!t;hR(l)}function i3(l){if(l.a){if(!l.i){throw new g2}l.i=!1}}function gE(l,v,t,m){l.f.push([v,t,m]);l.a&&hR(l)}kH.prototype.then=function(l,B,w){var v,t,m=new uY(function(C,D){v=C;t=D});gE(this,v,function(C){C instanceof jS?m.cancel():t(C)});return m.then(l,B,w)};BB(kH);function fQ(l){return eb(l.f,function(m){return DC(m[1])})}function hR(F){if(F.e&&F.a&&fQ(F)){var D=F.e,C=e1[D];C&&(J9.clearTimeout(C.aa),delete e1[D]);F.e=0}F.c&&(F.c.n--,delete F.c);for(var D=F.b,B=C=!1;F.f.length&&!F.g;){var w=F.f.shift(),v=w[0],t=w[1],w=w[2];if(v=F.d?t:v){try{var m=v.call(w||F.q,D);IL(m)&&(F.d=F.d&&(m==D||m instanceof Error),F.b=D=m);AM(D)&&(B=!0,F.g=!0)}catch(l){D=l,F.d=!0,fQ(F)||(C=!0)}}}F.b=D;B&&(m=yE(F.k,F,!0),B=yE(F.k,F,!1),D instanceof kH?(gE(D,m,B),D.p=!0):D.then(m,B));C&&(D=new eC(D),e1[D.aa]=D,F.e=D.aa)}function g2(){uU.call(this)}IB(g2,uU);g2.prototype.message="Deferred has already fired";g2.prototype.name="AlreadyCalledError";function jS(){uU.call(this)}IB(jS,uU);jS.prototype.message="Deferred was canceled";jS.prototype.name="CanceledError";function eC(l){this.aa=J9.setTimeout(yE(this.c,this),0);this.a=l}eC.prototype.c=function(){delete e1[this.aa];throw this.a};var e1={};function dO(l,m){IL(l.name)?(this.name=l.name,this.code=c0[l.name]):(this.code=l.code,this.name=cB(l.code));uU.call(this,sO("%s %s",this.name,m))}IB(dO,uU);function cB(l){var m=vJ(c0,function(t){return l==t});if(!IL(m)){throw Error("Invalid code: "+l)}return m}var c0={AbortError:3,EncodingError:5,InvalidModificationError:9,InvalidStateError:7,NotFoundError:1,NotReadableError:4,NoModificationAllowedError:6,PathExistsError:12,QuotaExceededError:10,SecurityError:2,SyntaxError:8,TypeMismatchError:11};function bN(l,m){y1.call(this,l.type,m)}IB(bN,y1);function aY(){FC.call(this);this.hb=new FileReader;this.hb.onloadstart=yE(this.a,this);this.hb.onprogress=yE(this.a,this);this.hb.onload=yE(this.a,this);this.hb.onabort=yE(this.a,this);this.hb.onerror=yE(this.a,this);this.hb.onloadend=yE(this.a,this)}IB(aY,FC);aY.prototype.getError=function(){return this.hb.error&&new dO(this.hb.error,"reading file")};aY.prototype.a=function(l){this.dispatchEvent(new bN(l,this))};aY.prototype.P=function(){aY.T.P.call(this);delete this.hb};function U(l){var m=new kH;l.Ra("loadend",xO(function(t,B){var w=B.hb.result,v=B.getError();null==w||v?(i3(t),iG(t,!1,v)):(i3(t),iG(t,!0,w));B.Jc()},m,l));return m}function d(l){l=IL(l)?l:{};fE.call(this,{handleEvent:J5});this.e=IL(l.formatConstructors)?l.formatConstructors:[];this.q=IL(l.projection)?sK(l.projection):null;this.f=null;this.a=void 0}IB(d,fE);d.prototype.P=function(){IL(this.a)&&b6(this.a);d.T.P.call(this)};d.prototype.g=function(l){l=l.a.dataTransfer.files;var C,B,w;C=0;for(B=l.length;C=m*m+v*v&&(yH(this,l),null===this.i?xR(this,l):this.a===B0||this.a===zW&&null!==this.i||w3(this,l)?this.U():(l=l.coordinate,m=this.g.R(),this.a===BA?(this.i=l.slice(),v=m.Q(),v.push(l.slice()),m.W(v)):this.a===AL&&(this.e[0].push(l.slice()),m.W(this.e)),wD(this)),t=!1);return t}function yH(l,B){if(l.a===B0&&null===l.i){xR(l,B)}else{if(null===l.i){var w=B.coordinate.slice();null===l.p?(l.p=new JJ(new h3(w)),wD(l)):l.p.R().W(w)}else{var w=B.coordinate,v=l.g.R(),t,m;l.a===B0?(m=v.Q(),m[0]=w[0],m[1]=w[1],v.W(m)):(l.a===BA?t=v.Q():l.a===AL?t=l.e[0]:l.a===zW&&(t=v.Oc()),w3(l,B)&&(w=l.i.slice()),l.p.R().W(w),m=t[t.length-1],m[0]=w[0],m[1]=w[1],l.a===BA?v.W(t):l.a===AL?(m=l.o.R(),m.W(t),v.W(l.e)):l.a===zW&&(m=l.o.R(),m.W([v.Oc(),w]),v.Hf(m.If())));wD(l)}}return !0}function w3(G,F){var D=!1;if(null!==G.g){var C=G.g.R(),B=!1,w=[G.i];G.a===BA?B=2G.Fa,w=[G.e[0][0],G.e[0][G.e[0].length-2]]);if(B){for(var C=F.map,B=0,v=w.length;BC?t[1]:t[0]);pC(F,m);C={};C[BX(t)]=!0;D=1;for(l=v.length;Dv&&(B.index+=m)})}function qQ(){var l=q2();return function(){return l.Point}}function m8(l,t,m){y1.call(this,l);this.selected=t;this.deselected=m}IB(m8,y1);function mJ(l){fE.call(this,{handleEvent:lU});l=IL(l)?l:{};this.i=IL(l.condition)?l.condition:s;this.e=IL(l.addCondition)?l.addCondition:KW;this.p=IL(l.removeCondition)?l.removeCondition:KW;this.D=IL(l.toggleCondition)?l.toggleCondition:JS;this.g=IL(l.multi)?l.multi:!1;var t;if(IL(l.layers)){if(DC(l.layers)){t=l.layers}else{var m=l.layers;t=function(v){return b8(m,v)}}}else{t=J5}this.f=t;this.a=new sZ({style:IL(l.style)?l.style:k5()});l=this.a.a;Iz(l,"add",this.q,!1,this);Iz(l,"remove",this.r,!1,this)}IB(mJ,fE);mJ.prototype.o=function(){return this.a.a};function lU(F){if(!this.i(F)){return !0}var D=this.e(F),C=this.p(F),B=this.D(F),w=F.map,v=this.a.a,t=[],m=[],l=!1;if(D||C||B){w.qe(F.pixel,function(G){-1==gZ(v.a,G)?(D||B)&&m.push(G):(C||B)&&t.push(G)},void 0,this.f);for(w=t.length-1;0<=w;--w){v.remove(t[w])}v.xe(m);if(0F.d?(t=b7(t,AD(F)),F=[v,t,G[2]]):F=G):(v=G[1],F=C5(D,G[0],F),F=vF.d?null:G):F=G;C=null===F?void 0:this.tileUrlFunction(F,C,B);C=new this.tileClass(G,IL(C)?0:4,IL(C)?C:"",this.crossOrigin,this.tileLoadFunction);Iz(C,"change",this.tk,!1,this);this.a.set(w,C);return C};IN.bb=function(){return this.tileLoadFunction};IN.cb=function(){return this.tileUrlFunction};IN.tk=function(l){l=l.target;switch(l.state){case 1:this.dispatchEvent(new xJ("tileloadstart",l));break;case 2:this.dispatchEvent(new xJ("tileloadend",l));break;case 3:this.dispatchEvent(new xJ("tileloaderror",l))}};IN.jb=function(l){this.a.clear();this.tileLoadFunction=l;this.l()};IN.ua=function(l){this.a.clear();this.tileUrlFunction=l;this.l()};IN.Oe=function(l,t,m){l=this.nb(l,t,m);b3(this.a,l)&&this.a.get(l)};function GW(l){var t=IL(l.extent)?l.extent:eN,m=AB(t,l.maxZoom,l.tileSize);IU.call(this,{minZoom:l.minZoom,origin:CI(t,"top-left"),resolutions:m,tileSize:l.tileSize})}IB(GW,IU);GW.prototype.Db=function(l){l=IL(l)?l:{};var w=this.minZoom,v=this.maxZoom,t=null;if(IL(l.extent)){var t=Array(v+1),m;for(m=0;m<=v;++m){t[m]=m=this.minZoom;--l){if(m.a=m.d>>=1,m.b=m.c>>=1,v.call(t,l,m)){return !0}}return !1};function F6(l){H9.call(this,{crossOrigin:"anonymous",opaque:!0,projection:sK("EPSG:3857"),state:"loading",tileLoadFunction:l.tileLoadFunction,wrapX:IL(l.wrapX)?l.wrapX:!0});this.d=IL(l.culture)?l.culture:"en-us";this.b=IL(l.maxZoom)?l.maxZoom:-1;var m=new bS((eX?"https:":"http:")+"//dev.virtualearth.net/REST/v1/Imagery/Metadata/"+l.imagerySet);(new eB(m,"jsonp")).send({include:"ImageryProviders",uriScheme:eX?"https":"http",key:l.key},yE(this.g,this))}IB(F6,H9);var FH=new yY({html:'Terms of Use'});F6.prototype.g=function(l){if(200!=l.statusCode||"OK"!=l.statusDescription||"ValidCredentials"!=l.authenticationResultCode||1!=l.resourceSets.length||1!=l.resourceSets[0].resources.length){JY(this,"error")}else{var C=l.brandLogoUri;eX&&-1==C.indexOf("https")&&(C=C.replace("http","https"));var B=l.resourceSets[0].resources[0],w=-1==this.b?B.zoomMax:this.b,v=new GW({extent:CF(this.e),minZoom:B.zoomMin,maxZoom:w,tileSize:B.imageWidth});this.tileGrid=v;var t=this.d;this.tileUrlFunction=KA(v.Db(),c(eY(B.imageUrlSubdomains,function(D){var F=B.imageUrl.replace("{subdomain}",D).replace("{culture}",t);return function(G){return null===G?void 0:F.replace("{quadkey}",FA(G))}})));if(B.imageryProviders){var m=o5(sK("EPSG:4326"),this.e);l=eY(B.imageryProviders,function(D){var G=D.attribution,F={};gB(D.coverageAreas,function(H){var M=H.zoomMin,J=Math.min(H.zoomMax,w);H=H.bbox;H=wW([H[1],H[0],H[3],H[2]],m);var I,K;for(I=M;I<=J;++I){K=I.toString(),M=GN(v,H,I),K in F?F[K].push(M):F[K]=[M]}});return new yY({html:G,tileRanges:F})});l.push(FH);this.f=l}this.D=C;JY(this,"ready")}};function ES(l){u7.call(this,{attributions:l.attributions,extent:l.extent,logo:l.logo,projection:l.projection});this.p=void 0;this.r=IL(l.distance)?l.distance:20;this.o=[];this.a=l.source;this.a.s("change",ES.prototype.N,this)}IB(ES,u7);ES.prototype.H=function(){return this.a};ES.prototype.Hb=function(l,t,m){t!==this.p&&(this.clear(),this.p=t,this.a.Hb(l,t,m),D4(this),this.Ga(this.o))};ES.prototype.N=function(){this.clear();D4(this);this.Ga(this.o);this.l()};function D4(l){if(IL(l.p)){l.o.length=0;for(var D=eV(),C=l.r*l.p,B=l.a.Aa(),w={},v=0,t=B.length;vt*v?w*B/(t*l):v*B/(m*l);D=C8(D);C={OPERATION:this.U?"GETDYNAMICMAPOVERLAYIMAGE":"GETMAPIMAGE",VERSION:"2.0.0",LOCALE:"en",CLIENTAGENT:"ol.source.ImageMapGuide source",CLIP:"1",SETDISPLAYDPI:this.g,SETDISPLAYWIDTH:Math.round(C[0]),SETDISPLAYHEIGHT:Math.round(C[1]),SETVIEWSCALE:B,SETVIEWCENTERX:D[0],SETVIEWCENTERY:D[1]};o8(C,F);return dT(cG([G],C))};IN.ak=function(l){this.b=null;this.a=l;this.l()};function iE(l){var C=IL(l.attributions)?l.attributions:null,B=l.imageExtent,w,v;IL(l.imageSize)&&(w=A4(B)/l.imageSize[1],v=[w]);var t=IL(l.crossOrigin)?l.crossOrigin:null,m=IL(l.imageLoadFunction)?l.imageLoadFunction:AV;FS.call(this,{attributions:C,logo:l.logo,projection:sK(l.projection),resolutions:v});this.a=new FJ(B,w,1,C,l.url,t,m)}IB(iE,FS);iE.prototype.sc=function(l){return zP(l,this.a.J())?this.a:null};function hP(l){l=IL(l)?l:{};FS.call(this,{attributions:l.attributions,logo:l.logo,projection:l.projection,resolutions:l.resolutions});this.S=IL(l.crossOrigin)?l.crossOrigin:null;this.d=l.url;this.k=IL(l.imageLoadFunction)?l.imageLoadFunction:AV;this.b=l.params;this.g=!0;g0(this);this.N=l.serverType;this.U=IL(l.hidpi)?l.hidpi:!0;this.a=null;this.o=[0,0];this.H=0;this.p=IL(l.ratio)?l.ratio:1.5}IB(hP,FS);var gC=[101,101];IN=hP.prototype;IN.hk=function(l,B,w,v){if(IL(this.d)){var t=BT(l,B,0,gC),m={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.b.LAYERS};o8(m,this.b,v);v=Math.floor((t[3]-l[1])/B);m[this.g?"I":"X"]=Math.floor((l[0]-t[0])/B);m[this.g?"J":"Y"]=v;return fO(this,t,gC,1,sK(w),m)}};IN.jk=function(){return this.b};IN.sc=function(G,F,D,C){if(!IL(this.d)){return null}F=E3(this,F);1==D||this.U&&IL(this.N)||(D=1);var B=this.a;if(null!==B&&this.H==this.c&&B.resolution==F&&B.f==D&&A(B.J(),G)){return B}B={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0};o8(B,this.b);G=G.slice();var w=(G[0]+G[2])/2,v=(G[1]+G[3])/2;if(1!=this.p){var t=this.p*yZ(G)/2,m=this.p*A4(G)/2;G[0]=w-t;G[1]=v-m;G[2]=w+t;G[3]=v+m}var t=F/D,m=Math.ceil(yZ(G)/t),l=Math.ceil(A4(G)/t);G[0]=w-t*m/2;G[2]=w+t*m/2;G[1]=v-t*l/2;G[3]=v+t*l/2;this.o[0]=m;this.o[1]=l;C=fO(this,G,this.o,D,C,B);this.a=new FJ(G,F,D,this.f,C,this.S,this.k);this.H=this.c;Iz(this.a,"change",this.r,!1,this);return this.a};IN.ik=function(){return this.k};function fO(l,C,B,w,v,t){t[l.g?"CRS":"SRS"]=v.a;"STYLES" in l.b||(t.STYLES=new String(""));if(1!=w){switch(l.N){case"geoserver":t.FORMAT_OPTIONS="dpi:"+(90*w+0.5|0);break;case"mapserver":t.MAP_RESOLUTION=90*w;break;case"carmentaserver":case"qgis":t.DPI=90*w}}t.WIDTH=B[0];t.HEIGHT=B[1];B=v.b;var m;l.g&&"ne"==B.substr(0,2)?m=[C[1],C[0],C[3],C[2]]:m=C;t.BBOX=m.join(",");return dT(cG([l.d],t))}IN.kk=function(){return this.d};IN.lk=function(l){this.a=null;this.k=l;this.l()};IN.mk=function(l){l!=this.d&&(this.d=l,this.a=null,this.l())};IN.nk=function(l){o8(this.b,l);g0(this);this.a=null;this.l()};function g0(l){l.g=0<=jP(sN(l.b,"VERSION","1.3.0"),"1.3")}function eZ(l){l=IL(l)?l:{};KV.call(this,{attributions:l.attributions,doc:l.doc,format:new yM({extractStyles:l.extractStyles,defaultStyle:l.defaultStyle}),logo:l.logo,node:l.node,projection:l.projection,text:l.text,url:l.url,urls:l.urls})}IB(eZ,KV);function eA(l){var t=IL(l.projection)?l.projection:"EPSG:3857",m=new GW({extent:CF(t),maxZoom:l.maxZoom,tileSize:l.tileSize});H9.call(this,{attributions:l.attributions,crossOrigin:l.crossOrigin,logo:l.logo,projection:t,tileGrid:m,tileLoadFunction:l.tileLoadFunction,tilePixelRatio:l.tilePixelRatio,tileUrlFunction:rF,wrapX:IL(l.wrapX)?l.wrapX:!0});this.i=m.Db();IL(l.tileUrlFunction)?this.ua(l.tileUrlFunction):IL(l.urls)?this.ua(R(l.urls)):IL(l.url)&&this.b(l.url)}IB(eA,H9);eA.prototype.ua=function(l){eA.T.ua.call(this,KA(this.i,l))};eA.prototype.b=function(l){this.ua(R(I5(l)))};function dM(l){l=IL(l)?l:{};var t;IL(l.attributions)?t=l.attributions:t=[cY];var m=eX?"https:":"http:";eA.call(this,{attributions:t,crossOrigin:IL(l.crossOrigin)?l.crossOrigin:"anonymous",opaque:!0,maxZoom:IL(l.maxZoom)?l.maxZoom:19,tileLoadFunction:l.tileLoadFunction,url:IL(l.url)?l.url:m+"//{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:l.wrapX})}IB(dM,eA);var cY=new yY({html:'© OpenStreetMap contributors.'});function b9(l){l=IL(l)?l:{};var t=bL[l.layer];this.d=l.layer;var m=eX?"https:":"http:";eA.call(this,{attributions:t.attributions,crossOrigin:"anonymous",logo:"//developer.mapquest.com/content/osm/mq_logo.png",maxZoom:t.maxZoom,opaque:!0,tileLoadFunction:l.tileLoadFunction,url:IL(l.url)?l.url:m+"//otile{1-4}-s.mqcdn.com/tiles/1.0.0/"+this.d+"/{z}/{x}/{y}.jpg"})}IB(b9,eA);var aW=new yY({html:'Tiles Courtesy of MapQuest'}),bL={osm:{maxZoom:19,attributions:[aW,cY]},sat:{maxZoom:18,attributions:[aW,new yY({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,attributions:[aW,cY]}};b9.prototype.g=function(){return this.d};function Q(l){l=IL(l)?l:{};KV.call(this,{attributions:l.attributions,doc:l.doc,format:new rJ,logo:l.logo,node:l.node,projection:l.projection,text:l.text,url:l.url,urls:l.urls})}IB(Q,KV);function b(l){I2.call(this,{attributions:l.attributions,format:l.format,logo:l.logo,projection:l.projection});this.p=new yR;this.r=l.loader;this.H=IL(l.strategy)?l.strategy:jR;this.o={}}IB(b,I2);b.prototype.lb=function(l){var B=[],w,v;w=0;for(v=l.length;wStamen Design, under CC BY 3.0.'}),cY];function HJ(l){l=IL(l)?l:{};var t=IL(l.params)?l.params:{};H9.call(this,{attributions:l.attributions,logo:l.logo,projection:l.projection,tileGrid:l.tileGrid,tileLoadFunction:l.tileLoadFunction,tileUrlFunction:yE(this.rk,this),wrapX:IL(l.wrapX)?l.wrapX:!0});var m=l.urls;!IL(m)&&IL(l.url)&&(m=I5(l.url));this.d=null!=m?m:[];this.b=t;this.g=eV()}IB(HJ,H9);IN=HJ.prototype;IN.ok=function(){return this.b};IN.Xb=function(l,t,m){l=HJ.T.Xb.call(this,l,t,m);return 1==t?l:l*t+0.5|0};IN.pk=function(){return this.d};IN.qk=function(l){l=IL(l)?I5(l):null;this.Of(l)};IN.Of=function(l){this.d=null!=l?l:[];this.l()};IN.rk=function(l,C,B){var w=this.tileGrid;null===w&&(w=x7(this,B));if(!(w.a.length<=l[0])){var v=HC(w,l,this.g),t=w.pa(l[0]);1!=C&&(t=t*C+0.5|0);w={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};o8(w,this.b);var m=this.d;0==m.length?l=void 0:(B=B.a.split(":").pop(),w.SIZE=t+","+t,w.BBOX=v.join(","),w.BBOXSR=B,w.IMAGESR=B,w.DPI=90*C,l=1==m.length?m[0]:m[b7((l[1]<F||G<=F){return null}B=B[2];return B<-G||-1v||B>v;){w.push([Math.ceil(C/v),Math.ceil(B/v)]),v+=v}break;case"truncated":for(;C>v||B>v;){w.push([Math.ceil(C/v),Math.ceil(B/v)]),C>>=1,B>>=1}}w.push([1,1]);w.reverse();for(var v=[1],t=[0],B=1,C=w.length;Bthis.b||w+this.a>this.b){return null}v=pA(this,!1,l,B,w,v,m);if(null===v){return null}l=pA(this,!0,l,B,w,IL(t)?t:IY,m);return{offsetX:v.offsetX,offsetY:v.offsetY,image:v.image,wf:l.image}};function pA(H,G,F,D,C,B,w){var v=G?H.e:H.f,t,m,l;m=0;for(l=v.length;m=D+this.a&&v.height>=C+this.a){return m={offsetX:v.x+this.a,offsetY:v.y+this.a,image:this.b},this.d[l]=m,B.call(w,this.f,v.x+this.a,v.y+this.a),l=t,D=D+this.a,C=C+this.a,w=B=void 0,v.width-D>v.height-C?(B={x:v.x+D,y:v.y,width:v.width-D,height:v.height},w={x:v.x,y:v.y+C,width:D,height:v.height-C},oK(this,l,B,w)):(B={x:v.x+D,y:v.y,width:v.width-D,height:C},w={x:v.x,y:v.y+C,width:v.width,height:v.height-C},oK(this,l,B,w)),m}}return null};function oK(l,v,t,m){v=[v,1];0F&&(F=0);D=G.TileMatrixSetLink[F].TileMatrixSet;F=G.WGS84BoundingBox;IL(F)&&(C=sK("EPSG:4326").J(),C=F[0]==C[0]&&F[2]==C[2]);var B=G.Format[0];IL(H.format)&&(B=H.format);F=cX(G.Style,function(K){return IL(H.style)?K.Title==H.style:K.isDefault});0>F&&(F=0);F=G.Style[F].Identifier;var w={};IL(G.Dimension)&&gB(G.Dimension,function(K){var O=K.Identifier,M=K["default"];IL(M)||(M=K.values[0]);w[O]=M});var v=dL(I.Contents.TileMatrixSet,function(K){return K.Identifier==D}),t=vL(v),v=IL(H.projection)?sK(H.projection):sK(v.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3")),m=[],l=H.requestEncoding,l=IL(l)?l:"";if(I.OperationsMetadata.hasOwnProperty("GetTile")&&0!=l.lastIndexOf("REST",0)){var G=I.OperationsMetadata.GetTile.DCP.HTTP.Get,J=dL(G[0].Constraint,function(K){return"GetEncoding"==K.name}).AllowedValues.Value;0b;b++)if(b in this&&this[b]===a)return b;return-1};for(u={catchupTime:100,initialRate:.03,minTime:250,ghostTime:100,maxProgressPerFrame:20,easeFactor:1.25,startOnPageLoad:!0,restartOnPushState:!0,restartOnRequestAfter:500,target:"body",elements:{checkInterval:100,selectors:["body"]},eventLag:{minSamples:10,sampleCount:3,lagThreshold:3},ajax:{trackMethods:["GET"],trackWebSockets:!0,ignoreURLs:[]}},C=function(){var a;return null!=(a="undefined"!=typeof performance&&null!==performance&&"function"==typeof performance.now?performance.now():void 0)?a:+new Date},E=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,t=window.cancelAnimationFrame||window.mozCancelAnimationFrame,null==E&&(E=function(a){return setTimeout(a,50)},t=function(a){return clearTimeout(a)}),G=function(a){var b,c;return b=C(),(c=function(){var d;return d=C()-b,d>=33?(b=C(),a(d,function(){return E(c)})):setTimeout(c,33-d)})()},F=function(){var a,b,c;return c=arguments[0],b=arguments[1],a=3<=arguments.length?X.call(arguments,2):[],"function"==typeof c[b]?c[b].apply(c,a):c[b]},v=function(){var a,b,c,d,e,f,g;for(b=arguments[0],d=2<=arguments.length?X.call(arguments,1):[],f=0,g=d.length;g>f;f++)if(c=d[f])for(a in c)Y.call(c,a)&&(e=c[a],null!=b[a]&&"object"==typeof b[a]&&null!=e&&"object"==typeof e?v(b[a],e):b[a]=e);return b},q=function(a){var b,c,d,e,f;for(c=b=0,e=0,f=a.length;f>e;e++)d=a[e],c+=Math.abs(d),b++;return c/b},x=function(a,b){var c,d,e;if(null==a&&(a="options"),null==b&&(b=!0),e=document.querySelector("[data-pace-"+a+"]")){if(c=e.getAttribute("data-pace-"+a),!b)return c;try{return JSON.parse(c)}catch(f){return d=f,"undefined"!=typeof console&&null!==console?console.error("Error parsing inline pace options",d):void 0}}},g=function(){function a(){}return a.prototype.on=function(a,b,c,d){var e;return null==d&&(d=!1),null==this.bindings&&(this.bindings={}),null==(e=this.bindings)[a]&&(e[a]=[]),this.bindings[a].push({handler:b,ctx:c,once:d})},a.prototype.once=function(a,b,c){return this.on(a,b,c,!0)},a.prototype.off=function(a,b){var c,d,e;if(null!=(null!=(d=this.bindings)?d[a]:void 0)){if(null==b)return delete this.bindings[a];for(c=0,e=[];cQ;Q++)K=U[Q],D[K]===!0&&(D[K]=u[K]);i=function(a){function b(){return V=b.__super__.constructor.apply(this,arguments)}return Z(b,a),b}(Error),b=function(){function a(){this.progress=0}return a.prototype.getElement=function(){var a;if(null==this.el){if(a=document.querySelector(D.target),!a)throw new i;this.el=document.createElement("div"),this.el.className="pace pace-active",document.body.className=document.body.className.replace(/pace-done/g,""),document.body.className+=" pace-running",this.el.innerHTML='
    \n
    \n
    \n
    ',null!=a.firstChild?a.insertBefore(this.el,a.firstChild):a.appendChild(this.el)}return this.el},a.prototype.finish=function(){var a;return a=this.getElement(),a.className=a.className.replace("pace-active",""),a.className+=" pace-inactive",document.body.className=document.body.className.replace("pace-running",""),document.body.className+=" pace-done"},a.prototype.update=function(a){return this.progress=a,this.render()},a.prototype.destroy=function(){try{this.getElement().parentNode.removeChild(this.getElement())}catch(a){i=a}return this.el=void 0},a.prototype.render=function(){var a,b,c,d,e,f,g;if(null==document.querySelector(D.target))return!1;for(a=this.getElement(),d="translate3d("+this.progress+"%, 0, 0)",g=["webkitTransform","msTransform","transform"],e=0,f=g.length;f>e;e++)b=g[e],a.children[0].style[b]=d;return(!this.lastRenderedProgress||this.lastRenderedProgress|0!==this.progress|0)&&(a.children[0].setAttribute("data-progress-text",""+(0|this.progress)+"%"),this.progress>=100?c="99":(c=this.progress<10?"0":"",c+=0|this.progress),a.children[0].setAttribute("data-progress",""+c)),this.lastRenderedProgress=this.progress},a.prototype.done=function(){return this.progress>=100},a}(),h=function(){function a(){this.bindings={}}return a.prototype.trigger=function(a,b){var c,d,e,f,g;if(null!=this.bindings[a]){for(f=this.bindings[a],g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(c.call(this,b));return g}},a.prototype.on=function(a,b){var c;return null==(c=this.bindings)[a]&&(c[a]=[]),this.bindings[a].push(b)},a}(),P=window.XMLHttpRequest,O=window.XDomainRequest,N=window.WebSocket,w=function(a,b){var c,d,e;e=[];for(d in b.prototype)try{e.push(null==a[d]&&"function"!=typeof b[d]?"function"==typeof Object.defineProperty?Object.defineProperty(a,d,{get:function(){return b.prototype[d]},configurable:!0,enumerable:!0}):a[d]=b.prototype[d]:void 0)}catch(f){c=f}return e},A=[],j.ignore=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?X.call(arguments,1):[],A.unshift("ignore"),c=b.apply(null,a),A.shift(),c},j.track=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?X.call(arguments,1):[],A.unshift("track"),c=b.apply(null,a),A.shift(),c},J=function(a){var b;if(null==a&&(a="GET"),"track"===A[0])return"force";if(!A.length&&D.ajax){if("socket"===a&&D.ajax.trackWebSockets)return!0;if(b=a.toUpperCase(),$.call(D.ajax.trackMethods,b)>=0)return!0}return!1},k=function(a){function b(){var a,c=this;b.__super__.constructor.apply(this,arguments),a=function(a){var b;return b=a.open,a.open=function(d,e){return J(d)&&c.trigger("request",{type:d,url:e,request:a}),b.apply(a,arguments)}},window.XMLHttpRequest=function(b){var c;return c=new P(b),a(c),c};try{w(window.XMLHttpRequest,P)}catch(d){}if(null!=O){window.XDomainRequest=function(){var b;return b=new O,a(b),b};try{w(window.XDomainRequest,O)}catch(d){}}if(null!=N&&D.ajax.trackWebSockets){window.WebSocket=function(a,b){var d;return d=null!=b?new N(a,b):new N(a),J("socket")&&c.trigger("request",{type:"socket",url:a,protocols:b,request:d}),d};try{w(window.WebSocket,N)}catch(d){}}}return Z(b,a),b}(h),R=null,y=function(){return null==R&&(R=new k),R},I=function(a){var b,c,d,e;for(e=D.ajax.ignoreURLs,c=0,d=e.length;d>c;c++)if(b=e[c],"string"==typeof b){if(-1!==a.indexOf(b))return!0}else if(b.test(a))return!0;return!1},y().on("request",function(b){var c,d,e,f,g;return f=b.type,e=b.request,g=b.url,I(g)?void 0:j.running||D.restartOnRequestAfter===!1&&"force"!==J(f)?void 0:(d=arguments,c=D.restartOnRequestAfter||0,"boolean"==typeof c&&(c=0),setTimeout(function(){var b,c,g,h,i,k;if(b="socket"===f?e.readyState<2:0<(h=e.readyState)&&4>h){for(j.restart(),i=j.sources,k=[],c=0,g=i.length;g>c;c++){if(K=i[c],K instanceof a){K.watch.apply(K,d);break}k.push(void 0)}return k}},c))}),a=function(){function a(){var a=this;this.elements=[],y().on("request",function(){return a.watch.apply(a,arguments)})}return a.prototype.watch=function(a){var b,c,d,e;return d=a.type,b=a.request,e=a.url,I(e)?void 0:(c="socket"===d?new n(b):new o(b),this.elements.push(c))},a}(),o=function(){function a(a){var b,c,d,e,f,g,h=this;if(this.progress=0,null!=window.ProgressEvent)for(c=null,a.addEventListener("progress",function(a){return h.progress=a.lengthComputable?100*a.loaded/a.total:h.progress+(100-h.progress)/2},!1),g=["load","abort","timeout","error"],d=0,e=g.length;e>d;d++)b=g[d],a.addEventListener(b,function(){return h.progress=100},!1);else f=a.onreadystatechange,a.onreadystatechange=function(){var b;return 0===(b=a.readyState)||4===b?h.progress=100:3===a.readyState&&(h.progress=50),"function"==typeof f?f.apply(null,arguments):void 0}}return a}(),n=function(){function a(a){var b,c,d,e,f=this;for(this.progress=0,e=["error","open"],c=0,d=e.length;d>c;c++)b=e[c],a.addEventListener(b,function(){return f.progress=100},!1)}return a}(),d=function(){function a(a){var b,c,d,f;for(null==a&&(a={}),this.elements=[],null==a.selectors&&(a.selectors=[]),f=a.selectors,c=0,d=f.length;d>c;c++)b=f[c],this.elements.push(new e(b))}return a}(),e=function(){function a(a){this.selector=a,this.progress=0,this.check()}return a.prototype.check=function(){var a=this;return document.querySelector(this.selector)?this.done():setTimeout(function(){return a.check()},D.elements.checkInterval)},a.prototype.done=function(){return this.progress=100},a}(),c=function(){function a(){var a,b,c=this;this.progress=null!=(b=this.states[document.readyState])?b:100,a=document.onreadystatechange,document.onreadystatechange=function(){return null!=c.states[document.readyState]&&(c.progress=c.states[document.readyState]),"function"==typeof a?a.apply(null,arguments):void 0}}return a.prototype.states={loading:0,interactive:50,complete:100},a}(),f=function(){function a(){var a,b,c,d,e,f=this;this.progress=0,a=0,e=[],d=0,c=C(),b=setInterval(function(){var g;return g=C()-c-50,c=C(),e.push(g),e.length>D.eventLag.sampleCount&&e.shift(),a=q(e),++d>=D.eventLag.minSamples&&a=100&&(this.done=!0),b===this.last?this.sinceLastUpdate+=a:(this.sinceLastUpdate&&(this.rate=(b-this.last)/this.sinceLastUpdate),this.catchup=(b-this.progress)/D.catchupTime,this.sinceLastUpdate=0,this.last=b),b>this.progress&&(this.progress+=this.catchup*a),c=1-Math.pow(this.progress/100,D.easeFactor),this.progress+=c*this.rate*a,this.progress=Math.min(this.lastProgress+D.maxProgressPerFrame,this.progress),this.progress=Math.max(0,this.progress),this.progress=Math.min(100,this.progress),this.lastProgress=this.progress,this.progress},a}(),L=null,H=null,r=null,M=null,p=null,s=null,j.running=!1,z=function(){return D.restartOnPushState?j.restart():void 0},null!=window.history.pushState&&(T=window.history.pushState,window.history.pushState=function(){return z(),T.apply(window.history,arguments)}),null!=window.history.replaceState&&(W=window.history.replaceState,window.history.replaceState=function(){return z(),W.apply(window.history,arguments)}),l={ajax:a,elements:d,document:c,eventLag:f},(B=function(){var a,c,d,e,f,g,h,i;for(j.sources=L=[],g=["ajax","elements","document","eventLag"],c=0,e=g.length;e>c;c++)a=g[c],D[a]!==!1&&L.push(new l[a](D[a]));for(i=null!=(h=D.extraSources)?h:[],d=0,f=i.length;f>d;d++)K=i[d],L.push(new K(D));return j.bar=r=new b,H=[],M=new m})(),j.stop=function(){return j.trigger("stop"),j.running=!1,r.destroy(),s=!0,null!=p&&("function"==typeof t&&t(p),p=null),B()},j.restart=function(){return j.trigger("restart"),j.stop(),j.start()},j.go=function(){var a;return j.running=!0,r.render(),a=C(),s=!1,p=G(function(b,c){var d,e,f,g,h,i,k,l,n,o,p,q,t,u,v,w;for(l=100-r.progress,e=p=0,f=!0,i=q=0,u=L.length;u>q;i=++q)for(K=L[i],o=null!=H[i]?H[i]:H[i]=[],h=null!=(w=K.elements)?w:[K],k=t=0,v=h.length;v>t;k=++t)g=h[k],n=null!=o[k]?o[k]:o[k]=new m(g),f&=n.done,n.done||(e++,p+=n.tick(b));return d=p/e,r.update(M.tick(b,d)),r.done()||f||s?(r.update(100),j.trigger("done"),setTimeout(function(){return r.finish(),j.running=!1,j.trigger("hide")},Math.max(D.ghostTime,Math.max(D.minTime-(C()-a),0)))):c()})},j.start=function(a){v(D,a),j.running=!0;try{r.render()}catch(b){i=b}return document.querySelector(".pace")?(j.trigger("start"),j.go()):setTimeout(j.start,50)},"function"==typeof define&&define.amd?define(["pace"],function(){return j}):"object"==typeof exports?module.exports=j:D.startOnPageLoad&&j.start()}).call(this); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/spin.min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/spin.min.js deleted file mode 100644 index 5d0c7307..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/spin.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a,b){"object"==typeof exports?module.exports=b():"function"==typeof define&&define.amd?define(b):a.Spinner=b()}(this,function(){"use strict";function d(a,b){var d,c=document.createElement(a||"div");for(d in b)c[d]=b[d];return c}function e(a){for(var b=1,c=arguments.length;c>b;b++)a.appendChild(arguments[b]);return a}function g(a,d,e,g){var h=["opacity",d,~~(100*a),e,g].join("-"),i=.01+100*(e/g),j=Math.max(1-(1-a)/d*(100-i),a),k=c.substring(0,c.indexOf("Animation")).toLowerCase(),l=k&&"-"+k+"-"||"";return b[h]||(f.insertRule("@"+l+"keyframes "+h+"{"+"0%{opacity:"+j+"}"+i+"%{opacity:"+a+"}"+(i+.01)+"%{opacity:1}"+(i+d)%100+"%{opacity:"+a+"}"+"100%{opacity:"+j+"}"+"}",f.cssRules.length),b[h]=1),h}function h(b,c){var e,f,d=b.style;for(c=c.charAt(0).toUpperCase()+c.slice(1),f=0;f',b)}f.addRule(".spin-vml","behavior:url(#default#VML)"),n.prototype.lines=function(b,c){function g(){return i(a("group",{coordsize:f+" "+f,coordorigin:-d+" "+-d}),{width:f,height:f})}function m(b,f,h){e(j,e(i(g(),{rotation:360/c.lines*b+"deg",left:~~f}),e(i(a("roundrect",{arcsize:c.corners}),{width:d,height:c.width,left:c.radius,top:-c.width>>1,filter:h}),a("fill",{color:l(c.color,b),opacity:c.opacity}),a("stroke",{opacity:0}))))}var k,d=c.length+c.width,f=2*d,h=2*-(c.width+c.length)+"px",j=i(g(),{position:"absolute",top:h,left:h});if(c.shadow)for(k=1;k<=c.lines;k++)m(k,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(k=1;k<=c.lines;k++)m(k);return e(b,j)},n.prototype.opacity=function(a,b,c,d){var e=a.firstChild;d=d.shadow&&d.lines||0,e&&b+d>1)+"px"})}for(var j,f=0,h=(b.lines-1)*(1-b.direction)/2;f/im,bodyRegExp=/]*>\s*([\s\S]+)\s*<\/body>/im,hasLocation=typeof location!=="undefined"&&location.href,defaultProtocol=hasLocation&&location.protocol&&location.protocol.replace(/\:/,""),defaultHostName=hasLocation&&location.hostname,defaultPort=hasLocation&&(location.port||undefined),buildMap={},masterConfig=(module.config&&module.config())||{};text={version:"2.0.12",strip:function(content){if(content){content=content.replace(xmlRegExp,"");var matches=content.match(bodyRegExp);if(matches){content=matches[1]}}else{content=""}return content},jsEscape:function(content){return content.replace(/(['\\])/g,"\\$1").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r").replace(/[\u2028]/g,"\\u2028").replace(/[\u2029]/g,"\\u2029")},createXhr:masterConfig.createXhr||function(){var xhr,i,progId;if(typeof XMLHttpRequest!=="undefined"){return new XMLHttpRequest()}else{if(typeof ActiveXObject!=="undefined"){for(i=0;i<3;i+=1){progId=progIds[i];try{xhr=new ActiveXObject(progId)}catch(e){}if(xhr){progIds=[progId];break}}}}return xhr},parseName:function(name){var modName,ext,temp,strip=false,index=name.indexOf("."),isRelative=name.indexOf("./")===0||name.indexOf("../")===0;if(index!==-1&&(!isRelative||index>1)){modName=name.substring(0,index);ext=name.substring(index+1,name.length)}else{modName=name}temp=ext||modName;index=temp.indexOf("!");if(index!==-1){strip=temp.substring(index+1)==="strip";temp=temp.substring(0,index);if(ext){ext=temp}else{modName=temp}}return{moduleName:modName,ext:ext,strip:strip}},xdRegExp:/^((\w+)\:)?\/\/([^\/\\]+)/,useXhr:function(url,protocol,hostname,port){var uProtocol,uHostName,uPort,match=text.xdRegExp.exec(url);if(!match){return true}uProtocol=match[2];uHostName=match[3];uHostName=uHostName.split(":");uPort=uHostName[1];uHostName=uHostName[0];return(!uProtocol||uProtocol===protocol)&&(!uHostName||uHostName.toLowerCase()===hostname.toLowerCase())&&((!uPort&&!uHostName)||uPort===port)},finishLoad:function(name,strip,content,onLoad){content=strip?text.strip(content):content;if(masterConfig.isBuild){buildMap[name]=content}onLoad(content)},load:function(name,req,onLoad,config){if(config&&config.isBuild&&!config.inlineText){onLoad();return}masterConfig.isBuild=config&&config.isBuild;var parsed=text.parseName(name),nonStripName=parsed.moduleName+(parsed.ext?"."+parsed.ext:""),url=req.toUrl(nonStripName),useXhr=(masterConfig.useXhr)||text.useXhr;if(url.indexOf("empty:")===0){onLoad();return}if(!hasLocation||useXhr(url,defaultProtocol,defaultHostName,defaultPort)){text.get(url,function(content){text.finishLoad(name,parsed.strip,content,onLoad)},function(err){if(onLoad.error){onLoad.error(err)}})}else{req([nonStripName],function(content){text.finishLoad(parsed.moduleName+"."+parsed.ext,parsed.strip,content,onLoad)})}},write:function(pluginName,moduleName,write,config){if(buildMap.hasOwnProperty(moduleName)){var content=text.jsEscape(buildMap[moduleName]);write.asModule(pluginName+"!"+moduleName,"define(function () { return '"+content+"';});\n")}},writeFile:function(pluginName,moduleName,req,write,config){var parsed=text.parseName(moduleName),extPart=parsed.ext?"."+parsed.ext:"",nonStripName=parsed.moduleName+extPart,fileName=req.toUrl(parsed.moduleName+extPart)+".js";text.load(nonStripName,req,function(value){var textWrite=function(contents){return write(fileName,contents)};textWrite.asModule=function(moduleName,contents){return write.asModule(moduleName,fileName,contents)};text.write(pluginName,nonStripName,textWrite,config)},config)}};if(masterConfig.env==="node"||(!masterConfig.env&&typeof process!=="undefined"&&process.versions&&!!process.versions.node&&!process.versions["node-webkit"])){fs=require.nodeRequire("fs");text.get=function(url,callback,errback){try{var file=fs.readFileSync(url,"utf8");if(file.indexOf("\uFEFF")===0){file=file.substring(1)}callback(file)}catch(e){if(errback){errback(e)}}}}else{if(masterConfig.env==="xhr"||(!masterConfig.env&&text.createXhr())){text.get=function(url,callback,errback,headers){var xhr=text.createXhr(),header;xhr.open("GET",url,true);if(headers){for(header in headers){if(headers.hasOwnProperty(header)){xhr.setRequestHeader(header.toLowerCase(),headers[header])}}}if(masterConfig.onXhr){masterConfig.onXhr(xhr,url)}xhr.onreadystatechange=function(evt){var status,err;if(xhr.readyState===4){status=xhr.status||0;if(status>399&&status<600){err=new Error(url+" HTTP status: "+status);err.xhr=xhr;if(errback){errback(err)}}else{callback(xhr.responseText)}if(masterConfig.onXhrComplete){masterConfig.onXhrComplete(xhr,url)}}};xhr.send(null)}}else{if(masterConfig.env==="rhino"||(!masterConfig.env&&typeof Packages!=="undefined"&&typeof java!=="undefined")){text.get=function(url,callback){var stringBuffer,line,encoding="utf-8",file=new java.io.File(url),lineSeparator=java.lang.System.getProperty("line.separator"),input=new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file),encoding)),content="";try{stringBuffer=new java.lang.StringBuffer();line=input.readLine();if(line&&line.length()&&line.charAt(0)===65279){line=line.substring(1)}if(line!==null){stringBuffer.append(line)}while((line=input.readLine())!==null){stringBuffer.append(lineSeparator);stringBuffer.append(line)}content=String(stringBuffer.toString())}finally{input.close()}callback(content)}}else{if(masterConfig.env==="xpconnect"||(!masterConfig.env&&typeof Components!=="undefined"&&Components.classes&&Components.interfaces)){Cc=Components.classes;Ci=Components.interfaces;Components.utils["import"]("resource://gre/modules/FileUtils.jsm");xpcIsWindows=("@mozilla.org/windows-registry-key;1" in Cc);text.get=function(url,callback){var inStream,convertStream,fileObj,readData={};if(xpcIsWindows){url=url.replace(/\//g,"\\")}fileObj=new FileUtils.File(url);try{inStream=Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);inStream.init(fileObj,1,0,false);convertStream=Cc["@mozilla.org/intl/converter-input-stream;1"].createInstance(Ci.nsIConverterInputStream);convertStream.init(inStream,"utf-8",inStream.available(),Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);convertStream.readString(inStream.available(),readData);convertStream.close();inStream.close();callback(readData.value)}catch(e){throw new Error((fileObj&&fileObj.path||"")+": "+e)}}}}}}return text}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/tpl.min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/tpl.min.js deleted file mode 100644 index 68b0746c..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/tpl.min.js +++ /dev/null @@ -1,13 +0,0 @@ -// RequireJS UnderscoreJS template plugin -// http://github.com/jfparadis/requirejs-tpl -// -// An alternative to http://github.com/ZeeAgency/requirejs-tpl -// -// Using UnderscoreJS micro-templates at http://underscorejs.org/#template -// Using and RequireJS text.js at http://requirejs.org/docs/api.html#text -// @author JF Paradis -// @version 0.0.2 -// -// Released under the MIT license -define(["text","underscore"],function(text,_){var buildMap={},buildTemplateSource="define('{pluginName}!{moduleName}', function () { return {source}; });\n";return{version:"0.0.2",load:function(moduleName,parentRequire,onload,config){if(buildMap[moduleName])onload(buildMap[moduleName]);else{var ext=config.tpl&&config.tpl.extension||".html";var path=config.tpl&&config.tpl.path||"";text.load(path+moduleName+ext,parentRequire,function(source){buildMap[moduleName]=_.template(source);onload(buildMap[moduleName])}, -config)}},write:function(pluginName,moduleName,write){var build=buildMap[moduleName],source=build&&build.source;if(source)write.asModule(pluginName+"!"+moduleName,buildTemplateSource.replace("{pluginName}",pluginName).replace("{moduleName}",moduleName).replace("{source}",source))}}}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/underscore-min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/underscore-min.js deleted file mode 100644 index f01025b7..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/cached/underscore-min.js +++ /dev/null @@ -1,6 +0,0 @@ -// Underscore.js 1.8.3 -// http://underscorejs.org -// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. -(function(){function n(n){function t(t,r,e,u,i,o){for(;i>=0&&o>i;i+=n){var a=u?u[i]:i;e=r(e,t[a],a,t)}return e}return function(r,e,u,i){e=b(e,i,4);var o=!k(r)&&m.keys(r),a=(o||r).length,c=n>0?0:a-1;return arguments.length<3&&(u=r[o?o[c]:c],c+=n),t(r,e,u,o,c,a)}}function t(n){return function(t,r,e){r=x(r,e);for(var u=O(t),i=n>0?0:u-1;i>=0&&u>i;i+=n)if(r(t[i],i,t))return i;return-1}}function r(n,t,r){return function(e,u,i){var o=0,a=O(e);if("number"==typeof i)n>0?o=i>=0?i:Math.max(i+a,o):a=i>=0?Math.min(i+1,a):i+a+1;else if(r&&i&&a)return i=r(e,u),e[i]===u?i:-1;if(u!==u)return i=t(l.call(e,o,a),m.isNaN),i>=0?i+o:-1;for(i=n>0?o:a-1;i>=0&&a>i;i+=n)if(e[i]===u)return i;return-1}}function e(n,t){var r=I.length,e=n.constructor,u=m.isFunction(e)&&e.prototype||a,i="constructor";for(m.has(n,i)&&!m.contains(t,i)&&t.push(i);r--;)i=I[r],i in n&&n[i]!==u[i]&&!m.contains(t,i)&&t.push(i)}var u=this,i=u._,o=Array.prototype,a=Object.prototype,c=Function.prototype,f=o.push,l=o.slice,s=a.toString,p=a.hasOwnProperty,h=Array.isArray,v=Object.keys,g=c.bind,y=Object.create,d=function(){},m=function(n){return n instanceof m?n:this instanceof m?void(this._wrapped=n):new m(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=m),exports._=m):u._=m,m.VERSION="1.8.3";var b=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}},x=function(n,t,r){return null==n?m.identity:m.isFunction(n)?b(n,t,r):m.isObject(n)?m.matcher(n):m.property(n)};m.iteratee=function(n,t){return x(n,t,1/0)};var _=function(n,t){return function(r){var e=arguments.length;if(2>e||null==r)return r;for(var u=1;e>u;u++)for(var i=arguments[u],o=n(i),a=o.length,c=0;a>c;c++){var f=o[c];t&&r[f]!==void 0||(r[f]=i[f])}return r}},j=function(n){if(!m.isObject(n))return{};if(y)return y(n);d.prototype=n;var t=new d;return d.prototype=null,t},w=function(n){return function(t){return null==t?void 0:t[n]}},A=Math.pow(2,53)-1,O=w("length"),k=function(n){var t=O(n);return"number"==typeof t&&t>=0&&A>=t};m.each=m.forEach=function(n,t,r){t=b(t,r);var e,u;if(k(n))for(e=0,u=n.length;u>e;e++)t(n[e],e,n);else{var i=m.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},m.map=m.collect=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=Array(u),o=0;u>o;o++){var a=e?e[o]:o;i[o]=t(n[a],a,n)}return i},m.reduce=m.foldl=m.inject=n(1),m.reduceRight=m.foldr=n(-1),m.find=m.detect=function(n,t,r){var e;return e=k(n)?m.findIndex(n,t,r):m.findKey(n,t,r),e!==void 0&&e!==-1?n[e]:void 0},m.filter=m.select=function(n,t,r){var e=[];return t=x(t,r),m.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e},m.reject=function(n,t,r){return m.filter(n,m.negate(x(t)),r)},m.every=m.all=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(!t(n[o],o,n))return!1}return!0},m.some=m.any=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(t(n[o],o,n))return!0}return!1},m.contains=m.includes=m.include=function(n,t,r,e){return k(n)||(n=m.values(n)),("number"!=typeof r||e)&&(r=0),m.indexOf(n,t,r)>=0},m.invoke=function(n,t){var r=l.call(arguments,2),e=m.isFunction(t);return m.map(n,function(n){var u=e?t:n[t];return null==u?u:u.apply(n,r)})},m.pluck=function(n,t){return m.map(n,m.property(t))},m.where=function(n,t){return m.filter(n,m.matcher(t))},m.findWhere=function(n,t){return m.find(n,m.matcher(t))},m.max=function(n,t,r){var e,u,i=-1/0,o=-1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],e>i&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(u>o||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},m.min=function(n,t,r){var e,u,i=1/0,o=1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],i>e&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(o>u||1/0===u&&1/0===i)&&(i=n,o=u)});return i},m.shuffle=function(n){for(var t,r=k(n)?n:m.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=m.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},m.sample=function(n,t,r){return null==t||r?(k(n)||(n=m.values(n)),n[m.random(n.length-1)]):m.shuffle(n).slice(0,Math.max(0,t))},m.sortBy=function(n,t,r){return t=x(t,r),m.pluck(m.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={};return r=x(r,e),m.each(t,function(e,i){var o=r(e,i,t);n(u,e,o)}),u}};m.groupBy=F(function(n,t,r){m.has(n,r)?n[r].push(t):n[r]=[t]}),m.indexBy=F(function(n,t,r){n[r]=t}),m.countBy=F(function(n,t,r){m.has(n,r)?n[r]++:n[r]=1}),m.toArray=function(n){return n?m.isArray(n)?l.call(n):k(n)?m.map(n,m.identity):m.values(n):[]},m.size=function(n){return null==n?0:k(n)?n.length:m.keys(n).length},m.partition=function(n,t,r){t=x(t,r);var e=[],u=[];return m.each(n,function(n,r,i){(t(n,r,i)?e:u).push(n)}),[e,u]},m.first=m.head=m.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:m.initial(n,n.length-t)},m.initial=function(n,t,r){return l.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},m.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:m.rest(n,Math.max(0,n.length-t))},m.rest=m.tail=m.drop=function(n,t,r){return l.call(n,null==t||r?1:t)},m.compact=function(n){return m.filter(n,m.identity)};var S=function(n,t,r,e){for(var u=[],i=0,o=e||0,a=O(n);a>o;o++){var c=n[o];if(k(c)&&(m.isArray(c)||m.isArguments(c))){t||(c=S(c,t,r));var f=0,l=c.length;for(u.length+=l;l>f;)u[i++]=c[f++]}else r||(u[i++]=c)}return u};m.flatten=function(n,t){return S(n,t,!1)},m.without=function(n){return m.difference(n,l.call(arguments,1))},m.uniq=m.unique=function(n,t,r,e){m.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=x(r,e));for(var u=[],i=[],o=0,a=O(n);a>o;o++){var c=n[o],f=r?r(c,o,n):c;t?(o&&i===f||u.push(c),i=f):r?m.contains(i,f)||(i.push(f),u.push(c)):m.contains(u,c)||u.push(c)}return u},m.union=function(){return m.uniq(S(arguments,!0,!0))},m.intersection=function(n){for(var t=[],r=arguments.length,e=0,u=O(n);u>e;e++){var i=n[e];if(!m.contains(t,i)){for(var o=1;r>o&&m.contains(arguments[o],i);o++);o===r&&t.push(i)}}return t},m.difference=function(n){var t=S(arguments,!0,!0,1);return m.filter(n,function(n){return!m.contains(t,n)})},m.zip=function(){return m.unzip(arguments)},m.unzip=function(n){for(var t=n&&m.max(n,O).length||0,r=Array(t),e=0;t>e;e++)r[e]=m.pluck(n,e);return r},m.object=function(n,t){for(var r={},e=0,u=O(n);u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},m.findIndex=t(1),m.findLastIndex=t(-1),m.sortedIndex=function(n,t,r,e){r=x(r,e,1);for(var u=r(t),i=0,o=O(n);o>i;){var a=Math.floor((i+o)/2);r(n[a])i;i++,n+=r)u[i]=n;return u};var E=function(n,t,r,e,u){if(!(e instanceof t))return n.apply(r,u);var i=j(n.prototype),o=n.apply(i,u);return m.isObject(o)?o:i};m.bind=function(n,t){if(g&&n.bind===g)return g.apply(n,l.call(arguments,1));if(!m.isFunction(n))throw new TypeError("Bind must be called on a function");var r=l.call(arguments,2),e=function(){return E(n,e,t,this,r.concat(l.call(arguments)))};return e},m.partial=function(n){var t=l.call(arguments,1),r=function(){for(var e=0,u=t.length,i=Array(u),o=0;u>o;o++)i[o]=t[o]===m?arguments[e++]:t[o];for(;e=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=m.bind(n[r],n);return n},m.memoize=function(n,t){var r=function(e){var u=r.cache,i=""+(t?t.apply(this,arguments):e);return m.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},m.delay=function(n,t){var r=l.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},m.defer=m.partial(m.delay,m,1),m.throttle=function(n,t,r){var e,u,i,o=null,a=0;r||(r={});var c=function(){a=r.leading===!1?0:m.now(),o=null,i=n.apply(e,u),o||(e=u=null)};return function(){var f=m.now();a||r.leading!==!1||(a=f);var l=t-(f-a);return e=this,u=arguments,0>=l||l>t?(o&&(clearTimeout(o),o=null),a=f,i=n.apply(e,u),o||(e=u=null)):o||r.trailing===!1||(o=setTimeout(c,l)),i}},m.debounce=function(n,t,r){var e,u,i,o,a,c=function(){var f=m.now()-o;t>f&&f>=0?e=setTimeout(c,t-f):(e=null,r||(a=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,o=m.now();var f=r&&!e;return e||(e=setTimeout(c,t)),f&&(a=n.apply(i,u),i=u=null),a}},m.wrap=function(n,t){return m.partial(t,n)},m.negate=function(n){return function(){return!n.apply(this,arguments)}},m.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},m.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},m.before=function(n,t){var r;return function(){return--n>0&&(r=t.apply(this,arguments)),1>=n&&(t=null),r}},m.once=m.partial(m.before,2);var M=!{toString:null}.propertyIsEnumerable("toString"),I=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];m.keys=function(n){if(!m.isObject(n))return[];if(v)return v(n);var t=[];for(var r in n)m.has(n,r)&&t.push(r);return M&&e(n,t),t},m.allKeys=function(n){if(!m.isObject(n))return[];var t=[];for(var r in n)t.push(r);return M&&e(n,t),t},m.values=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},m.mapObject=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=u.length,o={},a=0;i>a;a++)e=u[a],o[e]=t(n[e],e,n);return o},m.pairs=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},m.invert=function(n){for(var t={},r=m.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},m.functions=m.methods=function(n){var t=[];for(var r in n)m.isFunction(n[r])&&t.push(r);return t.sort()},m.extend=_(m.allKeys),m.extendOwn=m.assign=_(m.keys),m.findKey=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=0,o=u.length;o>i;i++)if(e=u[i],t(n[e],e,n))return e},m.pick=function(n,t,r){var e,u,i={},o=n;if(null==o)return i;m.isFunction(t)?(u=m.allKeys(o),e=b(t,r)):(u=S(arguments,!1,!1,1),e=function(n,t,r){return t in r},o=Object(o));for(var a=0,c=u.length;c>a;a++){var f=u[a],l=o[f];e(l,f,o)&&(i[f]=l)}return i},m.omit=function(n,t,r){if(m.isFunction(t))t=m.negate(t);else{var e=m.map(S(arguments,!1,!1,1),String);t=function(n,t){return!m.contains(e,t)}}return m.pick(n,t,r)},m.defaults=_(m.allKeys,!0),m.create=function(n,t){var r=j(n);return t&&m.extendOwn(r,t),r},m.clone=function(n){return m.isObject(n)?m.isArray(n)?n.slice():m.extend({},n):n},m.tap=function(n,t){return t(n),n},m.isMatch=function(n,t){var r=m.keys(t),e=r.length;if(null==n)return!e;for(var u=Object(n),i=0;e>i;i++){var o=r[i];if(t[o]!==u[o]||!(o in u))return!1}return!0};var N=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof m&&(n=n._wrapped),t instanceof m&&(t=t._wrapped);var u=s.call(n);if(u!==s.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}var i="[object Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof t)return!1;var o=n.constructor,a=t.constructor;if(o!==a&&!(m.isFunction(o)&&o instanceof o&&m.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in t)return!1}r=r||[],e=e||[];for(var c=r.length;c--;)if(r[c]===n)return e[c]===t;if(r.push(n),e.push(t),i){if(c=n.length,c!==t.length)return!1;for(;c--;)if(!N(n[c],t[c],r,e))return!1}else{var f,l=m.keys(n);if(c=l.length,m.keys(t).length!==c)return!1;for(;c--;)if(f=l[c],!m.has(t,f)||!N(n[f],t[f],r,e))return!1}return r.pop(),e.pop(),!0};m.isEqual=function(n,t){return N(n,t)},m.isEmpty=function(n){return null==n?!0:k(n)&&(m.isArray(n)||m.isString(n)||m.isArguments(n))?0===n.length:0===m.keys(n).length},m.isElement=function(n){return!(!n||1!==n.nodeType)},m.isArray=h||function(n){return"[object Array]"===s.call(n)},m.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},m.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(n){m["is"+n]=function(t){return s.call(t)==="[object "+n+"]"}}),m.isArguments(arguments)||(m.isArguments=function(n){return m.has(n,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(m.isFunction=function(n){return"function"==typeof n||!1}),m.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},m.isNaN=function(n){return m.isNumber(n)&&n!==+n},m.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===s.call(n)},m.isNull=function(n){return null===n},m.isUndefined=function(n){return n===void 0},m.has=function(n,t){return null!=n&&p.call(n,t)},m.noConflict=function(){return u._=i,this},m.identity=function(n){return n},m.constant=function(n){return function(){return n}},m.noop=function(){},m.property=w,m.propertyOf=function(n){return null==n?function(){}:function(t){return n[t]}},m.matcher=m.matches=function(n){return n=m.extendOwn({},n),function(t){return m.isMatch(t,n)}},m.times=function(n,t,r){var e=Array(Math.max(0,n));t=b(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},m.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},m.now=Date.now||function(){return(new Date).getTime()};var B={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},T=m.invert(B),R=function(n){var t=function(t){return n[t]},r="(?:"+m.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};m.escape=R(B),m.unescape=R(T),m.result=function(n,t,r){var e=null==n?void 0:n[t];return e===void 0&&(e=r),m.isFunction(e)?e.call(n):e};var q=0;m.uniqueId=function(n){var t=++q+"";return n?n+t:t},m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var K=/(.)^/,z={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\u2028|\u2029/g,L=function(n){return"\\"+z[n]};m.template=function(n,t,r){!t&&r&&(t=r),t=m.defaults({},t,m.templateSettings);var e=RegExp([(t.escape||K).source,(t.interpolate||K).source,(t.evaluate||K).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,o,a){return i+=n.slice(u,a).replace(D,L),u=a+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":o&&(i+="';\n"+o+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var o=new Function(t.variable||"obj","_",i)}catch(a){throw a.source=i,a}var c=function(n){return o.call(this,n,m)},f=t.variable||"obj";return c.source="function("+f+"){\n"+i+"}",c},m.chain=function(n){var t=m(n);return t._chain=!0,t};var P=function(n,t){return n._chain?m(t).chain():t};m.mixin=function(n){m.each(m.functions(n),function(t){var r=m[t]=n[t];m.prototype[t]=function(){var n=[this._wrapped];return f.apply(n,arguments),P(this,r.apply(m,n))}})},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=o[n];m.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],P(this,r)}}),m.each(["concat","join","slice"],function(n){var t=o[n];m.prototype[n]=function(){return P(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return""+this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return m})}).call(this); -//# sourceMappingURL=underscore-min.map \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backbone.paginator.min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backbone.paginator.min.js deleted file mode 100644 index 687349c8..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backbone.paginator.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - backbone.paginator 2.0.0 - http://github.com/backbone-paginator/backbone.paginator - - Copyright (c) 2013 Jimmy Yuen Ho Wong and contributors - Licensed under the MIT @license. -*/ -!function(a){if("object"==typeof exports)module.exports=a(require("underscore"),require("backbone"));else if("function"==typeof define&&define.amd)define(["underscore","backbone"],a);else if("undefined"!=typeof _&&"undefined"!=typeof Backbone){var b=Backbone.PageableCollection,c=a(_,Backbone);Backbone.PageableCollection.noConflict=function(){return Backbone.PageableCollection=b,c}}}(function(a,b){"use strict";function c(b,c){if(!a.isNumber(b)||a.isNaN(b)||!a.isFinite(b)||~~b!==b)throw new TypeError("`"+c+"` must be a finite integer");return b}function d(a){for(var b,c,d,e,f={},g=decodeURIComponent,h=a.split("&"),i=0,j=h.length;j>i;i++){var k=h[i];b=k.split("="),c=b[0],d=b[1]||!0,c=g(c),d=g(d),e=f[c],o(e)?e.push(d):f[c]=e?[e,d]:d}return f}function e(a,b,c){var d=a._events[b];if(d&&d.length){var e=d[d.length-1],f=e.callback;e.callback=function(){try{f.apply(this,arguments),c()}catch(a){throw a}finally{e.callback=f}}}else c()}var f=a.extend,g=a.omit,h=a.clone,i=a.each,j=a.pick,k=a.contains,l=a.isEmpty,m=a.pairs,n=a.invert,o=a.isArray,p=a.isFunction,q=a.isObject,r=a.keys,s=a.isUndefined,t=Math.ceil,u=Math.floor,v=Math.max,w=b.Collection.prototype,x=/[\s'"]/g,y=/[<>\s'"]/g,z=b.PageableCollection=b.Collection.extend({state:{firstPage:1,lastPage:null,currentPage:null,pageSize:25,totalPages:null,totalRecords:null,sortKey:null,order:-1},mode:"server",queryParams:{currentPage:"page",pageSize:"per_page",totalPages:"total_pages",totalRecords:"total_entries",sortKey:"sort_by",order:"order",directions:{"-1":"asc",1:"desc"}},constructor:function(a,b){w.constructor.apply(this,arguments),b=b||{};var c=this.mode=b.mode||this.mode||A.mode,d=f({},A.queryParams,this.queryParams,b.queryParams||{});d.directions=f({},A.queryParams.directions,this.queryParams.directions,d.directions||{}),this.queryParams=d;var e=this.state=f({},A.state,this.state,b.state||{});e.currentPage=null==e.currentPage?e.firstPage:e.currentPage,o(a)||(a=a?[a]:[]),a=a.slice(),"server"==c||null!=e.totalRecords||l(a)||(e.totalRecords=a.length),this.switchMode(c,f({fetch:!1,resetState:!1,models:a},b));var g=b.comparator;if(e.sortKey&&!g&&this.setSorting(e.sortKey,e.order,b),"server"!=c){var i=this.fullCollection;g&&b.full&&(this.comparator=null,i.comparator=g),b.full&&i.sort(),a&&!l(a)&&(this.reset(a,f({silent:!0},b)),this.getPage(e.currentPage),a.splice.apply(a,[0,a.length].concat(this.models)))}this._initState=h(this.state)},_makeFullCollection:function(a,c){var d,e,f,g=["url","model","sync","comparator"],h=this.constructor.prototype,i={};for(d=0,e=g.length;e>d;d++)f=g[d],s(h[f])||(i[f]=h[f]);var j=new(b.Collection.extend(i))(a,c);for(d=0,e=g.length;e>d;d++)f=g[d],this[f]!==h[f]&&(j[f]=this[f]);return j},_makeCollectionEventHandler:function(a,b){return function(c,d,g,j){var k=a._handlers;i(r(k),function(c){var d=k[c];a.off(c,d),b.off(c,d)});var l=h(a.state),m=l.firstPage,n=0===m?l.currentPage:l.currentPage-1,o=l.pageSize,p=n*o,q=p+o;if("add"==c){var u,v,w,x,j=j||{};if(g==b)v=b.indexOf(d),v>=p&&q>v&&(x=a,u=w=v-p);else{u=a.indexOf(d),v=p+u,x=b;var w=s(j.at)?v:j.at+p}if(j.onRemove||(++l.totalRecords,delete j.onRemove),a.state=a._checkState(l),x){x.add(d,f({},j||{},{at:w}));var y=u>=o?d:!s(j.at)&&q>w&&a.length>o?a.at(o):null;y&&e(g,c,function(){a.remove(y,{onAdd:!0})})}}if("remove"==c)if(j.onAdd)delete j.onAdd;else{if(--l.totalRecords){var z=l.totalPages=t(l.totalRecords/o);l.lastPage=0===m?z-1:z||m,l.currentPage>z&&(l.currentPage=l.lastPage)}else l.totalRecords=null,l.totalPages=null;a.state=a._checkState(l);var A,B=j.index;g==a?((A=b.at(q))?e(a,c,function(){a.push(A,{onRemove:!0})}):!a.length&&l.totalRecords&&a.reset(b.models.slice(p-o,q-o),f({},j,{parse:!1})),b.remove(d)):B>=p&&q>B&&((A=b.at(q-1))&&e(a,c,function(){a.push(A,{onRemove:!0})}),a.remove(d),!a.length&&l.totalRecords&&a.reset(b.models.slice(p-o,q-o),f({},j,{parse:!1})))}if("reset"==c)if(j=g,g=d,g==a&&null==j.from&&null==j.to){var C=b.models.slice(0,p),D=b.models.slice(p+a.models.length);b.reset(C.concat(a.models).concat(D),j)}else g==b&&((l.totalRecords=b.models.length)||(l.totalRecords=null,l.totalPages=null),"client"==a.mode&&(l.lastPage=l.currentPage=l.firstPage),a.state=a._checkState(l),a.reset(b.models.slice(p,q),f({},j,{parse:!1})));"sort"==c&&(j=g,g=d,g===b&&a.reset(b.models.slice(p,q),f({},j,{parse:!1}))),i(r(k),function(c){var d=k[c];i([a,b],function(a){a.on(c,d);var b=a._events[c]||[];b.unshift(b.pop())})})}},_checkState:function(a){var b=this.mode,d=this.links,e=a.totalRecords,f=a.pageSize,g=a.currentPage,h=a.firstPage,i=a.totalPages;if(null!=e&&null!=f&&null!=g&&null!=h&&("infinite"==b?d:!0)){if(e=c(e,"totalRecords"),f=c(f,"pageSize"),g=c(g,"currentPage"),h=c(h,"firstPage"),1>f)throw new RangeError("`pageSize` must be >= 1");if(i=a.totalPages=t(e/f),0>h||h>1)throw new RangeError("`firstPage must be 0 or 1`");if(a.lastPage=0===h?v(0,i-1):i||h,"infinite"==b){if(!d[g+""])throw new RangeError("No link found for page "+g)}else if(h>g||i>0&&(h?g>i:g>=i))throw new RangeError("`currentPage` must be firstPage <= currentPage "+(h?">":">=")+" totalPages if "+h+"-based. Got "+g+".")}return a},setPageSize:function(a,b){a=c(a,"pageSize"),b=b||{first:!1};var d=this.state,e=t(d.totalRecords/a),h=e?v(d.firstPage,u(e*d.currentPage/d.totalPages)):d.firstPage;return d=this.state=this._checkState(f({},d,{pageSize:a,currentPage:b.first?d.firstPage:h,totalPages:e})),this.getPage(d.currentPage,g(b,["first"]))},switchMode:function(b,c){if(!k(["server","client","infinite"],b))throw new TypeError('`mode` must be one of "server", "client" or "infinite"');c=c||{fetch:!0,resetState:!0};var d=this.state=c.resetState?h(this._initState):this._checkState(f({},this.state));this.mode=b;var e,j=this,l=this.fullCollection,m=this._handlers=this._handlers||{};if("server"==b||l)"server"==b&&l&&(i(r(m),function(a){e=m[a],j.off(a,e),l.off(a,e)}),delete this._handlers,this._fullComparator=l.comparator,delete this.fullCollection);else{l=this._makeFullCollection(c.models||[],c),l.pageableCollection=this,this.fullCollection=l;var n=this._makeCollectionEventHandler(this,l);i(["add","remove","reset","sort"],function(b){m[b]=e=a.bind(n,{},b),j.on(b,e),l.on(b,e)}),l.comparator=this._fullComparator}if("infinite"==b)for(var o=this.links={},p=d.firstPage,q=t(d.totalRecords/d.pageSize),s=0===p?v(0,q-1):q||p,u=d.firstPage;s>=u;u++)o[u]=this.url;else this.links&&delete this.links;return c.fetch?this.fetch(g(c,"fetch","resetState")):this},hasPreviousPage:function(){var a=this.state,b=a.currentPage;return"infinite"!=this.mode?b>a.firstPage:!!this.links[b-1]},hasNextPage:function(){var a=this.state,b=this.state.currentPage;return"infinite"!=this.mode?ba)throw new RangeError("`offset must be > 0`");a=c(a);var d=u(a/this.state.pageSize);return 0!==this.state.firstPage&&d++,d>this.state.lastPage&&(d=this.state.lastPage),this.getPage(d,b)},sync:function(a,c,d){var e=this;if("infinite"==e.mode){var g=d.success,h=e.state.currentPage;d.success=function(a,b,c){var i=e.links,j=e.parseLinks(a,f({xhr:c},d));j.first&&(i[e.state.firstPage]=j.first),j.prev&&(i[h-1]=j.prev),j.next&&(i[h+1]=j.next),g&&g(a,b,c)}}return(w.sync||b.sync).call(e,a,c,d)},parseLinks:function(a,b){var c={},d=b.xhr.getResponseHeader("Link");if(d){var e=["first","prev","next"];i(d.split(","),function(a){var b=a.split(";"),d=b[0].replace(y,""),f=b.slice(1);i(f,function(a){var b=a.split("="),f=b[0].replace(x,""),g=b[1].replace(x,"");"rel"==f&&k(e,g)&&(c[g]=d)})})}return c},parse:function(a,b){var c=this.parseState(a,h(this.queryParams),h(this.state),b);return c&&(this.state=this._checkState(f({},this.state,c))),this.parseRecords(a,b)},parseState:function(b,c,d){if(b&&2===b.length&&q(b[0])&&o(b[1])){var e=h(d),f=b[0];return i(m(g(c,"directions")),function(b){var c=b[0],d=b[1],g=f[d];s(g)||a.isNull(g)||(e[c]=f[d])}),f.order&&(e.order=1*n(c.directions)[f.order]),e}},parseRecords:function(a){return a&&2===a.length&&q(a[0])&&o(a[1])?a[1]:a},fetch:function(a){a=a||{};var b=this._checkState(this.state),c=this.mode;"infinite"!=c||a.url||(a.url=this.links[b.currentPage]);var e=a.data||{},i=a.url||this.url||"";p(i)&&(i=i.call(this));var k=i.indexOf("?");-1!=k&&(f(e,d(i.slice(k+1))),i=i.slice(0,k)),a.url=i,a.data=e;var l,n,o,q,t="client"==this.mode?j(this.queryParams,"sortKey","order"):g(j(this.queryParams,r(A.queryParams)),"directions"),u=m(t),v=h(this);for(l=0;lg?-1:1}):void 0},setSorting:function(a,b,c){var d=this.state;d.sortKey=a,d.order=b=b||d.order;var e=this.fullCollection,g=!1,h=!1;a||(g=h=!0);var i=this.mode;c=f({side:"client"==i?i:"server",full:!0},c);var j=this._makeComparator(a,b,c.sortValue),k=c.full,l=c.side;return"client"==l?k?(e&&(e.comparator=j),g=!0):(this.comparator=j,h=!0):"server"!=l||k||(this.comparator=j),g&&(this.comparator=null),h&&e&&(e.comparator=null),this}}),A=z.prototype;return z}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backbone.picky.min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backbone.picky.min.js deleted file mode 100644 index b3cbc00d..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backbone.picky.min.js +++ /dev/null @@ -1,6 +0,0 @@ -// Backbone.Picky, v0.2.0 -// Copyright (c)2013 Derick Bailey, Muted Solutions, LLC. -// Distributed under MIT license -// http://github.com/derickbailey/backbone.picky - -!function(a,b){if("object"==typeof exports){var c=require("underscore"),d=require("backbone");module.exports=b(c,d)}else"function"==typeof define&&define.amd&&define(["underscore","backbone"],b)}(this,function(a,b){"option strict";return b.Picky=function(a,b){var c={};c.SingleSelect=function(a){this.collection=a},b.extend(c.SingleSelect.prototype,{select:function(a){a&&this.selected===a||(this.deselect(),this.selected=a,this.selected.select(),this.trigger("select:one",a))},deselect:function(a){this.selected&&(a=a||this.selected,this.selected===a&&(this.selected.deselect(),this.trigger("deselect:one",this.selected),delete this.selected))}}),c.MultiSelect=function(a){this.collection=a,this.selected={}},b.extend(c.MultiSelect.prototype,{select:function(a){this.selected[a.cid]||(this.selected[a.cid]=a,a.select(),d(this))},deselect:function(a){this.selected[a.cid]&&(delete this.selected[a.cid],a.deselect(),d(this))},selectAll:function(){this.each(function(a){a.select()}),d(this)},selectNone:function(){0!==this.selectedLength&&(this.each(function(a){a.deselect()}),d(this))},toggleSelectAll:function(){this.selectedLength===this.length?this.selectNone():this.selectAll()}}),c.Selectable=function(a){this.model=a},b.extend(c.Selectable.prototype,{select:function(){this.selected||(this.selected=!0,this.trigger("selected",this),this.collection&&this.collection.select(this))},deselect:function(){this.selected&&(this.selected=!1,this.trigger("deselected",this),this.collection&&this.collection.deselect(this))},toggleSelected:function(){this.selected?this.deselect():this.select()}});var d=function(a){a.selectedLength=b.size(a.selected);var c=a.selectedLength,d=a.length;return c===d?(a.trigger("select:all",a),void 0):0===c?(a.trigger("select:none",a),void 0):c>0&&d>c?(a.trigger("select:some",a),void 0):void 0};return c}(b,a),b.Picky}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backgrid-filter.min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backgrid-filter.min.js deleted file mode 100644 index 6b0423e1..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/backgrid-filter.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - backgrid-filter - http://github.com/wyuenho/backgrid - - Copyright (c) 2013 Jimmy Yuen Ho Wong and contributors - Licensed under the MIT @license. -*/ -!function(a,b){"object"==typeof exports?!function(){var a;try{a=require("lunr")}catch(c){}module.exports=b(require("underscore"),require("backbone"),require("backgrid"),a)}():b(a._,a.Backbone,a.Backgrid,a.lunr)}(this,function(a,b,c,d){"use strict";var e=c.Extension.ServerSideFilter=b.View.extend({tagName:"form",className:"backgrid-filter form-search",template:function(a){return' ×'},events:{"keyup input[type=search]":"showClearButtonMaybe","click a[data-backgrid-action=clear]":"clear",submit:"search"},name:"q",value:null,placeholder:null,initialize:function(a){e.__super__.initialize.apply(this,arguments),this.name=a.name||this.name,this.value=a.value||this.value,this.placeholder=a.placeholder||this.placeholder,this.template=a.template||this.template;var c=this.collection,d=this;b.PageableCollection&&c instanceof b.PageableCollection&&"server"==c.mode&&(c.queryParams[this.name]=function(){return d.searchBox().val()||null})},clearSearchBox:function(){this.value=null,this.searchBox().val(null),this.showClearButtonMaybe()},showClearButtonMaybe:function(){var a=this.clearButton(),b=this.searchBox().val();b?a.show():a.hide()},searchBox:function(){return this.$el.find("input[type=search]")},clearButton:function(){return this.$el.find("a[data-backgrid-action=clear]")},query:function(){return this.value=this.searchBox().val(),this.value},search:function(a){a&&a.preventDefault();var c={},d=this.query();d&&(c[this.name]=d);var e=this.collection;b.PageableCollection&&e instanceof b.PageableCollection?e.getFirstPage({data:c,reset:!0,fetch:!0}):e.fetch({data:c,reset:!0})},clear:function(a){a&&a.preventDefault(),this.clearSearchBox();var c=this.collection;b.PageableCollection&&c instanceof b.PageableCollection?c.getFirstPage({reset:!0,fetch:!0}):c.fetch({reset:!0})},render:function(){return this.$el.empty().append(this.template({name:this.name,placeholder:this.placeholder,value:this.value})),this.showClearButtonMaybe(),this.delegateEvents(),this}}),f=c.Extension.ClientSideFilter=e.extend({events:a.extend({},e.prototype.events,{"click a[data-backgrid-action=clear]":function(a){a.preventDefault(),this.clear()},"keydown input[type=search]":"search",submit:function(a){a.preventDefault(),this.search()}}),fields:null,wait:149,initialize:function(b){f.__super__.initialize.apply(this,arguments),this.fields=b.fields||this.fields,this.wait=b.wait||this.wait,this._debounceMethods(["search","clear"]);var c=this.collection=this.collection.fullCollection||this.collection,d=this.shadowCollection=c.clone();this.listenTo(c,"add",function(a,b,c){d.add(a,c)}),this.listenTo(c,"remove",function(a,b,c){d.remove(a,c)}),this.listenTo(c,"sort",function(a){this.searchBox().val()||d.reset(a.models)}),this.listenTo(c,"reset",function(b,c){c=a.extend({reindex:!0},c||{}),c.reindex&&null==c.from&&null==c.to&&d.reset(b.models)})},_debounceMethods:function(b){a.isString(b)&&(b=[b]),this.undelegateEvents();for(var c=0,d=b.length;d>c;c++){var e=b[c],f=this[e];this[e]=a.debounce(f,this.wait)}this.delegateEvents()},makeRegExp:function(a){return new RegExp(a.trim().split(/\s+/).join("|"),"i")},makeMatcher:function(a){var b=this.makeRegExp(a);return function(a){for(var c=this.fields||a.keys(),d=0,e=c.length;e>d;d++)if(b.test(a.get(c[d])+""))return!0;return!1}},search:function(){var b=a.bind(this.makeMatcher(this.query()),this),c=this.collection;c.pageableCollection&&c.pageableCollection.getFirstPage({silent:!0}),c.reset(this.shadowCollection.filter(b),{reindex:!1})},clear:function(){this.clearSearchBox();var a=this.collection;a.pageableCollection&&a.pageableCollection.getFirstPage({silent:!0}),a.reset(this.shadowCollection.models,{reindex:!1})}}),g=c.Extension.LunrFilter=f.extend({ref:"id",fields:null,initialize:function(a){g.__super__.initialize.apply(this,arguments),this.ref=a.ref||this.ref;var b=this.collection=this.collection.fullCollection||this.collection;this.listenTo(b,"add",this.addToIndex),this.listenTo(b,"remove",this.removeFromIndex),this.listenTo(b,"reset",this.resetIndex),this.listenTo(b,"change",this.updateIndex),this.resetIndex(b)},resetIndex:function(b,c){if(c=a.extend({reindex:!0},c||{}),c.reindex){var e=this;this.index=d(function(){a.each(e.fields,function(a,b){this.field(b,a),this.ref(e.ref)},this)}),b.each(function(a){this.addToIndex(a)},this)}},addToIndex:function(a){var b=this.index,c=a.toJSON();b.documentStore.has(c[this.ref])?b.update(c):b.add(c)},removeFromIndex:function(a){var b=this.index,c=a.toJSON();b.documentStore.has(c[this.ref])&&b.remove(c)},updateIndex:function(b){var c=b.changedAttributes();c&&!a.isEmpty(a.intersection(a.keys(this.fields),a.keys(c)))&&this.index.update(b.toJSON())},search:function(){var a=this.collection;if(!this.query())return void a.reset(this.shadowCollection.models,{reindex:!1});for(var b=this.index.search(this.query()),c=[],d=0;dg;g++)b.push(new this.pageHandle({collection:c,pageIndex:g}));var h=this.controls;return a.each(["back","rewind","forward","fastForward"],function(a){var d=h[a];if(d){var e={collection:c,title:d.title,label:d.label};e["is"+a.slice(0,1).toUpperCase()+a.slice(1)]=!0;var f=new this.pageHandle(e);"rewind"==a||"back"==a?b.unshift(f):b.push(f)}},this),b},render:function(){if(this.$el.empty(),this.handles)for(var a=0,b=this.handles.length;b>a;a++)this.handles[a].remove();for(var c=this.handles=this.makeHandles(),d=document.createElement("ul"),a=0;a'),this.delegateEvents(),this}}),d=b.Extension.SelectAllHeaderCell=c.extend({className:"select-all-header-cell",tagName:"th",initialize:function(a){this.column=a.column,this.column instanceof b.Column||(this.column=new b.Column(this.column));var c=this.collection,d=this.selectedModels={};this.listenTo(c.fullCollection||c,"backgrid:selected",function(a,b){b?d[a.id||a.cid]=1:(delete d[a.id||a.cid],this.$el.find("input[type=checkbox]").prop("checked",!1))}),this.listenTo(c.fullCollection||c,"remove",function(a){delete d[a.id||a.cid]}),this.listenTo(c,"backgrid:refresh",function(){for(var a=this.$el.find("input[type=checkbox]").prop("checked"),b=0;bc;c++){var f=b[c];if(f instanceof d){a=f;break}}var g=[];if(a){var h=a.selectedModels,i=this.collection.fullCollection||this.collection;for(var j in h)g.push(i.get(j))}return g},b.Grid.prototype.clearSelectedModels=function(){for(var a=this.getSelectedModels(),b=0,c=a.length;c>b;b++){var d=a[b];d.trigger("backgrid:select",d,!1)}}}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/bootstrap3-typeahead.min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/bootstrap3-typeahead.min.js deleted file mode 100644 index ae19ae38..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/bootstrap3-typeahead.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a,b){"use strict";"undefined"!=typeof module&&module.exports?module.exports=b(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):b(a.jQuery)}(this,function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.select=this.options.select||this.select,this.autoSelect="boolean"==typeof this.options.autoSelect?this.options.autoSelect:!0,this.highlighter=this.options.highlighter||this.highlighter,this.render=this.options.render||this.render,this.updater=this.options.updater||this.updater,this.displayText=this.options.displayText||this.displayText,this.source=this.options.source,this.delay=this.options.delay,this.$menu=a(this.options.menu),this.$appendTo=this.options.appendTo?a(this.options.appendTo):null,this.shown=!1,this.listen(),this.showHintOnFocus="boolean"==typeof this.options.showHintOnFocus?this.options.showHintOnFocus:!1,this.afterSelect=this.options.afterSelect,this.addItem=!1};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").data("value");if(this.$element.data("active",a),this.autoSelect||a){var b=this.updater(a);this.$element.val(this.displayText(b)||b).change(),this.afterSelect(b)}return this.hide()},updater:function(a){return a},setSource:function(a){this.source=a},show:function(){var b,c=a.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return b="function"==typeof this.options.scrollHeight?this.options.scrollHeight.call():this.options.scrollHeight,(this.$appendTo?this.$menu.appendTo(this.$appendTo):this.$menu.insertAfter(this.$element)).css({top:c.top+c.height+b,left:c.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){if(this.query="undefined"!=typeof b&&null!==b?b:this.$element.val()||"",this.query.length0?this.$element.data("active",b[0]):this.$element.data("active",null),this.options.addItem&&b.push(this.options.addItem),"all"==this.options.items?this.render(b).show():this.render(b.slice(0,this.options.items)).show()):this.shown?this.hide():this},matcher:function(a){var b=this.displayText(a);return~b.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){for(var b,c=[],d=[],e=[];b=a.shift();){var f=this.displayText(b);f.toLowerCase().indexOf(this.query.toLowerCase())?~f.indexOf(this.query)?d.push(b):e.push(b):c.push(b)}return c.concat(d,e)},highlighter:function(b){var c,d,e,f,g,h=a("
    "),i=this.query,j=b.toLowerCase().indexOf(i.toLowerCase());if(c=i.length,0===c)return h.text(b).html();for(;j>-1;)d=b.substr(0,j),e=b.substr(j,c),f=b.substr(j+c),g=a("").text(e),h.append(document.createTextNode(d)).append(g),b=f,j=b.toLowerCase().indexOf(i.toLowerCase());return h.append(document.createTextNode(b)).html()},render:function(b){var c=this,d=this,e=!1;return b=a(b).map(function(b,f){var g=d.displayText(f);return b=a(c.options.item).data("value",f),b.find("a").html(c.highlighter(g)),g==d.$element.val()&&(b.addClass("active"),d.$element.data("active",f),e=!0),b[0]}),this.autoSelect&&!e&&(b.first().addClass("active"),this.$element.data("active",b.first().data("value"))),this.$menu.html(b),this},displayText:function(a){return a.name||a},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("focus",a.proxy(this.focus,this)).on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",a.proxy(this.keydown,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this)).on("mouseleave","li",a.proxy(this.mouseleave,this))},destroy:function(){this.$element.data("typeahead",null),this.$element.data("active",null),this.$element.off("focus").off("blur").off("keypress").off("keyup"),this.eventSupported("keydown")&&this.$element.off("keydown"),this.$menu.remove()},eventSupported:function(a){var b=a in this.$element;return b||(this.$element.setAttribute(a,"return;"),b="function"==typeof this.$element[a]),b},move:function(a){if(this.shown){switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:if(a.shiftKey)return;a.preventDefault(),this.prev();break;case 40:if(a.shiftKey)return;a.preventDefault(),this.next()}a.stopPropagation()}},keydown:function(b){this.suppressKeyPressRepeat=~a.inArray(b.keyCode,[40,38,9,13,27]),this.shown||40!=b.keyCode?this.move(b):this.lookup()},keypress:function(a){this.suppressKeyPressRepeat||this.move(a)},keyup:function(a){switch(a.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}a.stopPropagation(),a.preventDefault()},focus:function(a){this.focused||(this.focused=!0,this.options.showHintOnFocus&&this.lookup(""))},blur:function(a){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(a){a.stopPropagation(),a.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(b){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")},mouseleave:function(a){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var c=a.fn.typeahead;a.fn.typeahead=function(c){var d=arguments;return"string"==typeof c&&"getActive"==c?this.data("active"):this.each(function(){var e=a(this),f=e.data("typeahead"),g="object"==typeof c&&c;f||e.data("typeahead",f=new b(this,g)),"string"==typeof c&&(d.length>1?f[c].apply(f,Array.prototype.slice.call(d,1)):f[c]())})},a.fn.typeahead.defaults={source:[],items:8,menu:'',item:'
  • ',minLength:1,scrollHeight:0,autoSelect:!0,afterSelect:a.noop,addItem:!1,delay:0},a.fn.typeahead.Constructor=b,a.fn.typeahead.noConflict=function(){return a.fn.typeahead=c,this},a(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);c.data("typeahead")||c.typeahead(c.data())})}); \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/chance.min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/chance.min.js deleted file mode 100644 index 047459a2..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/chance.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(){function a(b){if(!(this instanceof a))return new a(b);if("function"==typeof b)return this.random=b,this;var c;arguments.length&&(this.seed=0);for(var d=0;de;e++)c=d[e],b[c]=a[c]||b[c]}function f(a,b){for(var c=0,d=a.length;d>c;c++)b[c]=a[c]}function g(a,b){var c=Array.isArray(a),d=b||(c?new Array(a.length):{});return c?f(a,d):e(a,d),d}var h=9007199254740992,i=-h,j="0123456789",k="abcdefghijklmnopqrstuvwxyz",l=k.toUpperCase(),m=j+"abcdef",n=Array.prototype.slice;a.prototype.VERSION="0.7.3";var o=function(){throw new Error("No Base64 encoder available.")};!function(){"function"==typeof btoa?o=btoa:"function"==typeof Buffer&&(o=function(a){return new Buffer(a).toString("base64")})}(),a.prototype.bool=function(a){return a=b(a,{likelihood:50}),c(a.likelihood<0||a.likelihood>100,"Chance: Likelihood accepts values from 0 to 100."),100*this.random()f,"Chance: Max specified is out of range with fixed. Max should be, at most, "+f),a=b(a,{min:g,max:f}),d=this.integer({min:a.min*e,max:a.max*e});var i=(d/e).toFixed(a.fixed);return parseFloat(i)},a.prototype.integer=function(a){return a=b(a,{min:i,max:h}),c(a.min>a.max,"Chance: Min cannot be greater than Max."),Math.floor(this.random()*(a.max-a.min+1)+a.min)},a.prototype.natural=function(a){return a=b(a,{min:0,max:h}),this.integer(a)},a.prototype.string=function(a){a=b(a);var c=a.length||this.natural({min:5,max:20}),d=a.pool,e=this.n(this.character,c,{pool:d});return e.join("")},a.prototype.capitalize=function(a){return a.charAt(0).toUpperCase()+a.substr(1)},a.prototype.mixin=function(b){for(var c in b)a.prototype[c]=b[c];return this},a.prototype.unique=function(a,c,d){d=b(d,{comparator:function(a,b){return-1!==a.indexOf(b)}});for(var e,f=[],g=0,h=50*c,i=n.call(arguments,2);f.lengthh)throw new RangeError("Chance: num is likely too large for sample set");return f},a.prototype.n=function(a,b){"undefined"==typeof b&&(b=1);var c=b,d=[],e=n.call(arguments,2);for(c=Math.max(0,c),null;c--;null)d.push(a.apply(this,e));return d},a.prototype.pad=function(a,b,c){return c=c||"0",a+="",a.length>=b?a:new Array(b-a.length+1).join(c)+a},a.prototype.pick=function(a,b){if(0===a.length)throw new RangeError("Chance: Cannot pick() from an empty array");return b&&1!==b?this.shuffle(a).slice(0,b):a[this.natural({max:a.length-1})]},a.prototype.shuffle=function(a){for(var b=a.slice(0),c=[],d=0,e=Number(b.length),f=0;e>f;f++)d=this.natural({max:b.length-1}),c[f]=b[d],b.splice(d,1);return c},a.prototype.weighted=function(a,b){if(a.length!==b.length)throw new RangeError("Chance: length of array and weights must match");for(var c=b.length-1;c>=0;--c)b[c]<=0&&(a.splice(c,1),b.splice(c,1));if(b.some(function(a){return 1>a})){var d=b.reduce(function(a,b){return a>b?b:a},b[0]),e=1/d;b=b.map(function(a){return a*e})}var f,g=b.reduce(function(a,b){return a+b},0),h=this.natural({min:1,max:g}),i=0;return b.some(function(b,c){return i+b>=h?(f=a[c],!0):(i+=b,!1)}),f},a.prototype.paragraph=function(a){a=b(a);var c=a.sentences||this.natural({min:3,max:7}),d=this.n(this.sentence,c);return d.join(" ")},a.prototype.sentence=function(a){a=b(a);var c,d=a.words||this.natural({min:12,max:18}),e=this.n(this.word,d);return c=e.join(" "),c=this.capitalize(c)+"."},a.prototype.syllable=function(a){a=b(a);for(var c,d=a.length||this.natural({min:2,max:3}),e="bcdfghjklmnprstvwz",f="aeiou",g=e+f,h="",i=0;d>i;i++)c=this.character(0===i?{pool:g}:-1===e.indexOf(c)?{pool:e}:{pool:f}),h+=c;return h},a.prototype.word=function(a){a=b(a),c(a.syllables&&a.length,"Chance: Cannot specify both syllables AND length.");var d=a.syllables||this.natural({min:1,max:3}),e="";if(a.length){do e+=this.syllable();while(e.lengthf;f++)e+=this.syllable();return e},a.prototype.age=function(a){a=b(a);var c;switch(a.type){case"child":c={min:1,max:12};break;case"teen":c={min:13,max:19};break;case"adult":c={min:18,max:65};break;case"senior":c={min:65,max:100};break;case"all":c={min:1,max:100};break;default:c={min:18,max:65}}return this.natural(c)},a.prototype.birthday=function(a){return a=b(a,{year:(new Date).getFullYear()-this.age(a)}),this.date(a)},a.prototype.cpf=function(){var a=this.n(this.natural,9,{max:9}),b=2*a[8]+3*a[7]+4*a[6]+5*a[5]+6*a[4]+7*a[3]+8*a[2]+9*a[1]+10*a[0];b=11-b%11,b>=10&&(b=0);var c=2*b+3*a[8]+4*a[7]+5*a[6]+6*a[5]+7*a[4]+8*a[3]+9*a[2]+10*a[1]+11*a[0];return c=11-c%11,c>=10&&(c=0),""+a[0]+a[1]+a[2]+"."+a[3]+a[4]+a[5]+"."+a[6]+a[7]+a[8]+"-"+b+c},a.prototype.first=function(a){return a=b(a,{gender:this.gender()}),this.pick(this.get("firstNames")[a.gender.toLowerCase()])},a.prototype.gender=function(){return this.pick(["Male","Female"])},a.prototype.last=function(){return this.pick(this.get("lastNames"))},a.prototype.name=function(a){a=b(a);var c,d=this.first(a),e=this.last();return c=a.middle?d+" "+this.first(a)+" "+e:a.middle_initial?d+" "+this.character({alpha:!0,casing:"upper"})+". "+e:d+" "+e,a.prefix&&(c=this.prefix(a)+" "+c),a.suffix&&(c=c+" "+this.suffix(a)),c},a.prototype.name_prefixes=function(a){a=a||"all",a=a.toLowerCase();var b=[{name:"Doctor",abbreviation:"Dr."}];return("male"===a||"all"===a)&&b.push({name:"Mister",abbreviation:"Mr."}),("female"===a||"all"===a)&&(b.push({name:"Miss",abbreviation:"Miss"}),b.push({name:"Misses",abbreviation:"Mrs."})),b},a.prototype.prefix=function(a){return this.name_prefix(a)},a.prototype.name_prefix=function(a){return a=b(a,{gender:"all"}),a.full?this.pick(this.name_prefixes(a.gender)).name:this.pick(this.name_prefixes(a.gender)).abbreviation},a.prototype.ssn=function(a){a=b(a,{ssnFour:!1,dashes:!0});var c,d="1234567890",e=a.dashes?"-":"";return c=a.ssnFour?this.string({pool:d,length:4}):this.string({pool:d,length:3})+e+this.string({pool:d,length:2})+e+this.string({pool:d,length:4})},a.prototype.name_suffixes=function(){var a=[{name:"Doctor of Osteopathic Medicine",abbreviation:"D.O."},{name:"Doctor of Philosophy",abbreviation:"Ph.D."},{name:"Esquire",abbreviation:"Esq."},{name:"Junior",abbreviation:"Jr."},{name:"Juris Doctor",abbreviation:"J.D."},{name:"Master of Arts",abbreviation:"M.A."},{name:"Master of Business Administration",abbreviation:"M.B.A."},{name:"Master of Science",abbreviation:"M.S."},{name:"Medical Doctor",abbreviation:"M.D."},{name:"Senior",abbreviation:"Sr."},{name:"The Third",abbreviation:"III"},{name:"The Fourth",abbreviation:"IV"}];return a},a.prototype.suffix=function(a){return this.name_suffix(a)},a.prototype.name_suffix=function(a){return a=b(a),a.full?this.pick(this.name_suffixes()).name:this.pick(this.name_suffixes()).abbreviation},a.prototype.android_id=function(){return"APA91"+this.string({pool:"0123456789abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_",length:178})},a.prototype.apple_token=function(){return this.string({pool:"abcdef1234567890",length:64})},a.prototype.wp8_anid2=function(){return o(this.hash({length:32}))},a.prototype.wp7_anid=function(){return"A="+this.guid().replace(/-/g,"").toUpperCase()+"&E="+this.hash({length:3})+"&W="+this.integer({min:0,max:9})},a.prototype.bb_pin=function(){return this.hash({length:8})},a.prototype.color=function(a){function c(a,b){return[a,a,a].join(b||"")}a=b(a,{format:this.pick(["hex","shorthex","rgb","0x"]),grayscale:!1,casing:"lower"});var d,e=a.grayscale;if("hex"===a.format)d="#"+(e?c(this.hash({length:2})):this.hash({length:6}));else if("shorthex"===a.format)d="#"+(e?c(this.hash({length:1})):this.hash({length:3}));else if("rgb"===a.format)d=e?"rgb("+c(this.natural({max:255}),",")+")":"rgb("+this.natural({max:255})+","+this.natural({max:255})+","+this.natural({max:255})+")";else{if("0x"!==a.format)throw new Error('Invalid format provided. Please provide one of "hex", "shorthex", "rgb" or "0x".');d="0x"+(e?c(this.hash({length:2})):this.hash({length:6}))}return"upper"===a.casing&&(d=d.toUpperCase()),d},a.prototype.domain=function(a){return a=b(a),this.word()+"."+(a.tld||this.tld())},a.prototype.email=function(a){return a=b(a),this.word({length:a.length})+"@"+(a.domain||this.domain())},a.prototype.fbid=function(){return parseInt("10000"+this.natural({max:1e11}),10)},a.prototype.google_analytics=function(){var a=this.pad(this.natural({max:999999}),6),b=this.pad(this.natural({max:99}),2);return"UA-"+a+"-"+b},a.prototype.hashtag=function(){return"#"+this.word()},a.prototype.ip=function(){return this.natural({max:255})+"."+this.natural({max:255})+"."+this.natural({max:255})+"."+this.natural({max:255})},a.prototype.ipv6=function(){var a=this.n(this.hash,8,{length:4});return a.join(":")},a.prototype.klout=function(){return this.natural({min:1,max:99})},a.prototype.tlds=function(){return["com","org","edu","gov","co.uk","net","io"]},a.prototype.tld=function(){return this.pick(this.tlds())},a.prototype.twitter=function(){return"@"+this.word()},a.prototype.url=function(a){a=b(a,{protocol:"http",domain:this.domain(a),domain_prefix:"",path:this.word(),extensions:[]});var c=a.extensions.length>0?"."+this.pick(a.extensions):"",d=a.domain_prefix?a.domain_prefix+"."+a.domain:a.domain;return a.protocol+"://"+d+"/"+a.path+c},a.prototype.address=function(a){return a=b(a),this.natural({min:5,max:2e3})+" "+this.street(a)},a.prototype.altitude=function(a){return a=b(a,{fixed:5,max:8848}),this.floating({min:0,max:a.max,fixed:a.fixed})},a.prototype.areacode=function(a){a=b(a,{parens:!0});var c=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:8}).toString()+this.natural({min:0,max:9}).toString();return a.parens?"("+c+")":c},a.prototype.city=function(){return this.capitalize(this.word({syllables:3}))},a.prototype.coordinates=function(a){return a=b(a),this.latitude(a)+", "+this.longitude(a)},a.prototype.countries=function(){return this.get("countries")},a.prototype.country=function(a){a=b(a);var c=this.pick(this.countries());return a.full?c.name:c.abbreviation},a.prototype.depth=function(a){return a=b(a,{fixed:5,min:-2550}),this.floating({min:a.min,max:0,fixed:a.fixed})},a.prototype.geohash=function(a){return a=b(a,{length:7}),this.string({length:a.length,pool:"0123456789bcdefghjkmnpqrstuvwxyz"})},a.prototype.geojson=function(a){return a=b(a),this.latitude(a)+", "+this.longitude(a)+", "+this.altitude(a)},a.prototype.latitude=function(a){return a=b(a,{fixed:5,min:-90,max:90}),this.floating({min:a.min,max:a.max,fixed:a.fixed})},a.prototype.longitude=function(a){return a=b(a,{fixed:5,min:-180,max:180}),this.floating({min:a.min,max:a.max,fixed:a.fixed})},a.prototype.phone=function(a){var c,d=this,e=function(a){var b=[];return a.sections.forEach(function(a){b.push(d.string({pool:"0123456789",length:a}))}),a.area+b.join(" ")};a=b(a,{formatted:!0,country:"us",mobile:!1}),a.formatted||(a.parens=!1);var f;switch(a.country){case"fr":a.mobile?(c=this.pick(["06","07"])+d.string({pool:"0123456789",length:8}),f=a.formatted?c.match(/../g).join(" "):c):(c=this.pick(["01"+this.pick(["30","34","39","40","41","42","43","44","45","46","47","48","49","53","55","56","58","60","64","69","70","72","73","74","75","76","77","78","79","80","81","82","83"])+d.string({pool:"0123456789",length:6}),"02"+this.pick(["14","18","22","23","28","29","30","31","32","33","34","35","36","37","38","40","41","43","44","45","46","47","48","49","50","51","52","53","54","56","57","61","62","69","72","76","77","78","85","90","96","97","98","99"])+d.string({pool:"0123456789",length:6}),"03"+this.pick(["10","20","21","22","23","24","25","26","27","28","29","39","44","45","51","52","54","55","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","80","81","82","83","84","85","86","87","88","89","90"])+d.string({pool:"0123456789",length:6}),"04"+this.pick(["11","13","15","20","22","26","27","30","32","34","37","42","43","44","50","56","57","63","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","88","89","90","91","92","93","94","95","97","98"])+d.string({pool:"0123456789",length:6}),"05"+this.pick(["08","16","17","19","24","31","32","33","34","35","40","45","46","47","49","53","55","56","57","58","59","61","62","63","64","65","67","79","81","82","86","87","90","94"])+d.string({pool:"0123456789",length:6}),"09"+d.string({pool:"0123456789",length:8})]),f=a.formatted?c.match(/../g).join(" "):c);break;case"uk":a.mobile?(c=this.pick([{area:"07"+this.pick(["4","5","7","8","9"]),sections:[2,6]},{area:"07624 ",sections:[6]}]),f=a.formatted?e(c):e(c).replace(" ","")):(c=this.pick([{area:"01"+this.character({pool:"234569"})+"1 ",sections:[3,4]},{area:"020 "+this.character({pool:"378"}),sections:[3,4]},{area:"023 "+this.character({pool:"89"}),sections:[3,4]},{area:"024 7",sections:[3,4]},{area:"028 "+this.pick(["25","28","37","71","82","90","92","95"]),sections:[2,4]},{area:"012"+this.pick(["04","08","54","76","97","98"])+" ",sections:[5]},{area:"013"+this.pick(["63","64","84","86"])+" ",sections:[5]},{area:"014"+this.pick(["04","20","60","61","80","88"])+" ",sections:[5]},{area:"015"+this.pick(["24","27","62","66"])+" ",sections:[5]},{area:"016"+this.pick(["06","29","35","47","59","95"])+" ",sections:[5]},{area:"017"+this.pick(["26","44","50","68"])+" ",sections:[5]},{area:"018"+this.pick(["27","37","84","97"])+" ",sections:[5]},{area:"019"+this.pick(["00","05","35","46","49","63","95"])+" ",sections:[5]}]),f=a.formatted?e(c):e(c).replace(" ","","g"));break;case"us":var g=this.areacode(a).toString(),h=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:9}).toString()+this.natural({min:0,max:9}).toString(),i=this.natural({min:1e3,max:9999}).toString();f=a.formatted?g+" "+h+"-"+i:g+h+i}return f},a.prototype.postal=function(){var a=this.character({pool:"XVTSRPNKLMHJGECBA"}),b=a+this.natural({max:9})+this.character({alpha:!0,casing:"upper"}),c=this.natural({max:9})+this.character({alpha:!0,casing:"upper"})+this.natural({max:9});return b+" "+c},a.prototype.provinces=function(){return this.get("provinces")},a.prototype.province=function(a){return a&&a.full?this.pick(this.provinces()).name:this.pick(this.provinces()).abbreviation},a.prototype.state=function(a){return a&&a.full?this.pick(this.states(a)).name:this.pick(this.states(a)).abbreviation},a.prototype.states=function(a){a=b(a);var c,d=this.get("us_states_and_dc"),e=this.get("territories"),f=this.get("armed_forces");return c=d,a.territories&&(c=c.concat(e)),a.armed_forces&&(c=c.concat(f)),c},a.prototype.street=function(a){a=b(a);var c=this.word({syllables:2});return c=this.capitalize(c),c+=" ",c+=a.short_suffix?this.street_suffix().abbreviation:this.street_suffix().name},a.prototype.street_suffix=function(){return this.pick(this.street_suffixes())},a.prototype.street_suffixes=function(){return this.get("street_suffixes")},a.prototype.zip=function(a){var b=this.n(this.natural,5,{max:9});return a&&a.plusfour===!0&&(b.push("-"),b=b.concat(this.n(this.natural,4,{max:9}))),b.join("")},a.prototype.ampm=function(){return this.bool()?"am":"pm"},a.prototype.date=function(a){var c,d;if(a&&(a.min||a.max)){a=b(a,{american:!0,string:!1});var e="undefined"!=typeof a.min?a.min.getTime():1,f="undefined"!=typeof a.max?a.max.getTime():864e13;d=new Date(this.natural({min:e,max:f}))}else{var g=this.month({raw:!0});a=b(a,{year:parseInt(this.year(),10),month:g.numeric-1,day:this.natural({min:1,max:g.days}),hour:this.hour(),minute:this.minute(),second:this.second(),millisecond:this.millisecond(),american:!0,string:!1}),d=new Date(a.year,a.month,a.day,a.hour,a.minute,a.second,a.millisecond)}return c=a.american?d.getMonth()+1+"/"+d.getDate()+"/"+d.getFullYear():d.getDate()+"/"+(d.getMonth()+1)+"/"+d.getFullYear(),a.string?c:d},a.prototype.hammertime=function(a){return this.date(a).getTime()},a.prototype.hour=function(a){return a=b(a,{min:1,max:a&&a.twentyfour?24:12}),c(a.min<1,"Chance: Min cannot be less than 1."),c(a.twentyfour&&a.max>24,"Chance: Max cannot be greater than 24 for twentyfour option."),c(!a.twentyfour&&a.max>12,"Chance: Max cannot be greater than 12."),c(a.min>a.max,"Chance: Min cannot be greater than Max."),this.natural({min:a.min,max:a.max})},a.prototype.millisecond=function(){return this.natural({max:999})},a.prototype.minute=a.prototype.second=function(a){return a=b(a,{min:0,max:59}),c(a.min<0,"Chance: Min cannot be less than 0."),c(a.max>59,"Chance: Max cannot be greater than 59."),c(a.min>a.max,"Chance: Min cannot be greater than Max."),this.natural({min:a.min,max:a.max})},a.prototype.month=function(a){a=b(a,{min:1,max:12}),c(a.min<1,"Chance: Min cannot be less than 1."),c(a.max>12,"Chance: Max cannot be greater than 12."),c(a.min>a.max,"Chance: Min cannot be greater than Max.");var d=this.pick(this.months().slice(a.min-1,a.max));return a.raw?d:d.name},a.prototype.months=function(){return this.get("months")},a.prototype.second=function(){return this.natural({max:59})},a.prototype.timestamp=function(){return this.natural({min:1,max:parseInt((new Date).getTime()/1e3,10)})},a.prototype.year=function(a){return a=b(a,{min:(new Date).getFullYear()}),a.max="undefined"!=typeof a.max?a.max:a.min+100,this.natural(a).toString()},a.prototype.cc=function(a){a=b(a);var c,d,e;return c=this.cc_type(a.type?{name:a.type,raw:!0}:{raw:!0}),d=c.prefix.split(""),e=c.length-c.prefix.length-1,d=d.concat(this.n(this.integer,e,{min:0,max:9})),d.push(this.luhn_calculate(d.join(""))),d.join("")},a.prototype.cc_types=function(){return this.get("cc_types")},a.prototype.cc_type=function(a){a=b(a);var c=this.cc_types(),d=null;if(a.name){for(var e=0;ec?"-$"+c.replace("-",""):"$"+c},a.prototype.exp=function(a){a=b(a);var c={};return c.year=this.exp_year(),c.month=c.year===(new Date).getFullYear()?this.exp_month({future:!0}):this.exp_month(),a.raw?c:c.month+"/"+c.year},a.prototype.exp_month=function(a){a=b(a);var c,d,e=(new Date).getMonth();if(a.future){do c=this.month({raw:!0}).numeric,d=parseInt(c,10);while(e>d)}else c=this.month({raw:!0}).numeric;return c},a.prototype.exp_year=function(){return this.year({max:(new Date).getFullYear()+10})},a.prototype.d4=d({min:1,max:4}),a.prototype.d6=d({min:1,max:6}),a.prototype.d8=d({min:1,max:8}),a.prototype.d10=d({min:1,max:10}),a.prototype.d12=d({min:1,max:12}),a.prototype.d20=d({min:1,max:20}),a.prototype.d30=d({min:1,max:30}),a.prototype.d100=d({min:1,max:100}),a.prototype.rpg=function(a,c){if(c=b(c),null===a)throw new Error("A type of die roll must be included");var d=a.toLowerCase().split("d"),e=[];if(2!==d.length||!parseInt(d[0],10)||!parseInt(d[1],10))throw new Error("Invalid format provided. Please provide #d# where the first # is the number of dice to roll, the second # is the max of each die");for(var f=d[0];f>0;f--)e[f-1]=this.natural({min:1,max:d[1]});return"undefined"!=typeof c.sum&&c.sum?e.reduce(function(a,b){return a+b}):e},a.prototype.guid=function(a){a=b(a,{version:5});var c="abcdef1234567890",d="ab89",e=this.string({pool:c,length:8})+"-"+this.string({pool:c,length:4})+"-"+a.version+this.string({pool:c,length:3})+"-"+this.string({pool:d,length:1})+this.string({pool:c,length:3})+"-"+this.string({pool:c,length:12});return e},a.prototype.hash=function(a){a=b(a,{length:40,casing:"lower"});var c="upper"===a.casing?m.toUpperCase():m;return this.string({pool:c,length:a.length})},a.prototype.luhn_check=function(a){var b=a.toString(),c=+b.substring(b.length-1);return c===this.luhn_calculate(+b.substring(0,b.length-1))},a.prototype.luhn_calculate=function(a){for(var b,c=a.toString().split("").reverse(),d=0,e=0,f=c.length;f>e;++e)b=+c[e],e%2===0&&(b*=2,b>9&&(b-=9)),d+=b;return 9*d%10};var p={firstNames:{male:["James","John","Robert","Michael","William","David","Richard","Joseph","Charles","Thomas","Christopher","Daniel","Matthew","George","Donald","Anthony","Paul","Mark","Edward","Steven","Kenneth","Andrew","Brian","Joshua","Kevin","Ronald","Timothy","Jason","Jeffrey","Frank","Gary","Ryan","Nicholas","Eric","Stephen","Jacob","Larry","Jonathan","Scott","Raymond","Justin","Brandon","Gregory","Samuel","Benjamin","Patrick","Jack","Henry","Walter","Dennis","Jerry","Alexander","Peter","Tyler","Douglas","Harold","Aaron","Jose","Adam","Arthur","Zachary","Carl","Nathan","Albert","Kyle","Lawrence","Joe","Willie","Gerald","Roger","Keith","Jeremy","Terry","Harry","Ralph","Sean","Jesse","Roy","Louis","Billy","Austin","Bruce","Eugene","Christian","Bryan","Wayne","Russell","Howard","Fred","Ethan","Jordan","Philip","Alan","Juan","Randy","Vincent","Bobby","Dylan","Johnny","Phillip","Victor","Clarence","Ernest","Martin","Craig","Stanley","Shawn","Travis","Bradley","Leonard","Earl","Gabriel","Jimmy","Francis","Todd","Noah","Danny","Dale","Cody","Carlos","Allen","Frederick","Logan","Curtis","Alex","Joel","Luis","Norman","Marvin","Glenn","Tony","Nathaniel","Rodney","Melvin","Alfred","Steve","Cameron","Chad","Edwin","Caleb","Evan","Antonio","Lee","Herbert","Jeffery","Isaac","Derek","Ricky","Marcus","Theodore","Elijah","Luke","Jesus","Eddie","Troy","Mike","Dustin","Ray","Adrian","Bernard","Leroy","Angel","Randall","Wesley","Ian","Jared","Mason","Hunter","Calvin","Oscar","Clifford","Jay","Shane","Ronnie","Barry","Lucas","Corey","Manuel","Leo","Tommy","Warren","Jackson","Isaiah","Connor","Don","Dean","Jon","Julian","Miguel","Bill","Lloyd","Charlie","Mitchell","Leon","Jerome","Darrell","Jeremiah","Alvin","Brett","Seth","Floyd","Jim","Blake","Micheal","Gordon","Trevor","Lewis","Erik","Edgar","Vernon","Devin","Gavin","Jayden","Chris","Clyde","Tom","Derrick","Mario","Brent","Marc","Herman","Chase","Dominic","Ricardo","Franklin","Maurice","Max","Aiden","Owen","Lester","Gilbert","Elmer","Gene","Francisco","Glen","Cory","Garrett","Clayton","Sam","Jorge","Chester","Alejandro","Jeff","Harvey","Milton","Cole","Ivan","Andre","Duane","Landon"],female:["Mary","Emma","Elizabeth","Minnie","Margaret","Ida","Alice","Bertha","Sarah","Annie","Clara","Ella","Florence","Cora","Martha","Laura","Nellie","Grace","Carrie","Maude","Mabel","Bessie","Jennie","Gertrude","Julia","Hattie","Edith","Mattie","Rose","Catherine","Lillian","Ada","Lillie","Helen","Jessie","Louise","Ethel","Lula","Myrtle","Eva","Frances","Lena","Lucy","Edna","Maggie","Pearl","Daisy","Fannie","Josephine","Dora","Rosa","Katherine","Agnes","Marie","Nora","May","Mamie","Blanche","Stella","Ellen","Nancy","Effie","Sallie","Nettie","Della","Lizzie","Flora","Susie","Maud","Mae","Etta","Harriet","Sadie","Caroline","Katie","Lydia","Elsie","Kate","Susan","Mollie","Alma","Addie","Georgia","Eliza","Lulu","Nannie","Lottie","Amanda","Belle","Charlotte","Rebecca","Ruth","Viola","Olive","Amelia","Hannah","Jane","Virginia","Emily","Matilda","Irene","Kathryn","Esther","Willie","Henrietta","Ollie","Amy","Rachel","Sara","Estella","Theresa","Augusta","Ora","Pauline","Josie","Lola","Sophia","Leona","Anne","Mildred","Ann","Beulah","Callie","Lou","Delia","Eleanor","Barbara","Iva","Louisa","Maria","Mayme","Evelyn","Estelle","Nina","Betty","Marion","Bettie","Dorothy","Luella","Inez","Lela","Rosie","Allie","Millie","Janie","Cornelia","Victoria","Ruby","Winifred","Alta","Celia","Christine","Beatrice","Birdie","Harriett","Mable","Myra","Sophie","Tillie","Isabel","Sylvia","Carolyn","Isabelle","Leila","Sally","Ina","Essie","Bertie","Nell","Alberta","Katharine","Lora","Rena","Mina","Rhoda","Mathilda","Abbie","Eula","Dollie","Hettie","Eunice","Fanny","Ola","Lenora","Adelaide","Christina","Lelia","Nelle","Sue","Johanna","Lilly","Lucinda","Minerva","Lettie","Roxie","Cynthia","Helena","Hilda","Hulda","Bernice","Genevieve","Jean","Cordelia","Marian","Francis","Jeanette","Adeline","Gussie","Leah","Lois","Lura","Mittie","Hallie","Isabella","Olga","Phoebe","Teresa","Hester","Lida","Lina","Winnie","Claudia","Marguerite","Vera","Cecelia","Bess","Emilie","John","Rosetta","Verna","Myrtie","Cecilia","Elva","Olivia","Ophelia","Georgie","Elnora","Violet","Adele","Lily","Linnie","Loretta","Madge","Polly","Virgie","Eugenia","Lucile","Lucille","Mabelle","Rosalie"]},lastNames:["Smith","Johnson","Williams","Jones","Brown","Davis","Miller","Wilson","Moore","Taylor","Anderson","Thomas","Jackson","White","Harris","Martin","Thompson","Garcia","Martinez","Robinson","Clark","Rodriguez","Lewis","Lee","Walker","Hall","Allen","Young","Hernandez","King","Wright","Lopez","Hill","Scott","Green","Adams","Baker","Gonzalez","Nelson","Carter","Mitchell","Perez","Roberts","Turner","Phillips","Campbell","Parker","Evans","Edwards","Collins","Stewart","Sanchez","Morris","Rogers","Reed","Cook","Morgan","Bell","Murphy","Bailey","Rivera","Cooper","Richardson","Cox","Howard","Ward","Torres","Peterson","Gray","Ramirez","James","Watson","Brooks","Kelly","Sanders","Price","Bennett","Wood","Barnes","Ross","Henderson","Coleman","Jenkins","Perry","Powell","Long","Patterson","Hughes","Flores","Washington","Butler","Simmons","Foster","Gonzales","Bryant","Alexander","Russell","Griffin","Diaz","Hayes","Myers","Ford","Hamilton","Graham","Sullivan","Wallace","Woods","Cole","West","Jordan","Owens","Reynolds","Fisher","Ellis","Harrison","Gibson","McDonald","Cruz","Marshall","Ortiz","Gomez","Murray","Freeman","Wells","Webb","Simpson","Stevens","Tucker","Porter","Hunter","Hicks","Crawford","Henry","Boyd","Mason","Morales","Kennedy","Warren","Dixon","Ramos","Reyes","Burns","Gordon","Shaw","Holmes","Rice","Robertson","Hunt","Black","Daniels","Palmer","Mills","Nichols","Grant","Knight","Ferguson","Rose","Stone","Hawkins","Dunn","Perkins","Hudson","Spencer","Gardner","Stephens","Payne","Pierce","Berry","Matthews","Arnold","Wagner","Willis","Ray","Watkins","Olson","Carroll","Duncan","Snyder","Hart","Cunningham","Bradley","Lane","Andrews","Ruiz","Harper","Fox","Riley","Armstrong","Carpenter","Weaver","Greene","Lawrence","Elliott","Chavez","Sims","Austin","Peters","Kelley","Franklin","Lawson","Fields","Gutierrez","Ryan","Schmidt","Carr","Vasquez","Castillo","Wheeler","Chapman","Oliver","Montgomery","Richards","Williamson","Johnston","Banks","Meyer","Bishop","McCoy","Howell","Alvarez","Morrison","Hansen","Fernandez","Garza","Harvey","Little","Burton","Stanley","Nguyen","George","Jacobs","Reid","Kim","Fuller","Lynch","Dean","Gilbert","Garrett","Romero","Welch","Larson","Frazier","Burke","Hanson","Day","Mendoza","Moreno","Bowman","Medina","Fowler","Brewer","Hoffman","Carlson","Silva","Pearson","Holland","Douglas","Fleming","Jensen","Vargas","Byrd","Davidson","Hopkins","May","Terry","Herrera","Wade","Soto","Walters","Curtis","Neal","Caldwell","Lowe","Jennings","Barnett","Graves","Jimenez","Horton","Shelton","Barrett","Obrien","Castro","Sutton","Gregory","McKinney","Lucas","Miles","Craig","Rodriquez","Chambers","Holt","Lambert","Fletcher","Watts","Bates","Hale","Rhodes","Pena","Beck","Newman","Haynes","McDaniel","Mendez","Bush","Vaughn","Parks","Dawson","Santiago","Norris","Hardy","Love","Steele","Curry","Powers","Schultz","Barker","Guzman","Page","Munoz","Ball","Keller","Chandler","Weber","Leonard","Walsh","Lyons","Ramsey","Wolfe","Schneider","Mullins","Benson","Sharp","Bowen","Daniel","Barber","Cummings","Hines","Baldwin","Griffith","Valdez","Hubbard","Salazar","Reeves","Warner","Stevenson","Burgess","Santos","Tate","Cross","Garner","Mann","Mack","Moss","Thornton","Dennis","McGee","Farmer","Delgado","Aguilar","Vega","Glover","Manning","Cohen","Harmon","Rodgers","Robbins","Newton","Todd","Blair","Higgins","Ingram","Reese","Cannon","Strickland","Townsend","Potter","Goodwin","Walton","Rowe","Hampton","Ortega","Patton","Swanson","Joseph","Francis","Goodman","Maldonado","Yates","Becker","Erickson","Hodges","Rios","Conner","Adkins","Webster","Norman","Malone","Hammond","Flowers","Cobb","Moody","Quinn","Blake","Maxwell","Pope","Floyd","Osborne","Paul","McCarthy","Guerrero","Lindsey","Estrada","Sandoval","Gibbs","Tyler","Gross","Fitzgerald","Stokes","Doyle","Sherman","Saunders","Wise","Colon","Gill","Alvarado","Greer","Padilla","Simon","Waters","Nunez","Ballard","Schwartz","McBride","Houston","Christensen","Klein","Pratt","Briggs","Parsons","McLaughlin","Zimmerman","French","Buchanan","Moran","Copeland","Roy","Pittman","Brady","McCormick","Holloway","Brock","Poole","Frank","Logan","Owen","Bass","Marsh","Drake","Wong","Jefferson","Park","Morton","Abbott","Sparks","Patrick","Norton","Huff","Clayton","Massey","Lloyd","Figueroa","Carson","Bowers","Roberson","Barton","Tran","Lamb","Harrington","Casey","Boone","Cortez","Clarke","Mathis","Singleton","Wilkins","Cain","Bryan","Underwood","Hogan","McKenzie","Collier","Luna","Phelps","McGuire","Allison","Bridges","Wilkerson","Nash","Summers","Atkins"],countries:[{name:"Afghanistan",abbreviation:"AF"},{name:"Albania",abbreviation:"AL"},{name:"Algeria",abbreviation:"DZ"},{name:"American Samoa",abbreviation:"AS"},{name:"Andorra",abbreviation:"AD"},{name:"Angola",abbreviation:"AO"},{name:"Anguilla",abbreviation:"AI"},{name:"Antarctica",abbreviation:"AQ"},{name:"Antigua and Barbuda",abbreviation:"AG"},{name:"Argentina",abbreviation:"AR"},{name:"Armenia",abbreviation:"AM"},{name:"Aruba",abbreviation:"AW"},{name:"Australia",abbreviation:"AU"},{name:"Austria",abbreviation:"AT"},{name:"Azerbaijan",abbreviation:"AZ"},{name:"Bahamas",abbreviation:"BS"},{name:"Bahrain",abbreviation:"BH"},{name:"Bangladesh",abbreviation:"BD"},{name:"Barbados",abbreviation:"BB"},{name:"Belarus",abbreviation:"BY"},{name:"Belgium",abbreviation:"BE"},{name:"Belize",abbreviation:"BZ"},{name:"Benin",abbreviation:"BJ"},{name:"Bermuda",abbreviation:"BM"},{name:"Bhutan",abbreviation:"BT"},{name:"Bolivia",abbreviation:"BO"},{name:"Bosnia and Herzegovina",abbreviation:"BA"},{name:"Botswana",abbreviation:"BW"},{name:"Bouvet Island",abbreviation:"BV"},{name:"Brazil",abbreviation:"BR"},{name:"British Antarctic Territory",abbreviation:"BQ"},{name:"British Indian Ocean Territory",abbreviation:"IO"},{name:"British Virgin Islands",abbreviation:"VG"},{name:"Brunei",abbreviation:"BN"},{name:"Bulgaria",abbreviation:"BG"},{name:"Burkina Faso",abbreviation:"BF"},{name:"Burundi",abbreviation:"BI"},{name:"Cambodia",abbreviation:"KH"},{name:"Cameroon",abbreviation:"CM"},{name:"Canada",abbreviation:"CA"},{name:"Canton and Enderbury Islands",abbreviation:"CT"},{name:"Cape Verde",abbreviation:"CV"},{name:"Cayman Islands",abbreviation:"KY"},{name:"Central African Republic",abbreviation:"CF"},{name:"Chad",abbreviation:"TD"},{name:"Chile",abbreviation:"CL"},{name:"China",abbreviation:"CN"},{name:"Christmas Island",abbreviation:"CX"},{name:"Cocos [Keeling] Islands",abbreviation:"CC"},{name:"Colombia",abbreviation:"CO"},{name:"Comoros",abbreviation:"KM"},{name:"Congo - Brazzaville",abbreviation:"CG"},{name:"Congo - Kinshasa",abbreviation:"CD"},{name:"Cook Islands",abbreviation:"CK"},{name:"Costa Rica",abbreviation:"CR"},{name:"Croatia",abbreviation:"HR"},{name:"Cuba",abbreviation:"CU"},{name:"Cyprus",abbreviation:"CY"},{name:"Czech Republic",abbreviation:"CZ"},{name:"Côte d’Ivoire",abbreviation:"CI"},{name:"Denmark",abbreviation:"DK"},{name:"Djibouti",abbreviation:"DJ"},{name:"Dominica",abbreviation:"DM"},{name:"Dominican Republic",abbreviation:"DO"},{name:"Dronning Maud Land",abbreviation:"NQ"},{name:"East Germany",abbreviation:"DD"},{name:"Ecuador",abbreviation:"EC"},{name:"Egypt",abbreviation:"EG"},{name:"El Salvador",abbreviation:"SV"},{name:"Equatorial Guinea",abbreviation:"GQ"},{name:"Eritrea",abbreviation:"ER"},{name:"Estonia",abbreviation:"EE"},{name:"Ethiopia",abbreviation:"ET"},{name:"Falkland Islands",abbreviation:"FK"},{name:"Faroe Islands",abbreviation:"FO"},{name:"Fiji",abbreviation:"FJ"},{name:"Finland",abbreviation:"FI"},{name:"France",abbreviation:"FR"},{name:"French Guiana",abbreviation:"GF"},{name:"French Polynesia",abbreviation:"PF"},{name:"French Southern Territories",abbreviation:"TF"},{name:"French Southern and Antarctic Territories",abbreviation:"FQ"},{name:"Gabon",abbreviation:"GA"},{name:"Gambia",abbreviation:"GM"},{name:"Georgia",abbreviation:"GE"},{name:"Germany",abbreviation:"DE"},{name:"Ghana",abbreviation:"GH"},{name:"Gibraltar",abbreviation:"GI"},{name:"Greece",abbreviation:"GR"},{name:"Greenland",abbreviation:"GL"},{name:"Grenada",abbreviation:"GD"},{name:"Guadeloupe",abbreviation:"GP"},{name:"Guam",abbreviation:"GU"},{name:"Guatemala",abbreviation:"GT"},{name:"Guernsey",abbreviation:"GG"},{name:"Guinea",abbreviation:"GN"},{name:"Guinea-Bissau",abbreviation:"GW"},{name:"Guyana",abbreviation:"GY"},{name:"Haiti",abbreviation:"HT"},{name:"Heard Island and McDonald Islands",abbreviation:"HM"},{name:"Honduras",abbreviation:"HN"},{name:"Hong Kong SAR China",abbreviation:"HK"},{name:"Hungary",abbreviation:"HU"},{name:"Iceland",abbreviation:"IS"},{name:"India",abbreviation:"IN"},{name:"Indonesia",abbreviation:"ID"},{name:"Iran",abbreviation:"IR"},{name:"Iraq",abbreviation:"IQ"},{name:"Ireland",abbreviation:"IE"},{name:"Isle of Man",abbreviation:"IM"},{name:"Israel",abbreviation:"IL"},{name:"Italy",abbreviation:"IT"},{name:"Jamaica",abbreviation:"JM"},{name:"Japan",abbreviation:"JP"},{name:"Jersey",abbreviation:"JE"},{name:"Johnston Island",abbreviation:"JT"},{name:"Jordan",abbreviation:"JO"},{name:"Kazakhstan",abbreviation:"KZ"},{name:"Kenya",abbreviation:"KE"},{name:"Kiribati",abbreviation:"KI"},{name:"Kuwait",abbreviation:"KW"},{name:"Kyrgyzstan",abbreviation:"KG"},{name:"Laos",abbreviation:"LA"},{name:"Latvia",abbreviation:"LV"},{name:"Lebanon",abbreviation:"LB"},{name:"Lesotho",abbreviation:"LS"},{name:"Liberia",abbreviation:"LR"},{name:"Libya",abbreviation:"LY"},{name:"Liechtenstein",abbreviation:"LI"},{name:"Lithuania",abbreviation:"LT"},{name:"Luxembourg",abbreviation:"LU"},{name:"Macau SAR China",abbreviation:"MO"},{name:"Macedonia",abbreviation:"MK"},{name:"Madagascar",abbreviation:"MG"},{name:"Malawi",abbreviation:"MW"},{name:"Malaysia",abbreviation:"MY"},{name:"Maldives",abbreviation:"MV"},{name:"Mali",abbreviation:"ML"},{name:"Malta",abbreviation:"MT"},{name:"Marshall Islands",abbreviation:"MH"},{name:"Martinique",abbreviation:"MQ"},{name:"Mauritania",abbreviation:"MR"},{name:"Mauritius",abbreviation:"MU"},{name:"Mayotte",abbreviation:"YT"},{name:"Metropolitan France",abbreviation:"FX"},{name:"Mexico",abbreviation:"MX"},{name:"Micronesia",abbreviation:"FM"},{name:"Midway Islands",abbreviation:"MI"},{name:"Moldova",abbreviation:"MD"},{name:"Monaco",abbreviation:"MC"},{name:"Mongolia",abbreviation:"MN"},{name:"Montenegro",abbreviation:"ME"},{name:"Montserrat",abbreviation:"MS"},{name:"Morocco",abbreviation:"MA"},{name:"Mozambique",abbreviation:"MZ"},{name:"Myanmar [Burma]",abbreviation:"MM"},{name:"Namibia",abbreviation:"NA"},{name:"Nauru",abbreviation:"NR"},{name:"Nepal",abbreviation:"NP"},{name:"Netherlands",abbreviation:"NL"},{name:"Netherlands Antilles",abbreviation:"AN"},{name:"Neutral Zone",abbreviation:"NT"},{name:"New Caledonia",abbreviation:"NC"},{name:"New Zealand",abbreviation:"NZ"},{name:"Nicaragua",abbreviation:"NI"},{name:"Niger",abbreviation:"NE"},{name:"Nigeria",abbreviation:"NG"},{name:"Niue",abbreviation:"NU"},{name:"Norfolk Island",abbreviation:"NF"},{name:"North Korea",abbreviation:"KP"},{name:"North Vietnam",abbreviation:"VD"},{name:"Northern Mariana Islands",abbreviation:"MP"},{name:"Norway",abbreviation:"NO"},{name:"Oman",abbreviation:"OM"},{name:"Pacific Islands Trust Territory",abbreviation:"PC"},{name:"Pakistan",abbreviation:"PK"},{name:"Palau",abbreviation:"PW"},{name:"Palestinian Territories",abbreviation:"PS"},{name:"Panama",abbreviation:"PA"},{name:"Panama Canal Zone",abbreviation:"PZ"},{name:"Papua New Guinea",abbreviation:"PG"},{name:"Paraguay",abbreviation:"PY"},{name:"People's Democratic Republic of Yemen",abbreviation:"YD"},{name:"Peru",abbreviation:"PE"},{name:"Philippines",abbreviation:"PH"},{name:"Pitcairn Islands",abbreviation:"PN"},{name:"Poland",abbreviation:"PL"},{name:"Portugal",abbreviation:"PT"},{name:"Puerto Rico",abbreviation:"PR"},{name:"Qatar",abbreviation:"QA"},{name:"Romania",abbreviation:"RO"},{name:"Russia",abbreviation:"RU"},{name:"Rwanda",abbreviation:"RW"},{name:"Réunion",abbreviation:"RE"},{name:"Saint Barthélemy",abbreviation:"BL"},{name:"Saint Helena",abbreviation:"SH"},{name:"Saint Kitts and Nevis",abbreviation:"KN"},{name:"Saint Lucia",abbreviation:"LC"},{name:"Saint Martin",abbreviation:"MF"},{name:"Saint Pierre and Miquelon",abbreviation:"PM"},{name:"Saint Vincent and the Grenadines",abbreviation:"VC"},{name:"Samoa",abbreviation:"WS"},{name:"San Marino",abbreviation:"SM"},{name:"Saudi Arabia",abbreviation:"SA"},{name:"Senegal",abbreviation:"SN"},{name:"Serbia",abbreviation:"RS"},{name:"Serbia and Montenegro",abbreviation:"CS"},{name:"Seychelles",abbreviation:"SC"},{name:"Sierra Leone",abbreviation:"SL"},{name:"Singapore",abbreviation:"SG"},{name:"Slovakia",abbreviation:"SK"},{name:"Slovenia",abbreviation:"SI"},{name:"Solomon Islands",abbreviation:"SB"},{name:"Somalia",abbreviation:"SO"},{name:"South Africa",abbreviation:"ZA"},{name:"South Georgia and the South Sandwich Islands",abbreviation:"GS"},{name:"South Korea",abbreviation:"KR"},{name:"Spain",abbreviation:"ES"},{name:"Sri Lanka",abbreviation:"LK"},{name:"Sudan",abbreviation:"SD"},{name:"Suriname",abbreviation:"SR"},{name:"Svalbard and Jan Mayen",abbreviation:"SJ"},{name:"Swaziland",abbreviation:"SZ"},{name:"Sweden",abbreviation:"SE"},{name:"Switzerland",abbreviation:"CH"},{name:"Syria",abbreviation:"SY"},{name:"São Tomé and Príncipe",abbreviation:"ST"},{name:"Taiwan",abbreviation:"TW"},{name:"Tajikistan",abbreviation:"TJ"},{name:"Tanzania",abbreviation:"TZ"},{name:"Thailand",abbreviation:"TH"},{name:"Timor-Leste",abbreviation:"TL"},{name:"Togo",abbreviation:"TG"},{name:"Tokelau",abbreviation:"TK"},{name:"Tonga",abbreviation:"TO"},{name:"Trinidad and Tobago",abbreviation:"TT"},{name:"Tunisia",abbreviation:"TN"},{name:"Turkey",abbreviation:"TR"},{name:"Turkmenistan",abbreviation:"TM"},{name:"Turks and Caicos Islands",abbreviation:"TC"},{name:"Tuvalu",abbreviation:"TV"},{name:"U.S. Minor Outlying Islands",abbreviation:"UM"},{name:"U.S. Miscellaneous Pacific Islands",abbreviation:"PU"},{name:"U.S. Virgin Islands",abbreviation:"VI"},{name:"Uganda",abbreviation:"UG"},{name:"Ukraine",abbreviation:"UA"},{name:"Union of Soviet Socialist Republics",abbreviation:"SU"},{name:"United Arab Emirates",abbreviation:"AE"},{name:"United Kingdom",abbreviation:"GB"},{name:"United States",abbreviation:"US"},{name:"Unknown or Invalid Region",abbreviation:"ZZ"},{name:"Uruguay",abbreviation:"UY"},{name:"Uzbekistan",abbreviation:"UZ"},{name:"Vanuatu",abbreviation:"VU"},{name:"Vatican City",abbreviation:"VA"},{name:"Venezuela",abbreviation:"VE"},{name:"Vietnam",abbreviation:"VN"},{name:"Wake Island",abbreviation:"WK"},{name:"Wallis and Futuna",abbreviation:"WF"},{name:"Western Sahara",abbreviation:"EH"},{name:"Yemen",abbreviation:"YE"},{name:"Zambia",abbreviation:"ZM"},{name:"Zimbabwe",abbreviation:"ZW"},{name:"Åland Islands",abbreviation:"AX"}],provinces:[{name:"Alberta",abbreviation:"AB"},{name:"British Columbia",abbreviation:"BC"},{name:"Manitoba",abbreviation:"MB"},{name:"New Brunswick",abbreviation:"NB"},{name:"Newfoundland and Labrador",abbreviation:"NL"},{name:"Nova Scotia",abbreviation:"NS"},{name:"Ontario",abbreviation:"ON"},{name:"Prince Edward Island",abbreviation:"PE"},{name:"Quebec",abbreviation:"QC"},{name:"Saskatchewan",abbreviation:"SK"},{name:"Northwest Territories",abbreviation:"NT"},{name:"Nunavut",abbreviation:"NU"},{name:"Yukon",abbreviation:"YT"}],us_states_and_dc:[{name:"Alabama",abbreviation:"AL"},{name:"Alaska",abbreviation:"AK"},{name:"Arizona",abbreviation:"AZ"},{name:"Arkansas",abbreviation:"AR"},{name:"California",abbreviation:"CA"},{name:"Colorado",abbreviation:"CO"},{name:"Connecticut",abbreviation:"CT"},{name:"Delaware",abbreviation:"DE"},{name:"District of Columbia",abbreviation:"DC"},{name:"Florida",abbreviation:"FL"},{name:"Georgia",abbreviation:"GA"},{name:"Hawaii",abbreviation:"HI"},{name:"Idaho",abbreviation:"ID"},{name:"Illinois",abbreviation:"IL"},{name:"Indiana",abbreviation:"IN"},{name:"Iowa",abbreviation:"IA"},{name:"Kansas",abbreviation:"KS"},{name:"Kentucky",abbreviation:"KY"},{name:"Louisiana",abbreviation:"LA"},{name:"Maine",abbreviation:"ME"},{name:"Maryland",abbreviation:"MD"},{name:"Massachusetts",abbreviation:"MA"},{name:"Michigan",abbreviation:"MI"},{name:"Minnesota",abbreviation:"MN"},{name:"Mississippi",abbreviation:"MS"},{name:"Missouri",abbreviation:"MO"},{name:"Montana",abbreviation:"MT"},{name:"Nebraska",abbreviation:"NE"},{name:"Nevada",abbreviation:"NV"},{name:"New Hampshire",abbreviation:"NH"},{name:"New Jersey",abbreviation:"NJ"},{name:"New Mexico",abbreviation:"NM"},{name:"New York",abbreviation:"NY"},{name:"North Carolina",abbreviation:"NC"},{name:"North Dakota",abbreviation:"ND"},{name:"Ohio",abbreviation:"OH"},{name:"Oklahoma",abbreviation:"OK"},{name:"Oregon",abbreviation:"OR"},{name:"Pennsylvania",abbreviation:"PA"},{name:"Rhode Island",abbreviation:"RI"},{name:"South Carolina",abbreviation:"SC"},{name:"South Dakota",abbreviation:"SD"},{name:"Tennessee",abbreviation:"TN"},{name:"Texas",abbreviation:"TX"},{name:"Utah",abbreviation:"UT"},{name:"Vermont",abbreviation:"VT"},{name:"Virginia",abbreviation:"VA"},{name:"Washington",abbreviation:"WA"},{name:"West Virginia",abbreviation:"WV"},{name:"Wisconsin",abbreviation:"WI"},{name:"Wyoming",abbreviation:"WY"}],territories:[{name:"American Samoa",abbreviation:"AS"},{name:"Federated States of Micronesia",abbreviation:"FM"},{name:"Guam",abbreviation:"GU"},{name:"Marshall Islands",abbreviation:"MH"},{name:"Northern Mariana Islands",abbreviation:"MP"},{name:"Puerto Rico",abbreviation:"PR"},{name:"Virgin Islands, U.S.",abbreviation:"VI"}],armed_forces:[{name:"Armed Forces Europe",abbreviation:"AE"},{name:"Armed Forces Pacific",abbreviation:"AP"},{name:"Armed Forces the Americas",abbreviation:"AA"}],street_suffixes:[{name:"Avenue",abbreviation:"Ave"},{name:"Boulevard",abbreviation:"Blvd"},{name:"Center",abbreviation:"Ctr"},{name:"Circle",abbreviation:"Cir"},{name:"Court",abbreviation:"Ct"},{name:"Drive",abbreviation:"Dr"},{name:"Extension",abbreviation:"Ext"},{name:"Glen",abbreviation:"Gln"},{name:"Grove",abbreviation:"Grv"},{name:"Heights",abbreviation:"Hts"},{name:"Highway",abbreviation:"Hwy"},{name:"Junction",abbreviation:"Jct"},{name:"Key",abbreviation:"Key"},{name:"Lane",abbreviation:"Ln"},{name:"Loop",abbreviation:"Loop"},{name:"Manor",abbreviation:"Mnr"},{name:"Mill",abbreviation:"Mill"},{name:"Park",abbreviation:"Park"},{name:"Parkway",abbreviation:"Pkwy"},{name:"Pass",abbreviation:"Pass"},{name:"Path",abbreviation:"Path"},{name:"Pike",abbreviation:"Pike"},{name:"Place",abbreviation:"Pl"},{name:"Plaza",abbreviation:"Plz"},{name:"Point",abbreviation:"Pt"},{name:"Ridge",abbreviation:"Rdg"},{name:"River",abbreviation:"Riv"},{name:"Road",abbreviation:"Rd"},{name:"Square",abbreviation:"Sq"},{name:"Street",abbreviation:"St"},{name:"Terrace",abbreviation:"Ter"},{name:"Trail",abbreviation:"Trl"},{name:"Turnpike",abbreviation:"Tpke"},{name:"View",abbreviation:"Vw"},{name:"Way",abbreviation:"Way"}],months:[{name:"January",short_name:"Jan",numeric:"01",days:31},{name:"February",short_name:"Feb",numeric:"02",days:28},{name:"March",short_name:"Mar",numeric:"03",days:31},{name:"April",short_name:"Apr",numeric:"04",days:30},{name:"May",short_name:"May",numeric:"05",days:31},{name:"June",short_name:"Jun",numeric:"06",days:30},{name:"July",short_name:"Jul",numeric:"07",days:31},{name:"August",short_name:"Aug",numeric:"08",days:31},{name:"September",short_name:"Sep",numeric:"09",days:30},{name:"October",short_name:"Oct",numeric:"10",days:31},{name:"November",short_name:"Nov",numeric:"11",days:30},{name:"December",short_name:"Dec",numeric:"12",days:31}],cc_types:[{name:"American Express",short_name:"amex",prefix:"34",length:15},{name:"Bankcard",short_name:"bankcard",prefix:"5610",length:16},{name:"China UnionPay",short_name:"chinaunion",prefix:"62",length:16},{name:"Diners Club Carte Blanche",short_name:"dccarte",prefix:"300",length:14},{name:"Diners Club enRoute",short_name:"dcenroute",prefix:"2014",length:15},{name:"Diners Club International",short_name:"dcintl",prefix:"36",length:14},{name:"Diners Club United States & Canada",short_name:"dcusc",prefix:"54",length:16},{name:"Discover Card",short_name:"discover",prefix:"6011",length:16},{name:"InstaPayment",short_name:"instapay",prefix:"637",length:16},{name:"JCB",short_name:"jcb",prefix:"3528",length:16},{name:"Laser",short_name:"laser",prefix:"6304",length:16},{name:"Maestro",short_name:"maestro",prefix:"5018",length:16},{name:"Mastercard",short_name:"mc",prefix:"51",length:16},{name:"Solo",short_name:"solo",prefix:"6334",length:16},{name:"Switch",short_name:"switch",prefix:"4903",length:16},{name:"Visa",short_name:"visa",prefix:"4",length:16},{name:"Visa Electron",short_name:"electron",prefix:"4026",length:16}],currency_types:[{code:"AED",name:"United Arab Emirates Dirham"},{code:"AFN",name:"Afghanistan Afghani"},{code:"ALL",name:"Albania Lek"},{code:"AMD",name:"Armenia Dram"},{code:"ANG",name:"Netherlands Antilles Guilder"},{code:"AOA",name:"Angola Kwanza"},{code:"ARS",name:"Argentina Peso"},{code:"AUD",name:"Australia Dollar"},{code:"AWG",name:"Aruba Guilder"},{code:"AZN",name:"Azerbaijan New Manat"},{code:"BAM",name:"Bosnia and Herzegovina Convertible Marka"},{code:"BBD",name:"Barbados Dollar"},{code:"BDT",name:"Bangladesh Taka"},{code:"BGN",name:"Bulgaria Lev"},{code:"BHD",name:"Bahrain Dinar"},{code:"BIF",name:"Burundi Franc"},{code:"BMD",name:"Bermuda Dollar"},{code:"BND",name:"Brunei Darussalam Dollar"},{code:"BOB",name:"Bolivia Boliviano"},{code:"BRL",name:"Brazil Real"},{code:"BSD",name:"Bahamas Dollar"},{code:"BTN",name:"Bhutan Ngultrum"},{code:"BWP",name:"Botswana Pula"},{code:"BYR",name:"Belarus Ruble"},{code:"BZD",name:"Belize Dollar"},{code:"CAD",name:"Canada Dollar"},{code:"CDF",name:"Congo/Kinshasa Franc"},{code:"CHF",name:"Switzerland Franc"},{code:"CLP",name:"Chile Peso"},{code:"CNY",name:"China Yuan Renminbi"},{code:"COP",name:"Colombia Peso"},{code:"CRC",name:"Costa Rica Colon"},{code:"CUC",name:"Cuba Convertible Peso"},{code:"CUP",name:"Cuba Peso"},{code:"CVE",name:"Cape Verde Escudo"},{code:"CZK",name:"Czech Republic Koruna"},{code:"DJF",name:"Djibouti Franc"},{code:"DKK",name:"Denmark Krone"},{code:"DOP",name:"Dominican Republic Peso"},{code:"DZD",name:"Algeria Dinar"},{code:"EGP",name:"Egypt Pound"},{code:"ERN",name:"Eritrea Nakfa"},{code:"ETB",name:"Ethiopia Birr"},{code:"EUR",name:"Euro Member Countries"},{code:"FJD",name:"Fiji Dollar"},{code:"FKP",name:"Falkland Islands (Malvinas) Pound"},{code:"GBP",name:"United Kingdom Pound"},{code:"GEL",name:"Georgia Lari"},{code:"GGP",name:"Guernsey Pound"},{code:"GHS",name:"Ghana Cedi"},{code:"GIP",name:"Gibraltar Pound"},{code:"GMD",name:"Gambia Dalasi"},{code:"GNF",name:"Guinea Franc"},{code:"GTQ",name:"Guatemala Quetzal"},{code:"GYD",name:"Guyana Dollar"},{code:"HKD",name:"Hong Kong Dollar"},{code:"HNL",name:"Honduras Lempira"},{code:"HRK",name:"Croatia Kuna"},{code:"HTG",name:"Haiti Gourde"},{code:"HUF",name:"Hungary Forint"},{code:"IDR",name:"Indonesia Rupiah"},{code:"ILS",name:"Israel Shekel"},{code:"IMP",name:"Isle of Man Pound"},{code:"INR",name:"India Rupee"},{code:"IQD",name:"Iraq Dinar"},{code:"IRR",name:"Iran Rial"},{code:"ISK",name:"Iceland Krona"},{code:"JEP",name:"Jersey Pound"},{code:"JMD",name:"Jamaica Dollar"},{code:"JOD",name:"Jordan Dinar"},{code:"JPY",name:"Japan Yen"},{code:"KES",name:"Kenya Shilling"},{code:"KGS",name:"Kyrgyzstan Som"},{code:"KHR",name:"Cambodia Riel"},{code:"KMF",name:"Comoros Franc"},{code:"KPW",name:"Korea (North) Won"},{code:"KRW",name:"Korea (South) Won"},{code:"KWD",name:"Kuwait Dinar"},{code:"KYD",name:"Cayman Islands Dollar"},{code:"KZT",name:"Kazakhstan Tenge"},{code:"LAK",name:"Laos Kip"},{code:"LBP",name:"Lebanon Pound"},{code:"LKR",name:"Sri Lanka Rupee"},{code:"LRD",name:"Liberia Dollar"},{code:"LSL",name:"Lesotho Loti"},{code:"LTL",name:"Lithuania Litas"},{code:"LYD",name:"Libya Dinar"},{code:"MAD",name:"Morocco Dirham"},{code:"MDL",name:"Moldova Leu"},{code:"MGA",name:"Madagascar Ariary"},{code:"MKD",name:"Macedonia Denar"},{code:"MMK",name:"Myanmar (Burma) Kyat"},{code:"MNT",name:"Mongolia Tughrik"},{code:"MOP",name:"Macau Pataca"},{code:"MRO",name:"Mauritania Ouguiya"},{code:"MUR",name:"Mauritius Rupee"},{code:"MVR",name:"Maldives (Maldive Islands) Rufiyaa"},{code:"MWK",name:"Malawi Kwacha"},{code:"MXN",name:"Mexico Peso"},{code:"MYR",name:"Malaysia Ringgit"},{code:"MZN",name:"Mozambique Metical"},{code:"NAD",name:"Namibia Dollar"},{code:"NGN",name:"Nigeria Naira"},{code:"NIO",name:"Nicaragua Cordoba"},{code:"NOK",name:"Norway Krone"},{code:"NPR",name:"Nepal Rupee"},{code:"NZD",name:"New Zealand Dollar"},{code:"OMR",name:"Oman Rial"},{code:"PAB",name:"Panama Balboa"},{code:"PEN",name:"Peru Nuevo Sol"},{code:"PGK",name:"Papua New Guinea Kina"},{code:"PHP",name:"Philippines Peso"},{code:"PKR",name:"Pakistan Rupee"},{code:"PLN",name:"Poland Zloty"},{code:"PYG",name:"Paraguay Guarani"},{code:"QAR",name:"Qatar Riyal"},{code:"RON",name:"Romania New Leu"},{code:"RSD",name:"Serbia Dinar"},{code:"RUB",name:"Russia Ruble"},{code:"RWF",name:"Rwanda Franc"},{code:"SAR",name:"Saudi Arabia Riyal"},{code:"SBD",name:"Solomon Islands Dollar"},{code:"SCR",name:"Seychelles Rupee"},{code:"SDG",name:"Sudan Pound"},{code:"SEK",name:"Sweden Krona"},{code:"SGD",name:"Singapore Dollar"},{code:"SHP",name:"Saint Helena Pound"},{code:"SLL",name:"Sierra Leone Leone"},{code:"SOS",name:"Somalia Shilling"},{code:"SPL",name:"Seborga Luigino"},{code:"SRD",name:"Suriname Dollar"},{code:"STD",name:"São Tomé and Príncipe Dobra"},{code:"SVC",name:"El Salvador Colon"},{code:"SYP",name:"Syria Pound"},{code:"SZL",name:"Swaziland Lilangeni"},{code:"THB",name:"Thailand Baht"},{code:"TJS",name:"Tajikistan Somoni"},{code:"TMT",name:"Turkmenistan Manat"},{code:"TND",name:"Tunisia Dinar"},{code:"TOP",name:"Tonga Pa'anga"},{code:"TRY",name:"Turkey Lira"},{code:"TTD",name:"Trinidad and Tobago Dollar"},{code:"TVD",name:"Tuvalu Dollar"},{code:"TWD",name:"Taiwan New Dollar"},{code:"TZS",name:"Tanzania Shilling"},{code:"UAH",name:"Ukraine Hryvnia"},{code:"UGX",name:"Uganda Shilling"},{code:"USD",name:"United States Dollar"},{code:"UYU",name:"Uruguay Peso"},{code:"UZS",name:"Uzbekistan Som"},{code:"VEF",name:"Venezuela Bolivar"},{code:"VND",name:"Viet Nam Dong"},{code:"VUV",name:"Vanuatu Vatu"},{code:"WST",name:"Samoa Tala"},{code:"XAF",name:"Communauté Financière Africaine (BEAC) CFA Franc BEAC"},{code:"XCD",name:"East Caribbean Dollar"},{code:"XDR",name:"International Monetary Fund (IMF) Special Drawing Rights"},{code:"XOF",name:"Communauté Financière Africaine (BCEAO) Franc"},{code:"XPF",name:"Comptoirs Français du Pacifique (CFP) Franc"},{code:"YER",name:"Yemen Rial"},{code:"ZAR",name:"South Africa Rand"},{code:"ZMW",name:"Zambia Kwacha"},{code:"ZWD",name:"Zimbabwe Dollar"}]},q=Object.prototype.hasOwnProperty,r=Object.keys||function(a){var b=[]; -for(var c in a)q.call(a,c)&&b.push(c);return b};a.prototype.get=function(a){return g(p[a])},a.prototype.mac_address=function(a){a=b(a),a.separator||(a.separator=a.networkVersion?".":":");var c="ABCDEF1234567890",d="";return d=a.networkVersion?this.n(this.string,3,{pool:c,length:4}).join(a.separator):this.n(this.string,6,{pool:c,length:2}).join(a.separator)},a.prototype.normal=function(a){a=b(a,{mean:0,dev:1});var c,d,e,f,g=a.mean,h=a.dev;do d=2*this.random()-1,e=2*this.random()-1,c=d*d+e*e;while(c>=1);return f=d*Math.sqrt(-2*Math.log(c)/c),h*f+g},a.prototype.radio=function(a){a=b(a,{side:"?"});var c="";switch(a.side.toLowerCase()){case"east":case"e":c="W";break;case"west":case"w":c="K";break;default:c=this.character({pool:"KW"})}return c+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})},a.prototype.set=function(a,b){"string"==typeof a?p[a]=b:p=g(a,p)},a.prototype.tv=function(a){return this.radio(a)},a.prototype.cnpj=function(){var a=this.n(this.natural,8,{max:9}),b=2+6*a[7]+7*a[6]+8*a[5]+9*a[4]+2*a[3]+3*a[2]+4*a[1]+5*a[0];b=11-b%11,b>=10&&(b=0);var c=2*b+3+7*a[7]+8*a[6]+9*a[5]+2*a[4]+3*a[3]+4*a[2]+5*a[1]+6*a[0];return c=11-c%11,c>=10&&(c=0),""+a[0]+a[1]+"."+a[2]+a[3]+a[4]+"."+a[5]+a[6]+a[7]+"/0001-"+b+c},a.prototype.mersenne_twister=function(a){return new s(a)};var s=function(a){void 0===a&&(a=(new Date).getTime()),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,this.init_genrand(a)};s.prototype.init_genrand=function(a){for(this.mt[0]=a>>>0,this.mti=1;this.mti>>30,this.mt[this.mti]=(1812433253*((4294901760&a)>>>16)<<16)+1812433253*(65535&a)+this.mti,this.mt[this.mti]>>>=0},s.prototype.init_by_array=function(a,b){var c,d,e=1,f=0;for(this.init_genrand(19650218),c=this.N>b?this.N:b;c;c--)d=this.mt[e-1]^this.mt[e-1]>>>30,this.mt[e]=(this.mt[e]^(1664525*((4294901760&d)>>>16)<<16)+1664525*(65535&d))+a[f]+f,this.mt[e]>>>=0,e++,f++,e>=this.N&&(this.mt[0]=this.mt[this.N-1],e=1),f>=b&&(f=0);for(c=this.N-1;c;c--)d=this.mt[e-1]^this.mt[e-1]>>>30,this.mt[e]=(this.mt[e]^(1566083941*((4294901760&d)>>>16)<<16)+1566083941*(65535&d))-e,this.mt[e]>>>=0,e++,e>=this.N&&(this.mt[0]=this.mt[this.N-1],e=1);this.mt[0]=2147483648},s.prototype.genrand_int32=function(){var a,b=new Array(0,this.MATRIX_A);if(this.mti>=this.N){var c;for(this.mti===this.N+1&&this.init_genrand(5489),c=0;c>>1^b[1&a];for(;c>>1^b[1&a];a=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^a>>>1^b[1&a],this.mti=0}return a=this.mt[this.mti++],a^=a>>>11,a^=a<<7&2636928640,a^=a<<15&4022730752,a^=a>>>18,a>>>0},s.prototype.genrand_int31=function(){return this.genrand_int32()>>>1},s.prototype.genrand_real1=function(){return this.genrand_int32()*(1/4294967295)},s.prototype.random=function(){return this.genrand_int32()*(1/4294967296)},s.prototype.genrand_real3=function(){return(this.genrand_int32()+.5)*(1/4294967296)},s.prototype.genrand_res53=function(){var a=this.genrand_int32()>>>5,b=this.genrand_int32()>>>6;return(67108864*a+b)*(1/9007199254740992)},"undefined"!=typeof exports&&("undefined"!=typeof module&&module.exports&&(exports=module.exports=a),exports.Chance=a),"function"==typeof define&&define.amd&&define([],function(){return a}),"undefined"!=typeof importScripts&&(chance=new a),"object"==typeof window&&"object"==typeof window.document&&(window.Chance=a,window.chance=new a)}(); diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/filesize.min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/filesize.min.js deleted file mode 100644 index 4543deb4..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/filesize.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - 2015 Jason Mulligan - @version 3.1.2 - */ -"use strict";!function(a){var b=/b$/,c={bits:["B","kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","kB","MB","GB","TB","PB","EB","ZB","YB"]},d=function(a){var d=void 0===arguments[1]?{}:arguments[1],e=[],f=!1,g=0,h=void 0,i=void 0,j=void 0,k=void 0,l=void 0,m=void 0,n=void 0,o=void 0,p=void 0,q=void 0,r=void 0;if(isNaN(a))throw new Error("Invalid arguments");return j=d.bits===!0,p=d.unix===!0,i=void 0!==d.base?d.base:2,o=void 0!==d.round?d.round:p?1:2,q=void 0!==d.spacer?d.spacer:p?"":" ",r=void 0!==d.suffixes?d.suffixes:{},n=void 0!==d.output?d.output:"string",h=void 0!==d.exponent?d.exponent:-1,m=Number(a),l=0>m,k=i>2?1e3:1024,l&&(m=-m),0===m?(e[0]=0,e[1]=p?"":"B"):((-1===h||isNaN(h))&&(h=Math.floor(Math.log(m)/Math.log(k))),h>8&&(g=1e3*g*(h-8),h=8),g=2===i?m/Math.pow(2,10*h):m/Math.pow(1e3,h),j&&(g=8*g,g>k&&(g/=k,h++)),e[0]=Number(g.toFixed(h>0?o:0)),e[1]=c[j?"bits":"bytes"][h],!f&&p&&(j&&b.test(e[1])&&(e[1]=e[1].toLowerCase()),e[1]=e[1].charAt(0),"B"===e[1]?(e[0]=Math.floor(e[0]),e[1]=""):j||"k"!==e[1]||(e[1]="K"))),l&&(e[0]=-e[0]),e[1]=r[e[1]]||e[1],"array"===n?e:"exponent"===n?h:"object"===n?{value:e[0],suffix:e[1]}:e.join(q)};"undefined"!=typeof exports?module.exports=d:"function"==typeof define?define(function(){return d}):a.filesize=d}("undefined"!=typeof global?global:window); -//# sourceMappingURL=filesize.min.js.map \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/filesize.min.js.map b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/filesize.min.js.map deleted file mode 100644 index 096b9630..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/filesize.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"filesize.min.js","sources":["filesize.js"],"names":["global","bit","si","bits","bytes","filesize","arg","descriptor","undefined","arguments","result","skip","val","e","base","ceil","neg","num","output","round","unix","spacer","suffixes","isNaN","Error","exponent","Number","Math","floor","log","pow","toFixed","test","toLowerCase","charAt","value","suffix","join","exports","module","define","window"],"mappings":";;;;AAAA,cAYA,SAAWA,GACV,GAAIC,GAAM,KACNC,GACHC,MAAO,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACtDC,OAAQ,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAWpDC,EAAW,SAAUC,GACxB,GAAIC,GAA8BC,SAAjBC,UAAU,MAAwBA,UAAU,GAEzDC,KACAC,GAAO,EACPC,EAAM,EACNC,EAAIL,OACJM,EAAON,OACPL,EAAOK,OACPO,EAAOP,OACPQ,EAAMR,OACNS,EAAMT,OACNU,EAASV,OACTW,EAAQX,OACRY,EAAOZ,OACPa,EAASb,OACTc,EAAWd,MAEf,IAAIe,MAAMjB,GACT,KAAM,IAAIkB,OAAM,oBAoFjB,OAjFArB,GAAOI,EAAWJ,QAAS,EAC3BiB,EAAOb,EAAWa,QAAS,EAC3BN,EAA2BN,SAApBD,EAAWO,KAAqBP,EAAWO,KAAO,EACzDK,EAA6BX,SAArBD,EAAWY,MAAsBZ,EAAWY,MAAQC,EAAO,EAAI,EACvEC,EAA+Bb,SAAtBD,EAAWc,OAAuBd,EAAWc,OAASD,EAAO,GAAK,IAC3EE,EAAmCd,SAAxBD,EAAWe,SAAyBf,EAAWe,YAC1DJ,EAA+BV,SAAtBD,EAAWW,OAAuBX,EAAWW,OAAS,SAC/DL,EAA4BL,SAAxBD,EAAWkB,SAAyBlB,EAAWkB,SAAW,GAC9DR,EAAMS,OAAOpB,GACbU,EAAY,EAANC,EACNF,EAAOD,EAAO,EAAI,IAAO,KAGrBE,IACHC,GAAOA,GAII,IAARA,GACHP,EAAO,GAAK,EAGXA,EAAO,GADJU,EACS,GAEA,OAIH,KAANP,GAAYU,MAAMV,MACrBA,EAAIc,KAAKC,MAAMD,KAAKE,IAAIZ,GAAOU,KAAKE,IAAId,KAIrCF,EAAI,IACPD,EAAa,IAAPA,GAAeC,EAAI,GACzBA,EAAI,GAIJD,EADY,IAATE,EACGG,EAAMU,KAAKG,IAAI,EAAO,GAAJjB,GAElBI,EAAMU,KAAKG,IAAI,IAAMjB,GAGxBV,IACHS,EAAY,EAANA,EAEFA,EAAMG,IACTH,GAAYG,EACZF,MAIFH,EAAO,GAAKgB,OAAOd,EAAImB,QAAQlB,EAAI,EAAIM,EAAQ,IAC/CT,EAAO,GAAKR,EAAGC,EAAO,OAAS,SAASU,IAEnCF,GAAQS,IACRjB,GAAQF,EAAI+B,KAAKtB,EAAO,MAC3BA,EAAO,GAAKA,EAAO,GAAGuB,eAGvBvB,EAAO,GAAKA,EAAO,GAAGwB,OAAO,GAEX,MAAdxB,EAAO,IACVA,EAAO,GAAKiB,KAAKC,MAAMlB,EAAO,IAC9BA,EAAO,GAAK,IACDP,GAAsB,MAAdO,EAAO,KAC1BA,EAAO,GAAK,OAMXM,IACHN,EAAO,IAAMA,EAAO,IAIrBA,EAAO,GAAKY,EAASZ,EAAO,KAAOA,EAAO,GAG3B,UAAXQ,EACIR,EAGO,aAAXQ,EACIL,EAGO,WAAXK,GACMiB,MAAOzB,EAAO,GAAI0B,OAAQ1B,EAAO,IAGpCA,EAAO2B,KAAKhB,GAIG,oBAAZiB,SACVC,OAAOD,QAAUjC,EACW,kBAAXmC,QACjBA,OAAO,WACN,MAAOnC,KAGRL,EAAOK,SAAWA,GAEC,mBAAXL,QAAyBA,OAASyC","sourcesContent":["\"use strict\";\n\n/**\n * filesize\n *\n * @author Jason Mulligan \n * @copyright 2015 Jason Mulligan\n * @license BSD-3 \n * @link http://filesizejs.com\n * @module filesize\n * @version 3.1.2\n */\n(function (global) {\n\tvar bit = /b$/;\n\tvar si = {\n\t\tbits: [\"B\", \"kb\", \"Mb\", \"Gb\", \"Tb\", \"Pb\", \"Eb\", \"Zb\", \"Yb\"],\n\t\tbytes: [\"B\", \"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"]\n\t};\n\n\t/**\n * filesize\n *\n * @method filesize\n * @param {Mixed} arg String, Int or Float to transform\n * @param {Object} descriptor [Optional] Flags\n * @return {String} Readable file size String\n */\n\tvar filesize = function (arg) {\n\t\tvar descriptor = arguments[1] === undefined ? {} : arguments[1];\n\n\t\tvar result = [];\n\t\tvar skip = false;\n\t\tvar val = 0;\n\t\tvar e = undefined,\n\t\t base = undefined,\n\t\t bits = undefined,\n\t\t ceil = undefined,\n\t\t neg = undefined,\n\t\t num = undefined,\n\t\t output = undefined,\n\t\t round = undefined,\n\t\t unix = undefined,\n\t\t spacer = undefined,\n\t\t suffixes = undefined;\n\n\t\tif (isNaN(arg)) {\n\t\t\tthrow new Error(\"Invalid arguments\");\n\t\t}\n\n\t\tbits = descriptor.bits === true;\n\t\tunix = descriptor.unix === true;\n\t\tbase = descriptor.base !== undefined ? descriptor.base : 2;\n\t\tround = descriptor.round !== undefined ? descriptor.round : unix ? 1 : 2;\n\t\tspacer = descriptor.spacer !== undefined ? descriptor.spacer : unix ? \"\" : \" \";\n\t\tsuffixes = descriptor.suffixes !== undefined ? descriptor.suffixes : {};\n\t\toutput = descriptor.output !== undefined ? descriptor.output : \"string\";\n\t\te = descriptor.exponent !== undefined ? descriptor.exponent : -1;\n\t\tnum = Number(arg);\n\t\tneg = num < 0;\n\t\tceil = base > 2 ? 1000 : 1024;\n\n\t\t// Flipping a negative number to determine the size\n\t\tif (neg) {\n\t\t\tnum = -num;\n\t\t}\n\n\t\t// Zero is now a special case because bytes divide by 1\n\t\tif (num === 0) {\n\t\t\tresult[0] = 0;\n\n\t\t\tif (unix) {\n\t\t\t\tresult[1] = \"\";\n\t\t\t} else {\n\t\t\t\tresult[1] = \"B\";\n\t\t\t}\n\t\t} else {\n\t\t\t// Determining the exponent\n\t\t\tif (e === -1 || isNaN(e)) {\n\t\t\t\te = Math.floor(Math.log(num) / Math.log(ceil));\n\t\t\t}\n\n\t\t\t// Exceeding supported length, time to reduce & multiply\n\t\t\tif (e > 8) {\n\t\t\t\tval = val * (1000 * (e - 8));\n\t\t\t\te = 8;\n\t\t\t}\n\n\t\t\tif (base === 2) {\n\t\t\t\tval = num / Math.pow(2, e * 10);\n\t\t\t} else {\n\t\t\t\tval = num / Math.pow(1000, e);\n\t\t\t}\n\n\t\t\tif (bits) {\n\t\t\t\tval = val * 8;\n\n\t\t\t\tif (val > ceil) {\n\t\t\t\t\tval = val / ceil;\n\t\t\t\t\te++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresult[0] = Number(val.toFixed(e > 0 ? round : 0));\n\t\t\tresult[1] = si[bits ? \"bits\" : \"bytes\"][e];\n\n\t\t\tif (!skip && unix) {\n\t\t\t\tif (bits && bit.test(result[1])) {\n\t\t\t\t\tresult[1] = result[1].toLowerCase();\n\t\t\t\t}\n\n\t\t\t\tresult[1] = result[1].charAt(0);\n\n\t\t\t\tif (result[1] === \"B\") {\n\t\t\t\t\tresult[0] = Math.floor(result[0]);\n\t\t\t\t\tresult[1] = \"\";\n\t\t\t\t} else if (!bits && result[1] === \"k\") {\n\t\t\t\t\tresult[1] = \"K\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Decorating a 'diff'\n\t\tif (neg) {\n\t\t\tresult[0] = -result[0];\n\t\t}\n\n\t\t// Applying custom suffix\n\t\tresult[1] = suffixes[result[1]] || result[1];\n\n\t\t// Returning Array, Object, or String (default)\n\t\tif (output === \"array\") {\n\t\t\treturn result;\n\t\t}\n\n\t\tif (output === \"exponent\") {\n\t\t\treturn e;\n\t\t}\n\n\t\tif (output === \"object\") {\n\t\t\treturn { value: result[0], suffix: result[1] };\n\t\t}\n\n\t\treturn result.join(spacer);\n\t};\n\n\t// CommonJS, AMD, script tag\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = filesize;\n\t} else if (typeof define === \"function\") {\n\t\tdefine(function () {\n\t\t\treturn filesize;\n\t\t});\n\t} else {\n\t\tglobal.filesize = filesize;\n\t}\n})(typeof global !== \"undefined\" ? global : window);"]} \ No newline at end of file diff --git a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/jsphylosvg-min.js b/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/jsphylosvg-min.js deleted file mode 100644 index f13b5049..00000000 --- a/lvl-project/lvl-bundle/src/main/ui2/js/vendor/provided/jsphylosvg-min.js +++ /dev/null @@ -1,75 +0,0 @@ -Smits={}; -Smits.Common={nodeIdIncrement:0,activeNode:0,roundFloat:function(a,c){for(var b=0,f=1;b0?a+=b.getCountAllChildren():a++}return this._countAllChildren=a},getCountImmediateChildren:function(){if(this._countImmediateChildren!==!1)return this._countImmediateChildren;var a=0,c;for(c in this.children)a+=this.children[c].length;return this._countImmediateChildren= -a},getMidbranchPosition:function(a){if(this._midBranchPosition!==!1)return this._midBranchPosition;for(var c=[0,0],b=0;b0?b==0&&a?(c[0]=f.getMidbranchPosition(!0),c[1]+=f.getCountAllChildren()-1):b==0?(c[0]=f.getMidbranchPosition(),c[1]+=f.getCountAllChildren()):c[1]+=b==this.children.length-1?f.getMidbranchPosition():f.getCountAllChildren():b==0&&a?c[0]=0:(b==0&&(c[0]=1),c[1]+=1)}return this._midBranchPosition=c[1]>= -c[0]?(c[1]+c[0])/2:c[0]}}; -Smits.PhyloCanvas.NewickParse=function(){var a,c,b,f=0,k=0,l,p=function(a){for(var e=new Smits.PhyloCanvas.Node;c!==")"&&c!==",";)if(c===":"){if(d(),e.len=Smits.Common.roundFloat(m(),4),e.len==0)e.len=1.0E-4}else if(c==="'"||c==='"'){e.type="label";for(var g=e,j=c,b="";c!==j;)b+=c,d();g.name=b}else e.type="label",e.name=m();e.level=a.level+1;return e},g=function(a){var e=new Smits.PhyloCanvas.Node;if(a)e.level=a.level+1;for(;c!==")";)d(),c==="("?e.children.push(g(e)):e.children.push(p(e));d();if(c!== -":"&&c!==")"&&c!==","&&c!==";")e.type="label",e.name=m();if(c===":"){d();e.len=Smits.Common.roundFloat(m(),4);if(e.len==0)e.len=1.0E-4;e.type="stem"}return e},m=function(){for(var a="";c!==":"&&c!==")"&&c!==","&&c!==";";)a+=c,d();return a},d=function(){c=a.charAt(b);b+=1;return c},j=function(d){if(d.children&&d.children.length)for(var c=0;cf)f=a.level;if(a.newickLen> -k)k=a.newickLen;a.children.length>0&&j(a,d)}return d};return function(c){this.getRoot=function(){return l};this.getLevels=function(){return f};this.getNewickLen=function(){return k};this.getValidate=function(){};k=f=0;a=c;b=0;d();l=g();l=j(l)}}();Smits.PhyloCanvas.NewickParse.prototype={}; -Smits.PhyloCanvas.PhyloxmlParse=function(){var a=0,c=0,b,f,k=function(a,c){var d=new Smits.PhyloCanvas.Node;if(c)d.level=c.level+1;if(a.clade&&a.clade.length)for(var j=0;j1&&(d.len||(f="Error. Please include Branch Lengths - we only draw rooted phylogenetic trees."));return d},l=function(b){if(b.children&&b.children.length)for(var f=0;fa)a=d.level;if(d.newickLen>c)c=d.newickLen;d.children.length>0&&l(d,b)}return b},p=function(a,c){for(var d in a)d!="_children"&&d!="Text"&&(d=="rectangular"||d=="circular"? -p(a[d][0],d):(Smits.PhyloCanvas.Render.Parameters[d]||(Smits.PhyloCanvas.Render.Parameters[d]={}),Smits.PhyloCanvas.Render.Parameters.set(d,a[d][0].Text,c)))};return function(g){this.getRoot=function(){return b};this.getLevels=function(){return a};this.getNewickLen=function(){return c};this.getValidate=function(){return f};g.phylogeny&&g.phylogeny[0]&&g.phylogeny[0].clade&&(b=k(g.phylogeny[0].clade[0]));if(g.phylogeny&&g.phylogeny[0]&&g.phylogeny[0].render&&g.phylogeny[0].render[0]){if((g=g.phylogeny[0].render[0])&& -g.styles){var m=g.styles[0],d;for(d in m)if(d!="_children"&&d!="Text")if(m[d][0].type&&m[d][0].type=="radialGradient"&&Raphael.svg)m[d][0].name=d,Smits.PhyloCanvas.Render.Style[d]=m[d][0],Smits.PhyloCanvas.Render.Style.jsphylosvgGradientList||(Smits.PhyloCanvas.Render.Style.jsphylosvgGradientList=[]),Smits.PhyloCanvas.Render.Style.jsphylosvgGradientList.push(d);else for(var j in Smits.PhyloCanvas.Render.Style[d]||(Smits.PhyloCanvas.Render.Style[d]={}),m[d][0])j!="_attributes"&&j!="_children"&&j!= -"type"&&(Smits.PhyloCanvas.Render.Style[d][j.replace("_","-")]=m[d][0][j])}g&&g.parameters&&p(g.parameters[0]);if(g&&g.charts)for(d in g=g.charts[0],g)if(d!="_children"&&d!="Text")for(j in g[d])if(g[d][j].type=="binary")g[d][j].chart=d,Smits.PhyloCanvas.Render.Parameters.binaryCharts.push(g[d][j]);else if(g[d][j].type=="integratedBinary")g[d][j].chart=d,Smits.PhyloCanvas.Render.Parameters.integratedBinaryCharts.push(g[d][j]);else if(g[d][j].type=="bar")g[d][j].chart=d,Smits.PhyloCanvas.Render.Parameters.barCharts.push(g[d][j])}b= -l(b)}}();Smits.PhyloCanvas.PhyloxmlParse.prototype={}; -Smits.PhyloCanvas.NexmlParse=function(){var a=0,c=0,b,f,k,l,p=function(a,d,c){var i=new Smits.PhyloCanvas.Node;if(c)i.level=c.level+1;for(c=0;c0&&!i.len)i.len=1;if(d&&(i.len=Smits.Common.roundFloat(d,4),i.len==0))i.len=1.0E-4;if(a.label&&(i.type="label",i.name=a.label,a.style))i.style=a.style;return i},g=function(b){if(b.children&&b.children.length)for(var d=0;d< -b.children.length;d++){var j=b.children[d];j.newickLen=Math.round((j.len+b.newickLen)*1E4)/1E4;if(j.level>a)a=j.level;if(j.newickLen>c)c=j.newickLen;j.children.length>0&&g(j,b)}return b};return function(m,d){this.getRoot=function(){return b};this.getLevels=function(){return a};this.getNewickLen=function(){return c};this.getValidate=function(){return f};d.tree&&m.trees[0]&&m.trees[0].tree[d.tree-1]?(k=m.trees[0].tree[d.tree-1].edge,l=m.trees[0].tree[d.tree-1].node):(k=m.trees[0].tree[0].edge,l=m.trees[0].tree[0].node); -for(var j=0;j1&&(e.len||(f="Error. Please include Branch Lengths - we only draw rooted phylogenetic trees."));return e},g=function(d){if(d.children&&d.children.length)for(var b=0;ba)a=i.level;if(i.newickLen>c)c=i.newickLen;i.children.length>0&&g(i,d)}return d},m=function(a,c){for(var b in a)b!="_children"&&b!="Text"&&(b=="rectangular"||b=="circular"?m(a[b],b):(Smits.PhyloCanvas.Render.Parameters[b]|| -(Smits.PhyloCanvas.Render.Parameters[b]={}),Smits.PhyloCanvas.Render.Parameters.set(b,a[b],c)))};return function(d){this.getRoot=function(){return b};this.getLevels=function(){return a};this.getNewickLen=function(){return c};this.getValidate=function(){return f};var j=d.nexmlJson.nexml,i=j.render;if(i&&i.styles){var e=i.styles,h;for(h in e)if(h!="_children"&&h!="Text")if(e[h]["@attributes"].type&&e[h]["@attributes"].type=="radialGradient"&&Raphael.svg)e[h].name=h,e[h].type=e[h]["@attributes"].type, -Smits.PhyloCanvas.Render.Style[h]=e[h],Smits.PhyloCanvas.Render.Style.jsphylosvgGradientList||(Smits.PhyloCanvas.Render.Style.jsphylosvgGradientList=[]),Smits.PhyloCanvas.Render.Style.jsphylosvgGradientList.push(h);else for(var n in Smits.PhyloCanvas.Render.Style[h]||(Smits.PhyloCanvas.Render.Style[h]={}),e[h]["@attributes"])n!="_attributes"&&n!="_children"&&n!="type"&&(Smits.PhyloCanvas.Render.Style[h][n.replace("_","-")]=e[h]["@attributes"][n])}i&&i.parameters&&m(i.parameters);if(i&&i.charts)for(h in i= -i.charts,i)i[h]["@attributes"].chart=h,i[h]["@attributes"].type=="binary"?Smits.PhyloCanvas.Render.Parameters.binaryCharts.push(i[h]["@attributes"]):i[h]["@attributes"].type=="integratedBinary"?Smits.PhyloCanvas.Render.Parameters.integratedBinaryCharts.push(i[h]["@attributes"]):i[h]["@attributes"].type=="bar"&&Smits.PhyloCanvas.Render.Parameters.barCharts.push(i[h]["@attributes"]);if(d.tree&&j.trees[0]&&j.trees[0].tree[d.tree-1])k=j.trees[0].tree[d.tree-1].edge,l=j.trees[0].tree[d.tree-1].node;else{for(h= -0;h0){var i=[],h,f,o,n;b.len&&(h=e,f=e=Smits.Common.roundFloat(e+k*b.len,4),n=o=d+b.getMidbranchPosition(m)*l,a.draw(new Smits.PhyloCanvas.Render.Line(h,f,o,n)));if(b.name){h={};h=Smits.PhyloCanvas.Render.Style.getStyle("bootstrap","text");if(b.uri)h.href= -b.uri;if(b.description)h.title=b.description;var g=b.level==0?d+b.getMidbranchPosition(m)*l:n;a.draw(new Smits.PhyloCanvas.Render.Text((f||e)+5,g,b.name,{attr:h}))}if(b.children&&b.children.length)for(h=0;h90&&a<270){a+=180;var d="end"}else d="start";return[a,d]}function b(d,b,c,e){var i=a(d,b),h=a(d,c),j=[],f=0,b=Math.abs(k(c-b))>180?1:-1;e&&e.invertSecant&&(b*=-1,f=1);(!e||!e.noMove)&&j.push("M");j.push(i[0],i[1],"A",d,d,0,b<1?0:1,f,h[0],h[1]);return j}function f(d,b,c,e){var i=[],b=a(b,d),d=a(c, -d);(!e||!e.noMove)&&i.push("M");i.push(b[0],b[1],"L",d[0],d[1]);return i}function k(a){for(;a>360||a<0;)a>360?a-=360:a<0&&(a+=360);return a}function l(a,d,c,e){!d&&a.length>1&&(e=a[3],c=a[2],d=a[1],a=a[0]);return g("M",b(a,c,e,{noMove:1,invertSecant:0}),"L",b(d,e,c,{noMove:1,invertSecant:1}),"Z")}function p(d,h){d.len&&(B?A=C||1:d.children.length==0&&(A=Smits.Common.roundFloat(A+u,4)));if(d.children.length>0){var j=[],o,n,k;o=h;n=h+=Smits.Common.roundFloat(q*d.len,4);if(d.children&&d.children.length)for(var l= -0;l0&&j.push(m)}l=Smits.Common.roundFloat(Math.min.apply(null,j),4);j=Smits.Common.roundFloat(Math.max.apply(null,j),4);d.level!=0&&i.draw(new Smits.PhyloCanvas.Render.Path(g("M",a(h+0.01,l),"L",b(h,l,j,{noMove:!0}),"L",a(h+0.01,j))));d.len&&(k=Smits.Common.roundFloat(l+(j-l)/2,4),i.draw(new Smits.PhyloCanvas.Render.Path(f(k,o,n))))}else if(d.y=A,s.push(d),o=h,n=Smits.Common.roundFloat(h+q*d.len),k=A,i.draw(new Smits.PhyloCanvas.Render.Path(f(k,o, -n))),i.draw(new Smits.PhyloCanvas.Render.Path(f(k,n,v),{attr:Smits.PhyloCanvas.Render.Style.connectedDash})),d.name){o=a(v+e.bufferInnerLabels,k);l=c(k);j=l[0];l=l[1];m={};d.style&&Smits.Common.apply(m,Smits.PhyloCanvas.Render.Style.getStyle(d.style,"text"));m["text-anchor"]=l;if(d.uri)m.href=d.uri;if(d.description)m.title=d.description;j=i.draw(new Smits.PhyloCanvas.Render.Text(o[0],o[1],d.name,{attr:m,rotate:[j,o[0],o[1]]}));d.bgStyle&&t.push([d.bgStyle,k]);o=a(n,k);Smits.PhyloCanvas.Render.Parameters.mouseRollOver&& -Smits.Common.addRaphEventHandler(j[0],"mouseover",Smits.PhyloCanvas.Render.Parameters.mouseRollOver,{svg:i,node:d,x:o[0],y:o[1],textEl:j[0]});Smits.PhyloCanvas.Render.Parameters.mouseRollOut&&Smits.Common.addRaphEventHandler(j[0],"mouseout",Smits.PhyloCanvas.Render.Parameters.mouseRollOut,{svg:i,node:d,x:o[0],y:o[1],textEl:j[0]});Smits.PhyloCanvas.Render.Parameters.onClickAction&&Smits.Common.addRaphEventHandler(j[0],"click",Smits.PhyloCanvas.Render.Parameters.onClickAction,{svg:i,node:d,x:o[0],y:o[1], -textEl:j[0]});x=Math.max(j[1],x)}B&&(B=!1);return k}function g(a){for(var d=a,b=1;b0){if(Smits.PhyloCanvas.Render.Style.jsphylosvgGradientList)for(var d=0;d90&&t<270&&(r+=180);n["text-anchor"]||(n["text-anchor"]="middle");i.draw(new Smits.PhyloCanvas.Render.Text(q[0],q[1],p.label,{attr:n,rotate:r}))[0].toBack()}p.borderStyle&&(n=Smits.PhyloCanvas.Render.Style.getStyle(p.borderStyle,"textSecantBg"),i.draw(new Smits.PhyloCanvas.Render.Path(l([v, -n.fullsize?g[1]:g[0],g[2],g[3]]),{attr:n}))[0].toBack());i.draw(new Smits.PhyloCanvas.Render.Path(l(g),{attr:p}))[0].toBack();g=0}else{if(!g)g=q.y;q.chart[b]=="none"&&(g=0)}n=!1}return e?d:d+j+f}function j(d,a,b){for(var c=[],e=b&&b.bufferInner?parseFloat(b.bufferInner):Smits.PhyloCanvas.Render.Parameters.barChartBufferInner,j=b&&b.height?parseFloat(b.height):Smits.PhyloCanvas.Render.Parameters.barChartHeight?Smits.PhyloCanvas.Render.Parameters.barChartHeight:0,b=b&&b.width?parseFloat(b.width)<1? -u*parseFloat(b.width):parseFloat(b.width):0|(Smits.PhyloCanvas.Render.Parameters.barChartWidth<1?u*Smits.PhyloCanvas.Render.Parameters.barChartWidth:Smits.PhyloCanvas.Render.Parameters.barChartWidth),h=0,f=0;f0&&i.draw(new Smits.PhyloCanvas.Render.Path(l(d+e,d+e+h*c.chart[a],c.y-b/2,c.y+b/2),{attr:Smits.PhyloCanvas.Render.Style.getStyle(c.chart[a],"barChart")}));return d+ -e+j}var i,e=Smits.PhyloCanvas.Render.Parameters.Circular,h,n,o,q,u,z,B=!0,A=0,E,r,v,s=[],t=[],C,w,x=0,D,F=Math.PI/180;return function(a,b,c){this.getCanvasSize=function(){return[h,n]};this.getRoot=function(){return b.getRoot()};if(b.getValidate())a.draw({type:"text",x:0,y:a.canvasSize[1]/3,text:b.getValidate()});else{i=a;var a=b.getRoot(),f=b.getNewickLen();h=i.canvasSize[0];n=i.canvasSize[1];E=h/2;r=n/2;o=Math.min.apply(null,[h,n]);c=e.bufferRadius>1?e.bufferRadius:Smits.Common.roundFloat(o*e.bufferRadius, -4);C=e.bufferAngle;z=e.innerCircleRadius;D=e.initStartAngle;v=Math.round((o-c-z)/2);q=(v-z)/f;u=Smits.Common.roundFloat((360-C)/a.getCountAllChildren(),4);p(a,z);w=v+x+e.bufferOuterLabels;if(Smits.PhyloCanvas.Render.Parameters.integratedBinaryCharts.length){var c=Smits.PhyloCanvas.Render.Parameters.integratedBinaryCharts,g;for(g in c)w=d(w-(c[g].thickness?c[g].thickness:Smits.PhyloCanvas.Render.Parameters.binaryChartThickness)-(c[g].bufferInner?c[g].bufferInner:Smits.PhyloCanvas.Render.Parameters.binaryChartBufferInner), -c[g].chart,c[g])}w=m();if(Smits.PhyloCanvas.Render.Parameters.binaryCharts.length)for(g in c=Smits.PhyloCanvas.Render.Parameters.binaryCharts,c)w=d(w,c[g].chart,c[g]);if(Smits.PhyloCanvas.Render.Parameters.barCharts.length)for(g in c=Smits.PhyloCanvas.Render.Parameters.barCharts,c)w=j(w,c[g].chart,c[g])}}}();Smits.PhyloCanvas.Render.CircularPhylogram.prototype={}; -var XMLObjectifier=function(){var a=function(a){var b="";a&&typeof a==="string"&&(b=a);return/^((-)?([0-9]*)((\.{0,1})([0-9]+))?$)/.test(b)};return{xmlToJSON:function(c){try{if(!c)return null;var b={typeOf:"JSXBObject"},f=c.nodeType==9?c.documentElement:c;b.RootName=f.nodeName||"";if(c.nodeType==3||c.nodeType==4)return c.nodeValue;var k=function(a){return a.replace(/^\s+|\s+$/gm,"")},l=function(a,b){if(b.attributes.length>0){var c=b.attributes.length-1,e;a._attributes=[];do e=String(String(b.attributes[c].name).replace(/-/g, -"_")),a._attributes.push(e),a[e]=k(b.attributes[c].value);while(c--)}};(function(){return{activate:function(){var a=[];a.getNodesByAttribute=function(b,c){if(a&&a.length>0){var e=[],h,f=a.length-1;try{do h=a[f],h[b]===c&&e.push(h);while(f--);e.reverse();return e}catch(o){}return null}};a.getNodeByAttribute=function(b,c){if(a&&a.length>0){var e,h=a.length-1;try{do if(e=a[h],e[b]===c)return e;while(h--)}catch(f){}return null}};a.getNodesByValue=function(b){if(a&&a.length>0){var c=[],e,h=a.length-1; -try{do e=a[h],e.Text&&e.Text===b&&c.push(e);while(h--);return c}catch(f){}return null}};a.contains=function(b,c){if(a&&a.length>0){var e=a.length-1;try{do if(a[e][b]===c)return!0;while(e--)}catch(h){}return!1}};a.indexOf=function(b,c){var e=-1;if(a&&a.length>0){var h=a.length-1;try{do a[h][b]===c&&(e=h);while(h--)}catch(f){return-1}return e}};a.SortByAttribute=function(b,c){if(a&&a.length>0){var e=function(a,b){var d=a[b];return d=bam.validation.isNumeric(d)?parseFloat(d):d};a.sort(function(a,d){var f, -g;f=e(a,b);g=e(d,b);f=f0){var c=function(a){a=a.Text;return a=bam.validation.isNumeric(a)?parseFloat(a):a};a.sort(function(a,d){var f,g;f=c(a);g=c(d);f=f0){var e=function(a,b){var d=a[b][0].Text;return d=bam.validation.isNumeric(d)?parseFloat(d):d};a.sort(function(a,d){var f,g;f=e(a,b);g= -e(d,b);f=f0){var d,c=this.length-1;try{do if(d=this[c],d[a]==b)return d;while(c--)}catch(f){}return!1}};b.contains=function(a,b){if(this.length>0){var d=this.length-1;try{do if(this[d][a]==b)return!0;while(d--)}catch(c){}return!1}};b.indexOf=function(a,b){var d=-1;if(this.length>0){var c=this.length-1;try{do this[c][a]==b&&(d=c);while(c--)}catch(f){return-1}return d}}; -b.SortByAttribute=function(b,d){if(this.length){var c=function(b,d){var c=b[d];return c=a(c)?parseFloat(c):c};this.sort(function(a,f){var g=0,k,l;k=c(a,b);l=c(f,b);k0&&l(a,b);a.Text="";if(b.hasChildNodes()){var o=b.childNodes.length-1,q=0;do switch(e=b.childNodes[q],e.nodeType){case 1:a._children=[];c=e.localName?e.localName:e.baseName;c=String(c).replace(/-/g,"_");m!=c&&a._children.push(c);a[c]||(a[c]=[]); -f={};a[c].push(f);e.attributes.length>0&&l(f,e);a[c].contains||p(a[c]);m=c;e.hasChildNodes()&&g(f,e);break;case 3:a.Text+=k(e.nodeValue);break;case 4:a.Text+=e.text?k(e.text):k(e.nodeValue)}while(q++ eu.eubrazilcc.lvl lvl-project - 0.1.1 + 0.2.0 .. diff --git a/lvl-project/lvl-core/src/main/java/eu/eubrazilcc/lvl/core/BaseFile.java b/lvl-project/lvl-core/src/main/java/eu/eubrazilcc/lvl/core/BaseFile.java index 64d98e0c..6e92eb04 100644 --- a/lvl-project/lvl-core/src/main/java/eu/eubrazilcc/lvl/core/BaseFile.java +++ b/lvl-project/lvl-core/src/main/java/eu/eubrazilcc/lvl/core/BaseFile.java @@ -31,10 +31,6 @@ import java.util.Objects; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonSubTypes.Type; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; /** * Base class from which to extend to create objects stored in the file-system and referred in the application's database. @@ -44,8 +40,6 @@ * @see GridFS Reference: The files Collection */ @JsonIgnoreProperties({ "outfile" }) -@JsonTypeInfo(property = "type_", use = Id.NAME) -@JsonSubTypes({ @Type(Dataset.class) }) public class BaseFile { private String id; diff --git a/lvl-project/lvl-service/.settings/org.eclipse.wst.common.component b/lvl-project/lvl-service/.settings/org.eclipse.wst.common.component index a2d74821..52cfcc18 100644 --- a/lvl-project/lvl-service/.settings/org.eclipse.wst.common.component +++ b/lvl-project/lvl-service/.settings/org.eclipse.wst.common.component @@ -4,10 +4,10 @@ - + uses - + uses diff --git a/lvl-project/lvl-service/pom.xml b/lvl-project/lvl-service/pom.xml index 81933e7b..481a4e77 100644 --- a/lvl-project/lvl-service/pom.xml +++ b/lvl-project/lvl-service/pom.xml @@ -27,7 +27,7 @@ that you distribute must include a readable copy of the "NOTICE" text file. eu.eubrazilcc.lvl lvl-project - 0.1.1 + 0.2.0 .. diff --git a/lvl-project/lvl-service/src/main/java/eu/eubrazilcc/lvl/service/rest/DatasetResource.java b/lvl-project/lvl-service/src/main/java/eu/eubrazilcc/lvl/service/rest/DatasetResource.java index 86b93201..ff234835 100644 --- a/lvl-project/lvl-service/src/main/java/eu/eubrazilcc/lvl/service/rest/DatasetResource.java +++ b/lvl-project/lvl-service/src/main/java/eu/eubrazilcc/lvl/service/rest/DatasetResource.java @@ -137,7 +137,7 @@ public Response createDataset(final @PathParam("namespace") String namespace, fi final String namespace2 = parseParam(namespace); String filename2 = null; if (dataset == null || isBlank(filename2 = trimToNull(dataset.getFilename()))) { - throw new WebApplicationException("Missing required parameters", BAD_REQUEST); + throw new WebApplicationException("Missing required parameter: filename", BAD_REQUEST); } final String ownerid = OAuth2SecurityManager.login(request, null, headers, RESOURCE_NAME) .requiresPermissions("datasets:files:" + ns2permission(namespace2) + ":*:create") diff --git a/lvl-project/lvl-service/src/main/java/eu/eubrazilcc/lvl/service/rest/QueryParamHelper.java b/lvl-project/lvl-service/src/main/java/eu/eubrazilcc/lvl/service/rest/QueryParamHelper.java index 365def3b..1c5cc8c4 100644 --- a/lvl-project/lvl-service/src/main/java/eu/eubrazilcc/lvl/service/rest/QueryParamHelper.java +++ b/lvl-project/lvl-service/src/main/java/eu/eubrazilcc/lvl/service/rest/QueryParamHelper.java @@ -40,7 +40,7 @@ public final class QueryParamHelper { public static final String parseParam(final String param) { String param2 = null; if (isBlank(param) || isBlank(param2 = trimToNull(urlDecodeUtf8(param)))) { - throw new WebApplicationException("Missing required parameters", BAD_REQUEST); + throw new WebApplicationException("Missing required parameter: " + param, BAD_REQUEST); } return param2; } diff --git a/lvl-project/lvl-storage/pom.xml b/lvl-project/lvl-storage/pom.xml index db4b9a81..6e4e7116 100644 --- a/lvl-project/lvl-storage/pom.xml +++ b/lvl-project/lvl-storage/pom.xml @@ -27,7 +27,7 @@ that you distribute must include a readable copy of the "NOTICE" text file. eu.eubrazilcc.lvl lvl-project - 0.1.1 + 0.2.0 .. diff --git a/lvl-project/lvl-test/pom.xml b/lvl-project/lvl-test/pom.xml index b7eaa1a0..a39570aa 100644 --- a/lvl-project/lvl-test/pom.xml +++ b/lvl-project/lvl-test/pom.xml @@ -27,7 +27,7 @@ that you distribute must include a readable copy of the "NOTICE" text file. eu.eubrazilcc.lvl lvl-project - 0.1.1 + 0.2.0 .. diff --git a/lvl-project/pom.xml b/lvl-project/pom.xml index 7dc115e1..54988ba9 100644 --- a/lvl-project/pom.xml +++ b/lvl-project/pom.xml @@ -26,7 +26,7 @@ that you distribute must include a readable copy of the "NOTICE" text file. eu.eubrazilcc.lvl leishmaniasis-virtual-lab - 0.1.1 + 0.2.0 .. @@ -90,7 +90,7 @@ that you distribute must include a readable copy of the "NOTICE" text file. 2.6 2.2 0.1.12 - 3.0.2 + 3.0.3 https://fastdl.mongodb.org/ diff --git a/pom.xml b/pom.xml index 2d239649..88761178 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ that you distribute must include a readable copy of the "NOTICE" text file. eu.eubrazilcc.lvl leishmaniasis-virtual-lab - 0.1.1 + 0.2.0 pom leishmaniasis-virtual-laboratory - BOM