From 37bd4a6116ba8606024f9b2207b263201b6d45eb Mon Sep 17 00:00:00 2001 From: Jakub Date: Wed, 25 Mar 2020 13:46:12 -0400 Subject: [PATCH 1/5] working --- README.md | 30 +- external/css.js | 16 - external/dhis2.de.js | 29 - external/dhis2.util.js | 239 ----- external/formLogic.js | 941 ------------------ external/jquery-ui.min.js | 13 - external/jquery.min.js | 7 - external/removeElements.js | 5 - external/tabs.js | 5 - external/trigger.js | 17 - help/approvals.png | Bin 25626 -> 0 bytes package-lock.json | 4 +- package.json | 6 +- public/formJs/fontawesome-webfont.woff | Bin 83760 -> 0 bytes public/formJs/jqueryAndDhis.js | 302 ------ public/formJs/tabsCssRemoveTrigger.js | 45 - public/index.html | 2 +- public/manifest.webapp | 6 +- src/index.tsx | 11 +- .../action/components/action.component.tsx | 134 --- .../components/actionButtons.component.tsx | 39 - .../form/datasetSelect.component.tsx | 24 - .../mechanism/form/formContent.component.tsx | 38 - .../mechanism/form/formRender.component.tsx | 65 -- .../mechanism/form/formSelect.component.tsx | 51 - .../mechanism/mechanismInfo.component.tsx | 34 - .../mechanism/mechanismTabs.component.tsx | 66 -- .../mechanism/showMore.component.tsx | 29 - .../action/components/section.component.tsx | 10 - .../action/components/step/step.component.tsx | 76 -- .../components/workflowOverview.component.tsx | 17 - src/modules/action/css/action.component.css | 3 - src/modules/action/models/idName.tsx | 1 - .../action/services/formContent.service.tsx | 24 - .../action/services/mechanism.service.tsx | 135 --- src/modules/action/services/user.service.tsx | 27 - .../components/filterSelect.component.tsx | 79 -- .../list/components/list.component.tsx | 151 --- .../list/components/listAction.component.tsx | 71 -- .../results/resultsTable.component.tsx | 63 -- .../components/results/resultsTableIcons.tsx | 38 - .../results/resultsTabs.component.tsx | 57 -- src/modules/list/models/filters.model.tsx | 5 - .../list/services/mechanisms.service.tsx | 74 -- .../list/services/orgUnits.service.tsx | 54 - .../main/components/main.component.tsx | 7 + .../main/components/message.component.tsx | 45 - .../main/components/router.component.tsx | 61 -- .../themeWrapper.component.css | 0 .../components/themeWrapper.component.tsx | 9 +- .../shared/components/loading.component.tsx | 17 - .../components/networkError.component.tsx | 0 .../components/responsiveText.component.css | 7 - .../components/responsiveText.component.tsx | 9 - .../shared/models/idNameList.model.tsx | 1 - src/modules/shared/models/mechanism.model.tsx | 39 - src/modules/shared/services/api.service.tsx | 34 - .../shared/services/dataApi.service.tsx | 20 + .../shared/services/makeId.service.tsx | 3 - .../shared/services/status.service.tsx | 13 - .../shared/services/workflowService.tsx | 23 - .../services/workflowsPeriods.service.tsx | 76 -- 62 files changed, 49 insertions(+), 3358 deletions(-) delete mode 100644 external/css.js delete mode 100644 external/dhis2.de.js delete mode 100644 external/dhis2.util.js delete mode 100644 external/formLogic.js delete mode 100644 external/jquery-ui.min.js delete mode 100644 external/jquery.min.js delete mode 100644 external/removeElements.js delete mode 100644 external/tabs.js delete mode 100644 external/trigger.js delete mode 100644 help/approvals.png delete mode 100644 public/formJs/fontawesome-webfont.woff delete mode 100644 public/formJs/jqueryAndDhis.js delete mode 100644 public/formJs/tabsCssRemoveTrigger.js delete mode 100644 src/modules/action/components/action.component.tsx delete mode 100644 src/modules/action/components/actionButtons.component.tsx delete mode 100644 src/modules/action/components/mechanism/form/datasetSelect.component.tsx delete mode 100644 src/modules/action/components/mechanism/form/formContent.component.tsx delete mode 100644 src/modules/action/components/mechanism/form/formRender.component.tsx delete mode 100644 src/modules/action/components/mechanism/form/formSelect.component.tsx delete mode 100644 src/modules/action/components/mechanism/mechanismInfo.component.tsx delete mode 100644 src/modules/action/components/mechanism/mechanismTabs.component.tsx delete mode 100644 src/modules/action/components/mechanism/showMore.component.tsx delete mode 100644 src/modules/action/components/section.component.tsx delete mode 100644 src/modules/action/components/step/step.component.tsx delete mode 100644 src/modules/action/components/workflowOverview.component.tsx delete mode 100644 src/modules/action/css/action.component.css delete mode 100644 src/modules/action/models/idName.tsx delete mode 100644 src/modules/action/services/formContent.service.tsx delete mode 100644 src/modules/action/services/mechanism.service.tsx delete mode 100644 src/modules/action/services/user.service.tsx delete mode 100644 src/modules/list/components/filterSelect.component.tsx delete mode 100644 src/modules/list/components/list.component.tsx delete mode 100644 src/modules/list/components/listAction.component.tsx delete mode 100644 src/modules/list/components/results/resultsTable.component.tsx delete mode 100644 src/modules/list/components/results/resultsTableIcons.tsx delete mode 100644 src/modules/list/components/results/resultsTabs.component.tsx delete mode 100644 src/modules/list/models/filters.model.tsx delete mode 100644 src/modules/list/services/mechanisms.service.tsx delete mode 100644 src/modules/list/services/orgUnits.service.tsx create mode 100644 src/modules/main/components/main.component.tsx delete mode 100644 src/modules/main/components/message.component.tsx delete mode 100644 src/modules/main/components/router.component.tsx rename src/modules/main/{css => components}/themeWrapper.component.css (100%) delete mode 100644 src/modules/shared/components/loading.component.tsx rename src/modules/{main => shared}/components/networkError.component.tsx (100%) delete mode 100644 src/modules/shared/components/responsiveText.component.css delete mode 100644 src/modules/shared/components/responsiveText.component.tsx delete mode 100644 src/modules/shared/models/idNameList.model.tsx delete mode 100644 src/modules/shared/models/mechanism.model.tsx delete mode 100644 src/modules/shared/services/api.service.tsx create mode 100644 src/modules/shared/services/dataApi.service.tsx delete mode 100644 src/modules/shared/services/makeId.service.tsx delete mode 100644 src/modules/shared/services/status.service.tsx delete mode 100644 src/modules/shared/services/workflowService.tsx delete mode 100644 src/modules/shared/services/workflowsPeriods.service.tsx diff --git a/README.md b/README.md index 25271a7..1791fbb 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,10 @@ -# Datim Approvals v2 +# Data Deduplication 2 [![Dependencies](https://david-dm.org/pepfar-datim/datim-approvals.svg)](https://david-dm.org/pepfar-datim/datim-approvals) **Repo Owner:** Ben Guaraldi [@benguaraldi](https://github.com/benguaraldi) **Developer:** Jakub Flaska [@jakub-bao](https://github.com/jakub-bao) -This project is a DHIS2 custom app dedicated to mechanism approval process. - -![Datim Approvals](https://github.com/pepfar-datim/datim-approvals/raw/master/help/approvals.png) - ## Technology Stack 1. REACT - all front-end rendering @@ -30,27 +26,3 @@ This project is a DHIS2 custom app dedicated to mechanism approval process. 2. `public` static files which will be part of `*.zip` build artifact 3. `cypress` JavaScript test specs. Testing is done using `Cypress` 4. `external` JS files used for rendering forms (datasets). These files are kept for reference only. They've been merged into two large files residing in `public/formJs` - -## Setting up a testing suite -The Data Approvals app is covered by end-to-end tests implemented using `Cypress` test framework. -Before each deployment to production the developer should run these tests and make sure all of them are passing. - -However, in order to make the tests pass. It might be necessary to set up the data in the server environment first. -The tests depend on the following. - -1. Testing user accounts -2. Datastore settings -3. A few mechanisms -4. Collected data via data entry app - -There are the following scripts inside `cypress/scripts` directory which should set the target environment to a state where all tests will pass: - -1. `users/persistUsers.py` -2. `datastore/fixDataStore.py` -3. `mechanism/submitMechanisms.py` -4. `dataEntry/data.sql` - -Surrounding files are there to get data into source files (such as users.json or getData.sql) and should be kept in this repository. Although not needed to setup the tests. - -Make sure to use Jakub's `dhis_env` script or manually set environment variables to fill in credentials for the server. See `cypres/scripts/api.py` for more details. - diff --git a/external/css.js b/external/css.js deleted file mode 100644 index b0500f7..0000000 --- a/external/css.js +++ /dev/null @@ -1,16 +0,0 @@ -(function deployCss (){ - - let css = ` - /*! - * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ - @font-face{font-family:'FontAwesome'; - src:url('formJs/fontawesome-webfont.woff?v=4.2.0') format('woff'); - font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\\f000"}.fa-music:before{content:"\\f001"}.fa-search:before{content:"\\f002"}.fa-envelope-o:before{content:"\\f003"}.fa-heart:before{content:"\\f004"}.fa-star:before{content:"\\f005"}.fa-star-o:before{content:"\\f006"}.fa-user:before{content:"\\f007"}.fa-film:before{content:"\\f008"}.fa-th-large:before{content:"\\f009"}.fa-th:before{content:"\\f00a"}.fa-th-list:before{content:"\\f00b"}.fa-check:before{content:"\\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\\f00d"}.fa-search-plus:before{content:"\\f00e"}.fa-search-minus:before{content:"\\f010"}.fa-power-off:before{content:"\\f011"}.fa-signal:before{content:"\\f012"}.fa-gear:before,.fa-cog:before{content:"\\f013"}.fa-trash-o:before{content:"\\f014"}.fa-home:before{content:"\\f015"}.fa-file-o:before{content:"\\f016"}.fa-clock-o:before{content:"\\f017"}.fa-road:before{content:"\\f018"}.fa-download:before{content:"\\f019"}.fa-arrow-circle-o-down:before{content:"\\f01a"}.fa-arrow-circle-o-up:before{content:"\\f01b"}.fa-inbox:before{content:"\\f01c"}.fa-play-circle-o:before{content:"\\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\\f01e"}.fa-refresh:before{content:"\\f021"}.fa-list-alt:before{content:"\\f022"}.fa-lock:before{content:"\\f023"}.fa-flag:before{content:"\\f024"}.fa-headphones:before{content:"\\f025"}.fa-volume-off:before{content:"\\f026"}.fa-volume-down:before{content:"\\f027"}.fa-volume-up:before{content:"\\f028"}.fa-qrcode:before{content:"\\f029"}.fa-barcode:before{content:"\\f02a"}.fa-tag:before{content:"\\f02b"}.fa-tags:before{content:"\\f02c"}.fa-book:before{content:"\\f02d"}.fa-bookmark:before{content:"\\f02e"}.fa-print:before{content:"\\f02f"}.fa-camera:before{content:"\\f030"}.fa-font:before{content:"\\f031"}.fa-bold:before{content:"\\f032"}.fa-italic:before{content:"\\f033"}.fa-text-height:before{content:"\\f034"}.fa-text-width:before{content:"\\f035"}.fa-align-left:before{content:"\\f036"}.fa-align-center:before{content:"\\f037"}.fa-align-right:before{content:"\\f038"}.fa-align-justify:before{content:"\\f039"}.fa-list:before{content:"\\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\\f03b"}.fa-indent:before{content:"\\f03c"}.fa-video-camera:before{content:"\\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\\f03e"}.fa-pencil:before{content:"\\f040"}.fa-map-marker:before{content:"\\f041"}.fa-adjust:before{content:"\\f042"}.fa-tint:before{content:"\\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\\f044"}.fa-share-square-o:before{content:"\\f045"}.fa-check-square-o:before{content:"\\f046"}.fa-arrows:before{content:"\\f047"}.fa-step-backward:before{content:"\\f048"}.fa-fast-backward:before{content:"\\f049"}.fa-backward:before{content:"\\f04a"}.fa-play:before{content:"\\f04b"}.fa-pause:before{content:"\\f04c"}.fa-stop:before{content:"\\f04d"}.fa-forward:before{content:"\\f04e"}.fa-fast-forward:before{content:"\\f050"}.fa-step-forward:before{content:"\\f051"}.fa-eject:before{content:"\\f052"}.fa-chevron-left:before{content:"\\f053"}.fa-chevron-right:before{content:"\\f054"}.fa-plus-circle:before{content:"\\f055"}.fa-minus-circle:before{content:"\\f056"}.fa-times-circle:before{content:"\\f057"}.fa-check-circle:before{content:"\\f058"}.fa-question-circle:before{content:"\\f059"}.fa-info-circle:before{content:"\\f05a"}.fa-crosshairs:before{content:"\\f05b"}.fa-times-circle-o:before{content:"\\f05c"}.fa-check-circle-o:before{content:"\\f05d"}.fa-ban:before{content:"\\f05e"}.fa-arrow-left:before{content:"\\f060"}.fa-arrow-right:before{content:"\\f061"}.fa-arrow-up:before{content:"\\f062"}.fa-arrow-down:before{content:"\\f063"}.fa-mail-forward:before,.fa-share:before{content:"\\f064"}.fa-expand:before{content:"\\f065"}.fa-compress:before{content:"\\f066"}.fa-plus:before{content:"\\f067"}.fa-minus:before{content:"\\f068"}.fa-asterisk:before{content:"\\f069"}.fa-exclamation-circle:before{content:"\\f06a"}.fa-gift:before{content:"\\f06b"}.fa-leaf:before{content:"\\f06c"}.fa-fire:before{content:"\\f06d"}.fa-eye:before{content:"\\f06e"}.fa-eye-slash:before{content:"\\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\\f071"}.fa-plane:before{content:"\\f072"}.fa-calendar:before{content:"\\f073"}.fa-random:before{content:"\\f074"}.fa-comment:before{content:"\\f075"}.fa-magnet:before{content:"\\f076"}.fa-chevron-up:before{content:"\\f077"}.fa-chevron-down:before{content:"\\f078"}.fa-retweet:before{content:"\\f079"}.fa-shopping-cart:before{content:"\\f07a"}.fa-folder:before{content:"\\f07b"}.fa-folder-open:before{content:"\\f07c"}.fa-arrows-v:before{content:"\\f07d"}.fa-arrows-h:before{content:"\\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\\f080"}.fa-twitter-square:before{content:"\\f081"}.fa-facebook-square:before{content:"\\f082"}.fa-camera-retro:before{content:"\\f083"}.fa-key:before{content:"\\f084"}.fa-gears:before,.fa-cogs:before{content:"\\f085"}.fa-comments:before{content:"\\f086"}.fa-thumbs-o-up:before{content:"\\f087"}.fa-thumbs-o-down:before{content:"\\f088"}.fa-star-half:before{content:"\\f089"}.fa-heart-o:before{content:"\\f08a"}.fa-sign-out:before{content:"\\f08b"}.fa-linkedin-square:before{content:"\\f08c"}.fa-thumb-tack:before{content:"\\f08d"}.fa-external-link:before{content:"\\f08e"}.fa-sign-in:before{content:"\\f090"}.fa-trophy:before{content:"\\f091"}.fa-github-square:before{content:"\\f092"}.fa-upload:before{content:"\\f093"}.fa-lemon-o:before{content:"\\f094"}.fa-phone:before{content:"\\f095"}.fa-square-o:before{content:"\\f096"}.fa-bookmark-o:before{content:"\\f097"}.fa-phone-square:before{content:"\\f098"}.fa-twitter:before{content:"\\f099"}.fa-facebook:before{content:"\\f09a"}.fa-github:before{content:"\\f09b"}.fa-unlock:before{content:"\\f09c"}.fa-credit-card:before{content:"\\f09d"}.fa-rss:before{content:"\\f09e"}.fa-hdd-o:before{content:"\\f0a0"}.fa-bullhorn:before{content:"\\f0a1"}.fa-bell:before{content:"\\f0f3"}.fa-certificate:before{content:"\\f0a3"}.fa-hand-o-right:before{content:"\\f0a4"}.fa-hand-o-left:before{content:"\\f0a5"}.fa-hand-o-up:before{content:"\\f0a6"}.fa-hand-o-down:before{content:"\\f0a7"}.fa-arrow-circle-left:before{content:"\\f0a8"}.fa-arrow-circle-right:before{content:"\\f0a9"}.fa-arrow-circle-up:before{content:"\\f0aa"}.fa-arrow-circle-down:before{content:"\\f0ab"}.fa-globe:before{content:"\\f0ac"}.fa-wrench:before{content:"\\f0ad"}.fa-tasks:before{content:"\\f0ae"}.fa-filter:before{content:"\\f0b0"}.fa-briefcase:before{content:"\\f0b1"}.fa-arrows-alt:before{content:"\\f0b2"}.fa-group:before,.fa-users:before{content:"\\f0c0"}.fa-chain:before,.fa-link:before{content:"\\f0c1"}.fa-cloud:before{content:"\\f0c2"}.fa-flask:before{content:"\\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\\f0c5"}.fa-paperclip:before{content:"\\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\\f0c7"}.fa-square:before{content:"\\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\\f0c9"}.fa-list-ul:before{content:"\\f0ca"}.fa-list-ol:before{content:"\\f0cb"}.fa-strikethrough:before{content:"\\f0cc"}.fa-underline:before{content:"\\f0cd"}.fa-table:before{content:"\\f0ce"}.fa-magic:before{content:"\\f0d0"}.fa-truck:before{content:"\\f0d1"}.fa-pinterest:before{content:"\\f0d2"}.fa-pinterest-square:before{content:"\\f0d3"}.fa-google-plus-square:before{content:"\\f0d4"}.fa-google-plus:before{content:"\\f0d5"}.fa-money:before{content:"\\f0d6"}.fa-caret-down:before{content:"\\f0d7"}.fa-caret-up:before{content:"\\f0d8"}.fa-caret-left:before{content:"\\f0d9"}.fa-caret-right:before{content:"\\f0da"}.fa-columns:before{content:"\\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\\f0de"}.fa-envelope:before{content:"\\f0e0"}.fa-linkedin:before{content:"\\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\\f0e4"}.fa-comment-o:before{content:"\\f0e5"}.fa-comments-o:before{content:"\\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\\f0e7"}.fa-sitemap:before{content:"\\f0e8"}.fa-umbrella:before{content:"\\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\\f0ea"}.fa-lightbulb-o:before{content:"\\f0eb"}.fa-exchange:before{content:"\\f0ec"}.fa-cloud-download:before{content:"\\f0ed"}.fa-cloud-upload:before{content:"\\f0ee"}.fa-user-md:before{content:"\\f0f0"}.fa-stethoscope:before{content:"\\f0f1"}.fa-suitcase:before{content:"\\f0f2"}.fa-bell-o:before{content:"\\f0a2"}.fa-coffee:before{content:"\\f0f4"}.fa-cutlery:before{content:"\\f0f5"}.fa-file-text-o:before{content:"\\f0f6"}.fa-building-o:before{content:"\\f0f7"}.fa-hospital-o:before{content:"\\f0f8"}.fa-ambulance:before{content:"\\f0f9"}.fa-medkit:before{content:"\\f0fa"}.fa-fighter-jet:before{content:"\\f0fb"}.fa-beer:before{content:"\\f0fc"}.fa-h-square:before{content:"\\f0fd"}.fa-plus-square:before{content:"\\f0fe"}.fa-angle-double-left:before{content:"\\f100"}.fa-angle-double-right:before{content:"\\f101"}.fa-angle-double-up:before{content:"\\f102"}.fa-angle-double-down:before{content:"\\f103"}.fa-angle-left:before{content:"\\f104"}.fa-angle-right:before{content:"\\f105"}.fa-angle-up:before{content:"\\f106"}.fa-angle-down:before{content:"\\f107"}.fa-desktop:before{content:"\\f108"}.fa-laptop:before{content:"\\f109"}.fa-tablet:before{content:"\\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\\f10b"}.fa-circle-o:before{content:"\\f10c"}.fa-quote-left:before{content:"\\f10d"}.fa-quote-right:before{content:"\\f10e"}.fa-spinner:before{content:"\\f110"}.fa-circle:before{content:"\\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\\f112"}.fa-github-alt:before{content:"\\f113"}.fa-folder-o:before{content:"\\f114"}.fa-folder-open-o:before{content:"\\f115"}.fa-smile-o:before{content:"\\f118"}.fa-frown-o:before{content:"\\f119"}.fa-meh-o:before{content:"\\f11a"}.fa-gamepad:before{content:"\\f11b"}.fa-keyboard-o:before{content:"\\f11c"}.fa-flag-o:before{content:"\\f11d"}.fa-flag-checkered:before{content:"\\f11e"}.fa-terminal:before{content:"\\f120"}.fa-code:before{content:"\\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\\f123"}.fa-location-arrow:before{content:"\\f124"}.fa-crop:before{content:"\\f125"}.fa-code-fork:before{content:"\\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\\f127"}.fa-question:before{content:"\\f128"}.fa-info:before{content:"\\f129"}.fa-exclamation:before{content:"\\f12a"}.fa-superscript:before{content:"\\f12b"}.fa-subscript:before{content:"\\f12c"}.fa-eraser:before{content:"\\f12d"}.fa-puzzle-piece:before{content:"\\f12e"}.fa-microphone:before{content:"\\f130"}.fa-microphone-slash:before{content:"\\f131"}.fa-shield:before{content:"\\f132"}.fa-calendar-o:before{content:"\\f133"}.fa-fire-extinguisher:before{content:"\\f134"}.fa-rocket:before{content:"\\f135"}.fa-maxcdn:before{content:"\\f136"}.fa-chevron-circle-left:before{content:"\\f137"}.fa-chevron-circle-right:before{content:"\\f138"}.fa-chevron-circle-up:before{content:"\\f139"}.fa-chevron-circle-down:before{content:"\\f13a"}.fa-html5:before{content:"\\f13b"}.fa-css3:before{content:"\\f13c"}.fa-anchor:before{content:"\\f13d"}.fa-unlock-alt:before{content:"\\f13e"}.fa-bullseye:before{content:"\\f140"}.fa-ellipsis-h:before{content:"\\f141"}.fa-ellipsis-v:before{content:"\\f142"}.fa-rss-square:before{content:"\\f143"}.fa-play-circle:before{content:"\\f144"}.fa-ticket:before{content:"\\f145"}.fa-minus-square:before{content:"\\f146"}.fa-minus-square-o:before{content:"\\f147"}.fa-level-up:before{content:"\\f148"}.fa-level-down:before{content:"\\f149"}.fa-check-square:before{content:"\\f14a"}.fa-pencil-square:before{content:"\\f14b"}.fa-external-link-square:before{content:"\\f14c"}.fa-share-square:before{content:"\\f14d"}.fa-compass:before{content:"\\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\\f152"}.fa-euro:before,.fa-eur:before{content:"\\f153"}.fa-gbp:before{content:"\\f154"}.fa-dollar:before,.fa-usd:before{content:"\\f155"}.fa-rupee:before,.fa-inr:before{content:"\\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\\f158"}.fa-won:before,.fa-krw:before{content:"\\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\\f15a"}.fa-file:before{content:"\\f15b"}.fa-file-text:before{content:"\\f15c"}.fa-sort-alpha-asc:before{content:"\\f15d"}.fa-sort-alpha-desc:before{content:"\\f15e"}.fa-sort-amount-asc:before{content:"\\f160"}.fa-sort-amount-desc:before{content:"\\f161"}.fa-sort-numeric-asc:before{content:"\\f162"}.fa-sort-numeric-desc:before{content:"\\f163"}.fa-thumbs-up:before{content:"\\f164"}.fa-thumbs-down:before{content:"\\f165"}.fa-youtube-square:before{content:"\\f166"}.fa-youtube:before{content:"\\f167"}.fa-xing:before{content:"\\f168"}.fa-xing-square:before{content:"\\f169"}.fa-youtube-play:before{content:"\\f16a"}.fa-dropbox:before{content:"\\f16b"}.fa-stack-overflow:before{content:"\\f16c"}.fa-instagram:before{content:"\\f16d"}.fa-flickr:before{content:"\\f16e"}.fa-adn:before{content:"\\f170"}.fa-bitbucket:before{content:"\\f171"}.fa-bitbucket-square:before{content:"\\f172"}.fa-tumblr:before{content:"\\f173"}.fa-tumblr-square:before{content:"\\f174"}.fa-long-arrow-down:before{content:"\\f175"}.fa-long-arrow-up:before{content:"\\f176"}.fa-long-arrow-left:before{content:"\\f177"}.fa-long-arrow-right:before{content:"\\f178"}.fa-apple:before{content:"\\f179"}.fa-windows:before{content:"\\f17a"}.fa-android:before{content:"\\f17b"}.fa-linux:before{content:"\\f17c"}.fa-dribbble:before{content:"\\f17d"}.fa-skype:before{content:"\\f17e"}.fa-foursquare:before{content:"\\f180"}.fa-trello:before{content:"\\f181"}.fa-female:before{content:"\\f182"}.fa-male:before{content:"\\f183"}.fa-gittip:before{content:"\\f184"}.fa-sun-o:before{content:"\\f185"}.fa-moon-o:before{content:"\\f186"}.fa-archive:before{content:"\\f187"}.fa-bug:before{content:"\\f188"}.fa-vk:before{content:"\\f189"}.fa-weibo:before{content:"\\f18a"}.fa-renren:before{content:"\\f18b"}.fa-pagelines:before{content:"\\f18c"}.fa-stack-exchange:before{content:"\\f18d"}.fa-arrow-circle-o-right:before{content:"\\f18e"}.fa-arrow-circle-o-left:before{content:"\\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\\f191"}.fa-dot-circle-o:before{content:"\\f192"}.fa-wheelchair:before{content:"\\f193"}.fa-vimeo-square:before{content:"\\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\\f195"}.fa-plus-square-o:before{content:"\\f196"}.fa-space-shuttle:before{content:"\\f197"}.fa-slack:before{content:"\\f198"}.fa-envelope-square:before{content:"\\f199"}.fa-wordpress:before{content:"\\f19a"}.fa-openid:before{content:"\\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\\f19d"}.fa-yahoo:before{content:"\\f19e"}.fa-google:before{content:"\\f1a0"}.fa-reddit:before{content:"\\f1a1"}.fa-reddit-square:before{content:"\\f1a2"}.fa-stumbleupon-circle:before{content:"\\f1a3"}.fa-stumbleupon:before{content:"\\f1a4"}.fa-delicious:before{content:"\\f1a5"}.fa-digg:before{content:"\\f1a6"}.fa-pied-piper:before{content:"\\f1a7"}.fa-pied-piper-alt:before{content:"\\f1a8"}.fa-drupal:before{content:"\\f1a9"}.fa-joomla:before{content:"\\f1aa"}.fa-language:before{content:"\\f1ab"}.fa-fax:before{content:"\\f1ac"}.fa-building:before{content:"\\f1ad"}.fa-child:before{content:"\\f1ae"}.fa-paw:before{content:"\\f1b0"}.fa-spoon:before{content:"\\f1b1"}.fa-cube:before{content:"\\f1b2"}.fa-cubes:before{content:"\\f1b3"}.fa-behance:before{content:"\\f1b4"}.fa-behance-square:before{content:"\\f1b5"}.fa-steam:before{content:"\\f1b6"}.fa-steam-square:before{content:"\\f1b7"}.fa-recycle:before{content:"\\f1b8"}.fa-automobile:before,.fa-car:before{content:"\\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\\f1ba"}.fa-tree:before{content:"\\f1bb"}.fa-spotify:before{content:"\\f1bc"}.fa-deviantart:before{content:"\\f1bd"}.fa-soundcloud:before{content:"\\f1be"}.fa-database:before{content:"\\f1c0"}.fa-file-pdf-o:before{content:"\\f1c1"}.fa-file-word-o:before{content:"\\f1c2"}.fa-file-excel-o:before{content:"\\f1c3"}.fa-file-powerpoint-o:before{content:"\\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\\f1c8"}.fa-file-code-o:before{content:"\\f1c9"}.fa-vine:before{content:"\\f1ca"}.fa-codepen:before{content:"\\f1cb"}.fa-jsfiddle:before{content:"\\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\\f1cd"}.fa-circle-o-notch:before{content:"\\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\\f1d0"}.fa-ge:before,.fa-empire:before{content:"\\f1d1"}.fa-git-square:before{content:"\\f1d2"}.fa-git:before{content:"\\f1d3"}.fa-hacker-news:before{content:"\\f1d4"}.fa-tencent-weibo:before{content:"\\f1d5"}.fa-qq:before{content:"\\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\\f1d9"}.fa-history:before{content:"\\f1da"}.fa-circle-thin:before{content:"\\f1db"}.fa-header:before{content:"\\f1dc"}.fa-paragraph:before{content:"\\f1dd"}.fa-sliders:before{content:"\\f1de"}.fa-share-alt:before{content:"\\f1e0"}.fa-share-alt-square:before{content:"\\f1e1"}.fa-bomb:before{content:"\\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\\f1e3"}.fa-tty:before{content:"\\f1e4"}.fa-binoculars:before{content:"\\f1e5"}.fa-plug:before{content:"\\f1e6"}.fa-slideshare:before{content:"\\f1e7"}.fa-twitch:before{content:"\\f1e8"}.fa-yelp:before{content:"\\f1e9"}.fa-newspaper-o:before{content:"\\f1ea"}.fa-wifi:before{content:"\\f1eb"}.fa-calculator:before{content:"\\f1ec"}.fa-paypal:before{content:"\\f1ed"}.fa-google-wallet:before{content:"\\f1ee"}.fa-cc-visa:before{content:"\\f1f0"}.fa-cc-mastercard:before{content:"\\f1f1"}.fa-cc-discover:before{content:"\\f1f2"}.fa-cc-amex:before{content:"\\f1f3"}.fa-cc-paypal:before{content:"\\f1f4"}.fa-cc-stripe:before{content:"\\f1f5"}.fa-bell-slash:before{content:"\\f1f6"}.fa-bell-slash-o:before{content:"\\f1f7"}.fa-trash:before{content:"\\f1f8"}.fa-copyright:before{content:"\\f1f9"}.fa-at:before{content:"\\f1fa"}.fa-eyedropper:before{content:"\\f1fb"}.fa-paint-brush:before{content:"\\f1fc"}.fa-birthday-cake:before{content:"\\f1fd"}.fa-area-chart:before{content:"\\f1fe"}.fa-pie-chart:before{content:"\\f200"}.fa-line-chart:before{content:"\\f201"}.fa-lastfm:before{content:"\\f202"}.fa-lastfm-square:before{content:"\\f203"}.fa-toggle-off:before{content:"\\f204"}.fa-toggle-on:before{content:"\\f205"}.fa-bicycle:before{content:"\\f206"}.fa-bus:before{content:"\\f207"}.fa-ioxhost:before{content:"\\f208"}.fa-angellist:before{content:"\\f209"}.fa-cc:before{content:"\\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\\f20b"}.fa-meanpath:before{content:"\\f20c"} - `; - - let style = document.createElement('style'); - style.innerHTML = css; - document.head.appendChild(style); -})(); \ No newline at end of file diff --git a/external/dhis2.de.js b/external/dhis2.de.js deleted file mode 100644 index e1547b4..0000000 --- a/external/dhis2.de.js +++ /dev/null @@ -1,29 +0,0 @@ -/* global dhis2 */ -/** - * Creates the events as they exist in data entry so they can be subscribed to. - * This is needed so that subscriptions to these events in custom forms do not cause the - * form to behave differently between reports and approvals. - */ - -/* global jQuery */ -(function createDataEntryEvents() { - try { - window.dhis2 = window.dhis2 || {}; - dhis2.de = dhis2.de || {}; - dhis2.de.event = { - // Fired - formLoaded: 'dhis2.de.event.formLoaded', - dataValuesLoaded: 'dhis2.de.event.dataValuesLoaded', - formReady: 'dhis2.de.event.formReady', - // Never fired in approvals (but can be subscribed to in custom form) - dataValueSaved: 'dhis2.de.event.dataValueSaved', - completed: 'dhis2.de.event.completed', - uncompleted: 'dhis2.de.event.uncompleted', - validationSucces: 'dhis2.de.event.validationSuccess', - validationError: 'dhis2.de.event.validationError' - }; - }catch (e){ - console.error(`dhis2.de.js ERROR`); - console.error(e); - } -}()); diff --git a/external/dhis2.util.js b/external/dhis2.util.js deleted file mode 100644 index 35a7187..0000000 --- a/external/dhis2.util.js +++ /dev/null @@ -1,239 +0,0 @@ -"use strict"; - -var dhis2 = dhis2 || {}; -dhis2['util'] = dhis2['util'] || {}; - -/** - * Creates namespace object based on path - * - * @param path {String} The path of the namespace, i.e. 'a.b.c' - * - * @returns {object} Namespace object - */ -dhis2.util.namespace = function( path ) { - var parts = path.split('.'); - var parent = window; - var currentPart = ''; - - for( var i = 0, length = parts.length; i < length; i++ ) { - currentPart = parts[i]; - parent[currentPart] = parent[currentPart] || {}; - parent = parent[currentPart]; - } - - return parent; -}; - -/** - * Escape function for regular expressions. - */ -dhis2.util.escape = function( text ) { - return text.replace(/[-[\]{}()*+?.,\/\\^$|#\s]/g, "\\$&"); -}; - -/** - * Convert a Java properties file into a javascript object. - */ -dhis2.util.parseJavaProperties = function( javaProperties ) { - var obj = {}, lines; - - if (typeof javaProperties !== 'string') { - return obj; - } - - lines = javaProperties.split(/\n/); - - for (var i = 0, a; i < lines.length; i++) { - if (!!(typeof lines[i] === 'string' && lines[i].length && lines[i].indexOf('=') !== -1)) { - a = lines[i].split('='); - obj[a[0].trim()] = eval('"' + a[1].trim().replace(/"/g, '\'') + '"'); - } - } - - return obj; -}; - -/** - * jQuery cannot correctly filter strings with () in them, so here is a fix - * until jQuery gets updated. - */ -dhis2.util.jqTextFilterCaseSensitive = function( key, not ) { - key = dhis2.util.escape(key); - not = not || false; - - if( not ) { - return function( i, el ) { - return !!!$(el).text().match("" + key); - }; - } - else { - return function( i, el ) { - return !!$(el).text().match("" + key); - }; - } -}; - -dhis2.util.jqTextFilter = function( key, not ) { - key = dhis2.util.escape(key).toLowerCase(); - not = not || false; - - if( not ) { - return function( i, el ) { - return !!!$(el).text().toLowerCase().match("" + key); - }; - } - else { - return function( i, el ) { - return !!$(el).text().toLowerCase().match("" + key); - }; - } -}; - -/** - * Generates a valid UUID. - */ -dhis2.util.uuid = function() { - var S4 = function() { - return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); - }; - - return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4()); -}; - -/** - * Generates a valid UID. - */ -dhis2.util.uid = function() { - var letters = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - var allowedChars = "0123456789" + letters; - var NUMBER_OF_CODEPOINTS = allowedChars.length; - var CODESIZE = 11; - var uid; - - //the uid should start with a char - uid = letters.charAt( Math.random() * (letters.length) ); - - for ( var i = 1; i < CODESIZE; ++i ){ - uid += allowedChars.charAt( Math.random() * (NUMBER_OF_CODEPOINTS) ); - } - - return uid; -}; - -/** - * Normalizes an argument object returned from a jQuery promise. If the argument - * is undefined, not an array or an empty array, undefined is returned. If the - * argument is a single promise object, the object is wrapped in an array. If the - * argument is an array of promise objects, the array is returned unmodified. - */ -dhis2.util.normalizeArguments = function( args ) { - if( !args || !args.length || !args[0] ) { - return undefined; - } - - if( $.isArray(args[0]) ) { - return args; - } - else { - var arr = []; - arr[0] = args; - return arr; - } -}; - -/** - * Convenience method to be used from inside custom forms. When a function is - * registered inside a form it will be loaded every time the form is loaded, - * hence the need to unregister and the register the function. - */ -dhis2.util.on = function( event, fn ) { - $( document ).off( event ).on( event, fn ); -}; - -/** - * Returns a query parameter string where _ is the parameter and the time stamp - * in milliseconds is the value, intended to force fresh non-cached responses - * from server. - */ -dhis2.util.cacheBust = function() { - return "_=" + new Date().getTime(); -} - -/** - * Sorts the two given objects on the name property. - */ -dhis2.util.nameSort = function( a, b ) { - return a.name > b.name ? 1 : a.name < b.name ? -1 : 0; -} - -/** - * adds ':containsNC' to filtering. - * $(sel).find(':containsNC(key)').doSomething(); - */ -$.expr.pseudos.containsNC = function( a, i, m, r ) { - var search = dhis2.util.escape(m[3]); - return jQuery(a).text().toUpperCase().indexOf(m[search].toUpperCase()) >= 0; -}; - -/** - * adds ':regex' to filtering, use to filter by regular expression - */ -$.expr.pseudos.regex = function( a, i, m, r ) { - var re = new RegExp(m[3], 'i'); - return re.test(jQuery(a).text()); -}; - -/** - * adds ':regex' to filtering, use to filter by regular expression - * (this is the case sensitive version) - */ -$.expr.pseudos.regexCS = function( a, i, m, r ) { - var re = new RegExp(m[3]); - return re.test(jQuery(a).text()); -}; - -/** - * Returns an array of the keys in a given object. Will use ES5 Object.keys() if - * available, if not it will provide a pure javascript implementation. - * @returns array of keys - */ -if( !Object.keys ) { - Object.keys = function( obj ) { - var keys = []; - for( var k in obj ) - if( obj.hasOwnProperty(k) ) - keys.push(k); - return keys; - }; -} - -// http://stackoverflow.com/questions/3326650/console-is-undefined-error-for-internet-explorer -(function() { - var method; - var noop = function() { - }; - - var methods = [ - 'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', - 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', - 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', - 'timeStamp', 'trace', 'warn' - ]; - - var length = methods.length; - var console = (window.console = window.console || {}); - - while( length-- ) { - method = methods[length]; - - // Only stub undefined methods. - if( !console[method] ) { - console[method] = noop; - } - } - - // this shouldn't really be used anymore, but leaving it in for legacy reasons - window.log = function( msg ) { - console.log(msg); - } -}()); \ No newline at end of file diff --git a/external/formLogic.js b/external/formLogic.js deleted file mode 100644 index 28b7419..0000000 --- a/external/formLogic.js +++ /dev/null @@ -1,941 +0,0 @@ -// 'use strict'; - -/* global $, dhis2, functionloader */ - -/** - * STELLA: Sub Total ELement Lazy Adderupper - * Adds up column, row, and group numeric totals - * @author: Greg Wilson and Ben Guaraldi - * @requires: dhis2 utils - */ - -/** - * Assumptions: - * Specific subindicator ids (ssid) are wrapped in a class prefixed with 'si_' (for subindicator) - * followed by a unique 8 alnum (eg. si_aaaaaaaa) - * Each 'Form_EntryField' that contributed to a row or column count needs to have a - * respective "rowX" and "colY" class to indicate which row/column it contributes to. - * Row total fields are readonly and have the class totrowX_aaaaaaaa where X is - * the row number and aaaaaaa is the same 8 alnum as the si_ class - * Column total fields are readonly and have the class totcolY_aaaaaaaa where Y is - * the column number and aaaaaaa is the same 8 alnum as the si_ class - * Grand "subtotal" fields are readonly and have the class total_aaaaaaaa where - * aaaaaaa is the same 8 alnum as the si_ class - */ - -var stella = {}; - -stella.autocalcindex = {}; -stella.autocalcrules = []; - -/** - * Load autocalc rules into stella.autocalcrules and stella.autocalcindex. - * - * stella.autocalcrules is an array of rules, where each rule has an array of operands to sum as index 0 - * and a single target to put that sum as index 1. Each source could either be one specific subindicator id - * (ssid) or an array with index 0 as an ssid and index 1 with a set of category option combos (coc). - * - * stella.autocalcindex is a hash, where the ssid is the key and the value is an array of indices - * of rules from stella.autocalcrules. - */ -stella.autocalc = function (source, target) { - // Add the rule to autocalcrules - stella.autocalcrules.push([source, target]); - - // Consider each operand of the source - source.forEach(function(s) { - // s[0] is the ssid, which is the key for autocalcindex - // (s[1], if it exists, is an array of cocs to consider; - // any other cocs are ignored) - - // If we haven't seen this ssid, make an empty array for it - if (!(s[0] in stella.autocalcindex)) { - stella.autocalcindex[s[0]] = []; - } - - // Add this rule to autocalcindex if it's not already there - if (stella.autocalcindex[s[0]].indexOf(stella.autocalcrules.length - 1) === -1) { - stella.autocalcindex[s[0]].push(stella.autocalcrules.length - 1); - } - }); -}; - -/** - * Delete all loaded autocalculations - */ -stella.kill = function () { - stella.autocalcindex = {}; - stella.autocalcrules = []; -}; - -/** - * Remove all displayed autocalculations - */ -stella.erase = function () { - $('[class*="si_"]').find('.input_total').html('Subtotal'); -}; - -/** - * Update rows, columns, non-custom and custom totals when loading the page - */ -stella.load = function () { - $('[class*="si_"]').each(function (i, d) { - var ssid = this.className.match('si_(.{8})')[1]; // Use the ssid to sum - stella.sumSlice(ssid, 'row'); // the rows, - stella.sumSlice(ssid, 'col'); // the columns, - stella.sumTotal([[ssid]], ssid); // and the non-custom totals - }); - - // For the custom totals, simply consider every rule once - for (var r = 0; r < stella.autocalcrules.length; r++) { - stella.sumTotal(stella.autocalcrules[r][0], stella.autocalcrules[r][1]); - } -}; - -/** - * When a form value is changed, consider autocalculation of rows, columns, totals, and custom rules - * to determine whether any form fields need to be changed - */ -stella.changed = function (dv) { - // Find the particular sub indicator group that was modified using the de and co properties - // of dv from DHIS 2's dataValueSaved function - var ssid = ''; - $('[class*="si_"]').each(function (i, d) { - if ($(this).find('[id^=' + dv.de + '-' + dv.co + ']').length > 0) { - ssid = this.className.match('si_(.{8})')[1]; - return; - } - }); - - if (ssid !== '') { // If we have an ssid, then look at the related - stella.sumSlice(ssid, 'row'); // rows, - stella.sumSlice(ssid, 'col'); // columns, - stella.sumTotal([[ssid]], ssid); // totals, - if (ssid in stella.autocalcindex) { // and custom rules - stella.autocalcindex[ssid].forEach(function(e) { - stella.sumTotal(stella.autocalcrules[e][0], stella.autocalcrules[e][1]); - }); - } - } -}; - -/** - * Calculate the sums of a certain kind of slice of an ssid, usually either a row or a column - */ -stella.sumSlice = function (ssid, slice) { - // An array to save the various sums of slices - var slices = []; - - // Consider all Document Object Model (DOM) elements that match ssid - $('.si_' + ssid).each(function () { - // Get all of this DOM element's entry divs that have slice and that don't have 'tot' - $(this).find('[class*=Form_EntryField][class*=' + slice + ']').not('[class*=tot]').each(function () { - // Look for divs with 'slice' and then one or two numbers - var s = this.className.match(slice + '\\d')[0]; - var val = stella.getVal(this); - if (!slices[s]) { - slices[s] = 0; - } - if (!isNaN(val)) { - slices[s] += +val; - } - }); - }); - - // Take all slices that we found display the sum we calculated - for (var s in slices) { - stella.display('.tot' + s + '_' + ssid, slices[s]); - } -}; - -/** - * Calculate the total sum for source, which is an array of operands, each with either just an ssid or an ssid - * and cocs that restrict it. Then place that total sum in target. If created in an HTML template file, the - * source and target will be the same ssid. If specified in the CSV control file, they may be the same, but are - * more likely to be different. - */ -stella.sumTotal = function (source, target) { - var total = 0; - - // Consider each operand in source - source.forEach(function (s) { - var ssid = s[0]; - var cocs = s[1]; - - // Consider all DOM elements that match ssid - $('.si_' + ssid).each(function () { - // Get all of this DOM element's entry divs, except for 'tot' fields - $(this).find('[class*=Form_EntryField]').not('[class*=tot]').each(function () { - // If we're only selecting a specific category option combo, check to see whether - // this input has an id and whether that coc is referenced in that id - if (!cocs || stella.idHasCoc(this, cocs)) { - // If we get a value, add it to the total - var val = stella.getVal(this); - if (!isNaN(val)) { - total += +val; - } - } - }); - }); - - // Display the total sum in all DOM elements that match '.total_' + target. (target is an ssid.) - stella.display('.total_' + target, total); - }); -}; - -/** - * Format a value and display it in all DOM elements matching selector. - * If value is 0, show the text Subtotal in a small font. - */ -stella.display = function (selector, value) { - $(selector).each(function () { - if (value > 0) { - // Round to 2 sig figs - if (value.toFixed(2).indexOf('.00') == -1) { - value = value.toFixed(2); - } - $(selector).find('.input_total').text(value); - } else { - $(selector).find('.input_total').html('Subtotal'); - } - }); -}; - -/** - * Get the DHIS 2 data value related to a DOM selector - */ -stella.getVal = function(selector) { - // Try to get the value through the input child of selector - var val = $(selector).find('input').val(); - - // We didn't end up with a value, so check to see if we are in reports instead - if (val === undefined) { - val = parseInt($(selector).find('.val').text()); - } - - return val; -}; - -/** - * Determine whether a given id references a coc - */ -stella.idHasCoc = function (w, cocs) { - try { - var x = $(w).find('input'); - if (x.length) { - var id = x.attr('id'); - } else { - x = $(w).find('span.val'); - if (!x.length) { - return false; - } - var id = x.attr('data-de') + '-' + x.attr('data-co') + '-val'; - } - - for (var c = 0; c < cocs.length; c++) { - if (id.indexOf(cocs[c]) !== -1) { - return true; - } - } - - return false; - - } catch(e) { - return false; - } -}; - -/** - * qbert: Quarter Based Form Locking - * Hides subforms if not in currently selected time period - * @author: Greg Wilson - * @requires: dhis2 utils - */ - -/** - * Assumptions: - */ - -var qbert = {}; - -//get the currently selected dataset/period/org -qbert.getPeriod = function () { - return $('#selectedPeriodId').val(); -}; - -qbert.erase = function () { - $('.expanded').parent().find('input').each(function () { - qbert._enable(this); - }); - $('.expanded').parent().find('textarea').each(function () { - qbert._enable(this); - }); - $('.expanded').removeClass('expanded').removeClass('ic_title_disabled').next('.PEPFAR_Form_Collapse').slideDown(); -}; - -qbert.eraseForm = function (form) { - //Expand - $(form).removeClass('expanded').next(".PEPFAR_Form_Collapse").slideDown(); - //reset the Title - $(form).removeClass('ic_title_disabled'); - //make sure the title class is present - //$(form).addClass('PEPFAR_Form_Title'); //Not sure why this was necessary (TH) - //set input elements as RO - $(form).parent().find("input").each(function () { - qbert._enable(this); - }); - $(form).parent().find("textarea").each(function () { - qbert._enable(this); - }); - //remove warning text - // append("div").removeClass("cadenceWarning").html(""); -}; - -//find and disable form elements -qbert.disable = function (form) { - //Collapse - $(form).addClass('expanded').next(".PEPFAR_Form_Collapse").slideUp('fast'); - //grey out title - $(form).addClass('ic_title_disabled'); - //remove existing Title Class (for collapse/expanding) - //$(form).removeClass('PEPFAR_Form_Title'); //Not sure why this was necessary (TH) - //set input elements as RO - $(form).parent().find("input").each(function () { - qbert._disable(this); - }); - //set input elements as RO - $(form).parent().find("textarea").each(function () { - qbert._disable(this); - }); - //add warning text - // append("div").addClass("cadenceWarning").html("Invalid time period. Data entry disabled."); -}; - -//disable a form element -qbert._disable = function (elem) { - if ($(elem).val() === '') { - $(elem).addClass('ic_disabled').prop('disabled', true); - } else { - $(elem).addClass('ic_disabled').prop('disabled', false); - } -}; - -qbert._enable = function (elem) { - $(elem).removeClass('ic_disabled').prop('disabled', false).removeClass("ic_conflict"); -}; - -/** - * On-load method to update which sections are visible - */ -qbert.load = function () { - var period = qbert.getPeriod(); - - //If the period is not found we are probably not in the data entry app, exit - if (period == undefined) { - return; - } - - //parse the current period - var re = /20[1-9][0-9]Q([1-4])/; //we don't expect this to be running in 2100 - var found = period.match(re); - - if (found !== null) { - //Reset the indicators - var noentry = $(".ic_title_disabled"); - $(noentry).each(function () { - qbert.eraseForm(this); - }); - - //only show annual in Q4 of FYOCT - if (found[1] === '4' || found[1] === '1' || found[1] === '2') { - var anns = $(".PEPFAR_Form_Title_Annually"); - $(anns).each(function () { - qbert.disable(this); - }); - } - //only show semi in Q2, Q4 of FYOCT - if (found[1] === '4' || found[1] === '2') { - var qs = $(".PEPFAR_Form_Title_Semiannually"); - $(qs).each(function () { - qbert.disable(this); - }); - } - //always show quarterly (PEPFAR_Form_Title_Quarterly) - } -}; - -/** - * CERULEAN: Make sections of forms designated "conditional" expandable and contractible - * @author: Greg Wilson and Ben Guaraldi - * @requires: jQuery - */ - -var cerulean = {}; - -/** - * Delete all of cerulean - */ -cerulean.erase = function () { - $('.cerulean').remove(); -} - -/** - * On load of form, add expand/collapse buttons and hide sections that do not have values - */ -cerulean.load = function () { - // Start with a clean slate - cerulean.erase(); - - // Add new buttons - var buttonDiv = '
Collapse Expand
'; - var buttons = $(buttonDiv).appendTo('.PEPFAR_Form_Priority_conditional > .PEPFAR_Form_Description').click(function () { - cerulean.toggle(this); - }); - - // Set up initial state for each section, by considering each of the sets of buttons that was just created - buttons.each(function () { - // If there are no values, hide the conditional form section; otherwise, show it - cerulean.toggle(this, cerulean.hasValues(this)); - }); -}; - -/** - * If visible is true, show the conditional area - * If visible is false, hide the conditional area - * If visible is undefined, then reverse the visibility of the conditional area - * Also, make other necessary changes, like switching the text from Expand to Collapse or vice versa - */ -cerulean.toggle = function (buttonDiv, visible) { - var sectionTitleDiv = $(buttonDiv).parent().parent().parent(); - if (visible === undefined) { - // Turn on or off the conditional form area - $(sectionTitleDiv).siblings().toggle(); - // Reverse the visibility of the Expand and Collapse divs, so only one shows at a time - $(buttonDiv).children().toggle(); - } else { - // If visible is true, show the conditional form area; otherwise, hide it - $(sectionTitleDiv).siblings().toggle(visible); - // If visible is true, show the Collapse button; otherwise, hide it - $(buttonDiv).children().first().toggle(visible); - // If visible is true, hide the Expand button; otherwise, show it - $(buttonDiv).children().last().toggle(!visible); - } -}; - -/** - * Test to see if a selector has values - */ -cerulean.hasValues = function(selector) { - // Get the entry fields - var fields = $(selector).parent().parent().parent().parent().find('[class*=Form_EntryField]'); - - // Consider them one at a time - for (var i = 0; i < fields.length; i++) { - var field = fields[i]; - var input = $(field).find('input'); - // Skip the total fields - if ($(field).attr('class').indexOf('tot') === -1) { - // Attempt to find the value using two different methods, as the html and css for - // the Data Entry app and the Data Approval app are different - var val = $(input).val(); - if (typeof(val) === 'undefined') { - val = $(field).find('.val').text(); - if (typeof(val) !== 'undefined' && val != '') { - return true; - } - } else if (val != '') { - return true; - } - } - } - // We looked at all of the inputs in all of the fields and we didn't find any values - return false; -}; - -(function() { - dhis2.util.on(dhis2.de.event.dataValuesLoaded, function(event, ds) { - functionloader.dataValuesLoaded(ds); - }); - - dhis2.util.on(dhis2.de.event.formReady, function(event, ds) { - //Form ready extra js to run - //#formReady# - }); -})(); - -dhis2.util.on(dhis2.de.event.dataValueSaved, function(event, ds, dv) { - stella.changed(dv); - meany.changed(dv); - - //dataValueSaved extra JS to run - //#dataValueSaved# -}); - -var functionloader = {}; -functionloader.dataSetToRunFor = false; -functionloader.lastSelectedForm = false; - -functionloader.dataValuesLoaded = function (ds) { - $('#PEPFAR_loading').show(); - if (!functionloader.dataSetToRunFor) { - // dataSetToRunFor is not set, so this is the first time we've been run - console.log('PEPFAR: MER | Custom JS Loaded: v20190114 | Loading all javascript for ' + ds); - functionloader.erase(); - functionloader.dataSetToRunFor = ds; - functionloader.lastSelectedForm = functionloader.identifySelectedForm(); - qbert.load(); - - $('.PEPFAR_Form_EntryField').find('.entryfield').addClass('PEPFAR_Form_EntryField_input'); - $('.PEPFAR_Form_OptionSet').find('.entryoptionset').addClass('PEPFAR_Form_EntryField_optionset'); - $('.PEPFAR_Form_Narrative').find('.entryarea').addClass('PEPFAR_Form_EntryField_narrative'); - - //Data Values Loaded extra js to run - - stella.autocalc([['seiuydsd']], [['UrRXTdsd']]); - stella.autocalc([['rkomedsd']], [['ERekDdsd']]); - stella.autocalc([['lueikdsd']], [['U2ZzZdsd']]); - stella.autocalc([['okwikdsd']], [['H868ydsd']]); - stella.autocalc([['okwikdsd', ['aUwnyHuwMoM', 'NDSiHWlZgdn', 'iZDhpMYrUhD', 'f5UCCdzK3Tv', 'zu9HrgDHyQT', 'nL4Hn7rQRkH', 'RX6Bt5WZBTp', 'mm3OwXbMrDO', 't6SVZj25Y51', 'SgTYo6S71cR', 'IO9GD263u2H', 'zq6hDM0eyHD', 'xaE1rwbDcrA', 'rMROM7S9IcM', 'DWK907m2A1w', 'EjDC8XG5FTV', 'ewXoNYCdpYZ', 'Z0yw0rYHyNT', 'qbvstlhbKQN', 'qFe4iOwYox4', 'RP3AayX1LAk', 'zcgpWAmwXDe']]], [['SuPvadsd']]); - stella.autocalc([['okwikdsd', ['TtarAq69fxc', 'IpGAJ8qpFHU', 'rZkSjF483iM', 'FAVPrIMm5hQ', 'YKar5VC8roP', 'CQQuvHn7dJa', 'd4eyjtfMJjV', 'h0g9DokFKAZ', 'RK5FpyT6bYE', 'uRHqJGCDJgi', 'jNekVyCzOqR', 'I6c24vig2M7', 'NRQe2llLF96', 'YQoLsMtht8U', 'ba5JcnE1DUJ', 'ZjLjyxbIXcD', 'UE87jwNYjtB', 'FAw0peqrDtE', 'n1vpOIvT6Xv', 'bIuKoX80N2Z', 'KQErAdoXLqV', 'CHWnztu6NhK']]], [['rM1aqdsd']]); - stella.autocalc([['seiuyxta']], [['Ts8ZHxta']]); - stella.autocalc([['rkomexta']], [['oV2UGxta']]); - stella.autocalc([['lueikxta']], [['KjWvKxta']]); - stella.autocalc([['okwikxta']], [['hnZXixta']]); - stella.autocalc([['okwikxta', ['aUwnyHuwMoM', 'iZDhpMYrUhD', 'nL4Hn7rQRkH', 'RX6Bt5WZBTp', 'mm3OwXbMrDO', 'SgTYo6S71cR', 'zq6hDM0eyHD', 'rMROM7S9IcM', 'qbvstlhbKQN', 'qFe4iOwYox4', 'zcgpWAmwXDe', 'NDSiHWlZgdn', 'f5UCCdzK3Tv', 'zu9HrgDHyQT', 't6SVZj25Y51', 'IO9GD263u2H', 'xaE1rwbDcrA', 'DWK907m2A1w', 'EjDC8XG5FTV', 'ewXoNYCdpYZ', 'Z0yw0rYHyNT', 'RP3AayX1LAk']]], [['PbucYxta']]); - stella.autocalc([['okwikxta', ['TtarAq69fxc', 'IpGAJ8qpFHU', 'rZkSjF483iM', 'FAVPrIMm5hQ', 'YKar5VC8roP', 'CQQuvHn7dJa', 'd4eyjtfMJjV', 'h0g9DokFKAZ', 'RK5FpyT6bYE', 'uRHqJGCDJgi', 'jNekVyCzOqR', 'I6c24vig2M7', 'NRQe2llLF96', 'YQoLsMtht8U', 'ba5JcnE1DUJ', 'ZjLjyxbIXcD', 'UE87jwNYjtB', 'FAw0peqrDtE', 'n1vpOIvT6Xv', 'bIuKoX80N2Z', 'KQErAdoXLqV', 'CHWnztu6NhK']]], [['Yx37mxta']]); - stella.autocalc([['smoqedsd'], ['maqkadsd'], ['qyoyedsd'], ['leyiwdsd'], ['jgsgadsd'], ['nymqkdsd'], ['zcckgdsd', ['HTuFkqNl46u', 'GJBPjJZBrRn', 'pVFmF7dKnTq', 'GcAEOo6pgjG', 'tNnfZGycqoK', 'gcWll55WCHc', 'BiJwnz9vw41', 'mA6G2IcNQ5s', 'rL9fEh5MSHf', 'fN5EhNea5na', 'WUOsioCfTH1', 'aReRE4UUoKW', 'zRdpU5xlOQI', 'EsEgz70ex5M', 'FsaFnYgYYiE', 'XDgqQlbNOma', 'XqbMOMJhdoo', 'JqROtRoCBHP', 'mN07ApGjAKh', 'GNrMxECWqDp', 'fu8H9OdUyZ6', 'XEIYBLvAzIb', 'O4M73r7CEs1', 'pW32ZkMbRSO', 'G6ksZzf4PuP', 'tb2OliToe2g']], ['zcckgdsd', ['VemdciGizc8', 'ClRyt3CO2CU', 'Ys91wCxDGwp', 'hLjLWfjGWpK', 'gWPhDYzmbw5', 'IsuCX2xSvKQ', 'oBVan2Rcsdj', 'ew4H9zzs0GI', 'fpnwXTQGmD5', 'eVb1NqOEUoq', 'LokBv4egnfg', 'zzHeHMx5Mh1', 'dywO69YrrUq', 'Lq9WappoJ2W', 'ewxqtAm93uz', 'T7F0DwyrbBV', 'zDtqexNpaj8', 'uPn8wdfqpnK', 'i9N7JojYiQO', 'Rxd6hW5bqRu', 'hjgWcKahM96', 'V6ykris04Kr', 'o3zyOwZyxi7', 'vUUk6jQrXdb', 'rHymehDGb3n', 'wem5QqoRkkh']]], [['wHxYDdsd']]); - stella.autocalc([['zcckgdsd', ['VemdciGizc8', 'ClRyt3CO2CU', 'Ys91wCxDGwp', 'hLjLWfjGWpK', 'gWPhDYzmbw5', 'IsuCX2xSvKQ', 'oBVan2Rcsdj', 'ew4H9zzs0GI', 'fpnwXTQGmD5', 'eVb1NqOEUoq', 'LokBv4egnfg', 'zzHeHMx5Mh1', 'dywO69YrrUq', 'Lq9WappoJ2W', 'ewxqtAm93uz', 'T7F0DwyrbBV', 'zDtqexNpaj8', 'uPn8wdfqpnK', 'i9N7JojYiQO', 'Rxd6hW5bqRu', 'hjgWcKahM96', 'V6ykris04Kr', 'o3zyOwZyxi7', 'vUUk6jQrXdb', 'rHymehDGb3n', 'wem5QqoRkkh']], ['smoqedsd', ['yPnEtFpqtt5', 'z6KOjZfpQcx', 'Z2jmPAIHrel', 'lbfOsYfiypV', 'NGYepD2stMO', 'OdBhPUGWQ5m', 'NlZJe4oDEFK', 'Q27GSYLDkGk', 'FmEMWg0TP1j', 'eSoHGswqAsd', 'RnaDS67VAvQ', 'irSyYG6qqBZ', 'renXtk3VqTM', 'KY39qXVMOj1', 'QdKC55saRRw', 'KAyyHkzmuL1', 'HYtbCWnAdG9', 'zrFplyGIhtL', 'fhtynTWtvqv', 'tDVcPbjxTPK', 'rZH5lIUD4nH', 'PPg7Yzjq0oF', 'BoN2WhPnYl1', 'MMyMkF05moq', 'Y2GIRv9dnAI', 'T6zWRBnlJhR']], ['maqkadsd', ['PrS9RqE1nmz', 'mq33twqgDWZ', 'LnYfq7wx1hN', 'WhxSPg1g9Og', 'XDTwB2A1yY0', 'E2NnF5pE5K1']], ['qyoyedsd', ['yPnEtFpqtt5', 'z6KOjZfpQcx', 'Z2jmPAIHrel', 'lbfOsYfiypV', 'NGYepD2stMO', 'OdBhPUGWQ5m', 'NlZJe4oDEFK', 'Q27GSYLDkGk', 'FmEMWg0TP1j', 'eSoHGswqAsd', 'RnaDS67VAvQ', 'irSyYG6qqBZ', 'renXtk3VqTM', 'KY39qXVMOj1', 'QdKC55saRRw', 'KAyyHkzmuL1', 'HYtbCWnAdG9', 'zrFplyGIhtL', 'fhtynTWtvqv', 'tDVcPbjxTPK', 'rZH5lIUD4nH', 'PPg7Yzjq0oF', 'BoN2WhPnYl1', 'MMyMkF05moq', 'Y2GIRv9dnAI', 'T6zWRBnlJhR']], ['leyiwdsd', ['PrS9RqE1nmz', 'mq33twqgDWZ', 'LnYfq7wx1hN', 'WhxSPg1g9Og', 'XDTwB2A1yY0', 'E2NnF5pE5K1']], ['jgsgadsd', ['yPnEtFpqtt5', 'z6KOjZfpQcx', 'Z2jmPAIHrel', 'lbfOsYfiypV', 'NGYepD2stMO', 'OdBhPUGWQ5m', 'NlZJe4oDEFK', 'Q27GSYLDkGk', 'FmEMWg0TP1j', 'eSoHGswqAsd', 'RnaDS67VAvQ', 'irSyYG6qqBZ', 'renXtk3VqTM', 'KY39qXVMOj1', 'QdKC55saRRw', 'KAyyHkzmuL1', 'HYtbCWnAdG9', 'zrFplyGIhtL', 'fhtynTWtvqv', 'tDVcPbjxTPK', 'rZH5lIUD4nH', 'PPg7Yzjq0oF', 'BoN2WhPnYl1', 'MMyMkF05moq', 'Y2GIRv9dnAI', 'T6zWRBnlJhR']], ['nymqkdsd', ['PrS9RqE1nmz', 'mq33twqgDWZ', 'LnYfq7wx1hN', 'WhxSPg1g9Og', 'XDTwB2A1yY0', 'E2NnF5pE5K1']]], [['cWqLvdsd']]); - stella.autocalc([['zcckgdsd', ['VemdciGizc8', 'ClRyt3CO2CU', 'Ys91wCxDGwp', 'hLjLWfjGWpK', 'gWPhDYzmbw5', 'IsuCX2xSvKQ', 'oBVan2Rcsdj', 'ew4H9zzs0GI', 'fpnwXTQGmD5', 'eVb1NqOEUoq', 'LokBv4egnfg', 'zzHeHMx5Mh1', 'dywO69YrrUq', 'Lq9WappoJ2W', 'ewxqtAm93uz', 'T7F0DwyrbBV', 'zDtqexNpaj8', 'uPn8wdfqpnK', 'i9N7JojYiQO', 'Rxd6hW5bqRu', 'hjgWcKahM96', 'V6ykris04Kr', 'o3zyOwZyxi7', 'vUUk6jQrXdb', 'rHymehDGb3n', 'wem5QqoRkkh']]], [['px2d0dsd']]); - stella.autocalc([['zcckgdsd', ['HTuFkqNl46u', 'GJBPjJZBrRn', 'pVFmF7dKnTq', 'GcAEOo6pgjG', 'tNnfZGycqoK', 'gcWll55WCHc', 'BiJwnz9vw41', 'mA6G2IcNQ5s', 'rL9fEh5MSHf', 'fN5EhNea5na', 'WUOsioCfTH1', 'aReRE4UUoKW', 'zRdpU5xlOQI', 'EsEgz70ex5M', 'FsaFnYgYYiE', 'XDgqQlbNOma', 'XqbMOMJhdoo', 'JqROtRoCBHP', 'mN07ApGjAKh', 'GNrMxECWqDp', 'fu8H9OdUyZ6', 'XEIYBLvAzIb', 'O4M73r7CEs1', 'pW32ZkMbRSO', 'G6ksZzf4PuP', 'tb2OliToe2g']]], [['u3VpZdsd']]); - stella.autocalc([['zcckgdsd', ['HTuFkqNl46u', 'GJBPjJZBrRn', 'pVFmF7dKnTq', 'GcAEOo6pgjG', 'tNnfZGycqoK', 'gcWll55WCHc', 'BiJwnz9vw41', 'mA6G2IcNQ5s', 'rL9fEh5MSHf', 'fN5EhNea5na', 'WUOsioCfTH1', 'aReRE4UUoKW', 'zRdpU5xlOQI', 'EsEgz70ex5M', 'FsaFnYgYYiE', 'XDgqQlbNOma', 'XqbMOMJhdoo', 'JqROtRoCBHP', 'mN07ApGjAKh', 'GNrMxECWqDp', 'fu8H9OdUyZ6', 'XEIYBLvAzIb', 'O4M73r7CEs1', 'pW32ZkMbRSO', 'G6ksZzf4PuP', 'tb2OliToe2g']], ['zcckgdsd', ['VemdciGizc8', 'ClRyt3CO2CU', 'Ys91wCxDGwp', 'hLjLWfjGWpK', 'gWPhDYzmbw5', 'IsuCX2xSvKQ', 'oBVan2Rcsdj', 'ew4H9zzs0GI', 'fpnwXTQGmD5', 'eVb1NqOEUoq', 'LokBv4egnfg', 'zzHeHMx5Mh1', 'dywO69YrrUq', 'Lq9WappoJ2W', 'ewxqtAm93uz', 'T7F0DwyrbBV', 'zDtqexNpaj8', 'uPn8wdfqpnK', 'i9N7JojYiQO', 'Rxd6hW5bqRu', 'hjgWcKahM96', 'V6ykris04Kr', 'o3zyOwZyxi7', 'vUUk6jQrXdb', 'rHymehDGb3n', 'wem5QqoRkkh']]], [['uSujTdsd']]); - meany.autoexclude([['smoqedsd']], [['maqkadsd']]); - meany.autoexclude([['qyoyedsd']], [['leyiwdsd']]); - meany.autoexclude([['jgsgadsd']], [['nymqkdsd']]); - stella.autocalc([['jqoaqdsd']], [['gasgcdsd']]); - stella.autocalc([['esgqcdsd']], [['bwgysdsd']]); - stella.autocalc([['zcckgdsd']], [['S6Kucdsd']]); - stella.autocalc([['fsewcdsd']], [['KuIvvdsd']]); - stella.autocalc([['gaswgdsd']], [['yFpMTdsd']]); - stella.autocalc([['smoqexta'], ['maqkaxta'], ['qyoyexta'], ['leyiwxta'], ['jgsgaxta'], ['nymqkxta'], ['zcckgxta', ['HTuFkqNl46u', 'GJBPjJZBrRn', 'pVFmF7dKnTq', 'GcAEOo6pgjG', 'tNnfZGycqoK', 'gcWll55WCHc', 'BiJwnz9vw41', 'mA6G2IcNQ5s', 'rL9fEh5MSHf', 'fN5EhNea5na', 'WUOsioCfTH1', 'aReRE4UUoKW', 'zRdpU5xlOQI', 'EsEgz70ex5M', 'FsaFnYgYYiE', 'XDgqQlbNOma', 'XqbMOMJhdoo', 'JqROtRoCBHP', 'mN07ApGjAKh', 'GNrMxECWqDp', 'fu8H9OdUyZ6', 'XEIYBLvAzIb', 'O4M73r7CEs1', 'pW32ZkMbRSO', 'G6ksZzf4PuP', 'tb2OliToe2g']], ['zcckgxta', ['VemdciGizc8', 'ClRyt3CO2CU', 'Ys91wCxDGwp', 'hLjLWfjGWpK', 'gWPhDYzmbw5', 'IsuCX2xSvKQ', 'oBVan2Rcsdj', 'ew4H9zzs0GI', 'fpnwXTQGmD5', 'eVb1NqOEUoq', 'LokBv4egnfg', 'zzHeHMx5Mh1', 'dywO69YrrUq', 'Lq9WappoJ2W', 'ewxqtAm93uz', 'T7F0DwyrbBV', 'zDtqexNpaj8', 'uPn8wdfqpnK', 'i9N7JojYiQO', 'Rxd6hW5bqRu', 'hjgWcKahM96', 'V6ykris04Kr', 'o3zyOwZyxi7', 'vUUk6jQrXdb', 'rHymehDGb3n', 'wem5QqoRkkh']]], [['mxrb0xta']]); - stella.autocalc([['zcckgxta', ['VemdciGizc8', 'ClRyt3CO2CU', 'Ys91wCxDGwp', 'hLjLWfjGWpK', 'gWPhDYzmbw5', 'IsuCX2xSvKQ', 'oBVan2Rcsdj', 'ew4H9zzs0GI', 'fpnwXTQGmD5', 'eVb1NqOEUoq', 'LokBv4egnfg', 'zzHeHMx5Mh1', 'dywO69YrrUq', 'Lq9WappoJ2W', 'ewxqtAm93uz', 'T7F0DwyrbBV', 'zDtqexNpaj8', 'uPn8wdfqpnK', 'i9N7JojYiQO', 'Rxd6hW5bqRu', 'hjgWcKahM96', 'V6ykris04Kr', 'o3zyOwZyxi7', 'vUUk6jQrXdb', 'rHymehDGb3n', 'wem5QqoRkkh']], ['smoqexta', ['yPnEtFpqtt5', 'z6KOjZfpQcx', 'Z2jmPAIHrel', 'lbfOsYfiypV', 'NGYepD2stMO', 'OdBhPUGWQ5m', 'NlZJe4oDEFK', 'Q27GSYLDkGk', 'FmEMWg0TP1j', 'eSoHGswqAsd', 'RnaDS67VAvQ', 'irSyYG6qqBZ', 'renXtk3VqTM', 'KY39qXVMOj1', 'QdKC55saRRw', 'KAyyHkzmuL1', 'HYtbCWnAdG9', 'zrFplyGIhtL', 'fhtynTWtvqv', 'tDVcPbjxTPK', 'rZH5lIUD4nH', 'PPg7Yzjq0oF', 'BoN2WhPnYl1', 'MMyMkF05moq', 'Y2GIRv9dnAI', 'T6zWRBnlJhR']], ['maqkaxta', ['PrS9RqE1nmz', 'mq33twqgDWZ', 'LnYfq7wx1hN', 'WhxSPg1g9Og', 'XDTwB2A1yY0', 'E2NnF5pE5K1']], ['qyoyexta', ['yPnEtFpqtt5', 'z6KOjZfpQcx', 'Z2jmPAIHrel', 'lbfOsYfiypV', 'NGYepD2stMO', 'OdBhPUGWQ5m', 'NlZJe4oDEFK', 'Q27GSYLDkGk', 'FmEMWg0TP1j', 'eSoHGswqAsd', 'RnaDS67VAvQ', 'irSyYG6qqBZ', 'renXtk3VqTM', 'KY39qXVMOj1', 'QdKC55saRRw', 'KAyyHkzmuL1', 'HYtbCWnAdG9', 'zrFplyGIhtL', 'fhtynTWtvqv', 'tDVcPbjxTPK', 'rZH5lIUD4nH', 'PPg7Yzjq0oF', 'BoN2WhPnYl1', 'MMyMkF05moq', 'Y2GIRv9dnAI', 'T6zWRBnlJhR']], ['leyiwxta', ['PrS9RqE1nmz', 'mq33twqgDWZ', 'LnYfq7wx1hN', 'WhxSPg1g9Og', 'XDTwB2A1yY0', 'E2NnF5pE5K1']], ['jgsgaxta', ['yPnEtFpqtt5', 'z6KOjZfpQcx', 'Z2jmPAIHrel', 'lbfOsYfiypV', 'NGYepD2stMO', 'OdBhPUGWQ5m', 'NlZJe4oDEFK', 'Q27GSYLDkGk', 'FmEMWg0TP1j', 'eSoHGswqAsd', 'RnaDS67VAvQ', 'irSyYG6qqBZ', 'renXtk3VqTM', 'KY39qXVMOj1', 'QdKC55saRRw', 'KAyyHkzmuL1', 'HYtbCWnAdG9', 'zrFplyGIhtL', 'fhtynTWtvqv', 'tDVcPbjxTPK', 'rZH5lIUD4nH', 'PPg7Yzjq0oF', 'BoN2WhPnYl1', 'MMyMkF05moq', 'Y2GIRv9dnAI', 'T6zWRBnlJhR']], ['nymqkxta', ['PrS9RqE1nmz', 'mq33twqgDWZ', 'LnYfq7wx1hN', 'WhxSPg1g9Og', 'XDTwB2A1yY0', 'E2NnF5pE5K1']]], [['oZrr7xta']]); - stella.autocalc([['zcckgxta', ['VemdciGizc8', 'ClRyt3CO2CU', 'Ys91wCxDGwp', 'hLjLWfjGWpK', 'gWPhDYzmbw5', 'IsuCX2xSvKQ', 'oBVan2Rcsdj', 'ew4H9zzs0GI', 'fpnwXTQGmD5', 'eVb1NqOEUoq', 'LokBv4egnfg', 'zzHeHMx5Mh1', 'dywO69YrrUq', 'Lq9WappoJ2W', 'ewxqtAm93uz', 'T7F0DwyrbBV', 'zDtqexNpaj8', 'uPn8wdfqpnK', 'i9N7JojYiQO', 'Rxd6hW5bqRu', 'hjgWcKahM96', 'V6ykris04Kr', 'o3zyOwZyxi7', 'vUUk6jQrXdb', 'rHymehDGb3n', 'wem5QqoRkkh']]], [['sTeLWxta']]); - stella.autocalc([['zcckgxta', ['HTuFkqNl46u', 'GJBPjJZBrRn', 'pVFmF7dKnTq', 'GcAEOo6pgjG', 'tNnfZGycqoK', 'gcWll55WCHc', 'BiJwnz9vw41', 'mA6G2IcNQ5s', 'rL9fEh5MSHf', 'fN5EhNea5na', 'WUOsioCfTH1', 'aReRE4UUoKW', 'zRdpU5xlOQI', 'EsEgz70ex5M', 'FsaFnYgYYiE', 'XDgqQlbNOma', 'XqbMOMJhdoo', 'JqROtRoCBHP', 'mN07ApGjAKh', 'GNrMxECWqDp', 'fu8H9OdUyZ6', 'XEIYBLvAzIb', 'O4M73r7CEs1', 'pW32ZkMbRSO', 'G6ksZzf4PuP', 'tb2OliToe2g']]], [['aUBmpxta']]); - stella.autocalc([['zcckgxta', ['HTuFkqNl46u', 'GJBPjJZBrRn', 'pVFmF7dKnTq', 'GcAEOo6pgjG', 'tNnfZGycqoK', 'gcWll55WCHc', 'BiJwnz9vw41', 'mA6G2IcNQ5s', 'rL9fEh5MSHf', 'fN5EhNea5na', 'WUOsioCfTH1', 'aReRE4UUoKW', 'zRdpU5xlOQI', 'EsEgz70ex5M', 'FsaFnYgYYiE', 'XDgqQlbNOma', 'XqbMOMJhdoo', 'JqROtRoCBHP', 'mN07ApGjAKh', 'GNrMxECWqDp', 'fu8H9OdUyZ6', 'XEIYBLvAzIb', 'O4M73r7CEs1', 'pW32ZkMbRSO', 'G6ksZzf4PuP', 'tb2OliToe2g']], ['zcckgxta', ['VemdciGizc8', 'ClRyt3CO2CU', 'Ys91wCxDGwp', 'hLjLWfjGWpK', 'gWPhDYzmbw5', 'IsuCX2xSvKQ', 'oBVan2Rcsdj', 'ew4H9zzs0GI', 'fpnwXTQGmD5', 'eVb1NqOEUoq', 'LokBv4egnfg', 'zzHeHMx5Mh1', 'dywO69YrrUq', 'Lq9WappoJ2W', 'ewxqtAm93uz', 'T7F0DwyrbBV', 'zDtqexNpaj8', 'uPn8wdfqpnK', 'i9N7JojYiQO', 'Rxd6hW5bqRu', 'hjgWcKahM96', 'V6ykris04Kr', 'o3zyOwZyxi7', 'vUUk6jQrXdb', 'rHymehDGb3n', 'wem5QqoRkkh']]], [['Cmy2Yxta']]); - meany.autoexclude([['smoqexta']], [['maqkaxta']]); - meany.autoexclude([['qyoyexta']], [['leyiwxta']]); - meany.autoexclude([['jgsgaxta']], [['nymqkxta']]); - stella.autocalc([['jqoaqxta']], [['gasgcxta']]); - stella.autocalc([['esgqcxta']], [['bwgysxta']]); - stella.autocalc([['zcckgxta']], [['LjWZBxta']]); - stella.autocalc([['fsewcxta']], [['iMJ7ixta']]); - stella.autocalc([['gaswgxta']], [['jgscwxta']]); - - - functionloader.loadWithDelay(); - - } else if (functionloader.dataSetToRunFor == ds && functionloader.lastSelectedForm && functionloader.lastSelectedForm == functionloader.identifySelectedForm()) { - // dataSetToRunFor is set, but this appears to be the same form, due to a quirk in DHIS 2 - // that causes dataValuesLoaded to be called twice, so we do nothing - console.log('PEPFAR: MER | dataValuesLoaded with previous ' + ds + ' and the same form, doing nothing'); - functionloader.lastSelectedForm = functionloader.identifySelectedForm(); - $('#PEPFAR_loading').hide(); - - } else if (functionloader.dataSetToRunFor == ds) { - // dataSetToRunFor is set, and either we are not able to determine the last selected form or it's a different form - // Therefore, don't reconstruct the rules, but reload them on the page - console.log('PEPFAR: MER | dataValuesLoaded with previous ' + ds + ', reloading custom JS'); - functionloader.erase(); - functionloader.lastSelectedForm = functionloader.identifySelectedForm(); - qbert.load(); - functionloader.loadWithDelay(); - - } else { - // Due to another quirk in DHIS 2, this javascript might be trying to run for a different form, as DHIS 2 - // may not wipe out custom javascript if the new form is not a custom form or does not have custom javascript. - // Therefore, we delete our variables and reset all of the CSS, JS, and the like - console.log('PEPFAR: MER | ' + functionloader.dataSetToRunFor + ' does not match ' + ds + ', so custom JS should not run; clearing out saved variables'); - functionloader.lastSelectedForm == false; - functionloader.erase(); - meany.kill(); - stella.kill(); - $('#PEPFAR_loading').hide(); - } -} - -functionloader.erase = function () { - qbert.erase(); - meany.erase(); - stella.erase(); - cerulean.erase(); -} - -/** - * After a short delay to allow execution of form display code, load cerulean, stella, and meany - * Then remove the gray background formatting that DHIS2 applied to form fields that were disabled, but no longer are - */ -functionloader.loadWithDelay = function () { - setTimeout(function() { - cerulean.load(); - stella.load(); - meany.load(); - $('.entryfield').each(function(index) { - if ($(this).css('background-color') != 'rgb(255, 255, 255)' && !$(this).hasClass('disabled')) { - $(this).css('background-color', 'rgb(255, 255, 255)'); - } - }); - $('#PEPFAR_loading').hide(); - }, 10); -} - -/** - * Uniquely identify the form, by adding the uid from the org hierarchy to the various selections from the selection box - * and turn them all into a string - */ -functionloader.identifySelectedForm = function () { - var orgUnit = $('#orgUnitTree .selected').parent('li').attr('id'); - if (typeof(orgUnit) !== 'undefined') { - return $('#orgUnitTree .selected').parent('li').attr('id') + ' ' + - Object.values($('#selectedDataSetId,#selectedPeriodId,#category-SH885jaRe0o') - .map(function() { - return $(this).val(); - }).sort() - ).join(' '); - } else { - return false; - } -} - -/** - * MEANY: Mutually Exclusivity Automatic Nickel Yak - * Disables input fields based on user-entered data from rules - * created by mertide.py and established at form load - * @author: Greg Wilson and Ben Guaraldi - * @requires: dhis2 utils - */ - -var meany = {}; - -meany.autoexcludeindex = {}; -meany.autoexcluderules = []; -meany.loaded = false; - -/** - * Load autoexclude rules into meany.autoexcluderules and meany.autoexcludeindex. - * - * meany.autoexcluderules is an array of rules, where one side of the mutually exclusive rule (muex) - * is index 0 and the other side is index 1. Both indices could either be just a specific subindicator id - * (ssid) or an array of ssids and category option combos (coc). - * - * meany.autoexcludeindex is a hash, where the ssid is the key and the value is an array of indices - * of rules from meany.autoexcluderules. If the rule index is negative, it refers to a flipped version - * of the rule represented by the equivalent positive number. - */ -meany.autoexclude = function (left, right) { - // Add the rule to autoexcluderules - meany.autoexcluderules.push([left, right]); - - // Consider each operand of the left side - left.forEach(function(l) { - // l[0] is the ssid, which is the key for autoexcludeindex - // (l[1], if it exists, is an array of cocs to consider; - // any other cocs are ignored) - - // If we haven't seen this ssid, make an empty array for it - if (!(l[0] in meany.autoexcludeindex)) { - meany.autoexcludeindex[l[0]] = []; - } - - // Add this rule to autoexcludeindex - meany.autoexcludeindex[l[0]].push(meany.autoexcluderules.length); - }); - - // Consider each operand of the right side, just like the left side - right.forEach(function(r) { - if (!(r[0] in meany.autoexcludeindex)) { - meany.autoexcludeindex[r[0]] = []; - } - // Create a negative rule index so we know the rule should be flipped - // before evaluating it from the right side's perspective - meany.autoexcludeindex[r[0]].push(-1 * meany.autoexcluderules.length); - }); -} - -/** - * Delete all loaded rules - */ -meany.kill = function () { - meany.autoexcludeindex = {}; - meany.autoexcluderules = []; - meany.loaded = false; -}; - -/** - * Reset all form fields to enabled - */ -meany.erase = function () { - $('.muex_disabled').prop('disabled', false).removeClass('muex_disabled').css('background-color', 'rgb(255, 255, 255)'); - $('.muex_conflict').prop('disabled', false).removeClass('muex_conflict').css('background-color', 'rgb(255, 255, 255)'); - meany.loaded = false; -}; - -/** - * Run all of the rules to potentially disable relevant form fields - */ -meany.load = function () { - // meany.erase should have been run just before this, so all form fields are enabled - - meany.autoexcluderules.forEach(function(rule) { - // Evaluate the rule from both perspectives, to see if anything on the form - // needs to be disabled or enabled - meany.evaluateRuleConsequences([rule[0], rule[1]], false); - meany.evaluateRuleConsequences([rule[1], rule[0]], false); - }); - - meany.loaded = true; -} - -/** - * When a form value is changed, consider each relevant mutual exclusion rule to determine - * whether any form fields need to be hidden or shown - */ -meany.changed = function (dv) { - // Find the particular sub indicator group that was modified using the de and co properties - // of dv from DHIS 2's dataValueSaved function - var ssid = ''; - $('[class*="si_"]').each(function (i, d) { - if ($(this).find('[id^=' + dv.de + '-' + dv.co + ']').length > 0) { - var c = $(this).attr('class'); - ssid = c.substr(c.indexOf('si_') + 3, 8); - return; - } - }); - - if (ssid !== '') { - if($('input[id^=' + dv.de + '-' + dv.co + '-val]').hasClass('muex_conflict')) { - // The recently edited field has a conflict, so perhaps it needs to be disabled - meany.disableOperand([ssid, [dv.co]]); - meany.maybeEnableOperand([ssid, [dv.co]]); - } - if (ssid in meany.autoexcludeindex) { - // If we have rules in the autoexcludeindex for this ssid, operate them - meany.autoexcludeindex[ssid].forEach(function(index) { - meany.evaluateRuleConsequences(meany.getRule(index), dv.co); - }); - } - } -}; - -/** - * Given an index, return the rule that corresponds to that index. - */ -meany.getRule = function (index) { - if (index > 0) { - // This rule has a positive index, so it is not flipped - return meany.autoexcluderules[index - 1]; - - } else { - // If the rule's index is negative, then it's actually saying swap the sides of the - // positive index rule. So if the rule is "values in A mean that there should be - // no values in B" and flip it to "values in B mean there should be no values in A" - - // So first, find the rule to flip, which is -1 times the index minus 1 - var original = meany.autoexcluderules[(-1 * index) - 1]; - - // Now, flip the rule and return it - return [original[1], original[0]]; - } -} - -/** - * Consider a specific mutual exclusion rule and decide whether any form fields need to be hidden or shown. - * - * This function only considers one direction of the mutual exclusion, so it's looking at the fields on the left side - * to determine whether the fields on the right side should be hidden or shown. - */ -meany.evaluateRuleConsequences = function (rule, coc) { - var hasValues = false; - - // Consider each operand on the left side - for (var o = 0; o < rule[0].length; o++) { - var lcocs = rule[0][o][1]; - // If we're targeting a rule to specific category option combos and this data value - // isn't associated with that category option combo, we can ignore it - if (coc && lcocs && !lcocs.includes(coc)) { - continue; - } - hasValues = meany.checkValues(rule[0][o]); - // If any of the left side has values, we can stop looking for values - if (hasValues) { - break; - } - } - - for (var o = 0; o < rule[1].length; o++) { - // We disable the right side if there were any values in the left side; - // otherwise, we maybe enable it - if (hasValues) { - meany.disableOperand(rule[1][o]); - } else { - meany.maybeEnableOperand(rule[1][o]); - } - } -} - -/** - * Consider an operand (split into an ssid and an array of cocs) and determine whether it has any values. - */ -meany.checkValues = function (operand) { - var ssid, cocs; - [ssid, cocs] = operand; - - // Examine all instances of this ssid (which is probably just one) - for (var i = 0; i < $('.si_' + ssid).length; i++) { - // Get all the entry divs - var entryDivs = $('.si_' + ssid + ':eq(' + i + ')').find('[class*=Form_EntryField]'); - for (var j = 0; j < entryDivs.length; j++) { - var entryDiv = entryDivs[j]; - var input = $(entryDiv).find('input'); - - // Skip the total fields. Also, if we're only selecting a specific category option combo, - // check to see whether this input has an id and whether that coc is referenced in that id - if ($(entryDiv).attr('class').indexOf('tot') === -1 && (!cocs || meany.idHasCoc($(input).attr('id'), cocs))) { - var val = $(input).val(); - if (typeof(val) === 'undefined') { - val = $(entryDiv).find('.val').text(); - if (typeof(val) !== 'undefined' && val != '') { - return true; - } - } else if (val != '') { - return true; - } - } - } - } - return false; -}; - -/** - * Determine whether a given id references a coc - */ -meany.idHasCoc = function (id, cocs) { - if (typeof id === 'undefined') { - return false; - } - for (var c = 0; c < cocs.length; c++) { - if (id.indexOf(cocs[c]) !== -1) { - return true; - } - } - return false; -} - -/** - * Check to see whether one side of a rule has an operand that matches - * a particular ssid and coc - */ -meany.operandMatch = function (side, ssid, coc) { - for (var o = 0; o < side.length; o++) { - if (side[o][0] === ssid && (typeof side[o][1] === 'undefined' || side[o][1].includes(coc))) { - return true; - } - } - return false; -} - -/** - * Check to see whether a rule indicates that a certain field (defined by ssid and coc) - * should remain disabled - */ -meany.keepCocDisabled = function (rule, ssid, coc) { - if (coc === 'all' || meany.operandMatch(rule[0], ssid, coc)) { - for (var o = 0; o < rule[1].length; o++) { - if (meany.checkValues(rule[1][o])) { - return true; - } - } - } - return false; -}; - -/** - * Consider an operand that has had one mutual exclusion removed to see if it has other mutual exclusions - * restricting it, or if it should be enabled. Since any rule can target any coc, this must be done on a - * field-by-field basis. - */ -meany.maybeEnableOperand = function (operand) { - // During load, we enable all fields and then progressively disable them, - // so we don't need to run this function if we haven't finished loading yet - if (!meany.loaded) { - return; - } - - var ssid, cocs; - [ssid, cocs] = operand; - if (ssid !== '' && ssid in meany.autoexcludeindex) { - var keepCocDisabled = {}; - if (!cocs) { - cocs = ['all']; - } - for (var c = 0; c < cocs.length; c++) { - keepCocDisabled[cocs[c]] = false; - - // Since mutually exclusive rules are symmetric, we can check to see if any fields - // require this field to remain disabled, and if not, enable it - for (var i = 0; i < meany.autoexcludeindex[ssid].length; i++) { - var index = meany.autoexcludeindex[ssid][i]; - var rule = meany.getRule(index); - keepCocDisabled[cocs[c]] = meany.keepCocDisabled(rule, ssid, cocs[c]); - if (keepCocDisabled[cocs[c]]) { - break; - } - } - } - - for (c = 0; c < cocs.length; c++) { - if (!keepCocDisabled[cocs[c]]) { - if (cocs[c] == 'all') { - $('.si_' + ssid).find('input:not([readonly])').prop('disabled', false).removeClass('muex_disabled').removeClass('muex_conflict'); - } else { - $('.si_' + ssid).find('input[id*=' + cocs[c] + ']:not([readonly])').prop('disabled', false).removeClass('muex_disabled').removeClass('muex_conflict'); - } - } - } - } -}; - -/** - * Disable a particular mutually exclusive operand - */ -meany.disableOperand = function (operand) { - var ssid, cocs; - [ssid, cocs] = operand; - if (cocs) { - cocs.forEach(function(c) { - $('.si_' + ssid).find('input[id*=' + c + ']:not([readonly])').filter(function() { return this.value != ''; }).prop('disabled', false).addClass('muex_conflict').removeClass('muex_disabled'); - $('.si_' + ssid).find('input[id*=' + c + ']:not([readonly])').filter(function() { return this.value == ''; }).prop('disabled', true).addClass('muex_disabled').removeClass('muex_conflict'); - }); - } else { - // Just disable the whole thing - $('.si_' + ssid).find('input:not([readonly])').filter(function() { return this.value != ''; }).prop('disabled', false).addClass('muex_conflict').removeClass('muex_disabled'); - $('.si_' + ssid).find('input:not([readonly])').filter(function() { return this.value == ''; }).prop('disabled', true).addClass('muex_disabled').removeClass('muex_conflict'); - } -}; -$(function () { - $('.PEPFAR_Form_Title').click(function (e) { - var SH = this.SH ^= 1; // "Simple toggler" - $(this).toggleClass("expanded") - .next(".PEPFAR_Form_Collapse").slideToggle(); - }); - - $('.PEPFAR_Form_ShowHide').click(function (e) { - var SH = this.SH ^= 1; // "Simple toggler" - //$(this).text(SH ? 'Expand All' : 'Collapse All') - $(this).toggleClass("expanded"); - if (SH) - $(this).parent().find(".PEPFAR_Form_Title").addClass('expanded') - .next(".PEPFAR_Form_Collapse").slideUp(); - else - $(this).parent().find(".PEPFAR_Form_Title", this.parent).removeClass('expanded') - .next(".PEPFAR_Form_Collapse").slideDown(); - }); -}); \ No newline at end of file diff --git a/external/jquery-ui.min.js b/external/jquery-ui.min.js deleted file mode 100644 index 83251ac..0000000 --- a/external/jquery-ui.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/*! jQuery UI - v1.12.1 - 2016-09-14 -* http://jqueryui.com -* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js -* Copyright jQuery Foundation and other contributors; Licensed MIT */ - -(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("
"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(m.inline?m.dpDiv.parent()[0]:m.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}});var c="ui-effects-",u="ui-effects-style",d="ui-effects-animated",p=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("

")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(d)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(c+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(c+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("

").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(u,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(u)||"",t.removeData(u)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(c+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=c+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(d),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(d,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n) - }}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("
").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var f=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("
").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var f;t.uiBackCompat!==!1&&(f=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)})),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t(""),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n; - this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("
    ").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("
    ").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("
    ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(t("
    ").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("
    ").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var g=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"
    ",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(g,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t(""),this.iconSpace=t(" "),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"").addClass(this._triggerClass).html(o?t("").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t(""),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),m===n&&(m=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s)) - }},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?""+i+"":q?"":""+i+"",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?""+n+"":q?"":""+n+"",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"",l=j?"
    "+(Y?h:"")+(this._isInRange(t,r)?"":"")+(Y?"":h)+"
    ":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="
    "}for(T+="
    "+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||C>0,f,g)+"
    "+"",P=u?"":"",w=0;7>w;w++)M=(w+c)%7,P+="";for(T+=P+"",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="",W=u?"":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+""}Z++,Z>11&&(Z=0,te++),T+="
    "+this._get(t,"weekHeader")+"=5?" class='ui-datepicker-week-end'":"")+">"+""+p[M]+"
    "+this._get(t,"calculateWeek")(A)+""+(F&&!_?" ":L?""+A.getDate()+"":""+A.getDate()+"")+"
    "+(X?"
    "+(U[0]>0&&C===U[1]-1?"
    ":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="
    ",y="";if(o||!m)y+=""+a[e]+"";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+=""}if(v||(b+=y+(!o&&m&&_?"":" ")),!t.yearshtml)if(t.yearshtml="",o||!_)b+=""+i+"";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":" ")+y),b+="
    "},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var _=!1;t(document).on("mouseup",function(){_=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!_){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),_=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,_=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("
    ").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())} - },_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.lefti[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
    ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
    "),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
    "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog - },disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("
    ").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("
    "),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("").button({label:t("").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html(" ")},_createButtonPane:function(){this.uiDialogButtonPane=t("
    "),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("
    ").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("
    ").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("
    ").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&v(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var v=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&v(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=v(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("
    ").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("
    ").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("
    "),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("").parent().append("")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("
    ").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("
    ").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("
    ").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("
    ").attr("role","tooltip"),s=t("
    ").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip}); \ No newline at end of file diff --git a/external/jquery.min.js b/external/jquery.min.js deleted file mode 100644 index 2fbd389..0000000 --- a/external/jquery.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), - a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), - null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("', '') - console.log(`Evaluating external script ${script.substr(0, 100)}`); - (window as any).eval(script); - } catch (e){ - console.error('cannot load external javascripts'); - console.error(e); - } -} - -function cleanup(){ - let dynamicScripts = document.getElementsByClassName("runtimeLoadedFormJS"); - let scriptsCount = dynamicScripts.length; - for (let i=0; i { - return cleanup; - }); - loadStaticScript(scripts[0]); - waitUntil(200, 20, ()=>{ - return !!(window as any).dhis2 && !!(window as any).dhis2.de; - }, (result)=>{ - loadDynamicScripts(formHtml); - loadStaticScript(scripts[1]); - }); - return -
    -
    - ; -} - -export default React.memo(FormRender); \ No newline at end of file diff --git a/src/modules/action/components/mechanism/form/formSelect.component.tsx b/src/modules/action/components/mechanism/form/formSelect.component.tsx deleted file mode 100644 index 48eded5..0000000 --- a/src/modules/action/components/mechanism/form/formSelect.component.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react"; -import FormContent from "./formContent.component"; -import api from "../../../../shared/services/api.service"; -import DatasetSelect from "./datasetSelect.component"; -import {CircularProgress, Divider} from "@material-ui/core"; -import {getWorkflowNameById} from "../../../../shared/services/workflowService"; -import {MechanismMeta} from "../../../../shared/models/mechanism.model"; - - -function getDatasetUrl(workflow: string){ - return `/dataApprovalWorkflows.json?fields=id,name,dataSets[id,name]&paging=false&filter=id:eq:${workflow}` -} - -export default class FormSelect extends React.Component< - {workflow: string, period: string, userOu: string, mechanismMetas: MechanismMeta[]}, - {selectedDataset: {name?: string, id?: string}, datasets: {name: string, id: string}[]} - > { - constructor(props){ - super(props); - this.state = {selectedDataset: {}, datasets: null}; - api.get('/dataStore/approvals/periodSettings').then(res=>{ - let recommendedDatasets = res[getWorkflowNameById(props.workflow)][props.period].datasets; - api.get(getDatasetUrl(props.workflow)).then(res=>{ - let allDatasets = res.dataApprovalWorkflows[0].dataSets; - let actualDatasets; - if (!recommendedDatasets || recommendedDatasets.length ===0) actualDatasets = allDatasets; - else { - actualDatasets = allDatasets.filter(did=>recommendedDatasets.indexOf(did.id)>-1) - } - this.setState({ - datasets: actualDatasets, - selectedDataset: actualDatasets[0] - }); - }); - }); - } - - onDsChange = (dataset)=>{ - this.setState({selectedDataset: dataset}); - }; - - render(){ - if (!this.state.selectedDataset.id) return ; - return
    - -
    - - -
    - } -} \ No newline at end of file diff --git a/src/modules/action/components/mechanism/mechanismInfo.component.tsx b/src/modules/action/components/mechanism/mechanismInfo.component.tsx deleted file mode 100644 index 6fd4ca5..0000000 --- a/src/modules/action/components/mechanism/mechanismInfo.component.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from "react"; -import {MechanismInfo as MechanismInfoModel, MechanismState} from "../../../shared/models/mechanism.model"; -import {Table, TableBody, TableCell, TableRow} from "@material-ui/core"; -import ShowMore from "./showMore.component"; - -export default function MechanismInfo({mechanismState, mechanismInfo}:{mechanismState: MechanismState, mechanismInfo: MechanismInfoModel}){ - if (!mechanismInfo || !mechanismState) return null; - return( - - - - Name - {mechanismInfo.name} - - - OU - {mechanismInfo.ou} - - - Agency - {mechanismInfo.agency} - - - Partner - - - - Status - {mechanismState.status} - - -
    - ); -} \ No newline at end of file diff --git a/src/modules/action/components/mechanism/mechanismTabs.component.tsx b/src/modules/action/components/mechanism/mechanismTabs.component.tsx deleted file mode 100644 index 2befe3b..0000000 --- a/src/modules/action/components/mechanism/mechanismTabs.component.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import React from "react"; -import {Paper, Tab, Tabs, Typography} from "@material-ui/core"; -import MechanismInfo from "./mechanismInfo.component"; -import MechanismModel, {MechanismState} from "../../../shared/models/mechanism.model"; -import FormSelect from "./form/formSelect.component"; -import Loading from "../../../shared/components/loading.component"; - - -function lengthWarning(mechanismsLength: number, clicks: number){ - if (mechanismsLength<=30) return null; - if (clicks<8) return null; - return - Note: Mechanism preview is limited to 30 mechanisms only - ; -} - -function renderOverviewTab(mechanismNr){ - if (mechanismNr>1) return ; -} - -function renderMechanismInfo(openTab:number, workflow:string, period:string, userOu:string, mechanismState:MechanismState, mechanisms:MechanismModel[]){ - if (mechanisms.length>1 && openTab===0) return; - if (mechanisms.length>1) openTab = openTab - 1; - return - -
    - -
    -} - -function extractData(mechanisms: MechanismModel[], property: string){ - let [p1,p2] = property.split('.'); - let values = mechanisms.map(m=>m[p1][p2]).filter(s=>s); - let uniqueValues = [...new Set(values)]; - return uniqueValues.sort().join(', '); -} - -function renderMechanismOverview(openTab:number, workflow:string, period:string, userOu:string, mechanismState:MechanismState, mechanisms:MechanismModel[]) { - if (mechanisms.length<=1 || openTab!==0) return; - let aggregatedInfo = { - name: 'All Mechanisms Overview', - ou: extractData(mechanisms, 'info.ou'), - agency: extractData(mechanisms, 'info.agency'), - partner: extractData(mechanisms, 'info.partner'), - }; - return - -
    - m.meta)}/> -
    -} - -export default function MechanismTabs({workflow, period, userOu, mechanisms, mechanismState}:{workflow: string, period: string, userOu: string, mechanisms: MechanismModel[], mechanismState: MechanismState}){ - const [openTab, setOpenTab] = React.useState(0); - const [clicks, userClicked] = React.useState(0); - if (!mechanisms[0].info) return ; - return - setOpenTab(tabIndex)} variant="scrollable" onClick={()=>userClicked(clicks+1)}> - {renderOverviewTab(mechanisms.length)} - {mechanisms.slice(0, 29).map(mechanism=>)} - - {lengthWarning(mechanisms.length, clicks)} - {renderMechanismInfo(openTab, workflow, period, userOu, mechanismState, mechanisms)} - {renderMechanismOverview(openTab, workflow, period, userOu, mechanismState, mechanisms)} - ; -} \ No newline at end of file diff --git a/src/modules/action/components/mechanism/showMore.component.tsx b/src/modules/action/components/mechanism/showMore.component.tsx deleted file mode 100644 index ec93755..0000000 --- a/src/modules/action/components/mechanism/showMore.component.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import React, {useState} from 'react'; -import {Button} from "@material-ui/core"; - -const cutOff = 300; - -const styles={ - button: { - display: 'block' - } -}; - -function renderText(text:string, showMore:boolean){ - if (showMore) return text; - else return text.substr(0, cutOff)+'...'; -} - -function renderShowMoreButton(showMore: boolean, setShowMore:(boolean)=>void){ - if (!showMore) return ; -} - -export default function ShowMore({text}:{text:string}) { - let [showMore, setShowMore] = useState(false); - if (!text) return null; - if (text.length{text}; - return - {renderText(text, showMore)} - {renderShowMoreButton(showMore,setShowMore)} - ; -} \ No newline at end of file diff --git a/src/modules/action/components/section.component.tsx b/src/modules/action/components/section.component.tsx deleted file mode 100644 index 106273f..0000000 --- a/src/modules/action/components/section.component.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; -import {Chip, Divider, Paper} from "@material-ui/core"; - -export default function Section({title, id, children}:{title:string, id?:string, children:any}) { - return - - - {children} - ; -} \ No newline at end of file diff --git a/src/modules/action/components/step/step.component.tsx b/src/modules/action/components/step/step.component.tsx deleted file mode 100644 index 12bc1af..0000000 --- a/src/modules/action/components/step/step.component.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from "react"; -import {Stepper, StepLabel, makeStyles, Theme, createStyles} from "@material-ui/core"; -import MuiStep from "@material-ui/core/Step"; -import {getWorkflowTypeById} from "../../../shared/services/workflowService"; -import {MechanismState} from "../../../shared/models/mechanism.model"; -import Loading from "../../../shared/components/loading.component"; - - -const useStyles = makeStyles((theme: Theme) => - createStyles({ - root: { - padding: '20px 0px 10px 0px', - }, - }), -); - -const merSteps = [ - 'pending at partner', - 'submitted by partner', - 'accepted by agency', - 'submitted by agency', - 'accepted by inter-agency', - 'submitted by inter-agency', - 'accepted by global' -]; - -const erSteps = [ - 'pending at partner', - 'submitted by partner', - 'accepted by agency', - 'submitted by agency', - 'accepted by agency hq', - 'submitted by agency hq', - 'accepted by global' -]; - -function getStepsByWorkflowType(workflowType: string){ - switch (workflowType){ - case 'MER': return merSteps; - case 'ER': return erSteps; - default: throw new Error('invalid user type'); - } -} - -function getSteps(userType: string, workflowType: string):string[]{ - let lastStep; - if (userType==='partner') lastStep = 'accepted by agency'; - if (userType==='agency' && workflowType==='MER') lastStep = 'accepted by inter-agency'; - if (userType==='agency' && workflowType==='ER') lastStep = 'accepted by agency hq'; - if (userType==='inter-agency' || userType==='agency hq') lastStep = 'accepted by global'; - if (userType==='global') lastStep = 'accepted by global'; - const steps = getStepsByWorkflowType(workflowType); - return steps.slice(0,steps.indexOf(lastStep)+1); -} - -function renderSteps(userType: string, workflowType: string){ - return getSteps(userType, workflowType).map(step=> - {step} - ) -} - -function getStepNr(status: string, workflowType: string){ - return getStepsByWorkflowType(workflowType).indexOf(status); -} - -export default function Step({workflow, mechanismState, userType}:{workflow: string, mechanismState: MechanismState, userType: string}){ - const classes = useStyles(); - if (!mechanismState) return ;; - if (!userType) return null; - const workflowType = getWorkflowTypeById(workflow); - return( - - {renderSteps(userType, workflowType)} - - ); -} \ No newline at end of file diff --git a/src/modules/action/components/workflowOverview.component.tsx b/src/modules/action/components/workflowOverview.component.tsx deleted file mode 100644 index aacb187..0000000 --- a/src/modules/action/components/workflowOverview.component.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import {Table, TableBody, TableCell, TableRow} from "@material-ui/core"; - -export default function WorkflowOverview({workflow, period}: {workflow:string, period:string}) { - return - - - Workflow - {workflow} - - - Period - {period} - - -
    ; -} \ No newline at end of file diff --git a/src/modules/action/css/action.component.css b/src/modules/action/css/action.component.css deleted file mode 100644 index 30b4ad8..0000000 --- a/src/modules/action/css/action.component.css +++ /dev/null @@ -1,3 +0,0 @@ -.MuiPaper-root + .MuiPaper-root { - margin-top: 15px; -} \ No newline at end of file diff --git a/src/modules/action/models/idName.tsx b/src/modules/action/models/idName.tsx deleted file mode 100644 index ffe26d5..0000000 --- a/src/modules/action/models/idName.tsx +++ /dev/null @@ -1 +0,0 @@ -export type idName = {id: string, name: string}; \ No newline at end of file diff --git a/src/modules/action/services/formContent.service.tsx b/src/modules/action/services/formContent.service.tsx deleted file mode 100644 index 1ba0f0d..0000000 --- a/src/modules/action/services/formContent.service.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import {MechanismMeta} from "../../shared/models/mechanism.model"; -import api from "../../shared/services/api.service"; - -// export function getFormContent233(dataSet:string, period:string, userOu:string, mechanismMetas:MechanismMeta[]):Promise{ -// let request = { -// ds: dataSet, -// pe: period, -// ou: userOu, -// filter: 'queryFilter', -// selectedUnitOnly: false -// }; -// let requestUrl = queryString.stringify(request).replace('queryFilter','SH885jaRe0o:'+mechanismMetas.map(mm=>mm.coId).join(';')); -// return api.getFormHtml('/dataSetReport/custom?'+requestUrl); -// } - -export default function getFormContent(dataSet:string, period:string, userOu:string, mechanismMetas:MechanismMeta[]):Promise{ - let request = { - ds: dataSet, - pe: period, - ou: userOu, - dimension: 'SH885jaRe0o:'+mechanismMetas.map(mm=>mm.coId).join(';') - }; - return api.getFormHtml('../../../dhis-web-reporting/generateDataSetReport.action', request); -} \ No newline at end of file diff --git a/src/modules/action/services/mechanism.service.tsx b/src/modules/action/services/mechanism.service.tsx deleted file mode 100644 index af30315..0000000 --- a/src/modules/action/services/mechanism.service.tsx +++ /dev/null @@ -1,135 +0,0 @@ -import api from "../../shared/services/api.service"; -import MechanismModel, { - MechanismInfo, - MechanismMeta, - MechanismState -} from "../../shared/models/mechanism.model"; -import getStatus from "../../shared/services/status.service"; -import {getWorkflowTypeById} from "../../shared/services/workflowService"; - -function mechanismStatesUrl(workflow: string, period: string){ - return `/dataApprovals/categoryOptionCombos?wf=${workflow}` - +`&pe=${period}`; -} - -function mechanismsInfoUrl(mechanismIds:string[]){ - let filter; - if (mechanismIds.length<100) filter = `&filter=categoryOptionCombos.id:in:[${mechanismIds.join(',')}]`; - else filter = '&filter=categories.id:eq:SH885jaRe0o'; - return `/categoryOptions.json` - + '?fields=id,name,organisationUnits[id,name],categoryOptionGroups[id,name,groupSets[id]],categoryOptionCombos[id,name]' - + '&paging=false' - + filter; -} - -function getActionUrl(action){ - switch(action){ - case "submit": return '/dataApprovals/approvals'; - case "accept": return '/dataAcceptances/acceptances'; - case "recall": return '/dataApprovals/unapprovals'; - case "return": return '/dataApprovals/unapprovals'; - } -} - -function catOptUrl(cocIds:string[]):string{ - return `/categoryOptions.json?filter=categoryOptionCombos.id:in:[${cocIds.join(',')}]`; -} - -const agencyGroupSet = 'bw8KHXzxd9i'; -const partnerGroupSet = 'BOyWrF33hiR'; - -function getInfoByGroupSet(mechInfo, groupSetId){ - return mechInfo.categoryOptionGroups.filter(prop=>prop.groupSets[0].id===groupSetId)[0] || {}; -} - -function replaceOuByGlobal(mechanismsMeta: MechanismMeta[]):MechanismMeta[]{ - let result = JSON.parse(JSON.stringify(mechanismsMeta)); - result.forEach((meta: MechanismMeta) => { - meta.ou = 'ybg3MO3hcf4'; - }); - return result; -} - -function movingUp(action:string):boolean{ - return ['submit','accept'].includes(action); -} - -function movingDown(action:string):boolean{ - return ['recall','return'].includes(action); -} - -function fixAgencyHq(mechanismsMeta: MechanismMeta[], action:string, currentStatus:string, workflow:string):MechanismMeta[]{ - if (workflow==='WUD8TApgOu1') { - if (movingUp(action) && ['accepted by agency hq','submitted by agency hq'].includes(currentStatus)) mechanismsMeta = replaceOuByGlobal(mechanismsMeta); - if (movingDown(action) && ['submitted by agency hq','accepted by global'].includes(currentStatus)) mechanismsMeta = replaceOuByGlobal(mechanismsMeta); - } - - return mechanismsMeta; -} - -export function performAction(action: string, workflow: string, period: string, mechanismsMeta: MechanismMeta[], currentStatus:string){ - mechanismsMeta = fixAgencyHq(mechanismsMeta, action, currentStatus, workflow); - return api.post(getActionUrl(action), { - "approvals": mechanismsMeta.map(m=>{return {"aoc": m.cocId, "ou": m.ou}}), - "pe": [period], - "wf": [workflow] - }); -} -function transformCategoryOptionToMechanismInfo(categoryOption:any):MechanismInfo{ - let ouName; - if (categoryOption.organisationUnits[0]) ouName = categoryOption.organisationUnits[0].name; - else { - console.log(categoryOption); - console.error(Error("Mechanism has no assigned OU")); - } - return { - name: categoryOption.name, - ou: ouName, - partner: getInfoByGroupSet(categoryOption, partnerGroupSet).name, - agency: getInfoByGroupSet(categoryOption, agencyGroupSet).name, - }; -} - -export function getMechanismsInfo(mechanismIds: string[]):Promise{ - return api.get(mechanismsInfoUrl(mechanismIds)).then(res=>res.categoryOptions) - .then(categoryOptions=>{ - let result = {}; - categoryOptions.forEach(categoryOption=>{ - result[categoryOption.categoryOptionCombos[0].id] = transformCategoryOptionToMechanismInfo(categoryOption); - }); - return result; - }) - .then(mechanismsInfoMap=>{ - return mechanismIds.map(mechanismId=>{ - return mechanismsInfoMap[mechanismId]; - }) - }); -} - -function transformCOCToMechanismState(workflow, combo){ - return { - status: getStatus(getWorkflowTypeById(workflow), combo.level.level, combo.accepted), - actions: { - submit: combo.permissions.mayApprove, - recall: combo.permissions.mayUnapprove, - accept: combo.permissions.mayAccept, - return: combo.permissions.mayUnaccept, - }, - view: combo.permissions.mayReadData - } -} - -export function getMechanismStates(workflow: string, period: string, mechanisms: MechanismModel[]):Promise{ - return api.get(mechanismStatesUrl(workflow, period)) - .then(res => res.filter(categoryOptionCombo=>mechanisms.map(m=>m.meta.cocId).includes(categoryOptionCombo.id))) - .then(categoryOptionCombos=>categoryOptionCombos.map(coc=>transformCOCToMechanismState(workflow, coc))) - .then(mechanismStates=>{ - if (mechanismStates.every((val, i, arr)=>JSON.stringify(val)===JSON.stringify(arr[0]))) return mechanismStates[0]; - else throw new Error("Mechanisms have different statuses."); - }); -} - - -export function getCoidByCocids(cocIds:string[]):Promise { - return api.get(catOptUrl(cocIds)).then(response=>response.categoryOptions.map(co=>co.id).join(',')); -} \ No newline at end of file diff --git a/src/modules/action/services/user.service.tsx b/src/modules/action/services/user.service.tsx deleted file mode 100644 index b8a72ca..0000000 --- a/src/modules/action/services/user.service.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import api from "../../shared/services/api.service"; - -export function fetchUserType():Promise{ - return api.get('/me?fields=userGroups[name]') - .then(response=>{ - return response.userGroups.map(g=>g.name.toLowerCase()); - }).then(groups=>{ - return groups.filter(name=>name.indexOf('users')>-1||name.indexOf('country team')>-1||name.indexOf('admin')>-1) - }).then(groupNames=>{ - let type; - groupNames.forEach(groupName=> { - if (groupName.indexOf('global users') > -1) type = 'global'; - if (groupName.indexOf('country team') > -1) type = 'inter-agency'; - if (groupName.indexOf('agency') > -1) type = 'agency'; - if (groupName.indexOf('global agency') > -1) type = 'agency hq'; - if (groupName.indexOf('partner') > -1) type = 'partner'; - - if (groupName.indexOf('admin') > -1) type = 'global'; - }); - if (!type) console.error(`can't determine user type: ${JSON.stringify(groupNames)}`); - return type; - }); -} - -export function fetchUserOu():Promise{ - return api.get('/me?fields=organisationUnits').then(response=>response.organisationUnits[0].id); -} \ No newline at end of file diff --git a/src/modules/list/components/filterSelect.component.tsx b/src/modules/list/components/filterSelect.component.tsx deleted file mode 100644 index a15ce56..0000000 --- a/src/modules/list/components/filterSelect.component.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React from "react"; -import {FormControl, Select, MenuItem, InputLabel, Typography} from "@material-ui/core"; -import Filters from "../models/filters.model"; -import {idNameList} from "../../shared/models/idNameList.model"; - -const styles = { - formControl: { - marginRight: 20, - minWidth: 160, - }, - info: { - marginTop: 10 - } -}; - -function renderInfo(selected: Filters){ - if (!selected.ou) return Please specify Organisation Unit; -} - -export default function FilterSelect( - {organisationUnits, workflows, periods, selected, select} - :{organisationUnits:idNameList, workflows:idNameList, periods:idNameList, selected:Filters, select:(property: string, value:string)=>void} - ){ - if(!organisationUnits) return null; - if (!selected.workflow) return null; - return( - - - Workflow - - - - Period - - - - Organisation Unit - - - {renderInfo(selected)} - - ); -} \ No newline at end of file diff --git a/src/modules/list/components/list.component.tsx b/src/modules/list/components/list.component.tsx deleted file mode 100644 index d2caf4d..0000000 --- a/src/modules/list/components/list.component.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import React from "react"; -import {withRouter} from "react-router-dom"; -import queryString from "query-string"; -import {Divider, Typography} from "@material-ui/core"; - -import orgUnits from "../services/orgUnits.service" -import FilterSelect from "./filterSelect.component"; -import MechanismModel from "../../shared/models/mechanism.model"; -import ResultsTabs from "./results/resultsTabs.component"; -import Filters from "../models/filters.model"; -import ListAction from "./listAction.component"; -import WorkflowPeriodService from "../../shared/services/workflowsPeriods.service"; -import {idNameList} from "../../shared/models/idNameList.model"; -import {fetchMechanisms} from "../services/mechanisms.service"; -import Loading from "../../shared/components/loading.component"; - -class List extends React.Component< - {history: any, urlSearchOptions: Filters}, - { - filters: Filters, - mechanisms: MechanismModel[], - selectedMechanisms: MechanismModel[], - selectedAction: string, - workflows: idNameList, - periods: idNameList, - loading: {filters?: boolean, mechanisms?: boolean}, - ous: idNameList - } - > { - workflowPeriodService; - constructor(props){ - super(props); - this.state = { - loading: {filters: true, mechanisms: false}, - filters: new Filters(), - mechanisms: null, - workflows: null, - periods: null, - selectedMechanisms: null, - selectedAction: null, - ous: null - }; - let ouPromise = orgUnits.init().then((ous)=>{ - this.setState({ous: ous}); - this.preselectOu(ous); - }); - - this.workflowPeriodService = new WorkflowPeriodService(); - let workflowsPromise = this.workflowPeriodService.init().then((workflows)=>{ - let selectedWorkflow = workflows[0].id; - let periods = this.workflowPeriodService.getPeriods(selectedWorkflow); - this.setState({loading: {filters: false, mechanisms: false}, workflows: workflows, periods: periods, filters:{workflow: selectedWorkflow, period: periods[0].id, ou: this.state.filters.ou}}); - this.setFilterFromUrl('workflow'); - this.setFilterFromUrl('period'); - }); - - Promise.all([ouPromise,workflowsPromise]).then(()=>this.fetchMechanisms()); - } - - setFilterFromUrl(property:string){ - if (!this.props.urlSearchOptions) return; - let value = this.props.urlSearchOptions[property]; - if (value) this.setFilter(property, value); - } - - preselectOu(ous){ - this.setFilterFromUrl('ou'); - this.setFilter('ou', ous[0].id); - } - fetchMechanisms(){ - setTimeout(()=>{ - let f = this.state.filters; - if (!f.ou || !f.period || !f.workflow) return; - this.setState({mechanisms: null, loading: {mechanisms: true}}); - fetchMechanisms(this.state.filters).then(mechanisms=>{ - this.setState({mechanisms: mechanisms, loading:{mechanisms: false}}); - }); - },0); - } - setFilter(key:string, val:string){ - let filters = this.state.filters; - filters[key] = val; - this.setState({filters: filters}); - if (key==='workflow') { - let periods = this.workflowPeriodService.getPeriods(val); - this.setState({periods: periods}); - this.setFilter('period', periods[0].id); - } - } - onUserSelect = (property:string, value:string)=>{ - this.setFilter(property, value); - this.fetchMechanisms(); - this.updateUrl(); - }; - - updateUrl(){ - setTimeout(()=>{ - let url = queryString.stringify(this.state.filters); - this.props.history.push('/search?'+url); - },0); - } - - renderFilters(){ - if (this.state.loading.filters) return ; - return - } - - getActionUrl():string{ - if (!this.state.selectedMechanisms) return null; - let params = { - period: this.state.filters.period, - workflow: this.state.filters.workflow, - approvalCombos: this.state.selectedMechanisms.map(m=>`${m.meta.ou}:${m.meta.cocId}:${m.meta.coId}:`) - }; - return '/action?' + queryString.stringify(params); - } - - onMechanismsSelected = (mechanisms:MechanismModel[]):void=>{ - this.setState({selectedMechanisms: mechanisms}); - }; - - onSwitchTab = (action)=>{ - this.setState({selectedAction: action, selectedMechanisms: null}); - }; - - renderResults(){ - if (this.state.loading.mechanisms) return ; - if (!this.state.mechanisms) return null; - if (this.state.mechanisms.length===0) return No mechanisms found - return ; - } - - render() { - return ( - - {this.renderFilters()} - - - {this.renderResults()} - - ); - } -} - -export default withRouter(List); \ No newline at end of file diff --git a/src/modules/list/components/listAction.component.tsx b/src/modules/list/components/listAction.component.tsx deleted file mode 100644 index 13d9221..0000000 --- a/src/modules/list/components/listAction.component.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import React from 'react'; -import {Button, Divider, Typography, withTheme, Paper} from "@material-ui/core"; -import {Link} from "react-router-dom"; -import MechanismModel from "../../shared/models/mechanism.model"; -import { FloatProperty, PositionProperty } from 'csstype'; - - -const styles = { - infoText: { - display: 'inline-block', - marginLeft: 15 - }, - error: (theme)=>{return { - backgroundColor: theme.palette.secondary.main, - marginTop: 10, - color: 'white', - position: 'relative' as PositionProperty - }}, - selectOnly: { - float: 'right' as FloatProperty, - color: 'white', - position: 'absolute' as PositionProperty, - right: 10, - top: 4 - } -}; - -function checkMechanismStates(mechanisms: MechanismModel[]):boolean { - let firstStatus = mechanisms[0].state.status; - return mechanisms.every(m=>m.state.status===firstStatus); -} - -function getMajorStatus(mechanisms: MechanismModel[]):string{ - let statuses = mechanisms.map(mech=>mech.state.status); - let statusCounts = {}; - statuses.forEach(s=>{ - if (!statusCounts[s]) statusCounts[s] = 0; - statusCounts[s]++; - }); - let countedStatuses = Object.keys(statusCounts).map(status=>{return{status: status, count: statusCounts[status]}}); - function sortStatuses(s1, s2){ - return s2.count-s1.count; - } - return countedStatuses.sort(sortStatuses)[0].status; -} - -function sameStatusError({mechanisms, theme, onMechanismsSelected}:{mechanisms: MechanismModel[], theme: any, onMechanismsSelected: (mechanisms:MechanismModel[])=>any}){ - if (checkMechanismStates(mechanisms)) return null; - let majorStatus = getMajorStatus(mechanisms); - return - - All selected mechanisms must have the same status to proceed. - -} - -let SameStatusError = withTheme(sameStatusError); - -export default function ListAction({selectedAction, selectedMechanisms, actionUrl, onMechanismsSelected}:{selectedAction: string, selectedMechanisms: MechanismModel[], actionUrl: string, onMechanismsSelected: (mechanisms:MechanismModel[])=>void}){ - if (!selectedAction || !selectedMechanisms || selectedMechanisms.length===0) return null; - return - - - - {selectedMechanisms.length} selected mechanism(s) - -
    - -
    ; -} \ No newline at end of file diff --git a/src/modules/list/components/results/resultsTable.component.tsx b/src/modules/list/components/results/resultsTable.component.tsx deleted file mode 100644 index 3edc92e..0000000 --- a/src/modules/list/components/results/resultsTable.component.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React from 'react'; -import MaterialTable, {MTableBodyRow} from "material-table"; -import {tableIcons} from "./resultsTableIcons"; -import {Typography} from "@material-ui/core"; -import makeId from "../../../shared/services/makeId.service"; -import MechanismModel from "../../../shared/models/mechanism.model"; - -const cellStyle = {padding: "0px 5px"}; - -const tableColumns = [ - {title: "Mechanism", field: "name", cellStyle: cellStyle, defaultSort: "asc" as ('asc' | 'desc')}, - {title: "OU", field: "ou", cellStyle: cellStyle}, - {title: "Agency", field: "agency", cellStyle: cellStyle}, - {title: "Partner", field: "partner", cellStyle: cellStyle}, - {title: "Status", field: "status", cellStyle: cellStyle}, -]; - -const localization = { - toolbar: {nRowsSelected: '{0} mechanism(s) selected'} -}; - -const tableOptions = { - pageSize: 20, - pageSizeOptions: [20, 50, 100], - selection: true, - emptyRowsWhenPaging: false, - thirdSortClick: false -}; - -function tranformMechanisms(allMechanisms:MechanismModel[]){ - return allMechanisms.map(mechanism=>{ - return { - name: mechanism.info.name, - ou: mechanism.info.ou, - agency: mechanism.info.agency, - partner: mechanism.info.partner, - status: mechanism.state.status, - _originalMechanism: mechanism - } - }) -} - - -function extractOrig(cb){ - return function(rowData){ - cb(rowData.map(m=>m._originalMechanism)); - } -} - -function ResultsTable({mechanisms, onMechanismsSelected}:{mechanisms: MechanismModel[], onMechanismsSelected: (mechanisms:MechanismModel[])=>void}) { - return {mechanisms.length} mechanisms} - options={tableOptions} - components={{Row: props=>}} - localization={localization} - onSelectionChange={extractOrig(onMechanismsSelected)} - />; -} - -export default React.memo(ResultsTable); \ No newline at end of file diff --git a/src/modules/list/components/results/resultsTableIcons.tsx b/src/modules/list/components/results/resultsTableIcons.tsx deleted file mode 100644 index db216da..0000000 --- a/src/modules/list/components/results/resultsTableIcons.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; -import { forwardRef } from 'react'; - -import AddBox from '@material-ui/icons/AddBox'; -import KeyboardArrowDown from '@material-ui/icons/KeyboardArrowDown'; -import Check from '@material-ui/icons/Check'; -import ChevronLeft from '@material-ui/icons/ChevronLeft'; -import ChevronRight from '@material-ui/icons/ChevronRight'; -import Clear from '@material-ui/icons/Clear'; -import DeleteOutline from '@material-ui/icons/DeleteOutline'; -import Edit from '@material-ui/icons/Edit'; -import FilterList from '@material-ui/icons/FilterList'; -import FirstPage from '@material-ui/icons/FirstPage'; -import LastPage from '@material-ui/icons/LastPage'; -import Remove from '@material-ui/icons/Remove'; -import SaveAlt from '@material-ui/icons/SaveAlt'; -import Search from '@material-ui/icons/Search'; -import ViewColumn from '@material-ui/icons/ViewColumn'; - -export const tableIcons = { - Add: forwardRef((props, ref) => ), - Check: forwardRef((props, ref) => ), - Clear: forwardRef((props, ref) => ), - Delete: forwardRef((props, ref) => ), - DetailPanel: forwardRef((props, ref) => ), - Edit: forwardRef((props, ref) => ), - Export: forwardRef((props, ref) => ), - Filter: forwardRef((props, ref) => ), - FirstPage: forwardRef((props, ref) => ), - LastPage: forwardRef((props, ref) => ), - NextPage: forwardRef((props, ref) => ), - PreviousPage: forwardRef((props, ref) => ), - ResetSearch: forwardRef((props, ref) => ), - Search: forwardRef((props, ref) => ), - SortArrow: forwardRef((props, ref) => ), - ThirdStateCheck: forwardRef((props, ref) => ), - ViewColumn: forwardRef((props, ref) => ) -}; \ No newline at end of file diff --git a/src/modules/list/components/results/resultsTabs.component.tsx b/src/modules/list/components/results/resultsTabs.component.tsx deleted file mode 100644 index bef016d..0000000 --- a/src/modules/list/components/results/resultsTabs.component.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React from "react"; -import {Badge, Tabs, Tab, Divider} from "@material-ui/core"; -import MechanismModel from "../../../shared/models/mechanism.model"; -import ResultsTable from "./resultsTable.component"; - -const mechanismActions = ['view', 'accept', 'submit', 'recall', 'return']; - -export default class ResultsTabs extends React.Component< - {mechanisms: MechanismModel[], onMechanismsSelected: (mechanisms:MechanismModel[])=>void, onSwitchTab: (string)=>void}, - {action: string, filteredMechanisms: MechanismModel[]} - > { - constructor(props){ - super(props); - this.state = {action: 'view', filteredMechanisms: this.filterMechanisms(this.props.mechanisms, 'view')}; - this.props.onSwitchTab('view'); - } - - switchTab = (ev, tabNr) => { - const action = mechanismActions[tabNr]; - if (this.state.action===action) return; - let filteredMechanisms = this.filterMechanisms(this.props.mechanisms, action); - this.setState({action: action, filteredMechanisms: filteredMechanisms}); - this.props.onSwitchTab(action) - }; - - generateTabLabel(action: string) { - let mechanismsNumber = this.filterMechanisms(this.props.mechanisms, action).length; - return - {action} - ; - } - - renderTabs(){ - return mechanismActions.map((action, i)=>) - } - - filterMechanisms(allMechanisms: MechanismModel[], action:string){ - if (action==='view') return allMechanisms; - else return allMechanisms.filter(m=>m.state.actions[action]); - } - - getTabIndex(action:string){ - return mechanismActions.indexOf(action); - } - - render() { - return ( -
    - - {this.renderTabs()} - - - -
    - ); - } -} \ No newline at end of file diff --git a/src/modules/list/models/filters.model.tsx b/src/modules/list/models/filters.model.tsx deleted file mode 100644 index 65eb62c..0000000 --- a/src/modules/list/models/filters.model.tsx +++ /dev/null @@ -1,5 +0,0 @@ -export default class Filters { - ou: string = null; - workflow: string = null; - period: string = null; -}; \ No newline at end of file diff --git a/src/modules/list/services/mechanisms.service.tsx b/src/modules/list/services/mechanisms.service.tsx deleted file mode 100644 index b6e9a4c..0000000 --- a/src/modules/list/services/mechanisms.service.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import api from "../../shared/services/api.service"; -import MechanismModel, {MechanismActions} from "../../shared/models/mechanism.model"; -import getStatus from "../../shared/services/status.service"; -import Filters from "../models/filters.model"; -import {getWorkflowTypeById} from "../../shared/services/workflowService"; - -const agencyGroupSet = 'bw8KHXzxd9i'; -const partnerGroupSet = 'BOyWrF33hiR'; - -function generateMechanismsUrl(filters){ - return `/dataApprovals/categoryOptionCombos?wf=${filters.workflow}&pe=${filters.period}&ou=${filters.ou}`; -} - -function getMechanismInfoUrl(ids){ - let filter; - if (ids.length < 500) filter = `filter=categoryOptionCombos.id:in:[${ids.join(',')}]`; - else filter = 'filter=categories.id:eq:SH885jaRe0o'; - let fields = 'fields=id,name,organisationUnits[id,name],categoryOptionGroups[id,name,groupSets[id]],categoryOptionCombos[id,name]'; - return `/categoryOptions.json?paging=false&${filter}&${fields}`; -} - -function getActions(permissions):MechanismActions{ - if (!permissions) return {}; - return { - accept: permissions.mayAccept, - return: permissions.mayUnaccept, - submit: permissions.mayApprove, - recall: permissions.mayUnapprove, - } -} - -function getInfoByGroupSet(mechInfo, groupSetId):string{ - try { - return mechInfo.categoryOptionGroups.filter(prop => prop.groupSets[0].id === groupSetId)[0].name; - } catch (e){ - return null; - } -} - -export function fetchMechanisms(filters:Filters):Promise{ - return api.get(generateMechanismsUrl(filters)).then(mechResp=>{ - if (mechResp.httpStatusCode===409) return; - let mechanismIds = mechResp.map(m=>m.id); - return api.get(getMechanismInfoUrl(mechanismIds)).then(infoResp=>{ - return mechResp.map(mech=>{ - let mechInfo = infoResp.categoryOptions.filter(i=>i.categoryOptionCombos[0].id===mech.id)[0]; - if (!mechInfo) return console.log(`No Mechanism Info for mech.id ${mech.id}. Skipping.`); - if (infoResp.categoryOptions.filter(i=>i.id===mech.id).length>1) console.log(`Two info records per mechanism ${mech.id} ${mechInfo.name}`); - if (!mechInfo.organisationUnits[0]) return console.log(`No OU info for Mechanism ${mech.id} ${mechInfo.name}. Mechanism filtered out.`, mech, mechInfo); - if (mechInfo.organisationUnits[0].id!==filters.ou && filters.ou!=='ybg3MO3hcf4') return console.log(`OU info not matching for Mechanism ${mech.id} ${mechInfo.name}. Mechanism filtered out.`, mech, mechInfo); - return { - info: { - name: mechInfo.name, - ou: mechInfo.organisationUnits[0].name, - partner: getInfoByGroupSet(mechInfo, partnerGroupSet), - agency: getInfoByGroupSet(mechInfo, agencyGroupSet), - }, - state: { - status: getStatus(getWorkflowTypeById(filters.workflow), mech.level.level, mech.accepted), - actions: getActions(mech.permissions), - view: mech.permissions.mayReadData - }, - meta: { - cocId: mech.id, - ou: mech.ou, - coId: mechInfo.id - } - } - }).filter(mech=>mech); - }).catch(e=>{ - console.error(e); - }) - }); -} \ No newline at end of file diff --git a/src/modules/list/services/orgUnits.service.tsx b/src/modules/list/services/orgUnits.service.tsx deleted file mode 100644 index 0dbbcc3..0000000 --- a/src/modules/list/services/orgUnits.service.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import api from "../../shared/services/api.service"; -import {idNameList} from "../../shared/models/idNameList.model"; - -let allOusUrl = `/organisationUnits/ybg3MO3hcf4.json` - +`?fields=id,name,displayName` - +`&level=2` - +`&paging=false`; - -let userOusUrl = `/me?fields=organisationUnits[id,name]`; - -export default class OrgUnits { - static allOus:idNameList; - static userOus:idNameList; - - static init():Promise{ - return Promise.all([this.fetchAllOus(), this.fetchUserOus()]).then(()=>{ - return this.getOus(); - }); - } - - static namesOnly(array):string[]{ - return array.map(ou => ou.name) - } - - static fetchAllOus():Promise{ - return api.get(allOusUrl).then(res => { - this.allOus = res.organisationUnits; - return this.allOus; - }); - } - - static fetchUserOus():Promise{ - return api.get(userOusUrl).then(res => { - this.userOus = res.organisationUnits; - return this.userOus; - }); - } - - static getOus():idNameList{ - if (!this.allOus || !this.userOus) return null; - if (this.namesOnly(this.userOus).indexOf('Global')>-1) { - return [{name:'Global', id: 'ybg3MO3hcf4'}].concat(this.allOus); - } - else return this.userOus; - } - - static getOuNames():string[]{ - return this.namesOnly(this.getOus()); - } - - static getOuId(name):string{ - return this.allOus.filter(ou=>ou.name===name)[0].id; - } -} \ No newline at end of file diff --git a/src/modules/main/components/main.component.tsx b/src/modules/main/components/main.component.tsx new file mode 100644 index 0000000..ac96215 --- /dev/null +++ b/src/modules/main/components/main.component.tsx @@ -0,0 +1,7 @@ +import React from "react"; + +export default class Main extends React.Component<{},{}> { + render() { + return hello world; + } +} \ No newline at end of file diff --git a/src/modules/main/components/message.component.tsx b/src/modules/main/components/message.component.tsx deleted file mode 100644 index 92e8514..0000000 --- a/src/modules/main/components/message.component.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import React from "react"; -import Router from "./router.component"; -import {IconButton, SnackbarContent, Snackbar, withTheme} from "@material-ui/core"; -import CloseIcon from '@material-ui/icons/Close'; - - -class Message extends React.Component<{theme:any}, {text:string, open:boolean, type:string}>{ - constructor(props){ - super(props); - this.state = {text:null, open: false, type:null}; - } - postMessage = (message:string, type?:string):void=>{ - this.setState({text: message, open: true, type: type}); - if (type!=="error") setTimeout(this.hideMessage, 5000); - }; - hideMessage = ()=>{ - this.setState({text:null, open:false, type: null}); - }; - popupStyle = ()=>{ - if (this.state.type==="error") return {backgroundColor: this.props.theme.palette.secondary.main}; - }; - render(){ - - return - - - this.hideMessage()}> - - } - /> - - - } -} - -export default withTheme(Message); \ No newline at end of file diff --git a/src/modules/main/components/router.component.tsx b/src/modules/main/components/router.component.tsx deleted file mode 100644 index ea0662f..0000000 --- a/src/modules/main/components/router.component.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import React from "react"; -import {HashRouter, Route, Redirect} from "react-router-dom"; -import {Typography, Paper, Divider} from "@material-ui/core"; -import queryString from "query-string"; - -import List from "../../list/components/list.component"; -import Action from "../../action/components/action.component"; -import {ApprovalsCombo} from "../../shared/models/mechanism.model"; - -const styles = { - root: { - padding: 20, - margin: 10 - } -}; - -class urlParams {ou: string; workflow: string; period: string; approvalCombos: (string|string[])}; - - -function getQueryParams(location):urlParams{ - return queryString.parse(location.search) as any; -} - -function enforceArray(value:(string|string[])):string[]{ - if (typeof value === 'string') return [value]; - if (Array.isArray(value)) return value; - throw Error("unknown type: expected string or array"); -} - -function assembleMechanismCombos(mechanisms: string[]):ApprovalsCombo[]{ - return mechanisms.map(mech=>{ - let [ou, cocId, coId] = mech.split(':'); - return {ou: ou, cocId: cocId, coId: coId}; - }); -} - -export default function Router({postMessage}:{postMessage:(message:string, type?:string)=>void}){ - return( - - - DATIM Approvals - - - - }/> - } /> - } /> - - - ); -} diff --git a/src/modules/main/css/themeWrapper.component.css b/src/modules/main/components/themeWrapper.component.css similarity index 100% rename from src/modules/main/css/themeWrapper.component.css rename to src/modules/main/components/themeWrapper.component.css diff --git a/src/modules/main/components/themeWrapper.component.tsx b/src/modules/main/components/themeWrapper.component.tsx index 98dc927..2fb9a85 100644 --- a/src/modules/main/components/themeWrapper.component.tsx +++ b/src/modules/main/components/themeWrapper.component.tsx @@ -1,9 +1,8 @@ -import React from 'react'; +import React, {ReactNode} from 'react'; import {ThemeProvider} from '@material-ui/styles'; import {createMuiTheme} from '@material-ui/core/styles'; -import Message from "./message.component"; -import "../css/themeWrapper.component.css"; +import "./themeWrapper.component.css"; const theme = createMuiTheme({ palette: { @@ -26,11 +25,11 @@ const styles = { } }; -export default function ThemeWrapper() { +export default function ThemeWrapper({children}:{children:ReactNode}) { return (
    - + {children}
    ); diff --git a/src/modules/shared/components/loading.component.tsx b/src/modules/shared/components/loading.component.tsx deleted file mode 100644 index 44cb36e..0000000 --- a/src/modules/shared/components/loading.component.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import {LinearProgress, Typography} from "@material-ui/core"; -import { TextAlignProperty } from 'csstype'; - -const styles = { - message: { - textAlign: 'center' as TextAlignProperty - } -}; - -export default function Loading({message}:{message:string}) { - return - -
    - {message} -
    ; -} \ No newline at end of file diff --git a/src/modules/main/components/networkError.component.tsx b/src/modules/shared/components/networkError.component.tsx similarity index 100% rename from src/modules/main/components/networkError.component.tsx rename to src/modules/shared/components/networkError.component.tsx diff --git a/src/modules/shared/components/responsiveText.component.css b/src/modules/shared/components/responsiveText.component.css deleted file mode 100644 index d71d5b6..0000000 --- a/src/modules/shared/components/responsiveText.component.css +++ /dev/null @@ -1,7 +0,0 @@ -.smallScreen {display: none;} - -@media(max-width: 600px){ - .smallScreen {display: inline!important;} - .largeScreen {display: none;} -} - diff --git a/src/modules/shared/components/responsiveText.component.tsx b/src/modules/shared/components/responsiveText.component.tsx deleted file mode 100644 index 0c7a896..0000000 --- a/src/modules/shared/components/responsiveText.component.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from "react"; -import "./responsiveText.component.css"; - -export default function ResponsiveText(props){ - return ( - {props.small} - {props.children} - ); -} \ No newline at end of file diff --git a/src/modules/shared/models/idNameList.model.tsx b/src/modules/shared/models/idNameList.model.tsx deleted file mode 100644 index bf79645..0000000 --- a/src/modules/shared/models/idNameList.model.tsx +++ /dev/null @@ -1 +0,0 @@ -export type idNameList = {id:string, name:string}[]; \ No newline at end of file diff --git a/src/modules/shared/models/mechanism.model.tsx b/src/modules/shared/models/mechanism.model.tsx deleted file mode 100644 index b2c2997..0000000 --- a/src/modules/shared/models/mechanism.model.tsx +++ /dev/null @@ -1,39 +0,0 @@ -export class MechanismInfo { - ou: string; - agency: string; - partner: string; - name: string; -} - -export class MechanismActions { - submit?: boolean; - recall?: boolean; - return?: boolean; - accept?: boolean; -} - -export class MechanismState { - status: string; - view: boolean; - actions: MechanismActions; -} - -export class MechanismMeta { - cocId: string; - coId: string; - workflow: string; - period: string; - ou: string; -} - -export default class MechanismModel{ - info?: MechanismInfo; - state?: MechanismState; - meta?: MechanismMeta; -} - -export class ApprovalsCombo{ - ou: string; - cocId: string; - coId: string; -} \ No newline at end of file diff --git a/src/modules/shared/services/api.service.tsx b/src/modules/shared/services/api.service.tsx deleted file mode 100644 index 85884a8..0000000 --- a/src/modules/shared/services/api.service.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import {baseUrl} from "./apiUrl.service"; -import queryString from "query-string"; - -function makeUrl(url:string){ - return baseUrl+'api'+url; -} - -export default class Api{ - static get(url){ - return fetch(makeUrl(url), {credentials: 'include'}).then(resp => resp.json()); - } - static post(url, data){ - return fetch(makeUrl(url), { - credentials: 'include', - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(data) - }); - } - - static getFormHtml(url:string, request:any):Promise { - let settings: RequestInit = { - credentials: 'include', - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', - }, - body: queryString.stringify(request) - }; - return fetch(baseUrl + url, settings).then(resp=>resp.text()); - } -} \ No newline at end of file diff --git a/src/modules/shared/services/dataApi.service.tsx b/src/modules/shared/services/dataApi.service.tsx new file mode 100644 index 0000000..f3c1748 --- /dev/null +++ b/src/modules/shared/services/dataApi.service.tsx @@ -0,0 +1,20 @@ +import {baseUrl} from "./apiUrl.service"; + +function makeUrl(url:string){ + return baseUrl+'api'+url; +} + +export function getData(url:string):Promise{ + return fetch(makeUrl(url), {credentials: 'include'}).then(resp => resp.json()); +} + +export function postData(url:string, data:any):Promise{ + return fetch(makeUrl(url), { + credentials: 'include', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data) + }); +} \ No newline at end of file diff --git a/src/modules/shared/services/makeId.service.tsx b/src/modules/shared/services/makeId.service.tsx deleted file mode 100644 index 0cc9c8b..0000000 --- a/src/modules/shared/services/makeId.service.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function makeId(name:string):string{ - return name.replace(/[^A-z0-9]/g,'_'); -} \ No newline at end of file diff --git a/src/modules/shared/services/status.service.tsx b/src/modules/shared/services/status.service.tsx deleted file mode 100644 index 8903279..0000000 --- a/src/modules/shared/services/status.service.tsx +++ /dev/null @@ -1,13 +0,0 @@ -export default function getStatus(workflowType:string, level:string, accepted:boolean){ - if (!level) return 'pending at partner'; - if (level==='5' && !accepted) return 'submitted by partner'; - if (level==='5' && accepted) return 'accepted by agency'; - if (level==='4' && !accepted) return 'submitted by agency'; - if (level==='4' && accepted && workflowType==='MER') return 'accepted by inter-agency'; - if (level==='4' && accepted && workflowType==='ER') return 'accepted by agency hq'; - if (level==='3' && !accepted && workflowType==='MER') return 'submitted by inter-agency'; - if (level==='2' && !accepted && workflowType==='ER') return 'submitted by agency hq'; - if (level==='2' && accepted && workflowType==='ER') return 'accepted by global'; - if (level==='3' && accepted) return 'accepted by global'; - return `${level} / ${accepted}`; -} \ No newline at end of file diff --git a/src/modules/shared/services/workflowService.tsx b/src/modules/shared/services/workflowService.tsx deleted file mode 100644 index 297530e..0000000 --- a/src/modules/shared/services/workflowService.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import api from './api.service'; -import {idNameList} from "../models/idNameList.model"; -import workflowData from "../../../config/workflows.json"; - -type WorkflowList = {name:string, id:string, type:string}[]; - -let workflows = workflowData as WorkflowList; - -export function getWorkflowNameById(workflowId: string):string{ - return workflows.filter(w=>w.id===workflowId)[0].name; -} - -export function getWorkflowTypeById(workflowId: string):string{ - return workflows.filter(w=>w.id===workflowId)[0].type; -} - -export default function getWorkflows():Promise { - return api.get('/dataApprovalWorkflows.json').then(result=>{ - return result.dataApprovalWorkflows.map(wf=>{ - return {id: wf.id, name: wf.displayName}; - }); - }); -} \ No newline at end of file diff --git a/src/modules/shared/services/workflowsPeriods.service.tsx b/src/modules/shared/services/workflowsPeriods.service.tsx deleted file mode 100644 index c1fde0d..0000000 --- a/src/modules/shared/services/workflowsPeriods.service.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import api from './api.service'; -import {idNameList} from "../models/idNameList.model"; -import getWorkflows from "./workflowService"; - -export type WorkflowPeriods = { - id: string; - name:string; - type: string; - periods: idNameList; -}[]; - -type periodList = {name: string, id:string, startDate: Date, endDate:Date}[]; - -function filterPeriods(periods:periodList):idNameList{ - return periods.filter(period=>{ - let today = new Date(); - return today>period.startDate && today{ - let period = workflow[periodId]; - return { - name: period.name, - id: periodId, - startDate: new Date(period.start), - endDate: new Date(period.end) - } - }); -} - -function transformDatastore(response):WorkflowPeriods{ - return Object.keys(response).map(workflowName=>{ - return { - id: null, - name: workflowName, - periods: filterPeriods(getPeriods(response[workflowName])), - type: null - } - }); -} - -export default class WorkflowPeriodService { - private workflowPeriods:WorkflowPeriods; - init():Promise{ - let wfPromise = getWorkflows(); - let wfPeriodPromise = this.fetchDatastorePeriods(); - return Promise.all([wfPromise, wfPeriodPromise]).then(results=>{ - let workflows:idNameList = results[0]; - let workflowPeriods:WorkflowPeriods = results[1]; - this.workflowPeriods = workflowPeriods.filter(wfp=>{ - return workflows.map(wf=>wf.name).includes(wfp.name); - }).map(wfp=>{ - wfp.id = workflows.filter(wf=>wf.name===wfp.name)[0].id; - return wfp; - }).filter(wfp=>{ - return wfp.periods.length>0; - }); - return this.workflowPeriods; - }); - } - - private fetchDatastorePeriods(){ - return api.get('/dataStore/approvals/periodSettings').then(transformDatastore); - } - - getPeriods(workflowId: string):idNameList{ - return this.workflowPeriods.filter(wf =>wf.id===workflowId)[0].periods; - } - getPeriodNameById(workflowId: string, periodId: string):string{ - return this.getPeriods(workflowId).filter(p=>p.id===periodId)[0].name; - } -} - - From 454677c71c5539d43f1e3bfde0ce6b6f4e57a108 Mon Sep 17 00:00:00 2001 From: Jakub Date: Wed, 25 Mar 2020 15:57:29 -0400 Subject: [PATCH 2/5] working on filters --- .../approvalProcess/1.partnerSubmit.test.js | 45 ------------ .../approvalProcess/2.agencyAccept.test.js | 51 ------------- .../approvalProcess/3.agencySubmit.test.js | 54 -------------- .../4.interAgencyAccept.test.js | 66 ----------------- .../5.interAgencySubmit.test.js | 33 --------- .../approvalProcess/6.globalAccept.test.js | 65 ----------------- .../1.agencyHqAccept.test.js | 40 ---------- .../erApprovalProcess/2.globalView.test.js | 42 ----------- .../formRender/aggregateData.test.js | 52 ------------- .../formRender/enteredData.test.js | 32 -------- .../integration/formRender/formRender.test.js | 24 ------ cypress/integration/list/backButton.test.js | 27 ------- .../integration/list/mechanismList.test.js | 73 ------------------- .../integration/list/selectAllFilter.test.js | 9 --- .../1.multipleMechanismsSubmitList.test.js | 38 ---------- .../2.multipleMechanismsSubmitAction.test.js | 35 --------- .../3.multipleMechanismsRecall.test.js | 56 -------------- .../multipleMechanisms.sameState.test.js | 15 ---- .../multipleMechanisms/submitAll.test.js | 23 ------ cypress/support/index.js | 1 - cypress/support/pages/action.js | 14 ---- .../filters/components/filters.component.tsx | 16 ++++ src/modules/filters/models/filters.model.tsx | 16 ++++ .../main/components/main.component.tsx | 21 +++++- 24 files changed, 49 insertions(+), 799 deletions(-) delete mode 100644 cypress/integration/approvalProcess/1.partnerSubmit.test.js delete mode 100644 cypress/integration/approvalProcess/2.agencyAccept.test.js delete mode 100644 cypress/integration/approvalProcess/3.agencySubmit.test.js delete mode 100644 cypress/integration/approvalProcess/4.interAgencyAccept.test.js delete mode 100644 cypress/integration/approvalProcess/5.interAgencySubmit.test.js delete mode 100644 cypress/integration/approvalProcess/6.globalAccept.test.js delete mode 100644 cypress/integration/erApprovalProcess/1.agencyHqAccept.test.js delete mode 100644 cypress/integration/erApprovalProcess/2.globalView.test.js delete mode 100644 cypress/integration/formRender/aggregateData.test.js delete mode 100644 cypress/integration/formRender/enteredData.test.js delete mode 100644 cypress/integration/formRender/formRender.test.js delete mode 100644 cypress/integration/list/backButton.test.js delete mode 100644 cypress/integration/list/mechanismList.test.js delete mode 100644 cypress/integration/list/selectAllFilter.test.js delete mode 100644 cypress/integration/multipleMechanisms/1.multipleMechanismsSubmitList.test.js delete mode 100644 cypress/integration/multipleMechanisms/2.multipleMechanismsSubmitAction.test.js delete mode 100644 cypress/integration/multipleMechanisms/3.multipleMechanismsRecall.test.js delete mode 100644 cypress/integration/multipleMechanisms/multipleMechanisms.sameState.test.js delete mode 100644 cypress/integration/multipleMechanisms/submitAll.test.js delete mode 100644 cypress/support/pages/action.js create mode 100644 src/modules/filters/components/filters.component.tsx create mode 100644 src/modules/filters/models/filters.model.tsx diff --git a/cypress/integration/approvalProcess/1.partnerSubmit.test.js b/cypress/integration/approvalProcess/1.partnerSubmit.test.js deleted file mode 100644 index 3dd3911..0000000 --- a/cypress/integration/approvalProcess/1.partnerSubmit.test.js +++ /dev/null @@ -1,45 +0,0 @@ -describe('Approval Process #1 - Submitted by Partner', function() { - - it('_ return to pending at partner', ()=>{ - cy.resetMerMechanism(); - }); - - it('Should see MER Results / Asia Region / Q3 / Pending', function () { - cy.loginAs('approvals-partner'); - cy.goHome(); - cy.searchMechanisms('MER Results','2019Q3','Asia Region'); - cy.get('.cy_list_results').containsAll([ - '2 mechanisms', - '17350 - 6NU2GGH001462 - Laboratory Strengthening', - '17286 - 6NU2GGH001346 - Care, Support and Treatment - HIV/TB Project', - 'SHARE INDIA', - 'HHS/CDC' - ]); - }); - - it('Should redirect to action page when click on SUBMIT', ()=>{ - cy.mechanismAction('submit', '#cy_results_17350___6NU2GGH001462___Laboratory_Strengthening'); - cy.info().containsAll([ - 'pending at partner', - '17350 - 6NU2GGH001462 - Laboratory Strengthening' - ]); - }); - it('Should submit mechanism on SUBMIT click', ()=>{ - cy.get('#cy_mechanismAction_submit').click(); - cy.contains('Mechanism successfully submitted'); - cy.info().containsAll([ - 'submitted by partner', - '17350 - 6NU2GGH001462 - Laboratory Strengthening' - ]); - cy.actions().contains('recall'); - }); - it('Should recall mechanism on RECALL click', ()=>{ - cy.get('#cy_mechanismAction_recall').click(); - cy.contains('Mechanism successfully recalled'); - cy.info().containsAll([ - 'pending at partner', - '17350 - 6NU2GGH001462 - Laboratory Strengthening' - ]); - cy.actions().contains('submit'); - }); -}); \ No newline at end of file diff --git a/cypress/integration/approvalProcess/2.agencyAccept.test.js b/cypress/integration/approvalProcess/2.agencyAccept.test.js deleted file mode 100644 index 86df704..0000000 --- a/cypress/integration/approvalProcess/2.agencyAccept.test.js +++ /dev/null @@ -1,51 +0,0 @@ -describe('Approval Process #2 - Agency ACCEPT', ()=>{ - it('_ return to pending at partner', ()=>{ - cy.resetMerMechanism(); - }); - it('_ submit by partner', ()=>{ - cy.approvalsApiCall('partner', 'submit', 'mer'); - }); - - it('Should display Mechanism 17350 as ready to accept', ()=>{ - cy.loginAs('approvals-agency'); - cy.goHome(); - cy.searchMechanisms('MER Results','2019Q3','Asia Region'); - cy.get('#cy_results_17350___6NU2GGH001462___Laboratory_Strengthening').contains('submitted by partner'); - }); - it('Should display mechanism detail with status ready to accept', ()=>{ - cy.mechanismAction('accept', '#cy_results_17350___6NU2GGH001462___Laboratory_Strengthening'); - cy.contains('Number of new health workers who graduated'); - cy.actions().containsAll(['recall','accept']); - cy.info().contains('submitted by partner'); - }); - - it('Should be able to return mechanism', ()=>{ - cy.get('#cy_mechanismAction_recall').click(); - cy.containsAll([ - 'Mechanism successfully recalled', - 'Number of new health workers who graduated' - ]); - cy.actions().contains('No actions'); - cy.info().contains('pending at partner'); - }); - - it('_ resubmitting mechanism via API', ()=>{ - cy.approvalsApiCall('partner','submit', 'mer'); - }); - - it('Should be able to accept mechanism', ()=>{ - cy.loginAs('approvals-agency'); - cy.gotoMechanism('ifIy3vjx3Xx', 'RwNpkAM7Hw7', '2019Q3', 'ptVxnBssua6'); - - cy.actions().containsAll(['accept', 'recall']); - cy.info().contains('submitted by partner'); - - cy.get('#cy_mechanismAction_accept').click(); - cy.containsAll([ - 'Mechanism successfully accepted', - 'Number of new health workers who graduated' - ]); - cy.actions().containsAll(['return', 'submit']); - cy.info().contains('accepted by agency'); - }); -}); \ No newline at end of file diff --git a/cypress/integration/approvalProcess/3.agencySubmit.test.js b/cypress/integration/approvalProcess/3.agencySubmit.test.js deleted file mode 100644 index a2bb2da..0000000 --- a/cypress/integration/approvalProcess/3.agencySubmit.test.js +++ /dev/null @@ -1,54 +0,0 @@ -describe('Approval Process #3 - Agency SUBMIT', ()=>{ - - it('_ return to pending at partner', ()=>{ - cy.resetMerMechanism(); - }); - it('_ submit by partner', ()=>{ - cy.approvalsApiCall('partner', 'submit', 'mer'); - }); - - it('_ accept by agency', ()=>{ - cy.approvalsApiCall('agency', 'accept', 'mer'); - }); - - it('Should display Mechanism 17350 as ready to SUBMIT', ()=>{ - cy.loginAs('approvals-agency'); - cy.gotoMechanism('ifIy3vjx3Xx', 'RwNpkAM7Hw7', '2019Q3', 'ptVxnBssua6'); - cy.actions().containsAll(['return', 'submit']); - cy.info().contains('accepted by agency'); - }); - - it('Should be able to RETURN accepted mechanism', ()=>{ - cy.get('#cy_mechanismAction_recall').click(); - cy.contains('Mechanism successfully recalled'); - cy.actions().contains('No actions'); - cy.info().contains('pending at partner'); - }); - - it('_ submit by partner', ()=>{ - cy.approvalsApiCall('partner', 'submit', 'mer'); - }); - - it('_ accept by agency', ()=>{ - cy.approvalsApiCall('agency', 'accept', 'mer'); - }); - - it('Should be able to SUBMIT accepted mechanism', ()=>{ - cy.loginAs('approvals-agency'); - cy.gotoMechanism('ifIy3vjx3Xx', 'RwNpkAM7Hw7', '2019Q3', 'ptVxnBssua6'); - cy.actions().containsAll(['return','submit']); - cy.info().contains('accepted by agency'); - - cy.get('#cy_mechanismAction_submit').click(); - cy.contains('Mechanism successfully submitted'); - cy.actions().contains('recall'); - cy.info().contains('submitted by agency'); - }); - - it('Should be able to RECALL submitted mechanism', ()=>{ - cy.get('#cy_mechanismAction_recall').click(); - cy.contains('Mechanism successfully recalled'); - cy.actions().contains('recall'); - cy.info().contains('accepted by agency'); - }); -}); \ No newline at end of file diff --git a/cypress/integration/approvalProcess/4.interAgencyAccept.test.js b/cypress/integration/approvalProcess/4.interAgencyAccept.test.js deleted file mode 100644 index 87caed3..0000000 --- a/cypress/integration/approvalProcess/4.interAgencyAccept.test.js +++ /dev/null @@ -1,66 +0,0 @@ -describe('Approval Process #4 - Inter-Agency ACCEPT', ()=>{ - - it('_ return to pending at partner', ()=>{ - cy.resetMerMechanism(); - }); - it('_ submit by partner', ()=>{ - cy.approvalsApiCall('partner', 'submit', 'mer'); - }); - - it('_ accept by agency', ()=>{ - cy.approvalsApiCall('agency', 'accept', 'mer'); - }); - - it('_ submit by agency', ()=>{ - cy.approvalsApiCall('agency', 'submit', 'mer'); - }); - - it('Should display Mechanism 17350 as ready to ACCEPT in list', ()=>{ - //TODO: See correct status - cy.loginAs('approvals-inter-agency'); - cy.goHome(); - cy.searchMechanisms('MER Results','2019Q3','Asia Region'); - cy.get('.cy_list_results').containsAll([ - '61 mechanisms', - '16566 - AID386A1400007 - Orphans and Vulnerable Children Project', - '17111 - AIDGHIO1200001 - Joint U.N. Programme on HIV/AIDS (UNAIDS III)', - 'UNAIDS JOINT UNITED NATIONS PROGRAMME ON HIV/AIDS', - ]); - cy.get('[placeholder="Search"]').type('17350'); - cy.get('#cy_results_17350___6NU2GGH001462___Laboratory_Strengthening').contains('submitted by agency'); - cy.mechanismAction('accept', '#cy_results_17350___6NU2GGH001462___Laboratory_Strengthening'); - }); - - it('Should display Mechanism 17350 as ready to ACCEPT', ()=>{ - cy.actions().containsAll(['recall','accept']); - cy.info().contains('submitted by agency'); - }); - - it('Should be able to RECALL mechanism', ()=>{ - cy.get('#cy_mechanismAction_recall').click(); - cy.contains('Mechanism successfully recalled'); - cy.actions().contains('No actions'); - cy.info().contains('accepted by agency'); - }); - - it('_ submit by agency', ()=>{ - cy.approvalsApiCall('agency', 'submit', 'mer'); - }); - - - it('Should be able to ACCEPT mechanism', ()=>{ - cy.loginAs('approvals-inter-agency'); - cy.gotoMechanism('ifIy3vjx3Xx', 'RwNpkAM7Hw7', '2019Q3', 'ptVxnBssua6'); - cy.get('#cy_mechanismAction_accept').click(); - cy.contains('Mechanism successfully accepted'); - cy.actions().containsAll(['submit', 'recall', 'return']); - cy.info().contains('accepted by inter-agency'); - }); - - it('Should be able to RECALL ACCEPTED mechanism', ()=>{ - cy.get('#cy_mechanismAction_recall').click(); - cy.contains('Mechanism successfully recalled'); - cy.actions().contains('No actions'); - cy.info().contains('accepted by agency'); - }); -}); \ No newline at end of file diff --git a/cypress/integration/approvalProcess/5.interAgencySubmit.test.js b/cypress/integration/approvalProcess/5.interAgencySubmit.test.js deleted file mode 100644 index b6bd13a..0000000 --- a/cypress/integration/approvalProcess/5.interAgencySubmit.test.js +++ /dev/null @@ -1,33 +0,0 @@ -describe('Approval Process #5 - Inter-Agency SUBMIT', ()=>{ - - it('_ return to pending at partner', ()=>{ - cy.resetMerMechanism(); - }); - it('_ submit by partner', ()=>{ - cy.approvalsApiCall('partner', 'submit', 'mer'); - }); - - it('_ accept by agency', ()=>{ - cy.approvalsApiCall('agency', 'accept', 'mer'); - }); - - it('_ submit by agency', ()=>{ - cy.approvalsApiCall('agency', 'submit', 'mer'); - }); - - it('_ accept by inter-agency', ()=>{ - cy.approvalsApiCall('inter-agency', 'accept', 'mer'); - }); - - it('Should be able to SUBMIT mechanism as Inter-Agency', ()=>{ - cy.loginAs('approvals-inter-agency'); - cy.gotoMechanism('ifIy3vjx3Xx', 'RwNpkAM7Hw7', '2019Q3', 'ptVxnBssua6'); - cy.get('#cy_mechanismAction_submit').click(); - cy.contains('Mechanism successfully submitted'); - cy.actions().containsAll(['recall']); - cy.info().contains('submitted by inter-agency'); - }); - - //TODO: Recall submitted - -}); \ No newline at end of file diff --git a/cypress/integration/approvalProcess/6.globalAccept.test.js b/cypress/integration/approvalProcess/6.globalAccept.test.js deleted file mode 100644 index 5a859be..0000000 --- a/cypress/integration/approvalProcess/6.globalAccept.test.js +++ /dev/null @@ -1,65 +0,0 @@ -describe('Approval Process #6 - Global ACCEPT', ()=>{ - - it('_ return to pending at partner', ()=>{ - cy.resetMerMechanism(); - }); - it('_ submit by partner', ()=>{ - cy.approvalsApiCall('partner', 'submit', 'mer'); - }); - - it('_ accept by agency', ()=>{ - cy.approvalsApiCall('agency', 'accept', 'mer'); - }); - - it('_ submit by agency', ()=>{ - cy.approvalsApiCall('agency', 'submit', 'mer'); - }); - - it('_ accept by inter-agency', ()=>{ - cy.approvalsApiCall('inter-agency', 'accept', 'mer'); - }); - - it('_ submit by inter-agency', ()=>{ - cy.approvalsApiCall('inter-agency', 'submit', 'mer'); - }); - - it('Global should see mechanism in List', ()=>{ - //TODO: See correct status - cy.loginAs('approvals-global'); - cy.goHome(); - cy.searchMechanisms('MER Results','2019Q3','Asia Region'); - cy.get('.cy_list_results').containsAll([ - '75 mechanisms', - '16566 - AID386A1400007 - Orphans and Vulnerable Children Project', - '17035 - International AIDS Education and Training Center', - 'UNAIDS JOINT UNITED NATIONS PROGRAMME ON HIV/AIDS', - ]); - cy.get('[placeholder="Search"]').type('17350'); - cy.get('#cy_results_17350___6NU2GGH001462___Laboratory_Strengthening').contains('submitted by inter-agency'); - cy.mechanismAction('accept', '#cy_results_17350___6NU2GGH001462___Laboratory_Strengthening'); - }); - - it('Should be able to RECALL mechanism', ()=>{ - cy.actions().containsAll(['recall', 'accept']); - cy.info().containsAll(['submitted by inter-agency', '17350 - 6NU2GGH001462 - Laboratory Strengthening']); - cy.get('#cy_mechanismAction_recall').click(); - cy.contains('Mechanism successfully recalled'); - cy.actions().contains('No actions'); - cy.info().contains('accepted by inter-agency'); - }); - - it('_ submit by inter-agency', ()=>{ - cy.approvalsApiCall('inter-agency', 'submit', 'mer'); - }); - - it('Should be able to ACCEPT mechanism as Global', ()=>{ - cy.loginAs('approvals-global'); - cy.gotoMechanism('ifIy3vjx3Xx', 'RwNpkAM7Hw7', '2019Q3', 'ptVxnBssua6'); - cy.actions().containsAll(['recall', 'accept']); - cy.info().containsAll(['submitted by inter-agency', '17350 - 6NU2GGH001462 - Laboratory Strengthening']); - cy.get('#cy_mechanismAction_accept').click(); - cy.contains('Mechanism successfully accepted'); - cy.actions().containsAll(['recall', 'return']); - cy.info().contains('accepted by global'); - }); -}); \ No newline at end of file diff --git a/cypress/integration/erApprovalProcess/1.agencyHqAccept.test.js b/cypress/integration/erApprovalProcess/1.agencyHqAccept.test.js deleted file mode 100644 index 07591e6..0000000 --- a/cypress/integration/erApprovalProcess/1.agencyHqAccept.test.js +++ /dev/null @@ -1,40 +0,0 @@ -describe('ER Approval Process #1 - Agency HQ ACCEPT', ()=>{ - - it('_ return to submitted by agency', ()=>{ - cy.approvalsApiCall('agency-hq', 'recall', 'er'); - cy.approvalsApiCall('agency', 'submit', 'er'); - }); - - - it('Should find Mechanism 17286 submitted by Agency', ()=>{ - cy.loginAs('approvals-agency-hq'); - cy.goHome(); - cy.searchMechanisms('ER Expenditures FYOct','2018Oct','Asia Region'); - cy.get('.cy_list_results').containsAll([ - '37 mechanisms', - '17286 - 6NU2GGH001346 - Care, Support and Treatment - HIV/TB Project', - 'submitted by agency', - ]); - cy.get('#cy_results_17286___6NU2GGH001346___Care__Support_and_Treatment___HIV_TB_Project').contains('submitted by agency'); - }); - - it('Should see Agency HQ on action page', ()=>{ - cy.mechanismAction('accept', '#cy_results_17286___6NU2GGH001346___Care__Support_and_Treatment___HIV_TB_Project'); - cy.stepper().containsAll(['accepted by agency hq', 'accepted by global']); - cy.actions().containsAll(['recall','accept']); - cy.info().containsAll(['submitted by agency', '17286 - 6NU2GGH001346 - Care, Support and Treatment - HIV/TB Project']); - cy.form().containsAll(['Expenditure Upload', 'Expenditure Report']); - }); - - it('Should be able to accept mechanism', ()=>{ - cy.get('#cy_mechanismAction_accept').click(); - cy.containsAll([ - 'Mechanism successfully accepted', - ]); - cy.actions().containsAll(['submit', 'recall', 'return']); - cy.info().containsAll([ - '17286 - 6NU2GGH001346 - Care, Support and Treatment - HIV/TB Project', - 'accepted by agency hq' - ]); - }); -}); \ No newline at end of file diff --git a/cypress/integration/erApprovalProcess/2.globalView.test.js b/cypress/integration/erApprovalProcess/2.globalView.test.js deleted file mode 100644 index d5d1f39..0000000 --- a/cypress/integration/erApprovalProcess/2.globalView.test.js +++ /dev/null @@ -1,42 +0,0 @@ -describe('ER Approval Process #2 - Global', ()=>{ - - it('_ return to submitted by agency', ()=>{ - cy.approvalsApiCall('agency-hq', 'recall', 'er'); - cy.approvalsApiCall('agency', 'submit', 'er'); - cy.approvalsApiCall('agency-hq', 'accept', 'er'); - }); - - it('Should find Mechanism 17286 accepted by Agency HQ in LIST', ()=>{ - cy.loginAs('approvals-global'); - cy.goHome(); - cy.searchMechanisms('ER Expenditures FYOct','2018Oct','Asia Region'); - cy.get('.cy_list_results').containsAll([ - '75 mechanisms', - ]); - cy.get('[placeholder="Search"]').type('17286'); - cy.get('.cy_list_results').containsAll([ - '17286 - 6NU2GGH001346 - Care, Support and Treatment - HIV/TB Project', - 'accepted by agency hq', - ]); - }); - - it('Should find Mech 17286 accepted by Agency HQ in ACTION', ()=>{ - cy.mechanismAction('view', '#cy_results_17286___6NU2GGH001346___Care__Support_and_Treatment___HIV_TB_Project'); - cy.stepper().containsAll(['accepted by agency hq', 'accepted by global']); - cy.info().containsAll(['accepted by agency hq', '17286 - 6NU2GGH001346 - Care, Support and Treatment - HIV/TB Project']); - }); - - - it('Should find Mechanism 17286 as accepted by global for MER Results', ()=>{ - cy.goHome(); - cy.searchMechanisms('MER Results','2019Q3','Asia Region'); - cy.get('[placeholder="Search"]').type('17286'); - cy.get('.cy_list_results').containsAll([ - '75 mechanisms', - '17286 - 6NU2GGH001346 - Care, Support and Treatment - HIV/TB Project', - ]); - cy.get('#cy_results_17286___6NU2GGH001346___Care__Support_and_Treatment___HIV_TB_Project').containsAll([ - 'pending at partner', - ]); - }); -}); \ No newline at end of file diff --git a/cypress/integration/formRender/aggregateData.test.js b/cypress/integration/formRender/aggregateData.test.js deleted file mode 100644 index 102305e..0000000 --- a/cypress/integration/formRender/aggregateData.test.js +++ /dev/null @@ -1,52 +0,0 @@ -function checkField(de, co, data){ - cy.get(`[data-de='${de}'][data-co='${co}']`).contains(data); -} - -function switchToFacility(){ - cy.get('#cy_formSelect_input').click(); - cy.get('#cy_formSelect_dataset_MER_Results__Facility_Based_FY2019Q4').click(); -} - -describe('Aggregate Data', ()=> { - it('login', () => { - cy.loginAs('superAdmin'); - }); - it('Should see All Mechanisms Overview', ()=>{ - cy.visit('/#/action?approvalCombos=f5RoebaDLMx%3ABOKwiEdAMzQ%3AJPmbX9ZfXmd%3A&approvalCombos=f5RoebaDLMx%3ABaAWvLUBS9a%3Ao9IHCJEfiXL%3A&period=2019Q3&workflow=RwNpkAM7Hw7'); - cy.containsAll([ - 'All Mechanisms Overview', - 'HHS/CDC, USAID', - 'JHPIEGO CORPORATION, RIGHT TO CARE', - ]); - }); - it('Should be able to switch to `MER Results: Facility based`', ()=>{ - switchToFacility(); - }); - - it('Should have the right aggregated data', ()=>{ - checkField('RhkU5KjtAi6','xjIOzgKKqaE','14'); - checkField('RhkU5KjtAi6','srbCCscTJaK','655'); - checkField('RhkU5KjtAi6','nsATUhYrzYh','1958'); - }); - - it('Should be able to switch to 18304', ()=>{ - cy.contains('18304 - AIDOAAA1500070 - EQUIP').click(); - switchToFacility(); - }); - - it('Should have the right for 18304', ()=>{ - checkField('RhkU5KjtAi6','xjIOzgKKqaE','14'); - checkField('RhkU5KjtAi6','srbCCscTJaK','54'); - checkField('RhkU5KjtAi6','nsATUhYrzYh','911'); - }); - - it('Should be able to switch to 17514', ()=>{ - cy.contains('17514 - GH001438 - Jhpiego Follow-On').click(); - switchToFacility(); - }); - - it('Should have the right for 17514', ()=>{ - checkField('RhkU5KjtAi6','srbCCscTJaK','601'); - checkField('RhkU5KjtAi6','nsATUhYrzYh','1047'); - }); -}); \ No newline at end of file diff --git a/cypress/integration/formRender/enteredData.test.js b/cypress/integration/formRender/enteredData.test.js deleted file mode 100644 index 0dddecb..0000000 --- a/cypress/integration/formRender/enteredData.test.js +++ /dev/null @@ -1,32 +0,0 @@ -function switchToOuLevel(){ - cy.get('#cy_formSelect_input').click(); - cy.get('#cy_formSelect_dataset_MER_Results__Operating_Unit_Level__IM__FY2019Q4').click(); -} - -describe('Form Render', ()=>{ - it('Should render form content (Laboratory Settings)', ()=>{ - cy.loginAs('approvals-partner-botswana'); - cy.gotoMechanism('lMYMYFB2ybp', 'RwNpkAM7Hw7', '2019Q3', 'l1KFEXKI4Dg'); - cy.contains('7320 - StateAFLaboratory - RPSO laboratory construction projects'); - switchToOuLevel(); - cy.containsAll([ - 'Number of new health workers who graduated', - 'Disaggregated by Cadre Category', - ], {timeout: 5000}); - }); - it('Should load entered data', ()=>{ - cy.get('[data-co="QPO0ZfoGC5D"]').contains('123456'); - cy.get('[data-co="l6gFAecb5ua"]').contains('1234567'); - cy.get('.total_YDmbQxna').contains('1358023'); - }); -}); - -/* -* Steps to reproduce data for this test: -* -* 1. Go to Data Entry app and find `MER Results`, `Jul - Sep 2019`, `Botswana` (country level) -* 2. Select `MER Results: Operating Unit Level (IM)` -* 3. Put in the data in first two inputs. Save. -* 4. Run analytics on the server: `dhis_api_analytics --config-file=/opt/dhis2_jakub/dish.json` -* 5. Wait for couple of hours. The data should appear. -* */ \ No newline at end of file diff --git a/cypress/integration/formRender/formRender.test.js b/cypress/integration/formRender/formRender.test.js deleted file mode 100644 index eeb0955..0000000 --- a/cypress/integration/formRender/formRender.test.js +++ /dev/null @@ -1,24 +0,0 @@ -function switchToOuLevel(){ - cy.get('#cy_formSelect_input').click(); - cy.get('#cy_formSelect_dataset_MER_Results__Operating_Unit_Level__IM__FY2019Q4').click(); -} - -describe('Form Render', ()=>{ - it('Should render form content (Laboratory Settings)', ()=>{ - cy.loginAs('approvals-partner'); - cy.gotoMechanism('ifIy3vjx3Xx', 'RwNpkAM7Hw7', '2019Q3', 'ptVxnBssua6'); - cy.contains('17350 - 6NU2GGH001462 - Laboratory Strengthening'); - switchToOuLevel(); - cy.containsAll([ - 'Number of new health workers who graduated', - 'Disaggregated by Cadre Category', - ], {timeout: 5000}); - }); - it('Should collapse section', ()=>{ - cy.wait(3000); - cy.contains('HRH_PRE').click(); - cy.containsNotAll([ - 'Number of new health workers who graduated', - ]); - }) -}); \ No newline at end of file diff --git a/cypress/integration/list/backButton.test.js b/cypress/integration/list/backButton.test.js deleted file mode 100644 index a2d5ba9..0000000 --- a/cypress/integration/list/backButton.test.js +++ /dev/null @@ -1,27 +0,0 @@ -let url = '/#/search?ou=ptVxnBssua6&period=2019Q3&workflow=RwNpkAM7Hw7'; - -describe('List Back Button', ()=>{ - it('_ return to pending at partner', ()=>{ - cy.resetMerMechanism(); - }); - - it('Should select WF/PE/OU', ()=>{ - cy.loginAs('approvals-partner'); - cy.goHome(); - cy.searchMechanisms('MER Results','2019Q3','Asia Region'); - cy.url().should('include',url); - }); - - it('Should redirect to action page when click on SUBMIT', ()=>{ - cy.mechanismAction('submit', '#cy_results_17350___6NU2GGH001462___Laboratory_Strengthening'); - cy.info().containsAll([ - 'pending at partner', - '17350 - 6NU2GGH001462 - Laboratory Strengthening' - ]); - }); - - it('Should remember search after hitting Back', ()=>{ - cy.get('#cy_actionPage_back').click(); - cy.url().should('include',url); - }); -}); \ No newline at end of file diff --git a/cypress/integration/list/mechanismList.test.js b/cypress/integration/list/mechanismList.test.js deleted file mode 100644 index d1a1b84..0000000 --- a/cypress/integration/list/mechanismList.test.js +++ /dev/null @@ -1,73 +0,0 @@ -describe('Mechanism List', function() { - - it('_ submit by partner', ()=>{ - cy.approvalsApiCall('partner', 'submit', 'mer'); - }); - - it('_ accept by agency', ()=>{ - cy.approvalsApiCall('agency', 'accept', 'mer'); - }); - - it('_ submit by agency', ()=>{ - cy.approvalsApiCall('agency', 'submit', 'mer'); - }); - - it('_ accept by inter-agency', ()=>{ - cy.approvalsApiCall('inter-agency', 'accept', 'mer'); - }); - - it('_ submit by inter-agency', ()=>{ - cy.approvalsApiCall('inter-agency', 'submit', 'mer'); - }); - - - it('Should see MER Results for Asia Region', function () { - cy.loginAs('approvals-agency'); - cy.goHome(); - cy.searchMechanisms('MER Results','2019Q3','Asia Region'); - cy.get('.cy_list_results').containsAll([ - '29 mechanisms', - '16681 - National Center for Tuberculosis and Leprosy Control (CENAT) Phase II', - ]); - }); - - it('Should see all mechanisms as Global', function () { - cy.loginAs('approvals-global'); - cy.goHome(); - cy.searchMechanisms('MER Results','2019Q3','Global'); - cy.get('.cy_list_results').containsAll([ - /16.. mechanisms/, - 'Global', - ],{timeout: 15000}); - }); - - it('Should have tabs', ()=>{ - cy.get('#cy_mechanismListTab_recall').click(); - cy.get('.cy_list_results').containsAll([ - '17350 - 6NU2GGH001462 - Laboratory Strengthening', - ]); - cy.get('.cy_list_results').containsNotAll([ - '11040 - HIV in Refugee Camps' - ]); - cy.get('#cy_mechanismListTab_view').click(); - }); - - it('Should have pagination', ()=>{ - cy.get('[title="Next Page"]').click(); - cy.get('.cy_list_results').containsAll([ - /21-40 of 16../, - '00200 - PEPFAR-MOH align: PEPFAR Data' - ]); - cy.get('[title="Previous Page"]').click(); - }); - it('Should search',()=>{ - cy.get('[placeholder="Search"]').type('Accelerating'); - cy.get('.cy_list_results').containsAll([ - 'Accelerating Progress in Communities (APC 2.0)' - ]); - cy.get('.cy_list_results').containsNotAll([ - '11040 - HIV in Refugee Camps' - ]); - - }); -}); \ No newline at end of file diff --git a/cypress/integration/list/selectAllFilter.test.js b/cypress/integration/list/selectAllFilter.test.js deleted file mode 100644 index 7927f0d..0000000 --- a/cypress/integration/list/selectAllFilter.test.js +++ /dev/null @@ -1,9 +0,0 @@ -describe('Select all filter', ()=>{ - it('Should prevent SUBMITTING different statuses', ()=>{ - cy.loginAs('approvals-global'); - cy.goHome(); - cy.searchMechanisms('MER Results','2019Q3','Global'); - cy.get('.MuiTableRow-head input').click(); - cy.containsAll(['All selected mechanisms must have the same status to proceed.']); - }); -}); \ No newline at end of file diff --git a/cypress/integration/multipleMechanisms/1.multipleMechanismsSubmitList.test.js b/cypress/integration/multipleMechanisms/1.multipleMechanismsSubmitList.test.js deleted file mode 100644 index 82c1163..0000000 --- a/cypress/integration/multipleMechanisms/1.multipleMechanismsSubmitList.test.js +++ /dev/null @@ -1,38 +0,0 @@ -describe('Multiple Mechanisms SUBMIT #1 (List)', function() { - it('_ return all mechanisms to pending at partner', ()=>{ - cy.loginAs('approvals-partner-botswana'); - cy.resetMultipleMechanisms(); - }); - - it('Should see 3 mechanisms for MER Results / Botswana', function () { - cy.loginAs('approvals-partner-botswana'); - cy.goHome(); - cy.searchMechanisms('MER Results','2019Q3','Botswana'); - cy.containsAll([ - '14707 - StateAFSmallGrants - Ambassador\'s PEPFAR Small Grants Program', - '14790 - StateAFPublicAffairs - Public Affairs/Public Diplomacy (PA/PD) Outreach', - '7320 - StateAFLaboratory - RPSO laboratory construction projects' - ]); - }); - it('Should be able to select multiple mechanisms',()=>{ - cy.get('#cy_mechanismListTab_submit').click(); - cy.get('#cy_results_14707___StateAFSmallGrants___Ambassador_s_PEPFAR_Small_Grants_Program').find('input').click(); - cy.get('#cy_results_14790___StateAFPublicAffairs___Public_Affairs_Public_Diplomacy__PA_PD__Outreach').find('input').click(); - cy.containsAll([ - '2 mechanism(s) selected', - '2 selected mechanism(s)' - ]); - }); - it('Should redirect to action page with the right url', ()=>{ - cy.get('#cy_list_mechanismAction').click(); - cy.url().should('include','/action?approvalCombos=l1KFEXKI4Dg%3ATKBbV46WUX3%3AiRbiBYQuiNZ%3A&approvalCombos=l1KFEXKI4Dg%3AVdSh1pgKSLp%3AXTVSZlHG6Ux%3A&period=2019Q3&workflow=RwNpkAM7Hw7'); - }); - it('should have the right content', ()=>{ - cy.containsAll([ - '14707 - StateAFSmallGrants - Ambassador\'s PEPFAR Small Grants Program', - 'DEPARTMENT OF STATE', - 'Number of new health workers who graduated from a pre-service training institution or program as a result of PEPFAR-supported strengthening efforts, within the reporting period, by select cadre. Numerator will auto-calculate from cadre disaggregates.', - '14790 - StateAFPublicAffairs - Public Affairs/Public Diplomacy (PA/PD) Outreach' - ], {timeout: 15000}); - }); -}); \ No newline at end of file diff --git a/cypress/integration/multipleMechanisms/2.multipleMechanismsSubmitAction.test.js b/cypress/integration/multipleMechanisms/2.multipleMechanismsSubmitAction.test.js deleted file mode 100644 index 71d0962..0000000 --- a/cypress/integration/multipleMechanisms/2.multipleMechanismsSubmitAction.test.js +++ /dev/null @@ -1,35 +0,0 @@ -describe('Multiple Mechanisms SUBMIT #2 (Action)', function() { - it('_ return all mechanisms to pending at partner', ()=>{ - cy.loginAs('approvals-partner-botswana'); - cy.resetMultipleMechanisms(); - }); - it('_ go to action page for two mechanisms',()=>{ - cy.visit('/#/action?approvalCombos=l1KFEXKI4Dg%3ATKBbV46WUX3%3AiRbiBYQuiNZ%3A&approvalCombos=l1KFEXKI4Dg%3AVdSh1pgKSLp%3AXTVSZlHG6Ux%3A&period=2019Q3&workflow=RwNpkAM7Hw7'); - }); - - it('should have the right content', ()=>{ - cy.containsAll([ - '14707 - StateAFSmallGrants - Ambassador\'s PEPFAR Small Grants Program', - 'DEPARTMENT OF STATE', - 'Number of new health workers who graduated from a pre-service training institution or program as a result of PEPFAR-supported strengthening efforts, within the reporting period, by select cadre. Numerator will auto-calculate from cadre disaggregates.', - '14790 - StateAFPublicAffairs - Public Affairs/Public Diplomacy (PA/PD) Outreach' - ], {timeout: 10000}); - }); - - it('should be able to submit both', ()=>{ - cy.get('#cy_mechanismAction_submit').click(); - cy.contains('Mechanisms successfully submitted'); - cy.info().containsAll([ - 'submitted by partner', - ]); - cy.actions().contains('recall'); - }); - - it('should have appropriate statuses in list', ()=>{ - cy.goHome(); - cy.searchMechanisms('MER Results','2019Q3','Botswana'); - cy.get('#cy_results_14707___StateAFSmallGrants___Ambassador_s_PEPFAR_Small_Grants_Program').contains('submitted by partner'); - cy.get('#cy_results_14790___StateAFPublicAffairs___Public_Affairs_Public_Diplomacy__PA_PD__Outreach').contains('submitted by partner'); - cy.get('#cy_results_7320___StateAFLaboratory___RPSO_laboratory_construction_projects').contains('pending at partner'); - }); -}); \ No newline at end of file diff --git a/cypress/integration/multipleMechanisms/3.multipleMechanismsRecall.test.js b/cypress/integration/multipleMechanisms/3.multipleMechanismsRecall.test.js deleted file mode 100644 index b2bf792..0000000 --- a/cypress/integration/multipleMechanisms/3.multipleMechanismsRecall.test.js +++ /dev/null @@ -1,56 +0,0 @@ -describe('Multiple Mechanisms RECALL', function() { - it('_ make sure mechanisms are submitted', () => { - cy.loginAs('approvals-partner-botswana'); - cy.approvalsApiCall('partner-botswana', 'submit', 'multiple1'); - cy.approvalsApiCall('partner-botswana', 'submit', 'multiple2'); - }); - - it('should have appropriate statuses in list', ()=>{ - cy.goHome(); - cy.searchMechanisms('MER Results','2019Q3','Botswana'); - cy.get('#cy_results_14707___StateAFSmallGrants___Ambassador_s_PEPFAR_Small_Grants_Program').contains('submitted by partner'); - cy.get('#cy_results_14790___StateAFPublicAffairs___Public_Affairs_Public_Diplomacy__PA_PD__Outreach').contains('submitted by partner'); - cy.get('#cy_results_7320___StateAFLaboratory___RPSO_laboratory_construction_projects').contains('pending at partner'); - }); - - it('should be able to select two mechanisms for recall',()=>{ - cy.get('#cy_mechanismListTab_recall').click(); - cy.get('#cy_results_14707___StateAFSmallGrants___Ambassador_s_PEPFAR_Small_Grants_Program').find('input').click(); - cy.get('#cy_results_14790___StateAFPublicAffairs___Public_Affairs_Public_Diplomacy__PA_PD__Outreach').find('input').click(); - cy.containsAll([ - '2 mechanism(s) selected', - '2 selected mechanism(s)' - ]); - }); - - it('Should redirect to action page with the right url', ()=>{ - cy.get('#cy_list_mechanismAction').click(); - cy.url().should('include','/action?approvalCombos=l1KFEXKI4Dg%3ATKBbV46WUX3%3AiRbiBYQuiNZ%3A&approvalCombos=l1KFEXKI4Dg%3AVdSh1pgKSLp%3AXTVSZlHG6Ux%3A&period=2019Q3&workflow=RwNpkAM7Hw7'); - }); - - it('should have the right content', ()=>{ - cy.containsAll([ - '14707 - StateAFSmallGrants - Ambassador\'s PEPFAR Small Grants Program', - 'DEPARTMENT OF STATE', - 'Number of new health workers who graduated from a pre-service training institution or program as a result of PEPFAR-supported strengthening efforts, within the reporting period, by select cadre. Numerator will auto-calculate from cadre disaggregates.', - '14790 - StateAFPublicAffairs - Public Affairs/Public Diplomacy (PA/PD) Outreach' - ], {timeout: 15000}); - }); - - it('should be able to recall both', ()=>{ - cy.get('#cy_mechanismAction_recall').click(); - cy.contains('Mechanisms successfully recalled'); - cy.info().containsAll([ - 'pending at partner', - ]); - cy.actions().contains('submit'); - }); - - it('should have appropriate statuses in list', ()=>{ - cy.goHome(); - cy.searchMechanisms('MER Results','2019Q3','Botswana'); - cy.get('#cy_results_14707___StateAFSmallGrants___Ambassador_s_PEPFAR_Small_Grants_Program').contains('pending at partner'); - cy.get('#cy_results_14790___StateAFPublicAffairs___Public_Affairs_Public_Diplomacy__PA_PD__Outreach').contains('pending at partner'); - cy.get('#cy_results_7320___StateAFLaboratory___RPSO_laboratory_construction_projects').contains('pending at partner'); - }); -}); \ No newline at end of file diff --git a/cypress/integration/multipleMechanisms/multipleMechanisms.sameState.test.js b/cypress/integration/multipleMechanisms/multipleMechanisms.sameState.test.js deleted file mode 100644 index f7c34be..0000000 --- a/cypress/integration/multipleMechanisms/multipleMechanisms.sameState.test.js +++ /dev/null @@ -1,15 +0,0 @@ -describe('Multiple Mechanisms ~ Same Status', ()=>{ - it('should be able to view 100 mechanisms', ()=>{ - cy.loginAs('approvals-global'); - cy.goHome(); - cy.searchMechanisms('MER Targets','2019Oct','Global'); - cy.get('.MuiTablePagination-select').click(); - cy.get('[data-value="100"]').click(); - }); - it('should not be able to view multiple mechanisms', ()=>{ - cy.get('#cy_results_00200___PEPFAR_MOH_align__PEPFAR_Data').find('input').click(); - cy.get('#cy_results_10000___NU2GGH001140___HAIVN').find('input').click(); - cy.get('#cy_list_mechanismAction').should('be.disabled'); - cy.contains('All selected mechanisms must have the same status to proceed'); - }); -}); \ No newline at end of file diff --git a/cypress/integration/multipleMechanisms/submitAll.test.js b/cypress/integration/multipleMechanisms/submitAll.test.js deleted file mode 100644 index ad7865b..0000000 --- a/cypress/integration/multipleMechanisms/submitAll.test.js +++ /dev/null @@ -1,23 +0,0 @@ -describe('Submit All', ()=>{ - it('select all mechanisms', ()=>{ - cy.loginAs('superAdmin'); - cy.goHome(); - cy.searchMechanisms('MER Targets','2019Oct','Global'); - cy.get('.MuiTableRow-head').find('input').click(); - cy.get('#cy_selectSingleStatus').click(); - }); - it('should see form preview and mech info', ()=>{ - cy.get('#cy_mechanismAction_view').click(); - cy.containsAll([ - 'Angola, Asia Region, Botswana', - '81378 - TBDawardUSAID - [Placeholder - 81378 Sierra Leone USAID ]', - 'Loading aggregated dataset. This may take several minutes.', - 'accepted by global', - 'pending at partner', - 'MER Targets', - 'Oct 2019 - Sep 2020', - 'All Mechanisms Overview' - ],{timeout: 20000}); - cy.contains('Number of males circumcised as part of the voluntary medical male circumcision', {timeout: 4*60*1000}); - }); -}); \ No newline at end of file diff --git a/cypress/support/index.js b/cypress/support/index.js index d8eb7e0..6658f65 100644 --- a/cypress/support/index.js +++ b/cypress/support/index.js @@ -19,7 +19,6 @@ import "./utils/contains" import "./utils/visit" import "./login/login" import "./pages/list" -import "./pages/action" import "./api/mechanism" import "./api/reset" diff --git a/cypress/support/pages/action.js b/cypress/support/pages/action.js deleted file mode 100644 index 21362e5..0000000 --- a/cypress/support/pages/action.js +++ /dev/null @@ -1,14 +0,0 @@ -const actionPageAreas = [ - {name: 'info', css: '.cy_mechanismInfo'}, - {name: 'actions', css: '#cy_mechanismActions'}, - {name: 'stepper', css: '#cy_actionPage_stepper'}, - {name: 'form', css: '#cy_actionPage_form'}, -]; - -function generateAreaCommand(commandName, cssSelector){ - Cypress.Commands.add(commandName, ()=>{ - return cy.get(cssSelector) - }); -} - -actionPageAreas.forEach(area=>generateAreaCommand(area.name, area.css)); \ No newline at end of file diff --git a/src/modules/filters/components/filters.component.tsx b/src/modules/filters/components/filters.component.tsx new file mode 100644 index 0000000..4edb789 --- /dev/null +++ b/src/modules/filters/components/filters.component.tsx @@ -0,0 +1,16 @@ +import React from "react"; +import {Drawer} from "@material-ui/core"; +import {FiltersModel} from "../models/filters.model"; + +export default function Filters({selectedFilters, selectFilters}:{ + selectedFilters: FiltersModel, + selectFilters: (FiltersModel)=>void +}) { + return + + ; +} \ No newline at end of file diff --git a/src/modules/filters/models/filters.model.tsx b/src/modules/filters/models/filters.model.tsx new file mode 100644 index 0000000..889e804 --- /dev/null +++ b/src/modules/filters/models/filters.model.tsx @@ -0,0 +1,16 @@ +export type idName = {id:string, name:string} + +export enum DedupeTypeModel { + pure = 'pure', + pureAndResolved = 'pureAndResolved', + crosswalk = 'crosswalk' +} + +export type FiltersModel = { + organisationUnit: idName, + dataType: idName, + period: idName, + agency: idName, + technicalArea: idName, + dedupeType: DedupeTypeModel +} \ No newline at end of file diff --git a/src/modules/main/components/main.component.tsx b/src/modules/main/components/main.component.tsx index ac96215..2c52c3d 100644 --- a/src/modules/main/components/main.component.tsx +++ b/src/modules/main/components/main.component.tsx @@ -1,7 +1,20 @@ import React from "react"; +import Filters from "../../filters/components/filters.component"; +import {FiltersModel} from "../../filters/models/filters.model"; -export default class Main extends React.Component<{},{}> { - render() { - return hello world; - } +export default class Main extends React.Component<{}, { + selectedFilters:FiltersModel +}> { + filtersSelected = (selectedFilters:FiltersModel):void=>{ + this.setState({selectedFilters}); + }; + + render() { + return + + ; + } } \ No newline at end of file From a04abe89a1478aea3ced10a42a706090aea43610 Mon Sep 17 00:00:00 2001 From: Jakub Date: Wed, 25 Mar 2020 16:25:48 -0400 Subject: [PATCH 3/5] working almost --- .../filters/components/filters.component.tsx | 19 ++++++++++++---- .../components/selectFilter.component.tsx | 22 +++++++++++++++++++ src/modules/filters/models/filters.model.tsx | 9 ++++++++ .../main/components/main.component.tsx | 20 ++++++++++++++--- .../shared/services/camelCase.service.tsx | 8 +++++++ .../shared/services/makeId.service.tsx | 3 +++ 6 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 src/modules/filters/components/selectFilter.component.tsx create mode 100644 src/modules/shared/services/camelCase.service.tsx create mode 100644 src/modules/shared/services/makeId.service.tsx diff --git a/src/modules/filters/components/filters.component.tsx b/src/modules/filters/components/filters.component.tsx index 4edb789..5a09824 100644 --- a/src/modules/filters/components/filters.component.tsx +++ b/src/modules/filters/components/filters.component.tsx @@ -1,16 +1,27 @@ import React from "react"; import {Drawer} from "@material-ui/core"; -import {FiltersModel} from "../models/filters.model"; +import {FiltersModel, FilterType} from "../models/filters.model"; +import SelectFilter from "./selectFilter.component"; -export default function Filters({selectedFilters, selectFilters}:{ +function renderSelectFilters(selectedFilters: FiltersModel, onFiltersSelect: (FiltersModel)=>void) { + return Object.keys(selectedFilters).map((filterType:string)=>{ + return + }); +} + +export default function Filters({selectedFilters, onFiltersSelect}:{ selectedFilters: FiltersModel, - selectFilters: (FiltersModel)=>void + onFiltersSelect: (FiltersModel)=>void }) { return - + {renderSelectFilters(selectedFilters, onFiltersSelect)} ; } \ No newline at end of file diff --git a/src/modules/filters/components/selectFilter.component.tsx b/src/modules/filters/components/selectFilter.component.tsx new file mode 100644 index 0000000..c95ea02 --- /dev/null +++ b/src/modules/filters/components/selectFilter.component.tsx @@ -0,0 +1,22 @@ +import React from "react"; +import {InputLabel, MenuItem, Select} from "@material-ui/core"; +import {FilterType, idName} from "../models/filters.model"; +import {camelCaseToHuman} from "../../shared/services/camelCase.service"; + +export default function SelectFilter({filterType, filterValue, onFilterSelect}:{ + filterType:FilterType, + filterValue:idName, + onFilterSelect:(idName)=>void +}) { + return + {camelCaseToHuman(filterType)} + + ; +} \ No newline at end of file diff --git a/src/modules/filters/models/filters.model.tsx b/src/modules/filters/models/filters.model.tsx index 889e804..6ef7ecb 100644 --- a/src/modules/filters/models/filters.model.tsx +++ b/src/modules/filters/models/filters.model.tsx @@ -6,6 +6,15 @@ export enum DedupeTypeModel { crosswalk = 'crosswalk' } +export enum FilterType { + organisationUnit = 'organisationUnit', + dataType='dataType', + period='period', + agency='agency', + technicalArea='technicalArea', + dedupeType='dedupeType' +} + export type FiltersModel = { organisationUnit: idName, dataType: idName, diff --git a/src/modules/main/components/main.component.tsx b/src/modules/main/components/main.component.tsx index 2c52c3d..b63b9fe 100644 --- a/src/modules/main/components/main.component.tsx +++ b/src/modules/main/components/main.component.tsx @@ -1,11 +1,25 @@ import React from "react"; import Filters from "../../filters/components/filters.component"; -import {FiltersModel} from "../../filters/models/filters.model"; +import {DedupeTypeModel, FiltersModel, idName} from "../../filters/models/filters.model"; export default class Main extends React.Component<{}, { selectedFilters:FiltersModel }> { - filtersSelected = (selectedFilters:FiltersModel):void=>{ + constructor(props) { + super(props); + this.state = { + selectedFilters: { + organisationUnit: {id:'1',name:'angola'}, + dataType: {id:'1',name:'angola'}, + period: {id:'1',name:'angola'}, + agency: {id:'1',name:'angola'}, + technicalArea: {id:'1',name:'angola'}, + dedupeType: 'crosswalk' as DedupeTypeModel + } + }; + } + + onFiltersSelect = (selectedFilters:FiltersModel):void=>{ this.setState({selectedFilters}); }; @@ -13,7 +27,7 @@ export default class Main extends React.Component<{}, { return ; } diff --git a/src/modules/shared/services/camelCase.service.tsx b/src/modules/shared/services/camelCase.service.tsx new file mode 100644 index 0000000..d5aa4e0 --- /dev/null +++ b/src/modules/shared/services/camelCase.service.tsx @@ -0,0 +1,8 @@ +function capitalize(word) { + return word.charAt(0).toUpperCase() + word.substring(1); +} + +export function camelCaseToHuman(text:string):string { + var words = text.match(/[A-Za-z][a-z]*/g) || []; + return words.map(capitalize).join(" "); +} \ No newline at end of file diff --git a/src/modules/shared/services/makeId.service.tsx b/src/modules/shared/services/makeId.service.tsx new file mode 100644 index 0000000..75dbc14 --- /dev/null +++ b/src/modules/shared/services/makeId.service.tsx @@ -0,0 +1,3 @@ +export default function makeId(name:string):string{ + return name.replace(/[^A-z0-9]+/g,'_'); +} \ No newline at end of file From 56f63a955b55e8c1d9119e932d637cf25e178c8a Mon Sep 17 00:00:00 2001 From: Jakub Date: Thu, 26 Mar 2020 18:05:46 -0400 Subject: [PATCH 4/5] filter option provider --- .../filters/components/filters.component.css | 3 + .../filters/components/filters.component.tsx | 17 ++++-- .../components/selectFilter.component.tsx | 11 ++-- .../filterOptionsProvider.service.tsx | 58 +++++++++++++++++++ .../main/components/main.component.tsx | 26 ++++++--- .../shared/components/loading.component.tsx | 17 ++++++ 6 files changed, 116 insertions(+), 16 deletions(-) create mode 100644 src/modules/filters/components/filters.component.css create mode 100644 src/modules/filters/services/filterOptionsProvider.service.tsx create mode 100644 src/modules/shared/components/loading.component.tsx diff --git a/src/modules/filters/components/filters.component.css b/src/modules/filters/components/filters.component.css new file mode 100644 index 0000000..7374664 --- /dev/null +++ b/src/modules/filters/components/filters.component.css @@ -0,0 +1,3 @@ +.filters_root { + top: 48px!important; +} \ No newline at end of file diff --git a/src/modules/filters/components/filters.component.tsx b/src/modules/filters/components/filters.component.tsx index 5a09824..6e6d80f 100644 --- a/src/modules/filters/components/filters.component.tsx +++ b/src/modules/filters/components/filters.component.tsx @@ -2,26 +2,35 @@ import React from "react"; import {Drawer} from "@material-ui/core"; import {FiltersModel, FilterType} from "../models/filters.model"; import SelectFilter from "./selectFilter.component"; +import "./filters.component.css"; +import FilterOptionsProvider from "../services/filterOptionsProvider.service"; -function renderSelectFilters(selectedFilters: FiltersModel, onFiltersSelect: (FiltersModel)=>void) { +function renderSelectFilters( + selectedFilters: FiltersModel, + onFiltersSelect: (FiltersModel)=>void, + filterOptionsProvider: FilterOptionsProvider +) { return Object.keys(selectedFilters).map((filterType:string)=>{ return }); } -export default function Filters({selectedFilters, onFiltersSelect}:{ +export default function Filters({selectedFilters, onFiltersSelect, filterOptionsProvider}:{ selectedFilters: FiltersModel, - onFiltersSelect: (FiltersModel)=>void + onFiltersSelect: (FiltersModel)=>void, + filterOptionsProvider: FilterOptionsProvider }) { return - {renderSelectFilters(selectedFilters, onFiltersSelect)} + {renderSelectFilters(selectedFilters, onFiltersSelect, filterOptionsProvider)} ; } \ No newline at end of file diff --git a/src/modules/filters/components/selectFilter.component.tsx b/src/modules/filters/components/selectFilter.component.tsx index c95ea02..fb79dca 100644 --- a/src/modules/filters/components/selectFilter.component.tsx +++ b/src/modules/filters/components/selectFilter.component.tsx @@ -3,20 +3,23 @@ import {InputLabel, MenuItem, Select} from "@material-ui/core"; import {FilterType, idName} from "../models/filters.model"; import {camelCaseToHuman} from "../../shared/services/camelCase.service"; -export default function SelectFilter({filterType, filterValue, onFilterSelect}:{ +export default function SelectFilter({filterType, filterValue, onFilterSelect, filterOptions}:{ filterType:FilterType, filterValue:idName, - onFilterSelect:(idName)=>void + onFilterSelect:(idName)=>void, + filterOptions: idName[] }) { + console.log(filterOptions); return {camelCaseToHuman(filterType)} + {JSON.stringify(filterOptions)} ; } \ No newline at end of file diff --git a/src/modules/filters/services/filterOptionsProvider.service.tsx b/src/modules/filters/services/filterOptionsProvider.service.tsx new file mode 100644 index 0000000..bbffc08 --- /dev/null +++ b/src/modules/filters/services/filterOptionsProvider.service.tsx @@ -0,0 +1,58 @@ +import {FilterType, idName} from "../models/filters.model"; +import {getData} from "../../shared/services/dataApi.service"; + +function transformIdNameList(list:{id:string, displayName}[]):idName[]{ + return list.map(item=>{return{id:item.id, name:item.displayName}}); +} + +function extractAgencyName(groupName:string):string{ + return groupName + .replace(/OU .+ Agency /,'') + .replace(' users','') + .replace(' all mechanisms',''); +} + +export default class FilterOptionsProvider { + private orgUnitList: idName[]; + private agencyList: idName[]; + private technicalAreaList: idName[]; + + init():Promise{ + return Promise.all([ + this.getOrganisationUnits(), + this.getAgencies(), + // this.getTechnicalAreas() + ]); + } + + private getOrganisationUnits(){ + return getData('/organisationUnits.json?filter=level:eq:3') + .then(res=>transformIdNameList(res.organisationUnits)) + .then((orgUnits)=>{ + this.orgUnitList = orgUnits; + }); + } + + private getAgencies(){ + return getData('/userGroups.json?filter=displayName:like:Agency&paging=false') + .then(res=>transformIdNameList(res.userGroups)) + .then((userGroups)=>{ + let agencies = userGroups.map(group=>{return {id:group.id, name: extractAgencyName(group.name)}}); + this.agencyList = agencies; + }); + } + + private getTechnicalAreas(){ + + } + + getFilterOptions(type:FilterType){ + switch(type){ + case FilterType.agency: return this.agencyList; + case FilterType.organisationUnit: return this.orgUnitList; + //throw new Error('Unknown filter option') + return []; + } + } +} + diff --git a/src/modules/main/components/main.component.tsx b/src/modules/main/components/main.component.tsx index b63b9fe..11094d7 100644 --- a/src/modules/main/components/main.component.tsx +++ b/src/modules/main/components/main.component.tsx @@ -1,22 +1,30 @@ import React from "react"; import Filters from "../../filters/components/filters.component"; import {DedupeTypeModel, FiltersModel, idName} from "../../filters/models/filters.model"; +import FilterOptionsProvider from "../../filters/services/filterOptionsProvider.service"; +import Loading from "../../shared/components/loading.component"; export default class Main extends React.Component<{}, { - selectedFilters:FiltersModel + selectedFilters:FiltersModel, + loadingFilterOptions: boolean }> { + filterOptionsProvider:FilterOptionsProvider = new FilterOptionsProvider(); constructor(props) { super(props); this.state = { selectedFilters: { - organisationUnit: {id:'1',name:'angola'}, - dataType: {id:'1',name:'angola'}, - period: {id:'1',name:'angola'}, - agency: {id:'1',name:'angola'}, - technicalArea: {id:'1',name:'angola'}, - dedupeType: 'crosswalk' as DedupeTypeModel - } + organisationUnit: null, + dataType: null, + period: null, + agency: null, + technicalArea: null, + dedupeType: null, + }, + loadingFilterOptions: true }; + this.filterOptionsProvider.init().then(()=>{ + this.setState({loadingFilterOptions:false}); + }); } onFiltersSelect = (selectedFilters:FiltersModel):void=>{ @@ -24,10 +32,12 @@ export default class Main extends React.Component<{}, { }; render() { + if (this.state.loadingFilterOptions) return ; return ; } diff --git a/src/modules/shared/components/loading.component.tsx b/src/modules/shared/components/loading.component.tsx new file mode 100644 index 0000000..44cb36e --- /dev/null +++ b/src/modules/shared/components/loading.component.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import {LinearProgress, Typography} from "@material-ui/core"; +import { TextAlignProperty } from 'csstype'; + +const styles = { + message: { + textAlign: 'center' as TextAlignProperty + } +}; + +export default function Loading({message}:{message:string}) { + return + +
    + {message} +
    ; +} \ No newline at end of file From 00dee120d46e3d0d1cfaaeab8df785a9ba93bef2 Mon Sep 17 00:00:00 2001 From: Jakub Date: Fri, 27 Mar 2020 11:37:13 -0400 Subject: [PATCH 5/5] list of agencies --- .../filters/components/selectFilter.component.tsx | 3 +-- .../services/filterOptionsProvider.service.tsx | 15 +++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/modules/filters/components/selectFilter.component.tsx b/src/modules/filters/components/selectFilter.component.tsx index fb79dca..37c99aa 100644 --- a/src/modules/filters/components/selectFilter.component.tsx +++ b/src/modules/filters/components/selectFilter.component.tsx @@ -12,14 +12,13 @@ export default function SelectFilter({filterType, filterValue, onFilterSelect, f console.log(filterOptions); return {camelCaseToHuman(filterType)} - {JSON.stringify(filterOptions)} ; } \ No newline at end of file diff --git a/src/modules/filters/services/filterOptionsProvider.service.tsx b/src/modules/filters/services/filterOptionsProvider.service.tsx index bbffc08..19af8dd 100644 --- a/src/modules/filters/services/filterOptionsProvider.service.tsx +++ b/src/modules/filters/services/filterOptionsProvider.service.tsx @@ -8,8 +8,8 @@ function transformIdNameList(list:{id:string, displayName}[]):idName[]{ function extractAgencyName(groupName:string):string{ return groupName .replace(/OU .+ Agency /,'') + .replace('Global Agency ','') .replace(' users','') - .replace(' all mechanisms',''); } export default class FilterOptionsProvider { @@ -21,7 +21,7 @@ export default class FilterOptionsProvider { return Promise.all([ this.getOrganisationUnits(), this.getAgencies(), - // this.getTechnicalAreas() + this.getTechnicalAreas() ]); } @@ -34,11 +34,10 @@ export default class FilterOptionsProvider { } private getAgencies(){ - return getData('/userGroups.json?filter=displayName:like:Agency&paging=false') - .then(res=>transformIdNameList(res.userGroups)) - .then((userGroups)=>{ - let agencies = userGroups.map(group=>{return {id:group.id, name: extractAgencyName(group.name)}}); - this.agencyList = agencies; + return getData('/categoryOptionGroups.json?filter=groupSets.id:eq:bw8KHXzxd9i&paging=false') + .then(res=>transformIdNameList(res.categoryOptionGroups)) + .then((agencyList)=>{ + this.agencyList = agencyList; }); } @@ -51,7 +50,7 @@ export default class FilterOptionsProvider { case FilterType.agency: return this.agencyList; case FilterType.organisationUnit: return this.orgUnitList; //throw new Error('Unknown filter option') - return []; + default: return []; } } }