summaryrefslogtreecommitdiffstats
path: root/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts')
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-closed-cloop.js28
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-controller.js970
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-menu-edit.js184
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-route.js43
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-whitelist.js3
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-controller.js5
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-route.js7
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate-list-controller.js71
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/collaborate.js7
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/workflowController.js490
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborateList-route.js19
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaboration-controller.js266
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-profile/self-profile-controller.js354
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-chart-controller.js499
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-import-controller.js20
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-router.js41
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-run-controller.js374
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-search-controller.js244
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-step-controller.js786
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/drools-controller.js53
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/nbook-framecontroller.js15
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebook-controller.js37
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebookFrameController.js24
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowApp.js6
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowController.js513
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowRouting.js8
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/fn-menu-add-popup-controller.js339
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/profile-route.js19
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/profile-search-controller-DS2.js93
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/sampleProfileController.js22
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/usage-list-controller.js39
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/welcome-controller.js408
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/welcome-route.js7
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js64
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/ds2Header.js118
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/ds2LeftMenu.js73
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/footer.js27
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/error_modal.html19
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modal.html20
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modalpopup.html20
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminMenuService.js129
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminService.js453
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-modal/modalService.js38
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-profile/selfProfileService.js114
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/raptorReportFactory.js674
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/reportModalControllers.js423
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/stepFormFactory.js198
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-sample-page/droolsService.js53
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/headerServiceDS2.js17
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/leftMenuServiceDS2.js97
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/manifestService.js24
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/modalServiceDS2.js31
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/profileServiceDS2.js93
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/sampleService.js19
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/userInfoServiceDS2.js32
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/ngworkflow-landing.html74
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-landing.html68
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-listing.html65
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-new.html110
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-preview.html24
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-remove.html26
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-schedule.html130
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/b2b-leftnav-ext.html50
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-content.html146
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-page.html146
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin-menu-edit.html102
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin.html69
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin_closed_loop.html17
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html76
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaboration.html176
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/jcs_admin.html73
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/admin-menu-del-confirm.html22
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-confirm.html22
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-region-confirm.html22
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/clearItem-region-confirm.html22
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/collaborate-list-toggle-profile-active-status.html22
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fn-menu-edit.html129
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fnmenu-add.html136
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-child-add-confirm.html25
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-confirm-activation.html23
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-delete-confirm.html22
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-add-confirm.html25
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-role-del-confirm.html22
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-add.html81
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-del-confirm.html22
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-edit.html28
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-child-roles-modal.html33
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-modal.html39
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/ngadmin.html73
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role-function.html72
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role.html61
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role_list.html47
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/usage.html43
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/profile-confirm-toggle.html23
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add-confirm.html25
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add.html37
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-del-confirm.html23
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/ngprofile.html75
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile.html69
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/all-reports.html78
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/dynamicform.js134
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/step-form-directive.js14
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-del-confirm.html18
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-formfield-del-confirm.html17
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-role-del-confirm.html19
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-user-del-confirm.html18
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-user-role-confirm-toggle.html24
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-col-edit.html232
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-drilldown-edit.html112
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-formfield-edit.html154
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-report-name-validation.html20
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html57
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/ngall-reports.html84
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-chart-wizard.html1080
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-import.html14
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-run.html124
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-search.html57
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-step.html35
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step1.html216
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step2.html26
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step3.html34
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step4.html47
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step5.html172
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step6.html34
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step7.html16
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step1.json232
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step2.json34
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step3.json19
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step4.json25
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step5.json19
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step6.json28
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/report-step.html243
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools-list.html32
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools.html55
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/frame_insert.html27
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/ngnotebook-frame.html81
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-frame.html74
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-page.html80
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-viz.html7
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Header.html68
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Left_menu.html3
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/loginSnippet.html63
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-content.html191
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-sample.html112
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome.html150
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/angular-gridster.js2244
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/ui-gridster-tpls.js168
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-closed-cloop.js28
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-whitelist.js3
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/ase-controller.js3
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-controller.js60
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-list-controller.js101
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/collaborate-list-controller.js44
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/dummy.txt0
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/modelpopupController.js21
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/dummy.txt0
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/footer.js11
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/header.js477
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/leftMenu.js184
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/jquery.resize.js139
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/debug.js329
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery-latest.js10598
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery-ui-latest.js18706
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery.layout-latest.js6086
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/modalService.js185
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/moment.min.js6
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/network/net_map.js947
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/adminService.js141
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/headerService.js70
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/leftMenuService.js35
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/profileService.js79
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/userInfoService.js32
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/socket/peerBroadcast.js103
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/utils/dummy.txt0
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/utils/sandbox-resources.html9
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/dummy.txt0
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/admin_closed_loop.html20
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/broadcast.html42
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/broadcast_list.html52
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal.html263
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_add.html136
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_edit.html129
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_role.html75
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_rolefunction.html27
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/customWidgetSettings.js133
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/dataModel.js58
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.js167
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.less24
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/directives.js230
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/explicitSave.js33
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.css146
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.js3
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.less16
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index_original.css113
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/layouts.js72
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/report_whitelist.js3
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/resize.js45
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/configurableWidgetModalOptions.html6
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/fluid.html8
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/layouts.html1
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/r-cloud.html8
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/raptor-report.html29
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/resizable.html6
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html5
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/widgetSpecificSettings.html19
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.css6658
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.less3
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/angular-markdown-directive/markdown.js36
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsCtrl.js34
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsRaptorReportCtrl.js216
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-raptor-report-template.html26
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-rcloud-notebook-template.html22
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/altDashboard.html49
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.html74
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.js427
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.less88
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.spec.js878
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModal.html13
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModalCtrl.js32
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.html19
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js151
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.spec.js392
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.js246
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.spec.js164
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.js64
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.spec.js104
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/DashboardState.js180
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.js253
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.spec.js692
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDataModel.js45
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDefCollection.js56
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.js112
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.spec.js156
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/report-dashboard.html201
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/webrtc/getSourceId.html78
235 files changed, 0 insertions, 69851 deletions
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-closed-cloop.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-closed-cloop.js
deleted file mode 100644
index 94169ff4..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-closed-cloop.js
+++ /dev/null
@@ -1,28 +0,0 @@
-appDS2.controller('adminClosedLoopController', ['$scope','$http','$q','$log',function ($scope, $http,$q, $log){
- $scope.camunda_cockpit_url = '';
- var deferred = $q.defer();
- $http({
- method: "GET",
- url: "get_camunda_cockpit_link",
- }).success( function(res) {
- // if the returned response is error HTML page in string format
- if(res.link_defined=='false'){
- $log.error('Retrieval of camunda cockpit link failed. Please make sure the variable "camunda_cockpit_url" is defined in the system.properties file.');
- deferred.reject(status);
- }
- // valid cockpit url
- else if(res.camunda_cockpit_link!=null & res.camunda_cockpit_link!= '') {
- $scope.camunda_cockpit_url = res.camunda_cockpit_link;
- deferred.resolve(res);
- // if the defined url is empty;
- } else {
- $log.error('Please ensure the variable "camunda_cockpit_url" is properly defined in system.properties file (i.e., neither null nor empty).');
- deferred.reject(status);
- }
- // API call fails
- }).error( function(status) {
- $log.error('get_camunda_cockpit_link RestAPI call failed.');
- deferred.reject(status);
- });
- return deferred.promise;
-}]); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-controller.js
deleted file mode 100644
index a8b89757..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-controller.js
+++ /dev/null
@@ -1,970 +0,0 @@
-appDS2.controller('adminController', function($scope, $http,AdminService, $modal, $routeParams, $rootScope){
-
- $scope.totalPages = 5;
- $scope.viewPerPage = 8;
- $scope.searchString = "";
- $scope.currentPage = 1;
- $scope.nextSort="";
- $scope.showLoader = false;
- $scope.tableData=[];
- $scope.showLoader=false;
- $scope.routeRoleId = $routeParams.roleId;
- $scope.regions = [];
- /*function*/
- $scope.getFunctionList = function(){
- $scope.tableData.length=0;
- $scope.showLoader=true;
- AdminService.getRoleFunctionList().then(function(data){
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.tableData =JSON.parse($scope.data.availableRoleFunctions);
- },function(error){
- console.log("failed");
- }).finally(function() {
- $scope.showLoader=false; // Always execute this on both error and success
- });
- }
-
- $scope.getCacheRegionsList = function(){
- AdminService.getCacheRegions().then(function(data){
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.regions =$scope.data;
- },function(error){
- console.log("failed");
- });
- }
-
-
- $scope.delRoleFunc = function(roleData){
- AdminService.delRoleFunctionList(roleData).then(function(msg){
- var message = msg;
- if(message.data!=null && message.data!=''){
- var status = message.data;
- if(status=='"success"'){
- $scope.successPopUp();
- $scope.getFunctionList();
- }else{
- $scope.errorPopUp('');
- }
- }
-
- },function(error){
-
- });
- }
-
- $scope.saveRoleFunction = function(roleData){
- AdminService.saveRoleFunctionList(roleData).then(function(msg){
- var message = msg;
- if(message.data!=null && message.data!=''){
- var status = message.data;
- if(status=='"success"'){
- $scope.successPopUp();
- $scope.getFunctionList();
- }else{
- $scope.errorPopUp('');
- }
- }
-
- },function(error){
-
- });
- }
- $scope.addRoleFunction = function(roleData){
- if(/[^a-zA-Z0-9\-\.\_]/.test(roleData.type)){
- errorMsg = 'Type can only contain alphanumeric characters, dots(.) and underscores(_)';
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return errorMsg;
- }
- }
- });
- return;
- }
- if(roleData.action !== '*' && /[^a-zA-Z0-9\-\.\_]/.test(roleData.action)){
- errorMsg = 'Action can only contain alphanumeric characters, hyphens(-), dots(.) and underscores(_) and single asterisk character(*)';
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return errorMsg;
- }
- }
- });
- return;
- }
- if(/[^a-zA-Z0-9\-\:\_\./*]/.test(roleData.code)){
- errorMsg = 'Code can only contain alphanumeric characters, hyphens(-), dots(.), colons(:), forwardSlash(/) , asterisk(*) and underscores(_)';
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return errorMsg;
- }
- }
- });
- return;
- }
- if(/[^a-zA-Z0-9\-\_ \.]/.test(roleData.name)){
- errorMsg = 'Name can only contain alphanumeric characters, spaces, hyphens(-), dots(.) and underscores(_)';
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return errorMsg;
- }
- }
- });
- return;
- }
- AdminService.addRoleFunctionList(roleData).then(function(msg){
- var message = msg;
- if(message.data!=null && message.data!=''){
- var status = message.data;
- if(status=='"success"'){
- $scope.successPopUp();
- $scope.getFunctionList();
- }else if(status=='"code exists"'){
- $scope.errorPopUp('Code already exists');
- $scope.getFunctionList();
- }else{
- $scope.errorPopUp('');
- }
- }
-
- },function(error){
-
- });
- }
- /*init*/
- $scope.getFunctionList();
- $scope.getCacheRegionsList();
- /*popup*/
- var ModalInstanceCtrl = function ($scope, $modalInstance, items, AdminService,$rootScope) {
- $scope.roleFun=items;
- $scope.msg=items;
-
- $scope.ngRepeatDemo = [
- {id: 'menuradiobutton1', value: 'menu', labelvalue: 'menu'},
- {id: 'urlradiobutton2', value: 'url', labelvalue: 'url'},
- {id: 'otherradiobutton3', value: 'other', labelvalue: 'other'}
- ]
- $scope.selectedvalueradioButtonGroup = {
- type: 'menu'
- }
- $scope.roleFun = {
- action: '*'
- }
-
- $scope.selectedvalueradioButtonOther = {
- type: ''
- }
-
- // remove role function associated to a role on Role Edit page
- $scope.roleFunRemoveRole = function (roleFunction) {
- AdminService.removeRoleFunction(roleFunction, $routeParams.roleId).then(function(msg){
- var message = msg;
- $scope.cancel();
- if(message.role){
- $rootScope.$broadcast('updateRoleFunctions',{data:message.role,removedRoleFunc: roleFunction.name});
- }else{
- $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return msg;
- }
- }
- })
- }
-
- },function(error){
- console.log("error");
- });
- }
-
- //role activation for selected child role
- $scope.activateRoleChildConfirmPopUp = function (selected, availableRole) {
- $scope.msg.roleFun = availableRole.name;
- $scope.msg.selected = selected;
- $scope.msg.availableRole = availableRole;
- var toggleType = null;
- if(selected) {
- toggleType = "activate";
- } else {
- toggleType = "inactivate";
- }
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-child-add-confirm.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return $scope.msg;
- }
- }
- });
- }
-
- // confirm Child Role Add
- $scope.confirmRoleChildAdd = function(selected,availableRole,id){
- AdminService.confirmRoleChildAdd(selected,availableRole,id).then(function(msg){
- var message = msg;
- $scope.cancel();
- if(message.role){
- }else{
- $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return msg;
- }
- }
- })
- }
-
- },function(error){
- console.log("error");
- });
- }
-
- // confirm Child Role Remove
- $scope.confirmRoleChildRemove = function(selected,availableRole,id){
- AdminService.confirmRoleChildRemove(selected,availableRole,id).then(function(msg){
- var message = msg;
- $scope.cancel();
- if(message.role){
- //$rootScope.$broadcast('updateAvailbleRoles',{data:message.availableRoles});
- /*$modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html',
- sizeClass: 'modal-small',
- })*/
- }else{
- $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return msg;
- }
- }
- })
- }
-
- },function(error){
- console.log("error");
- });
- }
-
- //role activation for role function
- $scope.activateRoleConfirmPopUp = function (selected, availableRole) {
- $scope.msg.roleFun = availableRole.name;
- $scope.msg.selected = selected;
- $scope.msg.availableRole = availableRole;
- var toggleType = null;
- if(selected) {
- toggleType = "activate";
- } else {
- toggleType = "inactivate";
- }
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-add-confirm.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return $scope.msg;
- }
- }
- });
- }
-
- // confirm Role Function Add
- $scope.confirmRoleFunAdd = function(selected,availableRole,id){
- AdminService.confirmRoleFunAdd(selected,availableRole,id).then(function(msg){
- var message = msg;
- $scope.cancel();
- if(message.role){
- $rootScope.$broadcast('updateRoleFunctions',{data:message.role});
- }else{
- $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return msg;
- }
- }
- })
- }
-
- },function(error){
- console.log("error");
- });
- }
-
- // confirm Role Function Remove
- $scope.confirmRoleFunRemove = function(selected,availableRole,id){
- AdminService.confirmRoleFunRemove(selected,availableRole,id).then(function(msg){
- var message = msg;
- $scope.cancel();
- if(message.role){
- $rootScope.$broadcast('updateRoleFunctions',{data:message.role});
- }else{
- $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return msg;
- }
- }
- })
- }
-
- },function(error){
- console.log("error");
- });
- }
-
- //role activation
- $scope.roleActivate = function(selected,availableRole){
- AdminService.activateRole(selected,availableRole).then(function(msg){
- var message = msg;
- $scope.cancel();
- if(message.availableRoles){
- $rootScope.$broadcast('updateAvailbleRoles',{data:message.availableRoles});
- }else{
- $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return msg;
- }
- }
- })
- }
-
- },function(error){
- console.log("error");
- });
- }
-
- //role deletion
- $scope.delRole = function(roleData){
- AdminService.delRoleList(roleData).then(function(msg){
- var message = msg;
- $scope.cancel();
- if(message.availableRoles){
- $rootScope.$broadcast('updateAvailbleRoles',{data:message.availableRoles});
- }else{
- $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return msg;
- }
- }
- })
- }
-
- },function(error){
-
- });
- }
-
- $scope.save = function (data,type) {
- if(type !== 'other'){
- data.type = type ;
- } else{
- data.type = $scope.selectedvalueradioButtonOther.type ;
- }
- $modalInstance.close(data);
- };
-
- // Cancel for toggle switch on Role Fn
- $scope.cancelRoleFunSwitch = function (msg) {
- $scope.msg.availableRole.selected = !$scope.msg.availableRole.selected;
- $modalInstance.dismiss('cancel');
- };
-
- // Cancel for toggle switch on Role List
- $scope.cancelRoleSwitch = function (msg) {
- $scope.msg.availableRole.active = !$scope.msg.availableRole.active;
- $modalInstance.dismiss('cancel');
- };
-
- $scope.cancel = function () {
- $modalInstance.dismiss('cancel');
- };
-
- $scope.deleteFun = function(data){
- $modalInstance.close(data);
- }
- };
-
- $scope.successPopUp = function () {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return '';
- }
- }
- });
- };
-
- $scope.successTestModelPopUp = function (response) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/success_modalpopup.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-large',
- resolve: {
- items: function () {
- var message = {
- title: '',
- text: response
- };
- return message;
- }
- }
- });
- };
- $scope.errorPopUp = function (msg) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return msg;
- }
- }
- });
- };
- $scope.saveRoleFuncPopUp = function (availableRoleFunction) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-edit.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return availableRoleFunction;
- }
- }
- });
-
- modalInstance.result.then(function (data) {
- $scope.saveRoleFunction(data);
- });
- }
-
- $scope.addRoleFuncPopUp = function (availableRoleFunction) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-add.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return availableRoleFunction;
- }
- }
- });
-
- modalInstance.result.then(function (data,type) {
- $scope.addRoleFunction(data,type);
- });
- }
-
- $scope.delRoleFuncConfirmPopUp = function (availableRoleFunction) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-del-confirm.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- var message = {
- title: '',
- text: availableRoleFunction.name,
- content: availableRoleFunction
- };
- return message;
- }
- }
- });
-
- modalInstance.result.then(function (data) {
- $scope.delRoleFunc(data.content);
- });
- }
- $scope.clearAllFuncPopUp = function () {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-confirm.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- }
- }
- });
-
- modalInstance.result.then(function () {
- $scope.clearAll();
- });
- }
-
- $scope.clearAll = function(){
- AdminService.clearAdminRegions().then(function(msg){
- var message = msg;
- if(message.data!=null && message.data!=''){
- var status = message.data;
- if(status=='"success"'){
- $scope.successTestModelPopUp('');
- $scope.getCacheRegionsList();
- }else{
- $scope.errorPopUp();
- }
- }
-
- },function(error){
-
- });
- }
- $scope.showRegionDetailsFuncPopUp = function (response) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/success_modalpopup.html',
- controller: ModalInstanceCtrl,
- resolve: {
- items: function () {
- var message = {
- title: '',
- text: response,
- };
- return message;
- }
- }
- });
-
- modalInstance.result.then(function (response) {
- $scope.showRegionDetails(response);
- });
- }
-
- $scope.showRegionDetails = function(cacheName) {
- AdminService.showRegionDetails(cacheName).then(function(res){
-
- var message = res.data;
- var msgParsed = JSON.stringify(message);
-
- var messaged = message.data;
- var msgParsedd = JSON.stringify(messaged);
-
- if(message.data!=null && message.data!=''){
- var status = res.status;
-
-
- if(status==200){
-
-
-
- var htmlstring = message.data.toString();
- var htmlStrReplace = htmlstring.replace(/['"]+/g, '');
- var htmlStrReplaceSplit = htmlStrReplace.split('\n');
- var dataStr = htmlStrReplace.replace(/\\n/g, "\n");
- $scope.successTestModelPopUp(dataStr);
- }else{
- $scope.errorPopUp('');
- }
- }
-
- },function(error){
-
- });
- }
-
- $scope.clearRegionFuncPopUp = function (cacheName) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-region-confirm.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- var message = {
- title: '',
- text: cacheName
- };
- return message;
- }
- }
- });
-
- modalInstance.result.then(function (cacheName) {
- $scope.clearRegionFunction(cacheName);
- });
- }
-
- $scope.clearRegionFunction = function(cacheName){
- AdminService.clearRegionFunction(cacheName).then(function(msg){
- var message = msg;
- if(message.data!=null && message.data!=''){
- var status = message.data;
- if(status=='"success"'){
- $scope.successPopUp();
- $scope.getCacheRegionsList()();
- }else{
- $scope.errorPopUp('');
- }
- }
-
- },function(error){
-
- });
- }
-
- $scope.clearItemFuncPopUp = function (cacheName, key) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/clearItem-region-confirm.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- var message = {
- title: '',
- text: cacheName
- };
- return message;
- }
- }
- });
-
- modalInstance.result.then(function (cacheName, key) {
- $scope.clearItemFunction(cacheName, key);
- });
- }
-
- $scope.clearItemFunction = function(cacheName, key){
- AdminService.clearItemnFunction(cacheName, key).then(function(msg){
- var message = msg;
- if(message.data!=null && message.data!=''){
- var status = message.data;
- if(status=='"success"'){
- $scope.successPopUp();
- $scope.getCacheRegionsList()();
- }else{
- $scope.errorPopUp('');
- }
- }
-
- },function(error){
-
- });
- }
-
-
-
- $scope.showItemDetails = function(cacheName, key){
- AdminService.showItemDetails(cacheName, key).then(function(msg){
- var message = msg;
- if(message.data!=null && message.data!=''){
- var status = message.data;
- if(status=='"success"'){
-
- $scope.successPopUp();
- $scope.getCacheRegionsList()();
- }else{
- $scope.errorPopUp('');
- }
- }
-
- },function(error){
-
- });
- }
-
-
- //role deletion pop up
- $scope.delRoleConfirmPopUp = function (availableRole) {
-
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-delete-confirm.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- var message = {
- availableRole:availableRole,
- roleName: availableRole.name
- };
- return message;
- }
- }
- });
- }
-
- // role activation
- $scope.activateRoleConfirmPopUp = function (selected, availableRole) {
- var toggleType = null;
- if(selected) {
- toggleType = "activate";
- } else {
- toggleType = "inactivate";
- }
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-confirm-activation.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- var message = {
- text: toggleType,
- selected:selected,
- availableRole:availableRole,
- roleName:availableRole.name
- };
- return message;
- }
- }
- });
- }
-
- $scope.roleFnInit = function(){
- $scope.showLoader=true;
- AdminService.getRole($routeParams.roleId).then(function(data){
-
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.role =JSON.parse($scope.data.role);
-
- $scope.ociavailableRoleFunctions =JSON.parse($scope.data.availableRoleFunctions);
- $scope.availableRoleFunctions=[];
-
- if($scope.ociavailableRoleFunctions)
- angular.forEach($scope.ociavailableRoleFunctions, function(a,i){
- var availableRoleFunction = a;
- availableRoleFunction.selected = false;
- angular.forEach($scope.role.roleFunctions, function(b,j){
- if(a.code === b.code) {
- availableRoleFunction.selected = true;
- }
- });
- $scope.availableRoleFunctions.push(availableRoleFunction);
- });
-
-
- $scope.ociavailableRoles=JSON.parse($scope.data.availableRoles);
- $scope.availableRoles=[];
-
- },function(error){
- console.log("roleControllerDS2 failed: " + error);
- // reloadPageOnce();
- }).finally(function() {
- $scope.showLoader=false; // Always execute this on both error and success
- });
- }
-
- // updating roles on role list page after deletion of a role
- $rootScope.$on('updateAvailbleRoles', function(e,d){
- $scope.ociavailableRoles = d.data;
- })
-
- // updating role functions on roles page after deletion of a role function
- $rootScope.$on('updateRoleFunctions',function(e,d){
- $scope.role = d.data;
- if (typeof d.removedRoleFunc != 'undefined' && d.removedRoleFunc!=''){
- for(var i=0;i<$scope.ociavailableRoleFunctions.length;i++){
- if($scope.ociavailableRoleFunctions[i].name==d.removedRoleFunc)
- $scope.ociavailableRoleFunctions[i].selected=false;
- }
- }
- })
-
- $scope.roleFnInit();
- $scope.updateRoleFunction = function(){
- $scope.role.roleFunctions=[];
- for(var i=0;i<$scope.ociavailableRoleFunctions.length;i++){
- if($scope.ociavailableRoleFunctions[i].selected)
- $scope.role.roleFunctions.push($scope.ociavailableRoleFunctions[i]);
- }
- }
- $scope.saveRole = function() {
- var errorMsg;
- $scope.showLoader=true;
- if($scope.role.id == null || $scope.role.id == undefined ){
- $scope.role = {
- 'id':null,
- 'created':null,
- 'modified':null,
- 'createdId':null,
- 'modifiedId':null,
- 'rowNum':null,
- 'auditUserId':null,
- 'auditTrail':null,
- 'name':$scope.role.name,
- 'active':false,
- 'priority':$scope.role.priority,
- 'roleFunctions':null,
- 'childRoles':null,
- 'toggleActiveAltText':"Click to Activate Role ",
- 'toggleActiveImage':" / static fusion images inactive.png ",
- 'editUrl':" role.htm ? role_id = null",
- };
- }
- // Validate non-empty priority as integer
- if ($scope.role.priority && $scope.role.priority != '' && isNaN(parseInt($scope.role.priority))) {
- errorMsg = 'Priority must be an integer.';
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return errorMsg;
- }
- }
- });
- return;
- }
- for (x in $scope.availableRoles){
- if ($scope.availableRoles[x].name==$scope.role.name){
- errorMsg = 'Role already exists.';
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return errorMsg;
- }
- }
- });
- return;
- }
- }
- if(!errorMsg){
- var postData={
- role: $scope.role,
- childRoles: $scope.role.childRoles,
- roleFunctions : $scope.role.roleFunctions
- };
- AdminService.saveRole(postData, $routeParams.roleId).then(function(msg){
- if(msg.role){
- sessionStorage.setItem('addCall', true);
- location.href='admin#/role/'+msg.role.id;
- $scope.availableRoles.push(msg);
- $scope.routeRoleId = msg.role.id;
- $rootScope.$broadcast('updateAvailbleRoles',{data:$scope.availableRoles});
- //saving the addCall variable in sessionStorage to change the url from AddRole to Edit Role on success of Save and displaying the success pop up
- if(sessionStorage.addCall){
- $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html',
- sizeClass: 'modal-small'
- });
- sessionStorage.removeItem('addCall');
- }
- } else{
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- msg = 'Error saving Role. Please retry';
- return msg;
- }
- }
- });
- }
- },function(error){
- console.log("error msg");
- }).finally(function() {
- $scope.showLoader=false; // Always execute this on both error and success
- });
-
- }
- }
-
- $scope.addNewRoleFunctionModalPopup = function(data, role,info) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-large',
- resolve: {
- items: function () {
- var message = {
- role:role,
- roleId:info.id,
- availableRoleFunctions:$scope.ociavailableRoleFunctions
- };
- return message;
- }
- }
- });
- modalInstance.result.finally(function () {
- $scope.updateRoleFunction();
- });
- }
-
- $scope.addNewChildRoleFunctionModalPopup = function(data, role,info) {
- data = $scope.role;
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-child-roles-modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-large',
- resolve: {
- items: function () {
- var message = {
- roleChildFunctions:$scope.ociavailableRoles,
- role:role,
- roleId:info.id
- };
- return message;
- }
- }
- });
- modalInstance.result.finally(function () {
- alert();
- });
- }
-
- // remove role function associated to a role on Role Edit page
- $scope.removeRoleFunction= function(roleFunction){
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-role-del-confirm.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- var message = {
- roleFunction:roleFunction
- };
- return message;
- }
- }
- });
- }
-
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-menu-edit.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-menu-edit.js
deleted file mode 100644
index 00cd92d7..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-menu-edit.js
+++ /dev/null
@@ -1,184 +0,0 @@
-appDS2.controller('AdminMenuEditController', function ($scope, AdminMenuService, $modal, $route,AdminService){
-
- $scope.showInput = true;
- $scope.totalPages1 = 5;
- $scope.viewPerPage1 = 8;
- $scope.currentPage1 = 1;
- $scope.showLoader = false;
- $scope.firstPlay = true;
- $scope.tableFnMenuItems = [];
- $scope.$watch('viewPerPage1', function(val) {
- $scope.showLoader = true;
- AdminMenuService.getFnMenuItems($scope.currentPage1, val).then(function(data){
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.fnMenuItems = $scope.data.fnMenuItems;
- var totalItems = $scope.fnMenuItems.length;
- $scope.totalPages1 = Math.ceil(totalItems / $scope.viewPerPage1);
- for (x in $scope.fnMenuItems) {
- if ($scope.fnMenuItems[x].active_yn=='Y')
- $scope.fnMenuItems[x].active_yn=true;
- else
- $scope.fnMenuItems[x].active_yn=false;
- }
- $scope.showLoader = false;
- $scope.currentPage1=1;
- var endIndex = 1 * $scope.viewPerPage1;
- var startIndex = endIndex - $scope.viewPerPage1;
- $scope.tableFnMenuItems = $scope.fnMenuItems.slice(startIndex, endIndex);
- },function(error){
- console.log('AdminMenuEditControler::$watch viewPerPage1 failed', error);
- reloadPageOnce();
- });
-
- });
-
- $scope.customHandler1 = function(num) {
- $scope.currentPage1=num;
- var endIndex = num * $scope.viewPerPage1;
- var startIndex = endIndex - $scope.viewPerPage1;
- $scope.tableFnMenuItems = $scope.fnMenuItems.slice(startIndex, endIndex);
- };
-
- $scope.init = function () {
- $scope.numberOfRecordstoShow=20;
- AdminMenuService.getFnMenuItems().then(function(data){
- var j = data;
- $scope.data =JSON.parse(j.data);
- $scope.fnMenuItems =($scope.data.fnMenuItems);
- },function(error){
- console.log('AdminMenuEditControler::init failed');
- });
- }
-
- $scope.init();
-
- $scope.mapActiveStatus = function(status){
- if(status)
- status = "Y";
- else
- status = "N";
- return status;
- };
-
- $scope.addNewFnMenuItemModalPopup = function(availableFnMenuItem) {
- $scope.editFnMenuItem = null;
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fnmenu-add.html',
- controller: fn_menu_popupController,
- resolve: {
- message: function () {
- var message = {
- availableFnMenuItem: $scope.editFnMenuItem
- };
- return message;
- }
- }
- });
-
- modalInstance.result.then(function(response){
- // console.log('response', response);
- $scope.availableFnMenuItems=response.availableFnMenuItems;
- $route.reload();
- });
-
- };
-
- $scope.removeMenuItem = function (fnMenuItem) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/admin-menu-del-confirm.html',
- controller: deletefn_menu_popupController,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- var message = {
- title: '',
- text: fnMenuItem.label
- };
- return fnMenuItem;
- }
- }
- });
- };
-
-
- $scope.editRoleFunction = null;
- var dialog = null;
- $scope.editRoleFunctionPopup = function(availableRoleFunction) {
- $scope.editRoleFunction = availableRoleFunction;
- $( "#dialog" ).dialog({
- modal: true
- });
- };
-
- $scope.editMenuItemModalPopup = function(availableFnMenuItem) {
- $scope.editFnMenuItem = availableFnMenuItem;
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fnmenu-add.html',
- controller: fn_menu_popupController,
- resolve: {
- message: function () {
- var message = {
- availableFnMenuItem: $scope.editFnMenuItem
- };
- return message;
- }
- }
- });
-
- modalInstance.result.then(function(response){
- $scope.availableFnMenuItems=response.availableFnMenuItems;
- $route.reload();
- });
- };
-
- $scope.editRoleFunctionModalPopup = function(availableRoleFunction) {
- $scope.editRoleFunction = availableRoleFunction;
- var modalInstance = $modal.open({
- templateUrl: 'edit_role_function_popup.html',
- controller: 'rolefunctionpopupController',
- resolve: {
- message: function () {
- var message = {
- availableRoleFunction: $scope.editRoleFunction
- };
- return message;
- }
- }
- });
- modalInstance.result.then(function(response){
- // console.log('response', response);
- $scope.availableRoleFunctions=response.availableRoleFunctions;
- });
- };
-
- $scope.addNewRoleFunctionModalPopup = function(availableRoleFunction) {
- $scope.editRoleFunction = null;
- var modalInstance = $modal.open({
- templateUrl: 'edit_role_function_popup.html',
- controller: 'rolefunctionpopupController',
- resolve: {
- message: function () {
- var message = {
- availableRoleFunction: $scope.editRoleFunction
- };
- return message;
- }
- }
- });
-
- modalInstance.result.then(function(response){
- $scope.availableRoleFunctions=response.availableRoleFunctions;
- });
- };
-
- $scope.addNewRoleFunctionPopup = function() {
- $scope.editRoleFunction = null;
- $( "#dialog" ).dialog({
- modal: true
- });
- };
-
-
-
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-route.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-route.js
deleted file mode 100644
index c7c06a7e..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-route.js
+++ /dev/null
@@ -1,43 +0,0 @@
-appDS2.config(function($routeProvider) {
- $routeProvider
- .when('/net_map', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-sample-page/net_map.html',
- controller: "netMapController"
- })
- .when('/jcs_admin', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/jcs_admin.html',
- controller: 'adminController'
- })
- .when('/admin_menu_edit', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/admin-menu-edit.html',
- controller: 'AdminMenuEditController'
- })
- .when('/usage_list', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/usage.html',
- controller: 'usageListControllerDS2'
- })
- .when('/role_function_list', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/role-function.html',
- controller : "adminController"
- })
- .when('/role/:roleId', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/role.html',
- controller: 'adminController'
- })
- .when('/collaborate_list', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html',
- controller: 'collaborateListControllerDS2'
- })
- .when('/adminClosedLoop', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/admin_closed_loop.html',
- controller: 'adminClosedLoopController'
- })
- .when('/all', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-listing.html',
- controller: 'workflowsController'
- })
- .otherwise({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/role_list.html',
- controller : 'adminController'
- });
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-whitelist.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-whitelist.js
deleted file mode 100644
index 3e82df8e..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-whitelist.js
+++ /dev/null
@@ -1,3 +0,0 @@
-appDS2.config(function ($sceDelegateProvider) {
- $sceDelegateProvider.resourceUrlWhitelist(['self','**']);
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-controller.js
deleted file mode 100644
index 74a7423e..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-controller.js
+++ /dev/null
@@ -1,5 +0,0 @@
-appDS2.controller(
- 'bootstrapSampleController',
- function($scope, $interval, $http, $modal, $log, ManifestService) {
-
- });
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-route.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-route.js
deleted file mode 100644
index ac1ba168..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-route.js
+++ /dev/null
@@ -1,7 +0,0 @@
-appDS2.config(function($routeProvider) {
- $routeProvider
- .otherwise({
- templateUrl: 'app/fusion/scripts/DS2-view-models/bootstrap-sample-content.html',
- controller : "bootstrapSampleController"
- });
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate-list-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate-list-controller.js
deleted file mode 100644
index 670e8fc1..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate-list-controller.js
+++ /dev/null
@@ -1,71 +0,0 @@
-appDS2.controller("collaborateListControllerDS2", function ($scope,$http, $modal,AdminService) {
-
- $scope.showInput = true;
- $scope.totalPages1 = 5;
- $scope.viewPerPage1 = 8;
- $scope.currentPage1 = 1;
- $scope.showLoader = false;
- $scope.firstPlay = true;
- // Start with empty list to silence error in console
- $scope.tableData = [];
- $scope.tableCollbItems = [];
- // $scope.totalPages1 = 20;
- $scope.$watch('viewPerPage1', function(val) {
- $scope.showLoader = true;
- AdminService.getCollaborateList($scope.currentPage1, val).then(function(data){
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.tableData = $scope.data;
- var totalItems = $scope.tableData.length;
- //console.log(totalItems);
- $scope.totalPages1 = Math.ceil(totalItems / $scope.viewPerPage1);
- $scope.showLoader = false;
- $scope.currentPage1=1;
- var endIndex = 1 * $scope.viewPerPage1;
- var startIndex = endIndex - $scope.viewPerPage1;
- $scope.tableCollbItems = $scope.tableData.slice(startIndex, endIndex);
- },function(error){
- console.log("failed");
- reloadPageOnce();
- });
- });
-
- $scope.customHandler1 = function(num) {
- $scope.currentPage1=num;
- var endIndex = num * $scope.viewPerPage1;
- var startIndex = endIndex - $scope.viewPerPage1;
- $scope.tableCollbItems = $scope.tableData.slice(startIndex, endIndex);
- };
-
- $scope.openCollaboration = function(chatId){
- openInNewTab('openCollaboration?chat_id=' + chatId);
- }
-
- $scope.toggleProfileActive = function(profileId) {
- modalService.popupConfirmWin("Confirm","You are about to change user's active status. Do you want to continue?",
- function(){
- $http.get("profile/toggleProfileActive?profile_id="+profileId).success(function(){});
- })
- };
-
-});
-
-function openInNewTab(url) {
- var win = window.open(url, '_blank');
- win.focus();
-};
-
-function downloadScreenCaptureExtenstion() {
-
- var chromeURL = 'https://chrome.google.com/webstore/detail/icgmlogfeajbfdffajhoebcfbibfhaen';
- var firefoxURL = 'https://addons.mozilla.org/en-US/firefox/addon/screen-capturing-capability';
- var url;
-
- if(isChrome)
- url = chromeURL;
- else if(isFirefox)
- url = firefoxURL;
-
- var win = window.open(url);
- win.focus();
-};
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/collaborate.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/collaborate.js
deleted file mode 100644
index fa9af088..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/collaborate.js
+++ /dev/null
@@ -1,7 +0,0 @@
-app.config(function($routeProvider) {
- $routeProvider
- .when('/collaborate_list', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html',
- controller: 'collaborateListControllerDS2'
- })
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/workflowController.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/workflowController.js
deleted file mode 100644
index c43ad8b7..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/workflowController.js
+++ /dev/null
@@ -1,490 +0,0 @@
-app.controller('workflowsController', function($scope, $http, $uibModal, $log, modalService, $modal) {
-
- $scope.viewPerPage = 5;
- $scope.scrollViewsPerPage = 20;
- $scope.currentPage = 2;
- $scope.totalPage;
- $scope.searchCategory = "";
- $scope.searchString = "";
- $scope.radio = {
- value: ""
- };
-
-
- $scope.showModal = false;
- $scope.toggleModal = function(){
- $scope.showModal = !$scope.showModal;
- };
-
- $scope.workflow = {};
- $scope.workflow.active = "true";
-
- $scope.updateAllWorkflowStatus = function() {
- angular.forEach($scope.workflows,function(value){
- $scope.checkWorkflowStatus(value);
- })
- }
-
- $scope.fetchWorkflowsList = function() {
- $http.get('workflows/list').then(function(workflowList){
- console.log('Got new list from server = ' + workflowList.data);
- $scope.workflows = workflowList.data;
- $scope.updateAllWorkflowStatus();
- });
- };
-
- $scope.addNewWorkflow = function(newWorkflow) {
- $http.post('workflows/addWorkflow/', JSON.stringify(newWorkflow)).success(function() {
- $scope.fetchWorkflowsList();
- });
-
- $scope.workflow.name = '';
-
- };
-
- $scope.updateWorkflow = function (workflowToEdit) {
- //workflowToEdit.active='true';
- var modalInstance = $uibModal.open({
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/view-models/workflows/workflow-new.html',
- //size : modalSize,
- controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) {
- $scope.workflow = workflowToEdit;
- $scope.ok = function() {
- console.log('Updating existing workflow ... ' + JSON.stringify($scope.workflow));
- $http.post('workflows/editWorkflow/', JSON.stringify($scope.workflow)).then(function(returnedWorkflow){
- console.log('Returned Workflow = ' + JSON.stringify(returnedWorkflow));
- $uibModalInstance.close($scope.workflow);
- });
- };
-
- $scope.cancel = function() {
- $uibModalInstance.dismiss();
- };
- }],
- //End of inner controller
- resolve: {
- workflow: function() {
- console.log('Passing ' + JSON.stringify($scope.workflow));
- return $scope.workflow;
- }
- }
- });
-
- modalInstance.result.then(function (editedWorkFlow) {
- //Need to convert to proper date - later
- delete editedWorkFlow.created;
- delete editedWorkFlow.updated;
-
- delete editedWorkFlow.createdBy;
- delete editedWorkFlow.modifiedBy;
-
- console.log('selected Item ' + JSON.stringify(editedWorkFlow));
- $scope.$emit('workflowAdded', editedWorkFlow);
-
- }, function () {
- $log.info('Modal dismissed at: ' + new Date());
- });
- };
-
- $scope.reset = function(){
- console.log("Resetting ....");
- };
-
- $scope.update = function(){
- console.log("updating ....");
- };
-
- $scope.createWorkflow = function (modalSize) {
-
- var modalInstance = $uibModal.open({
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/view-models/workflows/workflow-new.html',
- size : modalSize,
- controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) {
- $scope.workflow = {};
- $scope.workflow.active = 'true';
- $scope.ok = function() {
- console.log('Saving new workflow ... ' + JSON.stringify($scope.workflow));
- $http.post('workflows/addWorkflow/', JSON.stringify($scope.workflow)).then(function(returnedWorkflow){
- console.log('Returned Workflow = ' + JSON.stringify(returnedWorkflow));
- $uibModalInstance.close($scope.workflow);
- });
- };
-/* console.log(size);*/
- $scope.cancel = function() {
- $uibModalInstance.dismiss();
- };
- }],
- //End of inner controller
- resolve: {
- workflow: function() {
- console.log('Passing ' + JSON.stringify($scope.workflow));
- return $scope.workflow;
- }
- }
- });
-
- modalInstance.result.then(function (newWorkflow) {
- console.log('selected Item ' + JSON.stringify(newWorkflow));
- $scope.$emit('workflowAdded', newWorkflow);
-
- }, function () {
- $log.info('Modal dismissed at: ' + new Date());
- });
- };//End of createWorkflow function
-
-
- $scope.removeWorkflow = function(workflowToRemove){
- var modalInstance = $uibModal.open({
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/view-models/workflows/workflow-remove.html',
- controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) {
- $scope.workflowToRemove = workflowToRemove;
- $scope.ok = function() {
- console.log('Removing workflow ... ' + JSON.stringify($scope.workflowToRemove) + ' on client request.');
- $http.post('workflows/removeWorkflow/', JSON.stringify($scope.workflowToRemove.id)).then(function(){
- console.log('Workflow successfully removed !!!');
- $uibModalInstance.close();
- });
- };
-
- $scope.cancel = function() {
- $uibModalInstance.dismiss();
- };
- }]
- });
-
- modalInstance.result.then(function () {
- $scope.$emit('workflowRemoved');
- }, function () {
- $log.info('Modal dismissed at: ' + new Date());
- });
-
- };
-
-
-
- $scope.scheduleWorkflow = function(workflowToSchedule){
- var modalInstance = $uibModal.open({
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/view-models/workflows/workflow-schedule.html',
- size:'lg',
-
- controller: ['$scope', '$uibModalInstance', '$http','dateFilter', function ($scope, $uibModalInstance, $http,dateFilter) {
-
- $scope.workflowToSchedule = workflowToSchedule;
- $scope.dt = new Date();
- $scope.dt2 = new Date();
- $scope.dateformat = 'MM/dd/yyyy',
- $scope.datetimeformat = "hh:mm a";
-
- $scope.recurrenceOptions =[{
- index:0, value:'One-Time', title:'One-Time'
- },{
- index:1, value: 'Hourly',title:'Hourly'
- },{
- index:2, value: 'Daily',title:'Daily'
- },{
- index:3, value: 'Weekly',title:'Weekly'
- }]
- $scope.selectRecurrenceOpt = $scope.recurrenceOptions[0];
-
- $scope.hours = [];
- for (var i=0; i<24; i++){
- var newObj={}
- newObj.index = i;
- newObj.value = ""+i;
- newObj.title = ""+i;
- $scope.hours.push(newObj);
- }
-
- $scope.minutes = [];
- for (var i=0; i<60; i++){
- var newObj={}
- newObj.index = i;
- newObj.value = ""+i;
- newObj.title = ""+i;
- $scope.minutes.push(newObj);
- }
-
- $scope.AMPMOptions =[
- {
- index:0, value:'AM', title:'AM'
- },{
- index:1, value: 'PM',title:'PM'
- }]
-
- $scope.selectFirstHour =$scope.hours[0];
- $scope.selectFirstMinute =$scope.minutes[0];
-
- $scope.selectLastHour =$scope.hours[0];
- $scope.selectLastMinute =$scope.minutes[0];
-
- $scope.selectStartAMPMOption=$scope.AMPMOptions[0];
- $scope.selectLastAMPMOption=$scope.AMPMOptions[0];
-
- var GenerateCronExpression = function(trigger_dt, RecurrenceOpt) {
- var CRON_sec = trigger_dt.getSeconds();
- var CRON_min = trigger_dt.getMinutes();
- var CRON_hr = trigger_dt.getHours();
- var CRON_date= trigger_dt.getDate();
- var CRON_month = trigger_dt.toLocaleString('en-US', {month: 'short'}).toUpperCase();
- var CRON_day = trigger_dt.toLocaleString('en-US', {weekday: 'short'}).toUpperCase();
- var CRON_year = trigger_dt.getFullYear();
- if (RecurrenceOpt ==="One-Time") {
- CRON_day = '?'
- } else {
- if (RecurrenceOpt ==="Hourly") {
- CRON_hr = '*';
- CRON_date = '*'
- CRON_month = '*'
- CRON_day = '?'
- CRON_year = '*'
- } else if (RecurrenceOpt ==="Daily") {
- CRON_date = '*'
- CRON_month = '*'
- CRON_day = '?'
- CRON_year = '*'
- } else if (RecurrenceOpt ==="Weekly") {
- CRON_date = '*'
- CRON_month = '*'
- CRON_year = '*'
- }
- }
-
- var CRON_Expression = [CRON_sec, CRON_min, CRON_hr, CRON_date, CRON_month, CRON_day, CRON_year];
- return CRON_Expression.join(" ");
- }
-
- $scope.ok = function() {
-
- // DateTime for the start time: it should be noted that the start time
- // for a CRON job should be prior to the trigger time.
- $scope.trigger_dt = new Date( $scope.dt.getFullYear() +
- "-" + ("0"+($scope.dt.getMonth()+1)).slice(-2) +
- "-" +("0"+ $scope.dt.getDate()).slice(-2) +
- " " + ("0" + $scope.selectFirstHour.value).slice(-2) +
- ":" +("0" + $scope.selectFirstMinute.value).slice(-2) +
- ":00.0");
-
- $scope.startDateTime_CRON = GenerateCronExpression($scope.trigger_dt, $scope.selectRecurrenceOpt.value)
-
- //roll back the the start date time by 30 seconds (start time should be 30 seconds prior to trigger time)
- dt_st = new Date($scope.trigger_dt - 30*1000)
-
- startDateTime = dt_st.getFullYear() +
- "-" + ("0"+(dt_st.getMonth()+1)).slice(-2) +
- "-" +("0"+ dt_st.getDate()).slice(-2) +
- " " + ("0" + dt_st.getHours()).slice(-2) +
- ":" +("0" + dt_st.getMinutes()).slice(-2) +
- ":" + ("0" + dt_st.getSeconds()).slice(-2) +".0";
- $scope.startDateTime = startDateTime;
-
- $scope.endDateTime = $scope.dt2.getFullYear() +
- "-" + ("0"+($scope.dt2.getMonth()+1)).slice(-2) +
- "-" +("0"+ $scope.dt2.getDate()).slice(-2) +
- " " + ("0"+ $scope.selectLastHour.value).slice(-2) +
- ":" +("0" + $scope.selectLastMinute.value).slice(-2) +
- ":00.0"
-
- $scope.WorkflowScheduleObject = {};
- $scope.WorkflowScheduleObject['startDateTime_CRON'] = $scope.startDateTime_CRON;
- $scope.WorkflowScheduleObject['startDateTime'] = $scope.startDateTime;
- $scope.WorkflowScheduleObject['endDateTime'] = $scope.endDateTime;
- $scope.WorkflowScheduleObject['workflowKey'] = $scope.workflowToSchedule.workflowKey;
- $scope.WorkflowScheduleObject['recurrence'] = $scope.selectRecurrenceOpt.value;
- $scope.WorkflowScheduleObject['workflow_arguments'] = "test";
- $scope.WorkflowScheduleObject['workflow_server_url'] = $scope.workflowToSchedule.runLink;
-
-
- TimeFromNowToStart = new Date($scope.startDateTime)-new Date()
- TimeStartToEnd = new Date($scope.endDateTime)-new Date($scope.startDateTime)
-
- if (TimeFromNowToStart<=0) {
- console.log("invalid start time input")
- alert("Please ensure the scheduled start date time is later than current time.")
- return;
- }
- if (TimeStartToEnd<=0) {
- console.log("invalid end time input")
- alert("Please ensure the schduled end date time is later than the start time.")
- return;
- }
- // if successful then save and close
- $scope.saveCronJob($scope.WorkflowScheduleObject);
- $uibModalInstance.close();
-
- };
-
- $scope.saveCronJob = function(cronJobData){
-
- console.log('saving cron job data: ' + cronJobData);
- var uuu = "workflows/saveCronJob.htm";
- var postData={cronJobDataObj: cronJobData};
- $.ajax({
- type : 'POST',
- url : uuu,
- //dataType: 'json', // data type expected from server
- contentType: 'application/json',
- data: JSON.stringify(postData), // data type sent to server
- success : function(data){
- $scope.$apply(function(){
- //$scope.availableRoleFunctions=[];$scope.$apply();
- // new // $scope.availableFnMenuItems=data.availableFnMenuItems;
- }
- );
- //alert("Update Successful.") ;
- //$scope.editRoleFunction = null;
- // new /// $modalInstance.close({availableFnMenuItems:$scope.availableRoleFunctions});
- },
- error : function(data){
- alert("Error while saving.");
- }
- });
-
- };
-
- $scope.cancel = function() {
- console.log("cancel triggered")
- $uibModalInstance.dismiss();
- };
- }]
- });
-
- modalInstance.result.then(function () {
- $scope.$emit('workflowRemoved');
- }, function () {
- $log.info('Modal dismissed at: ' + new Date());
- });
-
- };
-
-
-
-
-
-
-
-
- $scope.previewWorkflow = function(workflowToPreview,modalSize){
- var modalInstance = $uibModal.open({
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/view-models/workflows/workflow-preview.html',
- size:modalSize,
- controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) {
- $scope.workflowToPreview = workflowToPreview;
- console.log('previewWorkFlow invoked');
- console.log($scope.workflowToPreview);
-
- $scope.cancel = function() {
- $uibModalInstance.dismiss();
- };
- }]
- });
-
- modalInstance.result.then(function () {
- $scope.$emit('workflowRemoved');
- }, function () {
- $log.info('Modal dismissed at: ' + new Date());
- });
-
- };
-
-
- /* change work flow status based on the boolean variable "suspendBool" which corresponds whether
- * we would like to suspend or activate a workflow specified by key. */
- $scope.changeWorkflowStatus = function(workflowToChangeStatus,suspendBool){
- if (workflowToChangeStatus!==null) {
- var statusUrl= workflowToChangeStatus.runLink+"/engine-rest/process-definition/key/"+workflowToChangeStatus.workflowKey
- var suspendedUrl= statusUrl+"/suspended"
- var xmlHttp = new XMLHttpRequest();
- xmlHttp.open('PUT', suspendedUrl, false);
- xmlHttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
- xmlHttp.onload = function() {
- if (suspendBool) {
- console.log("process definition is now suspended");
- workflowToChangeStatus.active="false"
- } else {
- console.log("process definition is now activated");
- workflowToChangeStatus.active="true"
- }
- };
- xmlHttp.send(JSON.stringify({
- "suspended" : suspendBool,
- "includeProcessInstances" : true,
- "executionDate" : "2013-11-21T10:49:45"
- }));
- }
-
- };
-
- $scope.activateWorkflow = function(workflowToActivate){
- $scope.changeWorkflowStatus(workflowToActivate,false)
-
- };
-
- $scope.suspendWorkflow = function(workflowToActivate){
- $scope.changeWorkflowStatus(workflowToActivate,true)
- };
-
- $scope.checkWorkflowStatus = function(workflow) {
- if (workflow!==null) {
- var statusUrl= workflow.runLink+"/engine-rest/process-definition/key/"+workflow.workflowKey
- var xmlHttp3 = new XMLHttpRequest();
- xmlHttp3.open('GET', statusUrl, true);
- xmlHttp3.withCredentials = true;
- xmlHttp3.send();
- xmlHttp3.onreadystatechange = function() {
- if (xmlHttp3.readyState == 4 && xmlHttp3.status == 200) {
- // do something with the response in the variable data
- var temp = JSON.parse(xmlHttp3.responseText)
- if (temp.suspended == false){
- console.log("Activated")
- workflow.active="true"
- } else {
- console.log("Suspended")
- workflow.active="false"
- }
- }
- }
- }
- };
-
- $scope.StartWorkflowInstance = function(workflowToStart){
- if (workflowToStart!==null) {
- var statusUrl= workflowToStart.runLink+"/engine-rest/process-definition/key/"+workflowToStart.workflowKey
- var suspendedUrl= statusUrl+"/submit-form"
- var xmlHttp = new XMLHttpRequest();
- xmlHttp.open('POST', suspendedUrl, false);
- xmlHttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
- xmlHttp.onload = function() {
- };
- xmlHttp.send(JSON.stringify({
- "variables": {
- "customerId": {"value":"asdasda","type":"String"},
- "amount":{"value":"100","type":"String"}
- }
- }));
- }
-
- };
-
-
- $scope.$on('workflowAdded', function(event, newWorkflow) {
- console.log("New Workflow to be added in list scope " + JSON.stringify(newWorkflow));
- //$scope.workflows.push(newWorkflow);
- $scope.fetchWorkflowsList();
- console.log('newly added workflow = ' + JSON.stringify(newWorkflow));
- });
-
- $scope.$on('workflowRemoved', function(event) {
- $scope.fetchWorkflowsList();
- });
-
- $scope.fetchWorkflowsList();
-
-
-
-});
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborateList-route.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborateList-route.js
deleted file mode 100644
index d402fd7b..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborateList-route.js
+++ /dev/null
@@ -1,19 +0,0 @@
-appDS2.config(function($routeProvider) {
- $routeProvider
- .when('/collaborate_list', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html',
- controller: 'collaborateListControllerDS2'
- })
- .when('/notebook', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-page.html',
- controller: 'nbookController'
- })
- .when('/leafletMap', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-samplePages/leafletMap.html',
- controller: 'leafletController'
- })
- .when('/notebook', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-page.html',
- controller: 'nbookController'
- })
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaboration-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaboration-controller.js
deleted file mode 100644
index a800c009..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaboration-controller.js
+++ /dev/null
@@ -1,266 +0,0 @@
-
-
-appDS2.controller('collaborationControllerDS2', function ($scope,$http, $modal) {
- console.log("modal", $modal);
- var popupModalService;
-
- });
-
-
- $(document).ready(function () {
-
- // OUTER-LAYOUT
- panelLayout = $('body').layout({
- center__paneSelector: ".outer-center"
- , west__paneSelector: ".outer-west"
- , east__paneSelector: ".outer-east"
- //, west__size: 800
- //, east__size: 125
- , spacing_open: 8 // ALL panes
- , spacing_closed: 12 // ALL panes
-
- , center__childOptions: {
- center__paneSelector: ".inner-center"
- , west__paneSelector: ".inner-west"
- , east__paneSelector: ".inner-east"
- , west__size: 75
- , east__size: 75
- , spacing_open: 8 // ALL panes
- , spacing_closed: 8 // ALL panes
- , west__spacing_closed: 12
- , east__spacing_closed: 12
- }
-
-
-
-
- });
-
-
- function initializeConnections() {
-
- var channelId = null;
- channelId = location.href.replace(/\/|:|#|%|\.|\[|\]/g, '');
- var videoChannelId = channelId.concat("video");
- var screenChannelId = channelId.concat("screen");
-
- videoConnection = new RTCMultiConnection(videoChannelId);
- screenConnection = new RTCMultiConnection(screenChannelId);
-
- configConnection(videoConnection,true,true,false,true,false);
- configConnection(screenConnection,false,false,true,false,true);
-
- };
-
- function configConnection(_connection, _audio, _video, _screen, _data, _oneway) {
- _connection.session = {
- audio: _audio, // by default, it is true
- video: _video, // by default, it is true
- screen: _screen,
- data: _data,
- oneway: _oneway,
- broadcast: false
- };
-
- _connection.direction = "one-to-one";
-
- if( _data == true ) {
- _connection.onmessage = function(e) {
- appendDIV(e.data);
-
- console.debug(e.userid, 'posted', e.data);
- console.log('latency:', e.latency, 'ms');
- };
- }
-
-
- };
-
- function assignStreamToDom() {
-
-
- screenConnection.screenbody = document.querySelector('.screenContainer1');
- screenConnection.videobody = document.querySelector('.videoContainer2');
-
- videoConnection.screenbody = document.querySelector('.screenContainer2');
- videoConnection.videobody = document.querySelector('.videoContainer1');
- };
-
- function maximizeLayout() {
-
- // open the panes and maximize the window.
- top.window.resizeTo(screen.availWidth,screen.availHeight);
- panelLayout.open('west');
- // panelLayout.open('south'); is not working due to state initialization problem; debug to find out. so replacing the call with work around below - hack.
- $(".ui-layout-toggler-south-closed").first().click();
-
- };
-
- function minimizeLayout() {
-
- // close the panes and minimize the window.
- top.window.resizeTo(screen.availWidth - 2*screen.availWidth/3, screen.availHeight - screen.availHeight/2);
- panelLayout.close('west');
- // panelLayout.close('south'); is not working due to state initialization problem; debug to find out. so replacing the call with work around below - hack.
- $(".ui-layout-toggler-south-opened").first().click();
- };
-
- function emptyContainers() {
- $('.screenContainer1').empty();
- $('.videoContainer2').empty();
-
- $('.screenContainer2').empty();
- $('.videoContainer1').empty();
- };
-
- function appendDIV(div, parent) {
- if (typeof div === 'string') {
- var content = div;
- div = document.createElement('div');
- div.innerHTML = content;
- };
-
- var chatOutput = document.getElementById('chat-output'),
- fileProgress = document.getElementById('file-progress');
-
- if (!parent) chatOutput.insertBefore(div, chatOutput.firstChild);
- else fileProgress.insertBefore(div, fileProgress.firstChild);
-
- div.tabIndex = 0;
- $('#chat-input').focus();
- };
-
- function confirmClose() {
- var message = "Are you sure you want to close the session?";
-
- /* if(popupModalService != undefined) {
- popupModalService.popupConfirmWin("Confirm", message, function(){ location.reload();});
- }
-
- else */
- if (confirm(message) == true) {
- location.reload();
- //window.opener.location.reload(); // go to the parent window
- //close();
- } else {
- // do nothing
- }
-
- };
-
- function notifyOthers() {
-
- // var websocket = localStorage.getItem('notifySocket');
- //if( websocket != null) {
- // handling websocket peer broadcast session
- var currentUser = "${sessionScope.user.sbcid}";
- var initialPageVisit = "${sessionScope.initialPageVisit}";
- var remoteUser = '';
-
- var userList = location.search.split('chat_id=')[1].split('-');
- for(var i=0;i<userList.length;i++) {
- if(userList[i] !== currentUser) {
- remoteUser = userList[i];
- break;
- }
- }
-
- socketSetup(initialPageVisit, currentUser, remoteUser,"socketSend");
-
-
-
-
-
-
- };
-
- function makeChatVisible() {
-
- $('#chat-input').css("visibility", 'visible');
- };
-
-
-
- /* on click button enabled*/
- window.onload = function () {
- document.getElementById('share-screen').onclick = function() {
-
- emptyContainers();
- videoConnection.close();
- screenConnection.close();
-
- maximizeLayout();
- emptyContainers();
- makeChatVisible();
-
- videoConnection.open();
- screenConnection.open();
-
-
- notifyOthers();
-
-
-
- };
- };
-
- document.getElementById('stop-share-screen').onclick = function() {
-
- emptyContainers();
-
- videoConnection.close();
- screenConnection.close();
-
- confirmClose();
-
- };
-
- document.getElementById('view-screen').onclick = function() {
-
- maximizeLayout();
- emptyContainers();
- makeChatVisible();
-
- // timeout is required for the sharing to properly work
- setTimeout(function() {
- screenConnection.connect();
- },2000);
- setTimeout(function() {
- videoConnection.connect();
- },1000);
-
-
- };
-
- document.getElementById('chat-input').onkeypress = function(e) {
- if (e.keyCode !== 13 || !this.value) return;
- var message = "<b>${model.name}</b>: " + this.value;
- appendDIV(message);
-
- // sending text message
- videoConnection.send(message);
-
- this.value = '';
- };
-
- /*
- document.getElementById('file').onchange = function() {
- videoConnection.send(this.files[0]);
- };
- */
-
-
- //document.querySelector('.screenContainerPane').appenChild(document.querySelector('.screenContainer'));
- //document.querySelector('.videoContainerPane').appendChild(document.querySelector('.videoContainer'));
-
- //panelLayout.bindButton($('#share-screen'), 'open', 'outer-west');
- //panelLayout.bindButton($('#stop-share-screen'), 'close', 'outer-west');
- var videoConnection = null, screenConnection = null;
- initializeConnections();
- assignStreamToDom();
-
- // start the share
- //document.getElementById('share-screen').click();
- //
- });
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-profile/self-profile-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-profile/self-profile-controller.js
deleted file mode 100644
index 2c005365..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-profile/self-profile-controller.js
+++ /dev/null
@@ -1,354 +0,0 @@
-appDS2.controller('selfProfileController', function($scope, $http, $modal, $routeParams, $rootScope,SelfProfileService){
-
- /************init values***********************/
- $scope.tableData=[];
- $scope.profile=[];
- $scope.oriProfile=[];
- $scope.ociavailableRoles=[];
- $scope.ociTimeZones;
- $scope.ociCountries;
- var stateList=[];
- $scope.availableRoles = [];
- $scope.timeZones = [];
- $scope.selectedTimeZone = {"index":'',"value":"","title":""};
- $scope.countries = [];
- $scope.selectedCountry = {"index":'',"value":"","title":""};
-
- $scope.isUserSystemAdmin = false;
- $scope.profileId='';
- $scope.showLoader=false;
- $scope.pageType=1 /*1 for slef page 2 for general profile page*/
- $scope.pageTitle='Self Profile Detail';
- $scope.profileIdParam = $routeParams.profileId;
- if (typeof($scope.profileIdParam) != "undefined" && $scope.profileIdParam!=''){
- $scope.pageTitle='Profile Detail';
- $scope.pageType=2;
- }
-
-
-
- /***********************************************************functions***********************************************/
- $scope.getProfileDetail = function(profileIdParam){
- $scope.showLoader=true;
- SelfProfileService.getProfileDetail(profileIdParam).then(function(data){
- $scope.showLoader=false;
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.profile =JSON.parse($scope.data.profile);
- $scope.oriProfile=JSON.parse($scope.data.profile); /*original value*/
- $scope.profileId = $scope.profile.id;
- $scope.ociavailableRoles =JSON.parse($scope.data.availableRoles);
- $scope.ociTimeZones=JSON.parse($scope.data.timeZones);
- $scope.ociCountries=JSON.parse($scope.data.countries);
- stateList=JSON.parse($scope.data.stateList);
-
-
- if($scope.ociavailableRoles)
- $.each($scope.ociavailableRoles, function(i, a){
- var availableRole = a;
- availableRole.selected = false;
- $.each($scope.profile.roles, function(j, b){
- if(a.id === b.id) {
- availableRole.selected = true;
- if(a.id === 1){
- $scope.isUserSystemAdmin = true;
- }
- }
- });
- $scope.availableRoles.push(availableRole);
- });
- ;
- if($scope.ociTimeZones){
- $.each($scope.ociTimeZones, function(i, a){
- var timeZone = {"index":i, "value":a.value, "title":a.label};
- $scope.timeZones.push(timeZone);
- if($scope.profile.timeZoneId !== null && a.value === $scope.profile.timeZoneId.toString()){
- $scope.selectedTimeZone = timeZone;
- }
- });
- };
- if($scope.ociCountries)
- $.each($scope.ociCountries, function(i, a){
- var country = {"index":i, "value":a.value, "title":a.label};
- $scope.countries.push(country);
- if(a.value === $scope.profile.country){
- $scope.selectedCountry = country;
- }
- });
- ;
- stateList = stateList== null? []: stateList;
- var selectedState= $scope.profile.state ? $scope.profile.state:"";
- $scope.stateList = initDropdownWithLookUp(stateList,selectedState );
- },function(error){
- $scope.errorPopUp(error);
- $scope.showLoader=false;
- });
- }
-
- $scope.getSelfProfileDetail = function(){
- $scope.showLoader=true;
- SelfProfileService.getSelfProfileDetail().then(function(data){
- $scope.showLoader=false;
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.profile =JSON.parse($scope.data.profile);
- $scope.oriProfile=JSON.parse($scope.data.profile); /*original value*/
- $scope.profileId = $scope.profile.id;
- $scope.ociavailableRoles =JSON.parse($scope.data.availableRoles);
- $scope.ociTimeZones=JSON.parse($scope.data.timeZones);
- $scope.ociCountries=JSON.parse($scope.data.countries);
- stateList=JSON.parse($scope.data.stateList);
-
- if($scope.ociavailableRoles)
- $.each($scope.ociavailableRoles, function(i, a){
- var availableRole = a;
- availableRole.selected = false;
- $.each($scope.profile.roles, function(j, b){
- if(a.id === b.id) {
- availableRole.selected = true;
- if(a.id === 1){
- $scope.isUserSystemAdmin = true;
- }
- }
- });
- $scope.availableRoles.push(availableRole);
- });
- ;
- if($scope.ociTimeZones){
- $.each($scope.ociTimeZones, function(i, a){
- var timeZone = {"index":i, "value":a.value, "title":a.label};
- $scope.timeZones.push(timeZone);
- if($scope.profile.timeZoneId !== null && a.value === $scope.profile.timeZoneId.toString()){
- $scope.selectedTimeZone = timeZone;
- }
- });
- };
- if($scope.ociCountries)
- $.each($scope.ociCountries, function(i, a){
- var country = {"index":i, "value":a.value, "title":a.label};
- $scope.countries.push(country);
- if(a.value === $scope.profile.country){
- $scope.selectedCountry = country;
- }
- });
- ;
- stateList = stateList== null? []: stateList;
- var selectedState= $scope.profile.state ? $scope.profile.state:"";
- $scope.stateList = initDropdownWithLookUp(stateList,selectedState );
- },function(error){
- $scope.errorPopUp(error);
- $scope.showLoader=false;
- });
- }
-
-
- $scope.removeRole = function(data) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-del-confirm.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- var message = {
- role:data,
- roleId:$scope.profileId,
- };
- return message;
- }
- }
- });
- };
- $scope.addNewRoleFunctionModalPopup = function(data) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add.html',
- controller: ModalInstanceCtrl,
- windowClass:'modal-docked',
- sizeClass: 'modal-medium',
- resolve: {
- items: function () {
- var message = {
- roleFunctions:data,
- roleId:$scope.profileId,
- availableRoleFunctions:$scope.ociavailableRoles
- };
- return message;
- }
- }
- });
- }
-
-
- $scope.successPopUp = function () {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return '';
- }
- }
- });
- };
-
- $scope.errorPopUp = function (msg) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return msg;
- }
- }
- });
- };
- $scope.saveProfile = function() {
- $scope.errorMsg = '';
- if($scope.oriProfile.orgUserId != $scope.profile.orgUserId){
- $scope.errorPopUp('Organization User ID cannot be changed');
- return;
- }
- if($scope.oriProfile.orgManagerUserId != $scope.profile.orgManagerUserId){
- $scope.errorPopUp('Organization Manager ID cannot be changed');
- return;
- }
- if($scope.oriProfile.loginId != $scope.profile.loginId){
- $scope.errorPopUp('Login ID cannot be changed');
- return;
- }
- if($scope.oriProfile.loginPwd != $scope.profile.loginPwd){
- $scope.errorPopUp('Login Password cannot be changed');
- return;
- }
-
- var postData={
- profile: $scope.profile,
- selectedCountry:$scope.selectedCountry!=null?$scope.selectedCountry.value:"",
- selectedState:$scope.stateList.selected!=null?$scope.stateList.selected.value:"",
- selectedTimeZone:$scope.selectedTimeZone!=null?$scope.selectedTimeZone.value:""
- };
- SelfProfileService.saveProfile(postData, $scope.profileId).then(function(msg){
- $scope.successPopUp();
- },function(error){
- $scope.errorPopUp(error);
- });
- }
- /* updating role tables after adding or deleting*/
- $rootScope.$on('updateRoles',function(e,d){
- $scope.profile.roles = d.data;
- })
- /*****init call*****/
-
- if ($scope.pageType==2){
- $scope.getProfileDetail($scope.profileIdParam);
- }else{
- $scope.getSelfProfileDetail();
- }
-
-
- /****************************************************************popup modal*************************************************************/
- var ModalInstanceCtrl = function ($scope, $modalInstance, items,$rootScope) {
- $scope.roleFun=items;
- $scope.msg=items;
- $scope.activateRoleConfirmPopUp = function (selected, availableRole) {
- $scope.msg.roleFun = availableRole.name;
- $scope.msg.selected = selected;
- $scope.msg.availableRole = availableRole;
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add-confirm.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return $scope.msg;
- }
- }
- });
- }
- $scope.confirmRoleDel = function(role,profileId){
- var postData={role:role};
- SelfProfileService.removeRole(postData,profileId).then(function(msg){
- $scope.cancel();
- $scope.roleTableRefresh(profileId);
- },function(error){
- $scope.errorPopUp(error);
- });
- }
- $scope.confirmRoleFunAdd = function(availableRole,profileId){
- var postData={role:availableRole};
- SelfProfileService.addRole(postData,profileId).then(function(msg){
- $scope.cancel();
- $scope.roleTableRefresh(profileId);
- },function(error){
- $scope.errorPopUp(error);
- });
- }
-
- // confirm Role Function Remove
- $scope.confirmRoleFunRemove = function(availableRole,profileId){
- var postData={role:availableRole};
- SelfProfileService.deRole(postData,profileId).then(function(msg){
- $scope.cancel();
- $scope.roleTableRefresh(profileId);
- },function(error){
- $scope.errorPopUp(error);
- });
- }
-
- $scope.cancel = function () {
- $modalInstance.dismiss('cancel');
- };
-
- $scope.cancelRoleFunSwitch = function (msg) {
- $scope.msg.availableRole.selected = !$scope.msg.availableRole.selected;
- $modalInstance.dismiss('cancel');
- };
-
- $scope.selfProfileRoleRefresh = function(){
- SelfProfileService.getSelfProfileDetail().then(function(data){
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.profileTemp =JSON.parse($scope.data.profile);
- $rootScope.$broadcast('updateRoles',{data:$scope.profileTemp.roles});
- });
- }
- $scope.profileRoleRefresh = function(profileId){
- SelfProfileService.getProfileDetail(profileId).then(function(data){
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.profileTemp =JSON.parse($scope.data.profile);
- $rootScope.$broadcast('updateRoles',{data:$scope.profileTemp.roles});
- });
- }
- $scope.roleTableRefresh = function (profileId) {
- if($scope.pageType==1)
- $scope.selfProfileRoleRefresh();
- else
- $scope.profileRoleRefresh(profileId);
- };
-
- };
-
-});
-function initDropdownWithLookUp(arr,selectedValue){
- var dropdownArray=[];
- var selected = null;
- if(arr){
- for(var i = 0,l = arr.length; i < l; i++) {
- var option = {
- "index" : i ,
- "value" : arr[i].value,
- "title" : arr[i].label
- };
- dropdownArray.push(option);
- if(arr[i].value === selectedValue){
- selected = option;
- }
- }
- }
- var dropDown={};
- dropDown.options = dropdownArray;
- dropDown.selected = selected!=null?selected:{"index":'',"value":"","title":""};
- return dropDown;
-};
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-chart-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-chart-controller.js
deleted file mode 100644
index b15205fc..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-chart-controller.js
+++ /dev/null
@@ -1,499 +0,0 @@
-appDS2.controller('reportChartController', function ($scope, $rootScope, $timeout, $window, $modal, $http, $routeParams,modalService) {
- $scope.showLoader = true;
- $scope.commonOptionOpen = false;
- $scope.additionalOptionOpen = false;
- $scope.barChartOptionOpen = false;
- $scope.timeSeriesChartOptionOpen = false;
- $scope.selectedChartType = {value:""};
- $scope.chartTypeOptions = [
- {value: 'BarChart3D', text: 'Bar Chart'},
- {value: 'TimeSeriesChart', text: 'Time Series/Area Chart'},
- {value: 'PieChart', text: 'Pie Chart'},
- {value: 'AnnotationChart', text: 'Annotation Chart'},
- {value: 'FlexTimeChart', text: 'Flexible Time Chart'}
- ];
-
- $scope.populateChrtWzdFields = function() {
- $scope.reportRunJson = {};
- $scope.showLoader=true;
- $http.get("raptor.htm?action=chart.json&c_master="+$routeParams.reportId).then(function (response) {
- $scope.showLoader=false;
- $scope.reportRunJson = response.data;
- //Set chart type
- if($scope.reportRunJson.commonChartOptions!=null){
- $scope.reportRunJson.commonChartOptions.animateAnimatedChart = $scope.reportRunJson.commonChartOptions.animateAnimatedChart+"";
- $scope.reportRunJson.commonChartOptions.hideLegend = $scope.reportRunJson.commonChartOptions.hideLegend + "";
- }
-
- $scope.reportRunJson.showTitle = $scope.reportRunJson.showTitle + "";
-
- // if barChartOptions is not null
- if ($scope.reportRunJson.barChartOptions) {
- $scope.reportRunJson.barChartOptions.displayBarControls = $scope.reportRunJson.barChartOptions.displayBarControls+"";
- $scope.reportRunJson.barChartOptions.minimizeXAxisTickers = $scope.reportRunJson.barChartOptions.minimizeXAxisTickers+"";
- $scope.reportRunJson.barChartOptions.stackedChart = $scope.reportRunJson.barChartOptions.stackedChart+"";
- $scope.reportRunJson.barChartOptions.timeAxis =$scope.reportRunJson.barChartOptions.timeAxis+"";
- $scope.reportRunJson.barChartOptions.verticalOrientation = $scope.reportRunJson.barChartOptions.verticalOrientation +"";
- $scope.reportRunJson.barChartOptions.xAxisDateType = $scope.reportRunJson.barChartOptions.xAxisDateType +"";
- }
-
- if ($scope.reportRunJson.chartTypeJSON) {
- var chrtTypeValue = $scope.reportRunJson.chartType;
- for(var i = 0; i < $scope.chartTypes.length; i++) {
- if ($scope.chartTypes[i].value==chrtTypeValue) {
- $scope.reportRunJson.chartTypeJSON.index=$scope.chartTypes[i].index;
- $scope.reportRunJson.chartTypeJSON.value=$scope.chartTypes[i].value;
- $scope.reportRunJson.chartTypeJSON.title=$scope.chartTypes[i].title;
- }
-
- }
- }
-
- //Set Domain Axis
- if ($scope.reportRunJson.domainAxisJSON) {
- var domaninAxisValue = $scope.reportRunJson.domainAxisJSON.value;
- for(var i = 0; i < $scope.reportRunJson.chartColumnJSONList.length; i++) {
- if ($scope.reportRunJson.chartColumnJSONList[i].value==domaninAxisValue) {
- $scope.reportRunJson.domainAxisJSON.index=$scope.reportRunJson.chartColumnJSONList[i].index;
- $scope.reportRunJson.domainAxisJSON.title=$scope.reportRunJson.chartColumnJSONList[i].title;
- }
-
- }
- }
-
- //Set Category
- if ($scope.reportRunJson.categoryAxisJSON) {
- var categoryAxisValue = $scope.reportRunJson.categoryAxisJSON.value;
- for(var i = 0; i < $scope.reportRunJson.chartColumnJSONList.length; i++) {
- if ($scope.reportRunJson.chartColumnJSONList[i].value==categoryAxisValue) {
- $scope.reportRunJson.categoryAxisJSON.index=$scope.reportRunJson.chartColumnJSONList[i].index;
- $scope.reportRunJson.categoryAxisJSON.title=$scope.reportRunJson.chartColumnJSONList[i].title;
- }
- }
- }
-
- //Set range axis label
- if ($scope.reportRunJson.rangeAxisList) {
- for(var j = 0; j < $scope.reportRunJson.rangeAxisList.length; j++) {
-
- if ($scope.reportRunJson.rangeAxisList[j].rangeAxisLabelJSON) {
- var rangeAxisLabelValue = $scope.reportRunJson.rangeAxisList[j].rangeAxisLabelJSON.value;
- for(var i = 0; i < $scope.reportRunJson.chartColumnJSONList.length; i++) {
- if ($scope.reportRunJson.chartColumnJSONList[i].value==rangeAxisLabelValue) {
- $scope.reportRunJson.rangeAxisList[j].rangeAxisLabelJSON.index=$scope.reportRunJson.chartColumnJSONList[i].index;
- $scope.reportRunJson.rangeAxisList[j].rangeAxisLabelJSON.title=$scope.reportRunJson.chartColumnJSONList[i].title;
- }
- }
- }
- }
- }
-
-
- //set range linetype
- if ($scope.reportRunJson.rangeAxisList) {
- for(var j = 0; j < $scope.reportRunJson.rangeAxisList.length; j++) {
- if ($scope.reportRunJson.rangeAxisList[j].rangeLineTypeJSON != null && $scope.reportRunJson.rangeAxisList[j].rangeLineTypeJSON.value != ""
- && $scope.reportRunJson.rangeAxisList[j].rangeLineTypeJSON.value != null) {
- var lineTypeValue = $scope.reportRunJson.rangeAxisList[j].rangeLineTypeJSON.value;
- for(var i = 0; i < $scope.lineTypes.length; i++) {
- if ($scope.lineTypes[i].value==lineTypeValue) {
- $scope.reportRunJson.rangeAxisList[j].rangeLineTypeJSON.index=$scope.lineTypes[i].index;
- $scope.reportRunJson.rangeAxisList[j].rangeLineTypeJSON.title=$scope.lineTypes[i].title;
- }
- }
- } else {
- $scope.reportRunJson.rangeAxisList[j].rangeLineTypeJSON = null;
- }
- }
- }
- //set range color
- if ($scope.reportRunJson.rangeAxisList) {
- for(var j = 0; j < $scope.reportRunJson.rangeAxisList.length; j++) {
- if ($scope.reportRunJson.rangeAxisList[j].rangeColorJSON != null && $scope.reportRunJson.rangeAxisList[j].rangeColorJSON.value != ""
- && $scope.reportRunJson.rangeAxisList[j].rangeColorJSON.value != null) {
- var colorValue = $scope.reportRunJson.rangeAxisList[j].rangeColorJSON.value;
- for(var i = 0; i < $scope.rangeColors.length; i++) {
- if ($scope.rangeColors[i].value==colorValue) {
- $scope.reportRunJson.rangeAxisList[j].rangeColorJSON.index=$scope.rangeColors[i].index;
- $scope.reportRunJson.rangeAxisList[j].rangeColorJSON.title=$scope.rangeColors[i].title;
- }
- }
- }else {
- $scope.reportRunJson.rangeAxisList[j].rangeColorJSON = null;
- }
- }
- }
- $scope.showLoader = false;
- });
-
- $scope.legend = "true";
- }
-
- $scope.saveChartData = function() {
- $scope.showLoader = true;
- if($scope.reportRunJson.commonChartOptions){
- $scope.reportRunJson.commonChartOptions.animateAnimatedChart = ($scope.reportRunJson.commonChartOptions.animateAnimatedChart=="true")
- $scope.reportRunJson.commonChartOptions.hideLegend = ($scope.reportRunJson.commonChartOptions.hideLegend=="true");
- }
-
- $scope.reportRunJson.showTitle = ($scope.reportRunJson.showTitle=="true");
-
- $scope.reportRunJson.chartTypeJSON = {
- 'index':0,'title':'','value':''};
-
-
- if (($scope.reportRunJson.chartType == "BarChart3D")&&($scope.reportRunJson.barChartOptions)) {
- $scope.reportRunJson.barChartOptions.displayBarControls = ($scope.reportRunJson.barChartOptions.displayBarControls=="true") ;
- $scope.reportRunJson.barChartOptions.minimizeXAxisTickers = ($scope.reportRunJson.barChartOptions.minimizeXAxisTickers=="true") ;
- $scope.reportRunJson.barChartOptions.stackedChart = ($scope.reportRunJson.barChartOptions.stackedChart=="true") ;
- $scope.reportRunJson.barChartOptions.timeAxis= ($scope.reportRunJson.barChartOptions.timeAxi=="true") ;
- $scope.reportRunJson.barChartOptions.verticalOrientation = ($scope.reportRunJson.barChartOptions.verticalOrientation=="true") ;
- $scope.reportRunJson.barChartOptions.xAxisDateType = ($scope.reportRunJson.barChartOptions.xAxisDateType=="true") ;
- }
-
- for (var i=0;i<$scope.chartTypes.length;i++) {
- if ($scope.reportRunJson.chartType==$scope.chartTypes[i].value) {
- $scope.reportRunJson.chartTypeJSON = {
- 'index':$scope.chartTypes[i].index,
- 'title':$scope.chartTypes[i].title,
- 'value':$scope.chartTypes[i].value
- }
- }
- }
-
- $scope.reportRunJson.domainAxisJSON = {
- "index":0,"value":$scope.reportRunJson.domainAxis,"title": $scope.reportRunJson.domainAxis
- };
- $scope.reportRunJson.categoryAxisJSON = {
- "index":0,"value":$scope.reportRunJson.categoryAxis,"title": $scope.reportRunJson.categoryAxis
- };
-
- // Specifically for DS2 for color
- for (var i=0; i<$scope.reportRunJson.rangeAxisList.length; i ++) {
- $scope.reportRunJson.rangeAxisList[i].rangeColorJSON =
- {"index":0, "value": $scope.reportRunJson.rangeAxisList[i].rangeColor, "title": ""};
-
- $scope.reportRunJson.rangeAxisList[i].rangeLineTypeJSON =
- {"index":0, "value": "", "title": ""};
- for (var j=0;j<$scope.lineTypes.length;j++) {
- if ($scope.reportRunJson.rangeAxisList[i].rangeLineType ==$scope.lineTypes[j].value) {
- $scope.reportRunJson.rangeAxisList[i].rangeLineTypeJSON =
- {"index":$scope.lineTypes[j].index, "value": $scope.lineTypes[j].value, "title": $scope.lineTypes[j].title};
- }
- }
-
- }
-
- //Converting string variables to numbers
- $scope.reportRunJson.commonChartOptions.rightMargin = Number($scope.reportRunJson.commonChartOptions.rightMargin);
- $scope.reportRunJson.commonChartOptions.topMargin = Number($scope.reportRunJson.commonChartOptions.topMargin);
- $scope.reportRunJson.commonChartOptions.bottomMargin = Number($scope.reportRunJson.commonChartOptions.bottomMargin);
- $scope.reportRunJson.commonChartOptions.leftMargin = Number($scope.reportRunJson.commonChartOptions.leftMargin);
-
- if ($scope.reportRunJson.categoryAxisJSON == "") {
- $scope.reportRunJson.categoryAxisJSON = {};
- $scope.reportRunJson.categoryAxisJSON.value = -1;
- }
- //add the remove list to the json
- $scope.reportRunJson.rangeAxisRemoveList= $scope.rangeAxisRemoveList;
- $http.post("save_chart", JSON.stringify($scope.reportRunJson)).success(function(data, status) {
- $scope.successSubmit=true;
- $scope.showLoader = false;
- $scope.reportRunJson.commonChartOptions.animateAnimatedChart = $scope.reportRunJson.commonChartOptions.animateAnimatedChart+"";
- $scope.reportRunJson.commonChartOptions.hideLegend = $scope.reportRunJson.commonChartOptions.hideLegend + "";
- $scope.reportRunJson.showTitle = $scope.reportRunJson.showTitle + "";
- if ($scope.reportRunJson.chartType == "BarChart3D" && $scope.reportRunJson.barChartOptions) {
- $scope.reportRunJson.barChartOptions.displayBarControls = $scope.reportRunJson.barChartOptions.displayBarControls+"";
- $scope.reportRunJson.barChartOptions.minimizeXAxisTickers = $scope.reportRunJson.barChartOptions.minimizeXAxisTickers+"";
- $scope.reportRunJson.barChartOptions.stackedChart = $scope.reportRunJson.barChartOptions.stackedChart+"";
- $scope.reportRunJson.barChartOptions.timeAxis =$scope.reportRunJson.barChartOptions.timeAxis+"";
- $scope.reportRunJson.barChartOptions.verticalOrientation = $scope.reportRunJson.barChartOptions.verticalOrientation +"";
- $scope.reportRunJson.barChartOptions.xAxisDateType = $scope.reportRunJson.barChartOptions.xAxisDateType +"";
- }
- $scope.successPopUp();
- $scope.populateChrtWzdFields();
- })
- }
-
-
- $scope.addRangeAxisRow = function (rangeaxisitem) {
- $scope.reportRunJson.rangeAxisList.push({
- });
- };
-
- $scope.rangeAxisRemoveList= [];
- $scope.removeRangeAxisRow = function (index) {
- $scope.rangeAxisRemoveList.push($scope.reportRunJson.rangeAxisList[index]);
- $scope.reportRunJson.rangeAxisList[index].removed="true";
- };
-
-
- $scope.init = function () {
- if ($scope) {
- $scope.populateChrtWzdFields();
- $scope.reportRunJson.rangeAxisRemoveList= [];
- }
- };
-
-
-
- $scope.domainItems = [{title:"Domain Axis1", content:"Test1", open: false},{title:"Domain Axis2", content:"Test2", open: false}];
-
- $scope.chartTypes = [
- {index: 0, value: 'BarChart3D', title: 'Bar Chart'},
- {index: 1, value: 'TimeSeriesChart', title: 'Time Series/Area Chart'},
- {index: 2, value: 'PieChart', title: 'Pie Chart'},
- {index: 3, value: 'AnnotationChart', title: 'Annotation Chart'},
- {index: 4, value: 'FlexTimeChart', title: 'Flexible Time Chart'}
- ];
-
- $scope.categories = [
- {index: 0, value: 'scenario_name', title: 'scenario_name'},
- {index: 1, value: 'total_traffic_in_PB', title: 'Total Traffic in PB'},
- {index: 2, value: 'Avg Utilization Day', title: 'Avg Utilization Day'}
- ];
-
- $scope.rangeColors = [
- {index: 0, value: "#1f77b4",title: "Dodger Blue"},
- {index: 1, value: "#ff7f0e",title: "Vivid orange"},
- {index: 2, value: "#2ca02c",title: "Forest Green"},
- {index: 3, value: "#8c864b",title: "Greenish Red"},
- {index: 4, value: "#9467bd",title: "Desaturated violet"},
- {index: 5, value: "#8c564b",title: "Dark moderate red"},
- {index: 6, value: "#e377c2",title: "Soft pink"},
- {index: 7, value: "#7f7f7f",title: "Dark gray"},
- {index: 8, value: "#bcbd22",title: "Strong yellow"},
- {index: 9, value: "#17becf",title: "Strong cyan"},
- {index: 10, value: "#dc143c",title: "Vivid red"},
- {index: 11, value: "#800080",title: "Dark magenta"},
- {index: 12, value: "#0000FF",title: "Blue"},
- {index: 13, value: "#008000",title: "Dark lime green"},
- {index: 14, value: "#D2691E",title: "Reddish Orange"},
- {index: 15, value: "#FF0000",title: "Red"},
- {index: 16, value: "#000000",title: "Black"},
- {index: 17, value: "#DB7093",title: "Pink"},
- {index: 18, value: "#FF00FF",title: "Pure Magenta"},
- {index: 19, value: "#7B68EE",title: "Soft blue"},
- {index: 20, value: "#1f77b6",title: "Strong blue"},
- {index: 21, value: "#9edae5",title: "Very soft cyan"},
- {index: 22, value: "#393b79",title: "Dark Blue"},
- {index: 23, value: "#5254a3",title: "Dark moderate Blue"},
- {index: 24, value: "#6b6ecf",title: "Slightly desaturated blue"},
- {index: 25, value: "#9c9ede",title: "Very soft blue"},
- {index: 26, value: "#637939",title: "Dark Green"},
- {index: 27, value: "#8ca252",title: "Dark moderate green"},
- {index: 28, value: "#b5cf6b",title: "Slightly desaturated green"},
- {index: 29, value: "#cedb9c",title: "Desaturated Green"},
-
- /* Old Colors */
- {index: 30, value: "#00FFFF",title: "Aqua"},
- {index: 31, value: "#000000",title: "Black"},
- {index: 32, value: "#0000FF",title: "Blue"},
- {index: 33, value: "#FF00FF",title: "Fuchsia"},
- {index: 34, value: "#808080",title: "Gray"},
- {index: 35, value: "#008000",title: "Green"},
- {index: 36, value: "#00FF00",title: "Lime"},
- {index: 37, value: "#800000",title: "Maroon"},
- {index: 38, value: "#000080",title: "Navy"},
- {index: 39, value: "#808000",title: "Olive"},
- {index: 40, value: "#FF9900",title: "Orange"},
- {index: 41, value: "#800080",title: "Purple"},
- {index: 42, value: "#FF0000",title: "Red"},
- {index: 43, value: "#C0C0C0",title: "Silver"},
- {index: 44, value: "#008080",title: "Teal"},
- {index: 45, value: "#FFFFFF",title: "White"},
- {index: 46, value: "#FFFF00",title: "Yellow"}
- ];
-
-
- $scope.lineTypes = [
- {index: 0, value: 'default', title: 'Default'},
- {index: 1, value: 'dotted_lines', title: 'Dotted Lines'},
- {index: 2, value: 'dashed_lines', title: 'Dashed Lines'}
- ];
-
- $scope.hardCodeReport= {
- "reportID":"3356",
- "reportName":"Test: Line Chart",
- "reportDescr":"",
- "reportTitle":"",
- "reportSubTitle":"",
- "formFieldList":[
- ],
- "chartColumnJSONList":[
- {
- "index":0,
- "value":"tr0",
- "title":"traffic_date",
- "$$hashKey":"056"
- },
- {
- "index":1,
- "value":"ut1",
- "title":"util_perc",
- "$$hashKey":"057"
- }
- ],
- "formfield_comments":null,
- "totalRows":0,
- "chartSqlWhole":"SELECT traffic_date tr0, traffic_date tr0_1,util_perc ut1, 1 FROM portal.demo_util_chart ORDER BY 1",
- "chartAvailable":true,
- "chartType":{"index": "", "value": "Bar Chart", "title": ""},
- "width":"700",
- "height":"420",
- "animation":false,
- "rotateLabels":"90",
- "staggerLabels":false,
- "showTitle":"false",
- "domainAxis":{
- "index":0,
- "value":"tr0",
- "title":"traffic_date",
- "$$hashKey":"11H"
- },
-
- "categoryAxis":{
- "index":1,
- "value":"ut1",
- "title":"util_perc",
- "$$hashKey":"11I"
- },
-
- "hasCategoryAxis":false,
- "rangeAxisList":[
- {
-
- "rangeColor":{
- "index":"",
- "value":"#bcbd22",
- "title":""
- },
-
- "rangeLineType":{
- "index":"",
- "value":"dotted_lines",
- "title":""
- },
- "rangeAxisLabel":{
- "index":0,
- "value":"tr0",
- "title":"traffic_date",
- "$$hashKey":"056"
- },
- "YAxis":"10",
- "chartTitle":"test"
- },
- {
- "rangeColor":{
- "index":"",
- "value":"#2ca02c",
- "title":""
- },
-
- "rangeLineType":{
- "index":"",
- "value":"dashed_lines",
- "title":""
-
-
- },
-
- "rangeAxisLabel":{
- "index":0,
- "value":"tr0",
- "title":"traffic_date",
- "$$hashKey":"056"
- },
- "YAxis":"10",
- "chartTitle":"test"
- }
-
-
- ],
-
- "primaryAxisLabel":"testlabel",
- "secondaryAxisLabel":"testseclabel",
- "minRange":"10",
- "maxRange":"20",
- "topMargin":"6",
- "bottomMargin":"5",
- "leftMargin":"4",
- "rightMargin":"3"
- };
-
- var colorValue = $scope.hardCodeReport.rangeAxisList[0].rangeColor.value;
-
- $timeout(function() {
- $rootScope.isViewRendering = false;
- });
-
- $scope.successPopUp = function (msg) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- msg: function () {
- var message = {
- title: '',
- text: msg
- };
- return message;
- }
- }
- });
- };
-
- $scope.errorPopUp = function (msg) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- msg: function () {
- return msg;
- }
- }
- });
- };
- var ModalInstanceCtrl = function ($scope, $modalInstance, msg,$rootScope) {
- $scope.msg=msg;
- }
-
-});
-
-appDS2.directive('onlyDigits', function () {
-
- return {
- restrict: 'A',
- require: '?ngModel',
- link: function (scope, element, attrs, ngModel) {
- if (!ngModel) return;
- ngModel.$parsers.unshift(function (inputValue) {
- var digits = inputValue.split('').filter(function (s) { return (!isNaN(s) && s != ' '); }).join('');
- ngModel.$viewValue = digits;
- ngModel.$render();
- return digits;
- });
- }
- };
-});
-
-appDS2.directive('onlyCharacters', function () {
- return {
- restrict: 'A',
- require: '?ngModel',
- link: function (scope, element, attrs, ngModel) {
- if (!ngModel) return;
- ngModel.$parsers.unshift(function (inputValue) {
- var digits = inputValue.split('').filter(function (s) { return (isNaN(s) && s != ' '); }).join('');
- ngModel.$viewValue = digits;
- ngModel.$render();
- return digits;
- });
- }
- };
-});
-
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-import-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-import-controller.js
deleted file mode 100644
index a8f853fd..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-import-controller.js
+++ /dev/null
@@ -1,20 +0,0 @@
-appDS2.controller('reportImportController', function($scope,$http,$location, $routeParams, $q, $modal,$log,$window, raptorReportFactory, stepFormFactory, DOMHelper) {
- $scope.importXML = function(){
-
- var importXMLJSON = {
- "tabId":"Import",
- "tabName":"Import",
- "reportXML":$scope.xmlContent
- }
- $scope.errorMessage = ""
- raptorReportFactory.postImportXml(importXMLJSON).then(function(data){
- if (data.errormessage) {
- $scope.errorMessage = data.errormessage;
- } else {
- $window.location.href = 'report#/report_wizard/-1';
- };
- },function(error){
- $log.error("raptorReportFactory: postImportXml failed.");
- });
- }
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-router.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-router.js
deleted file mode 100644
index 58913a40..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-router.js
+++ /dev/null
@@ -1,41 +0,0 @@
-appDS2.config(['$routeProvider',
- function($routeProvider) {
- $routeProvider.
- when('/', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/report-search.html',
- controller: 'reportSearchController'
- }).
- when('/report_search', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/report-search.html',
- controller: 'reportSearchController'
- }).
- when('/report_run/:reportUrlParams*', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/report-run.html',
- controller: 'reportRunController'
- }).
- when('/report_chart_wizard/:reportId', {
- templateUrl: 'static/fusion/raptor/ebz/report_chart_wizard.html',
- controller: 'ChartController'
- }).
- when('/report_chart/:reportId', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/report-chart-wizard.html',
- controller: 'reportChartController'
- }).
- when("/report_wizard", {
- templateUrl : "app/fusion/scripts/DS2-view-models/ds2-reports/report-step.html",
- controller: "reportStepController"
- }).
- when("/report_wizard/:reportId", {
- templateUrl : "app/fusion/scripts/DS2-view-models/ds2-reports/report-step.html",
- controller: "reportStepController"
- }).
- when("/report_wizard/:reportMode/:reportId", {
- templateUrl : "app/fusion/scripts/DS2-view-models/ds2-reports/report-step.html",
- controller: "reportStepController"
- }).
- when("/report_import", {
- templateUrl : "app/fusion/scripts/DS2-view-models/ds2-reports/report-import.html",
- controller: "reportImportController"
- })
- ;
-}]); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-run-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-run-controller.js
deleted file mode 100644
index f5ec623a..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-run-controller.js
+++ /dev/null
@@ -1,374 +0,0 @@
-appDS2.controller("reportRunController", ['$scope','$rootScope','$routeParams','$http','dateFilter', '$window', '$timeout', 'rowSorter','$modal','$sanitize',
- function ($scope,$rootScope,$routeParams,$http,dateFilter,$window,$timeout,rowSorter,$modal,$sanitize) {
- $scope.dateformat = "MM/dd/yyyy";
- $scope.datetimeformat = "MM/dd/yyyy hh:mm a";
- $scope.showFormFields = false;
- $scope.showGrid = false;
- $scope.showChart = false;
- $scope.showBackButton = false;
- $scope.reportData = {};
- $scope.reportData.allowEdit = false;
- $scope.formFieldSelectedValues = {};
- $scope.showFormFieldIds = false;
- $scope.showFormFieldId = {
- value: false
- };
- $scope.isInProgress = true;
- $scope.showLoader=false;
- if($routeParams.reportUrlParams.indexOf("parent___params===")>-1) {
- $scope.showBackButton = true;
- $scope.parentReportUrlParams = $routeParams.reportUrlParams.substring($routeParams.reportUrlParams.indexOf("parent___params===")+18);
- $scope.currentReportUrlParams = $routeParams.reportUrlParams.substring(0,$routeParams.reportUrlParams.indexOf("parent___params==="));
- } else {
- $scope.currentReportUrlParams = $routeParams.reportUrlParams;
- }
- // console.log($routeParams.reportUrlParams);
- var parseQueryString = function( queryString ) {
- var params = {}, queries, temp, i, l;
- // Split into key/value pairs
- queries = queryString.split("&");
- // Convert the array of strings into an object
- for ( i = 0, l = queries.length; i < l; i++ ) {
- temp = queries[i].split('=');
- //console.log(temp[0]);
- //console.log(temp[0] != "refresh");
- if(temp[0] && temp[0] != "refresh")
- params[temp[0]] = temp[1];
- }
- return params;
- };
-
- var convertQueryString = function(queryString) {
- var keys = ""; var str = "";
- keys = Object.keys(queryString);
- //console.log(keys);
- for ( i = 0, l = keys.length; i < l; i++ ) {
- str += keys[i]+"="+queryString[keys[i]] + "&";
-
- }
- return str;
- //queryString =
- }
-
-
-
- $scope.backToParentReport = function (){
- $window.location.href = "report#/report_run/"+$scope.parentReportUrlParams
- }
-
- $scope.urlParams = parseQueryString($scope.currentReportUrlParams);
-
- $scope.reportChartURL = 'report#/report_chart/'+$scope.urlParams.c_master;
-
- $scope.reportEditURL = 'report#/report_wizard/'+$scope.urlParams.c_master;
-
-
- $http.get('raptor.htm?action=report.run.container&'+$scope.currentReportUrlParams).then(
- function(response){
- // console.log(response);
- $scope.isInProgress = false;
- if(response.data.errormessage!=null && response.data.errormessage!=''){
- $scope.errorPopUp(response.data.errormessage);
- }else{
- $scope.reportData = response.data;
- // console.log('reportData report run container response',$scope.reportData);
- if ($scope.reportData.reportTitle) {
- $scope.reportData.reportHeading = $scope.reportData.reportTitle;
- if ($scope.reportData.reportSubTitle) {
- $scope.reportData.reportSubTitle = $scope.reportData.reportSubTitle;
- }
- }
- else
- $scope.reportData.reportHeading = $scope.reportData.reportName;
- if( ($scope.urlParams.hideChart === undefined || $scope.urlParams.hideChart) && $scope.reportData.chartAvailable && $scope.reportData.totalRows>=1){
- //console.log('raptor.htm?action=chart.run&'+convertQueryString($scope.urlParams));
- $http.get('raptor.htm?action=chart.run&'+convertQueryString($scope.urlParams)).then(
- function(response){
- $scope.showChart = true;
- document.getElementById('chartiframe').contentWindow.document.write(response.data);
- document.getElementById('chartiframe').contentWindow.document.close();
- });
- }
-
- if($scope.reportData.displayForm && $scope.reportData.formFieldList && $scope.reportData.formFieldList.length>0 && !$scope.urlParams.hideFormFields){
- $scope.showFormFields = true;
- }
- }
-
- });
- $scope.getFormFieldSelectedValuesAsURL = function(){
- var formFieldsUrl = '';
- $scope.reportData.formFieldList.forEach(function(formField) {
- if(formField.fieldType==='LIST_BOX') {
- if($scope.formFieldSelectedValues && $scope.formFieldSelectedValues[formField.fieldId] ) {
- formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId]+'&';
- }
- } else if(formField.fieldType==='LIST_MULTI_SELECT') {
- if($scope.formFieldSelectedValues[formField.fieldId].length >0) {
- for (var i = 0; i < $scope.formFieldSelectedValues[formField.fieldId].length; i++) {
- if($scope.formFieldSelectedValues[formField.fieldId][i].defaultValue){
- formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId][i].value+'&';
- }
- }
- }
- } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'DATE'){
- formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.dateformat)+'&';
- } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'TIMESTAMP_MIN'){
- formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.datetimeformat)+'&';
- } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && $scope.formFieldSelectedValues[formField.fieldId] && $scope.formFieldSelectedValues[formField.fieldId] != ''){
- formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId]+'&';
- }
- });
- //formFieldsUrl = str.slice(0, -1);
- return formFieldsUrl;
-
- }
-
- $scope.runReport = function(pagination){
- $scope.showLoader=true;
- var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL();
- /*if ($scope.reportData.reportTitle)
- $scope.reportData.reportHeading = $scope.reportData.reportTitle;
- else
- $scope.reportData.reportHeading = $scope.reportData.reportName;*/
-
- // console.log("pagination");
- if(!pagination) {
- //console.log("refreshed ...");
- $scope.gridOptions.pageNumber = 1;
- paginationOptions.pageNumber = 1;
- paginationOptions.pageSize = $scope.reportData.pageSize;
- //console.log($scope.gridOptions);
- $scope.gridOptions.paginationCurrentPage = 1;
- $scope.gridOptions.paginationPageSizes= [$scope.reportData.pageSize];
- $scope.gridOptions.paginationPageSize= $scope.reportData.pageSize;
- if($scope.reportData.totalRows<14){
- $scope.gridHeight = ($scope.reportData.totalRows+7)*30+'px';
- } else{
- $scope.gridHeight = '400px';
- }
- $scope.gridOptions.totalItems = $scope.reportData.totalRows;
- $scope.gridOptions.data= $scope.reportData.reportDataRows;
- $scope.gridOptions.exporterPdfHeader.text= $scope.reportData.reportName;
-
- }
- $scope.currentReportUrlParams = 'c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'&display_content=Y&r_page='+(paginationOptions.pageNumber-1);
- $http.get('raptor.htm?action=report.run.container&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then(
- function(response){
- $scope.showLoader=false;
- $scope.reportData = response.data;
- if ($scope.reportData.reportTitle) {
- $scope.reportData.reportHeading = $scope.reportData.reportTitle;
- if ($scope.reportData.reportSubTitle) {
- $scope.reportData.reportSubTitle = $scope.reportData.reportSubTitle;
- }
- }
- else
- $scope.reportData.reportHeading = $scope.reportData.reportName;
-
- if($scope.reportData.errormessage) {
- //console.log($scope.reportData);
- var stacktraceFP = $scope.reportData.stacktrace.substring(0, $scope.reportData.stacktrace.indexOf(":")+1);
- document.getElementById('errorDiv').innerHTML = $sanitize(+stacktraceFP + " " + $scope.reportData.errormessage);
- //console.log(document.getElementById('errorDiv').innerHtml);
- //console.log(stacktraceFP + " " + $scope.reportData.errormessage);
- }
- if(!pagination) {
- if( ($scope.urlParams.hideChart === undefined || $scope.urlParams.hideChart) && $scope.reportData.chartAvailable && $scope.reportData.totalRows>=1){
- // console.log('raptor.htm?action=chart.run&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1));
- $http.get('raptor.htm?action=chart.run&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then(
- function(response) {
- // console.log(response.data);
- $scope.showChart = true;
- // console.log('response.data',response.data);
- document.getElementById('chartiframe').contentWindow.document.write($sanitize(response.data));
- document.getElementById('chartiframe').contentWindow.document.close();
- });
- } else {
- $scope.showChart = false;
- }
- }
- if($scope.reportData.displayForm && $scope.reportData.formFieldList && $scope.reportData.formFieldList.length>0 && !$scope.urlParams.hideFormFields && !$scope.reportData.hideFormFieldsAfterRun){
- $scope.showFormFields = true;
- } else {
- $scope.showFormFields = false;
- }
- });
- };
-
- var paginationOptions = {
- pageNumber: 1,
- pageSize: 5,
- sort: null
- };
-
- var correctTotalPaginationTemplate =
- //same as normal template, but fixed totals: {{(((grid.options.paginationCurrentPage-1)*grid.options.paginationPageSize)+1)}} {{(grid.options.paginationCurrentPage*grid.options.paginationPageSize>grid.options.totalItems?grid.options.totalItems:grid.options.paginationCurrentPage*grid.options.paginationPageSize)}}
- "<div role=\"contentinfo\" class=\"ui-grid-pager-panel\" ui-grid-pager ng-show=\"grid.options.enablePaginationControls\"><div role=\"navigation\" class=\"ui-grid-pager-container\"><div role=\"menubar\" class=\"ui-grid-pager-control\"><button type=\"button\" role=\"menuitem\" class=\"ui-grid-pager-first\" ui-grid-one-bind-title=\"aria.pageToFirst\" ui-grid-one-bind-aria-label=\"aria.pageToFirst\" ng-click=\"pageFirstPageClick()\" ng-disabled=\"cantPageBackward()\"><div class=\"first-triangle\"><div class=\"first-bar\"></div></div></button> <button type=\"button\" role=\"menuitem\" class=\"ui-grid-pager-previous\" ui-grid-one-bind-title=\"aria.pageBack\" ui-grid-one-bind-aria-label=\"aria.pageBack\" ng-click=\"pagePreviousPageClick()\" ng-disabled=\"cantPageBackward()\"><div class=\"first-triangle prev-triangle\"></div></button> <input type=\"number\" ui-grid-one-bind-title=\"aria.pageSelected\" ui-grid-one-bind-aria-label=\"aria.pageSelected\" class=\"ui-grid-pager-control-input\" ng-model=\"grid.options.paginationCurrentPage\" min=\"1\" max=\"{{ paginationApi.getTotalPages() }}\" required> <span class=\"ui-grid-pager-max-pages-number\" ng-show=\"paginationApi.getTotalPages() > 0\"><abbr ui-grid-one-bind-title=\"paginationOf\">/</abbr> {{ paginationApi.getTotalPages() }}</span> <button type=\"button\" role=\"menuitem\" class=\"ui-grid-pager-next\" ui-grid-one-bind-title=\"aria.pageForward\" ui-grid-one-bind-aria-label=\"aria.pageForward\" ng-click=\"pageNextPageClick()\" ng-disabled=\"cantPageForward()\"><div class=\"last-triangle next-triangle\"></div></button> <button type=\"button\" role=\"menuitem\" class=\"ui-grid-pager-last\" ui-grid-one-bind-title=\"aria.pageToLast\" ui-grid-one-bind-aria-label=\"aria.pageToLast\" ng-click=\"pageLastPageClick()\" ng-disabled=\"cantPageToLast()\"><div class=\"last-triangle\"><div class=\"last-bar\"></div></div></button></div><div class=\"ui-grid-pager-row-count-picker\" ng-if=\"grid.options.paginationPageSizes.length > 1\"><select ui-grid-one-bind-aria-labelledby-grid=\"'items-per-page-label'\" ng-model=\"grid.options.paginationPageSize\" ng-options=\"o as o for o in grid.options.paginationPageSizes\"></select><span ui-grid-one-bind-id-grid=\"'items-per-page-label'\" class=\"ui-grid-pager-row-count-label\">&nbsp;{{sizesLabel}}</span></div><span ng-if=\"grid.options.paginationPageSizes.length <= 1\" class=\"ui-grid-pager-row-count-label\">{{grid.options.paginationPageSize}}&nbsp;{{sizesLabel}}</span></div><div class=\"ui-grid-pager-count-container\"><div class=\"ui-grid-pager-count\"><span ng-show=\"grid.options.totalItems > 0\">{{(((grid.options.paginationCurrentPage-1)*grid.options.paginationPageSize)+1)}} <abbr ui-grid-one-bind-title=\"paginationThrough\">-</abbr> {{(grid.options.paginationCurrentPage*grid.options.paginationPageSize>grid.options.totalItems?grid.options.totalItems:grid.options.paginationCurrentPage*grid.options.paginationPageSize)}} {{paginationOf}} {{grid.options.totalItems}} {{totalItemsLabel}}</span></div></div></div>";
-
- $scope.gridOptions = {
- pageNumber: 1,
- useExternalPagination: true,
- sort : null,
- paginationPageSizes: [5],
- paginationPageSize: 5,
- paginationTemplate: correctTotalPaginationTemplate,
- columnDefs: [],
- data: [],
- enableSorting: true,
- enableGridMenu: true,
- enableSelectAll: true,
- gridMenuCustomItems : [
- { title : 'All Reports',
- action : function($event) {
- $window.open('report.htm','_self');
- }, order : 210 },
- { title : 'Edit Report',
- action : function($event) {
- $window.open($scope.reportEditURL,'_self');
- }, order : 211 },
- /*{ title : 'Export All data as Excel 2007',
- action : function($event) {
- $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.excel2007.session','_self');
- }, order : 212 },*/
- { title : 'Export All data as Excel',
- action : function($event) {
- $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.excel.session','_self');
- }, order : 213 },
- { title : 'Export All data as CSV',
- action : function($event) {
- $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.csv.session','_self');
- }, order : 214 },
- { title : 'Export All data as PDF',
- action : function($event) {
- $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.pdf.session','_self');
- }, order : 215 } ],
- exporterMenuPdf: false,
- exporterMenuCsv: false,
- exporterCsvFilename: 'myFile.csv',
- exporterPdfDefaultStyle: {fontSize: 9},
- exporterPdfTableStyle: {margin: [30, 30, 30, 30]},
- exporterPdfTableHeaderStyle: {fontSize: 10, bold: true, italics: true, color: 'red'},
- exporterPdfHeader: { text: "My Header", style: 'headerStyle' },
- exporterPdfFooter: function ( currentPage, pageCount ) {
- return { text: currentPage.toString() + ' of ' + pageCount.toString(), style: 'footerStyle' };
- },
- exporterPdfCustomFormatter: function ( docDefinition ) {
- docDefinition.styles.headerStyle = { fontSize: 22, bold: true };
- docDefinition.styles.footerStyle = { fontSize: 10, bold: true };
- return docDefinition;
- },
- exporterPdfOrientation: 'portrait',
- exporterPdfPageSize: 'LETTER',
- exporterPdfMaxGridWidth: 500,
- exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")),
- onRegisterApi: function(gridApi) {
- $scope.gridApi = gridApi;
- gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {
- paginationOptions.pageNumber = newPage;
- paginationOptions.pageSize = pageSize;
- $scope.runReport(true);
- });
- }
- };
-
- $scope.uiGridRefresh = function(){
- var columnDefsArray = [];
- var columnFreezeEndColumn = $scope.reportData.colIdxTobeFreezed;
- var doColumnNeedToFreeze = false;
- if(columnFreezeEndColumn && columnFreezeEndColumn.length>0) {
- doColumnNeedToFreeze = true;
- }
- $scope.reportData.reportDataColumns.forEach(function(entry) {
- var tempColumnDef = { displayName: entry.columnTitle, field: entry.colId, enableSorting: entry.sortable,
- sortingAlgorithm: function(a, b) {
- return rowSorter.sortAlpha(a.displayValue, b.displayValue);
- },
- cellTemplate: '<div class="ui-grid-cell-contents" style="text-align:{{COL_FIELD.alignment}};" title="TOOLTIP"> '+
- ' <div ng-if="!COL_FIELD.drillDownURL || COL_FIELD.drillDownURL==\'\'">{{COL_FIELD.displayValue}}</div>' +
- ' <a ng-if="COL_FIELD.drillDownURL && COL_FIELD.drillDownURL!=\'\'" ng-href="{{COL_FIELD.drillDownURL}}&parent___params==={{grid.appScope.currentReportUrlParams}}" >{{COL_FIELD.displayValue}}</a>' +
- '</div>'};
- if(entry.columnWidth && entry.columnWidth!='null' && entry.columnWidth!='pxpx' && entry.columnWidth!='nullpx' && entry.columnWidth!='nullpxpx'){
- tempColumnDef['minWidth'] = entry.columnWidth.substring(0, entry.columnWidth.length - 2);
- } else {
- tempColumnDef['minWidth'] = '100';
- }
- if(doColumnNeedToFreeze) {
- tempColumnDef['pinnedLeft']= true;
- if(columnFreezeEndColumn === entry.colId){
- doColumnNeedToFreeze = false;
- }
- }
- columnDefsArray.push(tempColumnDef);
- });
-
- $scope.gridOptions.paginationPageSizes= [$scope.reportData.pageSize];
- $scope.gridOptions.paginationPageSize= $scope.reportData.pageSize;
- if($scope.reportData.totalRows<14){
- $scope.gridHeight = ($scope.reportData.totalRows+5)*30+'px';
- }else{
- $scope.gridHeight = '400px';
- }
- $scope.gridOptions.totalItems = $scope.reportData.totalRows;
- $scope.gridOptions.columnDefs= columnDefsArray;
- $scope.gridOptions.data= $scope.reportData.reportDataRows;
- $scope.gridOptions.exporterPdfHeader.text= $scope.reportData.reportName;
- };
-
- $scope.$watch("reportData",function(newValue,oldValue) {
- if(!$scope.urlParams.hideGrid){
- if($scope.reportData){
- if($scope.reportData.displayData && $scope.reportData.reportDataColumns){
- $scope.showGrid = true;
- $scope.uiGridRefresh();
- }
- }
- }
- });
-
- $scope.triggerOtherFormFields = function(){
- // console.log("report_run");
- var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL();
- $http.get('raptor.htm?action=report.formfields.run.container&c_master='+$scope.reportData.reportID+'&'+formFieldsUrl).then(
- function(response){
- $scope.reportData = response.data;
- if($scope.reportData.reportHeading==null || $scope.reportData.reportHeading=='')
- $scope.reportData.reportHeading = ($scope.reportData.reportTitle=='')?$scope.reportData.reportName:$scope.reportData.reportTitle;
- });
- };
- $timeout(function() {
- $rootScope.isViewRendering = false;
- });
- $scope.successPopUp = function (msg) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- msg: function () {
- var message = {
- title: '',
- text: msg
- };
- return message;
- }
- }
- });
- };
-
- $scope.errorPopUp = function (msg) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- msg: function () {
- return msg;
- }
- }
- });
- };
- var ModalInstanceCtrl = function ($scope, $modalInstance, msg,$rootScope) {
- $scope.msg=msg;
- }
-}]);
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-search-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-search-controller.js
deleted file mode 100644
index 36a541ed..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-search-controller.js
+++ /dev/null
@@ -1,244 +0,0 @@
-appDS2.requires.push('ui.grid');
-appDS2.requires.push('ui.grid.pagination');
-appDS2.requires.push('ui.grid.resizeColumns');
-appDS2.controller("reportSearchController", ['$scope','$rootScope','$http','$timeout','uiGridConstants','$modal','$q','$log','raptorReportFactory',function ($scope,$rootScope,$http,$timeout,uiGridConstants,$modal,$q,$log,raptorReportFactory) {
- $scope.showLoader=false;
- $scope.getSearchData = function(){
- $scope.showLoader=true;
-
- raptorReportFactory.getSearchData().then(function(data){
- $scope.searchdData = data;
- },function(error){
- $log.error("raptorReportFactory: getSearchData failed.");
- }).finally(function() {
- $scope.showLoader=false;// Always execute this on both error and success
- });;
- }
-
- $scope.getSearchData();
-
- $scope.runReport = function(){
- var searchParams = '';
- if($scope.reportId && $scope.reportId!=''){
- searchParams = '&rep_id='+$scope.reportId+'&rep_id_options='+$scope.operatorRepId.index;
- }
- if($scope.reportName && $scope.reportName!=''){
- searchParams = searchParams+'&rep_name='+$scope.reportName+'&rep_name_options='+$scope.operatorRepName.index;
- }
- $scope.showLoader=true;
- var pageSearchParameter = ($scope.paginationOptions.pageNumber-1)+searchParams
- raptorReportFactory.getSearchDataAtPage(pageSearchParameter).then(function(data){
- $scope.searchdData = data
- },function(error){
- $log.error("raptorReportFactory: getSearchDataAtPage failed.");
- }).finally(function() {
- $scope.showLoader=false;// Always execute this on both error and success
-
- });
- };
-
-
- $scope.paginationOptions = {
- pageNumber: 1,
- pageSize: 5,
- sort: null
- };
-
- function convertValue(v){
- return parseInt(v.displayValue);
- }
-
- $scope.getSortingAlgorithm= function (columnName) {
- return function(a, b, rowA, rowB, direction) {
- console.log("sorting by column " + columnName,a,b);
- if(columnName=='rep_id'){
- if(a && b && a.displayValue && b.displayValue){
- if (convertValue(a) == convertValue(b)) return 0;
- if (convertValue(a) < convertValue(b)) return -1;
- if (convertValue(a) > convertValue(b)) return 1;
- }else{
- return 0;
- }
- }else if(columnName=='rep_name'){
- if(a && b && a.displayValue && b.displayValue){
- if (a.displayValue == b.displayValue) return 0;
- if (a.displayValue < b.displayValue) return -1;
- if (a.displayValue > b.displayValue) return 1;
- }else{
- return 0;
- }
- }else if(columnName=='descr'){
- if(a && b && a.displayValue && b.displayValue){
- if (a.displayValue == b.displayValue) return 0;
- if (a.displayValue < b.displayValue) return -1;
- if (a.displayValue > b.displayValue) return 1;
- }else{
- return 0;
- }
- }else if(columnName=='owner'){
- if(a && b && a.displayValue && b.displayValue){
- if (a.displayValue == b.displayValue) return 0;
- if (a.displayValue < b.displayValue) return -1;
- if (a.displayValue > b.displayValue) return 1;
- }else{
- return 0;
- }
- }else if(columnName=='create_date'){
- if(a && b && a.displayValue && b.displayValue){
- if (a.displayValue == b.displayValue) return 0;
- if (a.displayValue < b.displayValue) return -1;
- if (a.displayValue > b.displayValue) return 1;
- }else{
- return 0;
- }
- }
- }
- };
-
- var correctTotalPaginationTemplate =
- //same as normal template, but fixed totals: {{(((grid.options.paginationCurrentPage-1)*grid.options.paginationPageSize)+1)}} {{(grid.options.paginationCurrentPage*grid.options.paginationPageSize>grid.options.totalItems?grid.options.totalItems:grid.options.paginationCurrentPage*grid.options.paginationPageSize)}}
- "<div role=\"contentinfo\" class=\"ui-grid-pager-panel\" ui-grid-pager ng-show=\"grid.options.enablePaginationControls\"><div role=\"navigation\" class=\"ui-grid-pager-container\"><div role=\"menubar\" class=\"ui-grid-pager-control\"><button type=\"button\" role=\"menuitem\" class=\"ui-grid-pager-first\" ui-grid-one-bind-title=\"aria.pageToFirst\" ui-grid-one-bind-aria-label=\"aria.pageToFirst\" ng-click=\"pageFirstPageClick()\" ng-disabled=\"cantPageBackward()\"><div class=\"first-triangle\"><div class=\"first-bar\"></div></div></button> <button type=\"button\" role=\"menuitem\" class=\"ui-grid-pager-previous\" ui-grid-one-bind-title=\"aria.pageBack\" ui-grid-one-bind-aria-label=\"aria.pageBack\" ng-click=\"pagePreviousPageClick()\" ng-disabled=\"cantPageBackward()\"><div class=\"first-triangle prev-triangle\"></div></button> <input type=\"number\" ui-grid-one-bind-title=\"aria.pageSelected\" ui-grid-one-bind-aria-label=\"aria.pageSelected\" class=\"ui-grid-pager-control-input\" ng-model=\"grid.options.paginationCurrentPage\" min=\"1\" max=\"{{ paginationApi.getTotalPages() }}\" required> <span class=\"ui-grid-pager-max-pages-number\" ng-show=\"paginationApi.getTotalPages() > 0\"><abbr ui-grid-one-bind-title=\"paginationOf\">/</abbr> {{ paginationApi.getTotalPages() }}</span> <button type=\"button\" role=\"menuitem\" class=\"ui-grid-pager-next\" ui-grid-one-bind-title=\"aria.pageForward\" ui-grid-one-bind-aria-label=\"aria.pageForward\" ng-click=\"pageNextPageClick()\" ng-disabled=\"cantPageForward()\"><div class=\"last-triangle next-triangle\"></div></button> <button type=\"button\" role=\"menuitem\" class=\"ui-grid-pager-last\" ui-grid-one-bind-title=\"aria.pageToLast\" ui-grid-one-bind-aria-label=\"aria.pageToLast\" ng-click=\"pageLastPageClick()\" ng-disabled=\"cantPageToLast()\"><div class=\"last-triangle\"><div class=\"last-bar\"></div></div></button></div><div class=\"ui-grid-pager-row-count-picker\" ng-if=\"grid.options.paginationPageSizes.length > 1\"><select ui-grid-one-bind-aria-labelledby-grid=\"'items-per-page-label'\" ng-model=\"grid.options.paginationPageSize\" ng-options=\"o as o for o in grid.options.paginationPageSizes\"></select><span ui-grid-one-bind-id-grid=\"'items-per-page-label'\" class=\"ui-grid-pager-row-count-label\">&nbsp;{{sizesLabel}}</span></div><span ng-if=\"grid.options.paginationPageSizes.length <= 1\" class=\"ui-grid-pager-row-count-label\">{{grid.options.paginationPageSize}}&nbsp;{{sizesLabel}}</span></div><div class=\"ui-grid-pager-count-container\"><div class=\"ui-grid-pager-count\"><span ng-show=\"grid.options.totalItems > 0\">{{(((grid.options.paginationCurrentPage-1)*grid.options.paginationPageSize)+1)}} <abbr ui-grid-one-bind-title=\"paginationThrough\">-</abbr> {{(grid.options.paginationCurrentPage*grid.options.paginationPageSize>grid.options.totalItems?grid.options.totalItems:grid.options.paginationCurrentPage*grid.options.paginationPageSize)}} {{paginationOf}} {{grid.options.totalItems}} {{totalItemsLabel}}</span></div></div></div>";
-
- $scope.gridOptions = {
- paginationPageSizes: [5],
- paginationPageSize: 5,
- paginationTemplate: correctTotalPaginationTemplate,
- columnDefs: [],
- enableColumnResizing: true,
- data: [],
- enableGridMenu: true,
- enableSelectAll: true,
- exporterMenuPdf: false,
- exporterMenuCsv: false,
- exporterCsvFilename: 'myFile.csv',
- exporterPdfDefaultStyle: {fontSize: 9},
- exporterPdfTableStyle: {margin: [30, 30, 30, 30]},
- exporterPdfTableHeaderStyle: {fontSize: 10, bold: true, italics: true, color: 'red'},
- exporterPdfHeader: { text: "My Header", style: 'headerStyle' },
- exporterPdfFooter: function ( currentPage, pageCount ) {
- return { text: currentPage.toString() + ' of ' + pageCount.toString(), style: 'footerStyle' };
- },
- exporterPdfCustomFormatter: function ( docDefinition ) {
- docDefinition.styles.headerStyle = { fontSize: 22, bold: true };
- docDefinition.styles.footerStyle = { fontSize: 10, bold: true };
- return docDefinition;
- },
- exporterPdfOrientation: 'portrait',
- exporterPdfPageSize: 'LETTER',
- exporterPdfMaxGridWidth: 500,
- exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")),
- onRegisterApi: function(gridApi) {
- gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {
- $scope.paginationOptions.pageNumber = newPage;
- $scope.paginationOptions.pageSize = pageSize;
- $scope.runReport();
- });
- }
- };
-
-
- var getPage = function() {
- $scope.gridOptions.columnDefs = [];
- $scope.searchdData.columns[0].forEach(function(entry) {
- if(entry.columnTitle=='Run'){
- $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, enableSorting: false,
- cellTemplate: '<div class="ui-grid-cell-contents"><a ng-href="#/report_run/{{COL_FIELD.drillDownLink.substr(39)}}" class="icon-controls-pointer" style="font-size:20px;"></a></div>'
- });
- } else if(entry.columnTitle=='Edit'){
- $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, enableSorting: false,
- cellTemplate: '<div class="ui-grid-cell-contents"><a ng-href="{{COL_FIELD.drillDownLink}}" class="icon-misc-pen" style="font-size:20px;"></a></div>'
- });
- } else if(entry.columnTitle=='Delete'){
- $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, enableSorting: false,
- cellTemplate: '<div class="ui-grid-cell-contents"><a ng-click="grid.appScope.removeReport(COL_FIELD.drillDownLink,row)" class="icon-misc-trash" style="font-size:20px;"></a></div>'
- });
- } else if(entry.columnTitle=='Copy'){
- $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, enableSorting: false,
- cellTemplate: '<div class="ui-grid-cell-contents"><a ng-href="{{COL_FIELD.drillDownLink}}" class="icon-documents-copy" style="font-size:20px;"></a></div>'
- });
- } else if(entry.columnTitle=='Schedule'){
- } else if(entry.columnTitle=='No'){
- } else {
- $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId,
- enableSorting: true,
- sortingAlgorithm: $scope.getSortingAlgorithm(entry.columnId),
- cellTemplate: '<div class="ui-grid-cell-contents" style="text-align:{{COL_FIELD.alignment}};" title="TOOLTIP"> <div>{{COL_FIELD.displayValue}}</div> </div>'
- });
- }
- });
- $scope.gridOptions.useExternalPagination=true;
- $scope.gridOptions.paginationPageSizes= [$scope.searchdData.metaReport.pageSize];
- $scope.gridOptions.paginationPageSize= 50;//$scope.searchdData.metaReport.pageSize;
- $scope.gridOptions.totalItems = $scope.searchdData.metaReport.totalSize;
- $scope.gridOptions.data = [];
- $scope.searchdData.rows[0].forEach(function(entry) {
- var localData = {};
- entry.forEach(function(rowData){
- localData[rowData["columnId"]]= rowData["searchresultField"];
- });
- $scope.gridOptions.data.push(localData);
- });
- };
-
- $scope.$watch("searchdData",function(newValue,oldValue) {
- if($scope.searchdData){
- getPage();
- }
- });
-
- $scope.operatorsRepId = [
- {index: 0, value: 'Equal To', text: 'Equal To', alias:'Equal To'},
- {index: 1, value: 'Less Than', text: 'Less Than', alias:'Less Than'},
- {index: 2, value: 'Greater Than', text: 'Greater Than', alias:'Greater Than'}];
- $scope.operatorRepId = {};
- $scope.operatorRepId.value = $scope.operatorsRepId[0].value;
- $scope.operatorRepId.index = $scope.operatorsRepId[0].index;
-
- $scope.operatorsRepName = [
- {index: 0, value: 'Starts With', text: 'Starts With', alias:'Starts With'},
- {index:1, value: 'Ends With', text: 'Ends With', alias:'Ends With'},
- {index: 2, value: 'Contains', text: 'Contains', alias:'Contains'}];
-
- $scope.operatorRepName = {};
- $scope.operatorRepName.value = $scope.operatorsRepName[0].value;
- $scope.operatorRepName.index = $scope.operatorsRepName[0].index;
-
- $scope.removeReport = function(reportDeleteUrl,row) {
- var modalInstance = $modal.open({
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-del-confirm.html',
- sizeClass: 'modal-small',
- controller: ['$scope', '$modalInstance', '$http', '$log','raptorReportFactory', function ($scope, $modalInstance, $http, $log, raptorReportFactory) {
- $scope.ok = function() {
- raptorReportFactory.getReportDeleteStatus(reportDeleteUrl).then(function(data){
- if (!(data.deleted)) {
- $log.error("raptorReportFactory: report removal failed.")
- }
- $modalInstance.close();
- },function(error){
- $log.error("report removal error.")
- });
- };
-
- $scope.cancel = function() {
- $modalInstance.dismiss();
- };
- }]
- });
-
- modalInstance.result.then(function () {
- $scope.$emit('RefreshGridOptions');
- }, function () {
- });
- };
-
- $scope.$on('RefreshGridOptions', function(event) {
- $scope.getSearchData();
- });
-
- $timeout(function() {
- $rootScope.isViewRendering = false;
- });
-
-
-}]);
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-step-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-step-controller.js
deleted file mode 100644
index a23823e3..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-step-controller.js
+++ /dev/null
@@ -1,786 +0,0 @@
-appDS2.controller('reportStepController', function($scope,$http,$location, $routeParams, $q, $modal,$log,$window, raptorReportFactory, stepFormFactory) {
- /*****************Init values*********************/
- $scope.reportIdURL = $routeParams.reportId;
- $scope.isEdit = ($scope.reportIdURL==null||$scope.reportIdURL=='')?false:true;
- $scope.isCopy = false;
- $scope.isDefReady = $scope.isEdit;
- $scope.activeTabsId = 'definition';
- $scope.pageMsg =''
- $scope.stepNum = 0;
- $scope.stepTabs=[
- {
- title: 'Definition',
- id: 'definition',
- uniqueId: 'uniqueStep1',
- tabPanelId: 'definitionTab',
- disabled: false
-
- }, {
- title: 'SQL',
- id: 'sql',
- uniqueId: 'uniqueStep2',
- tabPanelId: 'sqlTab',
- disabled: (!$scope.isDefReady)
- }, {
- title: 'Columns',
- id: 'columns',
- uniqueId: 'uniqueTab3x',
- tabPanelId: 'columnsTab',
- disabled: (!$scope.isDefReady)
- }, {
- title: 'Form Fields',
- id: 'formFields',
- uniqueId: 'uniqueTab4x',
- tabPanelId: 'formFieldsTab',
- disabled: (!$scope.isDefReady)
- }, {
- title: 'Security',
- id: 'security',
- uniqueId: 'uniqueTab5x',
- tabPanelId: 'securityTab',
- disabled: (!$scope.isDefReady)
- }, {
- title: 'Log',
- id: 'log',
- uniqueId: 'uniqueTab6x',
- tabPanelId: 'logTab',
- disabled: (!$scope.isDefReady)
- }, {
- title: 'Run',
- id: 'run',
- uniqueId: 'uniqueTab7x',
- tabPanelId: 'runTab',
- disabled: (!$scope.isDefReady)
- }
-
- ];
- $scope.$watch('activeTabsId', function (newVal, oldVal) {
- if(newVal !== oldVal) {
- $scope.init();
- }
- });
-
- $scope.renderStep = function(stepNum){
- var containerElement = angular.element(document.getElementById("stepView"));
- containerElement.empty();
- $scope.stepNum = stepNum;
- var jsonSrcName = getJsonSrcName(stepNum);
- stepFormFactory.renderForm(jsonSrcName, containerElement, $scope);
- }
- $scope.next = function(){
- $scope.stepNum = $scope.stepNum +1;
- $scope.activeTabsId = $scope.stepTabs[$scope.stepNum].id;
- };
-
-
- $scope.previous = function(){
- $scope.stepNum = $scope.stepNum -1;
- $scope.activeTabsId = $scope.stepTabs[$scope.stepNum].id;
- }
-
- /*******************Step 1 Definitions****************/
- $scope.displayOptions={
- hideFormFields:false,
- hideChart:false,
- hideReportData:false,
- hideExcel:false,
- hidePdf:false
- }
- $scope.reportIdURL = $routeParams.reportId;
- $scope.definitionData={};
- $scope.definitionData.displayOptions=[
- {name:'HideFormFields', selected:false},
- {name:'HideChart', selected:false},
- {name:'HideReportData', selected:false},
- {name:'HideExcel', selected:false},
- {name:'HidePdf', selected:false}
- ]
-
-/* $scope.definitionData.dbSrcOptions=[
- {text:'local', value:'local', selected:true},
- {text:'e911dev_leto07', value:'e911dev_leto07', selected:false},
- ]*/
-
- $scope.pageSizeValues=['10','25','50','100','500'];
- $scope.pageSizeOptions =[];
- $scope.dbSrcOptions =[];
- $scope.maxRowValues = ['500','1000','2000','3000','4000','5000','10000','15000','20000','25000','30000','35000','40000','45000','50000','65000']
- $scope.maxRowOptions =[];
- $scope.frozenColValues = ['0','1','2','3','4'];
- $scope.frozenColOptions =[];
- $scope.dataGridAlignValues = ['Left','Right','Center'];
- $scope.dataGridAlignOptions =[];
- $scope.dataContainerValues = ['10','20','30','40','50','60','70','80','90','100','110','120','130','140','150','160','170','180','190','200'];
- $scope.dataContainerOptions =[];
- $scope.runTimeFormNumValues = ['1','2','3','4'];
- $scope.runTimeFormNumOptions =[];
- /******create*****/
- if(!$scope.isEdit){
- $scope.definitionData.reportType = 'Linear';
- //$scope.definitionData.dbInfo = 'Local';
- //$scope.definitionData.dbSrcOptions = ['Local'];
- }
- /****end create***/
-
- /*functions*/
- $scope.getDefinitionById = function(id) {
- $scope.showLoader=true;
- raptorReportFactory.getDefinitionByReportId(id).then(function(data){
- $scope.showLoader=false;
- $scope.definitionData = data;
- $scope.definitionData.dbSrc=data.dbInfo;
- $scope.definitionData.dbSrcOptions = data.dbInfoList;
- console.log($scope.definitionData.dbSrcOptions[0].name);
-
- $scope.showLoader = false;
- for(x in data.displayOptions){
- if(data.displayOptions[x].name=='HideFormFields')
- $scope.displayOptions.hideFormFields = data.displayOptions[x].selected;
- else if(data.displayOptions[x].name=='HideChart')
- $scope.displayOptions.hideChart = data.displayOptions[x].selected;
- else if(data.displayOptions[x].name=='HideReportData')
- $scope.displayOptions.hideReportData = data.displayOptions[x].selected;
- else if(data.displayOptions[x].name=='HideExcel')
- $scope.displayOptions.hideExcel = data.displayOptions[x].selected;
- else if(data.displayOptions[x].name=='HidePdf')
- $scope.displayOptions.hidePdf = data.displayOptions[x].selected;
- }
-
- $scope.definitionData.frozenColumns = $scope.definitionData.frozenColumns+'';
- $scope.definitionData.numFormCols = $scope.definitionData.numFormCols+'';
- $scope.definitionData.allowScheduler = data.allowScheduler=='Y'?true:false;
- $scope.definitionData.sizedByContent = data.sizedByContent=='Y'?true:false;
-
- $scope.definitionData.oneTimeRec = data.oneTimeRec=='Y'?true:false;
- $scope.definitionData.hourlyRec = data.hourlyRec=='Y'?true:false;
- $scope.definitionData.dailyRec = data.dailyRec=='Y'?true:false;
- $scope.definitionData.dailyMFRec = data.dailyMFRec=='Y'?true:false;
- $scope.definitionData.weeklyRec = data.weeklyRec=='Y'?true:false;
- $scope.definitionData.monthlyRec = data.monthlyRec=='Y'?true:false;
-
- if($scope.definitionData.reportTitle==null || $scope.definitionData.reportTitle=='')
- $scope.definitionData.reportTitle = $scope.definitionData.reportName;
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getDefinitionById failed.");
- $scope.showLoader = false;
- });
- }
-
- $scope.constructureDefDropDown = function(){
-
- for(i in $scope.pageSizeValues){
- var v = {
- value :$scope.pageSizeValues[i],
- text :$scope.pageSizeValues[i]
- }
- $scope.pageSizeOptions.push(v);
- }
- for(i in $scope.maxRowValues){
- var v = {
- value :$scope.maxRowValues[i],
- text :$scope.maxRowValues[i]
- }
- $scope.maxRowOptions.push(v);
- }
- for(i in $scope.frozenColValues){
- var v = {
- value :$scope.frozenColValues[i]+'',
- text :$scope.frozenColValues[i]
- }
- $scope.frozenColOptions.push(v);
- }
- for(i in $scope.dataGridAlignValues){
- var v = {
- value :$scope.dataGridAlignValues[i].toLowerCase(),
- text :$scope.dataGridAlignValues[i]
- }
- $scope.dataGridAlignOptions.push(v);
- }
- for(i in $scope.dataContainerValues){
- var v = {
- value :$scope.dataContainerValues[i],
- text :$scope.dataContainerValues[i]
- }
- $scope.dataContainerOptions.push(v);
- }
- for(i in $scope.runTimeFormNumValues){
- var v = {
- value :$scope.runTimeFormNumValues[i],
- text :$scope.runTimeFormNumValues[i]
- }
- $scope.runTimeFormNumOptions.push(v);
- }
- }
-
- $scope.constructDef = function(){
- var data =Object.assign({}, $scope.definitionData);
- if($scope.definitionData.dbSrc){
- console.log("Hello World ", $scope.definitionData.dbSrc);
- data.dbInfo = $scope.definitionData.dbSrc;
- }
- for(x in $scope.definitionData.displayOptions){
- if($scope.definitionData.displayOptions[x].name=='HideFormFields')
- data.displayOptions[x].selected = $scope.displayOptions.hideFormFields
- else if($scope.definitionData.displayOptions[x].name=='HideChart')
- data.displayOptions[x].selected = $scope.displayOptions.hideChart
- else if($scope.definitionData.displayOptions[x].name=='HideReportData')
- data.displayOptions[x].selected = $scope.displayOptions.hideReportData
- else if($scope.definitionData.displayOptions[x].name=='HideExcel')
- data.displayOptions[x].selected = $scope.displayOptions.hideExcel
- else if($scope.definitionData.displayOptions[x].name=='HidePdf')
- data.displayOptions[x].selected = $scope.displayOptions.hidePdf
- }
- if(data.pageSize==null || data.pageSize.startsWith("Select"))
- data.pageSize = null;
- if(data.maxRowsInExcelCSVDownload==null || data.maxRowsInExcelCSVDownload.startsWith("Select"))
- data.maxRowsInExcelCSVDownload = null;
- if(data.frozenColumns==null || data.frozenColumns.startsWith("Select"))
- data.frozenColumns = null;
- if(data.dataGridAlign==null || data.dataGridAlign.startsWith("Select"))
- data.dataGridAlign = null;
- if(data.dataContainerHeight==null || data.dataContainerHeight.startsWith("Select"))
- data.dataContainerHeight = null;
- if(data.dataContainerWidth ==null || data.dataContainerWidth.startsWith("Select"))
- data.dataContainerWidth = null;
- if(data.numFormCols ==null || data.numFormCols.startsWith("Select"))
- data.numFormCols = null;
-
- if(!$scope.isEdit)
- data.reportId=-1;
- if(data.reportTitle==null || data.reportTitle=='')
- data.reportTitle = data.reportName;
- return data;
- }
- $scope.updateDef = function(){
- $scope.showLoader=true;
- var dataToSave = $scope.constructDef();
- raptorReportFactory.updateDefinition(dataToSave,$scope.isEdit).then(function(data){
- $scope.successPopUp('Definition is updated');
- for(x in $scope.stepTabs){
- $scope.stepTabs[x].disabled=false;
- }
- $scope.showLoader=false;
- if(isCopy){
- var newReportId = data.anyStacktrace.split("-")[0];
- if(newReportId!=null && newReportId!='' && newReportId!=-1)
- $window.location.href = "#/report_wizard/"+newReportId;
- }
- },function(error){
- $scope.errorPopUp(error);
- $log.error("report-step-controller: updateDefinition by Id failed.");
- });
- }
- /*******************Step1 Ends****************/
- /*******************Step2 SQL****************/
- $scope.pageisCreating = false;
- $scope.sqlScript={
- value:''
- };
- $scope.sqlTestTableData='';
- /*function*/
- $scope.getSql = function(){
- $scope.showLoader = true;
- raptorReportFactory.getSqlInSession().then(function(data){
- $scope.sqlInSessionJSON = data;
- $scope.sqlScript.value = data.query;
- $scope.showLoader = false;
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getSearchData failed.");
- });
- }
- $scope.testRunSql = function(){
- $scope.showLoader=true;
- var queryJSON = {query: $scope.sqlScript.value};
- queryJSON = JSON.stringify(queryJSON);
- raptorReportFactory.testRunSQL(queryJSON).then(function(data){
- $scope.showLoader=false;
- var modalInstance = $modal.open({
- scope: $scope,
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html',
- windowClass:'modal-docked',
- sizeClass: 'modal-large',
- controller: testRunSqlController,
- resolve:{
- queriedData: function(){
- return data;
- }
- }
- });
-
- modalInstance.result.finally(function () {
- if(!$scope.isEdit){
- $scope.showLoader=true;
- $scope.pageisCreating = true;
- $scope.pageMsg = 'Please wait while we are creating the report. Page will be reloaded after the creation is done.'
- raptorReportFactory.getDefinitionInSession().then(function(data){
- var newReportId = data.reportId;
- if(newReportId!=null && newReportId!='' && newReportId!=-1)
- $window.location.href = "#/report_wizard/"+newReportId;
-
- $scope.showLoader = false;
- $scope.pageisCreating = false;
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: get Definition In Session failed.");
- $scope.showLoader = false;
- });
- }
- });
-
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: test run SQL failed.");
- });
- }
-
- /*******************Step2 End****************/
- /*******************Step3 Column****************/
- $scope.colTableRowData='';
- $scope.isEditCol= true;
-
- $scope.getColumn = function(){
- $scope.showLoader = true;
- raptorReportFactory.getColumnList().then(function(data){
- $scope.colTableRowData = data;
- $scope.showLoader = false;
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: get column list failed.");
- });
- }
-
- $scope.openColumnPopup = function (rowData) {
- var modalInstance = $modal.open({
- scope: $scope,
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-col-edit.html',
- windowClass:'modal-docked',
- sizeClass: 'modal-jumbo',
- controller: openColumnPopupController,
- resolve:{
- colData: function(){
- return rowData;
- }
- }
- });
- modalInstance.result.finally(function () {
- $scope.getColumn();
- });
- };
-
- /*******************Step3 End****************/
- /*******************Step4 Starts Form Fields****************/
-
- $scope.dataProcessing = false;
- $scope.formFieldData = [];
- $scope.getFormFieldList = function(){
- $scope.showLoader= true;
- $scope.formFieldData = [];
- raptorReportFactory.getFormFieldList().then(function(data){
- $scope.showLoader= false;
- $scope.formFieldData = data;
- $scope.formFieldData.sort(function(obj1, obj2) {
- // Ascending: first age less than the previous
- return obj1.orderSeq - obj2.orderSeq;
- });
-
- $scope.showLoader = false;
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: get formfields failed.");
- $scope.showLoader = false;
- });
- }
-
- $scope.formFieldReOrder = function(upID, downID){
-
- $scope.moveUpFF={};
- $scope.moveDownFF={};
- $scope.showLoader=true;
- raptorReportFactory.getFormFieldEditInfoById(upID).then(function(data){
- $scope.moveUpFF = data;
- raptorReportFactory.getFormFieldEditInfoById(downID).then(function(data){
- $scope.moveDownFF = data;
- var downOrder = $scope.moveDownFF.orderSeq;
- $scope.moveDownFF.orderSeq = $scope.moveUpFF.orderSeq;
- $scope.moveUpFF.orderSeq = downOrder;
- raptorReportFactory.saveFormFieldEditInfo($scope.moveDownFF).then(function(data){
- raptorReportFactory.saveFormFieldEditInfo($scope.moveUpFF).then(function(data){
- $scope.successPopUp('');
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: saveFormFieldEditInfo failed.");
- }).finally(function() {
- $scope.showLoader=false;
- $scope.getFormFieldList();
- })
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: saveFormFieldEditInfo failed.");
- });
-
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getColumnEditInfoById failed.");
- });
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getColumnEditInfoById failed.");
- })
-
-
- }
-
- $scope.formFieldVerifySQL= function(sqlScript){
- var queryJSON = {query: sqlScript};
- queryJSON = JSON.stringify(queryJSON);
- raptorReportFactory.formFieldVerifySQL(queryJSON).then(function(data){
- var modalInstance = $modal.open({
- scope: $scope,
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html',
- sizeClass: 'modal-large',
- controller: formFieldVerifySQLController,
- resolve:{
- queriedData: function(){
- return data;
- }
- }
- })
-
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: test run SQL failed.");
- });
- }
-
-
- $scope.openFormFieldPopup = function (rowData,type) {
- $scope.type= type;
- var modalInstance = $modal.open({
- scope: $scope,
- animation: true,
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-formfield-edit.html',
- sizeClass: 'modal-large',
- controller: openFormFieldPopupController,
- resolve:{
- fieldData: function(){
- return rowData;
- }
- }
- });
-
- modalInstance.result.finally(function () {
- $scope.getFormFieldList();
- });
- };
- $scope.addFormField = function(){
- $scope.openFormFieldPopup('','add');
- }
-
-
- $scope.deleteFormField = function(rowData) {
- var modalInstance = $modal.open({
- scope: $scope,
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-formfield-del-confirm.html',
- sizeClass: 'modal-small',
- controller: deleteFormFieldController,
- resolve:{
- rowData: function(){
- return rowData;
- }
- }
- });
- modalInstance.result.then(function () {
- $scope.getFormFieldList();
- }, function () {
- });
- }
-
- /*******************Step4 End****************/
- /*******************Step5 Starts Security****************/
- $scope.ynOptions = [
- {value:"true", text:"Yes"},
- {value:"false", text:"No"}
- ];
- $scope.addReportUserId={
- id:''
- };
- $scope.addReportRoleId={
- id:''
- };
- $scope.loadSecurityPage = function() {
- $scope.showLoader = true;
- raptorReportFactory.resetSecurityLoadingCounter();
-
- //API call 1:
- raptorReportFactory.getSecurityReportOwnerList().then(function(data){
- $scope.reportOwnerList = data;
- raptorReportFactory.icrementSecurityLoadingCounter();
- if(raptorReportFactory.checkSecurityLoadingCounter()){$scope.showLoader = false;};
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getSecurityReportOwnerList failed.");
- });
-
- //API call 2: get report role list
- raptorReportFactory.getReportRoleList().then(function(data){
- $scope.reportRoleList = data;
- raptorReportFactory.icrementSecurityLoadingCounter();
- if(raptorReportFactory.checkSecurityLoadingCounter()){$scope.showLoader = false;};
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getReportRoleList failed.");
- });
-
- //API call 3: get security page basic info
- raptorReportFactory.getReportSecurityInfo().then(function(data){
- $scope.reportSecurityInfo = data;
- $scope.reportOwnerId ={id: $scope.reportSecurityInfo.ownerId};
- raptorReportFactory.icrementSecurityLoadingCounter();
- if(raptorReportFactory.checkSecurityLoadingCounter()){$scope.showLoader = false;};
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getReportSecurityInfo failed.");
- $scope.showLoader = false;});
-
- //API call 4: retrieve security users
- raptorReportFactory.getReportSecurityUsers().then(function(data){
-
- $scope.reportSecurityUsers = data;
- for (var i=0; i<$scope.reportSecurityUsers.length;i++) {
- $scope.reportSecurityUsers[i]["accessAllowed"] = !$scope.reportSecurityUsers[i]["readOnly"];
- $scope.reportSecurityUsers[i].runAccess = true; // need to check why 1702 version is making it true always
- }
- raptorReportFactory.icrementSecurityLoadingCounter();
- if(raptorReportFactory.checkSecurityLoadingCounter()){$scope.showLoader = false;};
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: reportSecurityUsers failed.");
- });
-
- //API call 5: retrieve security roles
- raptorReportFactory.getReportSecurityRoles().then(function(data){
- $scope.reportSecurityRoles = data;
- for (var i=0; i<$scope.reportSecurityRoles.length;i++) {
- $scope.reportSecurityRoles[i]["accessAllowed"] = !$scope.reportSecurityRoles[i]["readOnly"];
- $scope.reportSecurityRoles[i].runAccess = true; // need to check why 1702 version is making it true always
- }
-
- raptorReportFactory.icrementSecurityLoadingCounter();
- if(raptorReportFactory.checkSecurityLoadingCounter()){$scope.showLoader = false;};
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: reportSecurityRoles failed.");
- });
- }
- $scope.addReportSecurityUser = function(userId) {
- $scope.showLoader=true;
- raptorReportFactory.addReportSecurityUser(userId).then(function(data){
- $scope.loadSecurityPage();
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: addReportSecurityUser failed.");
- }).finally(function() {
- $scope.showLoader=false;
- });
- }
-
- $scope.removeReportSecurityUser = function(securityUser) {
- var modalInstance = $modal.open({
- scope: $scope,
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-user-del-confirm.html',
- sizeClass: 'modal-small',
- controller: removeReportSecurityUserController,
- resolve:{
- securityUser: function(){
- return securityUser;
- }
- }
- });
- modalInstance.result.then(function () {
- $scope.loadSecurityPage();
- }, function () {
- });
- };
- $scope.addReportSecurityRole = function(roleId) {
- raptorReportFactory.addReportSecurityRole(roleId).then(function(data){
- $scope.loadSecurityPage();
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: addReportSecurityRole failed.");
- });
- }
-
-
- $scope.removeReportSecurityRole = function(securityRole) {
- var modalInstance = $modal.open({
- scope: $scope,
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-role-del-confirm.html',
- sizeClass: 'modal-small',
- controller: removeReportSecurityRoleController,
- resolve:{
- securityRole: function(){
- return securityRole;
- }
- }
- });
- modalInstance.result.then(function () {
- $scope.loadSecurityPage();
- }, function () {
- });
- }
-
- $scope.saveReportSecurityInfo = function() {
- $scope.showLoader = true;
- var securityInfo = {'userId':$scope.reportSecurityInfo.ownerId+"",'isPublic':$scope.reportSecurityInfo.isPublic};
- raptorReportFactory.updateReportSecurityInfo(securityInfo).then(function(data){
- $scope.successPopUp('');
- $scope.loadSecurityPage();
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: updateReportSecurityInfo failed.");
- });
- };
-
- $scope.toggleUserEditAccessActive = function(rowData) {
- var modalInstance = $modal.open({
- scope: $scope,
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-user-role-confirm-toggle.html',
- sizeClass: 'modal-small',
- controller: toggleUserEditAccessActiveController,
- resolve:{
- rowData: function(){
- return rowData;
- }
- }
- });
- }
-
- $scope.toggleRoleEditAccessActive = function(rowData) {
- var modalInstance = $modal.open({
- scope: $scope,
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-user-role-confirm-toggle.html',
- sizeClass: 'modal-small',
- controller: toggleRoleEditAccessActiveController,
- resolve:{
- rowData: function(){
- return rowData;
- }
- }
- });
- }
-
- /*******************Step5 End****************/
- /*******************Step6 Starts****************/
- $scope.logs = [];
- $scope.getReportID = function(){
- $scope.showLoader = true;
- raptorReportFactory.getReportLogs($routeParams.reportId).then(function(data){
- $scope.logs = data;
- $scope.showLoader = false;
-
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getReportID failed."+ error);
- });
- }
-
-
- /*******************Step6 End****************/
- /*******************Step7 Starts Run****************/
- $scope.loadDefinitionInSession = function(){
- $scope.showLoader = true;
- raptorReportFactory.getDefinitionInSession().then(function(data){
- $scope.reportId = data.reportId;
- $scope.showLoader = false;
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getDefinitionInSession failed.");
- $scope.showLoader = false;
- });
- }
- $scope.runReport = function(){
- $window.location.href = "#/report_run/c_master="+$scope.reportId+"&refresh=Y";
- }
- /*******************Step7 End****************/
-
- /********************Init*************/
- $scope.init = function(){
- if ($routeParams.reportMode=="copy") {
- $scope.isCopy = true;
- raptorReportFactory.copyReportById($routeParams.reportId).then(function(data){
- $scope.isEdit = true;
- $scope.reportId = -1;
- $scope.getDefinitionById(-1);
- },function(error){
- $log.error("raptorReportFactory: deleteFormFieldById failed.");
- });
- } /*else if ($routeParams.reportMode=="import") {
- $scope.$emit('RefreshInsession');
- }*/
-
-
- if($scope.activeTabsId=='definition'){ /*Step 1*/
- $scope.constructureDefDropDown();
- if($scope.isEdit)
- $scope.getDefinitionById($scope.reportIdURL); //edit
- else
- $scope.getDefinitionById(-1); //create
- }else if($scope.activeTabsId=='sql'){ /*Step 2*/
- $scope.getSql();
- }else if($scope.activeTabsId=='columns'){
- $scope.getColumn();
- }else if($scope.activeTabsId=='formFields'){
- $scope.getFormFieldList();
- }else if($scope.activeTabsId=='security'){
- $scope.loadSecurityPage();
- }else if($scope.activeTabsId=='log'){
- $scope.getReportID();
- }else if($scope.activeTabsId=='run'){
- $scope.reportId = $scope.reportIdURL;
- if($scope.reportId==null || $scope.reportId=='')
- $scope.loadDefinitionInSession();
- }
- }
-
- $scope.successPopUp = function (msg) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- msg: function () {
- var message = {
- title: '',
- text: msg
- };
- return message;
- }
- }
- });
- };
-
- $scope.errorPopUp = function (msg) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- msg: function () {
- return msg;
- }
- }
- });
- };
-
- $scope.init();
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/drools-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/drools-controller.js
deleted file mode 100644
index 1d4659e3..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/drools-controller.js
+++ /dev/null
@@ -1,53 +0,0 @@
-appDS2.controller('droolsController', function($scope, $modal, $routeParams, DroolsService, modalService) {
- $scope.tableDate=[];
- $scope.resultsString = "";
- $scope.postDroolsBean={
- droolsFile:'',
- className:'',
- selectedRules:''
- };
- $scope.filenameFromUrl = $routeParams.filename;
- if($scope.filenameFromUrl!='' && $scope.filenameFromUrl!='0')
- $scope.postDroolsBean.droolsFile = $scope.filenameFromUrl
- $scope.execute = function(postDroolsBean) {
- if($scope.postDroolsBean.droolsFile=='' ||$scope.postDroolsBean.className=='' || $scope.postDroolsBean.selectedRules=='' ){
- modalService.errorPopUp ("Required fields cannot be empty");
- return;
- }
- var uuu = "post_drools/execute";
- var postData={postDroolsBean:postDroolsBean};
- DroolsService.executeDrools(postData).then(function(data){
- $scope.resultsString=data.resultsString;
- modalService.successPopUp($scope.resultsString);
- },function(error){
- modalService.errorPopUp (error);
- });
- };
-});
-
-appDS2.controller('droolsListController', function($scope, $modal, DroolsService, modalService) {
- $scope.tableDate=[];
- $scope.resultsString = "";
- $scope.postDroolsBean="";
-
- $scope.getDroolsList = function(){
- DroolsService.getDroolsList().then(function(data){
- var j = data;
- $scope.tableData = JSON.parse(j.data);
- $scope.buildTable();
- },function(error){
- modalService.errorPopUp (error);
- });
- }
-
- $scope.buildTable = function(){
- for(x in $scope.tableData){
- if($scope.tableData[x].active_yn=='Y')
- $scope.tableData[x].active_yn=true;
- else
- $scope.tableData[x].active_yn=false;
- }
- }
-
-});
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/nbook-framecontroller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/nbook-framecontroller.js
deleted file mode 100644
index ab88aed9..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/nbook-framecontroller.js
+++ /dev/null
@@ -1,15 +0,0 @@
-appDS2.config(function($routeProvider) {
- $routeProvider
-
- //.when('/notebook-frame/:id/:key/:value',{
- //.when('/notebook-frame/:nid/:qprms',{
- /*.when('/notebook-frame',{
- templateUrl: 'app/fusion/notebook-integration/scripts/view-models/notebook-frame.html',
- controller: 'notebookFrameController'
- })*/
-
- .otherwise({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-viz.html',
- controller: 'notebookFrameController'
- });
-}) \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebook-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebook-controller.js
deleted file mode 100644
index efd22f0f..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebook-controller.js
+++ /dev/null
@@ -1,37 +0,0 @@
-appDS2.controller('nbookController', ['$scope', '$location','$window','$http', function ($scope,$location,$window,$http) {
- $scope.keyValueList = [{}];
- $scope.submitParameters = function() {
- $scope.iframevisibility = false;
- $scope.postData = {};
- $scope.additionalqueryParams = {};
- //Use this if there is only one 1 query param key value pair
- $scope.additionalqueryParams.paramKey = $scope.qparamKey;
- $scope.additionalqueryParams.paramVal = $scope.qparamVal;
- var qryStr = '';
- for(var i = 0; i < $scope.keyValueList.length; i++) {
- var obj = $scope.keyValueList[i];
- if (obj.qK != undefined && obj.qV != undefined) {
- if (qryStr!='')
- qryStr = qryStr+'&'+obj.qK+'='+obj.qV;
- else
- qryStr = obj.qK+'='+obj.qV;
- }
- }
- var queryurl = 'nbooktest.htm?nid='+$scope.notebookvalue+'&'+qryStr;
- window.open (queryurl,'_self',false);
- }
- $scope.addKeyValuePairs = function (kv) {
- if ($scope.keyValueList.length < 9) {
- $scope.keyValueList.push({
- });
- } else {
- document.getElementById("addbtn")["disabled"] = true;
- }
- }
- $scope.removeKeyValuePairs = function (index) {
- $scope.keyValueList.splice(index, 1);
- if ($scope.keyValueList.length == 8) {
- document.getElementById("addbtn")["disabled"] = false;
- }
- }
-}]); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebookFrameController.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebookFrameController.js
deleted file mode 100644
index 95489918..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebookFrameController.js
+++ /dev/null
@@ -1,24 +0,0 @@
-appDS2.controller('notebookFrameController', function ($scope,$location,$window,$http,$routeParams) {
- var nid = $window.location.search.substr($window.location.search.indexOf("=")+1);
- $scope.additionalqueryParams={};
- if ($window.location.search.substr($window.location.search.indexOf("=")+1)) {
- $scope.queryParams = $window.location.search;
- if($window.location.search.substring(0, $window.location.search.length-1).indexOf("&")!=-1) {
- $scope.notebookparam = $window.location.search.substring($window.location.search.indexOf("?")+1,$window.location.search.indexOf("&"));
- $scope.additionalqueryParams = JSON.parse('{"' + decodeURI($scope.queryParams.substr($scope.queryParams.indexOf("&")+1).replace(/&/g, "\",\"").replace(/=/g,"\":\"")) + '"}');
- }
- else {
- $scope.notebookparam1 = $window.location.search.substr($window.location.search.indexOf("?")+1);
- $scope.notebookparam = $scope.notebookparam1.substring(0, $scope.notebookparam1.length - 1);
- }
- $scope.notebookvalue = $scope.notebookparam.substr($scope.notebookparam.indexOf("=")+1);
- }
- else {
- $scope.notebookvalue = '833c0a69ec1433fbb2f8752af733cf0e';
- }
- $http({method:'POST', url:'rNotebookFE/authCr', data: $scope.notebookvalue, params:{'qparams' : $scope.additionalqueryParams}, transformResponse: [function (data) {
- // Do whatever you want!
- document.getElementById('itestframe').src = data;
- return data;
- }]})
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowApp.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowApp.js
deleted file mode 100644
index 2ae2b1b3..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowApp.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*angular.module('att.abs.helper', []);
-angular.module('quantum', []);
-//angular.module('ui.bootstrap', []);
-appDS2=angular.module("workflowApp", ["ngRoute", 'ngMessages', 'ngCookies', 'b2b.att.tpls', 'ddh.att.tpls','ddh.att.dropdowns', 'ddh.att.switches', 'b2b.att.footer', 'b2b.att.header','gridster','ui.bootstrap']);
-*/
-var appDS2=angular.module("workflowApp", ["ngRoute", 'ngMessages','ngCookies','modalServices', 'ngCookies', 'b2b.att','gridster','ui.bootstrap','ui.bootstrap.modal']); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowController.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowController.js
deleted file mode 100644
index f18f00e9..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowController.js
+++ /dev/null
@@ -1,513 +0,0 @@
-
-
-appDS2.controller('workflowsControllerDS2', function($scope, $http, $log, $modal) {
- $scope.viewPerPage = 5;
- $scope.scrollViewsPerPage = 20;
- $scope.currentPage = 2;
- $scope.totalPage;
- $scope.searchCategory = "";
- $scope.searchString = "";
- $scope.radio = {
- value: ""
- };
-
-
- $scope.showModal = false;
- $scope.toggleModal = function(){
- $scope.showModal = !$scope.showModal;
- };
-
- $scope.workflow = {};
- $scope.workflow.active = "true";
-
- $scope.updateAllWorkflowStatus = function() {
- angular.forEach($scope.workflows,function(value){
- $scope.checkWorkflowStatus(value);
- })
- }
-
- $scope.fetchWorkflowsList = function() {
- $http.get('workflows/list').then(function(workflowList){
- console.log('Got new list from server = ' + workflowList.data);
- $scope.workflows = workflowList.data;
- $scope.updateAllWorkflowStatus();
- });
- };
-
- $scope.addNewWorkflow = function(newWorkflow) {
- $http.post('workflows/addWorkflow/', JSON.stringify(newWorkflow)).success(function() {
- $scope.fetchWorkflowsList();
- });
-
- $scope.workflow.name = '';
-
- };
-
- $scope.updateWorkflow = function (workflowToEdit) {
- //workflowToEdit.active='true';
- var modalInstance = $modal.open({
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-new.html',
- sizeClass: 'modal-small',
- controller: ['$scope', '$modalInstance', '$http', function ($scope, $modalInstance, $http) {
- $scope.workflow = workflowToEdit;
- $scope.ok = function() {
- if(
- $scope.workflow.name== undefined|| $scope.workflow.name == null|| $scope.workflow.name == ""
- ||$scope.workflow.workflowKey == undefined ||$scope.workflow.workflowKey==null||$scope.workflow.workflowKey==""
- ||$scope.workflow.runLink==undefined||$scope.workflow.runLink==null||$scope.workflow.runLink==""
-
- )
- {
- alert("please provide valid entries !");
- }
- else{
-
- console.log('Updating existing workflow ... ' + JSON.stringify($scope.workflow));
- $http.post('workflows/editWorkflow/', JSON.stringify($scope.workflow)).then(function(returnedWorkflow){
- console.log('Returned Workflow = ' + JSON.stringify(returnedWorkflow));
- $modalInstance.close($scope.workflow);
- });
- }
- };
-
- $scope.cancel = function() {
- $modalInstance.dismiss();
- };
- }],
- //End of inner controller
- resolve: {
- workflow: function() {
- console.log('Passing ' + JSON.stringify($scope.workflow));
- return $scope.workflow;
- }
- }
- });
-
- modalInstance.result.then(function (editedWorkFlow) {
- //Need to convert to proper date - later
- delete editedWorkFlow.created;
- delete editedWorkFlow.updated;
-
- delete editedWorkFlow.createdBy;
- delete editedWorkFlow.modifiedBy;
-
- console.log('selected Item ' + JSON.stringify(editedWorkFlow));
- $scope.$emit('workflowAdded', editedWorkFlow);
-
- }, function () {
- $log.info('Modal dismissed at: ' + new Date());
- });
- };
-
- $scope.reset = function(){
- console.log("Resetting ....");
- };
-
- $scope.update = function(){
- console.log("updating ....");
- };
-
- $scope.createWorkflow = function (modalSize) {
-
- var modalInstance = $modal.open({
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-new.html',
- sizeClass: 'modal-small',
- controller: ['$scope', '$modalInstance', '$http', function ($scope, $modalInstance, $http) {
- $scope.workflow = {};
- $scope.workflow.active = 'true';
- $scope.ok = function() {
- if($scope.workflow.name== undefined|| $scope.workflow.name == null|| $scope.workflow.name == ""
- ||$scope.workflow.workflowKey == undefined ||$scope.workflow.workflowKey==null||$scope.workflow.workflowKey==""
- ||$scope.workflow.runLink==undefined||$scope.workflow.runLink==null||$scope.workflow.runLink==""
-
- )
- {
- alert("please provide valid entries !");
- }
- else{
- console.log('Saving new workflow ... ' + JSON.stringify($scope.workflow));
- $http.post('workflows/addWorkflow/', JSON.stringify($scope.workflow)).then(function(returnedWorkflow){
- console.log('Returned Workflow = ' + JSON.stringify(returnedWorkflow));
- $modalInstance.close($scope.workflow);
- });
- }
- };
-/* console.log(size);*/
- $scope.cancel = function() {
- $modalInstance.dismiss();
- };
- }],
- //End of inner controller
- resolve: {
- workflow: function() {
- console.log('Passing ' + JSON.stringify($scope.workflow));
- return $scope.workflow;
- }
- }
- });
-
- modalInstance.result.then(function (newWorkflow) {
- console.log('selected Item ' + JSON.stringify(newWorkflow));
- $scope.$emit('workflowAdded', newWorkflow);
-
- }, function () {
- $log.info('Modal dismissed at: ' + new Date());
- });
- };//End of createWorkflow function
-
-
- $scope.removeWorkflow = function(workflowToRemove){
- var modalInstance = $modal.open({
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-remove.html',
- sizeClass: 'modal-small',
- controller: ['$scope', '$modalInstance', '$http', function ($scope, $modalInstance, $http) {
- $scope.workflowToRemove = workflowToRemove;
- $scope.ok = function() {
- console.log('Removing workflow ... ' + JSON.stringify($scope.workflowToRemove) + ' on client request.');
- $http.post('workflows/removeWorkflow/', JSON.stringify($scope.workflowToRemove.id)).then(function(){
- console.log('Workflow successfully removed !!!');
- $modalInstance.close();
- });
- };
-
- $scope.cancel = function() {
- $modalInstance.dismiss();
- };
- }]
- });
-
- modalInstance.result.then(function () {
- $scope.$emit('workflowRemoved');
- }, function () {
- $log.info('Modal dismissed at: ' + new Date());
- });
-
- };
-
-
-
- $scope.scheduleWorkflow = function(workflowToSchedule){
- var modalInstance = $modal.open({
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-schedule.html',
-
- controller: ['$scope', '$modalInstance', '$http','dateFilter', function ($scope, $modalInstance, $http,dateFilter) {
-
- $scope.workflowToSchedule = workflowToSchedule;
- $scope.dt = new Date();
- $scope.dt2 = new Date();
- $scope.dateformat = 'MM/dd/yyyy',
- $scope.datetimeformat = "hh:mm a";
-
- $scope.recurrenceOptions =[{
- index:0, value:'One-Time', title:'One-Time'
- },{
- index:1, value: 'Hourly',title:'Hourly'
- },{
- index:2, value: 'Daily',title:'Daily'
- },{
- index:3, value: 'Weekly',title:'Weekly'
- }]
- $scope.selectRecurrenceOpt = $scope.recurrenceOptions[0];
-
- $scope.hours = [];
- for (var i=0; i<24; i++){
- var newObj={}
- newObj.index = i;
- newObj.value = ""+i;
- newObj.title = ""+i;
- $scope.hours.push(newObj);
- }
-
- $scope.minutes = [];
- for (var i=0; i<60; i++){
- var newObj={}
- newObj.index = i;
- newObj.value = ""+i;
- newObj.title = ""+i;
- $scope.minutes.push(newObj);
- }
-
- $scope.AMPMOptions =[
- {
- index:0, value:'AM', title:'AM'
- },{
- index:1, value: 'PM',title:'PM'
- }]
-
- $scope.selectFirstHour =$scope.hours[0];
- $scope.selectFirstMinute =$scope.minutes[0];
-
- $scope.selectLastHour =$scope.hours[0];
- $scope.selectLastMinute =$scope.minutes[0];
-
- $scope.selectStartAMPMOption=$scope.AMPMOptions[0];
- $scope.selectLastAMPMOption=$scope.AMPMOptions[0];
-
- var GenerateCronExpression = function(trigger_dt, RecurrenceOpt) {
- var CRON_sec = trigger_dt.getSeconds();
- var CRON_min = trigger_dt.getMinutes();
- var CRON_hr = trigger_dt.getHours();
- var CRON_date= trigger_dt.getDate();
- var CRON_month = trigger_dt.toLocaleString('en-US', {month: 'short'}).toUpperCase();
- var CRON_day = trigger_dt.toLocaleString('en-US', {weekday: 'short'}).toUpperCase();
- var CRON_year = trigger_dt.getFullYear();
- if (RecurrenceOpt ==="One-Time") {
- CRON_day = '?'
- } else {
- if (RecurrenceOpt ==="Hourly") {
- CRON_hr = '*';
- CRON_date = '*'
- CRON_month = '*'
- CRON_day = '?'
- CRON_year = '*'
- } else if (RecurrenceOpt ==="Daily") {
- CRON_date = '*'
- CRON_month = '*'
- CRON_day = '?'
- CRON_year = '*'
- } else if (RecurrenceOpt ==="Weekly") {
- CRON_date = '*'
- CRON_month = '*'
- CRON_year = '*'
- }
- }
-
- var CRON_Expression = [CRON_sec, CRON_min, CRON_hr, CRON_date, CRON_month, CRON_day, CRON_year];
- return CRON_Expression.join(" ");
- }
-
- $scope.ok = function() {
-
- // DateTime for the start time: it should be noted that the start time
- // for a CRON job should be prior to the trigger time.
- $scope.trigger_dt = new Date( $scope.dt.getFullYear() +
- "-" + ("0"+($scope.dt.getMonth()+1)).slice(-2) +
- "-" +("0"+ $scope.dt.getDate()).slice(-2) +
- " " + ("0" + $scope.selectFirstHour.value).slice(-2) +
- ":" +("0" + $scope.selectFirstMinute.value).slice(-2) +
- ":00.0");
-
- $scope.startDateTime_CRON = GenerateCronExpression($scope.trigger_dt, $scope.selectRecurrenceOpt.value)
-
- //roll back the the start date time by 30 seconds (start time should be 30 seconds prior to trigger time)
- dt_st = new Date($scope.trigger_dt - 30*1000)
-
- startDateTime = dt_st.getFullYear() +
- "-" + ("0"+(dt_st.getMonth()+1)).slice(-2) +
- "-" +("0"+ dt_st.getDate()).slice(-2) +
- " " + ("0" + dt_st.getHours()).slice(-2) +
- ":" +("0" + dt_st.getMinutes()).slice(-2) +
- ":" + ("0" + dt_st.getSeconds()).slice(-2) +".0";
- $scope.startDateTime = startDateTime;
-
- $scope.endDateTime = $scope.dt2.getFullYear() +
- "-" + ("0"+($scope.dt2.getMonth()+1)).slice(-2) +
- "-" +("0"+ $scope.dt2.getDate()).slice(-2) +
- " " + ("0"+ $scope.selectLastHour.value).slice(-2) +
- ":" +("0" + $scope.selectLastMinute.value).slice(-2) +
- ":00.0"
-
- $scope.WorkflowScheduleObject = {};
- $scope.WorkflowScheduleObject['startDateTime_CRON'] = $scope.startDateTime_CRON;
- $scope.WorkflowScheduleObject['startDateTime'] = $scope.startDateTime;
- $scope.WorkflowScheduleObject['endDateTime'] = $scope.endDateTime;
- $scope.WorkflowScheduleObject['workflowKey'] = $scope.workflowToSchedule.workflowKey;
- $scope.WorkflowScheduleObject['recurrence'] = $scope.selectRecurrenceOpt.value;
- $scope.WorkflowScheduleObject['workflow_arguments'] = "test";
- $scope.WorkflowScheduleObject['workflow_server_url'] = $scope.workflowToSchedule.runLink;
-
-
- TimeFromNowToStart = new Date($scope.startDateTime)-new Date()
- TimeStartToEnd = new Date($scope.endDateTime)-new Date($scope.startDateTime)
-
- if (TimeFromNowToStart<=0) {
- console.log("invalid start time input")
- alert("Please ensure the scheduled start date time is later than current time.")
- return;
- }
- if (TimeStartToEnd<=0) {
- console.log("invalid end time input")
- alert("Please ensure the schduled end date time is later than the start time.")
- return;
- }
- // if successful then save and close
- $scope.saveCronJob($scope.WorkflowScheduleObject);
- $modalInstance.close();
-
- };
-
- $scope.saveCronJob = function(cronJobData){
-
- console.log('saving cron job data: ' + cronJobData);
- var uuu = "workflows/saveCronJob.htm";
- var postData={cronJobDataObj: cronJobData};
- $http.post({
-
- url : uuu,
- //dataType: 'json', // data type expected from server
- contentType: 'application/json',
- data: JSON.stringify(postData), // data type sent to server
- success : function(data){
- $scope.$apply(function(){
- //$scope.availableRoleFunctions=[];$scope.$apply();
- // new // $scope.availableFnMenuItems=data.availableFnMenuItems;
- }
- );
- //alert("Update Successful.") ;
- //$scope.editRoleFunction = null;
- // new /// $modalInstance.close({availableFnMenuItems:$scope.availableRoleFunctions});
- },
- error : function(data){
- alert("Error while saving.");
- }
- });
-
- };
-
- $scope.cancel = function() {
- console.log("cancel triggered")
- $modalInstance.dismiss();
- };
- }]
- });
-
- modalInstance.result.then(function () {
- $scope.$emit('workflowRemoved');
- }, function () {
- $log.info('Modal dismissed at: ' + new Date());
- });
-
- };
-
-
-
-
-
-
-
-
- $scope.previewWorkflow = function(workflowToPreview,modalSize){
- var modalInstance = $modal.open({
- animation: $scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-preview.html',
- sizeClass: 'modal-medium',
- controller: ['$scope', '$modalInstance', '$http', function ($scope, $modalInstance, $http) {
- $scope.workflowToPreview = workflowToPreview;
- console.log('previewWorkFlow invoked');
- console.log($scope.workflowToPreview);
-
- $scope.cancel = function() {
- $modalInstance.dismiss();
- };
- }]
- });
-
- modalInstance.result.then(function () {
- $scope.$emit('workflowRemoved');
- }, function () {
- $log.info('Modal dismissed at: ' + new Date());
- });
-
- };
-
-
- /* change work flow status based on the boolean variable "suspendBool" which corresponds whether
- * we would like to suspend or activate a workflow specified by key. */
- $scope.changeWorkflowStatus = function(workflowToChangeStatus,suspendBool){
- if (workflowToChangeStatus!==null) {
- var statusUrl= workflowToChangeStatus.runLink+"/engine-rest/process-definition/key/"+workflowToChangeStatus.workflowKey
- var suspendedUrl= statusUrl+"/suspended"
- var xmlHttp = new XMLHttpRequest();
- xmlHttp.open('PUT', suspendedUrl, false);
- xmlHttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
- xmlHttp.onload = function() {
- if (suspendBool) {
- console.log("process definition is now suspended");
- workflowToChangeStatus.active="false"
- } else {
- console.log("process definition is now activated");
- workflowToChangeStatus.active="true"
- }
- };
- xmlHttp.send(JSON.stringify({
- "suspended" : suspendBool,
- "includeProcessInstances" : true,
- "executionDate" : "2013-11-21T10:49:45"
- }));
- }
-
- };
-
- $scope.activateWorkflow = function(workflowToActivate){
- $scope.changeWorkflowStatus(workflowToActivate,false)
-
- };
-
- $scope.suspendWorkflow = function(workflowToActivate){
- $scope.changeWorkflowStatus(workflowToActivate,true)
- };
-
- $scope.checkWorkflowStatus = function(workflow) {
- if (workflow!==null) {
- var statusUrl= workflow.runLink+"/engine-rest/process-definition/key/"+workflow.workflowKey
- var xmlHttp3 = new XMLHttpRequest();
- xmlHttp3.open('GET', statusUrl, true);
- xmlHttp3.withCredentials = true;
- xmlHttp3.send();
- xmlHttp3.onreadystatechange = function() {
- if (xmlHttp3.readyState == 4 && xmlHttp3.status == 200) {
- // do something with the response in the variable data
- var temp = JSON.parse(xmlHttp3.responseText)
- if (temp.suspended == false){
- console.log("Activated")
- workflow.active="true"
- } else {
- console.log("Suspended")
- workflow.active="false"
- }
- }
- }
- }
- };
-
- $scope.StartWorkflowInstance = function(workflowToStart){
- if (workflowToStart!==null) {
- var statusUrl= workflowToStart.runLink+"/engine-rest/process-definition/key/"+workflowToStart.workflowKey
- var suspendedUrl= statusUrl+"/submit-form"
- var xmlHttp = new XMLHttpRequest();
- xmlHttp.open('POST', suspendedUrl, false);
- xmlHttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
- xmlHttp.onload = function() {
- };
- xmlHttp.send(JSON.stringify({
- "variables": {
- "customerId": {"value":"asdasda","type":"String"},
- "amount":{"value":"100","type":"String"}
- }
- }));
- }
-
- };
-
-
- $scope.$on('workflowAdded', function(event, newWorkflow) {
- console.log("New Workflow to be added in list scope " + JSON.stringify(newWorkflow));
- //$scope.workflows.push(newWorkflow);
- $scope.fetchWorkflowsList();
- console.log('newly added workflow = ' + JSON.stringify(newWorkflow));
- });
-
- $scope.$on('workflowRemoved', function(event) {
- $scope.fetchWorkflowsList();
- });
-
- $scope.fetchWorkflowsList();
-
-
-
-});
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowRouting.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowRouting.js
deleted file mode 100644
index f6ffe8f1..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowRouting.js
+++ /dev/null
@@ -1,8 +0,0 @@
-appDS2.config(function($routeProvider) {
- $routeProvider
- .when('/all', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-listing.html',
- controller: 'workflowsControllerDS2'
- })
-});
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/fn-menu-add-popup-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/fn-menu-add-popup-controller.js
deleted file mode 100644
index 2b3663c0..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/fn-menu-add-popup-controller.js
+++ /dev/null
@@ -1,339 +0,0 @@
-var deletefn_menu_popupController = function ($scope,$modal, items,$modalInstance, $http){
- $scope.fnMenuItem=items;
- console.log("fnMenuItems",$scope.fnMenuItem);
- var ModalInstanceCtrl = function ($scope, $modalInstance, items,AdminMenuService,$http,$modal) {
- $scope.fnMenuItem=items;
- $scope.save = function (data) {
- $modalInstance.close(data);
- };
-
- $scope.cancel = function () {
- $modalInstance.dismiss('cancel');
- };
-
- $scope.deleteFun = function(data){
- $modalInstance.close(data);
- }
- };
- $scope.successPopUp = function () {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return '';
- }
- }
- });
- };
- $scope.successModelPopUp = function () {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/success_modalpopup.html',
- controller: ModalInstanceCtrl,
- //sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return '';
- }
- }
- });
- };
- $scope.errorPopUp = function () {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return '';
- }
- }
- });
- };
- $scope.deleteMenuItem= function(fnMenuItem){
- var uuu = "admin_fn_menu/removeMenuItem.htm";
- var postData={fnMenuItem: fnMenuItem};
- $http({
- method :'POST',
- url : uuu,
- dataType: 'json',
- contentType: 'application/json',
- data: JSON.stringify(postData)
-
- }).then(function(data){
- $scope.successPopUp();
- // $scope.$apply(function(){$scope.fnMenuItem=data.data.fnMenuItem;});
- location.reload();
- },function(data){
- $scope.errorPopUp();
- // console.log(data);
- // modalService.showFailure("Fail","Error while deleting: "+ data.responseText);
- });
- }/// examine the LeftMenuService
-}
- var fn_menu_popupController = function ($scope, $modalInstance, message, $http){ /// examine the LeftMenuService
-
- if(message.availableFnMenuItem==null)
- $scope.label='Add New Menu Item'
-
- else{
- $scope.label='Edit Menu Item'
- //$scope.disableParentId=true;
- }
-
- $scope.getParentData = function(){
- var uuu = "admin_fn_menu/get_parent_list"
- $http({
- method : 'GET',
- url : uuu,
- dataType: 'json', // data type expected from server
- contentType: 'application/json',
- //data: JSON.stringify(postData), // data type sent to server
-
- }).then(function(data){
- //$scope.$apply(function(){
- //$scope.availableRoleFunctions=[];$scope.$apply();
- $scope.parentListSelectData=data.data; // data from server
- menuItems = $scope.parentListSelectData;
- var heirarchicalMenuItems = [];
- var children = [];
- for ( var i=0; i<menuItems.length; i++){
- for(var j=0; j<menuItems.length; j++){
- if(menuItems[j][2]==menuItems[i][0])
- children.push(
- {
- menuId: menuItems[j][0],
- label: menuItems[j][1]
- }
- );
- }
- if(children.length!=0){
- heirarchicalMenuItems.push(
- {
-
- menuId: menuItems[i][0],
- label: menuItems[i][1],
- children: children.sort($scope.sortItems("label"))
- }
-
- );
- }
- children = [];
-
- }
- heirarchicalMenuItems.sort($scope.sortItems("label"));
- $scope.childListSelectData = heirarchicalMenuItems;
- //console.log(data);
- //});
- //$scope.editRoleFunction = null;
- ///$modalInstance.close({functionCDselectData:$scope.functionCDselectData});
- },function(data){
- alert("Parent Data not available !");
- });
-
- };
-
- $scope.sortItems = function(prop){
- return function(a, b) {
- if (a[prop] > b[prop]) {
- return 1;
- } else if (a[prop] < b[prop]) {
- return -1;
- }
- return 0;
- }
-
- };
-
- $scope.getParentLabel = function(parentId, parentListSelectData){
- var element;
- element = parentListSelectData[0];
- for (var i=0; i<parentListSelectData.length; i++){
-
- element = parentListSelectData[i];
- if (element[0] == parentId)
- return element[1];
- else "---";
- }
- };
-
-
- $scope.getFunctionCDselectData = function(){
- var uuu = "admin_fn_menu/get_function_cd_list"
- $http({
- method : 'GET',
- url : uuu,
- dataType: 'json', // data type expected from server
- contentType: 'application/json',
- //data: JSON.stringify(postData), // data type sent to server
-
- }).then(function(data){
- //$scope.$apply(function(){
- //$scope.availableRoleFunctions=[];$scope.$apply();
- $scope.functionCDselectData=data.data;
- //});
- //alert("Update Successful.") ;
- //$scope.editRoleFunction = null;
- ///$modalInstance.close({functionCDselectData:$scope.functionCDselectData});
- },function(data){
- alert("Function Code Data not available !");
- });
-
- };
-
- if(message.availableFnMenuItem){
- $scope.addFnMenuItem = message.availableFnMenuItem;
- } else {
- $scope.addFnMenuItem = {};
- }
- $scope.addFnMenuItem.menuSetCode = "APP";
-
- $scope.statusOptions = [
- {index: 0, value: 'true', title: 'Y'},
- {index: 1, value: 'false', title: 'N'}
- ];
- $scope.selectedValue = $scope.statusOptions[0];
-
- $scope.separator = {
- availableOptions:[
- {value: 'true', name: 'Y'},
- {value: 'false', name: 'N'}
- ],
-
- selectedOption: {value: 'true', name: 'Y'}
-
- };
-
-
- $scope.activeStatusOptions = [
- {index: 0, value: 'true', title: 'Y'},
- {index: 1, value: 'false', title: 'N'}
- ];
- $scope.activeSelectedValue = $scope.activeStatusOptions[0];
-
- $scope.separatorStatusOptions = [
- {index: 0, value: 'true', title: 'Y'},
- {index: 1, value: 'false', title: 'N'}
- ];
- $scope.separatorSelectedValue = $scope.separatorStatusOptions[1];
-
- $scope.active = {
- availableOptions:[
- {value: 'true', name: 'Y'},
- {value: 'false', name: 'N'}
- ],
-
- selectedOption: {value: 'true', name: 'Y'}
-
- };
-
-
- $scope.updateFnMenu = function(availableFnMenuItem) {
- // form validation
- if( document.getElementById("popupAddMenuItemImageSrc").value == "" ) availableFnMenuItem.imageSrc = "N/A";
- if( document.getElementById("popupAddMenuItemTarget").value == "" ) availableFnMenuItem.target = "N/A";
- if( document.getElementById("popupAddMenuItemExternalUrl").value == "" ) availableFnMenuItem.externalUrl = "N/A";
- if( document.getElementById("popupAddMenuItemQueryString").value == "" ) availableFnMenuItem.queryString = "N/A";
- if( document.getElementById("popupAddMenuItemServlet").value == "" ) availableFnMenuItem.servlet = "N/A";
-
- validationRule = /^\S{3,}$/;
- var selectedFunction = document.getElementById("repeatSelect");
- var selectedFunctionText = selectedFunction.options[selectedFunction.selectedIndex].text;
- if(
- (document.getElementById("popupAddMenuItemLabel").value == "" || document.getElementById("popupAddMenuItemLabel").value.replace(" ", "").length == 0 ) ||//!validationRule.test(document.getElementById("popupAddMenuItemLabel").value)) ||
- $scope.addFnMenuItem.parentIdAsString == "" ||
- document.getElementById("popupAddMenuItemAction").value == "" ||
- selectedFunctionText == "" ||
- document.getElementById("popupAddMenuItemSortOrder").value == "" ||
- document.getElementById("popupAddMenuItemMenuSetCode").value == ""
- )
- {
- alert("please provide valid entries !");
- }
-
- else{
- var uuu = "admin_fn_menu/updateFnMenu.htm";
- availableFnMenuItem.parentId=parseFloat($scope.addFnMenuItem.parentIdAsString);
- availableFnMenuItem.active=('true'==$scope.addFnMenuItem.activeAsString);
- availableFnMenuItem.separator=('true'==$scope.addFnMenuItem.separatorAsString);
-
-
- var postData={availableFnMenuItem: availableFnMenuItem};
-
- $http({
- method :'POST',
- url : uuu,
- //dataType: 'json', // data type expected from server
- contentType: 'application/json',
- data: JSON.stringify(postData), // data type sent to server
- }).then(function(data){
- //$scope.$apply(function(){
- $scope.availableFnMenuItems=data.availableFnMenuItems;
- //});
-
- $modalInstance.close({availableFnMenuItems:$scope.availableRoleFunctions}),function(data){
- alert("Error while saving.");
- }
- },function(data){
- console.log("Error",data);
- });
- $scope.getLeftMenuItems(); // get left menu items again from database
-
- };
-
- $scope.getLeftMenuItems = function() {
- return $http.get('get_menu')
- .then(function(response) {
- if (typeof response.data === 'object') {
- var leftChildData=[];
- var leftParentData=[];
- var leftMenuItems = [];
- var j = response;
- try{
- if(j && j !== "null" && j!== "undefined"){
- leftParentData = JSON.parse(j.data);
- leftChildData = JSON.parse(j.data2);
- }else{
- throw "Get Left Menu respsone is not an object/is empty";
- }
- try{
- var leftChildItemList = leftChildData;
- var pageUrl = window.location.href.split('/')[window.location.href.split('/').length-1];
- var leftParentList = leftParentData;
- for (var i = 0; i < leftParentList.length; i++) {
- $scope.item = {
- parentLabel : leftParentList[i].label,
- parentAction : leftParentList[i].action,
- parentImageSrc : leftParentList[i].imageSrc,
- open:pageUrl==leftParentList[i].action?true:false,
- childItemList : leftChildItemList[i]==null?'x':leftChildItemList[i]
- }
- leftMenuItems.push($scope.item);
- };
-
- $scope.leftMenuItems = leftMenuItems;
-
- }catch(err){
- console.log("error happened while trying to set left menu structure: "+err);
- }
- }catch (e) {
- console.log("error happened while trying to get left menu items: "+e);
- reloadPageOnce();
- return;
- }
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- };
-
- $scope.close = function() {
- $modalInstance.close();
- };
-}
- } \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/profile-route.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/profile-route.js
deleted file mode 100644
index c82185c0..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/profile-route.js
+++ /dev/null
@@ -1,19 +0,0 @@
-appDS2.config(function($routeProvider) {
- $routeProvider
- .when('/profile/:profileId', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-profile/self_profile.html',
- controller: 'selfProfileController'
- })
- .when('/self_profile', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-profile/self_profile.html',
- controller: 'selfProfileController'
- })
- .when('/post_search', {
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-profile/post.html',
- controller: 'postController'
- })
- .otherwise({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-profile/profile_searchDS2.html',
- controller : "profileSearchCtrlDS2"
- });
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/profile-search-controller-DS2.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/profile-search-controller-DS2.js
deleted file mode 100644
index 5236001f..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/profile-search-controller-DS2.js
+++ /dev/null
@@ -1,93 +0,0 @@
-appDS2.controller('profileSearchCtrlDS2', function($scope, $log, $modal, ProfileServiceDS2){
- $scope.showInput = true;
- $scope.totalPages1 = 0;
- $scope.viewPerPage1 = 8;
- $scope.currentPage1 = 1;
- $scope.showLoader = false;
-
- var debug = false;
-
- $scope.$watch('viewPerPage1', function(val) {
- $scope.showLoader = true;
- ProfileServiceDS2.getProfilePagination($scope.currentPage1, val).then(function(data){
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.tableData =JSON.parse($scope.data.profileList);
- $scope.totalPages1 =JSON.parse($scope.data.totalPage);
- $scope.showLoader = false;
- },function(error){
- console.log("watch of viewPerPage1 failed");
- reloadPageOnce();
- });
-
- });
-
- $scope.customHandler = function(num) {
- $scope.currentPage1 = num;
- $scope.showLoader = true;
- ProfileServiceDS2.getProfilePagination($scope.currentPage1,$scope.viewPerPage1).then(function(data){
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.tableData =JSON.parse($scope.data.profileList);
- $scope.totalPages1 =JSON.parse($scope.data.totalPage);
- $scope.showLoader = false;
- },function(error){
- console.log("customHandler failed");
- reloadPageOnce();
- });
-
- };
-
- $scope.editRow = function(profileId){
- window.location = 'userProfile#/profile/' + profileId;
- };
-
- var ModalInstanceCtrl = function ($scope, $log, $modalInstance, items) {
- $scope.msg = items;
-
- $scope.toggleUserStatus = function(id) {
- if (debug)
- $log.debug('profileSearchCtrlDS2:ModalInstanceCtrl:toggleUserStatus: data is ' + id);
- ProfileServiceDS2.toggleProfileStatus(id);
- $modalInstance.close();
- };
-
- $scope.cancelUserStatusToggle = function(rowData) {
- if (debug)
- $log.debug('profileSearchCtrlDS2:ModalInstanceCtrl: cancelUserStatusToggle: data is ' + JSON.stringify(rowData));
- // Undo the toggle of the checkbox
- rowData.active = ! rowData.active;
- $modalInstance.dismiss('cancel');
- }
-
- }
-
- // user activation/deactivation
- $scope.toggleProfileActive = function(rowData) {
- if (debug)
- $log.debug('profileSearchCtrlDS2:toggleProfileActive: id is ' + rowData.id
- + ', active is ' + rowData.active);
- var toggleType = null;
- // The checkbox is already in the desired state,
- // so the sense of the "if" is reversed here.
- if (rowData.active)
- toggleType = "activate";
- else
- toggleType = "deactivate";
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-profile/modals/profile-confirm-toggle.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- var message = {
- text : toggleType,
- rowData : rowData
- };
- return message;
- }
- }
- });
- };
-
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/sampleProfileController.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/sampleProfileController.js
deleted file mode 100644
index 0f02e46f..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/sampleProfileController.js
+++ /dev/null
@@ -1,22 +0,0 @@
-appDS2.config(function($routeProvider) {
- $routeProvider
- .when('/profile/:profileId', {
- templateUrl: 'app/fusion/scripts/view-models/profile-page/profile_detail.html',
- controller: 'profileController'
- })
- .when('/post_search', {
- templateUrl: 'app/fusion/scripts/view-models/profile-page/post_search.html',
- controller: 'postSearchCtrl'
- })
- .when('/ase', {
- templateUrl: 'app/fusion/ase/index.html'
- })
- .when('/self_profile', {
- templateUrl: 'app/fusion/scripts/view-models/profile-page/self_profile.html',
- controller: 'selfProfileController'
- })
- .otherwise({
- templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-profile-page/profile_searchDS2.html',
- controller : "profileSearchCtrlDS2"
- });
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/usage-list-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/usage-list-controller.js
deleted file mode 100644
index ab229714..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/usage-list-controller.js
+++ /dev/null
@@ -1,39 +0,0 @@
-appDS2.controller('usageListControllerDS2', function ($scope,$interval,$http,$modal, AdminService){
- AdminService.getUsageList().then(function(data){
-
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.users =$scope.data;
- //$scope.resetMenu();
-
- },function(error){
- console.log("failed");
- reloadPageOnce();
- });
-
- $scope.successPopUp = function () {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return '';
- }
- }
- });
- };
-
- $scope.removeSession = function(sessionId) {
-
- $http.get("usage_list/removeSession?deleteSessionId="+sessionId).success(function(response){
- $scope.users=response;
- $scope.successPopUp();
- });
-/* modalService.popupConfirmWin("Confirm","You are about to expel this user from the application. All of their unsaved data will be lost. Do you want to continue?",
- function(){
- $http.get("usage_list/removeSession?deleteSessionId="+sessionId).success(function(response){$scope.users=response;});
- })*/
-
- }
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/welcome-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/welcome-controller.js
deleted file mode 100644
index b2b3a43b..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/welcome-controller.js
+++ /dev/null
@@ -1,408 +0,0 @@
-appDS2
- .directive(
- 'integer',
- function() {
- return {
- require : 'ngModel',
- link : function(scope, ele, attr, ctrl) {
- ctrl.$parsers.unshift(function(viewValue) {
- if (viewValue === '' || viewValue === null
- || typeof viewValue === 'undefined') {
- return null;
- }
- return parseInt(viewValue, 10);
- });
- }
- };
- })
-
- .controller(
- 'welcomeController',
- function($scope, $interval, $http, $modal, $log, ManifestService) {
-
- $scope.testMsg = "Welcome Page1";
- $scope.gridsterOpts = {
- columns : 6, // the width of the grid, in columns
- pushing : true, // whether to push other items out of
- // the way on move or resize
- floating : true, // whether to automatically float
- // items up so they stack (you can
- // temporarily disable if you are
- // adding unsorted items with
- // ng-repeat)
- width : 'auto', // can be an integer or 'auto'. 'auto'
- // scales gridster to be the full width
- // of its containing element
- colWidth : 'auto', // can be an integer or 'auto'.
- // 'auto' uses the pixel width of
- // the element divided by 'columns'
- rowHeight : 60, // can be an integer or 'match'. Match
- // uses the colWidth, giving you square
- // widgets.
- margins : [ 10, 10 ], // the pixel distance between
- // each widget
- outerMargin : true, // whether margins apply to outer
- // edges of the grid
- swapping : true,
- draggable : {
- enabled : true, // whether dragging items is
- // supported
- stop : function(event, uiWidget, $element) {
- $scope.setCookie();
- } // optional callback fired when item is finished
- // dragging
- }
-
- };
-
- /*
- * $scope.gridsterOpts = { columns: 6, width: 'auto',
- * colWidth: '230', rowHeight: '120', margins: [10, 10],
- * outerMargin: true, pushing: true, floating: true,
- * swapping: true };
- */
-
- $scope.toggleMinMax = function(index, tileName) {
- if (tileName == '') {
- $scope.standardItems[index].max = !$scope.standardItems[index].max;
- if ($scope.standardItems[index].max)
- $scope.standardItems[index].sizeY = $scope.standardItems[index].maxHeight;
- else
- $scope.standardItems[index].sizeY = 0;
- } else {
- $scope.tileTemp = $scope.$eval(tileName);
- var tileMax = $parse(tileName + '.max');
- tileMax.assign($scope, !$scope.$eval(tileName).max);
- var tileSizeY = $parse(tileName + '.sizeY');
- if ($scope.tileTemp.max)
- tileSizeY.assign($scope,
- $scope.tileTemp.maxHeight);
- else
- tileSizeY.assign($scope, 0);
- }
- };
-
- // These map directly to gridsterItem options
- // IMPORTANT: Items should be placed in the grid in the
- // order in which
- // they should appear.
- // In most cases the sorting should be by row ASC, col ASC
- $scope.standardItems = [
- {
- sizeX : 2,
- sizeY : 8,
- maxHeight : 8,
- row : 0,
- col : 0,
- headerText : 'Dashboard',
- max : false
-
- },
- {
- sizeX : 2,
- sizeY : 5,
- maxHeight : 5,
- row : 0,
- col : 2,
- headerText : 'Donut Chart',
- max : false
-
- },/*
- * { sizeX : 1, sizeY : 5, maxHeight : 5, row :
- * 0, col : 2, headerText : 'Area Chart', max :
- * false },
- */
- {
- sizeX : 2,
- sizeY : 5,
- maxHeight : 5,
- row : 8,
- col : 0,
- headerText : 'Pie Chart',
- max : false
- },
- /*
- * { sizeX : 1, sizeY : 5, maxHeight : 5, row : 8,
- * col : 1, headerText : 'Line Chart', max : false },
- */
- {
- sizeX : 2,
- sizeY : 5,
- maxHeight : 5,
- row : 8,
- col : 4,
- headerText : 'Gauges',
- max : false
- },
- {
- sizeX : 2,
- sizeY : 8,
- maxHeight : 8,
- row : 16,
- col : 0,
- headerText : 'Traffic distribution by day of week',
- max : false
- },
- {
- sizeX : 2,
- sizeY : 8,
- maxHeight : 8,
- row : 16,
- col : 2,
- headerText : 'Busy hour traffic analysis by day of week',
- max : false
- }, {
- sizeX : 2,
- sizeY : 6,
- maxHeight : 7,
- row : 24,
- col : 4,
- headerText : 'Additional Samples',
- max : false
- }, {
- sizeX : 2,
- sizeY : 8,
- maxHeight : 8,
- row : 24,
- col : 2,
- headerText : 'Sticky Notes',
- max : false
- }, {
- sizeX : 6,
- sizeY : 10,
- maxHeight : 10,
- row : 32,
- col : 0,
- headerText : 'Service Configuration',
- max : false
- } ];
-
- /*
- * $.each($scope.standardItems, function(i, a) {
- * $scope.toggleMinMax(i, ''); });
- */
- var counter = 0;
- angular.forEach($scope.standardItems, function(i, a) {
- $scope.toggleMinMax(counter, '');
- counter = counter + 1;
- });
-
- $scope.activeTabId = 'Monday';
- // for generic tabs
-
- $scope.selectedTrafficDay = [ {
- title : 'Mon',
- url : '#Monday'
- }, {
- title : 'Tue',
- url : '#Tuesday'
- }, {
- title : 'Wed',
- url : '#Wednesday'
- }, {
- title : 'Thu',
- url : '#Thursday'
- }, {
- title : 'Fri',
- url : '#Friday'
- }, {
- title : 'Sat',
- url : '#Saturday'
- }, {
- title : 'Sun',
- url : '#Sunday'
- } ];
-
- $scope.currentSelectedDayTab = '#Monday';
-
- $scope.onClickTab1 = function(Daytab) {
- $scope.currentSelectedDayTab = Daytab.url;
- }
-
- $scope.isActiveTab1 = function(tabUrl) {
- return tabUrl == $scope.currentSelectedDayTab;
- }
-
- $scope.gTabs = [ {
- title : 'Monday',
- id : 'Monday',
- url : '#Monday',
- selected : true
- }, {
- title : 'Tuesday',
- id : 'Tuesday',
- url : '#Tuesday'
- }, {
- title : 'Wednesday',
- id : 'Wednesday',
- url : '#Wednesday'
- }, {
- title : 'Thursday',
- id : 'Thursday',
- url : '#Thursday'
- }, {
- title : 'Friday',
- id : 'Friday',
- url : '#Friday'
- }, {
- title : 'Saturday',
- id : 'Saturday',
- url : '#Saturday'
- }, {
- title : 'Sunday',
- id : 'Sunday',
- url : '#Sunday'
- } ];
-
- $scope.BusyHourTraffic = [ {
- title : 'BH SNRC DLSTX - Incoming',
- url : '#Incoming'
- }, {
- title : 'BH SNRC DLSTX - Outgoing',
- url : '#Outgoing'
- }, {
- title : 'BH National - Default',
- url : '#Default'
- }, {
- title : 'BH National - Priority',
- url : '#Priority'
- }, {
- title : 'BH National',
- url : '#BHNational'
- }
-
- ];
-
- $scope.currentSelectedBusyHourTraffic = '#Incoming';
-
- $scope.onClickTab2 = function(TrafficTab) {
- $scope.currentSelectedBusyHourTraffic = TrafficTab.url;
- }
-
- $scope.isActiveTab2 = function(tabUrl) {
- return tabUrl == $scope.currentSelectedBusyHourTraffic;
- }
-
- $scope.activeTabId2 = 'Incoming';
- // for generic tabs
- $scope.gTabs2 = [ {
- title : 'BH SNRC DLSTX - Incoming',
- id : 'Incoming',
- url : '#Incoming',
- selected : true
- }, {
- title : 'BH SNRC DLSTX - Outgoing',
- id : 'Outgoing',
- url : '#Outgoing'
- }, {
- title : 'BH National - Default',
- id : 'Default',
- url : '#Default'
- }, {
- title : 'BH National - Priority',
- id : 'Priority',
- url : '#Priority'
- }, {
- title : 'BH National',
- id : 'BHNational',
- url : '#BHNational'
- } ];
-
- $scope.activeTabId3 = 'Incoming';
- // for generic tabs
- $scope.gTabs3 = [ {
- title : 'BH SNRC DLSTX - Incoming',
- id : 'Incoming',
- url : '#Incoming',
- selected : true
- }, {
- title : 'BH SNRC DLSTX - Outgoing',
- id : 'Outgoing',
- url : '#Outgoing'
- }, {
- title : 'BH National - Default',
- id : 'Default',
- url : '#Default'
- }, {
- title : 'BH National - Priority',
- id : 'Priority',
- url : '#Priority'
- }, {
- title : 'BH National',
- id : 'BHNational',
- url : '#BHNational'
- } ];
-
- /*
- * $scope.$watch('activeTabId', function(newVal) {
- * alert(newval); $('#'+newval).show(); }, true);
- */
-
- $scope.toggleEastToWest = function() {
- $("#toggle").toggle('slide');
- if ($("#leftIcon").is(":visible")) {
- $("#rightIcon").show();
- $("#leftIcon").hide();
- } else if ($("#rightIcon").is(":visible")) {
- $("#rightIcon").hide();
- $("#leftIcon").show();
- }
- };
-
- $scope.group1 = {
- open : true
- };
- $scope.group2 = {
- open : true
- };
- $scope.group3 = {
- open : true
- };
- $scope.group4 = {
- open : true
- };
- $scope.group5 = {
- open : true
- };
- $scope.group6 = {
- open : true
- };
- $scope.group7 = {
- open : true
- };
- $scope.group71 = {
- open : true
- };
- $scope.group8 = {
- open : true
- };
- $scope.group9 = {
- open : true
- };
- $scope.group10 = {
- open : true
- };
- $scope.group11 = {
- open : true
- };
- $scope.group12 = {
- open : false
- };
-
- // Fetch manifest info
- $scope.manifest = {};
- ManifestService.getManifest()
- .then(function(jsonObj) {
- // $log.debug("welcome-controller: getManifest returned " + JSON.stringify(jsonObj));
- if (jsonObj.error) {
- $log.error('welcome-controller: failed to get manifest: ' + JSON.stringify(jsonObj));
- }
- else {
- $scope.manifest=jsonObj;
- }
- },function(error){
- $log.error("welcome-controller: getManifest failed: " + error);
- });
-
-
- });
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/welcome-route.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/welcome-route.js
deleted file mode 100644
index 8f4b1fdb..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/welcome-route.js
+++ /dev/null
@@ -1,7 +0,0 @@
-appDS2.config(function($routeProvider) {
- $routeProvider
- .otherwise({
- templateUrl: 'app/fusion/scripts/DS2-view-models/welcome-content.html',
- controller : "welcomeController"
- });
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js
deleted file mode 100644
index 64da0a49..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js
+++ /dev/null
@@ -1,64 +0,0 @@
-appDS2.directive('leftMenuEcomp', function () {
- /*
- * Custom version of b2b-left-navigation directive:
- * 1. Make parent menu a link if no child menus.
- * 2. Add unique IDs to all items.
- * 3. Hide icon if no child menus.
- * 4. Arrow toggle button.
- * 5. Adjust the page on collapse/expand.
- */
- return {
- restrict: 'EA',
- templateUrl: 'app/fusion/scripts/DS2-view-models/b2b-leftnav-ext.html',
- scope: {
- menuData: '='
- },
- link: function (scope, element, attrs, ctrl) {
- scope.idx = -1;
- scope.itemIdx = -1;
- scope.navIdx = -1;
- /*assuming menu is expanded when page loads*/
- scope.showmenu=true;
- scope.leftMenuClass= "";
- scope.leftMenuArrowClass="leftmenu-arrow-expand";
- scope.toggleNav = function (val,link,menuStatus) {
-
- if(!menuStatus){
- scope.toggleDrawer(menuStatus);
- return;
- }
- if(link!=null && link!=''){
- location.href = link;
- return;
- }
- if (val === scope.idx) {
- scope.idx = -1;
- return;
- }
- scope.idx = val;
- };
- scope.toggleDrawer = function(menuStatus){
- scope.idx=-1; /*hide the sub menus*/
- if(menuStatus){
- //Collapse Menu
- scope.showmenu=false;
- scope.leftMenuClass = "left-menu-collapsed";
- scope.leftMenuArrowClass="leftmenu-arrow-collapse";
- document.getElementById('page-content').style.marginLeft = "50px";
- }else{
- //Expand Menu
- scope.showmenu=true;
- scope.leftMenuClass = "";
- scope.leftMenuArrowClass="leftmenu-arrow-expand";
- document.getElementById('page-content').style.marginLeft = "250px";
- }
-
- };
- scope.liveLink = function (evt, val1, val2) {
- scope.itemIdx = val1;
- scope.navIdx = val2;
- evt.stopPropagation();
- };
- }
- };
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/ds2Header.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/ds2Header.js
deleted file mode 100644
index f9f39927..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/ds2Header.js
+++ /dev/null
@@ -1,118 +0,0 @@
-appDS2.directive('ds2Header', function () {
- return {
- restrict: 'A', //This menas that it will be used as an attribute and NOT as an element. I don't like creating custom HTML elements
- replace: false,
- templateUrl: "app/fusion/scripts/DS2-view-models/ds2Header.html",
- controller: ['$scope', '$filter','$http','$timeout', '$log','UserInfoServiceDS2', 'HeaderServiceDS2', '$window', '$cookies','$cookieStore', function ($scope, $filter, $http, $timeout, $log,UserInfoServiceDS2,HeaderServiceDS2, $window, $cookies,$cookieStore) {
- // copy from existing DS1
-
- /*Define fields*/
- $scope.userName;
- $scope.userFirstName;
- $scope.userId;
- $scope.userEmail;
- $scope.redirectUrl;
- $scope.contactUsUrl;
- $scope.getAccessUrl;
- $scope.menuItems = [];
- $scope.isAppCentralized;
- $scope.showHeader = ($cookieStore.get("show_app_header") == undefined ? true : $cookies.get("show_app_header") );
-
-
- /***************functions**************/
- /*getting user info from session*/
- $scope.getUserNameFromSession = function(){
- UserInfoServiceDS2.getFunctionalMenuStaticDetailSession()
- .then(function (res) {
- $scope.contactUsUrl=res.contactUsLink;
- $scope.userName = res.userName;
- $scope.userId = res.userid;
- $scope.userEmail = res.email;
- $scope.userFirstName = res.firstName;
- $scope.redirectUrl = res.portalUrl;
- $scope.getAccessUrl = res.getAccessUrl;
- $scope.isAppCentralized = res.isAppCentralized;
- });
- }
-
- $scope.returnToPortal=function(){
- window.location.href = $scope.redirectUrl;
- }
-
- /*Menu Structure*/
- var menuStructureConvert = function(menuItems) {
- $scope.megaMenuDataObjectTemp =
- [{
- text: "Manage",
- children: menuItems
- },
- {
- text: "Support",
- children: [
- {
- label:"Contact Us",
- action:$scope.contactUsUrl,
- childMenus:[]
- },
- {
- label:"Get Access",
- action:$scope.getAccessUrl,
- childMenus:[]
- }]
- }];
- return $scope.megaMenuDataObjectTemp;
- };
-
- $scope.getMenu=function() {
- $scope.getUserNameFromSession();
- var promise = HeaderServiceDS2.getMenu();
- promise.then(
- function(res) {
- if(res==null || res==''){
- $log.error('failed to get menu');
- $scope.getUserNameFromSession();
- }else{
- $scope.parentMenu = JSON.parse(res.data);
- $scope.childMenu = JSON.parse(res.data2);
- for(var i=0; i<$scope.parentMenu.length;i++){
- $scope.parentMenu[i].childMenus = ($scope.childMenu[i]);
- }
- $scope.menuItems = menuStructureConvert($scope.parentMenu);
- }
- },
- function(err) {
- $log.error('getMenu failed', err);
- }
- );
- }
-
-
-
- $scope.adjustHeader=function() {
- $scope.showHeader = ($cookies.get("show_app_header") == undefined ? true : $cookies.get("show_app_header"));
- // console.log($scope.showHeader);
- if ($scope.showHeader==true) {
- document.getElementById('page-content').style.marginTop = "45px";
- }else{
- document.getElementById('page-content').style.marginTop = "0px";
- }
- }; // adjustHeader
- $scope.$on('$routeChangeSuccess', function () {
- $scope.adjustHeader();
- });
-
- $scope.getUserNameFromSession();
- $scope.getMenu();
- }]
- }
-});
-
-appDS2.filter("ellipsis", function(){
- return function(text, length){
- if (text) {
- var ellipsis = text.length > length ? "..." : "";
- return text.slice(0, length) + ellipsis;
- };
- return text;
- }
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/ds2LeftMenu.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/ds2LeftMenu.js
deleted file mode 100644
index 758add6e..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/ds2LeftMenu.js
+++ /dev/null
@@ -1,73 +0,0 @@
-appDS2.directive('ds2Menu', function () {
- return {
- restrict: 'A', //This means that it will be used as an attribute and NOT as an element. I don't like creating custom HTML elements
- replace: false,
- templateUrl: "app/fusion/scripts/DS2-view-models/ds2Left_menu.html",
- controller: ['$scope','$filter','$http','$timeout','$cookies','LeftMenuServiceDS2', function ($scope, $filter, $http, $timeout, $cookies, LeftMenuServiceDS2) {
- $scope.menuData = [];
- $scope.leftChildData = [];
- $scope.leftParentData = [];
- $scope.leftMenuItems = [];
- $scope.app_name = "";
- $scope.app_name_full = "";
- LeftMenuServiceDS2.getLeftMenu().then(function(response){
- var j = response;
- if (j && j !== "null" && j !== "undefined"){
- $scope.leftParentData = JSON.parse(j.data);
- $scope.leftChildData = JSON.parse(j.data2);
- } else {
- console.log("ds2Menu::controller: unexpected getLeftMenu response");
- return;
- }
- var leftParentList = $scope.leftParentData;
- var leftChildItemList = $scope.leftChildData;
- for (var i = 0; i < leftParentList.length; i++) {
- var parentItem = {};
- parentItem.name = leftParentList[i].label;
- parentItem.imageSrc = leftParentList[i].imageSrc;
- // Add link to items with no subitems
- if (leftChildItemList[i].length == 0)
- parentItem.href = leftParentList[i].action;
- parentItem.menuItems = [];
- for (var j = 0; j < leftChildItemList[i].length; j++) {
- if (leftChildItemList[i][j].label != null && leftChildItemList[i][j].label.length > 0) {
- var childItem = {};
- childItem.name = leftChildItemList[i][j].label;
- childItem.href = leftChildItemList[i][j].action;
- parentItem.menuItems.push(childItem)
- }
- }
- $scope.menuData.push(parentItem);
- }
- },function(error){
- console.log("ds2Menu::controller: getLeftMenu failed", error);
- });
-
- LeftMenuServiceDS2.getAppName().then(function(response){
- var j = response;
- try {
- if (j && j !== "null" && j!== "undefined"){
- $scope.app_name_full = j.data;
- var processed_app_name = j.data;
- var n = processed_app_name.length;
- if (n > 15) {
- n = 15;
- }
- $scope.app_name = processed_app_name.substr(0, n);
- } else {
- throw "Get app_name respsone is not an object/is empty";
- }
- } catch (e) {
- console.log("error happened while trying to get app name "+e);
- return;
- }
- },function(error){
- console.log("error happened while calling getAppName "+error);
- });
-
- $scope.drawerOpen = true;
-
-
- }]
- }
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/footer.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/footer.js
deleted file mode 100644
index 34eaab9d..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/footer.js
+++ /dev/null
@@ -1,27 +0,0 @@
-appDS2.directive('ds2Footer', function () {
- return {
- restrict: 'A', //This means that it will be used as an attribute and NOT as an element. I don't like creating custom HTML elements
- replace: false,
- templateUrl: "app/fusion/scripts/DS2-view-models/footer.html",
- controller: ['$scope', '$filter','ManifestService', function ($scope, $filter,ManifestService) {
- $scope.build_number = '';
- ManifestService.getManifest().then(function(response){
- $scope.build_number=response['Build-Number'];
- });
- }]
- }
-});
-
-/*Analytics for all the pages*/
-$(function() {
- portalHook();
- function portalHook() {
- var script = document.createElement('script');
- script.src = "api/v3/analytics"
- script.async = true;
- script.onload = function() {
- runAnalytics(); //runAnaltics() has endpoint in epsdk-fw library.
- }
- document.head.appendChild(script);
- }
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/error_modal.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/error_modal.html
deleted file mode 100644
index 895abaf9..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/error_modal.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope in">
- <h2 id="myModalLabel" modal-title="">Error!</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content">
- <p style="word-wrap: break-word;">{{msg}}</p>
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button"
- ng-click="$dismiss('cancel')">OK</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modal.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modal.html
deleted file mode 100644
index 2584216c..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modal.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope in">
- <h2 id="myModalLabel" modal-title="">Success!</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 40px;">
- Your change has been saved! {{msg.text}}
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button"
- ng-click="$dismiss('cancel')">OK</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modalpopup.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modalpopup.html
deleted file mode 100644
index e0a168ab..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modalpopup.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<div style="overflow-y:auto">
- <div class="b2b-modal-header ng-scope in">
- <h2 id="myModalLabel" modal-title="">Success!</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 600px;overflow-y: auto;">
- <pre> {{msg.text}}</pre>
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-medium" type="button"
- ng-click="$dismiss('cancel')">OK</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminMenuService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminMenuService.js
deleted file mode 100644
index 86bf5cd4..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminMenuService.js
+++ /dev/null
@@ -1,129 +0,0 @@
-appDS2.factory('AdminMenuService', function ($http, $q) {
- return {
- getRoleFunctionList: function() {
- return $http.get('get_role_functions')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
-getFnMenuItems: function(){
-
- return $http.get('admin_fn_menu')
- .then(function(response) {
- if (typeof response.data === 'object') {
-
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
- getCollaborateList: function() {
- return $http.get('get_collaborate_list')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-/* saveRoleFunctionList: function(roleData) {
- return $http.post('role_function_list/saveRoleFunction',{
- roleData
- })
- .then(function(response) {
- console.log(response);
- if (response.status == 200) {
- return response.data;
- } else {
- console.log('eror');
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }*/
- saveRoleFunctionList: function(roleData) {
- return $http({
- method: "POST",
- url: "role_function_list/saveRoleFunction",
- data:roleData
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- delRoleFunctionList: function(roleData) {
- return $http({
- method: "POST",
- url: "role_function_list/removeRoleFunction",
- data:roleData
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- clearAdminRegions: function() {
- return $http({
- method: "GET",
- url: "jcs_admin/clearAll",
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }
-
-
-
- };
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminService.js
deleted file mode 100644
index 105f0202..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminService.js
+++ /dev/null
@@ -1,453 +0,0 @@
-appDS2.factory('AdminService', function ($http, $q) {
- return {
- getRole: function(roleId) {
- return $http.get('get_role?role_id=' + roleId)
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
- getCollaborateList: function() {
- return $http.get('get_collaborate_list')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getCacheRegions: function() {
- return $http.get('get_regions')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getUsageList: function() {
- return $http.get('get_usage_list')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
-getFnMenuItems: function(){
-
- return $http.get('admin_fn_menu')
- .then(function(response) {
- if (typeof response.data === 'object') {
-
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
-/* saveRoleFunctionList: function(roleData) {
- return $http.post('role_function_list/saveRoleFunction',{
- roleData
- })
- .then(function(response) {
- console.log(response);
- if (response.status == 200) {
- return response.data;
- } else {
- console.log('eror');
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }*/
-
- getRoleFunctionList: function() {
- return $http.get('get_role_functions')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
- saveRoleFunctionList: function(roleData) {
- return $http({
- method: "POST",
- url: "role_function_list/saveRoleFunction",
- data:roleData
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
- addRoleFunctionList: function(roleData) {
- return $http({
- method: "POST",
- url: "role_function_list/addRoleFunction",
- data:roleData
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
- delRoleFunctionList: function(roleData) {
- return $http({
- method: "POST",
- url: "role_function_list/removeRoleFunction",
- data:roleData
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
- clearAdminRegions: function() {
- return $http({
- method: "GET",
- url: "jcs_admin/clearAll"
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- showRegionDetails: function(cacheName) {
- return $http({
- method: "GET",
- url: "jcs_admin/showRegionDetails?cacheName="+cacheName,
- contentType: 'application/json',
- }).then(function(response) {
- //var parsed = JSON.stringify(response);
- var responseData = JSON.stringify(response);
- if (response.status == 200) {
- return response;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- console.log('response'+response);
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- clearRegionFunction: function(cacheName) {
- return $http({
- method: "GET",
- url: "jcs_admin/clearRegion?cacheName="+cacheName
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- clearItemnFunction: function(cacheName, key) {
- return $http({
- method: "GET",
- url: "jcs_admin/clearItem?keyName="+key+"&cacheName="+cacheName
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- showItemDetails: function(cacheName, key) {
- return $http({
- method: "GET",
- url: "jcs_admin/showItemDetails?keyName="+key+"&cacheName="+cacheName
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- //role deletion
- delRoleList: function(roleData) {
- return $http({
- method: "POST",
- url: "role_list/removeRole",
- data:JSON.stringify({role:roleData})
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- // activate role
- activateRole: function(selected,availableRole){
- return $http({
- method: "POST",
- url: "role_list/toggleRole",
- data:JSON.stringify({role:availableRole})
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- // save Role
- saveRole: function(role,roleId){
- return $http({
- method: "POST",
- url: "role/saveRole.htm?role_id="+roleId,
- data:JSON.stringify(role)
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- // activate RoleFun Remove
- confirmRoleFunRemove: function(selected,availableRole,id){
- return $http({
- method: "POST",
- url: "role/removeRoleFunction.htm?role_id=" + id,
- data:JSON.stringify({roleFunction:availableRole})
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- // activate RoleFun Add
- confirmRoleFunAdd: function(selected,availableRole,id){
- return $http({
- method: "POST",
- url: "role/addRoleFunction.htm?role_id=" + id,
- data:JSON.stringify({roleFunction:availableRole})
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- // activate RoleChild Remove
- confirmRoleChildRemove: function(selected,availableRole,id){
- return $http({
- method: "POST",
- url: "role/removeChildRole.htm?role_id=" + id,
- data:JSON.stringify({roleFunction:availableRole})
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- // activate RoleChild Add
- confirmRoleChildAdd: function(selected,availableRole,id){
- return $http({
- method: "POST",
- url: "role/addChildRole.htm?role_id=" + id,
- data:JSON.stringify({roleFunction:availableRole})
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- //Role Function delete for associated role on Edit Role
- removeRoleFunction: function(roleFunction,roleId){
- return $http({
- method: "POST",
- url: "role/removeRoleFunction.htm?role_id=" + roleId,
- data:JSON.stringify({roleFunction:roleFunction})
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }
-
-/* toggleProfileActiveFunction: function(profileId) {
- return $http({
- method: "GET",
- url: "jcs_admin/clearRegion?cacheName="+cacheName
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }*/
- };
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-modal/modalService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-modal/modalService.js
deleted file mode 100644
index 061d1ba2..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-modal/modalService.js
+++ /dev/null
@@ -1,38 +0,0 @@
-angular.module("modalServices",[]).service('modalService', ['$modal', function ($modal) {
- var ModalInstanceCtrl = function ($scope, $modalInstance, items,$rootScope) {
- $scope.roleFun=items;
- $scope.msg=items;
-
- $scope.cancel = function () {
- $modalInstance.dismiss('cancel');
- };
- };
- this.errorPopUp = function (msg) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- return msg;
- }
- }
- });
- };
- this.successPopUp = function (msg) {
- var modalInstance = $modal.open({
- templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html',
- controller: ModalInstanceCtrl,
- sizeClass: 'modal-small',
- resolve: {
- items: function () {
- var message = {
- title: '',
- text: msg
- };
- return message;
- }
- }
- });
- };
- }]); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-profile/selfProfileService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-profile/selfProfileService.js
deleted file mode 100644
index bc18f2c8..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-profile/selfProfileService.js
+++ /dev/null
@@ -1,114 +0,0 @@
-appDS2.factory('SelfProfileService', function ($http, $q) {
- return {
- getProfileDetail: function(profileId) {
- return $http({
- method: "GET",
- url: "get_profile?profile_id=" + profileId,
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getSelfProfileDetail: function() {
- return $http.get('get_self_profile')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- addRole: function(roleData,profileId) {
- return $http({
- method: "POST",
- url: "profile/addNewRole?profile_id=" + profileId,
- data:roleData
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
- deRole: function(roleData,profileId) {
- return $http({
- method: "POST",
- url: "profile/removeRole?profile_id=" + profileId,
- data:roleData
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
- saveProfile: function(data,profileId) {
- return $http({
- method: "POST",
- url: "profile/saveProfile?profile_id=" + profileId,
- data:data
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
- removeRole: function(data,profileId) {
- return $http({
- method: "POST",
- url: "profile/removeRole?profile_id=" + profileId,
- data:data
-
- }).then(function(response) {
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }
- };
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/raptorReportFactory.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/raptorReportFactory.js
deleted file mode 100644
index 37845a60..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/raptorReportFactory.js
+++ /dev/null
@@ -1,674 +0,0 @@
-appDS2.factory('raptorReportFactory', function($http, $q) {
- return {
- getDefinitionByReportId: function(reportId) {
- return $http({
- method: "GET",
- url: "report/wizard/retrieve_def_tab_wise_data/"+reportId,
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getDefinitionByReportId did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getDefinitionByReportId callback failed");
- });
- },
- getDefinitionByReportId: function(reportId) {
- return $http({
- method: "GET",
- url: "report/wizard/retrieve_def_tab_wise_data/"+reportId,
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getDefinitionByReportId did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getDefinitionByReportId callback failed");
- });
- },
- getDefinitionInSession: function() {
- return $http({
- method: "GET",
- url: "report/wizard/retrieve_def_tab_wise_data/InSession",
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getDefinitionInSession did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getDefinitionInSession callback failed");
- });
- },
-
- createNewDefinition: function() {
- return $http({
- method: "GET",
- url: "report/wizard/retrieve_def_tab_wise_data/Create",
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: createNewDefinition did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: createNewDefinition callback failed");
- });
- },
- updateDefinition: function(updatedJson,isUpdate) {
- return $http({
- method: "POST",
- url: (isUpdate?("report/wizard/save_def_tab_data/"+updatedJson.reportId):"report/wizard/save_def_tab_data/Create"),
- data: updatedJson
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: updateDefinition did not return a valid JSON object.");
- }
- return response.data;
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: updateDefinition callback failed");
- });
- },
- saveNewDefinition: function(updatedJson) {
- return $http({
- method: "POST",
- url: "report/wizard/save_def_tab_data/InSession",
- data: updatedJson
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: saveNewDefinition did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: saveNewDefinition callback failed");
- });
- },
- getSqlInSession: function() {
- return $http({
- method: "GET",
- url: "report/wizard/retrieve_sql_tab_wise_data/InSession",
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getSqlInSession did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getSqlInSession callback failed");
- });
- },
- testRunSQL: function(queryJSON) {
- return $http({
- method: "POST",
- url: "report/wizard/retrieve_data/true",
- data: queryJSON
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return JSON.parse(response.data.data.elements);
- } else {
- return $q.reject("raptorReportFactory: testRunSQL did not return a valid JSON object.");
- }
- return response.data;
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: testRunSQL callback failed");
- });
- },
- formFieldVerifySQL: function(queryJSON) {
- return $http({
- method: "POST",
- url: "report/wizard/retrieve_data/false",
- data: queryJSON
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return JSON.parse(response.data.data.elements);
- } else {
- return $q.reject("raptorReportFactory: formFieldVerifySQL did not return a valid JSON object.");
- }
- return response.data;
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: formFieldVerifySQL callback failed");
- });
- },
- getColumnList: function() {
- return $http({
- method: "GET",
- url: "report/wizard/list_columns",
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getColumnList did not return a valid JSON object.");
- }
- return response.data;
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getColumnList callback failed");
- });
- },
- getDrillDownReportList: function() {
- return $http({
- method: "GET",
- url: "report/wizard/list_drilldown_reports",
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getDrillDownReportList did not return a valid JSON object.");
- }
- return response.data;
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getDrillDownReportList callback failed");
- });
- },
- getTotalColList: function() {
- return $http({
- method: "GET",
- url: "report/wizard/list_drilldown_reports",
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getDrillDownReportList did not return a valid JSON object.");
- }
- return response.data;
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getDrillDownReportList callback failed");
- });
- },
- getTotalForTheColList : function(){
- return $http({
- method: "GET",
- url: "report/wizard/retrieveTotalForTheColList",
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: retrieveTotalForTheColList did not return a valid JSON object.");
- }
- return response.data;
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: retrieveTotalForTheColList callback failed");
- });
- },
- getChildReportFormField: function(reportId) {
- return $http({
- method: "GET",
- url: "report/wizard/list_child_report_ff/"+reportId,
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getDrillDownReportList did not return a valid JSON object.");
- }
- return response.data;
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getDrillDownReportList callback failed");
- });
- },
- getChildReportColumn: function(reportId) {
- return $http({
- method: "GET",
- url: "report/wizard/list_child_report_col/"+reportId,
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getChildReportColumn did not return a valid JSON object.");
- }
- return response.data;
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getChildReportColumn callback failed");
- });
- },
- getColumnEditInfoById: function(columnId){
- return $http({
- method: "GET",
- url: "report/wizard/retrieve_col_tab_wise_data/"+columnId,
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getColumnEditInfoById did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getColumnEditInfoById callback failed");
- });
- },
- saveColumnEditInfo: function(updatedColumnJson){
- return $http({
- method: "POST",
- url: "report/wizard/save_col_tab_data",
- data: updatedColumnJson
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: saveColumnEditInfo did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: saveColumnEditInfo callback failed");
- });
- },
- postImportXml: function(importXMLJSON){
- return $http({
- method: "POST",
- url: "report/wizard/import_report",
- data: importXMLJSON
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: importXml did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: importXml callback failed");
- });
- },
- copyReportById: function(reportId) {
- return $http({
- method: "GET",
- url: "report/wizard/copy_report/"+reportId,
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: copyReportById did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: copyReportById callback failed");
- });
- },
- saveFormFieldEditInfo: function(updatedFormFieldJson){
- return $http({
- method: "POST",
- url: "report/wizard/save_formfield_tab_data",
- data: updatedFormFieldJson
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: saveFormFieldEditInfo did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: saveFormFieldEditInfo callback failed");
- });
- },
- addFormFieldEditInfo: function(addFormFieldJson){
- return $http({
- method: "POST",
- url: "report/wizard/add_formfield_tab_data",
- data: addFormFieldJson
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: saveFormFieldEditInfo did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: saveFormFieldEditInfo callback failed");
- });
- },
-
- getFormFieldList: function() {
- return $http({
- method: "GET",
- url: "report/wizard/list_formfields",
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getFormFieldList did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getFormFieldList callback failed");
- });
- },
- getFormFieldEditInfoById: function(fieldId){
- return $http({
- method: "GET",
- url: "report/wizard/retrieve_form_tab_wise_data/"+fieldId,
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getColumnEditInfoById did not return a valid JSON object.");
- }
- return response.data;
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getFormFieldEditInfoById callback failed");
- });
- },
- deleteFormFieldById: function(fieldId){
- return $http({
- method: "GET",
- url: "report/wizard/retrieve_form_tab_wise_data/"+fieldId+"/delete",
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: deleteFormFieldById did not return a valid JSON object.");
- }
- return response.data;
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: deleteFormFieldById callback failed");
- });
- },
- getColumns: function() {
- return $http
- .get('raptor.htm?action=report.search.execute&r_page=0')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getColumns did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getColumns callback failed");
- });
- },
-
- getSearchData : function() {
- return $http
- .get('raptor.htm?action=report.search.execute&r_page=0')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getSearchData did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getSearchData callback failed");
- });
- },
-
- getSecurityReportOwnerList: function() {
- return $http
- .get('report/wizard/security/retrieveReportOwner')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getSecurityReportOwnerList did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getSecurityReportOwnerList callback failed");
- });
- },
- getReportRoleList: function() {
- return $http
- .get('report/wizard/security/retrieveReportRoleList')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getReportRoleList did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getReportRoleList callback failed");
- });
- },
- getReportSecurityInfo: function() {
- return $http
- .get('report/wizard/security/getReportSecurityInfo')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getReportSecurityInfo did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getReportSecurityInfo callback failed");
- });
- },
- getReportSecurityUsers: function() {
- return $http
- .get('report/wizard/security/retrieveReportUserList')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getReportSecurityUsers did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getReportSecurityUsers callback failed");
- });
- },
-
- getReportSecurityRoles: function() {
- return $http
- .get('report/wizard/security/getReportSecurityRoles')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getReportSecurityUsers did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getReportSecurityUsers callback failed");
- });
- },
-
-
- getSearchDataAtPage : function(pageSearchParameter) {
- return $http
- .get('raptor.htm?action=report.search.execute&r_page='+pageSearchParameter)
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getSearchDataAtPage did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getSearchDataAtPage callback failed");
- });
- },
- setDrillDownPopupOptions: function(drillDownURL,drillDownParams) {
- this.drillDownURL = drillDownURL;
- this.drillDownParams = drillDownParams;
- },
- getReportDeleteStatus : function(deleteUrl) {
- return $http.get(deleteUrl).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getReportDeleteStatus did not return a valid JSON object.");
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getReportDeleteStatus callback failed");
- });
- },
- addReportSecurityUser: function(UserId) {
- return $http({
- method: "POST",
- url: "report/security/addReportUser",
- data: UserId
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: addReportSecurityUser did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: saveNewDefinition callback failed");
- });
- },
- removeReportSecurityUser: function(UserId) {
- return $http({
- method: "POST",
- url: "report/security/removeReportUser",
- data: UserId
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: removeReportSecurityUser did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: saveNewDefinition callback failed");
- });
- },
- addReportSecurityRole: function(RoleId) {
- return $http({
- method: "POST",
- url: "report/security/addReportRole",
- data: RoleId
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: addReportSecurityRole did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: saveNewDefinition callback failed");
- });
- },
- removeReportSecurityRole: function(RoleId) {
- return $http({
- method: "POST",
- url: "report/security/removeReportRole",
- data: RoleId
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: removeReportSecurityRole did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: removeReportSecurityRole callback failed");
- });
- },
- updateReportSecurityInfo: function(securityInfo) {
- return $http({
- method: "POST",
- url: "report/security/updateReportSecurityInfo",
- data: securityInfo
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: updateReportSecurityInfo did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: updateReportSecurityInfo callback failed");
- });
- },
- getReportLogs: function(reportId) {
- return $http({
- method: "GET",
- url: "report/wizard/get_report_log/"+reportId
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getReportLogs did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getReportLogs callback failed");
- });
- },
-
- toggleUserEditAccess: function(reportUser) {
- var readOnly = reportUser.accessAllowed?"N":"Y";
- return $http({
- method: "POST",
- url:"report/security/toggleUserEditAccess/"+reportUser.id,
- data: readOnly
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: toggleUserEditAccess did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: toggleUserEditAccess callback failed");
- });
- },
- toggleRoleEditAccess: function(reportRole) {
- var readOnly = reportRole.accessAllowed?"N":"Y";
- return $http({
- method: "POST",
- url:"report/security/toggleRoleEditAccess/"+reportRole.id,
- data: readOnly
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: toggleRoleEditAccess did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: toggleRoleEditAccess callback failed");
- });
- },
- resetSecurityLoadingCounter: function() {
- this.securityPageApiCounter = 0;
- this.securityPageApiTotalCount = 5;
- },
- icrementSecurityLoadingCounter: function() {
- this.securityPageApiCounter = this.securityPageApiCounter+1;
- },
- checkSecurityLoadingCounter: function() {
- return (this.securityPageApiCounter ==this.securityPageApiTotalCount);
- },
- getDrillDownParamDef: function(param) {
- return $http({
- method: "GET",
- url: "report/wizard/drill_down_param/"+param
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject("raptorReportFactory: getDrillDownParamDef did not return a valid JSON object.");
- }
- }, function(response) {
- // something went wrong
- return $q.reject("raptorReportFactory: getDrillDownParamDef callback failed");
- });
- }
- };
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/reportModalControllers.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/reportModalControllers.js
deleted file mode 100644
index 2b59c578..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/reportModalControllers.js
+++ /dev/null
@@ -1,423 +0,0 @@
-var ModalInstanceCtrl = function ($scope, $modalInstance, msg,$rootScope) {
- $scope.msg=msg;
-}
-
-var testRunSqlController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, queriedData) {
- var init = function() {
- $scope.isError = false;
- if (queriedData.errormessage) {
- $scope.isError = true;
- $scope.errormessage = queriedData.errormessage;
- $scope.stacktrace = queriedData.stacktrace;
- } else {
- $scope.queryData = queriedData;
- }
- }
- init();
- $scope.close = function() {
- $modalInstance.dismiss();
- };
-}
-
-var openColumnPopupController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, colData, $routeParams) {
- $scope.processingData=true;
- $scope.colInfo={};
- $scope.drilldownReports={};
- $scope.isEditCol = true;
- var init = function() {
- $scope.displayAlignmentOptions = [
- {value:"null", text:""},
- {value:"Left", text:"Left"},
- {value:"Center", text:"Center"},
- {value:"Right", text:"Right"}
- ];
- $scope.dataTypeOptions = [
- {value:"Number", text:"Number"},
- {value:"Date", text:"Date"},
- {value:"VARCHAR2", text:"Character"},
- {value:"Hyperlink", text:"Hyperlink"}
- ];
-
- $scope.multiGroupColLevel = [
- {value:"1", text:"1"},
- {value:"2", text:"2"},
- {value:"3", text:"3"},
- {value:"4", text:"4"}
- ];
- $scope.indentValues = [
- {value:"1", text:"1"},
- {value:"2", text:"2"},
- {value:"3", text:"3"},
- ];
- }
-
- $scope.totalForTheColList= [];
- raptorReportFactory.getTotalForTheColList().then(function(data){
- $scope.totalForTheColList = data;
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: retrieveTotalForTheColList failed.");
- });
-
- raptorReportFactory.getDrillDownReportList().then(function(data2){
- $scope.drilldownReports = data2;
- raptorReportFactory.getColumnEditInfoById(colData.id).then(function(data){
- $scope.colInfo = data;
- if($scope.colInfo.noWrap!=null && ($scope.colInfo.noWrap=='Y' || $scope.colInfo.noWrap==true))
- $scope.colInfo.noWrap=true;
- else
- $scope.colInfo.noWrap=false;
- $scope.processingData=false;
- init();
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getColumnEditInfoById failed.");
- });
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getDrillDownReportList failed.");
- });
-
- $scope.massageData = function(){
- if(!Number.isInteger($scope.colInfo.level))
- $scope.colInfo.level = null;
- if(!Number.isInteger($scope.colInfo.indentation))
- $scope.colInfo.indentation = null;
- }
-
- $scope.save = function() {
- $scope.processingData=true;
- $scope.colInfo.noWrap=($scope.colInfo.noWrap==true)?'Y':'N';
- if($scope.colInfo.level && $scope.colInfo.level.startsWith("Select"))
- $scope.colInfo.level = null;
- if($scope.colInfo.displayTotal && $scope.colInfo.displayTotal.startsWith("Select"))
- $scope.colInfo.displayTotal = null;
-
- if($scope.colInfo.indentation && $scope.colInfo.indentation.startsWith("Select"))
- $scope.colInfo.indentation = null;
- raptorReportFactory.saveColumnEditInfo($scope.colInfo).then(function(data){
- $scope.successPopUp('');
- $scope.processingData=false;
- $modalInstance.close();
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: save failed.");
- $scope.processingData=false;
- });
- };
-
- $scope.cancel = function() {
- $modalInstance.dismiss();
- };
-
-
- /****Drill***/
- $scope.drilDownValues=[];
- $scope.childReportFF =[];
- $scope.childReportCol = [];
- $scope.complete = function() {
- var drillDownParams='';
- var ampStr = "&";
- var count =0;
- for(var i in $scope.selectedDrillReportFormField){
- var selectedRadio = $scope.selectedDrillReportFormField[i];
- if( selectedRadio != (i+'-0')){// if it's not 'No Value'
- if (typeof($scope.drillDownParams[i].fieldName) == "undefined"){
- if(i>=($scope.drilDownFormField.length-1)){
- var id = $scope.drilDownFormField[i].id;
- drillDownParams+= id+"=";
- }
- }else
- drillDownParams+=$scope.drillDownParams[i].fieldName+"=";
- if( selectedRadio == (i+'-1')){//'Fixed Value'
- drillDownParams+= $scope.drillDownParams[i].valValue+ampStr;
- }else if( selectedRadio == (i+'-2')){//'Value of Column'
- drillDownParams+= ('['+$scope.drillDownParams[i].valColId+']'+ampStr);
- }else if( selectedRadio == (i+'-3')){//'Value of form field'
- drillDownParams+= ('[!'+$scope.drillDownParams[i].valFieldId+']'+ampStr);
- }else if( selectedRadio == (i+'-4')){//'Value set'
- if($scope.drillDownParams[i].valColId!='' && $scope.drillDownParams[i].valFieldId!='' && $scope.drillDownParams[i].valColId!='Select' && $scope.drillDownParams[i].valFieldId!='Select')
- drillDownParams+= ('['+$scope.drillDownParams[i].valColId+'!'+$scope.drillDownParams[i].valFieldId+']'+ampStr);
- }
- }
- }
- drillDownParams = drillDownParams.substring(0, drillDownParams.length - 1);
- $scope.colInfo.drilldownParams = drillDownParams;
- $scope.isEditCol=true;
- };
- $scope.selectedDrillReportFormField = [];
- $scope.drillDownParams = {};
- $scope.getDrillReportFormField = function(ddReportId,param){
- $scope.isEditCol = false;
- $scope.processingData = true;
-
- raptorReportFactory.getChildReportFormField(ddReportId).then(function(data){
- $scope.drilDownFormField = data;
- for(var i in data){
- var array = [
- {selection: 'No Value', value:'Accept Default', radioGroup :i+'-'+'0'},
- {selection: 'Fixed Value', value:'Accept Default' , radioGroup :i+'-'+'1'},
- {selection: 'Value of Column', value:'Accept Default', radioGroup :i+'-'+'2'},
- {selection: 'Value of form field', value:'Accept Default', radioGroup :i+'-'+'3'},
- {selection: 'Value set', value:'Pass the value of the selected column if not empty, otherwise pass the value of the selected form field', radioGroup :i+'-'+'4'}
- ]
- $scope.drilDownValues.push(array);
- }
-
- if(param!=''){
- raptorReportFactory.getDrillDownParamDef(param).then(function(dataDD){
- var temp = $scope.drilDownFormField;
- $scope.drillDownParams = [];
- for(var i in $scope.drilDownFormField){
- $scope.selectedDrillReportFormField[i] = i+'-0';
- var tmp = {
- fieldName: $scope.drilDownFormField[i].id,
- valColId:'',
- ValFieldId:'',
- valType:'',
- valValue:''
- };
- $scope.drillDownParams.push(tmp);
- }
- for(var i in $scope.drilDownFormField){
- for(var j in dataDD){
- if($scope.drilDownFormField[i].id == dataDD[j].fieldName){
- $scope.selectedDrillReportFormField[i] = i+'-'+dataDD[j].valType;
- $scope.drillDownParams[i] = dataDD[j];
- }
- }
- }
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getChildReportFormField failed.");
- }).finally(function() {
- $scope.processingData=false;
- });
- }else{
- $scope.processingData = false;
- }
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getChildReportFormField failed.");
- });
-
- raptorReportFactory.getChildReportFormField($scope.colInfo.drilldownURL).then(function(data){
- $scope.childReportFF =data;
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getChildReportFormField failed.");
- });
-
- raptorReportFactory.getChildReportColumn($routeParams.reportId).then(function(data){
- $scope.childReportCol =data;
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getChildReportFormField failed.");
- });
- }
-}
-
-
-var openFormFieldPopupController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, fieldData) {
- $scope.formFieldEditData = {};
- $scope.sqlAsDefaultValue ={
- value:false
- };
- $scope.predefinedValues ={
- value:''
- };
- var init = function() {
- if($scope.type=='edit'){
- $scope.dataProcessing = true;
- raptorReportFactory.getFormFieldEditInfoById(fieldData.id).then(function(data){
- $scope.dataProcessing = false;
- $scope.formFieldEditData = data;
- if($scope.formFieldEditData.fieldDefaultSQL)
- $scope.sqlAsDefaultValue.value = true;
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: getColumnEditInfoById failed.");
- }).finally(function() {
- $scope.dataProcessing=false;
- });
- }else{
- $scope.formFieldEditData ={
- groupFormField: false,
- visible:"true"
- };
- }
- $scope.ynOptions = [
- {value:"true", text:"Yes"},
- {value:"false", text:"No"}
- ];
- $scope.verifyFieldValueOptions = [
- {value:null, text:"--- Do Not Perform Validation ---"},
- {value:"DATE", text:"Date"},
- {value:"TIMESTAMP_HR", text:"TimeStamp (Hour)"},
- {value:"TIMESTAMP_MIN", text:"TimeStamp (Hour,Min)"},
- {value:"TIMESTAMP_SEC", text:"TimeStamp (Hour,Min,Sec)"},
- {value:"INTEGER", text:"Integer"},
- {value:"POSITIVE_INTEGER", text:"Positive Integer"},
- {value:"NON_NEGATIVE_INTEGER", text:"Positive Integer. Cannot Be Zero"},
- {value:"FLOAT", text:"Any Number"},
- {value:"NON_NEGATIVE_FLOAT", text:"Positive Number"},
- {value:"POSITIVE_FLOAT", text:"Positive Number. Cannot Be Zero"}
- ]
- $scope.fieldTypeOptions = [
- {value:"TEXT", text:"Text Box"},
- {value:"LIST_BOX", text:"List Box"},
- {value:"LIST_MULTI_SELECT", text:"Multi-select List Box"},
- {value:"HIDDEN", text:"Hidden"}
- ];
- }
- init();
- $scope.save = function() {
- if($scope.sqlAsDefaultValue.value && ($scope.formFieldEditData.fieldDefaultSQL==null || $scope.formFieldEditData.fieldDefaultSQL=='')){
- $scope.errorPopUp("if SQL as Default Value is checked, 'Default SQL' and 'SQL Generating Custom List of Values' fields cannot be empty");
- return;
- }else if(!$scope.sqlAsDefaultValue.value){
- $scope.formFieldEditData.fieldDefaultSQL=null;
- }
- $scope.dataProcessing = true;
- console.log($scope.formFieldEditData.validationType);
- if($scope.formFieldEditData.validationType=='Select')
- $scope.formFieldEditData.validationType = '';
- raptorReportFactory.saveFormFieldEditInfo($scope.formFieldEditData).then(function(data){
- $scope.dataProcessing = false;
- $scope.successPopUp('');
- $modalInstance.close();
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: saveFormFieldEditInfo failed.");
- }).finally(function() {
- $scope.dataProcessing=false;
- });
- };
-
- $scope.add = function() {
- $scope.dataProcessing = true;
- $scope.formFieldEditData.visible==
- raptorReportFactory.addFormFieldEditInfo($scope.formFieldEditData).then(function(data){
- $scope.dataProcessing = false;
- $modalInstance.close();
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: add FormFieldEditInfo failed.");
- }).finally(function() {
- $scope.dataProcessing=false;
- });
- };
-
- $scope.addPredefinedValueList = function() {
- if($scope.formFieldEditData.predefinedValueList==null)
- $scope.formFieldEditData.predefinedValueList=[];
- var item ={
- id:$scope.predefinedValues.value,
- name:$scope.predefinedValues.value,
- selected:false
- };
- if($scope.predefinedValues.value!=null && $scope.predefinedValues.value!='')
- $scope.formFieldEditData.predefinedValueList.push(item);
- };
-
- $scope.removePredefinedValueList = function(removeVal) {
- var removeIndex = null;
- for(i in $scope.formFieldEditData.predefinedValueList){
- if($scope.formFieldEditData.predefinedValueList[i].id == removeVal){
- removeIndex= i;
- break;
- }
- }
- $scope.formFieldEditData.predefinedValueList.splice(removeIndex, 1)
- };
-
- $scope.cancel = function() {
- $modalInstance.dismiss();
- };
-}
-
-
-var deleteFormFieldController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, rowData) {
- $scope.tempFieldId = rowData.id;
- $scope.ok = function() {
- raptorReportFactory.deleteFormFieldById(rowData.id).then(function(data){
- $modalInstance.close();
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: deleteFormFieldById failed.");
- });
- }
- $scope.cancel = function() {
- $modalInstance.dismiss();
- };
-}
-
-var removeReportSecurityUserController = function ($scope, $modalInstance, $http, $log, raptorReportFactory,securityUser) {
- $scope.securityUserName = securityUser.name;
- $scope.ok = function() {
- raptorReportFactory.removeReportSecurityUser(securityUser.id).then(function(data){
- $modalInstance.close();
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: removeReportSecurityUser failed.");
- });
- }
- $scope.cancel = function() {
- $modalInstance.dismiss();
- };
-}
-
-var removeReportSecurityRoleController = function ($scope, $modalInstance, $http, $log, raptorReportFactory,securityRole) {
- $scope.securityRoleName = securityRole.name;
- $scope.ok = function() {
- raptorReportFactory.removeReportSecurityRole(securityRole.id).then(function(data){
- $modalInstance.close();
- },function(error){
- $scope.errorPopUp(error);
- $log.error("raptorReportFactory: removeReportSecurityRole failed.");
- });
- }
- $scope.cancel = function() {
- $modalInstance.dismiss();
- };
-}
-
-var formFieldVerifySQLController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, queriedData) {
- var init = function() {
- $scope.isError = false;
- if (queriedData.errormessage) {
- $scope.isError = true;
- $scope.errormessage = queriedData.errormessage;
- $scope.stacktrace = queriedData.stacktrace;
- } else {
- $scope.queryData = queriedData;
- }
- }
- init();
- $scope.close = function() {
- $modalInstance.dismiss();
- };
-}
-var toggleUserEditAccessActiveController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, rowData) {
- $scope.rowData = rowData;
- $scope.toggleEditAccessStatus = function(rowData) {
- raptorReportFactory.toggleUserEditAccess(rowData);
- $modalInstance.close();
- };
-
- $scope.cancelEditAccessToggle = function(rowData) {
- rowData.accessAllowed = ! rowData.accessAllowed;
- $modalInstance.dismiss('cancel');}
-}
-
-var toggleRoleEditAccessActiveController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, rowData) {
- $scope.rowData = rowData;
- $scope.toggleEditAccessStatus = function(rowData) {
- raptorReportFactory.toggleRoleEditAccess(rowData);
- $modalInstance.close();
- };
-
- $scope.cancelEditAccessToggle = function(rowData) {
- rowData.accessAllowed = ! rowData.accessAllowed;
- $modalInstance.dismiss('cancel');}
-} \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/stepFormFactory.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/stepFormFactory.js
deleted file mode 100644
index 5c711425..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/stepFormFactory.js
+++ /dev/null
@@ -1,198 +0,0 @@
-(function(){
- var stepFormFactory = function($http, $compile, $q, $log) {
-
- var factory = {};
-
- factory.getStepJSONData = function(jsonSrcName) {
- $http({
- method: "GET",
- url: jsonSrcName,
- }).then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }
-
-
- factory.renderColumnForm = function(scope) {
-
- }
- factory.renderForm = function(jsonSrcName, elem, scope) {
- let defer = $q.defer();
- var divStepForm = document.getElementById('stepView');
- var textStyle = "width:300px"
- var textAreaStyle = "width:300px"
- if(divStepForm)
- while(divStepForm && divStepForm.firstChild){
- divStepForm.removeChild(divStepForm.firstChild);
- }
- $http({
- method: 'GET',
- url: jsonSrcName
- }).then(function successCallback(response) {
- // this callback will be called asynchronously
- // when the response is available
- if (typeof response.data === 'object') {
- var json = response.data;
- var step = json.step;
- var div =d3.select(elem[0]);
- var modelNameDict = {};
-
- div.append("h1").attr({"class":"font-color:blue"}).text(json.content.title);
- div.append("div").html(json.content.contentHtml);
- var sections = json.content.sections;
- sections.forEach(function(d, i) {
- var sectionDiv = div.append("div");
- sectionDiv.attr("id", "section_"+i);
- if(d.title != "finalButton")
- sectionDiv.append("h4").text(d.title);
- var proj_id_hidden = sectionDiv.append("input");
- proj_id_hidden.attr({"type":"hidden", "value":"", "name": "proj_id", "ng-model":"proj_id", "style": "" });
-
- var elements = d.elements;
- var buttons = d.buttons;
- var elementTable ;
- if(elements) {
- elements.forEach(function(element, elementIndex) {
-
- var elementBody ;
- if(elementIndex == 0) {
- elementTable = sectionDiv.append("table").attr({"border":"0", "cellpadding":"4", "cellspacing":"0"});
- elementBody = elementTable.append("tbody");
- } else {
- elementBody = elementTable = sectionDiv.select("tbody");
- }
- if(element.input == 'hidden') {
-
- } else {
- var tr = elementBody.append("tr")
- var cellWidthStyle = {"width":"50%"}
-
- if (!(element.spanOverTwoColumns)){
- var td = tr.append("td").attr({"width":"30%","class":"tdLeftColumn"});
- if (element.input=="checkboxGroup") {
- td = td.attr({"rowspan":element.checkboxes.length})
- }
- td.text(element.displayName);
- var cellWidthStyle = {"width":"500px;"}
- }
- td = tr.append("td").attr(cellWidthStyle);
- var model_name_appendix='';
- if (element.name in modelNameDict) {
- modelNameDict[element.name]=modelNameDict[element.name]+1
- model_name_appendix ='_'+modelNameDict[element.name]
- } else {
- modelNameDict[element.name]=0
- }
- if(element.input == 'text') {
- var inp_text = td.append("input");
- inp_text.attr({"type":"text", "value":element.defaultValue, "name": element.name, "ng-model":element.name+model_name_appendix, "style": (element.style?element.style:textStyle) });
- }
- else if(element.input === 'checkbox') {
- var temptd= td.append("label").attr({"class":"checkbox"});
- var temptd2= temptd.append("input").attr({"type":"checkbox", "ng-model": element.checkbox.value});
- var temptd3= temptd.append("i").attr({"class":"skin"})
- var temptd3= temptd.append("span").text(element.checkbox.text);
-
- } else if (element.input === 'radio') {
- element.options.forEach(function(d,i) {
- td.append("input").attr({"type":"radio", "id":element.name+"_"+d.id, "ng-model":element.name+model_name_appendix, "name": element.name, "value": d.id});
- td.append("label").text(d.name);
- })
- } else if (element.input === 'checkboxGroup') {
-
- element.checkboxes.forEach(function(d,i) {
- if (i==0) {
- var temptd= td.append("label").attr({"class":"checkbox"});
- var temptd2= temptd.append("input").attr({"type":"checkbox", "ng-model": d.value});
- var temptd3= temptd.append("i").attr({"class":"skin"})
- var temptd3= temptd.append("span").text(d.text);
- } else {
- var tr = elementBody.append("tr")
- td = tr.append("td").attr({"width":"50%"});
- var temptd= td.append("label").attr({"class":"checkbox"});
- var temptd2= temptd.append("input").attr({"type":"checkbox", "ng-model": d.value});
- var temptd3= temptd.append("i").attr({"class":"skin"})
- var temptd3= temptd.append("span").text(d.text);
- }
- })
- } else if (element.input === 'textarea') {
- td.append("textarea").attr({"rows":"4", "cols":"50", "ng-model":element.name+model_name_appendix, "name": element.name, "style": (element.style?element.style:textAreaStyle)});
- }
- else if (element.input === 'select') {
- var select = td.append("select");
- // need to store options into element name;
- select
- .attr({"name": element.name,"b2b-dropdown":"","ng-model":element.ngModelName,"style":"width:300px"})
- .attr("placeholder-text","Select");
-
-
- /* var data = ["Option 1", "Option 2", "Option 3"]*/
- var options = select
- .selectAll('option')
- .data(element.options).enter()
- .append('option').attr("value", function(d) {return d.value})
- .attr("b2b-dropdown-list","")
- .text(function (d) { return d.text; })
- ;
- } else if (element.input === 'tabletext') {
- var colArray = element.columns.split(',');
- var table = td.append("table");
- table.attr("border", "1");
-
- colArray.forEach(function(d) {
- table.append("th").text(d);
- })
-
- }
- }
- })
- if (buttons) {
- buttons.forEach(function(button, buttonIndex) {
- sectionDiv.append("input").attr({"type":"button", "value": button.text, "ng-click":button.ngFunction,"class":"btn btn-alt btn-small"});
- })
- sectionDiv.append("br");
- }
- }
- else { //if elements
- if((json.step != "1")&&(!json.hideBackButton))
- sectionDiv.append("input").attr({"type":"button", "value": "Back", "ng-click":"previous()","class":"btn btn-alt btn-small"});
- if((d.title == "finalButton")&(!json.hideSaveButton))
- sectionDiv.append("input").attr({"type":"button", "value": "Save", "ng-click":"save()", "class":"btn btn-alt btn-small"});
- if(!json.last_step)
- sectionDiv.append("input").attr({"type":"button", "value": "Next", "ng-click":"next()", "class":"btn btn-alt btn-small"});
-
- }
- })
- elem.html(div.html());
- elem.removeAttr("step-form");
- $compile(elem.contents())(scope);
- defer.resolve();
- } else {
- $log.error
- return $q.reject(response.data);
- }
- }, function errorCallback(response) {
- // called asynchronously if an error occurs
- // or server returns response with an error status.
- $log.error("reponse data is not a valid JSON object");
- defer.resolve();
- });
- //}
- return defer.promise;
- };
-
- return factory;
- };
-
- stepFormFactory.$inject = ['$http', '$compile', '$q'];
-
- appDS2.factory('stepFormFactory', stepFormFactory);
-
-}())
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-sample-page/droolsService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-sample-page/droolsService.js
deleted file mode 100644
index 90c3d00d..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-sample-page/droolsService.js
+++ /dev/null
@@ -1,53 +0,0 @@
-appDS2.factory('DroolsService', function ($http, $q) {
- return {
- getDroolsList: function() {
- return $http.get('getDrools')
- .then(function(response) {
- console.log(response);
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getDroolDetails: function(selectedFile) {
- return $http.get('getDroolDetails'+'?selectedFile=' + selectedFile )
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
- executeDrools:function(droolsData) {
- return $http({
- method: "POST",
- url: "post_drools/execute",
- data:droolsData
- }).then(function(response) {
- console.log(response);
- if (response.status == 200) {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- return response.data;
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }
- };
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/headerServiceDS2.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/headerServiceDS2.js
deleted file mode 100644
index c9134f62..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/headerServiceDS2.js
+++ /dev/null
@@ -1,17 +0,0 @@
-appDS2.factory('HeaderServiceDS2', function ($http,$log, $q) {
- return {
- getMenu: function() {
- return $http.get('get_menu')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }
- };
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/leftMenuServiceDS2.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/leftMenuServiceDS2.js
deleted file mode 100644
index 61346c84..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/leftMenuServiceDS2.js
+++ /dev/null
@@ -1,97 +0,0 @@
-function isRealValue(obj){
- return obj && obj !== "null" && obj!== "undefined";
-}
-appDS2.factory('LeftMenuServiceDS2', function ($http,$log, $q) {
- return {
- getLeftMenu: function() {
- return $http.get('get_menu')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
- getAppName: function() {
- return $http.get('get_app_name')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }
-
- };
-});
-
-/* check if the body height has changed */
-function onElementHeightChange(elm, callback){
- if (!elm) {
- console.log('onElementHeightChange: null element!');
- return;
- }
- var lastHeight = elm.clientHeight, newHeight;
- (function run(){
- newHeight = elm.clientHeight;
- if( lastHeight != newHeight )
- callback();
- lastHeight = newHeight;
-
- if( elm.onElementHeightChangeTimer )
- clearTimeout(elm.onElementHeightChangeTimer);
- elm.onElementHeightChangeTimer = setTimeout(run, 200);
- })();
-}
-
-/*adjust height of left menu*/
-function adjustLeftMenuHeight() {
-
- try{
- var footerTop = $('.footer-container').offset().top;
- var scrollTop = $(window).scrollTop();
- $(".menu-container").css({
- "height" : footerTop- scrollTop,
- });
- }catch(err){
- console.log('adjustLeftMenuHeight failed', err)
- }
-}
-/* adjust left menu height on scroll */
-window.onscroll = function (e) {
- adjustLeftMenuHeight();
-}
-
-/* adjust left menu height on page load */
-$(function() {
- adjustLeftMenuHeight();
-});
-
-
-onElementHeightChange(document.body, function(){
- adjustLeftMenuHeight();
-});
-
-function getCookie(cname) {
- var name = cname + "=";
- var decodedCookie = decodeURIComponent(document.cookie);
- var ca = decodedCookie.split(';');
- for(var i = 0; i <ca.length; i++) {
- var c = ca[i];
- while (c.charAt(0) == ' ') {
- c = c.substring(1);
- }
- if (c.indexOf(name) == 0) {
- return c.substring(name.length, c.length);
- }
- }
- return "";
-}
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/manifestService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/manifestService.js
deleted file mode 100644
index 27e3a6ec..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/manifestService.js
+++ /dev/null
@@ -1,24 +0,0 @@
-appDS2.factory('ManifestService', function ($http, $q, $log) {
- return {
- // Gets and returns the manifest for the webapp.
- getManifest: function() {
- // cache control for IE
- var cc = "?cc=" + new Date().getTime().toString();
- return $http({
- method: 'GET',
- url: 'manifest' + cc,
- cache: false,
- responseType: 'json'})
- .then(function(response) {
- // $log.debug("ManifestService.getManifest: " + JSON.stringify(response));
- if (response.data == null || typeof response.data != 'object')
- return $q.reject('ManifestService.getManifest: response.data null or not object');
- else
- return response.data;
- }, function(error) {
- $log.error('ManifestService.getManifest failed: ' + error.data);
- return $q.reject(error.data);
- });
- }
- };
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/modalServiceDS2.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/modalServiceDS2.js
deleted file mode 100644
index d3cd8737..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/modalServiceDS2.js
+++ /dev/null
@@ -1,31 +0,0 @@
-angular.module("modalServicesDS2",[]).service('modalService', ['$modal', function ($modal) {
-
- this.popupConfirmWinWithCancel = function(title, msgBody, callback,dismissCallback){
- debugger;
- var modalInstance = $modal.open({
- templateUrl: 'confirmation_informativeDS2.html',
- //controller: 'modalpopupControllerDS2',
- //size: 'sm',
- resolve: {
- message: function () {
- var message = {
- title: title,
- text: msgBody
- };
- return message;
- }
- }
- });
- var args = Array.prototype.slice.call( arguments, 0 );
- args.splice( 0, 3);
- modalInstance.result.then(function(){
- callback.apply(null, args);
- }, function() {
- dismissCallback();
- })['finally'](function(){
- modalInstance = undefined;
- });
-
- };
-
- }]); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/profileServiceDS2.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/profileServiceDS2.js
deleted file mode 100644
index 812e8320..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/profileServiceDS2.js
+++ /dev/null
@@ -1,93 +0,0 @@
-appDS2.factory('ProfileServiceDS2', function ($http, $q) {
- return {
- getProfile: function() {
- return $http.get('get_user')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getProfilePagination: function(pageNum,viewPerPage) {
- return $http.get('get_user_pagination?pageNum=' + pageNum + '&viewPerPage=' + viewPerPage)
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getPostProfile: function() {
- return $http.get('post_search_sample')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getProfileDetail: function(profileId) {
- return $http.get('get_profile?profile_id='+profileId)
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getSelfProfileDetail: function() {
- return $http.get('get_self_profile')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- toggleProfileStatus: function(id) {
- return $http.get('profile/toggleProfileActive?profile_id=' + id)
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }
-
- };
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/sampleService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/sampleService.js
deleted file mode 100644
index d762dc9c..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/sampleService.js
+++ /dev/null
@@ -1,19 +0,0 @@
-appDS2.factory('SampleService', function ($http, $q) {
- return {
- getCollaborateList: function() {
- return $http.get('get_collaborate_list')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- }
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/userInfoServiceDS2.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/userInfoServiceDS2.js
deleted file mode 100644
index cfb12dd5..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/userInfoServiceDS2.js
+++ /dev/null
@@ -1,32 +0,0 @@
-appDS2.factory('UserInfoServiceDS2', function ($http, $q,$log) {
- return {
- getFunctionalMenuStaticDetailShareContext: function(contextId,key) {
- var deferred = $q.defer();
- $http({
- method: "GET",
- url: "get_userinfo",
- }).success( function(res) {
- if(res==null || res=='')
- $log.error('userInfoServiceDs2: failed to get user info');
- deferred.resolve(res);
- }).error( function(status) {
- deferred.reject(status);
- });
- return deferred.promise;
- },
- getFunctionalMenuStaticDetailSession: function() {
- var deferred = $q.defer();
- $http({
- method: "GET",
- url: "get_topMenuInfo",
- }).success(function(res) {
- if(res==null || res=='')
- $log.error('userInfoServiceDs2: failed to get top menu info');
- deferred.resolve(res);
- }).error( function(status) {
- deferred.reject(status);
- });
- return deferred.promise;
- }
- };
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/ngworkflow-landing.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/ngworkflow-landing.html
deleted file mode 100644
index 44339b34..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/ngworkflow-landing.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE html>
-<!-- Single-page application for EPSDK-App workflow page using DS2 look and feel -->
-<html>
-<head>
- <meta charset="ISO-8859-1">
- <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
-
- <title>Workflow NG</title>
-
- <!-- Common items -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/font_icons.css">
-
- <!-- icons in open source -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ionicons.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css">
-
-
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
-
- <script src="app/fusion/external/angular-1.4.13/angular.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
-
- <script src="app/fusion/external/b2b/js/b2b-angular/b2b-library.min.js"></script>
- <script src="app/fusion/external/jquery/dist/jquery.min.js"></script>
-
- <script src="app/fusion/external/javascript-detect-element-resize/jquery.resize.js"></script>
- <script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/headerServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/manifestService.js"></script>
-
- <script src="app/fusion/scripts/DS2-directives/footer.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2Header.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2LeftMenu.js"></script>
- <script src="app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js"></script>
-
- <!-- Page specific items -->
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/ds2-workflows/workflowRouting.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/ds2-workflows/workflowController.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/ds2-workflows/workflowApp.js"></script>
- <link rel="stylesheet" type="text/css" href="app/ngapp/styles.css">
-
- <!-- <link rel="stylesheet" type="text/css" href="static/fusion/sample/css/scribble.css" />
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/workflows/workflows.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/workflows/bs-workflow.css" >
- -->
-</head>
- <body class="appBody">
- <div ds2-Header class="header-container" ></div>
- <div ds2-menu id="menuContainer" class="menu-container" ></div>
- <div ng-view id="rightContentProfile" class="content-container"></div>
- <div ds2-Footer class="footer-container"></div>
-
- <script type="text/javascript" src="app/ngapp/runtime.js"></script>
- <script type="text/javascript" src="app/ngapp/polyfills.js"></script>
- <script type="text/javascript" src="app/ngapp/main.js"></script>
-
- </body>
-</html>
-
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-landing.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-landing.html
deleted file mode 100644
index 7bcd9a85..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-landing.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html>
-<!-- Single-page application for EPSDK-App workflow page using DS2 look and feel -->
-<html>
-<head>
- <meta charset="ISO-8859-1">
- <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
-
- <title>Workflow</title>
-
- <!-- Common items -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/font_icons.css">
-
- <!-- icons in open source -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ionicons.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css">
-
-
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
-
- <script src="app/fusion/external/angular-1.4.13/angular.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
-
- <script src="app/fusion/external/b2b/js/b2b-angular/b2b-library.min.js"></script>
- <script src="app/fusion/external/jquery/dist/jquery.min.js"></script>
-
- <script src="app/fusion/external/javascript-detect-element-resize/jquery.resize.js"></script>
- <script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/headerServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/manifestService.js"></script>
-
- <script src="app/fusion/scripts/DS2-directives/footer.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2Header.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2LeftMenu.js"></script>
- <script src="app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js"></script>
-
- <!-- Page specific items -->
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/ds2-workflows/workflowRouting.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/ds2-workflows/workflowController.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/ds2-workflows/workflowApp.js"></script>
-
- <!-- <link rel="stylesheet" type="text/css" href="static/fusion/sample/css/scribble.css" />
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/workflows/workflows.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/workflows/bs-workflow.css" >
- -->
-</head>
- <body class="appBody" ng-app="abs">
- <div ds2-Header class="header-container" ></div>
- <div ds2-menu id="menuContainer" class="menu-container" ></div>
- <div ng-view id="rightContentProfile" class="content-container"></div>
- <div ds2-Footer class="footer-container"></div>
- </body>
-</html>
-
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-listing.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-listing.html
deleted file mode 100644
index 452dcafa..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-listing.html
+++ /dev/null
@@ -1,65 +0,0 @@
-
-<div id="page-content" style=" width: 100%;" >
- <br/>
- <div >
- <h1 class="heading-page">Workflow</h1>
- <button type="submit" ng-click="createWorkflow('md')" class="btn btn-alt btn-small" >Create Workflow</button>
- </div>
- <div>
- <form>
- <div class="form-group" align="right">
- <input type="text" ng-model="search" placeholder = "Search Workflows"/>
- </div>
- </form>
- </div>
-
-
-
-
-<div>
-<table class="striped" table-data="tableData" view-per-page="viewPerPage" current-page="currentPage" search-category="searchCategory" search-string="searchString" total-page="totalPage">
- <thead >
- <tr class="info">
- <th >Id</th>
- <th>Name</th>
- <th>Key</th>
- <th>Description</th>
- <th>Workflow Server URL</th>
- <!-- <th>Suspend Link</th> -->
- <th>View</th>
- <th>Active</th>
- <th>Created </th>
- <th>Created By</th>
- <th>Action</th>
- <th>Schedule</th>
- <th>Edit</th>
- <th>Delete?</th>
-
-
- </tr>
- </thead>
-
-
- <tbody type="body" ng-repeat="workflow in workflows | filter: search">
- <tr>
- <td>{{workflow.id}}</td>
- <td>{{workflow.name}}</td>
- <td>{{workflow.workflowKey}}</td>
- <td>{{workflow.description}}</td>
- <td>{{workflow.runLink}}</td>
- <td><div ng-click="previewWorkflow(workflow,'lg');" style="font-size:20px;"><a href="javascript:void(0)" class=" icon-people-preview"></a></div></td>
- <!-- <td>{{workflow.suspendLink}}</td> -->
- <td >{{workflow.active}}</td>
- <td>{{workflow.created}}</td>
- <td>{{workflow.createdBy}}</td>
- <td><div ng-show="workflow.active ==='false'" ng-click="activateWorkflow(workflow)" style="font-size:20px;"><a href="javascript:void(0)" class="icon-controls-playalt"></a></div>
- <div ng-show="workflow.active ==='true'" ng-click="suspendWorkflow(workflow)" style="font-size:20px;"><a href="javascript:void(0)" class="icon-controls-pauseL"></a></div></td>
- <td><div ng-click="scheduleWorkflow(workflow);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-misc-time"></a></div></td>
- <td><div ng-click="updateWorkflow(workflow);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-misc-pen"></a></div></td>
- <td><div ng-click="removeWorkflow(workflow);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-misc-trash"></a></div></td>
- </tr>
- </tbody>
-</table>
-</div>
-
- </div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-new.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-new.html
deleted file mode 100644
index 9daebd07..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-new.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope in">
- <h2 id="myModalLabel" modal-title="">Create Workflows</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in">
- <form name="workflowForm" class="css-form" novalidate>
- <div class="form-row input-emphasized-field">
- <label for="textinputID1">Name *: </label>
-
- <div class="field-group">
- <input type="text" id="textinputID-2a" ddh-reset ng-model="workflow.name" class="span12 input-emphasized"
- name="workflowName" required="required" placeholder="Workflow Name" />
-
- <div ng-show="workflowForm.$submitted || workflowForm.workflowName.$touched">
- <span ng-show="workflowForm.workflowName.$error.required">Workflow Name is required !!!</span>
- </div>
-
- </div>
- </div>
-
-
- <div class="form-row input-emphasized-field">
- <label for="textinputID1">Key*: </label>
- <div class="field-group">
- <input type="text" id="textinputID-2a" ddh-reset ng-model="workflow.workflowKey" class="span12 input-emphasized"
- name="workflowKey" required="required" placeholder="Workflow Key" />
-
- <div ng-show="workflowForm.$submitted || workflowForm.workflowKey.$touched">
- <span ng-show="workflowForm.workflowKey.$error.required">Workflow Key is required !!!</span>
- </div>
-
- </div>
- </div>
-
-
- <div class="form-row input-emphasized-field">
- <label for="textinputID1">Description: </label>
-
- <div class="field-group">
- <input type="text" ng-model="workflow.description" id = "textinputID-2a" ddh-reset name="workflowDescription" class="span12 input-emphasized" placeholder="Brief Description"/>
- </div>
- </div>
-
- <div class="form-row input-emphasized-field">
- <label for="textinputID1">Workflow Server URL*</label>
- <div class="field-group">
- <input type = "url" ng-model = "workflow.runLink" id = "workflowRunLink" ddh-reset name = "workflowRunLink" required = "required" class="span12 input-emphasized"/>
- </div>
-
- <div ng-show="workflowForm.$submitted || workflowForm.workflowRunLink.$touched">
- <span ng-show="workflowForm.workflowRunLink.$error.required">Run Link is required !!!</span>
- <span class="error" ng-show="workflowForm.workflowRunLink.$error.url">Not valid url!</span>
- </div>
-
- </div>
-
- <!-- <div class="control-group">
- <label class="fn-ebz-text large" for="workflowSuspendLink">Suspend Link*</label>
- <div class="controls">
- <input type = "url" ng-model = "workflow.suspendLink" id = "workflowSuspendLink" name = "workflowSuspendLink" required = "required" class="fn-ebz-text extra-large"/>
- </div>
-
- <div ng-show="workflowForm.$submitted || workflowForm.workflowSuspendLink.$touched">
- <span ng-show="workflowForm.workflowSuspendLink.$error.required">Suspend Link is required !!!</span>
- <span class="error" ng-show="workflowForm.workflowSuspendLink.$error.url">Not valid url!</span>
- </div>
- </div> -->
-
- <div class="form-row" role="radio">
- <fieldset role="radiogroup" radio-group-accessibility aria-labelledby="radiolabel1">
- <label for="optionsRadios1111" class="radio">
- <!-- <input type = "text" ng-model = "workflow.active" id="workflowActive" name="workflowActive" class="fn-ebz-text extra-large"/> -->
- <input type="radio" ng-model="workflow.active" id="optionsRadios1111" name="optionsRadio11" value="true" required="">
- <i class="skin"></i>
- <span>Active</span>
- </label>
- </div>
- <div class="form-row" role="radio">
- <label for="optionsRadios2222" class="radio">
- <input type="radio" ng-model ="workflow.active" id="optionsRadios2222" name="optionsRadio11" value="false">
- <i class="skin"></i>
- <span>Inactive</span>
- </label>
- <!-- </div>
- <input type="radio" ng-model="workflow.active" value="true">Active
- <input type="radio" ng-model="workflow.active" value="false">Inactive
-
-
- </div> -->
- </div>
- </fieldset>
- </div>
-
-
-
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small"" type="button" ng-click="ok()">OK</button>
- <button class="btn btn-medium" type="button"
- ng-click="cancel()">Cancel</button>
- </div>
- </div>
- </form>
- <br />
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-preview.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-preview.html
deleted file mode 100644
index 0fb1ffa2..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-preview.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope in">
- <h2 id="myModalLabel" modal-title="">View Workflow</h3>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" >
- <form name="workflowForm" class="css-form" novalidate>
-
- <div style="overflow:scroll">
- <img ng-src="{{workflowToPreview.runLink}}/engine-rest/process-definition/key/{{workflowToPreview.workflowKey}}/diagram">
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-medium" type="button"
- ng-click="cancel()">Cancel</button>
- </div>
- </div>
- </form>
- <br />
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-remove.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-remove.html
deleted file mode 100644
index a355c07e..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-remove.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<div style=" height: 276px;">
- <div class="b2b-modal-header ng-scope in">
- <h2 id="myModalLabel" modal-title="">Remove Workflow</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" style="margin-bottom: -50px;">
- <form name="workflowForm" class="css-form" novalidate>
-
- <div class="form-row input-emphasized-field">
- <label class="span12 input-emphasized" for="textinputID-2a">Workflow "{{workflowToRemove.name}}" is going to be removed. Do you want to continue</label>
- </div>
-
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button" ng-click="ok()">OK</button>
- <button class="btn btn-medium" type="button"
- ng-click="cancel()">Cancel</button>
- </div>
- </div>
- </form>
- <br />
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-schedule.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-schedule.html
deleted file mode 100644
index b939a598..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-schedule.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope in">
- <h2 id="myModalLabel" modal-title="">Workflow: {{workflowToSchedule.name}}</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
-
- </div>
- <table style="width:60%; margin-bottom: -21px">
- <tr><td>Workflow Key:</td> <td>{{workflowToSchedule.workflowKey}}</td></tr>
- <tr><td>Workflow Description:</td> <td>{{workflowToSchedule.description}}</td></tr>
- </table>
-
-
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" style="padding:0px;">
- <form name="workflowForm" class="css-form" novalidate>
-
- <table>
- <tr>
- <form name="myForm">
- <td>
- <label for="singleSelect"> Recurrence: </label>
- </td>
- <td style="padding-top: 0px;padding-bottom: 0px;">
- <div class="span12">
- <div class="form-row">
- <select name="dropdown1" b2b-dropdown ng-model="selectRecurrenceOpt">
- <option b2b-dropdown-list option-repeat="d in recurrenceOptions" value="{{d.value}}" init-value="{{selectRecurrenceOpt.title}}">{{d.title}}</option>
- </select>
- </div>
- </div>
-
- <br>
- </td>
- <td> </td>
- </form>
- </tr>
-<tr>
-<td>
-
-</td>
-<td>
-Pick a date:
-</td>
-<td>
-Hour:
-</td>
-<td>
-Minute:
-</td>
-</tr>
- <tr>
- <td>
- <form name="FirstScheduleForm">
- <label for="dateSelect"> First Schedule: </label>
- </form>
- </td>
- <td >
- <!--DATEPICKER POPUP-->
- <input class="span12" id="datepicker1" type="text" style="overflow-y:scroll;" ng-model="dt" b2b-datepicker >
- </td>
- <td>
- <div class="span12">
- <div class="form-row">
- <select name="dropdown1" b2b-dropdown ng-model="selectFirstHour">
- <option b2b-dropdown-list option-repeat="d in hours" value="{{d.value}}" init-value="{{selectFirstHour.title}}" placeholder="Select an Option">{{d.title}}</option>
- </select>
- </div>
- </div>
- </td>
- <td>
- <div class="span12">
- <div class="form-row">
- <select name="dropdown1" b2b-dropdown ng-model="selectFirstMinute">
- <option b2b-dropdown-list option-repeat="d in minutes" value="{{d.value}}" init-value="{{selectFirstMinute.title}}" placeholder="Select an Option">{{d.title}}</option>
- </select>
- </div>
- </div>
- </td>
-</tr>
-<tr >
- <td>
- <form name="LastScheduleForm">
- <label for="dateSelect"> Last Schedule: </label>
- </form>
- </td>
- <td>
- <div >
- <input class="span12" id="datepicker2" type="text" ng-model="dt2" b2b-datepicker>
- </div>
- </td>
- <td>
- <div class="span12">
- <div class="form-row">
- <select name="dropdown1" b2b-dropdown ng-model="selectLastHour">
- <option b2b-dropdown-list option-repeat="d in hours" value="{{d.value}}" init-value="{{selectLastHour.title}}" placeholder="Select an Option">{{d.title}}</option>
- </select>
- </div>
- </div>
- </td>
- <td>
- <div class="span12">
- <div class="form-row">
- <select name="dropdown1" b2b-dropdown ng-model="selectLastMinute">
- <option b2b-dropdown-list option-repeat="d in minutes" value="{{d.value}}" init-value="{{selectLastMinute.title}}" placeholder="Select an Option">{{d.title}}</option>
- </select>
- </div>
- </div>
- </td>
- :
-
- </tr>
-<tr>
-
-</tr>
-
-</table>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button" ng-click="ok()">OK</button>
- <button class="btn btn-medium" type="button"
- ng-click="cancel()">Cancel</button>
- </div>
- </div>
-
- </form>
- <br />
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/b2b-leftnav-ext.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/b2b-leftnav-ext.html
deleted file mode 100644
index 5337fd24..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/b2b-leftnav-ext.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<div class="b2b-nav-menu" id="left-menu-main-div"
- ng-class="leftMenuClass">
- <div class="b2b-subnav-container" id="left-menu-subnav-container">
- <ul class="b2b-subnav-content" id="left-menu-subnav-content">
- <li id="b2b-subnav-content-li">
- <div ng-class="leftMenuArrowClass" id="left-menu-arrow-toggle-div">
- <a ng-click="toggleDrawer(showmenu);" class="text-right"
- id="left-menu-arrow-toggle-anchor"> <i
- ng-class="{true: 'icon-controls-left', false: 'icon-controls-right'}[showmenu]"
- id="left-menuf-arrow-toggle-icon">&nbsp;</i>
- </a>
- </div>
- </li>
- <li ng-repeat="menu in menuData"
- ng-click="toggleNav($index,menu.href,showmenu)"
- id="left-menu-li-{{menu.name.split(' ').join('-')}}"><span
- ng-class="{true: 'menu-icon', false: 'menu-icon-collapse'}[showmenu]"
- id="left-menu-span-{{menu.name.split(' ').join('-')}}"> <span
- class="{{menu.imageSrc}}"
- id="icon-image-{{menu.name.split(' ').join('-')}}"></span>&nbsp;&nbsp;
- </span> <a ng-class="{expand: isOpen($index)}"
- id="parent-item-{{menu.name.split(' ').join('-')}}" ng-if="showmenu"
- aria-label="{{menu.name}}" title="{{menu.name}}"
- aria-expanded="{{(idx==$index)?true:false;}}"
- href="javascript:void(0);"> {{menu.name}} <i aria-hidden="true"
- ng-if="(menu.menuItems.length > 0)"
- class="b2b-icon-primary-plus-minus"
- ng-class="idx==$index ? 'icon-primary-expanded' : 'icon-primary-collapsed'"></i>
- </a>
- <div role="region" aria-hidden="{{(isOpen($index))?false:true;}}"
- id="left-menu-child-div-{{menu.name.split(' ').join('-')}}">
- <div class="left-menu-child">
- <ul ng-class="{expand: idx==$index}"
- id="left-menu-child-ul-{{menu.name.split(' ').join('-')}}">
- <li ng-repeat="menuItem in menu.menuItems"
- ng-click="liveLink($event, $index, $parent.$index)"
- id="left-menu-child-li-{{menuItem.name.split(' ').join('-')}}-{{menu.name.split(' ').join('-')}}">
- <a aria-hidden="{{!(idx==$parent.$index)}}"
- aria-label="{{menuItem.name}}" title="{{menuItem.name}}"
- id="child-item-{{menuItem.name.split(' ').join('-')}}"
- href="{{menuItem.href}}"
- tabindex="{{(idx==$parent.$index)?0:-1;}}"
- ng-class="{active: itemIdx==$index && navIdx==$parent.$index}">{{menuItem.name}}</a>
- </li>
- </ul>
- </div>
- </div></li>
- </ul>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-content.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-content.html
deleted file mode 100644
index 23d138eb..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-content.html
+++ /dev/null
@@ -1,146 +0,0 @@
-<div id="page-content" class="content">
- <div>
- <h2>Bootstrap Sample Page</h2>
-
- <!-- dropdown sample -->
- <h3>Bootstrap Dropdowns</h3>
- <div class="dropdown">
- <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
- Dropdown
- <span class="caret"></span>
- </button>
- <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
- <li><a href="#">Action</a></li>
- <li><a href="#">Another action</a></li>
- <li><a href="#">Something else here</a></li>
- <li role="separator" class="divider"></li>
- <li><a href="#">Separated link</a></li>
- </ul>
- </div>
-
-
- <!-- Button group -->
- <h3>Bootstrap Button Group</h3>
- <div class="btn-group" role="group" aria-label="...">
- <button type="button" class="btn btn-default">Left</button>
- <button type="button" class="btn btn-default">Middle</button>
- <button type="button" class="btn btn-default">Right</button>
- </div>
-
- <!-- Single button dropdowns -->
- <h3>Single Button Dropdowns</h3>
- <div class="btn-group">
- <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
- Action <span class="caret"></span>
- </button>
- <ul class="dropdown-menu">
- <li><a href="#">Action</a></li>
- <li><a href="#">Another action</a></li>
- <li><a href="#">Something else here</a></li>
- <li role="separator" class="divider"></li>
- <li><a href="#">Separated link</a></li>
- </ul>
- </div>
-
- <!-- Table -->
- <h3>Table Sample</h3>
- <div class="panel panel-default">
- <!-- Default panel contents -->
- <div class="panel-heading">Table heading</div>
- <div class="panel-body">
- <p>Table description </p>
- </div>
-
- <!-- Table -->
- <table class="table">
- <thead>
- <tr>
- <th>#</th>
- <th>First Name</th>
- <th>Last Name</th>
- <th>Username</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Mark</td> <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td>Larry</td>
- <td>the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
- </table>
- </div>
-
-
- <!-- Checkboxes and radio addons -->
- <h3>Checkboxes and radio addons</h3>
- <p>In order to make bootstrap checkbox and radio button appear, please make sure b2b-bootstrap-common.css in app/fusion/external/ds2-bootstrap directory is included in the main HTML page.</p>
-
- <p>checkbox</p>
- <div class="form-check">
- <label class="form-check-label">
- <input type="checkbox" class="form-check-input">
- Y/N
- </label>
- </div>
-
- <div>
- <p>radio button</p>
- <div class="radio">
- <label><input type="radio" name="optradio">Option 1</label>
- </div>
- <div class="radio">
- <label><input type="radio" name="optradio">Option 2</label>
- </div>
- <div class="radio disabled">
- <label><input type="radio" name="optradio" disabled>Option 3 (disabled)</label>
- </div>
- </div>
-
- <div class="row">
- <div class="col-lg-6">
- <div class="input-group"> <span class="input-group-addon"> <input type="checkbox" aria-label="Checkbox for following text input"> </span> <input class="form-control" aria-label="Text input with checkbox"> </div>
- </div>
- <div class="col-lg-6">
- <div class="input-group"> <span class="input-group-addon"> <input type="radio" aria-label="Radio button for following text input"> </span> <input class="form-control" aria-label="Text input with radio button"> </div>
- </div>
- </div>
-
- <h3>Available variations</h3>
- <div>
- <span class="label label-default">Default</span>
- <span class="label label-primary">Primary</span>
- <span class="label label-success">Success</span>
- <span class="label label-info">Info</span>
- <span class="label label-warning">Warning</span>
- <span class="label label-danger">Danger</span>
- </div>
-
- <h3>Checkbox</h3>
- <div class="checkbox">
- <label>
- <input type="checkbox" value="">
- Option one is this and that&mdash;be sure to include why it's great
- </label>
- </div>
- <div class="checkbox disabled">
- <label>
- <input type="checkbox" value="" disabled>
- Option two is disabled
- </label>
- </div>
-
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-page.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-page.html
deleted file mode 100644
index 6a3660da..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-page.html
+++ /dev/null
@@ -1,146 +0,0 @@
-<!DOCTYPE html>
-<!-- Single-page application for EPSDK-App welcome page using DS2 look and feel. X-->
-<html>
-<head>
- <meta charset="ISO-8859-1">
- <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
-
- <title>Welcome</title>
-
- <!-- B2b Library -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/font_icons.css">
-
- <!-- icons in open source -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ionicons.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css">
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/angular-bootstrap/ui-bootstrap-csp.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/angular-gridster/dist/angular-gridster.min.css">
- <link rel="stylesheet" type="text/css" href="static/fusion/sample/css/scribble.css" />
- <link rel="stylesheet" type="text/css" href="static/fusion/sample/css/welcome.css" />
-
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/bootstrap-3.3.7/css/bootstrap.min.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2-bootstrap/b2b-bootstrap-common.css">
- <!-- Common scripts -->
- <script src="app/fusion/external/angular-1.4.13/angular.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
- <script src="app/fusion/external/jquery/dist/jquery.min.js"></script>
- <script src="app/fusion/external/javascript-detect-element-resize/jquery.resize.js"></script>
- <script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
-
- <!-- EPSDK App scripts and common services -->
- <!-- B2b Library -->
- <script src="app/fusion/external/b2b/js/b2b-angular/b2b-library.min.js"></script>
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/headerServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/manifestService.js"></script>
-
- <script src="app/fusion/scripts/DS2-directives/footer.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2Header.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2LeftMenu.js"></script>
- <script src="app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js"></script>
- <script src= "app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
-
- <!-- Page specific items -->
- <script src="app/fusion/scripts/DS2-controllers/bootstrap-sample-controller.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/bootstrap-sample-route.js"></script>
- <script src="app/fusion/external/bootstrap-3.3.7/js/bootstrap.min.js"></script>
-
-<style>
-.controls {
- margin-bottom: 20px;
-}
-.page-header {
- margin-top: 20px;
-}
-ul {
- list-style: none;
-}
-.box {
- height: 100%;
- border: 1px solid #ccc;
- background-color: #fff;
- position: relative;
- overflow: hidden;
-}
-.box-header {
- background-color: #eee;
- padding: 0px 0px 0px 0px;
-/* border-bottom: 1px solid #ccc; */
- margin-bottom: -25px;
- cursor: move;
- position: relative;
-}
-.box-header h3 {
- margin-top: 0px;
- display: inline-block;
-}
-.box-content {
- padding: 10px;
- display:block;
- height: 100%;
- position: relative;
- overflow-x:auto;
- overflow-y:auto;
-}
-.box-header-btns {
- top: 15px;
- right: 10px;
- cursor: pointer;
- position: absolute;
-}
-
-.gridster {
- border: none;
- position:relative;
-}
-
-.box-content .box-content-frame{
-}
-
-.box table{
-border:none;
-display:block;
-}
-
-.box table tr{
-line-height:20px;
-}
-
-.box table th{
-border:none;
-line-height:20px;
-}
-
-.menu-container{
-margin-top:0px
-}
-
-.handle-e {
-width:3px;
-}
-
-
-
-</style>
-
-</head>
- <body class="appBody" ng-app="abs">
- <!-- commented the header for now to avoid duplicate headers on portal -->
- <div ds2-Header class="header-container" ></div>
- <div ds2-menu id="menuContainer" class="menu-container"></div>
- <div ng-view id="rightContentProfile" class="content-container"></div>
- <div ds2-Footer class="footer-container"></div>
- </body>
-</html>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin-menu-edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin-menu-edit.html
deleted file mode 100644
index 913b10ed..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin-menu-edit.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<div id="page-content">
- <div>
- <h1 class="heading-page" id="AdminMenuItems">Admin Menu Items</h1>
- </div>
- <div>
- <button type="submit" ng-click="addNewFnMenuItemModalPopup();" class="btn btn-alt btn-small" style="position: initial;">Add Menu Item</button>
- </div>
-
- <h3 class="heading-small">
- Existing menu items
- </h3>
-
- <div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img" aria-label="Please wait while we load your content"></i>
- </div>
-
- <div ng-hide="showLoader">
- <table>
- <thead>
- <tr>
- <th sortable="true" key="id" default-sort="a">Menu ID</th>
- <th sortable="true" key="label">Label</th>
- <th sortable="true" key="ParentId">ParentId</th>
- <th sortable="true" key="sortOrder">Sort Order</th>
- <th sortable="true" key="action">Action</th>
- <th sortable="true" key="functionCd">Function</th>
- <th sortable="true" key="active">Active</th>
- <th sortable="true" key="servlet">Servlet</th>
- <th sortable="true" key="queryString">Query String</th>
- <th sortable="true" key="externalUrl">External URL</th>
- <th sortable="true" key="target">Target</th>
- <th sortable="true" key="menuSetCode">Menu Set Code</th>
- <th sortable="true" key="separator">Separator</th>
- <th sortable="true" key="imageSrc">Image Source</th>
- <th sortable="false" key="edit">Edit</th>
- <th sortable="false" key="delete">Delete</th>
- </tr>
- </thead>
- <tbody ng-repeat="fnMenuItem in tableFnMenuItems" >
- <tr>
- <td ng-bind="fnMenuItem.id"></td>
- <td ng-bind="fnMenuItem.label"></td>
- <td style="word-break: break-all;" ng-bind="fnMenuItem.parentId"></td>
- <td style="word-break: break-all;" ng-bind="fnMenuItem.sortOrder"></td>
- <td ng-bind="fnMenuItem.action"></td>
- <td ng-bind="fnMenuItem.functionCd"></td>
- <td style="word-break: break-all;" ng-bind="fnMenuItem.active ? 'Y' : 'N'"></td>
- <td style="word-break: break-all;" ng-bind="fnMenuItem.servlet"></td>
- <td style="word-break: break-all;" ng-bind="fnMenuItem.queryString"></td>
- <td style="word-break: break-all;" ng-bind="fnMenuItem.externalUrl"></td>
- <td style="word-break: break-all;" ng-bind="fnMenuItem.target"></td>
- <td style="word-break: break-all;" ng-bind="fnMenuItem.menuSetCode"></td>
- <td style="word-break: break-all;" ng-bind="fnMenuItem.separator ? 'Y' : 'N'"></td>
- <td style="word-break: break-all;" ng-bind="fnMenuItem.imageSrc"></td>
- <td >
- <div ng-click="editMenuItemModalPopup(fnMenuItem);"
- style="font-size: 20px;"><a href="javascript:void(0)" class="icon-misc-pen"></a>
- </div>
- </td>
- <td>
- <div ng-click="removeMenuItem(fnMenuItem);"><a href="javascript:void(0)" class="icon-misc-trash"></a>
- </div>
- </td>
- </tr>
- </tbody>
- </table>
-
- <div class="well" style="padding-bottom: 35px;">
- <div class="row ddh-page short">
- <div b2b-pagination="" total-pages="totalPages1"
- current-page="currentPage1" click-handler="customHandler1"
- role="navigation" aria-label="Customer Data Pages"></div>
- </div>
-
- <!-- <div class="row span10 offset1">
- <div class="span6">
- <div class="form-row">
- <label for="totalPages1">Total Pages:</label>
- <div class="field-group">
- <input id="totalPages1" type="number" class="span12"
- only-digits="" name="totalPages1" ng-model="totalPages1"
- title="Total Pages {{totalPages1}}"style="pointer-events: none;">
- </div>
- </div>
- </div>
- <div class="span6 font-clearview">
- <div class="form-row">
- <label for="currentPage1">Current Page:</label>
- <div class="field-group">
- <input id="currentPage1" type="number" class="span12"
- only-digits="" name="currentPage1" ng-model="currentPage1"
- title="Current Page {{currentPage1}}">
- </div>
- </div>
- </div>
- </div> -->
- </div>
- </div>
-
-</div>
-
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin.html
deleted file mode 100644
index 1c623af3..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE html>
-<!-- Single-page application for EPSDK-App admin pages using DS2 look and feel -->
-<html>
-<head>
- <meta charset="ISO-8859-1">
- <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
-
- <title>Admin</title>
-
- <!-- B2b Library -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/font_icons.css">
-
- <!-- icons in open source -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ionicons.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css">
-
-
-
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
-
- <!-- Common scripts -->
- <script src="app/fusion/external/angular-1.4.13/angular.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
- <script src="app/fusion/external/jquery/dist/jquery.min.js"></script>
-
- <script src="app/fusion/external/javascript-detect-element-resize/jquery.resize.js"></script>
- <script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
-
- <!-- B2b Library -->
- <script src="app/fusion/external/b2b/js/b2b-angular/b2b-library.min.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/headerServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/manifestService.js"></script>
-
- <script src="app/fusion/scripts/DS2-directives/footer.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2Header.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2LeftMenu.js"></script>
- <script src="app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js"></script>
- <!-- Page-specific items -->
- <script src="app/fusion/scripts/DS2-controllers/admin-controller.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/admin-route.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/admin-menu-edit.js"></script>
- <script src="app/fusion/scripts/DS2-services/adminService.js"></script>
- <script src="app/fusion/scripts/DS2-services/adminMenuService.js"></script>
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/usage-list-controller.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/fn-menu-add-popup-controller.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/collaborate-list-controller.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/admin-closed-cloop.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/admin-whitelist.js"></script>
-
-</head>
- <body class="appBody" ng-app="abs">
- <div ds2-Header class="header-container" ></div>
- <div ds2-menu id="menuContainer" class="menu-container" ></div>
- <div ng-view id="rightContentProfile" class="content-container"></div>
- <div ds2-Footer class="footer-container"></div>
- </body>
-</html>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin_closed_loop.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin_closed_loop.html
deleted file mode 100644
index 4f65e7b3..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin_closed_loop.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<div style=" margin-right:50px;" id="fnMenueContent">
- <div id="page-content" class="pageTitle" align="left">
-
- <h1 class="heading1" style="margin-top:20px;">Closed Loop</h1>
- <br/>
- <br>
- </div>
- <div id="page-content" style="margin-right: 20px;text-align: justify;text-align-last:auto;">
- Cloop Server
- </div>
- <br>
- <div id="hiddenCamundaDiv" style="width:500px;"></div>
- <br>
- <iframe id="camundaFrame" style=" margin-left: 250px;"
- ng-src="{{camunda_cockpit_url}}"
- width="100%" height="500"></iframe>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html
deleted file mode 100644
index 05c316c8..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html
+++ /dev/null
@@ -1,76 +0,0 @@
-
-<div id="page-content">
- <div>
- <div align="right">
- <a href="JavaScript:void(0);" style= "color:#00547A" onClick="downloadScreenCaptureExtenstion()" id="install-button" >
- Please download the extension for ScreenCapture and refresh page</a>
- </div>
- <div>
- <h1 class="heading-page">User List</h1>
- </div>
- <div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img" aria-label="Please wait while we load your content"></i>
- </div>
- <div>
-
- <table class="striped" table-data="tableCollbItems">
-
- <thead>
- <tr>
- <th key="id">User ID</th>
- <th key="lastName">Last Name</th>
- <th key="firstName">First Name</th>
- <th key="email">Email</th>
- <th key="orgUserId">Organization User ID</th>
- <th key="online">Online/Offline</th>
- </tr>
-
- </thead>
- <tbody type="body" ng-repeat="rowData in tableCollbItems">
- <tr>
- <td ng-bind="rowData['id']">{{rowData.id}}</td>
- <td ng-bind="rowData['lastName']">{{rowData.lastName}}</td>
- <td ng-bind="rowData['firstName']">{{rowData.firstName}}</td>
- <td ng-bind="rowData['email']">{{rowData.email}}</td>
- <td ng-bind="rowData['orgUserId']">{{rowData.loginId}}</td>
- <td>
- <div ng-hide="rowData.online" ng-click="rowData.isActive=true;openCollaboration(rowData.chatId)"><span class="icon-misc-lightsoff" ></span>Offline</div>
- <div ng-show="rowData.online"ng-click="rowData.isActive=false;openCollaboration(rowData.chatId)"><span class="icon-misc-bulb" ></span>Online</div>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
-
- <div class="well" style="padding-bottom: 35px;">
- <div class="row">
- <div b2b-pagination="" total-pages="totalPages1"
- current-page="currentPage1" click-handler="customHandler1"
- role="navigation" aria-label="Customer Data Pages"></div>
- </div>
-
- <!-- <div class="row span10 offset1">
- <div class="span6">
- <div class="form-row">
- <label for="totalPages1">Total Pages:</label>
- <div class="field-group">
- <input id="totalPages1" type="number" class="span12"
- only-digits="" name="totalPages1" ng-model="totalPages1"
- title="Total Pages {{totalPages1}}"style="pointer-events: none;">
- </div>
- </div>
- </div>
- <div class="span6 font-clearview">
- <div class="form-row">
- <label for="currentPage1">Current Page:</label>
- <div class="field-group">
- <input id="currentPage1" type="number" class="span12"
- only-digits="" name="currentPage1" ng-model="currentPage1"
- title="Current Page {{currentPage1}}">
- </div>
- </div>
- </div>
- </div> -->
- </div>
- </div>
-<div id="peerBroadcastSection"></div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaboration.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaboration.html
deleted file mode 100644
index 619dec21..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaboration.html
+++ /dev/null
@@ -1,176 +0,0 @@
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/font_icons.css">
-
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
-
- <style type="text/css">
- /*
- * NOTE: All CSS is purely cosmetic - it does not affect functionality
- * http://layout.jquery-dev.com/demos.cfm
- */
-
- /* customize borders to avoid double-borders around inner-layouts */
- .ui-layout-pane {
- border: 0; /* override layout-default-latest.css */
- border-top: 1px solid #BBB;
- border-bottom: 1px solid #BBB;
- }
- .ui-layout-pane-north ,
- .ui-layout-pane-south {
- border: 1px solid #BBB;
- overflow: auto;
- }
- .ui-layout-pane-west ,
- .ui-layout-pane-east {
- }
- .ui-layout-pane-center {
- border-left: 0;
- border-right: 0;
- }
- .inner-center {
- border: 1px solid #BBB;
- }
-
- /* add shading to outer sidebar-panes */
- .outer-west ,
- .outer-east {
- background-color: #EEE;
- }
- .middle-west ,
- .middle-east {
- background-color: #F8F8F8;
- }
-
- /* remove padding & scrolling from panes that are 'containers' for nested layouts */
- .outer-center ,
- .middle-center {
- border: 0; /* cosmetic */
- padding: 0;
- overflow: auto;
- }
-
- /*
- * customize borders on panes/resizers to make pretty
- */
- .ui-layout-pane-west { border-right: 0; }
- .ui-layout-resizer-west { border-left: 1px solid #BBB; }
- .ui-layout-pane-east { border-left: 0; }
- .ui-layout-resizer-east { border-right: 1px solid #BBB; }
- .ui-layout-pane-north { border-bottom: 0; }
- .ui-layout-resizer-north { border-top: 1px solid #BBB; }
- .ui-layout-pane-south { border-top: 0; }
- .ui-layout-resizer-south { border-bottom: 1px solid #BBB; }
- /*
- * add borders to resizers when pane is 'closed'
- *
- *.ui-layout-resizer-closed { border: 1px solid #BBB; }
- */
- /*
- * show both borders when the resizer is 'dragging'
- */
- .ui-layout-resizer-west-dragging ,
- .ui-layout-resizer-east-dragging {
- border-left: 1px solid #BBB;
- border-right: 1px solid #BBB;
- }
- .ui-layout-resizer-north-dragging ,
- .ui-layout-resizer-south-dragging {
- border-top: 1px solid #BBB;
- border-bottom: 1px solid #BBB;
- }
-
-
- /*
- layout toggler background image
- */
- .ui-layout-toggler-west, .ui-layout-toggler-east {
- border-width: 1px 0;
- background-image: url("static/fusion/images/layout/panel-e-w-toggle.png");
- background-size: 10px 10px;
- background-repeat: no-repeat;
- background-position: center;
- }
-
- .ui-layout-toggler-north, .ui-layout-toggler-south {
- border-width: 0 1px;
- background-image: url("static/fusion/images/layout/panel-n-s-toggle.png");
- background-size: 10px 10px;
- background-repeat: no-repeat;
- background-position: center;
- }
-
- body{background-color:#fff;font-size:14px;font-size:.875rem;margin:0;padding:0px 0 20px;position:relative}
-
- </style>
-<!-- LAYOUT v 1.3.0 -->
- <script type="text/javascript" src="app/fusion/scripts/layout/jquery-latest.js"></script>
- <script type="text/javascript" src="app/fusion/scripts/layout/jquery-ui-latest.js"></script>
- <script type="text/javascript" src="app/fusion/scripts/layout/jquery.layout-latest.js"></script>
- <script type="text/javascript" src="app/fusion/scripts/webrtc/RTCMultiConnection.js"></script>
- <script type="text/javascript" src="app/fusion/scripts/socket/peerBroadcast.js"></script>
- <script type="text/javascript" src="app/fusion/scripts/layout/debug.js"></script>
-
- <script src="app/fusion/external/angular-1.4.13/angular.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
-
-
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
-
-
- <script type="text/javascript" src= "app/fusion/scripts/DS2-controllers/collaboration-controller.js"></script>
-
-<div class="outer-center" style="position: absolute; left: 12px; right: 0px; top: 0px;bottom: 0px;">
- <div class="inner-center">
-
- <!-- <jsp:include page="/WEB-INF/fusion/zul/chatOne.zul" /> -->
-
-
-
- <table style="width: 100%;">
- <tbody><tr>
- <td>
- <button type="button" id="share-screen" class="btn btn-alt btn-small setup">Start Session</button>
- <button id="stop-share-screen" class="btn btn-alt btn-small setup">Stop Session</button>
- <button id="view-screen" class="btn btn-alt btn-small setup">View</button>
-
- </td>
-
- </tr>
- </tbody>
-
- <tbody><tr>
- <td>
- <input type="text" id="chat-input" style="font-size: 1.2em;visibility:collapse;" placeholder="type here.."/>
- <div id="chat-output"></div>
- </td>
- </tr>
- </tbody>
- </table>
-
-
- </div>
- <div id="inner-south" class="ui-layout-south">
- <div class="videoContainer1"></div>
- <div class="videoContainer2"></div>
-
- </div>
-</div>
-
-<div class="outer-west">
- <div class="screenContainer1"></div>
- <div class="screenContainer2"></div>
- <div ng-controller="collaborationControllerDS2">
- </div>
-</div>
-
-
-
-
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/jcs_admin.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/jcs_admin.html
deleted file mode 100644
index fd8a5302..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/jcs_admin.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<div id="page-content" style=" width: 100%">
-
- <div>
- <h1 class="heading-page" id="CacheRegions">Cache Regions</h1>
- </div>
-
- <div style="margin-right:20px; text-align:justify; text-align-last:auto;">
- <p>
- These are the regions which are currently defined in the cache. 'Items' and 'Bytes' refer to the elements currently in memory (not spooled).
- You can clear all items for a region by clicking on the Clear icon next to the desired region below. You can also <a href="admin#/jcs_admin" ng-click="clearAllFuncPopUp();">clear all regions</a>
- which empties the entire cache.</p>
- </div>
-
- <!-- This implements an accordion table in place -->
- <div style="border-top: 1px solid #c4c4c4; margin-top: 0px; margin-bottom:30px; margin-right: 20px; background-color: #fff; padding: 10px 0; color: #646464s">
- <div class="row" style="margin: 0 20px 10px 0px; float: left; width: 97%;">
- <div class="col-md-4" style=" width: 16.6666666667%;"><b>Cache Name</b></div>
- <div class="col-md-2" style=" width: 8.3333333333%;"><b># of Items</b></div>
- <div class="col-md-2" style=" width: 8.3333333333%;"><b>Bytes</b></div>
- <div class="col-md-2" style=" width: 8.3333333333%;"><b>Status</b></div>
- <div class="col-md-3" style=" width: 12.5%;"><b>Memory Hits</b></div>
- <div class="col-md-3" style=" width: 12.5%;"><b>Aux Hits</b></div>
- <div class="col-md-3" style=" width: 12.5%;"><b>Not Found Misses</b></div>
- <div class="col-md-3" style=" width:12.5%;"><b>Expired Misses</b></div>
- <div class="col-md-1" style=" width: 4.1666666667%;"><b>Clear?</b></div>
- <div class="col-md-1" style=" width: 4.1666666667%;"><b>Items</b></div>
- </div>
-
- <div ng-repeat="region in regions">
- <div class="row" style="margin: 0 20px 10px 0px; float: left; width: 97%;">
- <div class="col-md-4" style=" width: 16.6666666667%;">
- <a b2b-tooltip="Click to Show Region Details" ng-click="showRegionDetails(region.cacheName);" href="admin#/jcs_admin">{{region.cacheName}}</a></div>
- <div class="col-md-2" style=" width: 8.3333333333%;">{{region.size}}</div>
- <div class="col-md-2" style=" width: 8.3333333333%;">{{region.byteCount}}</div>
- <div class="col-md-2" style=" width: 8.3333333333%;">{{region.status}}</div>
- <div class="col-md-3" style=" width: 12.5%;">{{region.hitCountRam}}</div>
- <div class="col-md-3" style=" width: 12.5%;">{{region.hitCountAux}}</div>
- <div class="col-md-3" style=" width: 12.5%;">{{region.missCountNotFound}}</div>
- <div class="col-md-3" style=" width: 12.5%;">{{region.missCountExpired}}</div>
- <div class="col-md-1" style=" width: 4.1666666667%;">
- <div ng-click="clearRegionFuncPopUp(region.cacheName);" style="font-size:20px;">
- <a href="javascript:void(0)" class="icon-misc-trash"></a></div>
- </div>
- <div class="col-md-1"><i class="icon-primary-accordion-plus" ng-class="{true: 'icon-primary-accordion-plus', false: 'icon-primary-accordion-minus'}[ !bling$index]" ng-click="bling$index = !bling$index" style="display: block;"></i></div>
- </div>
- <div class="row" style="margin: 0px 20px 0px 30px; float: left; width: 95%; border-top: 1px solid #e4e4e4; padding-top: 10px"
- ng-show="bling$index">
- <span style="height: 20px; width: 20px; display: inline-block; float: left"></span>
- <div class="col-md-12" style=" width: 50%;"><b>Key</b></div>
- <div class="col-md-2" style=" width: 8.3333333333%"><b>Eternal?</b></div>
- <div class="col-md-4" style=" width: 16.6666666667%;"><b>Created</b></div>
- <div class="col-md-2" style=" width: 8.3333333333%;"><b>Max Life</b></div>
- <div class="col-md-2" style=" width: 8.3333333333%;"><b>Expires</b></div>
- <div class="col-md-1" style=" width: 4.1666666667%;"><b>Clear?</b></div>
- </div>
- <div ng-repeat="item in region.items">
- <div class="row" style="margin: 0px 20px 0px 30px; float: left; width: 95%;" ng-show="bling$index">
- <span style="height: 20px; width: 20px; display: inline-block; float: left"></span>
- <div class="col-md-12" style=" width: 50%;"><a href="#" tooltip="Click to Show Item Details" ng-click="showItemDetails(region.cacheName,item.key);">{{item.key}}</a></div>
- <div class="col-md-2" style=" width: 8.3333333333%;">{{item.eternal}}</div>
- <div class="col-md-4" style=" width: 16.6666666667%;">{{item.createTime}}</div>
- <div class="col-md-2" style=" width: 8.3333333333%;">{{item.maxLifeSeconds}}</div>
- <div class="col-md-2" style=" width: 8.3333333333%;">{{item.expiresInSeconds}}</div>
- <div class="col-md-1" style=" width: 4.1666666667%;">
- <div ng-click="clearItemFuncPopUp(region.cacheName,item.key);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-misc-trash"></a></div>
- </div>
- </div>
- </div>
- <div style="clear: both"></div>
- </div>
-
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/admin-menu-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/admin-menu-del-confirm.html
deleted file mode 100644
index 5d6cb16c..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/admin-menu-del-confirm.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope">
- <h2 id="myModalLabel" modal-title=""> Menu Item Deletion</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 145px;">
- You are about to delete '{{fnMenuItem.label}}' Menu Item. Please click 'OK' to continue.
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button"
- ng-click="deleteMenuItem(fnMenuItem);">Ok</button>
- <button class="btn btn-small" type="button"
- ng-click="$dismiss('cancel')">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-confirm.html
deleted file mode 100644
index d3eda5e4..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-confirm.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope">
- <h2 id="myModalLabel" modal-title="">Clear All Cache Regions</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 145px;">
- You are about to clear all cache regions. Please click 'OK' to continue.
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button"
- ng-click="deleteFun(roleFun);">Ok</button>
- <button class="btn btn-small" type="button"
- ng-click="$dismiss('cancel')">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-region-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-region-confirm.html
deleted file mode 100644
index 5f43e2a0..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-region-confirm.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope">
- <h2 id="myModalLabel" modal-title="">Clear Cache Region</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 145px;">
- You are about to clear all of the items in the cache region {{msg.text}}. Please click 'OK' to continue.
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button"
- ng-click="deleteFun(roleFun);">Ok</button>
- <button class="btn btn-small" type="button"
- ng-click="$dismiss('cancel')">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/clearItem-region-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/clearItem-region-confirm.html
deleted file mode 100644
index 004b49d8..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/clearItem-region-confirm.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope">
- <h2 id="myModalLabel" modal-title="">Clear Item Cache Region</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 145px;">
- You are about to clear this item from the cache region {{msg.text}}. Please click 'OK' to continue.
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button"
- ng-click="deleteFun(roleFun);">Ok</button>
- <button class="btn btn-small" type="button"
- ng-click="$dismiss('cancel')">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/collaborate-list-toggle-profile-active-status.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/collaborate-list-toggle-profile-active-status.html
deleted file mode 100644
index 6a91cb0a..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/collaborate-list-toggle-profile-active-status.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope">
- <h2 id="myModalLabel" modal-title="">Change User Status</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 145px;">
- You are about to change user's active status. Please click 'OK' to continue.
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button"
- ng-click="deleteFun(roleFun);">Ok</button>
- <button class="btn btn-small" type="button"
- ng-click="$dismiss('cancel')">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fn-menu-edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fn-menu-edit.html
deleted file mode 100644
index 2ccdf2af..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fn-menu-edit.html
+++ /dev/null
@@ -1,129 +0,0 @@
-<script type="text/ng-template" id="edit_menu_item_popup.html">
-
- <div class="modal__informative font-showcase" style="width:1100px;">
- <div class="modal__header">
- <h2 class="font-showcase-font-name" style="width: 500px;">{{label}}</h2>
- </div>
- <div class="divider-container"><hr> </div>
-
- <div class="modal__content" >
- <table>
- <tr>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Label:</label><br>
- <input id="popupAddMenuItemLabel" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.label" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" style = "display:none" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Parent:</label><br>
- <input id="popupAddMenuItemParentId" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.parentId" ng-disabled="disableParentId" maxlength="30" />
- </div>
- <div class="fn-ebz-container" ng-init="getParentData();">
- <form name="parentListForm">
- <label class="fn-ebz-text-label" for="parentSelect"><sup><b>*</b></sup>Parent:</label><br>
- <select class="form-field" name="parentSelect" id="parentSelect" ng-model="addFnMenuItem.parentId">
- <option>{{getParentLabel(addFnMenuItem.parentId, parentListSelectData)}}</option>
- <option ng-repeat="option in parentListSelectData" value="{{option[0]}}" "{{(addFnMenuItem.parentId===option[0]) ? 'selected' : '' }}">{{option[1]}}</option>
- </select>
- </form>
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Sort Order:</label><br>
- <input id="popupAddMenuItemSortOrder" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.sortOrder" ng-disabled="disableSortOrder" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Action:</label><br>
- <input id="popupAddMenuItemAction" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.action" ng-disabled="disableAction" maxlength="30" />
- </div>
- </td>
- </tr>
-
- <tr>
- <td>
- <div class="fn-ebz-container" ng-init="getFunctionCDselectData();">
- <form name="functionCDform">
- <label class="fn-ebz-text-label" for="repeatSelect"><sup><b>*</b></sup>Function:</label><br>
- <select class="form-field" name="repeatSelect" id="repeatSelect" ng-model="addFnMenuItem.functionCd">
- <option>{{addFnMenuItem.functionCd}}</option>
- <option ng-repeat="option in functionCDselectData" value="{{option}}" >{{option}}</option>
- </select>
- </form>
- </div>
- </td>
- <td>
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Active:</label><br>
- <select class="form-field" name="selectActive" ng-model="addFnMenuItem.active">
- <option ng-repeat="active in activeStatusOptions" value="{{active.value}}" ng-selected="{{active.value}}=={{addFnMenuItem.active}}" >{{active.title}}</option>
- </select>
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Servlet:</label><br>
- <input id="popupAddMenuItemServlet" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.servlet" ng-disabled="disableServlet" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Query String:</label><br>
- <input id="popupAddMenuItemQueryString" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.queryString" ng-disabled="disableQueryString" maxlength="30" />
- </div>
- </td>
- </tr>
-
- <tr>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>External URL:</label><br>
- <input id="popupAddMenuItemExternalUrl" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.externalUrl" ng-disabled="disableExternalUrl" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Target:</label><br>
- <input id="popupAddMenuItemTarget" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.target" ng-disabled="disableTarget" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Menu Set Code:</label><br>
- <input id="popupAddMenuItemMenuSetCode" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.menuSetCode" ng-disabled="disableMenuSetCode" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Separator:</label><br>
- <select class="form-field" name="select" ng-model="addFnMenuItem.separator">
- <option ng-repeat="separator in separatorStatusOptions" value="{{separator.value}}" ng-selected="{{separator.value}}=={{addFnMenuItem.separator}}" >{{separator.title}}</option>
- </select>
- </div>
- </td>
- </tr>
-
- <tr>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Image Source:</label><br>
- <input id="popupAddMenuItemImageSrc" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.imageSrc" ng-disabled="disableImageSrc" maxlength="30" />
- </div>
- </td>
- </tr>
- </table>
- </div>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="updateFnMenu(addFnMenuItem);">Save</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="close()">Close</button>
- <!--
- <div class="modal__footer">
- </div>
- -->
- </div>
-</script>
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fnmenu-add.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fnmenu-add.html
deleted file mode 100644
index 167defb7..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fnmenu-add.html
+++ /dev/null
@@ -1,136 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope">
- <h2 id="myModalLabel" modal-title="">{{label}}</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope" tabindex="0"
- role="region" aria-label="Modal header text content">
-
- <table>
- <tr>
- <td>
-
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Label:</label><br>
- <input id="popupAddMenuItemLabel" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.label" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" style = "display:none" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Parent:</label><br>
- <input id="popupAddMenuItemParentId" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.parentId" ng-disabled="disableParentId" maxlength="30" />
- </div>
- <div class="fn-ebz-container" ng-init="getParentData();">
- <form name="parentListForm">
- <label class="fn-ebz-text-label" for="parentSelect"><sup><b>*</b></sup>Parent:</label><br>
- <select name="select_projects" id="select_projects" ng-model="addFnMenuItem.parentIdAsString">
-
- <optgroup label="" ng-repeat="header in childListSelectData">
- <option label="{{header.label}}" value="{{header.menuId}}" style="color:black;font-weight:bold;">{{header.label}}</option>
- <option ng-repeat="child in header.children" value="{{child.menuId}}" ng-selected="child.menuId == addFnMenuItem.parentId">{{child.label}}</option>
- </optgroup>
- </select>
- </form>
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Sort Order:</label><br>
- <input id="popupAddMenuItemSortOrder" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.sortOrder" ng-disabled="disableSortOrder" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Action:</label><br>
- <input id="popupAddMenuItemAction" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.action" ng-disabled="disableAction" maxlength="200" />
- </div>
- </td>
- </tr>
- <tr>
- <td>
- <div class="fn-ebz-container" ng-init="getFunctionCDselectData();">
- <form name="functionCDform">
- <label class="fn-ebz-text-label" for="repeatSelect"><sup><b>*</b></sup>Function:</label><br>
- <select class="form-field" name="repeatSelect" id="repeatSelect" ng-model="addFnMenuItem.functionCd">
- <option>{{addFnMenuItem.functionCd}}</option>
- <option ng-repeat="option in functionCDselectData" value="{{option}}" ng-selected="option==addFnMenuItem.functionCd">{{option}}</option>
- </select>
- </form>
- </div>
- </td>
- <td>
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Active:</label><br>
- <select class="form-field" name="selectActive" ng-model="addFnMenuItem.activeAsString" >
- <option ng-repeat="active in activeStatusOptions" value="{{active.value}}" ng-selected="{{active.value}} == {{addFnMenuItem.active}}" >{{active.title}}</option>
- </select>
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Servlet:</label><br>
- <input id="popupAddMenuItemServlet" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.servlet" ng-disabled="disableServlet" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Query String:</label><br>
- <input id="popupAddMenuItemQueryString" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.queryString" ng-disabled="disableQueryString" maxlength="30" />
- </div>
- </td>
- </tr>
- <tr>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>External URL:</label><br>
- <input id="popupAddMenuItemExternalUrl" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.externalUrl" ng-disabled="disableExternalUrl" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Target:</label><br>
- <input id="popupAddMenuItemTarget" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.target" ng-disabled="disableTarget" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Menu Set Code:</label><br>
- <input id="popupAddMenuItemMenuSetCode" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.menuSetCode" ng-disabled="disableMenuSetCode" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Separator:</label><br>
- <select class="form-field" name="select" ng-model="addFnMenuItem.separatorAsString">
- <option ng-repeat="separator in separatorStatusOptions" value="{{separator.value}}" ng-selected="{{separator.value}}=={{addFnMenuItem.separator}}" >{{separator.title}}</option>
- </select>
- </div>
- </td>
- </tr>
-
- <tr>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Image Source:</label><br>
- <input id="popupAddMenuItemImageSrc" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.imageSrc" ng-disabled="disableImageSrc" maxlength="30" />
- </div>
- </td>
- </tr>
- </table>
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button"
- ng-click="updateFnMenu(addFnMenuItem);">Save</button>
- <button class="btn btn-small" type="button"
- ng-click="$dismiss('cancel')">Cancel</button>
- </div>
- </div>
-</div>
-
-
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-child-add-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-child-add-confirm.html
deleted file mode 100644
index 8a944d76..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-child-add-confirm.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope in">
- <h1><i class="icon-primary-alert"></i></h1>
- <h2 id="myModalLabel" modal-title="">Confirm</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 55px;">
- You are about to add the child role {{msg.roleFun}} to the role for {{msg.role}}. Do you want to continue?
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button ng-if="!msg.selected" class="btn btn-alt btn-medium" type="button"
- ng-click="confirmRoleChildRemove(msg.selected,msg.availableRole,msg.availableRole.id);">Yes</button>
- <button ng-if="msg.selected" class="btn btn-alt btn-medium" type="button"
- ng-click="confirmRoleChildAdd(msg.selected,msg.availableRole,msg.availableRole.id);">Yes</button>
- <button class="btn btn-clear btn-medium" type="button"
- ng-click="$dismiss('cancel')">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-confirm-activation.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-confirm-activation.html
deleted file mode 100644
index 7a663cf3..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-confirm-activation.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope in">
- <h1><i class="icon-primary-alert"></i></h1>
- <h2 id="myModalLabel" modal-title="">Confirm</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 55px;">
- You are about to {{msg.text}} the {{msg.roleName}} role. Do you want to continue?
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-medium" type="button"
- ng-click="roleActivate(msg.selected,msg.availableRole);">Ok</button>
- <button class="btn btn-clear btn-medium" type="button"
- ng-click="cancelRoleSwitch(msg)">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-delete-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-delete-confirm.html
deleted file mode 100644
index 45e5ddfc..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-delete-confirm.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope in">
- <h2 id="heading-medium" modal-title="">Confrim</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 55px;">
- You are about to delete {{msg.roleName}} role. Click 'OK' to continue.
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-medium" type="button"
- ng-click="delRole(msg.availableRole);">Ok</button>
- <button class="btn btn-clear btn-medium" type="button"
- ng-click="$dismiss('cancel')">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-add-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-add-confirm.html
deleted file mode 100644
index ff5ac253..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-add-confirm.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope in">
- <h1><i class="icon-primary-alert"></i></h1>
- <h2 id="myModalLabel" modal-title="">Confirm</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 55px;">
- You are about to add the role function {{msg.roleFun}} to the role for {{msg.role}}. Do you want to continue?
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button ng-if="!msg.selected" class="btn btn-alt btn-medium" type="button"
- ng-click="confirmRoleFunRemove(msg.selected,msg.availableRole,msg.roleId);">Yes</button>
- <button ng-if="msg.selected" class="btn btn-alt btn-medium" type="button"
- ng-click="confirmRoleFunAdd(msg.selected,msg.availableRole,msg.roleId);">Yes</button>
- <button class="btn btn-clear btn-medium" type="button"
- ng-click="cancelRoleFunSwitch(msg)">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-role-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-role-del-confirm.html
deleted file mode 100644
index 322c6624..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-role-del-confirm.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<div>
- <div class="b2b-modal-header">
- <h2 id="myModalLabel" modal-title="">Role</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 55px;">
- You are about to delete this Role Function. Click 'OK' to continue.
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-medium" type="button"
- ng-click="roleFunRemoveRole(msg.roleFunction)">Ok</button>
- <button class="btn btn-clear btn-medium" type="button"
- ng-click="$dismiss('cancel')">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-add.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-add.html
deleted file mode 100644
index ad3d538b..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-add.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<div class = "ng-scope" style= "height: 710px"" >
- <div class="b2b-modal-header ng-scope in">
- <h2 id="myModalLabel" modal-title="">Role Function Create</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
-
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 280px;">
-
- <div class="field-group">
- <span ID="required" style="color: Red;" visible="false"> *</span>Name
- <input id="textinputID-2a" ddh-reset ng-model="roleFun['name']"
- placeholder="Name" class="span12" type="text">
- </div>
- <div class="error-container"
- ng-show="!roleFun['name']||roleFun['name']==0">
- <small id="name-required" class="err-message">Name is Required</small>
- </div>
- <br>
- <div class="field-group">
- <span ID="required" style="color: Red;" visible="false"> *</span>Code
- <input id="textinputID-2a" ddh-reset ng-model="roleFun['code']"
- placeholder="Code" class="span12" type="text">
-
- </div>
- <div class="error-container"
- ng-show="!roleFun['code']||roleFun['code']==0">
- <small id="code-required" class="err-message">Code is
- Required</small>
- </div>
- <br>
- <div class="field-group">
- <span ID="required" style="color: Red;" visible="false"> *</span>
- Type
- <div ng-repeat="radioObj in ngRepeatDemo" class="form-row"
- role="radio">
-
- <label for="{{radioObj.id}}" class="radio"> <input
- type="radio" ng-model="selectedvalueradioButtonGroup.type"
- ng-disabled="disableCd" name="nameradioButton"
- value="{{radioObj.value}}" id="{{radioObj.id}}"
- name="nameradioButton" ddh-reset> <i class="skin"></i> <span>{{radioObj.labelvalue}}</span>
- </label> <br>
- </div>
- <br> <input
- ng-show="selectedvalueradioButtonGroup.type === 'other'"
- id="type-property-input" class="adminForm-name-property-input"
- ng-model= "selectedvalueradioButtonOther.type" ng-disabled="disableCd" type="text"
- maxlength="30" />
- </div>
- <div class="error-container"
- ng-show="selectedvalueradioButtonGroup.type === 'other'">
- <small id="microservices-details-input-url-required"
- class="err-message">Type is Required</small>
- </div>
- <br>
- <div class="field-group">
- <span ID="required" style="color: Red;" visible="false"> *</span>Action
- <input id="textinputID-2c" ddh-reset ng-model="roleFun['action']"
- placeholder="Action" class="span12" type="text">
- </div>
- <div class="error-container"
- ng-show="!roleFun['action']||roleFun['action']==0">
- <small id="action-required" class="err-message">Action is Required</small>
- </div>
- </div>
- <br>
-
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in" style = "top: 200px">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-medium" type="button" ng-disabled= "(!roleFun['name']||roleFun['name']==0)|| (!roleFun['code']||roleFun['code']==0) || (!selectedvalueradioButtonGroup.type||selectedvalueradioButtonGroup.type.length==0)||(selectedvalueradioButtonGroup.type ==='other'&&(!selectedvalueradioButtonOther.type||selectedvalueradioButtonOther.type.length==0)) || (!roleFun['action']||roleFun['action']==0)"
- ng-click="save(roleFun,selectedvalueradioButtonGroup.type)">Create</button>
- <button class="btn btn-medium" type="button"
- ng-click="$dismiss('cancel')">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-del-confirm.html
deleted file mode 100644
index 31109112..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-del-confirm.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope in">
- <h2 id="myModalLabel" modal-title="">Role Function Delete</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 55px;">
- You are about to delete this role function, '{{msg.text}}'. Click 'OK' to continue.
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-medium" type="button"
- ng-click="deleteFun(roleFun);">Ok</button>
- <button class="btn btn-medium" type="button"
- ng-click="$dismiss('cancel')">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-edit.html
deleted file mode 100644
index 9c1d55aa..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-edit.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<div>
- <div class="b2b-modal-header">
- <h2 id="myModalLabel" b2b-modal-title>Role Function Edit</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close" ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body" tabindex="0" role="region" aria-label="Modal header text content" style="height: 240px;">
- <div class="field-group">
- Name <input id="textinputID-2a" ng-model="roleFun['name']" placeholder="Name" class="span12" type="text">
- </div>
- <div class="field-group">
- Code <input id="textinputID-2a" ng-model="roleFun['code']" disabled placeholder="Code" class="span12" type="text">
- </div>
- <div class="field-group">
- Type <input id="textinputID-2b" ng-model="roleFun['type']" disabled placeholder="Type" class="span12" type="text">
- </div>
- <div class="field-group">
- Action <input id="textinputID-2c" ng-model="roleFun['action']" disabled placeholder="Action" class="span12" type="text">
- </div>
- </div>
- <div class="b2b-modal-footer">
- <div class="cta-button-group">
- <button class="btn btn-alt btn-medium" type="button" ng-click="save(roleFun);">Save</button>
- <button class="btn btn-medium" type="button" ng-click="$dismiss('cancel')">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-child-roles-modal.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-child-roles-modal.html
deleted file mode 100644
index ec8b2b8e..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-child-roles-modal.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<div>
- <div class="b2b-modal-header">
- <br/>
- <h1 class="heading-medium" id="SelectRole">Select Child Roles</h1>
- </div>
- <br/>
- <div class="b2b-modal-body" tabindex="0" aria-label="Modal header text content" role="region">
- <table class="striped">
- <thead>
- <tr>
- <th></th>
- <th>Role</th>
- </tr>
- </thead>
- <tbody type="body" ng-repeat="role in msg.roleChildFunctions">
- <tr>
- <td>
- <label class="btn-switch-label" tabindex="0" role="option">
- <input ng-click="activateRoleChildConfirmPopUp(role.active, role);" type="checkbox" b2b-switches ng-model="role.active" size-class="modal-small modal-alert">
- </label>
- </td>
- <td>{{ role.name }}</td>
- </tr>
- </tbody>
- </table>
- </div>
- <div class="b2b-modal-footer">
- <div class="cta-button-group in">
- <button style="float: right; margin-right: 20px;" class="btn btn-alt btn-small" ng-click="$dismiss('cancel')">Close</button>
- </div>
- <br/>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-modal.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-modal.html
deleted file mode 100644
index 1ecf192b..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-modal.html
+++ /dev/null
@@ -1,39 +0,0 @@
- <div class="b2b-modal-header">
- <h2 class="myModalLabel" id="SelectRole">Select Role Functions</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close" ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
-
- <div class="b2b-modal-body" tabindex="0" aria-label="Modal header text content" role="region" >
- <div id="role-double-popup">
- <table class="striped" >
- <thead>
- <tr>
- <th></th>
- <th>Role Function</th>
- </tr>
- </thead>
- <tbody type="body" ng-repeat="roleFunction in msg.availableRoleFunctions">
- <tr>
- <td>
- <label class="btn-switch-label" tabindex="0" role="option">
- <input type="checkbox" b2b-switches ng-model="roleFunction.selected" size-class="modal-small modal-alert">
- </label>
- </td>
- <td>{{roleFunction.name}}</td>
- </tr>
- </tbody>
- </table>
- </div>
-
- </div>
-
- <div class="b2b-modal-footer">
- <div class="cta-button-group in">
- <button style="float: right; margin-right: 20px;"
- class="btn btn-alt btn-small"
- ng-click="$dismiss('cancel')">Close</button>
- </div>
- <br />
- </div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/ngadmin.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/ngadmin.html
deleted file mode 100644
index 32ce58bc..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/ngadmin.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE html>
-<!-- Single-page application for EPSDK-App admin pages using DS2 look and feel -->
-<html>
-<head>
- <meta charset="ISO-8859-1">
- <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
-
- <title>Admin NG</title>
-
- <!-- B2b Library -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/font_icons.css">
-
- <!-- icons in open source -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ionicons.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css">
-
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
-
- <!-- Common scripts -->
- <script src="app/fusion/external/angular-1.4.13/angular.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
- <script src="app/fusion/external/jquery/dist/jquery.min.js"></script>
-
- <script src="app/fusion/external/javascript-detect-element-resize/jquery.resize.js"></script>
- <script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
-
- <!-- B2b Library -->
- <script src="app/fusion/external/b2b/js/b2b-angular/b2b-library.min.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/headerServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/manifestService.js"></script>
-
- <script src="app/fusion/scripts/DS2-directives/footer.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2Header.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2LeftMenu.js"></script>
- <script src="app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js"></script>
- <!-- Page-specific items -->
- <script src="app/fusion/scripts/DS2-controllers/admin-controller.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/admin-route.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/admin-menu-edit.js"></script>
- <script src="app/fusion/scripts/DS2-services/adminService.js"></script>
- <script src="app/fusion/scripts/DS2-services/adminMenuService.js"></script>
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/usage-list-controller.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/fn-menu-add-popup-controller.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/collaborate-list-controller.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/admin-closed-cloop.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/admin-whitelist.js"></script>
- <link rel="stylesheet" type="text/css" href="app/ngapp/styles.css">
-</head>
- <body class="appBody">
- <app-root></app-root>
- <div ds2-Header class="header-container" ></div>
- <div ds2-menu id="menuContainer" class="menu-container" ></div>
- <div ng-view id="rightContentProfile" class="content-container"> </div>
- <div ds2-Footer class="footer-container"></div>
-
- <script type="text/javascript" src="app/ngapp/runtime.js"></script>
- <script type="text/javascript" src="app/ngapp/polyfills.js"></script>
- <script type="text/javascript" src="app/ngapp/main.js"></script>
-
- </body>
-</html>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role-function.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role-function.html
deleted file mode 100644
index 4114a468..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role-function.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<div id="page-content">
- <h1 class="heading-page" id="profileSearch">Role Function</h1>
- <span class= "heading-small" ng-if="isAppCentralized=='true'"><b>Please go to portal to Manage Role Function.</b></span>
- <div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
- </div>
- <div ng-hide="showLoader">
- <div class="row-nowrap">
- <div class="span12" ng-if="isAppCentralized=='false'">
- <div class="form-row">
- <div class="field-group">
- <button class="btn btn-alt btn-medium" type="button"
- ng-click="addRoleFuncPopUp(rowData);">Create</button>
- </div>
- </div>
- </div>
- <div class="span12">
- <div class="form-row">
- <div style="float: right;">
- <div class="form-field form-field__small">
- <input type="text" placeholder="Search role functions" ng-model="searchString" />
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
- </div>
-
- <div b2b-table class="b2b-table-div" table-data="tableData"
- search-string="searchString" current-page="currentPage"
- next-sort="nextSort">
- <table>
- <thead b2b-table-row type="header">
- <tr>
- <th b2b-table-header key="name">Name</th>
- <th b2b-table-header key="code">Code</th>
- <th b2b-table-header key="type">Type</th>
- <th b2b-table-header key="action">Action</th>
- <th b2b-table-header sortable="false" ng-if="isAppCentralized=='false'">Edit</th>
- <th b2b-table-header sortable="false" ng-if="isAppCentralized=='false'">Delete</th>
- </tr>
- </thead>
- <tbody b2b-table-row type="body" row-repeat="rowData in tableData">
- <tr>
- <td b2b-table-body ng-bind="rowData['name']"></td>
- <td b2b-table-body ng-bind="rowData['code']"></td>
- <td b2b-table-body ng-bind="rowData['type']"></td>
- <td b2b-table-body ng-bind="rowData['action']"></td>
- <td b2b-table-body ng-if="isAppCentralized=='false'">
- <div style="font-size: 20px;">
- <a ng-click="saveRoleFuncPopUp(rowData);" class="icon-misc-pen"></a>
- </div>
- </td>
- <td b2b-table-body ng-if="isAppCentralized=='false'">
- <div style="font-size: 20px;">
- <a href="javascript:void(0)"
- ng-click="delRoleFuncConfirmPopUp(rowData);"
- class="icon-misc-trash"></a>
- </div>
- </td>
-
- </tr>
- </tbody>
- </table>
- </div>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role.html
deleted file mode 100644
index f4c9d0c6..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<div id="page-content">
- <div>
- <h1 class="heading-page" id="Roles">Manage Roles</h1>
- </div>
- <div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img" aria-label="Please wait while we load your content"></i>
- </div>
- <div ng-hide="showLoader">
- <div>
- <h2 class="heading-small-content">Please edit the role details below: </h2>
- </div>
-
- <div>
- <label>*Name: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
- <input type="text" ng-model="role.name"
- maxlength="300" />
- </label>
- </div>
-
- <div>
- <label>Priority: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
- <input type="text" ng-model="role.priority"
- maxlength="30"/>
- </label>
- </div>
-
- <div>
- <button style="margin-left: 105px;" class="btn btn-small" onClick="window.location='admin'">Cancel</button>
- <button class="btn btn-alt btn-small" ng-click="saveRole();">Save</button>
- </div>
- <br/>
- <div ng-if="routeRoleId != 0">
- <div>
- <h3 class="heading-small-emphasis">Role Functions</h3>
- <button class="btn btn-alt btn-small" ng-click="addNewRoleFunctionModalPopup(role.roleFunctions,role.name, role);">Manage Role Functions</button>
-
- <table class="striped" ng-if="role.roleFunctions.length">
- <thead>
- <tr>
- <th>Role Function Name</th>
- <th>Remove</th>
- </tr>
- </thead>
- <tbody type="body" ng-repeat="roleFunction in role.roleFunctions">
- <tr>
- <td width="70%">{{ roleFunction.name }}</td>
- <td width="10%">
- <div ng-click="removeRoleFunction(roleFunction);"><a href="javascript:void(0)" class="icon-misc-trash"></a></div>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <br/>
- <br/>
- <div>
- <a href="admin#/role_function_list">Manage Role Functions</a><br><br>
- </div>
- </div>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role_list.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role_list.html
deleted file mode 100644
index e8820f95..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role_list.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<div id="page-content">
- <div>
- <h1 class="heading-page" id="Roles">Roles</h1>
- <span class= "heading-small" ng-if="isAppCentralized=='true'"><b>Please go to portal to Manage Roles.</b></span>
- </div>
- <div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
- </div>
- <div ng-hide="showLoader">
- <div>
- <button type="submit" onClick="window.location='admin#/role/0';" class="btn btn-alt btn-small" ng-if="isAppCentralized=='false'">Add New Role</button>
- </div>
- <h2 class="heading-small" ng-if="isAppCentralized=='false'">Click on a Role to view its details.</h2>
- <table class="striped" ng-if="availableRoleFunctions" style="width: auto;">
- <thead>
- <tr>
- <th>Name</th>
- <th>Priority</th>
- <th ng-if="isAppCentralized=='false'">Edit</th>
- <th ng-if="isAppCentralized=='false'">Active?</th>
- <th ng-if="isAppCentralized=='false'">Delete?</th>
- </tr>
- </thead>
- <tbody type="body" ng-repeat="availableRole in ociavailableRoles">
- <tr>
- <td>{{ availableRole.name }}</td>
- <td>{{ availableRole.priority }}</td>
- <div ng-if="isAppCentralized=='false'">
- <td ng-if="isAppCentralized=='false'">
- <a href="admin#/role/{{availableRole.id}}" class="icon-misc-pen"></a>
- </td>
- <td ng-if="isAppCentralized=='false'">
- <div>
- <label class="btn-switch-label" tabindex="0" role="option">
- <input type="checkbox" b2b-switches ng-model="availableRole.active" ng-click="activateRoleConfirmPopUp(availableRole.active,availableRole);">
- </label>
- </div>
- </td>
- <td width="10%" ng-if="isAppCentralized=='false'">
- <div ng-click="delRoleConfirmPopUp(availableRole);"><a href="javascript:void(0)" class="icon-misc-trash"></a></div>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/usage.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/usage.html
deleted file mode 100644
index 8e411141..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/usage.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<div id="page-content">
- <div>
- <h1 class="heading-page" id="Usage">Current Usage</h1>
- </div>
-
- <h3 class="heading-small">
- The following table shows all current user sessions. Click the icon to end a user's session.
- </h3>
-
- <!-- A simple table requires no b2b tags -->
- <table style="width: auto;">
-
- <thead>
- <tr>
- <th key="0" sortable="false" width="10%" align="center">User Id</th>
- <th key="1" sortable="true" width="10%" align="center">User Name</th>
- <th key="2" sortable="false" width="10%" align="center">Email</th>
- <th key="3" sortable="true" width="10%" align="center">Last Access Time (minutes)</th>
- <th key="4" sortable="false" width="10%" align="center">Time Remaining (minutes)</th>
- <th key="5" sortable="false" width="10%" align="center">Expire User Session?</th>
- </tr>
- </thead>
-
- <tbody ng-repeat="user in users" style="max-height: 980px;" >
- <tr>
- <td width="10%">{{user.id}}</td>
- <td width="10%">{{user.lastName}}</td>
- <td width="10%">{{user.email}}</td>
- <td width="10%">{{user.lastAccess}}</td>
- <td width="10%">{{user.remaining}}</td>
- <td width="10%"><div ng-hide="user.delete=='yes'">Current Session</div>
- <div ng-click="removeSession(user.sessionId);"
- ng-hide="user.delete=='no'"
- style="font-size:20px;text-align:center">
- <a href="javascript:void(0)" class="icon-misc-trash"></a>
- </div>
- </td>
- </tr>
- </tbody>
-
- </table>
-
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/profile-confirm-toggle.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/profile-confirm-toggle.html
deleted file mode 100644
index 0fe37686..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/profile-confirm-toggle.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope in">
- <h1><i class="icon-primary-alert"></i></h1>
- <h2 id="myModalLabel" modal-title="">Confirm</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 55px;">
- You are about to {{msg.text}} the user with ID {{msg.rowData.id}}. Do you want to continue?
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-medium" type="button"
- ng-click="toggleUserStatus(msg.rowData.id);">Ok</button>
- <button class="btn btn-clear btn-medium" type="button"
- ng-click="cancelUserStatusToggle(msg.rowData);">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add-confirm.html
deleted file mode 100644
index edaa0a1e..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add-confirm.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope in">
- <h1><i class="icon-primary-alert"></i></h1>
- <h2 id="myModalLabel" modal-title="">Confirm</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 55px;">
- You are about to change the role {{msg.roleFun}} Do you want to continue?
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button ng-if="!msg.selected" class="btn btn-alt btn-medium" type="button"
- ng-click="confirmRoleFunRemove(msg.availableRole,msg.roleId);">Yes</button>
- <button ng-if="msg.selected" class="btn btn-alt btn-medium" type="button"
- ng-click="confirmRoleFunAdd(msg.availableRole,msg.roleId);">Yes</button>
- <button class="btn btn-clear btn-medium" type="button"
- ng-click="cancelRoleFunSwitch(msg)">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add.html
deleted file mode 100644
index f182417e..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-<div class="b2b-modal-header">
- <h1 class="heading-medium" id="SelectRole">Select Role</h1>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close" ng-click="$dismiss('cancel')"></button>
- </div>
-</div>
-
-<div class="b2b-modal-body" tabindex="0" aria-label="Modal header text content" role="region">
- <table class="striped">
- <thead>
- <tr>
- <th></th>
- <th>Role</th>
- </tr>
- </thead>
- <tbody type="body"ng-repeat="roleFunction in msg.availableRoleFunctions">
- <tr>
- <td>
- <label class="btn-switch-label" tabindex="0" role="option">
- <input type="checkbox" b2b-switches ng-model="roleFunction.selected" ng-click="activateRoleConfirmPopUp(roleFunction.selected,roleFunction);" size-class="modal-small modal-alert">
- </label>
- </td>
- <td>{{roleFunction.name}}</td>
- </tr>
- </tbody>
- </table>
-</div>
-
-<div class="b2b-modal-footer" id="role-popup-footer">
- <div class="cta-button-group">
- <button style="float: right; margin-right: 20px;"
- class="btn btn-alt btn-small"
- ng-click="$dismiss('cancel')">Close</button>
- </div>
-</div>
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-del-confirm.html
deleted file mode 100644
index b795d35f..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-del-confirm.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<div>
- <div class="b2b-modal-header ng-scope in">
- <h1><i class="icon-primary-alert"></i></h1>
- <h2 id="myModalLabel" modal-title="">Confirm</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
- role="region" aria-label="Modal header text content"
- style="height: 50px;">
- You are about to delete the role '{{msg.role.name}}'. Do you want to continue?
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button ng-if="!msg.selected" class="btn btn-alt btn-medium" type="button"
- ng-click="confirmRoleDel(msg.role,msg.roleId);">Yes</button>
- <button class="btn btn-clear btn-medium" type="button"
- ng-click="$dismiss('cancel')">Cancel</button>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/ngprofile.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/ngprofile.html
deleted file mode 100644
index 028793cd..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/ngprofile.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html>
-<!-- Single-page application for EPSDK-App profile pages using DS2 look and feel -->
-<html>
-<head>
- <meta charset="ISO-8859-1">
- <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
-
- <title>Profile Search NG</title>
-
- <!-- B2b Library -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/font_icons.css">
-
- <!-- icons in open source -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ionicons.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css">
-
-
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
-
- <!-- Common scripts -->
-
- <script src="app/fusion/external/angular-1.4.13/angular.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
-
- <!-- B2b Library -->
- <script src="app/fusion/external/b2b/js/b2b-angular/b2b-library.min.js"></script>
- <script src="app/fusion/external/jquery/dist/jquery.min.js"></script>
-
- <script src="app/fusion/external/javascript-detect-element-resize/jquery.resize.js"></script>
- <script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/headerServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/manifestService.js"></script>
-
- <script src="app/fusion/scripts/DS2-directives/footer.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2Header.js"></script>
- <script src="app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2LeftMenu.js"></script>
-
- <!-- Page-specific scripts -->
-
- <script src="app/fusion/scripts/DS2-controllers/profile-route.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/ds-profile/post-controller.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/ds2-profile/self-profile-controller.js"></script>
- <script src="app/fusion/scripts/DS2-services/ds2-profile/selfProfileService.js"></script>
- <script src="app/fusion/scripts/DS2-services/profileServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/postSearch.js"></script>
- <script src="app/fusion/scripts/DS2-services/adminService.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/profile-search-controller-DS2.js"></script>
- <link rel="stylesheet" type="text/css" href="app/ngapp/styles.css">
-
-</head>
- <body class="appBody">
- <app-root></app-root>
- <div ds2-Header class="header-container" ></div>
- <div ds2-menu id="menuContainer" class="menu-container" ></div>
- <div ng-view id="rightContentProfile" class="content-container"></div>
- <div ds2-Footer class="footer-container"></div>
-
- <script type="text/javascript" src="app/ngapp/runtime.js"></script>
- <script type="text/javascript" src="app/ngapp/polyfills.js"></script>
- <script type="text/javascript" src="app/ngapp/main.js"></script>
- </body>
-</html>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile.html
deleted file mode 100644
index 8190f3b2..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE html>
-<!-- Single-page application for EPSDK-App profile pages using DS2 look and feel -->
-<html>
-<head>
- <meta charset="ISO-8859-1">
- <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
-
- <title>Profile Search</title>
-
- <!-- B2b Library -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/font_icons.css">
-
- <!-- icons in open source -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ionicons.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css">
-
-
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
-
- <!-- Common scripts -->
-
- <script src="app/fusion/external/angular-1.4.13/angular.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
-
- <!-- B2b Library -->
- <script src="app/fusion/external/b2b/js/b2b-angular/b2b-library.min.js"></script>
- <script src="app/fusion/external/jquery/dist/jquery.min.js"></script>
-
- <script src="app/fusion/external/javascript-detect-element-resize/jquery.resize.js"></script>
- <script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/headerServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/manifestService.js"></script>
-
- <script src="app/fusion/scripts/DS2-directives/footer.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2Header.js"></script>
- <script src="app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2LeftMenu.js"></script>
-
- <!-- Page-specific scripts -->
-
- <script src="app/fusion/scripts/DS2-controllers/profile-route.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/ds-profile/post-controller.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/ds2-profile/self-profile-controller.js"></script>
- <script src="app/fusion/scripts/DS2-services/ds2-profile/selfProfileService.js"></script>
- <script src="app/fusion/scripts/DS2-services/profileServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/postSearch.js"></script>
- <script src="app/fusion/scripts/DS2-services/adminService.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/profile-search-controller-DS2.js"></script>
-
-</head>
- <body class="appBody" ng-app="abs">
- <div ds2-Header class="header-container" ></div>
- <div ds2-menu id="menuContainer" class="menu-container" ></div>
- <div ng-view id="rightContentProfile" class="content-container"></div>
- <div ds2-Footer class="footer-container"></div>
- </body>
-</html>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/all-reports.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/all-reports.html
deleted file mode 100644
index fcad9de9..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/all-reports.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="ISO-8859-1">
- <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
-
- <title>Reports</title>
-
- <!-- Resources -->
-
-
- <!-- B2b Library -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/font_icons.css">
-
- <!-- icons in open source -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ionicons.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css">
-
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/angular-bootstrap/ui-bootstrap-csp.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/angular-gridster/dist/angular-gridster.min.css">
- <!-- digital-design-library must be loaded late -->
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
-
- <!-- Common scripts -->
- <script src="app/fusion/external/angular-1.4.13/angular.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
- <script src="app/fusion/external/b2b/js/b2b-angular/b2b-library.min.js"></script>
- <script src="app/fusion/external/jquery/dist/jquery.min.js"></script>
- <script src="app/fusion/external/javascript-detect-element-resize/jquery.resize.js"></script>
- <script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
-
- <!-- EPSDK App scripts and common services -->
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/headerServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/manifestService.js"></script>
-
- <script src="app/fusion/scripts/DS2-directives/footer.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2Header.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2LeftMenu.js"></script>
- <script src="app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js"></script>
- <script src= "app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
-
- <!-- Page specific items -->
- <script src="app/fusion/external/d3/js/d3.js"></script>
- <link rel="stylesheet" type="text/css" href="app/fusion/external/angular-ui-grid/ui-grid.css">
- <script src="app/fusion/external/angular-ui-grid/ui-grid.min.js"></script>
- <script src="./app/fusion/scripts/DS2-services/ds2-raptor-report/raptorReportFactory.js"></script>
- <script src="./app/fusion/scripts/DS2-services/ds2-raptor-report/stepFormFactory.js"></script>
- <script src="./app/fusion/scripts/DS2-controllers/ds2-reports/report-search-controller.js"></script>
- <script src="./app/fusion/scripts/DS2-controllers/ds2-reports/report-run-controller.js"></script>
- <script src="./app/fusion/scripts/DS2-controllers/ds2-reports/report-step-controller.js"></script>
- <script src="./app/fusion/scripts/DS2-controllers/ds2-reports/report-import-controller.js"></script>
- <script src="./app/fusion/scripts/DS2-controllers/ds2-reports/report-chart-controller.js"></script>
- <script src="./app/fusion/scripts/DS2-view-models/ds2-reports/directive/dynamicform.js"></script>
- <script src="./app/fusion/scripts/DS2-controllers/ds2-reports/report-router.js"></script>
- <script src= "app/fusion/scripts/DS2-services/ds2-raptor-report/reportModalControllers.js"></script>
-
-
-</head>
- <body class="appBody" ng-app="abs">
- <div ds2-Header class="header-container" ></div>
- <div ds2-menu id="menuContainer" class="menu-container" ></div>
- <div ng-view id="rightContentProfile" class="content-container"></div>
- <div ds2-Footer class="footer-container"></div>
- </body>
-</html>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/dynamicform.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/dynamicform.js
deleted file mode 100644
index 5147719f..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/dynamicform.js
+++ /dev/null
@@ -1,134 +0,0 @@
-appDS2
-.directive('formBuilder', ['$q', '$parse', '$http', '$templateCache', '$compile', '$document', '$timeout', function ($q, $parse, $http, $templateCache, $compile, $document, $timeout) {
- return {
- restrict: 'E', // supports using directive as element only
- scope:{
- ngModel: '=',
- ngFormFields: '=',
- ngNumFormCols: '=',
- ngTriggerMethod: '=',
- ngShowFieldId: '='
- },
- link: function ($scope, element, attrs) {
- $scope.element=element;
- $scope.datetimeformat = "MM/dd/yyyy hh:mm a";
- $scope.buildField = function (field, parentElement) {
- var x = '';
- if(field.visible) {
-
- if (field.fieldType === 'LIST_MULTI_SELECT') {
- /*x = angular.element('<label><i>'+field.fieldDisplayName+'<span ng-show="ngShowFieldId"> [ '+field.fieldId+' ] </span>:</i></label><br>'+
- '<div class="select2-container ebz-listbox form-field" style="height:100px;" tabindex="0" >'+
- '<label ng-repeat="item in ngModel.'+field.fieldId+'" style="display:block;">'+
- '<input type="checkbox" style="margin-top: 10px;" ng-model="item.defaultValue" ng-change="triggerFormFields('+field.triggerOtherFormFields+')" att-checkbox title="{{item.title}}"/> {{item.title}}<br/>'+
- '</label>'+
- '</div>');*/
-
- x = angular.element(
- '<div class="listbox-container">'+
- '<h3 id="source_listbox-2---multiselectable">'+field.fieldDisplayName+'</h3>'+
- '<div class="listbox-list" tabindex="-1">'+
- '<b2b-list-box listbox-data= "ngModel.'+field.fieldId+'" aria-multiselectable="true">'+
- '<div tabindex="-1" data-index="{{$index}}" b2b-accessibility-click="13,32" ng-repeat="number in ngModel.'+field.fieldId+'" role="option" class="b2b-list-box-item" ng-class="{'+
- "'b2b-list-box-item--selected'"+
- ': number.selected}" ng-bind-html="number.title | unsafe"></div>'+
- '</b2b-list-box>'+
- '</div>'+
- '</div>');
- } else if (field.fieldType === 'LIST_BOX') {
- var temp =
- '<div >'+
- '<label><i>'+field.fieldDisplayName+'<span ng-show="ngShowFieldId"> [ '+field.fieldId+' ] </span>:</i></label>'+
- '<select id="dropdown1" name="dropdown1" aria-describedby="dropdown1" b2b-dropdown placeholder-text="Select" ng-model="ngModel.'+field.fieldId+'" ng-change="triggerFormFields('+field.triggerOtherFormFields+')">'+
- ' <option b2b-dropdown-list option-repeat="d in formFieldLuValues.'+ field.fieldId +'" value="{{d.value}}">{{d.title}}</option>'+
- ' </select>'+
- '</div>';
-
- x = angular.element(temp);
- //x = angular.element('<label><i>'+field.fieldDisplayName+'<span ng-show="ngShowFieldId"> [ '+field.fieldId+' ] </span>:</i></label><br> <div class="form-field" att-select="formFieldLuValues.'+field.fieldId+'" ng-model="ngModel.'+field.fieldId+'" ng-change="triggerFormFields('+field.triggerOtherFormFields+')"></div>');
- } else if((field.fieldType === 'text' || field.fieldType === 'TEXT') && field.validationType === 'DATE'){
- x = angular.element('<label><i>'+field.fieldDisplayName+'<span ng-show="ngShowFieldId"> [ '+field.fieldId+' ] </span>:</i></label><br> <div class="datepicker-container" > <input id="'+field.fieldId+'" type="text" ng-model="ngModel.'+field.fieldId+'" tabindex="0" ng-change="triggerFormFields('+field.triggerOtherFormFields+')" b2b-datepicker></div>');
- } else if((field.fieldType === 'text' || field.fieldType === 'TEXT') && field.validationType === 'TIMESTAMP_MIN'){
- x = angular.element('<label><i>'+field.fieldDisplayName+'<span ng-show="ngShowFieldId"> [ '+field.fieldId+' ] </span>:</i></label><br> <input id="'+field.fieldId+'" type="text" date-format="datetimeformat" ng-model="ngModel.'+field.fieldId+'" tabindex="0" ng-change="triggerFormFields('+field.triggerOtherFormFields+')" att-date-time-picker>');
- } else if(field.fieldType === 'text' || field.fieldType === 'TEXT'){
- x = angular.element('<label><i>'+field.fieldDisplayName+'<span ng-show="ngShowFieldId"> [ '+field.fieldId+' ] </span>:</i></label><br> <input type="text" class="form-field" ng-model="ngModel.'+field.fieldId+'" maxlength="'+field.length+'" ng-blur="triggerFormFields('+field.triggerOtherFormFields+')" />');
- } else if(field.fieldType === 'CHECK_BOX'){
- x = angular.element('<label><i>'+field.fieldDisplayName+'<span ng-show="ngShowFieldId"> [ '+field.fieldId+' ] </span>:</i></label><br> <input type="checkbox" ng-model="ngModel.'+field.fieldId+'" tabindex="0" ng-change="triggerFormFields('+field.triggerOtherFormFields+')" att-checkbox>');
- }
- parentElement.append(x);
- $compile(x)($scope);
- }
-
- };
- $scope.buildForm = function() {
- // create elements <table> and a <tbody>
- var tbl = angular.element("<table></table>");
- var tblBody = angular.element("<tbody></tbody>");
- var row = angular.element("<tr></tr>");
-
- var ngFormFieldsLength = $scope.ngFormFields.length;
-
- for (var j = 0; j < ngFormFieldsLength; j++) {
- var cell = angular.element("<td style='padding: 5px;'></td>");
- $scope.buildField($scope.ngFormFields[j],cell);
- row.append(cell);
-
- if((j!=0 && (j+1)%$scope.ngNumFormCols==0) || j==(ngFormFieldsLength-1)){
- tblBody.append(row);
- row = angular.element("<tr></tr>");
- }
- }
- tbl.append(tblBody);
- angular.element($scope.element).html('');
- $scope.element.append(tbl);
- };
-
-
- $scope.formFieldLuValues = {};
- $scope.getEBZFormat = function() {
- if($scope.ngFormFields && $scope.ngFormFields.length>0){
- $scope.ngFormFields.forEach(function(formField) {
- if(formField.fieldType === 'LIST_MULTI_SELECT') {
- $scope.ngModel[formField.fieldId]= [];
- if(formField.formFieldValues && formField.formFieldValues.length>0){
- formField.formFieldValues.forEach(function(entry,i) {
- $scope.ngModel[formField.fieldId].push({ index: i, value: entry.id, title: entry.name, defaultValue: entry.defaultValue});
- });
- }
- } else if(formField.fieldType==='LIST_BOX') {
- $scope.formFieldLuValues[formField.fieldId]= [];
- if(formField.formFieldValues && formField.formFieldValues.length>0){
- formField.formFieldValues.forEach(function(entry,i) {
- $scope.formFieldLuValues[formField.fieldId].push({ index: i, value: entry.id, title: entry.name});
- if(entry.defaultValue){
- //$scope.ngModel[formField.fieldId]={ index: i, value: entry.id, title: entry.name};
- }
- });
- }
- } else if(formField.fieldType === 'text' || formField.fieldType === 'TEXT' ||
- formField.validationType === 'DATE' || formField.validationType === 'TIMESTAMP_MIN') {
- if(formField.formFieldValues && formField.formFieldValues.length>0){
- $scope.ngModel[formField.fieldId]=formField.formFieldValues[0].id;
- }
- }
- });
- }
- };
-
- $scope.$watch("ngFormFields",function(newValue,oldValue) {
- if($scope.ngFormFields){
- $scope.getEBZFormat();
- $scope.buildForm();
- }
- });
-
- $scope.triggerFormFields = function(triggerFlag) {
- if(triggerFlag){
- $scope.element.html('Loading...');
- $scope.ngTriggerMethod();
- }
- };
-
- }
- };
- }]);
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/step-form-directive.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/step-form-directive.js
deleted file mode 100644
index a64309bf..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/step-form-directive.js
+++ /dev/null
@@ -1,14 +0,0 @@
-appDS2
-.directive('stepForm', function($compile,$http, stepFormFactory) {
- return {
- restrict: 'AE',
-
- // scope: {
- // jsonSource: '='
- // },
- link: function(scope, elem, attrs) {
- var jsonSrcName = "app/fusionapp/scripts/view-models/wz_steps/json/step1.json";
- stepFormFactory.renderForm(jsonSrcName, elem, scope);
- }
- }
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-del-confirm.html
deleted file mode 100644
index 3f0338c9..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-del-confirm.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-<div class="b2b-modal-header ng-scope in">
- <h2 id="myModalLabel" modal-title="">Remove Report</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
-</div>
-<div class="b2b-modal-body ng-scope ng-isolate-scope in">
- <h2>The selected report will be removed. Do you want to continue</h2>
-</div>
-<div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button" ng-click="ok()">OK</button>
- <button class="btn btn-alt btn-small" type="button"
- ng-click="cancel()">Cancel</button>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-formfield-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-formfield-del-confirm.html
deleted file mode 100644
index 20dd9202..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-formfield-del-confirm.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<div class="b2b-modal-header">
- <h2 id="myModalLabel" modal-title="">Remove Formfield</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
-</div>
-<div class="b2b-modal-body">
- The selected formfield {{tempFieldId}} will be removed. Do you want to continue?
-</div>
-<div class="b2b-modal-footer">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button" ng-click="ok()">OK</button>
- <button class="btn btn-alt btn-small" type="button"
- ng-click="cancel()">Cancel</button>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-role-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-role-del-confirm.html
deleted file mode 100644
index 629b9a91..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-role-del-confirm.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<div class="b2b-modal-header">
- <h2 id="myModalLabel" modal-title="">Remove Report Role</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
-</div>
-<div class="b2b-modal-body">
- {{securityRoleName}}
- will be removed. Would you want to continue?
-</div>
-<div class="b2b-modal-footer">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button" ng-click="ok()">OK</button>
- <button class="btn btn-alt btn-small" type="button"
- ng-click="cancel()">Cancel</button>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-user-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-user-del-confirm.html
deleted file mode 100644
index 5af1b227..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-user-del-confirm.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<div class="b2b-modal-header">
- <h2 id="myModalLabel" modal-title="">Remove Report User</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
-</div>
-<div class="b2b-modal-body"">
- {{securityUserName}}
- will be removed. Would you want to continue?
-</div>
-<div class="b2b-modal-footer">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button" ng-click="ok()">OK</button>
- <button class="btn btn-alt btn-small" type="button"
- ng-click="cancel()">Cancel</button>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-user-role-confirm-toggle.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-user-role-confirm-toggle.html
deleted file mode 100644
index 06f2049a..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-user-role-confirm-toggle.html
+++ /dev/null
@@ -1,24 +0,0 @@
-
-<div class="b2b-modal-header">
- <h1>
- <i class="icon-primary-alert"></i>
- </h1>
- <h2 id="myModalLabel" modal-title="">Confirm</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
-</div>
-<div class="b2b-modal-body" tabindex="0" role="region"
- aria-label="Modal header text content" style="height: 55px;">
- You are about to {{rowData.accessAllowed?"grant":"revoke"}}
- {{rowData.name}} edit access. Would you like to continue?
-</div>
-<div class="b2b-modal-footer">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-medium" type="button"
- ng-click="toggleEditAccessStatus(rowData);">Ok</button>
- <button class="btn btn-clear btn-medium" type="button"
- ng-click="cancelEditAccessToggle(rowData);">Cancel</button>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-col-edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-col-edit.html
deleted file mode 100644
index 3aadf27e..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-col-edit.html
+++ /dev/null
@@ -1,232 +0,0 @@
-<style>
-#columnEditTable table tbody td {
- border: none;
-}
-
-#columnEditTable table tbody tr {
- border: none;
-}
-
-
-</style>
-
-<div class="b2b-modal-header">
- <h2 id="myModalLabel" modal-title="">Report Column - Edit</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
-</div>
-<div class="b2b-modal-body">
- <div ng-show="processingData" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
- </div>
-
- <div id="columnEditTable" ng-hide="processingData">
- <table class="striped">
- <tbody>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Column ID:</td>
- <td>{{colInfo.colId}}</td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Column Name:</td>
- <td>{{colInfo.colName}}</td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Depends on formfield:</td>
- <td><input type="text" name="dependsOnFF"
- ng-model="colInfo.depeondsOnForField" class="colTableInput"></td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Datatype:</td>
- <td>
- <select id="dataTypeDD" name="dataTypeDD" aria-describedby="dataTypeDD" b2b-dropdown placeholder-text="Select Data Type" ng-model="colInfo.dataType">
- <option b2b-dropdown-list option-repeat="d in dataTypeOptions" value="{{d.value}}">{{d.text}}</option>
- </select>
- </td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Group By Pos:</td>
- <td>
- <input type="text" name="groupByPos" ng-model="colInfo.groupByPos" class="colTableInput">
- </td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Custom Text for Sub-Total:</td>
- <td><input type="text" name="subTotalCus"
- ng-model="colInfo.subTotalCustomText" class="colTableInput"></td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Hide Repeated Values:</td>
- <td>
- <label for="noWrap" class="checkbox">
- <input id="hideFormFieldsRun" type="checkbox" ng-model="colInfo.hideRepeatedKey" /> <i class="skin"></i>
- </label>
- </td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Multi Group Column Level:</td>
- <td>
- <select id="mgcLevel" name="mgcLevel" aria-describedby="mgcLevel" b2b-dropdown placeholder-text="Select Level" ng-model="colInfo.level">
- <option b2b-dropdown-list option-repeat="d in multiGroupColLevel" value="{{d.value}}">{{d.text}}</option>
- </select>
- </td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Multi group Column Range : Colspan:</td>
- <td>
- <input type="text" name="colSpan" ng-model="colInfo.colspan" class="colTableInput">
- </td>
- </tr>
- <!-- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Dataformat:</td>
- <td>
- <select id="mgcLevel" name="mgcLevel" aria-describedby="mgcLevel" b2b-dropdown placeholder-text="Select Level" ng-model="colInfo.level">
- <option b2b-dropdown-list option-repeat="d in multiGroupColLevel" value="{{d.value}}">{{d.text}}</option>
- </select>
- </td>
- </tr> -->
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Display Name:</td>
- <td>
- <input type="text" name="colSpan" ng-model="colInfo.displayName" class="colTableInput">
- </td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Display Width (In Pxls):</td>
- <td>
- <input type="text" id="displayWidth" name="displayWidth" ng-model="colInfo.displayWidth" class="colTableInput">
- </td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">No Wrap ?:</td>
- <td>
- <label for="noWrap" class="checkbox">
- <input id="noWrap" type="checkbox" ng-model="colInfo.noWrap" /><i class="skin"></i>
- </label>
- </td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Indent Parameter to display value:</td>
- <td>
- <select id="indentPara" name="indentPara" aria-describedby="indentPara" b2b-dropdown placeholder-text="Select Indent" ng-model="colInfo.indentation">
- <option b2b-dropdown-list option-repeat="d in indentValues" value="{{d.value}}">{{d.text}}</option>
- </select>
- </td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Display Alignment:</td>
- <td>
- <select id="displayAlign" name="displayAlign" aria-describedby="displayAlign" b2b-dropdown placeholder-text="Select Display Alignment" ng-model="colInfo.displayAlignment">
- <option b2b-dropdown-list option-repeat="d in displayAlignmentOptions" value="{{d.value}}">{{d.text}}</option>
- </select>
- </td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Display Header Alignment:</td>
- <td>
- <select id="displayHAlign" name="displayHAlign" aria-describedby="displayAlign" b2b-dropdown placeholder-text="Select Display Header Alignment" ng-model="colInfo.displayHeaderAlignment">
- <option b2b-dropdown-list option-repeat="d in displayAlignmentOptions" value="{{d.value}}">{{d.text}}</option>
- </select>
- </td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Sortable:</td>
- <td>
- <label for="sortable" class="checkbox">
- <input id="sortable" type="checkbox" ng-model="colInfo.sortable" /><i class="skin"></i>
- </label>
- </td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Visible:</td>
- <td>
- <label for="visibleCheck" class="checkbox">
- <input id="visibleCheck" type="checkbox" ng-model="colInfo.visible" /><i class="skin"></i>
- </label>
- </td>
- </tr>
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Drill-down Link: <a href="javascript:void(0);" ng-click="getDrillReportFormField(colInfo.drilldownURL,colInfo.drilldownParams)"><span class="icon-misc-pen" ></span></a></td>
- <td id="drilldownOption">
- <select name="drillDown" b2b-dropdown ng-model="colInfo.drilldownURL">
- <option b2b-dropdown-list option-repeat="d in drilldownReports" value="{{d.id}}">{{d.name}}</option>
- </select>
- </td>
- </tr>
-
- <tr ng-hide="!isEditCol">
- <td class="colTableLeftColumn">Total for the column:</td>
- <td id="totalForTheCol">
- <select name="totalForTheCol" b2b-dropdown ng-model="colInfo.displayTotal" placeholder-text="Select">
- <option b2b-dropdown-list option-repeat="d in totalForTheColList" value="{{d.id}}">{{d.name}}</option>
- </select>
- </td>
- </tr>
- <tr >
- <table class="striped" ng-repeat="ff in drilDownFormField" ng-init="outerIndex=$index" ng-show="!isEditCol">
- <thead>
- <tr>
- <th>{{ff.name}}</th>
- <th></th>
- </tr>
- </thead>
- <tbody type="body" ng-repeat="dd in drilDownValues[$index]" ng-init="innerIndex=$index">
- <tr>
- <td>
- <label for="{{dd.radioGroup}}" class="radio">
- <input type="radio" ng-model="selectedDrillReportFormField[outerIndex]" id="{{dd.radioGroup}}" name="optionsRadio{{outerIndex}}" value="{{dd.radioGroup}}">
- <i class="skin"></i>
- </label>
- </td>
- <td>{{ dd.selection }} </td>
- <td ng-if="dd.selection=='Value set'" ng-bind="dd.value"></td>
- <td ng-if='dd.selection=="No Value"'>
- Accept default
- </td>
- <td ng-if='dd.selection=="Fixed Value"'>
- <div class="field-group">
- <input id="emptyMessage" ddh-reset="" class="span12" type="text" data-ng-model="drillDownParams[outerIndex].valValue">
- </div>
- </td>
- <td ng-if='dd.selection=="Value of Column"'>
- <select name="drillDown" b2b-dropdown ng-model="drillDownParams[outerIndex].valColId" placeholder-text="Select">
- <option b2b-dropdown-list option-repeat="d in childReportCol" value="{{d.id}}">{{d.name}}</option>
- </select>
- </td>
- <td ng-if='dd.selection=="Value of form field"'>
- <select name="drillDownField" b2b-dropdown ng-model="drillDownParams[outerIndex].valFieldId" placeholder-text="Select">
- <option b2b-dropdown-list option-repeat="d in childReportFF" value="{{d.id}}">{{d.name}}</option>
- </select>
- </td>
- </tr>
- </tbody>
- </table>
- </tr>
-
- <!-- <tr>
- <td class="colTableLeftColumn">Advanced Display Formatting:</td>
- <td id="drilldownOption">
- <select name="drillDown" b2b-dropdown ng-model="colInfo.drilldownURL" placeholder-text="Select">
- <option b2b-dropdown-list option-repeat="d in drilldownReports" value="{{d.id}}">{{d.name}}</option>
- </select>
- </td>
- </tr> -->
-
- </tbody>
- </table>
- </div>
-
-</div>
-<div class="b2b-modal-footer ng-scope">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button" ng-show="isEditCol"
- ng-click="save()">Save</button>
- <button class="btn btn-alt btn-small" type="button" ng-hide="isEditCol"
- ng-click="complete()">Complete</button>
- <button class="btn btn-alt btn-small" type="button"
- ng-click="cancel()">Cancel</button>
- </div>
- </div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-drilldown-edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-drilldown-edit.html
deleted file mode 100644
index 6b98ac78..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-drilldown-edit.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<style>
-#columnEditTable table tbody td {
- border: none;
-}
-
-#columnEditTable table tbody tr {
- border: none;
-}
-
-.colTableLeftColumn {
- width: 45%;
- vertical-align:center;
-}
-
-.colTableInput {
- width:220px;
-}
-
-#columnEditTable .selectWrap{
- width:220px;
-}
-
-</style>
-
-<div style="height: 700px;">
- <div class="b2b-modal-header ng-scope in">
- <h2 id="myModalLabel" modal-title="">Drill-down Parameters Configuration</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" style="margin-bottom: -50px;">
- <form name="workflowForm" class="css-form" novalidate>
-
- <div id="columnEditTable" ng-repeat="drillDownOption in drillDownOptionList">
- <table class="striped">
- <tbody>
- <fieldset role="radiogroup" radio-group-accessibility>
- <tr ng-show="childReportFF.length>0||childReportCol.length>0">
- <td colspan="2">
- <h2>{{drillDownOption.name}}</h2>
- </td>
- </tr>
-
-
- <tr ng-show="childReportFF.length>0||childReportCol.length>0">
- <td>
- <div class="form-row" role="radio" style="margin-top:0px;">
- <label for="optionsRadios2{{$index}}" class="radio">
- <input type="radio" ng-model="drillDownOption.selectedvalueradioGroup.name" id="optionsRadios2{{$index}}" name="optionsRadio2{{$index}}" value="fixedValue">
- <i class="skin"></i>
- <span>Fixed Value</span>
- </label>
- </div>
- </td>
- <td><input type="text" name="defaultValue" ng-model="drillDownOption.fixedValue.value" class="colTableInput"></td>
- </tr>
-
-
- <tr ng-show="childReportCol.length>0">
- <td>
- <div class="form-row" role="radio" style="margin-top:0px;">
- <label for="optionsRadios3{{$index}}" class="radio">
- <input type="radio" ng-model="drillDownOption.selectedvalueradioGroup.name" id="optionsRadios3{{$index}}" name="optionsRadio3{{$index}}" value="reportCol">
- <i class="skin"></i>
- <span>Value of Column</span>
- </div>
- </td>
- <td>
- <select name="childReportColumn" b2b-dropdown ng-model="drillDownOption.selectedChildReportColumn.value" placeholder-text="Select">
- <option b2b-dropdown-list option-repeat="d in childReportCol" value="{{d.id}}">{{d.name}}</option>
- </select>
- </td>
-
- </tr>
-
- <tr ng-show="childReportFF.length>0">
- <td>
- <div class="form-row" role="radio" style="margin-top:0px;">
- <label for="optionsRadios4{{$index}}" class="radio">
- <input type="radio" ng-model="drillDownOption.selectedvalueradioGroup.name" id="optionsRadios4{{$index}}" name="optionsRadio4{{$index}}" value="reportFF">
- <i class="skin"></i>
- <span>Value of Form Field</span>
- </div>
- </td>
- <td>
- <select name="childReportFormField" b2b-dropdown ng-model="drillDownOption.selectedChildReportFormField.value" placeholder-text="Select">
- <option b2b-dropdown-list option-repeat="d in childReportFF" value="{{d.id}}">{{d.name}}</option>
- </select>
- </td>
- </tr>
-
-
-
- </fieldset>
-
-
- </tbody>
- </table>
- </div>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button"
- ng-click="complete()">Complete</button>
- </div>
-
- </div>
- </form>
- <br />
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-formfield-edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-formfield-edit.html
deleted file mode 100644
index 3c17ff7b..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-formfield-edit.html
+++ /dev/null
@@ -1,154 +0,0 @@
-<style>
-#columnEditTable table tbody td {
- border: none;
-}
-
-#columnEditTable table tbody tr {
- border: none;
-}
-
-.colTableLeftColumn {
- width: 45%;
- text-align: right;
- vertical-align: middle;
-}
-
-.colTableInput {
- width: 220px;
-}
-
-#columnEditTable .selectWrap {
- width: 220px;
-}
-table {
- border-bottom: none;
-}
-</style>
-
-<div class="b2b-modal-header">
- <h2 id="myModalLabel" modal-title="">Report Form Field - Edit</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
-</div>
-<div class="b2b-modal-body">
- <div ng-show="dataProcessing" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
- </div>
- <div id="columnEditTable" ng-hide="dataProcessing">
- <table class="striped">
- <tbody>
- <tr>
- <td class="colTableLeftColumn">Field Name:</td>
- <td><input type="text" name="displayName"
- ng-model="formFieldEditData.fieldName" class="colTableInput"></td>
- </tr>
-
- <tr>
- <td class="colTableLeftColumn">Field Type:</td>
- <td><select name="fieldType" b2b-dropdown
- ng-model="formFieldEditData.fieldType" placeholder-text="Select">
- <option b2b-dropdown-list option-repeat="d in fieldTypeOptions"
- value="{{d.value}}">{{d.text}}</option>
- </select></td>
- </tr>
- <tr>
- <td class="colTableLeftColumn">Visible:</td>
- <td>
- <select name="visible" b2b-dropdown ng-model="formFieldEditData.visible">
- <option b2b-dropdown-list option-repeat="d in ynOptions" value="{{d.value}}">{{d.text}}</option>
- </select>
- </td>
- </tr>
- <tr>
- <td class="colTableLeftColumn">Is used in Group By Clause?</td>
- <td>
- <label for="checkboxGrp" class="checkbox">
- <input id="checkboxGrp" type="checkbox" ng-model="formFieldEditData.groupFormField" /><i class="skin"></i><span></span>
- </label>
- </td>
- </tr>
- <tr>
- <td class="colTableLeftColumn">SQL as Default Value:</td>
- <td>
- <label for="cehckboxSql" class="checkbox"> <input
- id="cehckboxSql" type="checkbox"
- ng-model="sqlAsDefaultValue.value" /><i class="skin"></i><span></span>
- </label>
- </td>
- </tr>
- <tr ng-show="sqlAsDefaultValue.value">
- <td class="colTableLeftColumn">Default SQL:</td>
- <td>
- <textarea b2b-reset b2b-dragon-input b2b-reset-textarea
- ng-model="formFieldEditData.fieldDefaultSQL" style="height: 80px">
- </textarea>
- </td>
- <td>
- <p>
- <button ng-click="formFieldVerifySQL(formFieldEditData.fieldDefaultSQL)"
- class="btn btn-alt btn-small">Verify</button>
- </p>
- </td>
- </tr>
- <tr ng-hide="formFieldEditData.fieldDefaultSQL">
- <td class="colTableLeftColumn">Default Value:</td>
- <td><input type="text" name="defaultValue"
- ng-model="formFieldEditData.defaultValue" class="colTableInput"></td>
- </tr>
-
-
- <tr>
- <td class="colTableLeftColumn">Verify Field Value As:</td>
- <td><select name="visible" b2b-dropdown
- ng-model="formFieldEditData.validationType" placeholder-text="Select">
- <option b2b-dropdown-list option-repeat="d in verifyFieldValueOptions"
- value="{{d.value}}">{{d.text}}</option>
- </select></td>
- </tr>
- <tr>
- <td class="colTableLeftColumn">SQL Generating Custom List of
- Values:</td>
- <td><textarea b2b-reset b2b-dragon-input b2b-reset-textarea
- ng-model="formFieldEditData.fieldSQL" style="height: 80px">
- </textarea></td>
- <td>
- <p>
- <button ng-click="formFieldVerifySQL(formFieldEditData.fieldSQL)"
- class="btn btn-alt btn-small">Verify</button>
- </p>
- </td>
- </tr>
- <tr>
- <td class="colTableLeftColumn">Provide Predefined List of Values: Do not use Predefined list - Generate list from database :</td>
- <td>
- <input type="text" name="defaultValue" ng-model="predefinedValues.value" class="colTableInput">
- </td>
- <td>
- <p>
- <button ng-click="addPredefinedValueList();" class="btn btn-alt btn-small">Add to List</button>
- </p>
- </td>
- </tr>
- <tr>
- <td class="colTableLeftColumn"></td>
- <td>
- <div ng-repeat = "rowData in formFieldEditData.predefinedValueList">
- <span>{{rowData.id}}</span>
- <a ng-click="removePredefinedValueList(rowData.id)" class="icon-misc-trash"></a>
- </div>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
-</div>
-<div class="b2b-modal-footer">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button" ng-click="save()" ng-show="type=='edit'">Save</button>
- <button class="btn btn-alt btn-small" type="button" ng-click="add()" ng-show="type=='add'">Add</button>
- <button class="btn btn-alt btn-small" type="button" ng-click="cancel()">Cancel</button>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-report-name-validation.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-report-name-validation.html
deleted file mode 100644
index 50132ecf..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-report-name-validation.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<div style="height: 220px;">
- <div class="b2b-modal-header ng-scope in">
- <h2 id="myModalLabel" modal-title="">Warning</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
- </div>
- <div class="b2b-modal-body ng-scope ng-isolate-scope in" style="margin-bottom: -50px;">
- <form name="workflowForm" class="css-form" novalidate>
- <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <p>Please enter the missing report name.</p>
-
- <button class="btn btn-alt btn-small" type="button"
- ng-click="close()">close</button>
- </div>
- </form>
- <br />
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html
deleted file mode 100644
index e3fda72b..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!-- <style>
-.colTableLeftColumn {
- width: 45%;
- text-align: right;
- vertical-align: middle;
-}
-
-.colTableInput {
- width: 220px;
-}
-
-#columnEditTable .selectWrap {
- width: 220px;
-}
-</style>
- -->
-<div class="b2b-modal-header">
- <h2 id="myModalLabel" modal-title="">SQL Test Run -
- {{isError?'Failed':'Executed'}}</h2>
- <div class="corner-button in">
- <button type="button" class="close" aria-label="Close"
- ng-click="$dismiss('cancel')"></button>
- </div>
-</div>
-<div class="b2b-modal-body">
- <div>
-
- <div ng-show="isError">
- <h2>Error Message:</h2>
- <br>
- <p>{{errormessage}}</p>
- <h2>Stack Trace:</h2>
- <br>
- <p>{{stacktrace}}</p>
-
- </div>
- <table class="striped">
- <thead>
- <tr>
- <th ng-repeat="colName in queryData.reportDataColumns">{{colName}}</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat="rowData in queryData.reportDataRows">
- <td ng-repeat="keyName in queryData.reportDataColumns">{{rowData[keyName]}}</td>
- </tr>
-
- </tbody>
- </table>
- </div>
-
-</div>
-<div class="b2b-modal-footer ng-scope ng-isolate-scope in">
- <div class="cta-button-group in">
- <button class="btn btn-alt btn-small" type="button" ng-click="close()">Close</button>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/ngall-reports.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/ngall-reports.html
deleted file mode 100644
index b026ac83..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/ngall-reports.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="ISO-8859-1">
- <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
-
- <title>Reports NG</title>
-
- <!-- Resources -->
-
-
- <!-- B2b Library -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/font_icons.css">
-
- <!-- icons in open source -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ionicons.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css">
-
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/angular-bootstrap/ui-bootstrap-csp.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/angular-gridster/dist/angular-gridster.min.css">
- <!-- digital-design-library must be loaded late -->
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
-
- <!-- Common scripts -->
- <script src="app/fusion/external/angular-1.4.13/angular.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
- <script src="app/fusion/external/b2b/js/b2b-angular/b2b-library.min.js"></script>
- <script src="app/fusion/external/jquery/dist/jquery.min.js"></script>
- <script src="app/fusion/external/javascript-detect-element-resize/jquery.resize.js"></script>
- <script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
-
- <!-- EPSDK App scripts and common services -->
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/headerServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/manifestService.js"></script>
-
- <script src="app/fusion/scripts/DS2-directives/footer.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2Header.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2LeftMenu.js"></script>
- <script src="app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js"></script>
- <script src= "app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
-
- <!-- Page specific items -->
- <script src="app/fusion/external/d3/js/d3.js"></script>
- <link rel="stylesheet" type="text/css" href="app/fusion/external/angular-ui-grid/ui-grid.css">
- <script src="app/fusion/external/angular-ui-grid/ui-grid.min.js"></script>
- <script src="./app/fusion/scripts/DS2-services/ds2-raptor-report/raptorReportFactory.js"></script>
- <script src="./app/fusion/scripts/DS2-services/ds2-raptor-report/stepFormFactory.js"></script>
- <script src="./app/fusion/scripts/DS2-controllers/ds2-reports/report-search-controller.js"></script>
- <script src="./app/fusion/scripts/DS2-controllers/ds2-reports/report-run-controller.js"></script>
- <script src="./app/fusion/scripts/DS2-controllers/ds2-reports/report-step-controller.js"></script>
- <script src="./app/fusion/scripts/DS2-controllers/ds2-reports/report-import-controller.js"></script>
- <script src="./app/fusion/scripts/DS2-controllers/ds2-reports/report-chart-controller.js"></script>
- <script src="./app/fusion/scripts/DS2-view-models/ds2-reports/directive/dynamicform.js"></script>
- <script src="./app/fusion/scripts/DS2-controllers/ds2-reports/report-router.js"></script>
- <script src= "app/fusion/scripts/DS2-services/ds2-raptor-report/reportModalControllers.js"></script>
- <link rel="stylesheet" type="text/css" href="app/ngapp/styles.css">
-
-</head>
- <body class="appBody">
- <app-root></app-root>
- <div ds2-Header class="header-container" ></div>
- <div ds2-menu id="menuContainer" class="menu-container" ></div>
- <div ng-view id="rightContentProfile" class="content-container"></div>
- <div ds2-Footer class="footer-container"></div>
-
- <script type="text/javascript" src="app/ngapp/runtime.js"></script>
- <script type="text/javascript" src="app/ngapp/polyfills.js"></script>
- <script type="text/javascript" src="app/ngapp/main.js"></script>
-
- </body>
-</html>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-chart-wizard.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-chart-wizard.html
deleted file mode 100644
index ed3c4ba9..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-chart-wizard.html
+++ /dev/null
@@ -1,1080 +0,0 @@
-<style>
-table tbody td {
- border: none;
-}
-
-table tbody tr {
- border: none;
-}
-
-table {
- border: none;
- margin-bottom: 0px;
-}
-
-#RangeTable {
- margin-top: 5px;
- border: 1px solid black;
-}
-</style>
-
-<div id="page-content">
- <h1 class="heading-page">Report Chart Configuration</h1>
-
- <div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
- </div>
-
-
- <div ng-hide="showLoader">
- <div>
- <div class="form-row">
- <label for="checkbox1" class="checkbox"> <input
- id="checkbox1" type="checkbox" ng-model="reportRunJson.animation" /><i
- class="skin"></i><span>Animation</span>
- </label>
- </div>
- <table>
- <thead>
- <tr>
- <th width="30%">Chart Type</th>
- <th></th>
- </tr>
- </thead>
-
- <tbody>
- <tr>
- <td><select name="chartType" b2b-dropdown
- ng-model="reportRunJson.chartType">
- <option b2b-dropdown-list option-repeat="d in chartTypeOptions"
- value="{{d.value}}">{{d.text}}</option>
- </select></td>
- <td></td>
- </tr>
- </tbody>
- </table>
-
- <table>
- <thead>
- <tr>
- <th width="50px">Width (px)</th>
- <th>Height (px)</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><input type="text" name="displayName"
- ng-model="reportRunJson.width" style="width: 100px;"></td>
- <td><input type="text" name="displayName"
- ng-model="reportRunJson.height" style="width: 100px;"></td>
- </tr>
- </tbody>
- </table>
-
- <table>
- <thead>
- <tr>
- <th width="50px">Title</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <fieldset role="radiogroup" radio-group-accessibility>
- <td><label for="optionsRadiosShowTitleTrue" class="radio">
- <input type="radio" ng-model="reportRunJson.showTitle"
- id="optionsRadiosShowTitleTrue"
- name="optionsRadiosShowTitleTrue" value="true"> <i
- class="skin"></i> <span>Show</span>
- </label></td>
- <td><label for="optionsRadiosShowTitleFalse" class="radio">
- <input type="radio" ng-model="reportRunJson.showTitle"
- id="optionsRadiosShowTitleFalse"
- name="optionsRadiosShowTitleFalse" value="false"> <i
- class="skin"></i> <span>Hide</span>
- </label></td>
- </fieldset>
- </tr>
-
- </tbody>
- </table>
-
- <table>
- <thead>
- <tr>
- <th width="30%">Domain Axis</th>
- <th width="30%">Category</th>
- <th width="40%"></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><select name="chartType" b2b-dropdown
- ng-model="reportRunJson.domainAxis">
- <option b2b-dropdown-list
- option-repeat="d in reportRunJson.chartColumnJSONList"
- value="{{d.value}}">{{d.title}}</option>
- </select></td>
- <td><select name="chartType" b2b-dropdown
- ng-model="reportRunJson.categoryAxis">
- <option b2b-dropdown-list
- option-repeat="d in reportRunJson.chartColumnJSONList"
- value="{{d.value}}">{{d.title}}</option>
- </select></td>
- </tr>
- </tbody>
- </table>
-
-
- <div id="RangeTable">
-
- <table ng-repeat="rangeReport in reportRunJson.rangeAxisList">
- <thead>
- <tr>
- <th width="18%">Range Axis</th>
- <th width="15%">Y Axis</th>
- <th width="15%">Chart Title</th>
- <th width="22%">Color</th>
- <th width="25%">Line Type</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><select name="chartType" b2b-dropdown
- ng-model="rangeReport.rangeAxisLabelJSON.value"
- placeholder-text="Select"
- ng-disabled="rangeReport.removed=='true'">
- <option b2b-dropdown-list
- option-repeat="d in reportRunJson.chartColumnJSONList"
- value="{{d.value}}">{{d.title}}</option>
- </select></td>
- <td><input type="text" name="displayName"
- ng-model="rangeReport.rangeYAxis"
- ng-disabled="rangeReport.removed=='true'" style="width: 100px;">
- </td>
- <td><input type="text" name="displayName"
- ng-model="rangeReport.rangeChartGroup"
- ng-disabled="rangeReport.removed=='true'" style="width: 150px;">
- </td>
- <td><select name="chartType" b2b-dropdown
- ng-model="rangeReport.rangeColor"
- ng-disabled="rangeReport.removed=='true'">
- <option b2b-dropdown-list option-repeat="d in rangeColors"
- value="{{d.value}}">{{d.title}}</option>
- </select></td>
- <td><select name="lineType" b2b-dropdown
- ng-model="rangeReport.rangeLineType"
- ng-disabled="rangeReport.removed=='true'">
- <option b2b-dropdown-list option-repeat="d in lineTypes"
- value="{{d.value}}">{{d.title}}</option>
- </select></td>
- <td><span>
- <button ng-if="rangeReport.removed!='true'" type="submit"
- style="width: 90px; height: 35px; margin-left: 5px;"
- class="btn btn-secondary btn-small"
- ng-click="removeRangeAxisRow($index)">Remove</button>
- <button ng-if="rangeReport.removed=='true'" type="submit"
- style="width: 90px; height: 35px; margin-left: 5px;"
- class="btn btn-secondary btn-small" disabled="disabled">Removed</button>
- </span></td>
- </tr>
-
- </tbody>
- </table>
- <div align="right" style="margin-right:20px">
- <button type="submit" class="btn btn-secondary btn-small" ng-click="addRangeAxisRow()">Add</button>
- </div>
- </div>
- </div>
-
- <div ng-show=false style="min-height: 500px" data-ng-init="init()">
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Chart Type</label><BR>
- <div class="form-field" att-select="chartTypes"
- ng-model="reportRunJson.chartTypeJSON"
- placeholder="Select an Option" show-input-filter="true"
- ng-change="actionClicked()"></div>
- </div>
-
-
- <div class="fn-ebz-container" style="position: relative; top: -8px;">
- <label class="fn-ebz-text-label">Animate</label><BR>
- <div>
- <input type="checkbox" ng-model="reportRunJson.animation"
- att-checkbox data-ng-value="true">
- </div>
- </div>
- <BR>
-
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Width (Px)</label><BR> <input
- type="text" name="chartWidth" maxlength=4 only-digits
- ng-model="reportRunJson.width" style="width: 80px" />
- </div>
-
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Height (Px)</label><BR> <input
- type="text" name="chartHeight" maxlength=4 only-digits
- ng-model="reportRunJson.height" style="width: 80px" />
- </div>
- <BR>
-
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Title</label><BR> <span><input
- name="tle" type="radio" ng-model="reportRunJson.showTitle"
- data-ng-value="true" />Show</span> <span><input name="tle"
- type="radio" ng-model="reportRunJson.showTitle"
- data-ng-value="false" />Hide</span>
- </div>
- <BR>
-
-
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Domain Axis</label><BR>
- <div class="form-field"
- att-select="reportRunJson.chartColumnJSONList"
- ng-model="reportRunJson.domainAxisJSON"
- placeholder="Select an Option" show-input-filter="true"></div>
- </div>
-
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Category</label><BR>
- <div class="form-field"
- att-select="reportRunJson.chartColumnJSONList"
- ng-model="reportRunJson.categoryAxis" placeholder=""
- show-input-filter="true"></div>
- </div>
- <BR>
-
- <div
- style="border: 2px; border-style: solid; border-color: #808080; margin-bottom: 9px">
- <div ng-repeat="rangeReport in reportRunJson.rangeAxisList">
- <div style="margin-left: 5px">
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Range Axis</label><BR>
- <div class="form-field"
- att-select="reportRunJson.chartColumnJSONList"
- ng-model="rangeReport.rangeAxisLabelJSON"
- placeholder="Select an Option" show-input-filter="true"></div>
- </div>
-
-
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Y Axis</label><BR> <input
- id="yaxs" type="text" name="yAxis" maxlength=50
- ng-model=rangeReport.rangeYAxis style="width: 100px" />
- </div>
-
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Chart Title</label><BR> <input
- type="text" name="chartTitle" maxlength=50
- ng-model="rangeReport.rangeChartGroup" style="width: 200px" />
- </div>
-
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Color</label><BR>
- <div class="form-field" att-select="rangeColors"
- ng-model="rangeReport.rangeColorJSON"
- placeholder="Select an Option" show-input-filter="true"></div>
- </div>
-
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Line Type</label><BR>
- <div class="form-field" att-select="lineTypes"
- ng-model="rangeReport.rangeLineTypeJSON"
- placeholder="Select an Option" show-input-filter="true"></div>
- </div>
-
- <div class="fn-ebz-container"
- ng-show="reportRunJson.chartTypeJSON.value=='FlexTimeChart' ||
- reportRunJson.chartTypeJSON.value=='AnnotationChart'"
- style="position: relative; top: -8px;">
- <label class="fn-ebz-text-label">Area</label><BR> <input
- type="checkbox" ng-model="rangeReport.showAsArea" att-checkbox
- data-ng-value="true">
- </div>
-
- <div class="fn-ebz-container"
- style="position: relative; top: 25px;">
- <a href="javascript:void(0)" ng-show="{{$index==0}}"
- style="float: right;" att-button btn-type="secondary"
- size="small" att-accessibility-click="13,32"
- ng-click="addRangeAxisRow(rangeReport);">Add</a> <a
- href="javascript:void(0)" ng-show="{{$index>0}}"
- style="float: right;" att-button btn-type="secondary"
- size="small" att-accessibility-click="13,32"
- ng-click="removeRangeAxisRow($index);"> Remove</a>
- </div>
- </div>
- </div>
- </div>
- <BR>
-
- <accordion close-others="true" css="att-accordion--no-box">
- <accordion-group id="additionalOptions" heading="Additional Options"
- child-length="10">
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Primary Axis Label</label><BR>
- <input type="text" name="prAxis" maxlength=50
- ng-model="reportRunJson.primaryAxisLabel" style="width: 210px" />
- </div>
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Secondary Axis Label</label><BR>
- <input type="text" name="secAxis" maxlength=75
- ng-model="reportRunJson.secondaryAxisLabel" style="width: 210px" />
- </div>
- <BR>
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Range Axis Minimum Range</label><BR>
- <input type="text" name="rAxisMinRange" only-digits
- ng-model="reportRunJson.minRange" style="width: 210px" />
- </div>
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Maximum Range</label><BR> <input
- type="text" name="rAxisMaxRange" only-digits
- ng-model="reportRunJson.maxRange" ng-maxLength="35"
- style="width: 210px" />
- </div>
- <BR>
- </accordion-group> </accordion>
-
-
-
-
- <div ng-show="reportRunJson.chartType=='BarChart3D'">
-
- <accordion close-others="true" css="att-accordion--no-box">
- <accordion-group id="accBar" heading="Bar Chart Options"
- child-length="10">
-
-
- <div
- style="border: 2px; border-style: solid; border-color: #808080; margin-bottom: 9px">
- <div class="fn-ebz-container"
- style="position: relative; margin: 10px;">
- <label class="fn-ebz-text-label">Orientation</label><BR> <span><input
- name="orient" type="radio"
- ng-model="reportRunJson.barChartOptions.verticalOrientation"
- data-ng-value="true" />Vertical</span> <span><input name="orient"
- type="radio"
- ng-model="reportRunJson.barChartOptions.verticalOrientation"
- data-ng-value="false" />Horizontal</span>
- </div>
-
- <div class="fn-ebz-container"
- style="position: relative; margin: 10px;">
- <label class="fn-ebz-text-label">Stacked</label><BR> <span><input
- name="stack" type="radio"
- ng-model="reportRunJson.barChartOptions.stackedChart"
- data-ng-value="true" />Yes</span> <span><input name="stack"
- type="radio"
- ng-model="reportRunJson.barChartOptions.stackedChart"
- data-ng-value="false" />No</span>
- </div>
-
- <div class="fn-ebz-container"
- style="position: relative; margin: 10px;">
- <label class="fn-ebz-text-label">Show Controls</label><BR> <span><input
- name="shwcontrol" type="radio"
- ng-model="reportRunJson.barChartOptions.displayBarControls"
- data-ng-value="true" />Yes</span> <span><input name="shwcontrol"
- type="radio"
- ng-model="reportRunJson.barChartOptions.displayBarControls"
- data-ng-value="false" />No</span>
- </div>
-
- <div class="fn-ebz-container"
- style="position: relative; margin: 10px;">
- <label class="fn-ebz-text-label">XAxis Date Type</label><BR>
- <span><input name="xAxisDtype" type="radio"
- ng-model="reportRunJson.barChartOptions.xAxisDateType"
- data-ng-value="true" />Yes</span> <span><input name="xAxisDtype"
- type="radio"
- ng-model="reportRunJson.barChartOptions.xAxisDateType"
- data-ng-value="false" />No</span>
- </div>
-
- <div class="fn-ebz-container"
- style="position: relative; margin: 10px;">
- <label class="fn-ebz-text-label">Display less XAxis
- tickers</label><BR> <span><input name="xTicker" type="radio"
- ng-model="reportRunJson.barChartOptions.minimizeXAxisTickers"
- data-ng-value="true" />Yes</span> <span><input name="xTicker"
- type="radio"
- ng-model="reportRunJson.barChartOptions.minimizeXAxisTickers"
- data-ng-value="false" />No</span>
- </div>
- <BR>
-
- <div class="fn-ebz-container"
- style="position: relative; margin: 10px;">
- <label class="fn-ebz-text-label">Is Time Axis?</label><BR> <span><input
- name="timeAxis" type="radio"
- ng-model="reportRunJson.barChartOptions.timeAxis"
- data-ng-value="true" />Yes</span> <span><input name="timeAxis"
- type="radio" ng-model="reportRunJson.barChartOptions.timeAxis"
- data-ng-value="false" />No</span>
- </div>
-
- <div class="fn-ebz-container"
- style="position: relative; margin: 10px;">
- <label class="fn-ebz-text-label">Log Scale (Y Axis)</label><BR>
- <span><input type="checkbox"
- ng-model="reportRunJson.barChartOptions.yAxisLogScale"
- att-checkbox data-ng-value="true"></span>
-
- </div>
- </div>
-
- </accordion-group> </accordion>
- </div>
- {{reportRunJson.chartType}}
- <div ng-show="reportRunJson.chartType=='TimeSeriesChart'">
- <accordion close-others="true" css="att-accordion--no-box">
- <accordion-group id="accTimeChart"
- heading="Time Series Chart Options" child-length="10">
-
- <div
- style="border: 2px; border-style: solid; border-color: #808080; margin-bottom: 9px">
- <div style="margin-left: 5px">
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Render as</label><BR> <span><input
- name="renderAs" type="radio"
- ng-model="reportRunJson.timeSeriesChartOptions.lineChartRenderer"
- value="line" />Line</span> <span><input name="orient"
- type="radio"
- ng-model="reportRunJson.timeSeriesChartOptions.lineChartRenderer"
- value="area" />Area</span>
- </div>
-
- <div class="fn-ebz-container"
- style="position: relative; margin: 10px;">
- <label class="fn-ebz-text-label">X Axis Label</label><BR> <span><input
- type="checkbox"
- ng-model="reportRunJson.timeSeriesChartOptions.showXAxisLabel"
- att-checkbox data-ng-value="true"></span>
- </div>
- <BR>
-
- <div class="fn-ebz-container"
- style="position: relative; bottom: 10px;">
- <label class="fn-ebz-text-label">X Axis <br>Tickers
- </label><BR> <span style="position: relative; top: 10px;"><input
- type="checkbox"
- ng-model="reportRunJson.timeSeriesChartOptions.addXAxisTicker"
- att-checkbox data-ng-value="true"></span>
- </div>
-
- <div class="fn-ebz-container"
- style="position: relative; margin: 20px;">
- <label class="fn-ebz-text-label">Is Time Axis?</label><BR> <span><input
- name="timeAxisChart" type="radio"
- ng-model="reportRunJson.timeSeriesChartOptions.nonTimeAxis"
- data-ng-value="true" />Yes</span> <span><input
- name="timeAxisChart" type="radio"
- ng-model="reportRunJson.timeSeriesChartOptions.nonTimeAxis"
- data-ng-value="false" />No</span>
- </div>
-
- <div class="fn-ebz-container"
- style="position: relative; margin: 10px;">
- <label class="fn-ebz-text-label">Multi Series?</label><BR> <span><input
- name="mSeries" type="radio"
- ng-model="reportRunJson.timeSeriesChartOptions.multiSeries"
- data-ng-value="true" />Yes</span> <span><input name="mSeries"
- type="radio"
- ng-model="reportRunJson.timeSeriesChartOptions.multiSeries"
- data-ng-value="false" />No</span>
- </div>
- </div>
- </div>
-
- </accordion-group> </accordion>
-
- </div>
-
- <div>
-
- <accordion close-others="true" css="att-accordion--no-box">
- <accordion-group id="accFlexTimeChart"
- heading="Flex Time Series Chart Options" child-length="10">
-
- <div
- style="border: 2px; border-style: solid; border-color: #808080; margin-bottom: 9px">
- <div style="margin-left: 5px">
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Zoom-In Window</label><BR>
- <span><input type="text" name="zWindow" only-digits
- maxlength=3
- ng-model="reportRunJson.flexTimeSeriesChartOptions.zoomIn"></span>
- </div>
-
- <div class="fn-ebz-container"
- style="position: relative; margin: 10px;">
- <label class="fn-ebz-text-label">Time Axis Type</label><BR>
- <span><input name="timeAxisType" type="radio"
- ng-model="reportRunJson.flexTimeSeriesChartOptions.timeAxisType"
- value="weekly" />Weekly</span> <span><input name="timeAxisType"
- type="radio"
- ng-model="reportRunJson.flexTimeSeriesChartOptions.timeAxisType"
- value="daily" />Daily</span> <span><input name="timeAxisType"
- type="radio"
- ng-model="reportRunJson.flexTimeSeriesChartOptions.timeAxisType"
- value="hourly" />Hourly</span> <span><input name="timeAxisType"
- type="radio"
- ng-model="reportRunJson.flexTimeSeriesChartOptions.timeAxisType"
- value="30min" />30 Min</span>
- </div>
- </div>
- </div>
- </accordion-group> </accordion>
-
- </div>
-
-
-
-
-
-
-
-
- <accordion close-others="true" css="att-accordion--no-box">
- <accordion-group id="accCommonOptions" heading="Common Options"
- child-length="10">
-
- <div
- style="border: 2px; border-style: solid; border-color: #808080; margin-bottom: 9px">
- <div style="margin-left: 5px">
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Legend Angle</label><BR> <span><input
- name="langle" type="radio"
- ng-model="reportRunJson.commonChartOptions.legendLabelAngle"
- value="up45" />up 45&deg;</span> <span><input name="langle"
- type="radio"
- ng-model="reportRunJson.commonChartOptions.legendLabelAngle"
- value="up90" />up 90&deg;</span> <span><input name="langle"
- type="radio"
- ng-model="reportRunJson.commonChartOptions.legendLabelAngle"
- value="down45" />down 45&deg;</span> <span><input name="langle"
- type="radio"
- ng-model="reportRunJson.commonChartOptions.legendLabelAngle"
- value="down90" />down 90&deg;</span> <span><input name="langle"
- type="radio"
- ng-model="reportRunJson.commonChartOptions.legendLabelAngle"
- value="standard" />Standard</span>
- </div>
-
- <div class="fn-ebz-container"
- style="position: relative; margin: 15px;">
- <label class="fn-ebz-text-label">Legend Position</label><BR>
- <span><input name="lgPosition" type="radio"
- ng-model="reportRunJson.commonChartOptions.legendPosition"
- value="top" />Top</span> <span><input name="lgPosition"
- type="radio"
- ng-model="reportRunJson.commonChartOptions.legendPosition"
- value="bottom" />Bottom</span>
- </div>
- <BR>
-
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Legend</label><BR> <span><input
- name="lgd" type="radio"
- ng-model="reportRunJson.commonChartOptions.hideLegend"
- data-ng-value="false" />Yes</span> <span><input name="lgd"
- type="radio"
- ng-model="reportRunJson.commonChartOptions.hideLegend"
- data-ng-value="true" />No</span>
- </div>
-
- <div class="fn-ebz-container"
- style="position: relative; margin: 10px;">
- <label class="fn-ebz-text-label">Animation</label><BR> <span><input
- name="anmtate" type="radio"
- ng-model="reportRunJson.commonChartOptions.animateAnimatedChart"
- data-ng-value="true" />Yes</span> <span><input name="anmtate"
- type="radio"
- ng-model="reportRunJson.commonChartOptions.animateAnimatedChart"
- data-ng-value="false" />No</span>
- </div>
- <BR>
-
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Top Margin</label><BR> <input
- type="text" name="reportRunJson.commonChartOptions.topMargin"
- only-digits maxlength=3
- ng-model="reportRunJson.commonChartOptions.topMargin"
- style="width: 210px" />
- </div>
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Bottom Margin</label><BR> <input
- type="text" name="reportRunJson.commonChartOptions.bottomMargin"
- only-digits maxlength=3
- ng-model="reportRunJson.commonChartOptions.bottomMargin"
- style="width: 210px" />
- </div>
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Left Margin</label><BR> <input
- type="text" name="reportRunJson.commonChartOptions.leftMargin"
- only-digits maxlength=3
- ng-model="reportRunJson.commonChartOptions.leftMargin"
- style="width: 210px" />
- </div>
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Right Margin</label><BR> <input
- type="text" name="reportRunJson.commonChartOptions.rightMargin"
- only-digits maxlength=3
- ng-model="reportRunJson.commonChartOptions.rightMargin"
- style="width: 210px">
- </div>
- <BR>
- </div>
- </div>
- </accordion-group> </accordion>
- <br />
- <br /> <a href="javascript:void(0)" att-button btn-type="primary"
- att-accessibility-click="13,32" ng-click="saveChartData();">Save</a>
- <a
- href="report#/report_run/c_master={{reportRunJson.reportID}}&refresh=Y"
- att-button btn-type="primary" att-accessibility-click="13,32">Run</a>
- </div>
-
- <div>
- <b2b-expanders class="mpc-expanders" is-open="additionalOptionOpen">
- <b2b-expander-heading>
- <div class="row">
- <div class="span6">
- <div class="heading-medium b2b-blue"
- ng-class=" { 'b2b-toggle-header-active': !additionalOptionOpen, 'b2b-toggle-header-inactive': additionalOptionOpen } ">Additional
- Options</div>
- <p class="p-small"></p>
- </div>
- <div style="position: absolute; right: 250px;" class="span1">
- <i class="pull-right b2b-toggle-header-icon" b2b-expander-toggle
- b2b-accessibility-click="13,32"
- expand-icon="icon-primary-collapsed"
- collapse-icon="icon-primary-expanded" tabindex="0"
- aria-posinset="1" aria-setsize="2"></i>
- </div>
- </div>
- </b2b-expander-heading> <b2b-expander-body>
- <div>
- <div id="RangeTable">
- <table>
- <thead>
- <tr>
- <th width="30%">Primary Axis Label</th>
- <th width="30%">Secondary Axis Label</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><input type="text" name="primaryAxisLabel"
- ng-model="reportRunJson.primaryAxisLabel" style="width: 200px;">
- </td>
- <td><input type="text" name="secondaryAxisLabel"
- ng-model="reportRunJson.secondaryAxisLabel"
- style="width: 200px;"></td>
- </tr>
- </tbody>
- </table>
- <table>
- <thead>
- <tr>
- <th width="30%">Range Axis Minimum Range</th>
- <th width="30%">Maximum Range</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><input type="text" name="minRange"
- ng-model="reportRunJson.minRange" style="width: 200px;">
- </td>
- <td><input type="text" name="maxRange"
- ng-model="reportRunJson.maxRange" style="width: 200px;">
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </b2b-expander-body> </b2b-expanders>
-
- <!-- BAR CHART OPTION SECTION STARTS HERE -->
- <b2b-expanders ng-show="reportRunJson.chartType=='BarChart3D'"
- class="mpc-expanders" is-open="barChartOptionOpen">
- <b2b-expander-heading>
- <div class="row">
- <div class="span6">
- <div class="heading-medium b2b-blue"
- ng-class=" { 'b2b-toggle-header-active': !barChartOptionOpen, 'b2b-toggle-header-inactive': barChartOptionOpen } ">Bar
- Chart Options</div>
- <p class="p-small"></p>
- </div>
- <div style="position: absolute; right: 250px;" class="span1">
- <i class="pull-right b2b-toggle-header-icon" b2b-expander-toggle
- b2b-accessibility-click="13,32"
- expand-icon="icon-primary-collapsed"
- collapse-icon="icon-primary-expanded" tabindex="0"
- aria-posinset="1" aria-setsize="2"></i>
- </div>
- </div>
- </b2b-expander-heading> <b2b-expander-body>
- <div>
- <div id="RangeTable">
- <table>
- <thead>
- <tr>
- <th width="25%">Orientation</th>
- <th width="18%">Stacked</th>
- <th width="18%">Show Controls</th>
- <th width="18%">XAxis Date Type</th>
- <th width="21%">Display less XAxis tickers</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><label for="optionsOrientationVertical" class="radio">
- <input type="radio"
- ng-model="reportRunJson.barChartOptions.verticalOrientation"
- id="optionsOrientationVertical"
- name="optionsOrientationVertical" value="true"> <i
- class="skin"></i> <span>Vertical</span>
- </label> <label for="optionsOrientationHorizontal" class="radio">
- <input type="radio"
- ng-model="reportRunJson.barChartOptions.verticalOrientation"
- id="optionsOrientationHorizontal"
- name="optionsOrientationHorizontal" value="false"> <i
- class="skin"></i> <span>Horizontal</span>
- </label></td>
-
- <td><label for="optionsStackedYes" class="radio"> <input
- type="radio"
- ng-model="reportRunJson.barChartOptions.stackedChart"
- id="optionsStackedYes" name="optionsStackedYes" value="true">
- <i class="skin"></i> <span>Yes</span>
- </label> <label for="optionsStackedNo" class="radio"> <input
- type="radio"
- ng-model="reportRunJson.barChartOptions.stackedChart"
- id="optionsStackedNo" name="optionsStackedNo" value="false">
- <i class="skin"></i> <span>No</span>
- </label></td>
- <td><label for="optionsShowControlYes" class="radio">
- <input type="radio"
- ng-model="reportRunJson.barChartOptions.displayBarControls"
- id="optionsShowControlYes" name="optionsShowControlYes"
- value="true"> <i class="skin"></i> <span>Yes</span>
- </label> <label for="optionsShowControlNo" class="radio"> <input
- type="radio"
- ng-model="reportRunJson.barChartOptions.displayBarControls"
- id="optionsShowControlNo" name="optionsShowControlNo"
- value="false"> <i class="skin"></i> <span>No</span>
- </label></td>
- <td><label for="optionsXAxisDateTypeYes" class="radio">
- <input type="radio"
- ng-model="reportRunJson.barChartOptions.xAxisDateType"
- id="optionsXAxisDateTypeYes" name="optionsXAxisDateTypeYes"
- value="true"> <i class="skin"></i> <span>Yes</span>
- </label> <label for="optionsXAxisDateTypeNo" class="radio"> <input
- type="radio"
- ng-model="reportRunJson.barChartOptions.xAxisDateType"
- id="optionsXAxisDateTypeNo" name="optionsXAxisDateTypeNo"
- value="false"> <i class="skin"></i> <span>No</span>
- </label></td>
- <td><label for="optionsMinimizeXAxisTickersYes"
- class="radio"> <input type="radio"
- ng-model="reportRunJson.barChartOptions.minimizeXAxisTickers"
- id="optionsMinimizeXAxisTickersYes"
- name="optionsMinimizeXAxisTickersYes" value="true"> <i
- class="skin"></i> <span>Yes</span>
- </label> <label for="optionsMinimizeXAxisTickersNo" class="radio">
- <input type="radio"
- ng-model="reportRunJson.barChartOptions.minimizeXAxisTickers"
- id="optionsMinimizeXAxisTickersNo"
- name="optionsMinimizeXAxisTickersNo" value="false"> <i
- class="skin"></i> <span>No</span>
- </label></td>
- </tr>
- </tbody>
- </table>
- <table>
- <thead>
- <tr>
- <th width="25%">Is Time Axis?</th>
- <th width="25%">Log Scale (Y Axis)</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><label for="optionsTimeAxisYes" class="radio">
- <input type="radio"
- ng-model="reportRunJson.barChartOptions.timeAxis"
- id="optionsTimeAxisYes" name="optionsTimeAxisYes" value="true">
- <i class="skin"></i> <span>Yes</span>
- </label> <label for="optionsTimeAxisNo" class="radio"> <input
- type="radio" ng-model="reportRunJson.barChartOptions.timeAxis"
- id="optionsTimeAxisNo" name="optionsTimeAxisNo" value="false">
- <i class="skin"></i> <span>No</span>
- </label></td>
- <td><label for="logScaleYAxisCheckBox" class="checkbox">
- <input id="logScaleYAxisCheckBox" type="checkbox"
- ng-model="reportRunJson.barChartOptions.yAxisLogScale" /><i
- class="skin"></i><span></span>
- </label></td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </b2b-expander-body> </b2b-expanders>
- <!-- BAR CHART OPTION SECTION ENDS HERE -->
-
- <!-- TIME SERIES CHART OPTION SECTION STARTS HERE -->
- <b2b-expanders ng-show="reportRunJson.chartType=='TimeSeriesChart'"
- class="mpc-expanders" is-open="timeSeriesChartOptionOpen">
- <b2b-expander-heading>
- <div class="row">
- <div class="span6">
- <div class="heading-medium b2b-blue"
- ng-class=" { 'b2b-toggle-header-active': !timeSeriesChartOptionOpen, 'b2b-toggle-header-inactive': timeSeriesChartOptionOpen } ">Time
- Series Chart Options</div>
- <p class="p-small"></p>
- </div>
- <div style="position: absolute; right: 250px;" class="span1">
- <i class="pull-right b2b-toggle-header-icon" b2b-expander-toggle
- b2b-accessibility-click="13,32"
- expand-icon="icon-primary-collapsed"
- collapse-icon="icon-primary-expanded" tabindex="0"
- aria-posinset="1" aria-setsize="2"></i>
- </div>
- </div>
- </b2b-expander-heading> <b2b-expander-body>
- <div>
- <div>
- <table>
- <thead>
- <tr>
- <th width="20%">Render as</th>
- <th width="20%">X Axis Label</th>
- <th width="20%">X Axis Tickers</th>
- <th width="20%">Is Time Axis?</th>
- <th width="20%">Multi Series</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><label for="optionsLineChartRendererLine" class="radio">
- <input type="radio"
- ng-model="reportRunJson.timeSeriesChartOptions.lineChartRenderer"
- id="optionsLineChartRendererLine"
- name="optionsLineChartRendererLine" value="line"> <i
- class="skin"></i> <span>Line</span>
- </label> <label for="optionsLineChartRendererArea" class="radio">
- <input type="radio"
- ng-model="reportRunJson.timeSeriesChartOptions.lineChartRenderer"
- id="optionsLineChartRendererArea"
- name="optionsLineChartRendererArea" value="area"> <i
- class="skin"></i> <span>Area</span>
- </label></td>
- <td><label for="xAxisLabelCheckBox" class="checkbox">
- <input id="xAxisLabelCheckBox" type="checkbox"
- ng-model="reportRunJson.timeSeriesChartOptions.showXAxisLabel" /><i
- class="skin"></i><span></span>
- </label></td>
- <td><label for="addXAxisTickerCheckBox" class="checkbox">
- <input id="addXAxisTickerCheckBox" type="checkbox"
- ng-model="reportRunJson.timeSeriesChartOptions.addXAxisTicker" /><i
- class="skin"></i><span></span>
- </label></td>
- <td><label for="isTimeAxisCheckBox" class="checkbox">
- <input id="isTimeAxisCheckBox" type="checkbox"
- ng-model="reportRunJson.timeSeriesChartOptions.nonTimeAxis" /><i
- class="skin"></i><span></span>
- </label></td>
- <td><label for="multiSeriesCheckBox" class="checkbox">
- <input id="multiSeriesCheckBox" type="checkbox"
- ng-model="reportRunJson.timeSeriesChartOptions.multiSeries" /><i
- class="skin"></i><span></span>
- </label></td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </b2b-expander-body> </b2b-expanders>
- <!-- TIME SERIES CHART OPTION SECTION ENDS HERE -->
-
- <b2b-expanders class="mpc-expanders" is-open="commonOptionOpen">
- <b2b-expander-heading>
- <div class="row">
- <div class="span6">
- <div class="heading-medium b2b-blue"
- ng-class=" { 'b2b-toggle-header-active': !commonOptionOpen, 'b2b-toggle-header-inactive': commonOptionOpen } ">Common
- Options</div>
- <p class="p-small"></p>
- </div>
- <div style="position: absolute; right: 250px;" class="span1">
- <i class="pull-right b2b-toggle-header-icon" b2b-expander-toggle
- b2b-accessibility-click="13,32"
- expand-icon="icon-primary-collapsed"
- collapse-icon="icon-primary-expanded" tabindex="0"
- aria-posinset="1" aria-setsize="2"></i>
- </div>
- </div>
- </b2b-expander-heading> <b2b-expander-body>
- <div>
- <div>
- <div
- style="border: 2px; border-style: solid; border-color: #808080; margin-bottom: 9px">
- <div style="margin-left: 0px">
- <table>
- <thead>
- <tr>
- <th>Legend Angle</th>
- <th>Legend Position</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <fieldset role="radiogroup" radio-group-accessibility>
- <td><label for="optionsRadios1" class="radio"> <input
- type="radio"
- ng-model="reportRunJson.commonChartOptions.legendLabelAngle"
- id="optionsRadios1" name="optionsRadio1" value="up45">
- <i class="skin"></i> <span>up 45&deg;</span>
- </label> <label for="optionsRadios2" class="radio"> <input
- type="radio"
- ng-model="reportRunJson.commonChartOptions.legendLabelAngle"
- id="optionsRadios2" name="optionsRadio2" value="up90">
- <i class="skin"></i> <span>up 90&deg;</span>
- </label> <label for="optionsRadios3" class="radio"> <input
- type="radio"
- ng-model="reportRunJson.commonChartOptions.legendLabelAngle"
- id="optionsRadios3" name="optionsRadio3" value="down45">
- <i class="skin"></i> <span>down 45&deg;</span>
- </label> <label for="optionsRadios4444" class="radio"> <input
- type="radio"
- ng-model="reportRunJson.commonChartOptions.legendLabelAngle"
- id="optionsRadios4444" name="optionsRadio44" value="down90">
- <i class="skin"></i> <span>down 90&deg;</span>
- </label> <label for="optionsRadios5555" class="radio"> <input
- type="radio"
- ng-model="reportRunJson.commonChartOptions.legendLabelAngle"
- id="optionsRadios5555" name="optionsRadio55"
- value="standard"> <i class="skin"></i> <span>Standard</span>
- </label></td>
- </fieldset>
-
- <fieldset role="radiogroup" radio-group-accessibility>
- <td><label for="optionsRadiosTop" class="radio">
- <input type="radio"
- ng-model="reportRunJson.commonChartOptions.legendPosition"
- id="optionsRadiosTop" name="optionsRadioTop" value="top">
- <i class="skin"></i> <span>Top</span>
- </label> <label for="optionsRadiosBottom" class="radio"> <input
- type="radio"
- ng-model="reportRunJson.commonChartOptions.legendPosition"
- id="optionsRadiosBottom" name="optionsRadioBottom"
- value="bottom"> <i class="skin"></i> <span>Bottom</span>
- </label></td>
- </fieldset>
- </tr>
- </tbody>
- </table>
-
-
- <table>
- <thead>
- <tr>
- <th width="20%">Legend</th>
- <th width="20%">Animation</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <fieldset role="radiogroup" radio-group-accessibility>
- <td><label for="optionsRadiosHideLegendFalse"
- class="radio"> <input type="radio"
- ng-model="reportRunJson.commonChartOptions.hideLegend"
- id="optionsRadiosHideLegendFalse"
- name="optionsRadiosHideLegendFalse" value="false">
- <i class="skin"></i> <span>Yes</span>
- </label> <label for="optionsRadiosHideLegendTrue" class="radio">
- <input type="radio"
- ng-model="reportRunJson.commonChartOptions.hideLegend"
- id="optionsRadiosHideLegendTrue"
- name="optionsRadiosHideLegendTrue" value="true"> <i
- class="skin"></i> <span>No</span>
- </label></td>
- </fieldset>
-
- <fieldset role="radiogroup" radio-group-accessibility>
- <td><label for="optionsRadiosAnimateChartTrue"
- class="radio"> <input type="radio"
- ng-model="reportRunJson.commonChartOptions.animateAnimatedChart"
- id="optionsRadiosAnimateChartTrue"
- name="optionsRadiosAnimateChartTrue" value="true">
- <i class="skin"></i> <span>Yes</span>
- </label> <label for="optionsRadiosAnimateChartFalse" class="radio">
- <input type="radio"
- ng-model="reportRunJson.commonChartOptions.animateAnimatedChart"
- id="optionsRadiosAnimateChartFalse"
- name="optionsRadiosAnimateChartFalse" value="false">
- <i class="skin"></i> <span>No</span>
- </label></td>
- </fieldset>
- <td></td>
- </tr>
- </tbody>
- </table>
-
- <table>
- <thead>
- <tr>
- <th width="25%">Top Margin</th>
- <th width="25%">Bottom Margin</th>
- <th width="25%">Left Margin</th>
- <th width="25%">Right Margin</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><input type="text" name="topMargin"
- ng-model="reportRunJson.commonChartOptions.topMargin"
- style="width: 200px;"></td>
- <td><input type="text" name="bottomMargin"
- ng-model="reportRunJson.commonChartOptions.bottomMargin"
- style="width: 200px;"></td>
- <td><input type="text" name="leftMargin"
- ng-model="reportRunJson.commonChartOptions.leftMargin"
- style="width: 200px;"></td>
- <td><input type="text" name="rightMargin"
- ng-model="reportRunJson.commonChartOptions.rightMargin"
- style="width: 200px;"></td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </div>
- </b2b-expander-body> </b2b-expanders>
-
- </div>
- </div>
- <div>
- <button type="submit"
- style="width: 90px; height: 35px; margin-top: 20px; margin-left: 5px;"
- class="btn btn-alt btn-small" ng-click="saveChartData();">Save</button>
- <a
- href="report#/report_run/c_master={{reportRunJson.reportID}}&refresh=Y">
- <button type="submit"
- style="width: 90px; height: 35px; margin-top: 20px; margin-left: 5px;"
- class="btn btn-alt btn-small">Run</button>
- </a>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-import.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-import.html
deleted file mode 100644
index cd64b09f..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-import.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<div id="page-content">
-
-<h1 class="heading-page">Report Import</h1>
-
- <h2 id="myModalLabel" modal-title="">Import XML</h2>
-
-<div style="margin-top:5px; color:red;" ng-if="errorMessage&&errorMessage.length>0">
- <h2 id="myModalLabel" modal-title="" style="color:red;">{{errorMessage}}</h2>
-</div>
- <textarea b2b-reset b2b-dragon-input b2b-reset-textarea ng-model="xmlContent" class="span12" id="textareaXmlContent" style="height:480px;margin-top:5px;"></textarea>
-
- <button style="margin-top:5px;" type="submit" class="btn btn-alt btn-small" ng-click="importXML();">Import</button>
-
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-run.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-run.html
deleted file mode 100644
index ba609151..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-run.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<style>
-table tbody td {
- border: none;
-}
-
-table tbody tr {
- border: none;
-}
-
-table tbody {
- border: none;
-}
-
-table {
- border: none;
-}
-
-.grid {
- width: 100%;
- height: 400;
-}
-
-.no-rows {
- position: absolute;
- top: 0;
- bottom: 0;
- width: 100%;
- background: rgba(0, 0, 0, 0.4);
-}
-
-.no-rows .msg {
- opacity: 1;
- position: absolute;
- top: 20%;
- left: 20%;
- width: 60%;
- height: 50%;
- line-height: 200%;
- background-color: #eee;
- border-radius: 4px;
- border: 1px solid #555;
- text-align: center;
- font-size: 24px;
- display: table;
-}
-
-.no-rows .msg span {
- display: table-cell;
- vertical-align: middle;
-}
-
-.grid .ui-grid-header-cell {
- text-align: center;
-}
-
-body {
- font-size: 13px;
-}
-</style>
-
-<div id="page-content">
- <div style="width: 100%; overflow: hidden;">
- <div style="float: left;">
- <h1 class="heading-page">{{reportData.reportHeading}}</h1>
- </div>
- <div style="float: left; margin-left: 10px; margin-right: 10px;">
- <a style="font-size: 180%;"
- ng-href="report#/report_wizard/{{reportData.reportID}}"
- class="icon-misc-pen" ng-show="reportData.allowEdit"></a>
- </div>
- <div style="float: left; margin-left: 5px; margin-right: 10px;">
- <a style="font-size: 180%;"
- ng-href="report#/report_chart/{{reportData.reportID}}"
- class="icon-misc-piechart" ng-show="reportData.allowEdit"></a>
- </div>
-
- <div ng-show="reportData.allowEdit && showFormFields"
- style="margin-top: 5px;">
- <label for="checkbox1" class="checkbox"> <input
- id="checkbox1" type="checkbox" ng-model="showFormFieldId.value" /><i
- class="skin"></i><span>show IDs</span>
- </label>
- </div>
- </div>
- <div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
- </div>
- <h3 class="heading3">{{reportData.reportSubTitle}}</h3>
-
- <div ng-show="isInProgress" style="font-size: 50px; color: #2ca02c">Loading...</div>
-
- <form ng-show="showFormFields" class="row section-row"
- style="margin: 10px">
- <form-builder ng-form-fields="reportData.formFieldList"
- ng-show-field-id="showFormFieldId.value"
- ng-num-form-cols="reportData.numFormCols"
- ng-model="formFieldSelectedValues"
- ng-trigger-method="triggerOtherFormFields"></form-builder>
- <br>
- <br>
- <button type="submit"
- style="width: 90px; height: 35px; margin-top: 20px; margin-left: 5px;"
- class="btn btn-alt btn-small" ng-click="runReport()">Run</button>
- </form>
- <button type="submit" ng-show="showBackButton"
- style="width: 90px; height: 35px; margin-top: 20px; margin-left: 5px;"
- class="btn btn-alt btn-small" ng-click="backToParentReport()">Back</button>
- <iframe id="chartiframe" ng-show="showChart" width="100%"
- height="550px" style="border: none" scrolling="no"></iframe>
- <div id="errorDiv"></div>
- <div ng-if="showGrid">
- <div id="grid1" ui-grid="gridOptions" ui-grid-pagination
- ui-grid-pinning ui-grid-resize-columns class="grid"
- style="height: {{gridHeight}}">
- <div class="no-rows" ng-show="!gridOptions.data.length">
- <div class="msg">
- <span>{{reportData.message}}</span>
- </div>
- </div>
- </div>
- </div>
- <!-- <a type="submit" ng-show="showBackButton" style="margin: 10px" ng-href="report.htm#/report_run/{{parentReportUrlParams}}" att-button btn-type="primary" size="small" title='Back'>Back</a> -->
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-search.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-search.html
deleted file mode 100644
index 2fd0e436..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-search.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<div id="page-content" style="margin-right:-230px;">
-<style>
-.grid {
- width: 100%;
- height: 400px;
-}
-.grid .ui-grid-header-cell {
- text-align:center;
-}
-.icon-add-widget:before {
- content: "\e717";
-}
-.ui-grid-icon-angle-down {
- margin-top: 5px;
-}
-body {
- font-size:13px;
-}
-</style>
-<h1 class="heading-page">Report search</h1>
-<br>
-<div >
-<label style="float:left;margin-top:10px; margin-right: 5px;">Report Id:</label>
-
-<div class="form-row" style="float:left; width:160px;">
- <select id="dropdown1" name="dropdown1" b2b-dropdown placeholder-text="Select" ng-model="operatorRepId.index">
- <option b2b-dropdown-list option-repeat="d in operatorsRepId" value="{{d.index}}">{{d.text}}</option>
- </select>
-</div>
-
-<div class="form-field form-field__glued pull-left size-onefifth" style="float:left; width:160px;margin-right: 40px;">
- <input ng-model="reportId" type="text" placeholder="Search value?" style="margin-top:5px;width:160px; margin-left: 10px;">
-</div>
-
-<label class="pull-left" style="float:left;margin-top: 10px;margin-right: 5px;">Report Name:</label>
-
-<div class="form-row" style="float:left; width:160px;">
- <select id="dropdown2" name="dropdown2" b2b-dropdown placeholder-text="Select" ng-model="operatorRepName.index">
- <option b2b-dropdown-list option-repeat="e in operatorsRepName" value="{{e.index}}">{{e.text}}</option>
- </select>
-</div>
-
-<div class="form-field form-field__glued pull-left size-onefifth" style="width:13% !important;">
- <input ng-model="reportName" type="text" placeholder="Search value?" style="margin-top:5px;width:160px; margin-left: 10px;">
-</div>
-
-<div>
- <button style="margin-left:50px;margin-top:4px;" type="submit" class="btn btn-alt btn-small" ng-click="runReport();">Submit</button>
-</div>
-<div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
-</div>
-<br>
-
-<div id="grid1" ui-grid="gridOptions" ui-grid-pagination class="grid">
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-step.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-step.html
deleted file mode 100644
index 9550ac33..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-step.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<div id="page-content" >
- <br>
- <div>
- <b2b-tabset tab-id-selected="activeTabsId">
- <b2b-tab ng-repeat="tab in stepTabs" tab-item="tab" id="{{tab.uniqueId}}" aria-controls="{{tab.tabPanelId}}" ng-disabled="tab.disabled">
- {{tab.title}}
- </b2b-tab>
- </b2b-tabset>
- <div class="tab-content" >
- <div id="definitionTab" role="tabpanel" class="tab-pane" ng-class="{'active': 'definition'===activeTabsId}">
- <div ng-include src="'app/fusion/scripts/DS2-view-models/ds2-reports/steps/step1.html'"></div>
- </div>
- <div id="sqlTab" role="tabpanel" class="tab-pane" ng-class="{'active': 'sql'===activeTabsId}">
- <div ng-include src="'app/fusion/scripts/DS2-view-models/ds2-reports/steps/step2.html'"></div>
- </div>
- <div id="columnsTab" role="tabpanel" class="tab-pane" ng-class="{'active': 'columns'===activeTabsId}">
- <div ng-include src="'app/fusion/scripts/DS2-view-models/ds2-reports/steps/step3.html'"></div>
- </div>
- <div id="columnsTab" role="tabpanel" class="tab-pane" ng-class="{'active': 'formFields'===activeTabsId}">
- <div ng-include src="'app/fusion/scripts/DS2-view-models/ds2-reports/steps/step4.html'"></div>
- </div>
- <div id="columnsTab" role="tabpanel" class="tab-pane" ng-class="{'active': 'security'===activeTabsId}">
- <div ng-include src="'app/fusion/scripts/DS2-view-models/ds2-reports/steps/step5.html'"></div>
- </div>
- <div id="columnsTab" role="tabpanel" class="tab-pane" ng-class="{'active': 'log'===activeTabsId}">
- <div ng-include src="'app/fusion/scripts/DS2-view-models/ds2-reports/steps/step6.html'"></div>
- </div>
- <div id="columnsTab" role="tabpanel" class="tab-pane" ng-class="{'active': 'run'===activeTabsId}">
- <div ng-include src="'app/fusion/scripts/DS2-view-models/ds2-reports/steps/step7.html'"></div>
- </div>
- </div>
- </div>
-</div>
-
- \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step1.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step1.html
deleted file mode 100644
index 9e5851fe..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step1.html
+++ /dev/null
@@ -1,216 +0,0 @@
-<h1 class="heading-page">Step 1 - Report Definition</h1>
-
-<div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
-</div>
-
-<div class="span6" ng-hide="showLoader">
-
- <div class="form-row" ng-if="isEdit && !isCopy">
- <label for="textinputID-2a">Report ID</label>
- <div class="field-group">
- <input id="textinputID-2a" ddh-reset="" class="span12" type="text" data-ng-model="definitionData.reportId" ng-disabled="true">
- </div>
- </div>
-
- <div class="form-row" >
- <label for="textinputID-2a">Report Name</label>
- <div class="field-group">
- <input id="reportName" ddh-reset="" class="span12" type="text" data-ng-model="definitionData.reportName">
- </div>
- </div>
- <br>
- <div class="form-row" >
- <label for="textinputID-2a">Report Description</label>
- <div class="field-group">
- <textarea b2b-reset b2b-reset-textarea ng-model="definitionData.reportDescr" ng-disabled="false" ng-trim="false" placeholder="{{placeholderText}}" rows="{{textAreaRows}}" maxlength="{{textAreaMaxlength}}" class="span12" id="textareaID1Tooltip1" ng-focus='showTooltip1=true' ng-blur='showTooltip1=false' aria-describedby="textareaID1TooltipContent1"></textarea>
- </div>
- </div>
- <div class="form-row" >
- <label for="textinputID-2a">Report Type</label>
- <select id="reportType" name="dataSrc" b2b-dropdown placeholder-text="Select Report Type" data-ng-model="definitionData.reportType" >
- <option b2b-dropdown-list value="Linear">Linear</option>
- </select>
- </div>
- <div class="form-row" >
- <label for="selectInputID-2a">Data Source</label>
- <select id="dataSrc" name="dataSrc" b2b-dropdown placeholder-text="Select DBSource" ng-model="definitionData.dbSrc">
- <option b2b-dropdown-list option-repeat="d in definitionData.dbSrcOptions" value="{{d.id}}">{{d.name}}</option>
- </select>
-<!-- <div class="field-group"> -->
-<!-- <input id="dataSrc" ddh-reset="" class="span12" type="text" data-ng-model="definitionData.dbInfo" ng-disabled="true"> -->
-<!-- </div> -->
- </div>
- <div class="form-row" >
- <label for="textinputID-2a">Form Help Text</label>
- <div class="field-group">
- <textarea b2b-reset b2b-reset-textarea ng-model="definitionData.formHelpTxt" ng-disabled="disabled" ng-trim="false" placeholder="{{placeholderText}}" rows="{{textAreaRows}}" maxlength="{{textAreaMaxlength}}" class="span12" id="textareaID1Tooltip1" ng-focus='showTooltip1=true' ng-blur='showTooltip1=false' aria-describedby="textareaID1TooltipContent1"></textarea>
- </div>
- </div>
- <div class="form-row" >
- <label for="textinputID-2a">Report Definition</label>
- <div class="field-group">
- <input id="reportType" ddh-reset="" class="span12" type="text" data-ng-model="definitionData.repDefType" ng-disabled="true">
- </div>
- </div>
- <div class="form-row" >
- <label for="pageSizeDD">Page Size</label>
- <select id="pageSizeDD" name="pageSizeDD" aria-describedby="pageSizeDropdown" b2b-dropdown placeholder-text="Select Page Size" ng-model="definitionData.pageSize">
- <option b2b-dropdown-list option-repeat="d in pageSizeOptions" value="{{d.value}}">{{d.text}}</option>
- </select>
- </div>
- <div class="form-row">
- <div class="listbox-container">
- <label id="pageSizeDD">Display Area</label>
- <div class="listbox-list" tabindex="-1">
- <b2b-list-box current-index="currentIndex1" listbox-data="definitionData.displayArea">
- <div tabindex="-1" data-index="{{$index}}" b2b-accessibility-click="13,32" ng-repeat="displayArea in definitionData.displayArea" role="option" class="b2b-list-box-item" ng-class="{'b2b-list-box-item--selected' : displayArea.selected}" ng-bind-html="displayArea.name | unsafe"></div>
- </b2b-list-box>
- </div>
- </div>
- </div>
- <div class="form-row">
- <label for="hideFormFieldsRun" class="checkbox">
- <input id="hideFormFieldsRun" type="checkbox" ng-model="definitionData.hideFormFieldsAfterRun" /><i class="skin"></i><span>Hide Form fields after run?</span>
- </label>
- </div>
- <div class="form-row" >
- <label for="maxRowDD">Max Rows in Excel/CSV Download</label>
- <select id="maxRowDD" name="maxRowDD" aria-describedby="maxRowOptions" b2b-dropdown placeholder-text="Select Max Row" ng-model="definitionData.maxRowsInExcelCSVDownload">
- <option b2b-dropdown-list option-repeat="d in maxRowOptions" value="{{d.value}}">{{d.text}}</option>
- </select>
- </div>
- <div class="form-row" >
- <label for="frozenColDD">Columns to be Frozen</label>
- <select id="frozenColDD" name="frozenColDD" aria-describedby="Columns to be Frozen" b2b-dropdown placeholder-text="Select Columns to be Frozen" ng-model="definitionData.frozenColumns">
- <option b2b-dropdown-list option-repeat="d in frozenColOptions" value="{{d.value}}">{{d.text}}</option>
- </select>
- </div>
- <div class="form-row" >
- <label for="dataGridAlignDD">Data Grid Align</label>
- <select id="dataGridAlignDD" name="dataGridAlignDD" aria-describedby="Data Grid Align" b2b-dropdown placeholder-text="Select Data Grid Align" ng-model="definitionData.dataGridAlign">
- <option b2b-dropdown-list option-repeat="d in dataGridAlignOptions" value="{{d.value}}">{{d.text}}</option>
- </select>
- </div>
- <div class="form-row" >
- <label for="textinputID-2a">Empty message</label>
- <div class="field-group">
- <input id="emptyMessage" ddh-reset="" class="span12" type="text" data-ng-model="definitionData.emptyMessage">
- </div>
- </div>
-
- <div class="form-row" >
- <label for="highDataContainerDD">Height of the Data Container(%)</label>
- <select id="highDataContainerDD" name="highDataContainerDD" aria-describedby="Height of the Data Container" b2b-dropdown placeholder-text="Select Height of the Data Container" ng-model="definitionData.dataContainerHeight">
- <option b2b-dropdown-list option-repeat="d in dataContainerOptions" value="{{d.value}}">{{d.text}}</option>
- </select>
- </div>
- <div class="form-row" >
- <label for="widDataContainerDD">Width of the Data Container(%)</label>
- <select id="widDataContainerDD" name="widDataContainerDD" aria-describedby="Width of the Data Container" b2b-dropdown placeholder-text="Select Width of the Data Container" ng-model="definitionData.dataContainerWidth">
- <option b2b-dropdown-list option-repeat="d in dataContainerOptions" value="{{d.value}}">{{d.text}}</option>
- </select>
- </div>
- <div class="form-row">
- <label for="aScheduler" class="checkbox">
- <input id="aScheduler" type="checkbox" ng-model="definitionData.allowScheduler" /><i class="skin"></i><span>Allow Scheduler</span>
- </label>
- </div>
- <div class="form-row">
- <label for="sizeByContent" class="checkbox">
- <input id="sizeByContent" type="checkbox" ng-model="definitionData.sizedByContent" /><i class="skin"></i><span>Sized By Content</span>
- </label>
- </div>
- <br>
- <label id="pageSizeDD">Display Options:</label>
- <br>
- <div class="form-row">
- <label for="hideFormField" class="checkbox">
- <input id="hideFormField" type="checkbox" ng-model="displayOptions.hideFormFields" /><i class="skin"></i><span>Hide Form Fields</span>
- </label>
- </div>
- <div class="form-row">
- <label for="hideCart" class="checkbox">
- <input id="hideCart" type="checkbox" checked ng-model="displayOptions.hideChart" /><i class="skin"></i><span>Hide Chart</span>
- </label>
- </div>
- <div class="form-row">
- <label for="hideReportData" class="checkbox">
- <input id="hideReportData" type="checkbox" checked ng-model="displayOptions.hideReportData" /><i class="skin"></i><span>Hide Report Data</span>
- </label>
- </div>
-
- <div class="form-row">
- <label for="hideExcel" class="checkbox">
- <input id="hideExcel" type="checkbox" checked ng-model="displayOptions.hideExcel" /><i class="skin"></i><span>Hide Excel</span>
- </label>
- </div>
- <div class="form-row">
- <label for="hidePDF" class="checkbox">
- <input id="hidePDF" type="checkbox" checked ng-model="displayOptions.hidePdf" /><i class="skin"></i><span>Hide PDF</span>
- </label>
- </div>
-
- <div class="form-row">
- <label for="sortColRun" class="checkbox">
- <input id="sortColRun" type="checkbox" checked ng-model="definitionData.runtimeColSortDisabled" /><i class="skin"></i><span>Disable column sort at runtime?</span>
- </label>
- </div>
- <div class="form-row" >
- <label for="runTimeFormNumDD">Run-time Form Number Columns</label>
- <select id="runTimeFormNumDD" name="runTimeFormNumDD" aria-describedby="Run-time Form Number Columns" b2b-dropdown placeholder-text="Select Run-time Form Number Columns" ng-model="definitionData.numFormCols">
- <option b2b-dropdown-list option-repeat="d in runTimeFormNumOptions" value="{{d.value}}">{{d.text}}</option>
- </select>
- </div>
- <div class="form-row" >
- <label for="reportTitle">Report Title (if blank, the Report Name will be displayed)</label>
- <div class="field-group">
- <textarea b2b-reset b2b-reset-textarea ng-model="definitionData.reportTitle" ng-disabled="disabled" ng-trim="false" placeholder="{{placeholderText}}" rows="{{textAreaRows}}" maxlength="{{textAreaMaxlength}}" class="span12" id="reportTitle" ng-focus='showTooltip1=true' ng-blur='showTooltip1=false' aria-describedby="textareaID1TooltipContent1"></textarea>
- </div>
- </div>
- <div class="form-row" >
- <label for="reportSubTitle">Report Sub-Title</label>
- <div class="field-group">
- <textarea b2b-reset b2b-reset-textarea ng-model="definitionData.reportSubTitle" ng-disabled="disabled" ng-trim="false" placeholder="{{placeholderText}}" rows="{{textAreaRows}}" maxlength="{{textAreaMaxlength}}" class="span12" id="reportSubTitle" ng-focus='showTooltip1=true' ng-blur='showTooltip1=false' aria-describedby="textareaID1TooltipContent1"></textarea>
- </div>
- </div>
- <div class="form-row">
- <label for="oneTime" class="checkbox">
- <input id="oneTime" type="checkbox" ng-model="definitionData.oneTimeRec" /><i class="skin"></i><span>One Time</span>
- </label>
- </div>
- <div class="form-row">
- <label for="hourly" class="checkbox">
- <input id="hourly" type="checkbox" checked ng-model="definitionData.hourlyRec" /><i class="skin"></i><span>Hourly</span>
- </label>
- </div>
- <div class="form-row">
- <label for="daily" class="checkbox">
- <input id="daily" type="checkbox" ng-model="definitionData.dailyRec" /><i class="skin"></i><span>Daily</span>
- </label>
- </div>
- <div class="form-row">
- <label for="dailyMF" class="checkbox">
- <input id="dailyMF" type="checkbox" checked ng-model="definitionData.dailyMFRec" /><i class="skin"></i><span>Daily Monday - Friday</span>
- </label>
- </div>
- <div class="form-row">
- <label for="weekly" class="checkbox">
- <input id="weekly" type="checkbox" ng-model="definitionData.weeklyRec" /><i class="skin"></i><span>Weekly</span>
- </label>
- </div>
- <div class="form-row">
- <label for="monthly" class="checkbox">
- <input id="monthly" type="checkbox" checked ng-model="definitionData.monthlyRec" /><i class="skin"></i><span>Monthly</span>
- </label>
- </div>
- <br>
-
- <div class="form-row">
-<!-- <button class="btn btn-alt btn-small" type="button" ng-click="createDefinition()" ng-if="!isEdit">Save</button>
- --> <button class="btn btn-alt btn-small" type="button" ng-click="updateDef()" >Save</button>
-<!-- <button class="btn btn-alt btn-small" type="button" ng-click="next()" ng-show="$scope.isEdit" >Next</button>
- --> </div>
-
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step2.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step2.html
deleted file mode 100644
index e21af0c8..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step2.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<h1 class="heading-page">Step 2 - Report SQL</h1>
-
-<div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
-</div>
-<h2 ng-show="pageisCreating">{{pageMsg}}</h2>
-<div class="" ng-hide="showLoader">
- <div class="form-row" >
- <label for="textinputID-2a">Report SQL</label>
- <div class="field-group" align="center">
- <textarea b2b-reset b2b-reset-textarea ng-model="sqlScript.value" ng-trim="false" placeholder="{{placeholderText}}" rows="25" class="span12" id="textareaID1Tooltip1" ng-focus='showTooltip1=true' ng-blur='showTooltip1=false' aria-describedby="textareaID1TooltipContent1"></textarea>
- </div>
- </div>
- <div class="form-row" align="right">
- <button class="btn btn-alt btn-small" type="button" ng-click="testRunSql()" >Validate & Test Run SQL</button>
- </div>
- <div class="form-row">
-<!-- <button class="btn btn-alt btn-small" type="button" ng-click="previous()" >Previous</button>
- --> <button class="btn btn-alt btn-small" type="button" ng-click="updateDef()" >Save</button>
-<!-- <button class="btn btn-alt btn-small" type="button" ng-click="next()" >Next</button>
- --> </div>
-
-</div>
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step3.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step3.html
deleted file mode 100644
index e1f02a1c..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step3.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<h1 class="heading-page">Step 3 - Report Columns</h1>
-<div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
-</div>
-<div class="" ng-hide="showLoader">
- <div class="form-row" >
- <table class="striped">
- <thead>
- <tr>
- <th>No</th>
- <th key="id" sortable="true">ID</th>
- <th>Display Name</th>
- <th>Edit</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat = "rowData in colTableRowData">
- <td>{{$index+1}}</td>
- <td>{{rowData.id}}</td>
- <td>{{rowData.name}}</td>
- <td><a ng-click="openColumnPopup(rowData)" class="icon-misc-pen"></a></td>
- </tr>
- </tbody>
- </table>
- </div>
-<!-- <div class="form-row">
- <button class="btn btn-alt btn-small" type="button" ng-click="previous()" >Previous</button>
- <button class="btn btn-alt btn-small" type="button" ng-click="next()" >Next</button>
- </div> -->
-
-</div>
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step4.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step4.html
deleted file mode 100644
index dc3be5c8..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step4.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<h1 class="heading-page">Step 4 - Report Form Fields</h1>
-<div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
-</div>
-<div ng-hide="showLoader">
- <div class="form-row" >
- <h2>Report Form Fields 4</h2>
- <table class="striped">
- <thead>
- <tr>
- <th default-sort="a" sortable="true" >Order Number</th>
- <th>Field Name</th>
- <th>Edit</th>
- <th>Order</th>
- <th>Delete</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat = "rowData in formFieldData">
- <td>{{rowData.orderSeq}}</td>
- <td>{{rowData.name}}[{{rowData.id}}]</td>
- <td><a ng-click="openFormFieldPopup(rowData,'edit')" class="icon-misc-pen"></a></td>
- <td>
- <span ng-if="!$first">
- <a ng-click="formFieldReOrder(rowData.id, formFieldData[$index-1].id)" class="icon-controls-upPRIMARY"></a>
- </span>
- <span ng-if="!$last">
- <a ng-click="formFieldReOrder(formFieldData[$index+1].id, rowData.id)" class="icon-controls-down"></a>
- </span>
- </td>
- <td><a ng-click="deleteFormField(rowData)" class="icon-misc-trash"></a></td>
- </tr>
- </tbody>
- </table>
- </div>
- <div align="right">
- <button class="btn btn-alt btn-small" type="button" ng-click="addFormField()">Add</button>
- </div>
-<!-- <div class="form-row">
- <button class="btn btn-alt btn-small" type="button" ng-click="previous()" >Previous</button>
- <button class="btn btn-alt btn-small" type="button" ng-click="next()" >Next</button>
- </div> -->
-
-</div>
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step5.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step5.html
deleted file mode 100644
index 13278029..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step5.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<style>
-#stepView table tbody td {
- border: none;
-}
-
-#stepView table tbody tr {
- border: none;
-}
-
-.noTableBorder table tbody td {
- border: none;
-}
-
-.noTableBorder table tbody tr {
- border: none;
-}
-</style>
-<h1 class="heading-page">Step 5 - Report Security</h1>
-
-<div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
-</div>
-<div class="" ng-hide="showLoader">
- <div class="form-row">
- <div id="stepViewSecurity">
- <div class="noTableBorder">
- <table class="striped">
- <tbody>
- <tr>
- <td>Created By: {{reportSecurityInfo.createdUser}}</td>
- <td>Created Date: {{reportSecurityInfo.createdDate}}</td>
- <tr />
- <tr>
- <td>Last Updated By: {{reportSecurityInfo.updateUser}}</td>
- <td>Last Updated: {{reportSecurityInfo.updatedDate}}</td>
- <tr />
- <tr>
- <td>Report Owner: <select name="reportOwner" b2b-dropdown
- ng-model="reportSecurityInfo.ownerId">
- <option b2b-dropdown-list option-repeat="d in reportOwnerList"
- value="{{d.id}}">{{d.name}}</option>
- </select>
-
- </td>
- <td>Public? (All users can run the report): <select
- name="isPublic" b2b-dropdown
- ng-model="reportSecurityInfo.isPublic">
- <option b2b-dropdown-list option-repeat="d in ynOptions"
- value="{{d.value}}">{{d.text}}</option>
- </select>
- </td>
- <tr />
- </tbody>
- </table>
- </div>
-
- <div style="margin-top: 20px;">
- <h1 style="margin-bottom: 5px;">Report Users</h1>
- <table class="striped">
- <thead>
- <tr>
- <th width="10%">No</th>
- <th width="45%">User Name</th>
- <th width="15%">Run Access</th>
- <th width="15%">Edit Access</th>
- <th width="15%">Remove</th>
- <tr />
- </thead>
- <tbody>
- <tr ng-repeat="reportUser in reportSecurityUsers">
- <td>{{$index+1}}</td>
- <td>{{reportUser.name}}</td>
- <td>
- <label for="switch{{$index+1}}runAccess"
- class="btn-switch-label"> <input type="checkbox"
- role="switch" id="switch{{$index+1}}runAccess" b2b-switches
- ng-model="reportUser.runAccess" ng-disabled=true aria-disabled=true aria-label="">
- </label>
- </td>
- <td><label for="switch{{$index+1}}" class="btn-switch-label">
- <input type="checkbox" role="switch" id="switch{{$index+1}}"
- b2b-switches ng-model="reportUser.accessAllowed"
- ng-click="toggleUserEditAccessActive(reportUser)"
- ng-disabled=false aria-disabled=false aria-label="">
- </label></td>
- <td><a class="icon-misc-trash" style="font-size: 22px;"
- ng-click="removeReportSecurityUser(reportUser)"> </a></td>
- </tr>
- </tbody>
- </table>
- </div>
- <div>
- <h2>Grant Access To:</h2>
- <div>
- <select id="reportUser" name="reportUser" b2b-dropdown
- ng-model="addReportUserId.id" placeholder-text="Select a User">
- <option b2b-dropdown-list option-repeat="d in reportOwnerList"
- value="{{d.id}}">{{d.name}}</option>
- </select>
- </div>
- <div>
- <button class="btn btn-alt btn-small" type="button"
- ng-click="addReportSecurityUser(addReportUserId.id)">Add</button>
- </div>
- </div>
-
- <div style="margin-top: 20px;">
- <h1>Report Roles</h1>
- <table class="striped">
- <thead>
- <tr>
- <th width="10%">No</th>
- <th width="45%">Role Name</th>
- <th width="15%">Run Access</th>
- <th width="15%">Edit Access</th>
- <th width="15%">Remove</th>
- <tr />
- </thead>
- <tbody>
- <tr ng-repeat="reportRole in reportSecurityRoles">
- <td>{{$index+1}}</td>
- <td>{{reportRole.name}}</td>
- <td>
- <label for="switch{{$index+1}}RoleRunAccess"
- class="btn-switch-label"> <input type="checkbox"
- role="switch" id="switch{{$index+1}}RoleRunAccess" b2b-switches
- ng-model="reportRole.runAccess" ng-disabled=true aria-disabled=true aria-label="">
- </label>
- </td>
- <td><label for="switch{{$index+1}}RoleEditAccess"
- class="btn-switch-label"> <input type="checkbox"
- role="switch" id="switch{{$index+1}}RoleEditAccess"
- b2b-switches ng-model="reportRole.accessAllowed"
- ng-click="toggleRoleEditAccessActive(reportRole)"
- ng-disabled=false aria-disabled=false aria-label="">
- </label></td>
- <td><a class="icon-misc-trash"
- ng-click="removeReportSecurityRole(reportRole)"
- style="font-size: 22px;"> </a></td>
- </tr>
- </tbody>
- </table>
- <div>
- <h2 colspan="2">Grant Access To:</h2>
- <div colspan="2">
- <select name="reportOwner" b2b-dropdown
- ng-model="addReportRoleId.id" placeholder-text="Select a Role">
- <option b2b-dropdown-list option-repeat="d in reportRoleList"
- value="{{d.id}}">{{d.name}}</option>
- </select>
- </div>
- <div>
- <button class="btn btn-alt btn-small" type="button"
- ng-click="addReportSecurityRole(addReportRoleId.id)">Add</button>
- </div>
- </div>
- </div>
-
- </div>
- </div>
- <div class="form-row">
-<!-- <button class="btn btn-alt btn-small" type="button"
- ng-click="previous()">Previous</button> -->
- <button class="btn btn-alt btn-small" type="button"
- ng-click="saveReportSecurityInfo()">Save</button>
-<!-- <button class="btn btn-alt btn-small" type="button" ng-click="next()">Next</button>
- --> </div>
-
-</div>
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step6.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step6.html
deleted file mode 100644
index 4849190a..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step6.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<h1 class="heading-page">Step 6 - Report Log</h1>
-
-<div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
-</div>
-<div ng-hide="showLoader">
- <div class="form-row" >
- <h2 for="textinputID-2a">Report Logs</h2>
- <table class="striped" ng-cloak>
- <thead>
- <tr>
- <th>No</th>
- <th>User Name</th>
- <th>Log Time</th>
- <th>Action</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat = "rowData in logs">
- <td>{{$index+1}}</td>
- <td>{{rowData.userName}}</td>
- <td>{{rowData.logTime}}</td>
- <td>{{rowData.action}}</td>
- </tr>
- </tbody>
- </table>
- </div>
-<!-- <div class="form-row">
- <button class="btn btn-alt btn-small" type="button" ng-click="previous()" >Previous</button>
- <button class="btn btn-alt btn-small" type="button" ng-click="next()" >Next</button>
- </div> -->
-
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step7.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step7.html
deleted file mode 100644
index 298cce8f..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step7.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<h1 class="heading-page">Step 7 - Report Run</h1>
-
-<div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
-</div>
-<div class="" ng-hide="showLoader">
- <div class="form-row" >
- <button class="btn btn-alt btn-small" type="button" ng-click="runReport()" >Run Report</button>
- </div>
-<!-- <div class="form-row">
- <button class="btn btn-alt btn-small" type="button" ng-click="previous()" >Previous</button>
- </div> -->
-</div>
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step1.json b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step1.json
deleted file mode 100644
index abdbd023..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step1.json
+++ /dev/null
@@ -1,232 +0,0 @@
-{
- "step" : "1",
- "content": {
- "title": "Step 1 : Report Definition",
- "sections": [
- {
- "title": "",
- "elements": [
- {
- "input": "hidden",
- "name": "proj_id",
- "displayName": "Project Id",
- "defaultValue": ""
- },
- {
- "input": "text",
- "name": "reportId",
- "displayName": "Report ID:",
- "defaultValue": ""
- },
- {
- "input": "text",
- "name": "reportName",
- "displayName": "Report Name *:",
- "defaultValue": ""
- },
- {
- "input": "textarea",
- "name": "reportDescr",
- "displayName": "Report Description:",
- "style":"width:300px;height:80px;"
- },
- {
- "input": "select",
- "name": "reportType",
- "ngModelName":"selectedReportType.value",
- "displayName": "Report Type: ",
- "defaultValue": "no",
- "action": "",
- "action_img": "",
- "optionsName":"reportTypes",
- "options":[{"value":"linear", "text":"Linear"}]
- },
- {
- "input": "select",
- "name": "dataSource",
- "ngModelName":"selectedDataSource.value",
- "displayName": "Data Source:",
- "defaultValue": "no",
- "action": "",
- "action_img": "",
- "optionsName":"DataSources",
- "options":[{"value":"local", "text":"Local"}]
- },
- {
- "input": "textarea",
- "name": "formHelpText",
- "displayName": "Form Help Text:",
- "style":"width:300px;height:80px;"
- },
- {
- "input": "select",
- "name": "pageSize",
- "ngModelName":"selectedPageSize.value",
- "displayName": "Page Size:",
- "defaultValue": "no",
- "action": "",
- "action_img": "",
- "optionsName":"PageSizes",
- "options":[ {"value":"10", "text":"10"},
- {"value":"20", "text":"20"},
- {"value":"50", "text":"50"},
- {"value":"100", "text":"100"},
- {"value":"500", "text":"500"}
- ]
- },
- {
- "input": "checkboxGroup",
- "name":"displayArea",
- "displayName": "Display Area:",
- "defaultValue": "no",
- "action": "",
- "action_img": "",
- "checkboxes":[
- {"value":"homeSelected", "text":"HOME"},
- {"value":"customerSelected", "text":"CUSTOMER"},
- {"value":"reportsSelected", "text":"REPORTS"},
- {"value":"utilSelected", "text":"Utilization"},
- {"value":"tmSelected", "text":"Tunnel Management"},
- {"value":"trSelected", "text":"Tunnel Routing"},
- {"value":"cmSelected", "text":"Capacity Management"},
- {"value":"tlSelected", "text":"Traffic Loss"},
- {"value":"smSelected", "text":"System Monitoring"},
- {"value":"netOperateSelected", "text":"Network Operation Monitoring"}
- ]
- },
-
- {
- "input": "checkboxGroup",
- "name": "hideFormFieldsAfterRun",
- "displayName": "Hide Form Fields After Run:",
- "defaultValue": "no",
- "action": "",
- "action_img": "",
- "optionsName":"HideFormFieldsAfterRun",
- "checkboxes":[{"value":"hideFormFieldsAfterRunSelected.value", "text":""}
- ]
- },
- {
- "input": "select",
- "name": "maxRowsInExcelCSVDownload",
- "ngModelName":"selectedMaxRowsInExcelCSVDownload.value",
- "displayName": "Max Rows in Excel/CSV Download:",
- "defaultValue": "no",
- "action": "",
- "action_img": "",
- "optionsName":"PageSizes",
- "options":[{"value":"500","text":"500"},{"value":"1000","text":"1000"},{"value":"2000","text":"2000"},{"value":"3000","text":"3000"},{"value":"4000","text":"4000"},{"value":"5000","text":"5000"},{"value":"10000","text":"10000"},{"value":"15000","text":"15000"},{"value":"20000","text":"20000"},{"value":"25000","text":"25000"},{"value":"30000","text":"30000"},{"value":"35000","text":"35000"},{"value":"40000","text":"40000"},{"value":"45000","text":"45000"},{"value":"50000","text":"50000"},{"value":"65000","text":"65000"}]
- },
- {
- "input": "select",
- "name": "frozenColumns",
- "ngModelName":"selectedFrozenColumns.value",
- "displayName": "Columns to be Frozen:",
- "defaultValue": "",
- "action": "",
- "action_img": "",
- "optionsName":"frozenColumnsOptions",
- "options":[{"value":"0","text":"0"},{"value":"1","text":"1"},{"value":"2","text":"2"},{"value":"3","text":"3"},{"value":"4","text":"4"}]
- },
- {
- "input": "select",
- "name": "dataGridAlign",
- "ngModelName":"selectedDataGridAlign.value",
- "displayName": "Data Grid Align:",
- "defaultValue": "",
- "action": "",
- "action_img": "",
- "optionsName":"selectedDataGridAlignOptions",
- "options":[{"value":"left","text":"Left"},{"value":"right","text":"Right"},{"value":"center","text":"Center"}]
- },
- {
- "input": "textarea",
- "name": "emptyMessage",
- "displayName": "Empty Message:",
- "style":"width:300px;height:80px;"
- },
- {
- "input": "select",
- "name": "dataContainerHeight",
- "ngModelName":"selectedDataContainerHeight.value",
- "displayName": "Height of the Data Container:",
- "defaultValue": "",
- "action": "",
- "action_img": "",
- "optionsName":"dataContainerHeightOptions",
- "options":[{"value":"200","text":"200%"},{"value":"190","text":"190%"},{"value":"180","text":"180%"},{"value":"170","text":"170%"},{"value":"160","text":"160%"},{"value":"150","text":"150%"},{"value":"140","text":"140%"},{"value":"130","text":"130%"},{"value":"120","text":"120%"},{"value":"110","text":"110%"},{"value":"100","text":"100%"},{"value":"90","text":"90%"},{"value":"80","text":"80%"},{"value":"70","text":"70%"},{"value":"60","text":"60%"},{"value":"50","text":"50%"},{"value":"40","text":"40%"},{"value":"30","text":"30%"},{"value":"20","text":"20%"},{"value":"10","text":"10%"}]
- },
- {
- "input": "select",
- "name": "dataContainerWidth",
- "ngModelName":"selectedDataContainerWidth.value",
- "displayName": "Width of the Data Container:",
- "defaultValue": "",
- "action": "",
- "action_img": "",
- "optionsName":"dataContainerWidthOptions",
- "options":[{"value":"200","text":"200%"},{"value":"190","text":"190%"},{"value":"180","text":"180%"},{"value":"170","text":"170%"},{"value":"160","text":"160%"},{"value":"150","text":"150%"},{"value":"140","text":"140%"},{"value":"130","text":"130%"},{"value":"120","text":"120%"},{"value":"110","text":"110%"},{"value":"100","text":"100%"},{"value":"90","text":"90%"},{"value":"80","text":"80%"},{"value":"70","text":"70%"},{"value":"60","text":"60%"},{"value":"50","text":"50%"},{"value":"40","text":"40%"},{"value":"30","text":"30%"},{"value":"20","text":"20%"},{"value":"10","text":"10%"}]
- },
- {
- "input": "checkboxGroup",
- "name": "displayOptions",
- "displayName": "Display Options:",
- "defaultValue": "no",
- "action": "",
- "action_img": "",
- "checkboxes":[{"value":"hideFormFieldsSelected.value", "text":"Hide Form Fields"},
- {"value":"hideChartSelected.value", "text":"Hide Chart"},
- {"value":"hideReportDataSelected.value", "text":"Hide Report Data"},
- {"value":"hideExcelSelected.value", "text":"Hide Excel"},
- {"value":"hidePdfSelected.value", "text":"Hide PDF"}
- ]
- },
- {
- "input": "checkboxGroup",
- "name":"runtimeColSort",
- "displayName": "Disable column sort at runtime:",
- "defaultValue": "no",
- "action": "",
- "action_img": "",
- "checkboxes":[{"value":"runtimeColSortDisabled.value", "text":""}
- ]
- },
- {
- "input": "select",
- "name": "runtimeFormNumberColumns",
- "ngModelName":"selectedNumFormCols.value",
- "displayName": "Run-time Form Number Columns:",
- "defaultValue": "no",
- "action": "",
- "action_img": "",
- "optionsName":"runtimeFormNumberColumns",
- "options":[ {"value":"1", "text":"1"},
- {"value":"2", "text":"2"},
- {"value":"3", "text":"3"},
- {"value":"3", "text":"4"}
- ]
- },
- {
- "input": "text",
- "name": "reportTitle",
- "displayName": "Report Title:",
- "defaultValue": ""
- },
- {
- "input": "text",
- "name": "reportSubTitle",
- "displayName": "Report Subtitle:",
- "defaultValue": ""
- }
- ]
-
- },
- {
- "title": "finalButton",
- "submitAction" : "",
- "next":"Microservice Config",
- "previous":"none"
- }
- ]
- }
-}
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step2.json b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step2.json
deleted file mode 100644
index ca01985d..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step2.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "step" : "2",
- "content": {
- "title": "Step 2 : Report SQL",
- "sections": [
- {
- "title": "",
- "elements": [
- {
- "input": "textarea",
- "spanOverTwoColumns":"true",
- "name": "sqlScript",
- "displayName": "SQL script:",
- "defaultValue":"SELECT ",
- "style":"width: 600px; height: 400px"
- }
- ],
- "buttons": [
- {
- "text":"Validate/Test Run SQL",
- "value":"next",
- "ngFunction":"testRunSql()"
- }]
-
- },
- {
- "title": "finalButton",
- "submitAction" : "",
- "next":"Microservice Config",
- "previous":"none"
- }
- ]
- }
-}
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step3.json b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step3.json
deleted file mode 100644
index 9ea9b6f4..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step3.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "step" : "3",
- "content": {
- "title": "",
- "sections": [
- {
- "title": "",
- "elements": [
- ]
- },
- {
- "title": "finalButton",
- "submitAction" : "",
- "next":"Microservice Config",
- "previous":"none"
- }
- ]
- }
-}
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step4.json b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step4.json
deleted file mode 100644
index 971a0cf3..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step4.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "step" : "4",
- "content": {
- "title": "",
- "sections": [
- {
- "title": "",
- "elements": [
- ],
- "buttons": [
- {
- "text":"Add",
- "value":"add",
- "ngFunction":"addNewFormField()"
- }]
- },
- {
- "title": "finalButton",
- "submitAction" : "",
- "next":"Microservice Config",
- "previous":"none"
- }
- ]
- }
-}
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step5.json b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step5.json
deleted file mode 100644
index cc10114d..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step5.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "step" : "5",
- "content": {
- "title": "",
- "sections": [
- {
- "title": "",
- "elements": [
- ]
- },
- {
- "title": "finalButton",
- "submitAction" : "",
- "next":"Microservice Config",
- "previous":"none"
- }
- ]
- }
-}
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step6.json b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step6.json
deleted file mode 100644
index e3b1ccce..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step6.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "step" : "6",
- "last_step": true,
- "hideSaveButton":true,
- "hideBackButton":true,
- "content": {
- "title": "Step 6 : Run",
- "sections": [
- {
- "elements": [
- ],
- "buttons": [
- {
- "text":"Run Report",
- "value":"next",
- "ngFunction":"RunCurrentReport()"
- }]
- },
- {
- "title": "finalButton",
- "submitAction" : "",
- "next":"Microservice Config",
- "previous":"none"
- }
- ]
-
- }
-}
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/report-step.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/report-step.html
deleted file mode 100644
index 9b498870..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/report-step.html
+++ /dev/null
@@ -1,243 +0,0 @@
-<!-- <link rel="stylesheet" type="text/css" href="static/fusion/raptor/css/raptor.css"> -->
-<style>
-#stepView table tbody td {
- border: none;
-}
-
-#stepView table tbody tr {
- border: none;
-}
-
-
-.noTableBorder table tbody td {
- border: none;
-}
-.noTableBorder table tbody tr {
- border: none;
-}
-.selectWrap {
- width: 300px;
-}
-.tdLeftColumn {
- text-align: right;
- vertical-align:middle;
-}
-
-.tabs.tabs-justified > li.active, .tabs.promo-tabs > li.active {
-z-index:0;
-}
-</style>
-
-<div id="page-content">
-<h1 class="heading-page">Report Wizard</h1>
-
-
-<!-- <h1 id="tabs---promo">Tabs - Promo</h1>
-<button class="btn btn-secondary btn-small" ng-click="gTabs[3].disabled = !gTabs[3].disabled">{{gTabs[3].disabled?'Enable':'Disable'}}</button> - Toggle 4th (Features) Tab
-<br><br> -->
- <b2b-tabset tab-id-selected="activeTabsId">
- <b2b-tab ng-repeat="tab in gTabs" tab-item="tab"
- id="{{tab.uniqueId}}" aria-controls="{{tab.tabPanelId}}"
- ng-disabled="tab.disabled">
- {{tab.title}}
- </b2b-tab>
- </b2b-tabset>
-<br><br>
-<div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
-</div>
-
-<div ng-hide="showLoader">
-
-<!-- <select ng-model="prj"
- ng-options="item.projectName for item in allProjects track by item.id" data-ng-init="getAllProjects()"
- ng-change="selectAction();">
- <option value="">Select project</option>
-</select>
-
-<a ng-click="createAction()" class="pointer">Create Project</a> -->
-
-<input type="hidden" name="project_id" ng-model="project_id" value = ""/>
-
-<div id="stepViewColumn" ng-show = "isColumnStep">
- <h1>Step 3 : Columns</h1>
- <table class="striped">
- <thead>
- <tr>
- <th>No</th>
- <th>Column Name</th>
- <th>ID</th>
- <th>Edit</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat = "rowData in colTableRowData">
- <td>{{$index+1}}</td>
- <td>{{rowData.name}}</td>
- <td>{{rowData.id}}</td>
- <td><a ng-click="openColumnPopup(rowData)" class="icon-misc-pen"></a></td>
- </tr>
- </tbody>
- </table>
-</div>
-
-<div id="stepViewFormField" ng-show = "isFormFieldStep">
- <h1>Step 4 : Form Fields</h1>
- <table class="striped">
- <thead>
- <tr>
- <th>No</th>
- <th>Field Name</th>
- <th>Edit</th>
- <th>Delete</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat = "rowData in formFieldData">
- <td>{{$index+1}}</td>
- <td>{{rowData.name}}[{{rowData.id}}]</td>
- <td><a ng-click="openFormFieldPopup(rowData)" class="icon-misc-pen"></a></td>
- <td><a ng-click="deleteFormField(rowData)" class="icon-misc-trash"></a></td>
- </tr>
- </tbody>
- </table>
-</div>
-
-<div id="stepViewSecurity" ng-show = "isSecurityStep">
- <h1>Step 5 : Report Security</h1>
- <div class="noTableBorder">
- <table class="striped">
- <tbody>
- <tr>
- <td>Created By: {{reportSecurityInfo.createdUser}}</td>
- <td>Created Date: {{reportSecurityInfo.createdDate}}</td>
- <tr/>
- <tr>
- <td>Last Updated By: {{reportSecurityInfo.updateUser}}</td>
- <td>Last Updated: {{reportSecurityInfo.updatedDate}}</td>
- <tr/>
- <tr>
- <td>
- Report Owner:
-
- <select name="reportOwner" b2b-dropdown ng-model="reportOwnerId.id">
- <option b2b-dropdown-list option-repeat="d in reportOwnerList" value="{{d.id}}">{{d.name}}</option>
- </select>
-
- </td>
- <td>
- Public? (All users can run the report):
- <select name="isPublic" b2b-dropdown ng-model="reportSecurityInfo.isPublic">
- <option b2b-dropdown-list option-repeat="d in isPublicOptionList" value="{{d.value}}">{{d.text}}</option>
- </select>
- </td>
- <tr/>
- </tbody>
- </table>
- </div>
-
- <div style="margin-top:20px;">
- <h1 style="margin-bottom:5px;">Report Users</h1>
- <table class="striped">
- <thead>
- <tr>
- <th width="10%">No</th>
- <th width="45%">User Name</th>
- <th width="15%">Run Access</th>
- <th width="15%">Edit Access</th>
- <th width="15%">Remove</th>
- <tr/>
- </thead>
- <tbody>
- <tr ng-repeat = "reportUser in reportSecurityUsers">
- <td>{{$index+1}}</td>
- <td>{{reportUser.name}}</td>
- <td>
- <label for="switch{{$index+1}}runAccess" class="btn-switch-label">
- <input type="checkbox" role="switch" id="switch{{$index+1}}runAccess" b2b-switches ng-model=true ng-disabled=true aria-disabled=true aria-label="">
- </label>
- </td>
- <td>
- <label for="switch{{$index+1}}" class="btn-switch-label">
- <input type="checkbox" role="switch" id="switch{{$index+1}}" b2b-switches ng-model="reportUser.accessAllowed" ng-click="toggleUserEditAccessActive(reportUser)" ng-disabled=false aria-disabled=false aria-label="">
- </label>
- </td>
- <td>
- <a class="icon-misc-trash" style="font-size: 22px;" ng-click="removeReportSecurityUser(reportUser)"> </a>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- Grant Access To:
- </td>
-
- <td colspan="2">
- <select name="reportUser" b2b-dropdown ng-model="addReportUserId.id" placeholder-text="Select a User">
- <option b2b-dropdown-list option-repeat="d in reportOwnerList" value="{{d.id}}">{{d.name}}</option>
- </select>
- </td>
- <td>
- <button class="btn btn-alt btn-small" type="button" ng-click="addReportSecurityUser(addReportUserId.id)">Add</button>
- </td>
- </tr>
-
- </tbody>
- </table>
- </div>
-
- <div style="margin-top:20px;">
- <h1>Report Roles</h1>
- <table class="striped">
- <thead>
- <tr>
- <th width="10%">No</th>
- <th width="45%">Role Name</th>
- <th width="15%">Run Access</th>
- <th width="15%">Edit Access</th>
- <th width="15%">Remove</th>
- <tr/>
- </thead>
- <tbody>
- <tr ng-repeat = "reportRole in reportSecurityRoles">
- <td>{{$index+1}}</td>
- <td>{{reportRole.name}}</td>
- <td>
- <label for="switch{{$index+1}}RoleRunAccess" class="btn-switch-label">
- <input type="checkbox" role="switch" id="switch{{$index+1}}RoleRunAccess" b2b-switches ng-model=true ng-disabled=true aria-disabled=true aria-label="">
- </label>
- </td>
- <td>
- <label for="switch{{$index+1}}RoleEditAccess" class="btn-switch-label">
- <input type="checkbox" role="switch" id="switch{{$index+1}}RoleEditAccess" b2b-switches ng-model="reportRole.accessAllowed" ng-click="toggleRoleEditAccessActive(reportRole)" ng-disabled=false aria-disabled=false aria-label="">
- </label>
- </td>
- <td>
- <a class="icon-misc-trash" ng-click="removeReportSecurityRole(reportRole)" style="font-size: 22px;"> </a>
-
- </td>
- </tr>
- <tr>
- <td colspan="2">
- Grant Access To:
- </td>
- <td colspan="2">
- <select name="reportOwner" b2b-dropdown ng-model="addReportRoleId.id" placeholder-text="Select a Role">
- <option b2b-dropdown-list option-repeat="d in reportRoleList" value="{{d.id}}">{{d.name}}</option>
- </select>
- </td>
- <td>
- <button class="btn btn-alt btn-small" type="button" ng-click="addReportSecurityRole(addReportRoleId.id)">Add</button>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
-
-</div>
-
-<div id="stepView">
-</div>
-</div>
-
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools-list.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools-list.html
deleted file mode 100644
index b94b5c08..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools-list.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<div id="page-content">
- <h1 class="heading-page">Drools List</h1>
- <div id="droolsTable" title="Drools List">
- <table class="striped" table-data="tableData">
- <thead>
- <tr>
- <th>Drools File Name</th>
- <th>Class Name</th>
- <th>Run Rule</th>
- </tr>
- </thead>
- <tbody type="body" ng-repeat="rowData in tableData">
- <tr>
- <td ng-bind="rowData['droolsFile']"></td>
- <td ng-bind="rowData['className']"></td>
- <td>
- <div>
- <a href="samplePage#/drools/{{rowData.droolsFile}}" class="icon-controls-playalt"></a>
- </div>
- </td>
- </tr>
- </tbody>
-
- </table>
-
- <div ng-if="tableData==null || tableData.length==0" align="center">No records found</div>
- </div>
- <a href="samplePage#/drools/0">Go to Drools Rule Engine import page</a>
-
-</div>
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools.html
deleted file mode 100644
index cbc0cfc0..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
-<div id="page-content">
- <div>
- <h1 class="heading-page">Drools Rule Engine</h1>
- </div>
- <div>
- <h2>Please enter below details:</h2>
- </div>
- <div ng-show="showLoader" class="span loader-container">
- <i class="icon-primary-spinner" role="img"
- aria-label="Please wait while we load your content"></i>
- </div>
- <div class="row-nowrap">
- <div class="span12">
- <div class="form-row">
- <label for="textinputID-2a">*Drools File</label>
- <div class="field-group">
- <input id="textinputID-2a" ddh-reset=""
- class="span12" type="text" data-ng-model="postDroolsBean.droolsFile">
- </div>
- </div>
- </div>
- <br>
- <div class="span12">
- <div class="form-row">
- <label for="textinputID-3a">*Class Name</label>
- <div class="field-group">
- <input id="textinputID-3a" ddh-reset=""
- class="span12" type="text"
- data-ng-model="postDroolsBean.className">
- </div>
- </div>
- </div>
- <br>
- <div class="span12">
- <div class="form-row">
- <label for="textinputID-3a">*Selected Rules </label>
- <div class="field-group">
- <input id="textinputID-3a" ddh-reset=""
- class="span12" type="text"
- data-ng-model="postDroolsBean.selectedRules">
- </div>
- </div>
- </div>
-
- </div>
- <br>
- <div>
- <button class="btn btn-alt btn-small" type="button" ng-click="execute(postDroolsBean);">Execute Rules</button>
- <a href="samplePage#/droolsList">Go to Drools list page</a>
- </div>
-</div>
-
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/frame_insert.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/frame_insert.html
deleted file mode 100644
index 5c2e45f9..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/frame_insert.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<div>test</div>
-
-<iframe id="frame_insert" src="net_map_int"></iframe>
-
-<script type="text/javascript">
-
- var frameId = "#frame_insert";
-
- $(frameId).load(function(){
- iframeLoaded()
-
- });
-
-
- function iframeLoaded() {
- var iFrameRef = $(frameId);
- if(iFrameRef) {
-
- var height = iFrameRef.contents().find("input[name='inner_height']");
- var width = iFrameRef.contents().find("input[name='inner_width']");
-
- iFrameRef.css('height', (height.val() != undefined ? height.val():"500px"));
- iFrameRef.css('width', (width.val() != undefined ? width.val():"500px"));
- iFrameRef.css('border','none');
- }
- }
-</script> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/ngnotebook-frame.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/ngnotebook-frame.html
deleted file mode 100644
index 0ec9e949..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/ngnotebook-frame.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="ISO-8859-1">
- <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
-
- <title>Notebook Page NG</title>
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/font_icons.css">
-
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
- <!-- Common scripts -->
-
- <script src="app/fusion/external/angular-1.4.13/angular.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
-
- <script src="app/fusion/external/b2b/js/b2b-angular/b2b-library.min.js"></script>
- <script src="app/fusion/external/jquery/dist/jquery.min.js"></script>
-
- <script src="app/fusion/external/javascript-detect-element-resize/jquery.resize.js"></script>
- <script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/headerServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/manifestService.js"></script>
-
- <script src="app/fusion/scripts/DS2-directives/footer.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2Header.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2LeftMenu.js"></script>
- <script src="app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js"></script>
-
- <script src="app/fusion/external/utils/js/browserCheck.js"></script>
-
-
-
- <script src="app/fusion/scripts/DS2-controllers/ds2-sample/nbook-framecontroller.js"></script>
-
-
- <script src="app/fusion/scripts/DS2-controllers/ds2-sample/notebookFrameController.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/ds2-sample/nbook-framecontroller.js"></script>
-
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
-
- <!-- loadjscssfile("./app/fusion/external/utils/js/browserCheck.js","js");
- loadjscssfile("./app/fusion/scripts/DS2-services/adminService.js","js");
- loadjscssfile("./app/fusion/scripts/DS2-services/adminMenuService.js","js"); -->
-
-
-
-<!-- //<script src="dependency/joint.js"></script> -->
-
- <link rel="stylesheet" type="text/css" href="app/ngapp/styles.css">
-</head>
- <body class="appBody">
- <app-root></app-root>
- <div ds2-Header class="header-container" ></div>
- <div ds2-menu id="menuContainer" class="menu-container" ></div>
- <div ng-view id="rightContentProfile" class="content-container"></div>
- <div ds2-Footer class="footer-container"></div>
-
- <script type="text/javascript" src="app/ngapp/runtime.js"></script>
- <script type="text/javascript" src="app/ngapp/polyfills.js"></script>
- <script type="text/javascript" src="app/ngapp/main.js"></script>
-
- </body>
-</html>
-
-
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-frame.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-frame.html
deleted file mode 100644
index 815ea4b9..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-frame.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="ISO-8859-1">
- <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
-
- <title>Notebook Page</title>
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/font_icons.css">
-
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
- <!-- Common scripts -->
-
- <script src="app/fusion/external/angular-1.4.13/angular.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
-
- <script src="app/fusion/external/b2b/js/b2b-angular/b2b-library.min.js"></script>
- <script src="app/fusion/external/jquery/dist/jquery.min.js"></script>
-
- <script src="app/fusion/external/javascript-detect-element-resize/jquery.resize.js"></script>
- <script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/headerServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/manifestService.js"></script>
-
- <script src="app/fusion/scripts/DS2-directives/footer.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2Header.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2LeftMenu.js"></script>
- <script src="app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js"></script>
-
- <script src="app/fusion/external/utils/js/browserCheck.js"></script>
-
-
-
- <script src="app/fusion/scripts/DS2-controllers/ds2-sample/nbook-framecontroller.js"></script>
-
-
- <script src="app/fusion/scripts/DS2-controllers/ds2-sample/notebookFrameController.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/ds2-sample/nbook-framecontroller.js"></script>
-
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
-
- <!-- loadjscssfile("./app/fusion/external/utils/js/browserCheck.js","js");
- loadjscssfile("./app/fusion/scripts/DS2-services/adminService.js","js");
- loadjscssfile("./app/fusion/scripts/DS2-services/adminMenuService.js","js"); -->
-
-
-
-<!-- //<script src="dependency/joint.js"></script> -->
-
-</head>
- <body class="appBody" ng-app="abs">
- <div ds2-Header class="header-container" ></div>
- <div ds2-menu id="menuContainer" class="menu-container" ></div>
- <div ng-view id="rightContentProfile" class="content-container"></div>
- <div ds2-Footer class="footer-container"></div>
- </body>
-</html>
-
-
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-page.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-page.html
deleted file mode 100644
index 0db933d6..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-page.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<div id="page-content" style="min-height: 500px">
- <div>
- <h1 class="heading-page">Notebook</h1>
- </div>
- <div class="form-row">
- <label for="textinputID1">Notebook ID:</label><BR> <input
- type="text" name="notebookid" b2b-reset maxlength=200 class="span12 "
- ng-model="notebookvalue"
- ng-init="notebookvalue='833c0a69ec1433fbb2f8752af733cf0e'"
- style="width: 180px" />
- </div>
- <BR>
-
- <!-- Use this for only 1 key value query parameter
- <div class="fn-ebz-container">
-
- <label class="fn-ebz-text-label">Key</label><BR>
- <input type="text" name="key" maxlength=200 ng-model="qparamKey" style="width:180px"/>
- </div>
-
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Value</label><BR>
- <input type="text" name="val" maxlength=200 ng-model="qparamVal" style="width:180px"/>
- </div> -->
-
-
-
- <!-- Use this for multiple key value query parameters -->
- <div
- style="border: 2px; border-style: solid; border-color: #808080; margin-bottom: 9px; width: 55%; padding-bottom: 20px;">
- <div ng-repeat="kv in keyValueList">
- <div style="margin-left: 5px">
- <div class=" row-nowrap">
- <div class="form-row input-emphasized-field">
-
- <label for="textinputID1">Key</label><BR> <input type="text"
- id="textinputID-2a" b2b-reset name="key"
- class="span12 input-emphasized" maxlength=100 ng-model="kv.qK"
- style="width: 180px" />
- </div>
-
- <div class="form-row input-emphasized-field"
- style="padding-left: 50px;">
- <label for="textinputID1">Value</label><BR> <input
- type="text" id="textinputID-2a" b2b-reset name="val"
- class="span12 input-emphasized" maxlength=100 ng-model="kv.qV"
- style="width: 180px" />
- </div>
-
- <div class="fn-ebz-container"
- style="position: relative; top: 25px;">
- <button href="javascript:void(0)" id="addbtn"
- ng-show="{{$index==0}}"
- style="float: right; margin-left: 150px; bottom: -17px;"
- size="small" att-accessibility-click="13,32"
- class="btn btn-alt btn-small" ng-click="addKeyValuePairs(kv);">Add</button>
- <a href="javascript:void(0)" ng-show="{{$index>0}}"
- style="float: right; margin-left: 150px; bottom: -17px;"
- size="small" att-accessibility-click="13,32"
- ng-click="removeKeyValuePairs($index);"
- class="btn btn-alt btn-small"> Remove</a>
- </div>
-
- </div>
- </div>
- </div>
- </div>
-
-
-
-
- <BR>
-
- <div class="fn-ebz-container">
- <a class="btn btn-alt btn-small" btn-type="primary"
- att-accessibility-click="13,32" ng-click="submitParameters();">Submit</a>
- </div>
-
- <!-- <div ng-show="iframevisibility"><iframe id='itestfr' width="1400" height="1400"></iframe></div> -->
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-viz.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-viz.html
deleted file mode 100644
index 4c89ee41..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-viz.html
+++ /dev/null
@@ -1,7 +0,0 @@
- <div style="min-height:500px">
-
-
- <div><iframe id='itestframe' width="1400" height="1400" style="margin-left:300px;"></iframe></div>
-
-
- </div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Header.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Header.html
deleted file mode 100644
index d0748e1d..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Header.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<div class="header-main-div" >
- <header class="b2b-header-tabs" b2b-header-responsive ng-show="{{showHeader}}">
- <ul class="header__items" role="navigation">
- <li class="header__item icon__item" tabindex="0" ng-click="returnToPortal()">
- <div ng-include src="'app/fusion/scripts/DS2-view-models/header-logo.html'"></div>
- </li>
- <li b2b-header-menu class="header__item b2b-headermenu" ng-repeat="item in menuItems" role="presentation">
- <a href="javascript:void(0);" class="menu__item" role="menuitem" ng-bind="item.text"></a>
- <div class="header-secondary-wrapper">
- <ul class="header-secondary" role="menu">
- <li class="header-subitem" b2b-header-submenu
- ng-repeat="secondLevMenu in item.children" role="presentation">
- <a href="{{secondLevMenu.action}}" ng-if="secondLevMenu.childMenus.length==0" class="menu__item" role="menuitem" ng-bind="secondLevMenu.label"></a>
- <a href="javascript:void(0);" ng-if="secondLevMenu.childMenus.length!=0" class="menu__item" role="menuitem" ng-bind="secondLevMenu.label" ></a>
- <div class="header-tertiary-wrapper">
- <ul class="header-tertiary" role="menu">
- <li b2b-header-tertiarymenu ng-repeat="thirdLevMenu in secondLevMenu.childMenus"role="presentation">
- <a href="{{thirdLevMenu.action}}"role="menuitem" aria-haspopup="true" ng-bind="thirdLevMenu.label"></a>
- </li>
- </ul>
- </div>
- </li>
- </ul>
- </div></li>
- <li class="header__item profile">
- <b2b-flyout>
- <div b2b-flyout-toggler class="header-profile" >
- <div class="icon-people-oneperson" id="header-user-icon" tabindex="0" b2b-accessibility-click="13,32" aria-label="notifications" aria-haspopup="true" aria-expanded="{{flyoutOpened}}" role="button"></div>
- <div id="login-snippet-text" class="login-snippet-text">{{userFirstName}}</div>
- </div>
- <b2b-flyout-content horizontal-placement="center" vertical-placement="below">
- <div>
- <div id="reg-header-snippet">
- <div tabindex="0" class="reg-profileDetails" id="reg-profiledetails-id">
- <ul class="reg-Details-table">
- <li>
- <div class="reg-userName-table">
- <div id="reg-userName-table-row">
- <div id="reg-userName-table-cell">
- <h3 ng-bind="userName">&nbsp;</h3>
- <span>&nbsp;</span>
- </div>
- </div>
- </div>
- </li>
- <li><div class="reg-userEmail-label"><span class="reg-userEmail-label-spn" style=font-weight:bold>Email<span class="visuallyhidden">:
- </span></span></div></li>
- <li><div class="reg-userEmail-value"><span class="reg-userEmail-value-spn">
- {{userEmail}}</span></div></li>
- <li>&nbsp;</li>
- <li><div class="reg-userRole-label"><span class="reg-userRole-label-spn" style=font-weight:bold>
- User Id<span class="visuallyhidden">:</span></span></div></li>
- <li><div class="reg-userRole-value"><span class="reg-userRole-value-spn">
- {{userId}}<span class="visuallyhidden"></span></span></div></li>
- </ul>
- <div id="reg-logout-div" style="padding-top: 8px">
- <a href="logout.htm" id="allLogout" class="btn btn-alt btn-small">
- Log out
- </a>
- </div>
- </div>
- </div>
- </div>
- </b2b-flyout-content>
- </b2b-flyout>
- </ul>
- </header>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Left_menu.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Left_menu.html
deleted file mode 100644
index c30a0b69..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Left_menu.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<div>
- <left-menu-ecomp menu-data="menuData"></left-menu-ecomp>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/loginSnippet.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/loginSnippet.html
deleted file mode 100644
index 19868bb6..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/loginSnippet.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-<script>
-var loginSnippetCtrl = function ($scope,$http, $log,UserInfoServiceDS2){
- /*Define fields*/
- $scope.userProfile={
- firstName:'',
- lastName:'',
- fullName:'',
- email:''
- }
- /*Put user info into fields*/
- $scope.inputUserInfo = function(userInfo){
- if (typeof(userInfo) != "undefined" && userInfo!=null && userInfo!=''){
- if (typeof(userInfo.USER_FIRST_NAME) != "undefined" && userInfo.USER_FIRST_NAME!=null && userInfo.USER_FIRST_NAME!='')
- $scope.userProfile.firstName = userInfo.USER_FIRST_NAME;
- if (typeof(userInfo.USER_LAST_NAME) != "undefined" && userInfo.USER_LAST_NAME!=null && userInfo.USER_LAST_NAME!='')
- $scope.userProfile.lastName = userInfo.USER_LAST_NAME;
- if (typeof(userInfo.USER_EMAIL) != "undefined" && userInfo.USER_EMAIL!=null && userInfo.USER_EMAIL!='')
- $scope.userProfile.email = userInfo.USER_EMAIL;
- if (typeof(userInfo.USER_ORG_USER_ID) != "undefined" && userInfo.USER_ORG_USER_ID!=null && userInfo.USER_ORG_USER_ID!='')
- $scope.userProfile.orgUserId = userInfo.USER_ORG_USER_ID;
- }
- }
- /*getting user info from session*/
- $scope.getUserNameFromSession = function(){
- UserInfoService.getFunctionalMenuStaticDetailSession()
- .then(function (response) {
- var j = response;
- // console.log(response);
- $scope.userProfile.fullName = response.userName;
- $scope.userProfile.orgUserId = response.orgUserId;
- $scope.userProfile.email = response.email;
- });
- }
- /*getting user info from shared context*/
- $scope.getUserName=function() {
- var promise = UserInfoService.getFunctionalMenuStaticDetailShareContext();
- promise.then(
- function(res) {
- if(res==null || res==''){
- $log.info('loginSnippet: get user information from session');
- $scope.getUserNameFromSession();
- }else{
- // $log.info('Received User information from shared context',res);
- var resData = res;
- /* $scope.inputUserInfo(resData); */
- $scope.userProfile.fullName = $scope.userProfile.firstName+ ' '+ $scope.userProfile.lastName;
- }
- },
- function(err) {
- console.log('error');
- }
- );
- };
- /*call the get user info function*/
- try{
- $scope.getUserName();
- }catch(err){
- $log.info('Error while getting User information',err);
- }
-}
- </script> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-content.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-content.html
deleted file mode 100644
index 2626d01a..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-content.html
+++ /dev/null
@@ -1,191 +0,0 @@
-<div id="page-content" class="content" gridster="gridsterOpts">
-
- <!-- Gridster Item starts here -->
- <div>
- <ul>
- <li gridster-item="item" ng-repeat="item in standardItems">
- <div class="box">
- <div class="box-header">
- <table >
- <tr>
- <th table-body width="5%" style="height:20px; float:left;height:100%;" class="icon-content-gridguide" ></th>
- <th>
- <h3 ng-if="item.max">{{item.headerText}}</h3>
- <h3 ng-hide="item.max">{{item.headerText.length<36?item.headerText:item.headerText.substring(0,35)+' ...'}} </h3>
- </th>
- <th>
- <div style="height:20px;" class="box-header-btns pull-right" >
- <div class="tileMinMaxBtn" ng-click="toggleMinMax($index,'')">
- <span class="tileMinMaxIcon">
- <i class="icon-controls-up" style="color:gray" ng-show="item.max"></i>
- <i class="icon-controls-down" style="color:gray" ng-hide="item.max"></i>
- </span>
- </div>
-<!-- <a title="settings" ng-click="openSettings(widget)"><i class="glyphicon glyphicon-cog"></i></a>
- <a title="Remove widget" ng-click="remove(widget)"><i class="glyphicon glyphicon-trash"></i></a> -->
- <class="icon-up">
- </div>
- </th>
- </tr>
- </table>
- </div>
- <div class="box-content">
-
- <div class="box-content-frame" align="center">
-
- <div align="left" ng-if="item.headerText=='Dashboard' && item.max" style="height: 360px;">
- <label>&nbsp; Sample Charts</label><BR>
- <iframe scrolling="yes" frameBorder="0" style="display:block; width: 460px; height:100%;" src="static/fusion/sample/html/wordcloud.html"></iframe>
- </div>
- <div ng-if="item.headerText=='Donut Chart' && item.max">
- <iframe scrolling="no" frameBorder="0" style="width: 310px; height: 210px;" src="static/fusion/sample/html/donut_d3.html"></iframe>
- </div>
- <div ng-if="item.headerText=='Area Chart' && item.max">
- <div id="areaChart">
- <div> <svg></svg> </div>
- <script src="static/fusion/sample/html/js/area_chart.min.js"></script>
- </div>
- <!-- <iframe scrolling="no" frameBorder="0" style="width: 310px; height: 210px;" src="static/fusion/sample/html/area_chart.html"></iframe> -->
- </div>
- <div ng-if="item.headerText=='Pie Chart' && item.max">
- <iframe scrolling="no" frameBorder="0" style="width: 310px; height: 210px;" src="static/fusion/sample/html/pie_chart.html"></iframe>
- </div>
- <div ng-if="item.headerText=='Line Chart' && item.max">
- <div id="lineChart">
- <div> <svg></svg> </div>
- <script src="static/fusion/sample/html/js/line_chart.min.js"></script>
- </div>
-
-<!-- <iframe scrolling="no" frameBorder="0" style="width: 310px; height: 210px;" src="static/fusion/sample/html/line_chart.html"></iframe> -->
- </div>
- <div ng-if="item.headerText=='Gauges' && item.max">
- <iframe scrolling="no" frameBorder="0" style="width: 310pxx; height: 210px;" src="static/fusion/sample/html/d3_gauges_demo.html"></iframe>
- </div>
-
- <div align="left" ng-if="item.headerText=='Traffic distribution by day of week' && item.max">
- <div id = "selectedTrafficDay">
- <ul>
- <li ng-repeat="Daytab in selectedTrafficDay"
- ng-class="{active1:isActiveTab1(Daytab.url)}"
- ng-click="onClickTab1(Daytab)">{{Daytab.title}}</li>
- </ul>
- <div id = "SelectedTrafficeDayView">
- <div ng-include="currentSelectedDayTab"></div>
- </div>
- <script type="text/ng-template" id="#Monday">
- <div id="Monday" align="centers"><img src="static/fusion/sample/images/tunnels/1_mon.png" width=100% height=100% alt="Monday"></div>
- </script>
- <script type="text/ng-template" id="#Tuesday">
- <div id="Tuesday" align="center"><img src="static/fusion/sample/images/tunnels/2_tue.png" width=100% height=100% alt="Tuesday"></div>
- </script>
- <script type="text/ng-template" id="#Wednesday">
- <div id="Wednesday" align="center"><img src="static/fusion/sample/images/tunnels/3_wed.png" width=100% height=100% alt="Wednesday"></div>
- </script>
- <script type="text/ng-template" id="#Thursday">
- <div id="Thursday" align="center"><img src="static/fusion/sample/images/tunnels/4_thu.png" width=100% height=100% alt="Thursday"></div>
- </script>
- <script type="text/ng-template" id="#Friday">
- <div id="Friday" align="center"><img src="static/fusion/sample/images/tunnels/5_fri.png" width=100% height=100% alt="Friday"></div>
- </script>
- <script type="text/ng-template" id="#Saturday">
- <div id="Saturday" align="center"><img src="static/fusion/sample/images/tunnels/6_sat.png" width=100% height=100% alt="Saturday"></div>
- </script>
- <script type="text/ng-template" id="#Sunday">
- <div id="Sunday" align="center"><img src="static/fusion/sample/images/tunnels/7_sun.png" width=100% height=100% alt="Sunday"></div>
- </script>
- </div>
- </div>
-
- <div align="left" ng-if="item.headerText=='Busy hour traffic analysis by day of week' && item.max">
- <div id = "BusyHourTraffic">
- <ul>
- <li ng-repeat="TrafficTab in BusyHourTraffic"
- ng-class="{active2:isActiveTab2(TrafficTab.url)}"
- ng-click="onClickTab2(TrafficTab)">{{TrafficTab.title}}</li>
- </ul>
- <div id = "BusyHourTrafficView">
- <div ng-include="currentSelectedBusyHourTraffic"></div>
- </div>
- <script type="text/ng-template" id="#Incoming">
- <div id="Incoming" align="left"><img src="static/fusion/sample/images/tunnels/BH_DLSTX_IN.png" width=100% height=100%></div>
- </script>
- <script type="text/ng-template" id="#Outgoing">
- <div id="Outgoing" align="center"><img src="static/fusion/sample/images/tunnels/BH_DLSTX_OUT.png" width=100% height=100%></div>
- </script>
- <script type="text/n g-template" id="#Default">
- <div id="Default" align="center"><img src="static/fusion/sample/images/tunnels/BH_Nat_Def.png" width=100% height=100%></div>
- </script>
- <script type="text/ng-template" id="#Priority">
- <div id="Priority" align="center"><img src="static/fusion/sample/images/tunnels/BH_Nat_Priority.png" width=100% height=100%></div>
- </script>
- <script type="text/ng-template" id="#BHNational">
- <div id="BHNational" align="center"><img src="static/fusion/sample/images/tunnels/BH_Nat.png" width=100% height=100%></div>
- </script>
- </div>
- </div>
-
- <div align="left" ng-if="item.headerText=='Additional Samples' && item.max">
- <label>&nbsp;Quick Links</label>
- <table table
- id="additional-samples-table"
- search-string="searchStringIgnored"
- view-per-page="viewPerPageIgnored"
- current-page="currentPageIgnored"
- total-page="totalPageIgnored">
-
-
- <tr>
- <td table-body width="90%" ><a href="http://jquery.com" target="_blank">JQuery</a></td>
- <td table-body width="10%">
- <a ng-click="removeRole();" class="icon-misc-trash"></a>
- </td>
- </tr>
- <tr>
- <td table-body width="90%" ><a href="app/sequence/views/details.html" target="_blank">Network Simulation</a></td>
- <td table-body width="10%">
- <a ng-click="removeRole();" class="icon-misc-trash"></a>
- </td>
- </tr>
- <!-- <tr>
- <td table-body width="90%" ><a href="sample_heat_map.htm" target="">Heat Map</a></td>
- <td table-body width="10%">
- <a ng-click="removeRole();" ><img src="static/fusion/sample/images/deleteicon.gif"></a>
- </td>
- </tr> -->
- <tr>
- <td table-body width="90%" ><a href="leafletMap.htm" target="">Animated Map</a></td>
- <td table-body width="10%">
- <a ng-click="removeRole();" class="icon-misc-trash"></a>
- </td>
- </tr>
- <tr>
- <td table-body width="90%" ><a href="collaborate_list.htm">Chat Session</a></td>
- <td table-body width="10%">
- <a ng-click="removeRole();" class="icon-misc-trash"></a>
- </td>
- </tr>
- </table>
- </div>
- <div ng-if="item.headerText=='Sticky Notes' && item.max">
- <div style="width:100%; height:400px" id="scribble-pad"><pre id="scribble" contenteditable="true" onkeyup="storeUserScribble(this.id);"></pre></div>
- </div>
-
- <div ng-if="item.headerText=='Service Configuration' && item.max">
-<!-- <accordion close-others="true" css="accordion" > -->
- <accordion-group heading="Service Configuration" ng-if="group11.open">
- <iframe style="overflow:auto" frameBorder="0" align="center" width="100%" height="400px" src="static/fusion/sample/org_chart/example.html" ></iframe>
- </accordion-group>
- <accordion-group heading="VSP Service Configuration" ng-if="group12.open">
- <iframe style="overflow:auto" frameBorder="0" align="center" width="100%" height="400px" src="static/fusion/sample/org_chart/example_vsp.html" ></iframe>
- </accordion-group>
-<!-- </accordion> -->
- </div>
-
- </div>
- </div>
- </div>
- </li>
- </ul>
- </div>
- <!-- Gridster Item ends here -->
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-sample.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-sample.html
deleted file mode 100644
index 6200985c..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-sample.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<!DOCTYPE html>
-<!-- Single-page application for EPSDK-App welcome page using DS2 look and feel -->
-<html>
-<head>
- <meta charset="ISO-8859-1">
- <title>Welcome</title>
-
- <!-- Common CSS -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/extras/ds2-accordion.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/extras/ds2-bootstrap-datepicker.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/extras/ds2-cc-input-field.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/extras/ds2-tooltip.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/extras/x-tabs-pills.css">
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ds2-accordion.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ds2-bootstrap-datepicker.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ds2-c2c.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ds2-cc-input-field.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ds2-filmstrip.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ds2-filters.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ds2-legacynav-fix.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ds2-marquee.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ds2-pagination.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ds2-popover.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ds2-progressbar.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ds2-tooltip.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/global.css">
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/digital-design-library.css">
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/angular-gridster/dist/angular-gridster.min.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/angular-bootstrap/ui-bootstrap-csp.css">
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-arrows.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-buildings.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-content.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-controls.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-datanetwork.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-devices.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-documents.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-healthcare.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-location.css">
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-misc.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-numslets.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-people.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-retail.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-securityalerts.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-social.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-speechbubbles.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-test.css">
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-transportation.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/icon-weather.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/x-tabs-pills.css">
-
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
-
- <!-- Common scripts -->
-
- <script src="app/fusion/external/angular-1.4.13/angular.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
-
- <script src="app/fusion/external/ds2/js/b2b-angular/b2b-library.min.js"></script>
- <script src="app/fusion/external/jquery/dist/jquery.min.js"></script>
-
- <script src="app/fusion/external/javascript-detect-element-resize/jquery.resize.js"></script>
- <script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/headerServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/manifestService.js"></script>
-
- <script src="app/fusion/scripts/DS2-directives/footer.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2Header.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2LeftMenu.js"></script>
- <script src="app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js"></script>
- <script src="app/fusion/external/ds2/js/digital-ng-library/digital-design-library.js"></script>
-
- <!-- Page-specific items -->
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/welcome-route.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/welcome-controller.js"></script>
-
- <link rel="stylesheet" type="text/css" href="static/fusion/sample/css/scribble.css" />
- <link rel="stylesheet" type="text/css" href="static/fusion/sample/css/flexslider.css" />
- <link rel="stylesheet" type="text/css" href="static/fusion/sample/css/welcome.css" />
-
- <script src="static/fusion/d3/js/d3.v3.min.js"></script>
- <script src="static/fusion/d3/js/nv.d3.min.js"></script>
- <script src="static/fusion/d3/js/models/axis.min.js"></script>
-
-</head>
- <body class="appBody" ng-app="abs">
- <!-- commented the header for now to avoid duplicate headers on portal -->
- <div ds2-Header class="header-container" ></div>
- <div ds2-menu id="menuContainer" class="menu-container" ></div>
- <div ng-view id="rightContentProfile" class="content-container"></div>
- <div ds2-Footer class="footer-container"></div>
- </body>
-</html>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome.html
deleted file mode 100644
index bbaaf967..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome.html
+++ /dev/null
@@ -1,150 +0,0 @@
-<!DOCTYPE html>
-<!-- Single-page application for EPSDK-App welcome page using DS2 look and feel. X-->
-<html>
-<head>
- <meta charset="ISO-8859-1">
- <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
-
- <title>Welcome</title>
-
- <!-- B2b Library -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/b2b-angular.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/b2b/css/b2b-angular/font_icons.css">
-
- <!-- icons in open source -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ionicons.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css">
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/angular-bootstrap/ui-bootstrap-csp.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/angular-gridster/dist/angular-gridster.min.css">
- <link rel="stylesheet" type="text/css" href="static/fusion/sample/css/scribble.css" />
- <link rel="stylesheet" type="text/css" href="static/fusion/sample/css/welcome.css" />
-
- <link rel="stylesheet" type="text/css" href="app/fusion/styles/ecomp.css">
-
- <!-- Common scripts -->
- <script src="app/fusion/external/angular-1.4.13/angular.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-messages.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-touch.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.min.js"></script>
- <script src="app/fusion/external/jquery/dist/jquery.min.js"></script>
- <script src="app/fusion/external/javascript-detect-element-resize/jquery.resize.js"></script>
- <script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
- <script src="app/fusion/external/angular-gridster/dist/angular-gridster.min.js"></script>
-
- <!-- EPSDK App scripts and common services -->
- <!-- B2b Library -->
- <script src="app/fusion/external/b2b/js/b2b-angular/b2b-library.min.js"></script>
- <script src="app/fusion/scripts/DS2-services/ds2-modal/modalService.js"></script>
- <script src="app/fusion/external/ds2/js/appDS2.js"></script>
-
- <script src="app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/headerServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
- <script src="app/fusion/scripts/DS2-services/manifestService.js"></script>
-
- <script src="app/fusion/scripts/DS2-directives/footer.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2Header.js"></script>
- <script src="app/fusion/scripts/DS2-directives/ds2LeftMenu.js"></script>
- <script src="app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js"></script>
- <script src= "app/fusion/scripts/DS2-services/userInfoServiceDS2.js"></script>
-
- <!-- Page specific items -->
- <script src="app/fusion/scripts/DS2-controllers/welcome-controller.js"></script>
- <script src="app/fusion/scripts/DS2-controllers/welcome-route.js"></script>
-
-<style>
-
-.controls {
- margin-bottom: 20px;
-}
-.page-header {
- margin-top: 20px;
-}
-ul {
- list-style: none;
-}
-.box {
- height: 100%;
- border: 1px solid #ccc;
- background-color: #fff;
- position: relative;
- overflow: hidden;
-}
-.box-header {
- background-color: #eee;
- padding: 0px 0px 0px 0px;
-/* border-bottom: 1px solid #ccc; */
- margin-bottom: -25px;
- cursor: move;
- position: relative;
-}
-.box-header h3 {
- margin-top: 0px;
- display: inline-block;
-}
-.box-content {
- padding: 10px;
- display:block;
- height: 100%;
- position: relative;
- overflow-x:auto;
- overflow-y:auto;
-}
-.box-header-btns {
- top: 15px;
- right: 10px;
- cursor: pointer;
- position: absolute;
-}
-
-.gridster {
- border: none;
- position:relative;
-}
-
-.box-content .box-content-frame{
-
-}
-
-.box table{
-border:none;
-display:block;
-}
-
-.box table tr{
-line-height:20px;
-}
-
-.box table th{
-border:none;
-line-height:20px;
-}
-
-/* .header-container{
- margin-top:-50px;
-} */
-/* .content-container{
- margin-top:50px;
-} */
-.menu-container{
-margin-top:0px
-}
-
-.handle-e {
-width:3px;
-}
-
-</style>
-
-</head>
- <body class="appBody" ng-app="abs">
- <!-- commented the header for now to avoid duplicate headers on portal -->
- <div ds2-Header class="header-container" ></div>
- <div ds2-menu id="menuContainer" class="menu-container"></div>
- <div ng-view id="rightContentProfile" class="content-container"></div>
- <div ds2-Footer class="footer-container"></div>
- </body>
-</html>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/angular-gridster.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/angular-gridster.js
deleted file mode 100644
index 985fa434..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/angular-gridster.js
+++ /dev/null
@@ -1,2244 +0,0 @@
-/*global define:true*/
-(function(root, factory) {
-
- 'use strict';
-
- if (typeof define === 'function' && define.amd) {
- // AMD
- define(['angular'], factory);
- } else if (typeof exports === 'object') {
- // CommonJS
- module.exports = factory(require('angular'));
- } else {
- // Browser, nothing "exported". Only registered as a module with angular.
- factory(root.angular);
- }
-}(this, function(angular) {
-
- 'use strict';
-
- var ie8 = false;
-
- var getInternetExplorerVersion = function ()
- // Returns the version of Internet Explorer >4 or
- // undefined(indicating the use of another browser).
- {
- var isIE10 = (eval("/*@cc_on!@*/false") && document.documentMode === 10);
- if (isIE10) {
- return 10;
- }
- var v = 3,
- div = document.createElement('div'),
- all = div.getElementsByTagName('i');
- do {
- div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->';
- } while (all[0]);
- return v > 4 ? v : undefined;
- };
-
- var browserVersion = getInternetExplorerVersion();
-
- if (browserVersion && browserVersion < 9) {
- ie8 = true;
- }
-
- // This returned angular module 'gridster' is what is exported.
- return angular.module('attGridsterLib', [])
-
- .constant('gridsterConfig', {
- columns: 6, // number of columns in the grid
- pushing: true, // whether to push other items out of the way
- floating: true, // whether to automatically float items up so they stack
- swapping: true, // whether or not to have items switch places instead of push down if they are the same size
- width: 'auto', // width of the grid. "auto" will expand the grid to its parent container
- colWidth: 'auto', // width of grid columns. "auto" will divide the width of the grid evenly among the columns
- rowHeight: 'match', // height of grid rows. 'match' will make it the same as the column width, a numeric value will be interpreted as pixels, '/2' is half the column width, '*5' is five times the column width, etc.
- margins: [10, 10], // margins in between grid items
- outerMargin: false,
- isMobile: false, // toggle mobile view
- mobileBreakPoint: 100, // width threshold to toggle mobile mode
- mobileModeEnabled: true, // whether or not to toggle mobile mode when screen width is less than mobileBreakPoint
- minColumns: 1, // minimum amount of columns the grid can scale down to
- minRows: 1, // minimum amount of rows to show if the grid is empty
- maxRows: 100, // maximum amount of rows in the grid
- defaultSizeX: 1, // default width of an item in columns
- defaultSizeY: 1, // default height of an item in rows
- minSizeX: 1, // minimum column width of an item
- maxSizeX: null, // maximum column width of an item
- minSizeY: 1, // minumum row height of an item
- maxSizeY: null, // maximum row height of an item
- saveGridItemCalculatedHeightInMobile: false, // grid item height in mobile display. true- to use the calculated height by sizeY given
- resizable: { // options to pass to resizable handler
- enabled: false,
- handles: ['s', 'e', 'n', 'w', 'se', 'ne', 'sw', 'nw']
- },
- draggable: { // options to pass to draggable handler
- enabled: true,
- scrollSensitivity: 20, // Distance in pixels from the edge of the viewport after which the viewport should scroll, relative to pointer
- scrollSpeed: 15 // Speed at which the window should scroll once the mouse pointer gets within scrollSensitivity distance
- }
- })
-
- .controller('GridsterCtrl', ['gridsterConfig', '$timeout',
- function(gridsterConfig, $timeout) {
-
- var gridster = this;
-
- /**
- * Create options from gridsterConfig constant
- */
- angular.extend(this, gridsterConfig);
-
- this.resizable = angular.extend({}, gridsterConfig.resizable || {});
- this.draggable = angular.extend({}, gridsterConfig.draggable || {});
-
- var flag = false;
- this.layoutChanged = function() {
- if (flag) {
- return;
- }
- flag = true;
- $timeout(function() {
- flag = false;
- if (gridster.loaded) {
- gridster.floatItemsUp();
- }
- gridster.updateHeight(gridster.movingItem ? gridster.movingItem.sizeY : 0);
- }, 30);
- };
-
- /**
- * A positional array of the items in the grid
- */
- this.grid = [];
-
- /**
- * Clean up after yourself
- */
- this.destroy = function() {
- // empty the grid to cut back on the possibility
- // of circular references
- if (this.grid) {
- this.grid = [];
- }
- this.$element = null;
- };
-
- /**
- * Overrides default options
- *
- * @param {Object} options The options to override
- */
- this.setOptions = function(options) {
- if (!options) {
- return;
- }
-
- options = angular.extend({}, options);
-
- // all this to avoid using jQuery...
- if (options.draggable) {
- angular.extend(this.draggable, options.draggable);
- delete(options.draggable);
- }
- if (options.resizable) {
- angular.extend(this.resizable, options.resizable);
- delete(options.resizable);
- }
-
- angular.extend(this, options);
-
- if (!this.margins || this.margins.length !== 2) {
- this.margins = [0, 0];
- } else {
- for (var x = 0, l = this.margins.length; x < l; ++x) {
- this.margins[x] = parseInt(this.margins[x], 10);
- if (isNaN(this.margins[x])) {
- this.margins[x] = 0;
- }
- }
- }
- };
-
- /**
- * Check if item can occupy a specified position in the grid
- *
- * @param {Object} item The item in question
- * @param {Number} row The row index
- * @param {Number} column The column index
- * @returns {Boolean} True if if item fits
- */
- this.canItemOccupy = function(item, row, column) {
- return row > -1 && column > -1 && item.sizeX + column <= this.columns && item.sizeY + row <= this.maxRows;
- };
-
- /**
- * Set the item in the first suitable position
- *
- * @param {Object} item The item to insert
- */
- this.autoSetItemPosition = function(item) {
- // walk through each row and column looking for a place it will fit
- for (var rowIndex = 0; rowIndex < this.maxRows; ++rowIndex) {
- for (var colIndex = 0; colIndex < this.columns; ++colIndex) {
- // only insert if position is not already taken and it can fit
- var items = this.getItems(rowIndex, colIndex, item.sizeX, item.sizeY, item);
- if (items.length === 0 && this.canItemOccupy(item, rowIndex, colIndex)) {
- this.putItem(item, rowIndex, colIndex);
- return;
- }
- }
- }
- throw new Error('Unable to place item!');
- };
-
- /**
- * Gets items at a specific coordinate
- *
- * @param {Number} row
- * @param {Number} column
- * @param {Number} sizeX
- * @param {Number} sizeY
- * @param {Array} excludeItems An array of items to exclude from selection
- * @returns {Array} Items that match the criteria
- */
- this.getItems = function(row, column, sizeX, sizeY, excludeItems) {
- var items = [];
- if (!sizeX || !sizeY) {
- sizeX = sizeY = 1;
- }
- if (excludeItems && !(excludeItems instanceof Array)) {
- excludeItems = [excludeItems];
- }
- for (var h = 0; h < sizeY; ++h) {
- for (var w = 0; w < sizeX; ++w) {
- var item = this.getItem(row + h, column + w, excludeItems);
- if (item && (!excludeItems || excludeItems.indexOf(item) === -1) && items.indexOf(item) === -1) {
- items.push(item);
- }
- }
- }
- return items;
- };
-
- /**
- * @param {Array} items
- * @returns {Object} An item that represents the bounding box of the items
- */
- this.getBoundingBox = function(items) {
-
- if (items.length === 0) {
- return null;
- }
- if (items.length === 1) {
- return {
- row: items[0].row,
- col: items[0].col,
- sizeY: items[0].sizeY,
- sizeX: items[0].sizeX
- };
- }
-
- var maxRow = 0;
- var maxCol = 0;
- var minRow = 9999;
- var minCol = 9999;
-
- for (var i = 0, l = items.length; i < l; ++i) {
- var item = items[i];
- minRow = Math.min(item.row, minRow);
- minCol = Math.min(item.col, minCol);
- maxRow = Math.max(item.row + item.sizeY, maxRow);
- maxCol = Math.max(item.col + item.sizeX, maxCol);
- }
-
- return {
- row: minRow,
- col: minCol,
- sizeY: maxRow - minRow,
- sizeX: maxCol - minCol
- };
- };
-
-
- /**
- * Removes an item from the grid
- *
- * @param {Object} item
- */
- this.removeItem = function(item) {
- for (var rowIndex = 0, l = this.grid.length; rowIndex < l; ++rowIndex) {
- var columns = this.grid[rowIndex];
- if (!columns) {
- continue;
- }
- var index = columns.indexOf(item);
- if (index !== -1) {
- columns[index] = null;
- break;
- }
- }
- this.layoutChanged();
- };
-
- /**
- * Returns the item at a specified coordinate
- *
- * @param {Number} row
- * @param {Number} column
- * @param {Array} excludeItems Items to exclude from selection
- * @returns {Object} The matched item or null
- */
- this.getItem = function(row, column, excludeItems) {
- if (excludeItems && !(excludeItems instanceof Array)) {
- excludeItems = [excludeItems];
- }
- var sizeY = 1;
- while (row > -1) {
- var sizeX = 1,
- col = column;
- while (col > -1) {
- var items = this.grid[row];
- if (items) {
- var item = items[col];
- if (item && (!excludeItems || excludeItems.indexOf(item) === -1) && item.sizeX >= sizeX && item.sizeY >= sizeY) {
- return item;
- }
- }
- ++sizeX;
- --col;
- }
- --row;
- ++sizeY;
- }
- return null;
- };
-
- /**
- * Insert an array of items into the grid
- *
- * @param {Array} items An array of items to insert
- */
- this.putItems = function(items) {
- for (var i = 0, l = items.length; i < l; ++i) {
- this.putItem(items[i]);
- }
- };
-
- /**
- * Insert a single item into the grid
- *
- * @param {Object} item The item to insert
- * @param {Number} row (Optional) Specifies the items row index
- * @param {Number} column (Optional) Specifies the items column index
- * @param {Array} ignoreItems
- */
- this.putItem = function(item, row, column, ignoreItems) {
- // auto place item if no row specified
- if (typeof row === 'undefined' || row === null) {
- row = item.row;
- column = item.col;
- if (typeof row === 'undefined' || row === null) {
- this.autoSetItemPosition(item);
- return;
- }
- }
-
- // keep item within allowed bounds
- if (!this.canItemOccupy(item, row, column)) {
- column = Math.min(this.columns - item.sizeX, Math.max(0, column));
- row = Math.min(this.maxRows - item.sizeY, Math.max(0, row));
- }
-
- // check if item is already in grid
- if (item.oldRow !== null && typeof item.oldRow !== 'undefined') {
- var samePosition = item.oldRow === row && item.oldColumn === column;
- var inGrid = this.grid[row] && this.grid[row][column] === item;
- if (samePosition && inGrid) {
- item.row = row;
- item.col = column;
- return;
- } else {
- // remove from old position
- var oldRow = this.grid[item.oldRow];
- if (oldRow && oldRow[item.oldColumn] === item) {
- delete oldRow[item.oldColumn];
- }
- }
- }
-
- item.oldRow = item.row = row;
- item.oldColumn = item.col = column;
-
- this.moveOverlappingItems(item, ignoreItems);
-
- if (!this.grid[row]) {
- this.grid[row] = [];
- }
- this.grid[row][column] = item;
-
- if (this.movingItem === item) {
- this.floatItemUp(item);
- }
- this.layoutChanged();
- };
-
- /**
- * Trade row and column if item1 with item2
- *
- * @param {Object} item1
- * @param {Object} item2
- */
- this.swapItems = function(item1, item2) {
- this.grid[item1.row][item1.col] = item2;
- this.grid[item2.row][item2.col] = item1;
-
- var item1Row = item1.row;
- var item1Col = item1.col;
- item1.row = item2.row;
- item1.col = item2.col;
- item2.row = item1Row;
- item2.col = item1Col;
- };
-
- /**
- * Prevents items from being overlapped
- *
- * @param {Object} item The item that should remain
- * @param {Array} ignoreItems
- */
- this.moveOverlappingItems = function(item, ignoreItems) {
- // don't move item, so ignore it
- if (!ignoreItems) {
- ignoreItems = [item];
- } else if (ignoreItems.indexOf(item) === -1) {
- ignoreItems = ignoreItems.slice(0);
- ignoreItems.push(item);
- }
-
- // get the items in the space occupied by the item's coordinates
- var overlappingItems = this.getItems(
- item.row,
- item.col,
- item.sizeX,
- item.sizeY,
- ignoreItems
- );
- this.moveItemsDown(overlappingItems, item.row + item.sizeY, ignoreItems);
- };
-
- /**
- * Moves an array of items to a specified row
- *
- * @param {Array} items The items to move
- * @param {Number} newRow The target row
- * @param {Array} ignoreItems
- */
- this.moveItemsDown = function(items, newRow, ignoreItems) {
- if (!items || items.length === 0) {
- return;
- }
- items.sort(function(a, b) {
- return a.row - b.row;
- });
-
- ignoreItems = ignoreItems ? ignoreItems.slice(0) : [];
- var topRows = {},
- item, i, l;
-
- // calculate the top rows in each column
- for (i = 0, l = items.length; i < l; ++i) {
- item = items[i];
- var topRow = topRows[item.col];
- if (typeof topRow === 'undefined' || item.row < topRow) {
- topRows[item.col] = item.row;
- }
- }
-
- // move each item down from the top row in its column to the row
- for (i = 0, l = items.length; i < l; ++i) {
- item = items[i];
- var rowsToMove = newRow - topRows[item.col];
- this.moveItemDown(item, item.row + rowsToMove, ignoreItems);
- ignoreItems.push(item);
- }
- };
-
- /**
- * Moves an item down to a specified row
- *
- * @param {Object} item The item to move
- * @param {Number} newRow The target row
- * @param {Array} ignoreItems
- */
- this.moveItemDown = function(item, newRow, ignoreItems) {
- if (item.row >= newRow) {
- return;
- }
- while (item.row < newRow) {
- ++item.row;
- this.moveOverlappingItems(item, ignoreItems);
- }
- this.putItem(item, item.row, item.col, ignoreItems);
- };
-
- /**
- * Moves all items up as much as possible
- */
- this.floatItemsUp = function() {
- if (this.floating === false) {
- return;
- }
- for (var rowIndex = 0, l = this.grid.length; rowIndex < l; ++rowIndex) {
- var columns = this.grid[rowIndex];
- if (!columns) {
- continue;
- }
- for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) {
- var item = columns[colIndex];
- if (item) {
- this.floatItemUp(item);
- }
- }
- }
- };
-
- /**
- * Float an item up to the most suitable row
- *
- * @param {Object} item The item to move
- */
- this.floatItemUp = function(item) {
- if (this.floating === false) {
- return;
- }
- var colIndex = item.col,
- sizeY = item.sizeY,
- sizeX = item.sizeX,
- bestRow = null,
- bestColumn = null,
- rowIndex = item.row - 1;
-
- while (rowIndex > -1) {
- var items = this.getItems(rowIndex, colIndex, sizeX, sizeY, item);
- if (items.length !== 0) {
- break;
- }
- bestRow = rowIndex;
- bestColumn = colIndex;
- --rowIndex;
- }
- if (bestRow !== null) {
- this.putItem(item, bestRow, bestColumn);
- }
- };
-
- /**
- * Update gridsters height
- *
- * @param {Number} plus (Optional) Additional height to add
- */
- this.updateHeight = function(plus) {
- var maxHeight = this.minRows;
- plus = plus || 0;
- for (var rowIndex = this.grid.length; rowIndex >= 0; --rowIndex) {
- var columns = this.grid[rowIndex];
- if (!columns) {
- continue;
- }
- for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) {
- if (columns[colIndex]) {
- maxHeight = Math.max(maxHeight, rowIndex + plus + columns[colIndex].sizeY);
- }
- }
- }
- this.gridHeight = this.maxRows - maxHeight > 0 ? Math.min(this.maxRows, maxHeight) : Math.max(this.maxRows, maxHeight);
- };
-
- /**
- * Returns the number of rows that will fit in given amount of pixels
- *
- * @param {Number} pixels
- * @param {Boolean} ceilOrFloor (Optional) Determines rounding method
- */
- this.pixelsToRows = function(pixels, ceilOrFloor) {
- if (ceilOrFloor === true) {
- return Math.ceil(pixels / this.curRowHeight);
- } else if (ceilOrFloor === false) {
- return Math.floor(pixels / this.curRowHeight);
- }
-
- return Math.round(pixels / this.curRowHeight);
- };
-
- /**
- * Returns the number of columns that will fit in a given amount of pixels
- *
- * @param {Number} pixels
- * @param {Boolean} ceilOrFloor (Optional) Determines rounding method
- * @returns {Number} The number of columns
- */
- this.pixelsToColumns = function(pixels, ceilOrFloor) {
- if (ceilOrFloor === true) {
- return Math.ceil(pixels / this.curColWidth);
- } else if (ceilOrFloor === false) {
- return Math.floor(pixels / this.curColWidth);
- }
-
- return Math.round(pixels / this.curColWidth);
- };
- }
- ])
-
- .directive('gridsterPreview', function() {
- return {
- replace: true,
- scope: true,
- require: '^gridster',
- template: '<div ng-style="previewStyle()" class="gridster-item gridster-preview-holder"></div>',
- link: function(scope, $el, attrs, gridster) {
-
- /**
- * @returns {Object} style object for preview element
- */
- scope.previewStyle = function() {
-
- if (!gridster.movingItem) {
- return {
- display: 'none'
- };
- }
-
- return {
- display: 'block',
- height: (gridster.movingItem.sizeY * gridster.curRowHeight - gridster.margins[0]) + 'px',
- width: (gridster.movingItem.sizeX * gridster.curColWidth - gridster.margins[1]) + 'px',
- top: (gridster.movingItem.row * gridster.curRowHeight + (gridster.outerMargin ? gridster.margins[0] : 0)) + 'px',
- left: (gridster.movingItem.col * gridster.curColWidth + (gridster.outerMargin ? gridster.margins[1] : 0)) + 'px'
- };
- };
- }
- };
- })
-
- /**
- * The gridster directive
- *
- * @param {Function} $timeout
- * @param {Object} $window
- * @param {Object} $rootScope
- * @param {Function} gridsterDebounce
- */
- .directive('gridster', ['$timeout', '$window', '$rootScope', 'gridsterDebounce',
- function($timeout, $window, $rootScope, gridsterDebounce) {
- return {
- scope: true,
- restrict: 'EAC',
- controller: 'GridsterCtrl',
- controllerAs: 'gridster',
- compile: function($tplElem) {
-
- $tplElem.prepend('<div ng-if="gridster.movingItem" gridster-preview></div>');
-
- return function(scope, $elem, attrs, gridster) {
- gridster.loaded = false;
-
- gridster.$element = $elem;
-
- scope.gridster = gridster;
-
- $elem.addClass('gridster');
-
- var isVisible = function(ele) {
- return ele.style.visibility !== 'hidden' && ele.style.display !== 'none';
- };
-
- function refresh(config) {
- gridster.setOptions(config);
-
- if (!isVisible($elem[0])) {
- return;
- }
-
- // resolve "auto" & "match" values
- if (gridster.width === 'auto') {
- gridster.curWidth = $elem[0].offsetWidth || parseInt($elem.css('width'), 10);
- } else {
- gridster.curWidth = gridster.width;
- }
-
- if (gridster.colWidth === 'auto') {
- gridster.curColWidth = (gridster.curWidth + (gridster.outerMargin ? -gridster.margins[1] : gridster.margins[1])) / gridster.columns;
- } else {
- gridster.curColWidth = gridster.colWidth;
- }
-
- gridster.curRowHeight = gridster.rowHeight;
- if (typeof gridster.rowHeight === 'string') {
- if (gridster.rowHeight === 'match') {
- gridster.curRowHeight = Math.round(gridster.curColWidth);
- } else if (gridster.rowHeight.indexOf('*') !== -1) {
- gridster.curRowHeight = Math.round(gridster.curColWidth * gridster.rowHeight.replace('*', '').replace(' ', ''));
- } else if (gridster.rowHeight.indexOf('/') !== -1) {
- gridster.curRowHeight = Math.round(gridster.curColWidth / gridster.rowHeight.replace('/', '').replace(' ', ''));
- }
- }
-
- gridster.isMobile = gridster.mobileModeEnabled && gridster.curWidth <= gridster.mobileBreakPoint;
-
- // loop through all items and reset their CSS
- for (var rowIndex = 0, l = gridster.grid.length; rowIndex < l; ++rowIndex) {
- var columns = gridster.grid[rowIndex];
- if (!columns) {
- continue;
- }
-
- for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) {
- if (columns[colIndex]) {
- var item = columns[colIndex];
- item.setElementPosition();
- item.setElementSizeY();
- item.setElementSizeX();
- }
- }
- }
-
- updateHeight();
- }
-
- var optionsKey = attrs.gridster;
- if (optionsKey) {
- scope.$parent.$watch(optionsKey, function(newConfig) {
- refresh(newConfig);
- }, true);
- } else {
- refresh({});
- }
-
- scope.$watch(function() {
- return gridster.loaded;
- }, function() {
- if (gridster.loaded) {
- $elem.addClass('gridster-loaded');
- } else {
- $elem.removeClass('gridster-loaded');
- }
- });
-
- scope.$watch(function() {
- return gridster.isMobile;
- }, function() {
- if (gridster.isMobile) {
- $elem.addClass('gridster-mobile').removeClass('gridster-desktop');
- } else {
- $elem.removeClass('gridster-mobile').addClass('gridster-desktop');
- }
- $rootScope.$broadcast('gridster-mobile-changed', gridster);
- });
-
- scope.$watch(function() {
- return gridster.draggable;
- }, function() {
- $rootScope.$broadcast('gridster-draggable-changed', gridster);
- }, true);
-
- scope.$watch(function() {
- return gridster.resizable;
- }, function() {
- $rootScope.$broadcast('gridster-resizable-changed', gridster);
- }, true);
-
- function updateHeight() {
- if(gridster.gridHeight){ //need to put this check, otherwise fail in IE8
- $elem.css('height', (gridster.gridHeight * gridster.curRowHeight) + (gridster.outerMargin ? gridster.margins[0] : -gridster.margins[0]) + 'px');
- }
- }
-
- scope.$watch(function() {
- return gridster.gridHeight;
- }, updateHeight);
-
- scope.$watch(function() {
- return gridster.movingItem;
- }, function() {
- gridster.updateHeight(gridster.movingItem ? gridster.movingItem.sizeY : 0);
- });
-
- var prevWidth = $elem[0].offsetWidth || parseInt($elem.css('width'), 10);
-
- var resize = function() {
- var width = $elem[0].offsetWidth || parseInt($elem.css('width'), 10);
-
- if (!width || width === prevWidth || gridster.movingItem) {
- return;
- }
- prevWidth = width;
-
- if (gridster.loaded) {
- $elem.removeClass('gridster-loaded');
- }
-
- refresh();
-
- if (gridster.loaded) {
- $elem.addClass('gridster-loaded');
- }
-
- $rootScope.$broadcast('gridster-resized', [width, $elem[0].offsetHeight], gridster);
- };
-
- // track element width changes any way we can
- var onResize = gridsterDebounce(function onResize() {
- resize();
- $timeout(function() {
- scope.$apply();
- });
- }, 100);
-
- scope.$watch(function() {
- return isVisible($elem[0]);
- }, onResize);
-
- // see https://github.com/sdecima/javascript-detect-element-resize
- if (typeof window.addResizeListener === 'function') {
- window.addResizeListener($elem[0], onResize);
- } else {
- scope.$watch(function() {
- return $elem[0].offsetWidth || parseInt($elem.css('width'), 10);
- }, resize);
- }
- var $win = angular.element($window);
- $win.on('resize', onResize);
-
- // be sure to cleanup
- scope.$on('$destroy', function() {
- gridster.destroy();
- $win.off('resize', onResize);
- if (typeof window.removeResizeListener === 'function') {
- window.removeResizeListener($elem[0], onResize);
- }
- });
-
- // allow a little time to place items before floating up
- $timeout(function() {
- scope.$watch('gridster.floating', function() {
- gridster.floatItemsUp();
- });
- gridster.loaded = true;
- }, 100);
- };
- }
- };
- }
- ])
-
- .controller('GridsterItemCtrl', function() {
- this.$element = null;
- this.gridster = null;
- this.row = null;
- this.col = null;
- this.sizeX = null;
- this.sizeY = null;
- this.minSizeX = 0;
- this.minSizeY = 0;
- this.maxSizeX = null;
- this.maxSizeY = null;
-
- this.init = function($element, gridster) {
- this.$element = $element;
- this.gridster = gridster;
- this.sizeX = gridster.defaultSizeX;
- this.sizeY = gridster.defaultSizeY;
- };
-
- this.destroy = function() {
- // set these to null to avoid the possibility of circular references
- this.gridster = null;
- this.$element = null;
- };
-
- /**
- * Returns the items most important attributes
- */
- this.toJSON = function() {
- return {
- row: this.row,
- col: this.col,
- sizeY: this.sizeY,
- sizeX: this.sizeX
- };
- };
-
- this.isMoving = function() {
- return this.gridster.movingItem === this;
- };
-
- /**
- * Set the items position
- *
- * @param {Number} row
- * @param {Number} column
- */
- this.setPosition = function(row, column) {
- this.gridster.putItem(this, row, column);
-
- if (!this.isMoving()) {
- this.setElementPosition();
- }
- };
-
- /**
- * Sets a specified size property
- *
- * @param {String} key Can be either "x" or "y"
- * @param {Number} value The size amount
- * @param {Boolean} preventMove
- */
- this.setSize = function(key, value, preventMove) {
- key = key.toUpperCase();
- var camelCase = 'size' + key,
- titleCase = 'Size' + key;
- if (value === '') {
- return;
- }
- value = parseInt(value, 10);
- if (isNaN(value) || value === 0) {
- value = this.gridster['default' + titleCase];
- }
- var max = key === 'X' ? this.gridster.columns : this.gridster.maxRows;
- if (this['max' + titleCase]) {
- max = Math.min(this['max' + titleCase], max);
- }
- if (this.gridster['max' + titleCase]) {
- max = Math.min(this.gridster['max' + titleCase], max);
- }
- if (key === 'X' && this.cols) {
- max -= this.cols;
- } else if (key === 'Y' && this.rows) {
- max -= this.rows;
- }
-
- var min = 0;
- if (this['min' + titleCase]) {
- min = Math.max(this['min' + titleCase], min);
- }
- if (this.gridster['min' + titleCase]) {
- min = Math.max(this.gridster['min' + titleCase], min);
- }
-
- value = Math.max(Math.min(value, max), min);
-
- var changed = (this[camelCase] !== value || (this['old' + titleCase] && this['old' + titleCase] !== value));
- this['old' + titleCase] = this[camelCase] = value;
-
- if (!this.isMoving()) {
- this['setElement' + titleCase]();
- }
- if (!preventMove && changed) {
- this.gridster.moveOverlappingItems(this);
- this.gridster.layoutChanged();
- }
-
- return changed;
- };
-
- /**
- * Sets the items sizeY property
- *
- * @param {Number} rows
- * @param {Boolean} preventMove
- */
- this.setSizeY = function(rows, preventMove) {
- return this.setSize('Y', rows, preventMove);
- };
-
- /**
- * Sets the items sizeX property
- *
- * @param {Number} columns
- * @param {Boolean} preventMove
- */
- this.setSizeX = function(columns, preventMove) {
- return this.setSize('X', columns, preventMove);
- };
-
- /**
- * Sets an elements position on the page
- */
- this.setElementPosition = function() {
- if (this.gridster.isMobile) {
- this.$element.css({
- marginLeft: this.gridster.margins[0] + 'px',
- marginRight: this.gridster.margins[0] + 'px',
- marginTop: this.gridster.margins[1] + 'px',
- marginBottom: this.gridster.margins[1] + 'px',
- top: '',
- left: ''
- });
- } else {
- this.$element.css({
- margin: 0,
- top: (this.row * this.gridster.curRowHeight + (this.gridster.outerMargin ? this.gridster.margins[0] : 0)) + 'px',
- left: (this.col * this.gridster.curColWidth + (this.gridster.outerMargin ? this.gridster.margins[1] : 0)) + 'px'
- });
- }
- };
-
- /**
- * Sets an elements height
- */
- this.setElementSizeY = function() {
- if (this.gridster.isMobile && !this.gridster.saveGridItemCalculatedHeightInMobile) {
- this.$element.css('height', '');
- } else {
- var computedHeight = (this.sizeY * this.gridster.curRowHeight - this.gridster.margins[0]) + 'px';
- //this.$element.css('height', computedHeight);
- this.$element.attr('style', this.$element.attr('style') + '; ' + 'height: '+computedHeight+' !important;');
- }
- };
-
- /**
- * Sets an elements width
- */
- this.setElementSizeX = function() {
- if (this.gridster.isMobile) {
- this.$element.css('width', '');
- } else {
- this.$element.css('width', (this.sizeX * this.gridster.curColWidth - this.gridster.margins[1]) + 'px');
- }
- };
-
- /**
- * Gets an element's width
- */
- this.getElementSizeX = function() {
- return (this.sizeX * this.gridster.curColWidth - this.gridster.margins[1]);
- };
-
- /**
- * Gets an element's height
- */
- this.getElementSizeY = function() {
- return (this.sizeY * this.gridster.curRowHeight - this.gridster.margins[0]);
- };
-
- })
-
- .factory('GridsterTouch', [function() {
- return function GridsterTouch(target, startEvent, moveEvent, endEvent) {
- var lastXYById = {};
-
- // Opera doesn't have Object.keys so we use this wrapper
- var numberOfKeys = function(theObject) {
- if (Object.keys) {
- return Object.keys(theObject).length;
- }
-
- var n = 0,
- key;
- for (key in theObject) {
- ++n;
- }
-
- return n;
- };
-
- // this calculates the delta needed to convert pageX/Y to offsetX/Y because offsetX/Y don't exist in the TouchEvent object or in Firefox's MouseEvent object
- var computeDocumentToElementDelta = function(theElement) {
- var elementLeft = 0;
- var elementTop = 0;
- var oldIEUserAgent = navigator.userAgent.match(/\bMSIE\b/);
-
- for (var offsetElement = theElement; offsetElement != null; offsetElement = offsetElement.offsetParent) {
- // the following is a major hack for versions of IE less than 8 to avoid an apparent problem on the IEBlog with double-counting the offsets
- // this may not be a general solution to IE7's problem with offsetLeft/offsetParent
- if (oldIEUserAgent &&
- (!document.documentMode || document.documentMode < 8) &&
- offsetElement.currentStyle.position === 'relative' && offsetElement.offsetParent && offsetElement.offsetParent.currentStyle.position === 'relative' && offsetElement.offsetLeft === offsetElement.offsetParent.offsetLeft) {
- // add only the top
- elementTop += offsetElement.offsetTop;
- } else {
- elementLeft += offsetElement.offsetLeft;
- elementTop += offsetElement.offsetTop;
- }
- }
-
- return {
- x: elementLeft,
- y: elementTop
- };
- };
-
- // cache the delta from the document to our event target (reinitialized each mousedown/MSPointerDown/touchstart)
- var documentToTargetDelta = computeDocumentToElementDelta(target);
-
- // common event handler for the mouse/pointer/touch models and their down/start, move, up/end, and cancel events
- var doEvent = function(theEvtObj) {
-
- if (theEvtObj.type === 'mousemove' && numberOfKeys(lastXYById) === 0) {
- return;
- }
-
- var prevent = true;
-
- var pointerList = theEvtObj.changedTouches ? theEvtObj.changedTouches : [theEvtObj];
-
- for (var i = 0; i < pointerList.length; ++i) {
- var pointerObj = pointerList[i];
- var pointerId = (typeof pointerObj.identifier !== 'undefined') ? pointerObj.identifier : (typeof pointerObj.pointerId !== 'undefined') ? pointerObj.pointerId : 1;
-
- // use the pageX/Y coordinates to compute target-relative coordinates when we have them (in ie < 9, we need to do a little work to put them there)
- if (typeof pointerObj.pageX === 'undefined') {
-
- // initialize assuming our source element is our target
- if(!ie8){
- pointerObj.pageX = pointerObj.offsetX + documentToTargetDelta.x;
- pointerObj.pageY = pointerObj.offsetY + documentToTargetDelta.y;
- }
- else{
- pointerObj.pageX = pointerObj.clientX;
- pointerObj.pageY = pointerObj.clientY;
- }
-
- if (pointerObj.srcElement.offsetParent === target && document.documentMode && document.documentMode === 8 && pointerObj.type === 'mousedown') {
- // source element is a child piece of VML, we're in IE8, and we've not called setCapture yet - add the origin of the source element
- pointerObj.pageX += pointerObj.srcElement.offsetLeft;
- pointerObj.pageY += pointerObj.srcElement.offsetTop;
- } else if (pointerObj.srcElement !== target && !document.documentMode || document.documentMode < 8) {
- // source element isn't the target (most likely it's a child piece of VML) and we're in a version of IE before IE8 -
- // the offsetX/Y values are unpredictable so use the clientX/Y values and adjust by the scroll offsets of its parents
- // to get the document-relative coordinates (the same as pageX/Y)
- var sx = -2,
- sy = -2; // adjust for old IE's 2-pixel border
- for (var scrollElement = pointerObj.srcElement; scrollElement !== null; scrollElement = scrollElement.parentNode) {
- sx += scrollElement.scrollLeft ? scrollElement.scrollLeft : 0;
- sy += scrollElement.scrollTop ? scrollElement.scrollTop : 0;
- }
-
- pointerObj.pageX = pointerObj.clientX + sx;
- pointerObj.pageY = pointerObj.clientY + sy;
- }
- }
-
-
- var pageX = pointerObj.pageX;
- var pageY = pointerObj.pageY;
-
- if (theEvtObj.type.match(/(start|down)$/i)) {
- // clause for processing MSPointerDown, touchstart, and mousedown
-
- // refresh the document-to-target delta on start in case the target has moved relative to document
- documentToTargetDelta = computeDocumentToElementDelta(target);
-
- // protect against failing to get an up or end on this pointerId
- if (lastXYById[pointerId]) {
- if (endEvent) {
- endEvent({
- target: theEvtObj.target,
- which: theEvtObj.which,
- pointerId: pointerId,
- pageX: pageX,
- pageY: pageY
- });
- }
-
- delete lastXYById[pointerId];
- }
-
- if (startEvent) {
- if (prevent) {
- prevent = startEvent({
- target: theEvtObj.target,
- which: theEvtObj.which,
- pointerId: pointerId,
- pageX: pageX,
- pageY: pageY
- });
- }
- }
-
- // init last page positions for this pointer
- lastXYById[pointerId] = {
- x: pageX,
- y: pageY
- };
-
- // IE pointer model
- if (target.msSetPointerCapture) {
- target.msSetPointerCapture(pointerId);
- } else if (theEvtObj.type === 'mousedown' && numberOfKeys(lastXYById) === 1) {
- if (useSetReleaseCapture) {
- target.setCapture(true);
- } else {
- document.addEventListener('mousemove', doEvent, false);
- document.addEventListener('mouseup', doEvent, false);
- }
- }
- } else if (theEvtObj.type.match(/move$/i)) {
- // clause handles mousemove, MSPointerMove, and touchmove
-
- if (lastXYById[pointerId] && !(lastXYById[pointerId].x === pageX && lastXYById[pointerId].y === pageY)) {
- // only extend if the pointer is down and it's not the same as the last point
-
- if (moveEvent && prevent) {
- prevent = moveEvent({
- target: theEvtObj.target,
- which: theEvtObj.which,
- pointerId: pointerId,
- pageX: pageX,
- pageY: pageY
- });
- }
-
- // update last page positions for this pointer
- lastXYById[pointerId].x = pageX;
- lastXYById[pointerId].y = pageY;
- }
- } else if (lastXYById[pointerId] && theEvtObj.type.match(/(up|end|cancel)$/i)) {
- // clause handles up/end/cancel
-
- if (endEvent && prevent) {
- prevent = endEvent({
- target: theEvtObj.target,
- which: theEvtObj.which,
- pointerId: pointerId,
- pageX: pageX,
- pageY: pageY
- });
- }
-
- // delete last page positions for this pointer
- delete lastXYById[pointerId];
-
- // in the Microsoft pointer model, release the capture for this pointer
- // in the mouse model, release the capture or remove document-level event handlers if there are no down points
- // nothing is required for the iOS touch model because capture is implied on touchstart
- if (target.msReleasePointerCapture) {
- target.msReleasePointerCapture(pointerId);
- } else if (theEvtObj.type === 'mouseup' && numberOfKeys(lastXYById) === 0) {
- if (useSetReleaseCapture) {
- target.releaseCapture();
- } else {
- document.removeEventListener('mousemove', doEvent, false);
- document.removeEventListener('mouseup', doEvent, false);
- }
- }
- }
- }
-
- if (prevent) {
- if (theEvtObj.preventDefault) {
- theEvtObj.preventDefault();
- }
-
- if (theEvtObj.preventManipulation) {
- theEvtObj.preventManipulation();
- }
-
- if (theEvtObj.preventMouseEvent) {
- theEvtObj.preventMouseEvent();
- }
- }
- };
-
- var useSetReleaseCapture = false;
- // saving the settings for contentZooming and touchaction before activation
- var contentZooming, msTouchAction;
-
- this.enable = function() {
-
- if (window.navigator.msPointerEnabled) {
- // Microsoft pointer model
- target.addEventListener('MSPointerDown', doEvent, false);
- target.addEventListener('MSPointerMove', doEvent, false);
- target.addEventListener('MSPointerUp', doEvent, false);
- target.addEventListener('MSPointerCancel', doEvent, false);
-
- // css way to prevent panning in our target area
- if (typeof target.style.msContentZooming !== 'undefined') {
- contentZooming = target.style.msContentZooming;
- target.style.msContentZooming = 'none';
- }
-
- // new in Windows Consumer Preview: css way to prevent all built-in touch actions on our target
- // without this, you cannot touch draw on the element because IE will intercept the touch events
- if (typeof target.style.msTouchAction !== 'undefined') {
- msTouchAction = target.style.msTouchAction;
- target.style.msTouchAction = 'none';
- }
- } else if (target.addEventListener) {
- // iOS touch model
- target.addEventListener('touchstart', doEvent, false);
- target.addEventListener('touchmove', doEvent, false);
- target.addEventListener('touchend', doEvent, false);
- target.addEventListener('touchcancel', doEvent, false);
-
- // mouse model
- target.addEventListener('mousedown', doEvent, false);
-
- // mouse model with capture
- // rejecting gecko because, unlike ie, firefox does not send events to target when the mouse is outside target
- if (target.setCapture && !window.navigator.userAgent.match(/\bGecko\b/)) {
- useSetReleaseCapture = true;
-
- target.addEventListener('mousemove', doEvent, false);
- target.addEventListener('mouseup', doEvent, false);
- }
- } else if (target.attachEvent && target.setCapture) {
- // legacy IE mode - mouse with capture
- useSetReleaseCapture = true;
- target.attachEvent('onmousedown', function() {
- doEvent(window.event);
- window.event.returnValue = false;
- return false;
- });
- target.attachEvent('onmousemove', function() {
- doEvent(window.event);
- window.event.returnValue = false;
- return false;
- });
- target.attachEvent('onmouseup', function() {
- doEvent(window.event);
- window.event.returnValue = false;
- return false;
- });
- }
- };
-
- this.disable = function() {
- if (window.navigator.msPointerEnabled) {
- // Microsoft pointer model
- target.removeEventListener('MSPointerDown', doEvent, false);
- target.removeEventListener('MSPointerMove', doEvent, false);
- target.removeEventListener('MSPointerUp', doEvent, false);
- target.removeEventListener('MSPointerCancel', doEvent, false);
-
- // reset zooming to saved value
- if (contentZooming) {
- target.style.msContentZooming = contentZooming;
- }
-
- // reset touch action setting
- if (msTouchAction) {
- target.style.msTouchAction = msTouchAction;
- }
- } else if (target.removeEventListener) {
- // iOS touch model
- target.removeEventListener('touchstart', doEvent, false);
- target.removeEventListener('touchmove', doEvent, false);
- target.removeEventListener('touchend', doEvent, false);
- target.removeEventListener('touchcancel', doEvent, false);
-
- // mouse model
- target.removeEventListener('mousedown', doEvent, false);
-
- // mouse model with capture
- // rejecting gecko because, unlike ie, firefox does not send events to target when the mouse is outside target
- if (target.setCapture && !window.navigator.userAgent.match(/\bGecko\b/)) {
- useSetReleaseCapture = true;
-
- target.removeEventListener('mousemove', doEvent, false);
- target.removeEventListener('mouseup', doEvent, false);
- }
- } else if (target.detachEvent && target.setCapture) {
- // legacy IE mode - mouse with capture
- useSetReleaseCapture = true;
- target.detachEvent('onmousedown');
- target.detachEvent('onmousemove');
- target.detachEvent('onmouseup');
- }
- };
-
- return this;
- };
- }])
-
- .factory('GridsterDraggable', ['$document', '$timeout', '$window', 'GridsterTouch',
- function($document, $timeout, $window, GridsterTouch) {
- function GridsterDraggable($el, scope, gridster, item, itemOptions) {
-
- var elmX, elmY, elmW, elmH,
-
- mouseX = 0,
- mouseY = 0,
- lastMouseX = 0,
- lastMouseY = 0,
- mOffX = 0,
- mOffY = 0,
-
- minTop = 0,
- maxTop = 9999,
- minLeft = 0,
- realdocument = $document[0];
-
- var originalCol, originalRow;
- var inputTags = ['select', 'input', 'textarea', 'button'];
-
- var gridsterItemDragElement = $el[0].querySelector('[gridster-item-drag]');
- //console.log(gridsterItemDragElement);
- var isDraggableAreaDefined = gridsterItemDragElement?true:false;
- //console.log(isDraggableAreaDefined);
-
- function mouseDown(e) {
-
- if(ie8){
- e.target = window.event.srcElement;
- e.which = window.event.button;
- }
-
- if(isDraggableAreaDefined && (!gridsterItemDragElement.contains(e.target))){
- return false;
- }
-
- if (inputTags.indexOf(e.target.nodeName.toLowerCase()) !== -1) {
- return false;
- }
-
- var $target = angular.element(e.target);
-
- // exit, if a resize handle was hit
- if ($target.hasClass('gridster-item-resizable-handler')) {
- return false;
- }
-
- // exit, if the target has it's own click event
- if ($target.attr('onclick') || $target.attr('ng-click')) {
- return false;
- }
-
- // only works if you have jQuery
- if ($target.closest && $target.closest('.gridster-no-drag').length) {
- return false;
- }
-
- switch (e.which) {
- case 1:
- // left mouse button
- break;
- case 2:
- case 3:
- // right or middle mouse button
- return;
- }
-
- lastMouseX = e.pageX;
- lastMouseY = e.pageY;
-
- elmX = parseInt($el.css('left'), 10);
- elmY = parseInt($el.css('top'), 10);
- elmW = $el[0].offsetWidth;
- elmH = $el[0].offsetHeight;
-
- originalCol = item.col;
- originalRow = item.row;
-
- dragStart(e);
-
- return true;
- }
-
- function mouseMove(e) {
- if (!$el.hasClass('gridster-item-moving') || $el.hasClass('gridster-item-resizing')) {
- return false;
- }
-
- var maxLeft = gridster.curWidth - 1;
-
- // Get the current mouse position.
- mouseX = e.pageX;
- mouseY = e.pageY;
-
- // Get the deltas
- var diffX = mouseX - lastMouseX + mOffX;
- var diffY = mouseY - lastMouseY + mOffY;
- mOffX = mOffY = 0;
-
- // Update last processed mouse positions.
- lastMouseX = mouseX;
- lastMouseY = mouseY;
-
- var dX = diffX,
- dY = diffY;
- if (elmX + dX < minLeft) {
- diffX = minLeft - elmX;
- mOffX = dX - diffX;
- } else if (elmX + elmW + dX > maxLeft) {
- diffX = maxLeft - elmX - elmW;
- mOffX = dX - diffX;
- }
-
- if (elmY + dY < minTop) {
- diffY = minTop - elmY;
- mOffY = dY - diffY;
- } else if (elmY + elmH + dY > maxTop) {
- diffY = maxTop - elmY - elmH;
- mOffY = dY - diffY;
- }
- elmX += diffX;
- elmY += diffY;
-
- // set new position
- $el.css({
- 'top': elmY + 'px',
- 'left': elmX + 'px'
- });
-
- drag(e);
-
- return true;
- }
-
- function mouseUp(e) {
- if (!$el.hasClass('gridster-item-moving') || $el.hasClass('gridster-item-resizing')) {
- return false;
- }
-
- mOffX = mOffY = 0;
-
- dragStop(e);
-
- return true;
- }
-
- function dragStart(event) {
- $el.addClass('gridster-item-moving');
- gridster.movingItem = item;
-
- gridster.updateHeight(item.sizeY);
- scope.$apply(function() {
- if (gridster.draggable && gridster.draggable.start) {
- gridster.draggable.start(event, $el, itemOptions);
- }
- });
- }
-
- function drag(event) {
- var oldRow = item.row,
- oldCol = item.col,
- hasCallback = gridster.draggable && gridster.draggable.drag,
- scrollSensitivity = gridster.draggable.scrollSensitivity,
- scrollSpeed = gridster.draggable.scrollSpeed;
-
- var row = gridster.pixelsToRows(elmY);
- var col = gridster.pixelsToColumns(elmX);
-
- var itemsInTheWay = gridster.getItems(row, col, item.sizeX, item.sizeY, item);
- var hasItemsInTheWay = itemsInTheWay.length !== 0;
-
- if (gridster.swapping === true && hasItemsInTheWay) {
- var boundingBoxItem = gridster.getBoundingBox(itemsInTheWay),
- sameSize = boundingBoxItem.sizeX === item.sizeX && boundingBoxItem.sizeY === item.sizeY,
- sameRow = boundingBoxItem.row === oldRow,
- sameCol = boundingBoxItem.col === oldCol,
- samePosition = boundingBoxItem.row === row && boundingBoxItem.col === col,
- inline = sameRow || sameCol;
-
- if (sameSize && itemsInTheWay.length === 1) {
- if (samePosition) {
- gridster.swapItems(item, itemsInTheWay[0]);
- } else if (inline) {
- return;
- }
- } else if (boundingBoxItem.sizeX <= item.sizeX && boundingBoxItem.sizeY <= item.sizeY && inline) {
- var emptyRow = item.row <= row ? item.row : row + item.sizeY,
- emptyCol = item.col <= col ? item.col : col + item.sizeX,
- rowOffset = emptyRow - boundingBoxItem.row,
- colOffset = emptyCol - boundingBoxItem.col;
-
- for (var i = 0, l = itemsInTheWay.length; i < l; ++i) {
- var itemInTheWay = itemsInTheWay[i];
-
- var itemsInFreeSpace = gridster.getItems(
- itemInTheWay.row + rowOffset,
- itemInTheWay.col + colOffset,
- itemInTheWay.sizeX,
- itemInTheWay.sizeY,
- item
- );
-
- if (itemsInFreeSpace.length === 0) {
- gridster.putItem(itemInTheWay, itemInTheWay.row + rowOffset, itemInTheWay.col + colOffset);
- }
- }
- }
- }
-
- if (gridster.pushing !== false || !hasItemsInTheWay) {
- item.row = row;
- item.col = col;
- }
-
- if(($window.navigator.appName === 'Microsoft Internet Explorer' && !ie8) || $window.navigator.userAgent.indexOf("Firefox")!==-1){
- if (event.pageY - realdocument.documentElement.scrollTop < scrollSensitivity) {
- realdocument.documentElement.scrollTop = realdocument.documentElement.scrollTop - scrollSpeed;
- } else if ($window.innerHeight - (event.pageY - realdocument.documentElement.scrollTop) < scrollSensitivity) {
- realdocument.documentElement.scrollTop = realdocument.documentElement.scrollTop + scrollSpeed;
- }
- }
- else{
- if (event.pageY - realdocument.body.scrollTop < scrollSensitivity) {
- realdocument.body.scrollTop = realdocument.body.scrollTop - scrollSpeed;
- } else if ($window.innerHeight - (event.pageY - realdocument.body.scrollTop) < scrollSensitivity) {
- realdocument.body.scrollTop = realdocument.body.scrollTop + scrollSpeed;
- }
- }
-
-
-
- if (event.pageX - realdocument.body.scrollLeft < scrollSensitivity) {
- realdocument.body.scrollLeft = realdocument.body.scrollLeft - scrollSpeed;
- } else if ($window.innerWidth - (event.pageX - realdocument.body.scrollLeft) < scrollSensitivity) {
- realdocument.body.scrollLeft = realdocument.body.scrollLeft + scrollSpeed;
- }
-
- if (hasCallback || oldRow !== item.row || oldCol !== item.col) {
- scope.$apply(function() {
- if (hasCallback) {
- gridster.draggable.drag(event, $el, itemOptions);
- }
- });
- }
- }
-
- function dragStop(event) {
- $el.removeClass('gridster-item-moving');
- var row = gridster.pixelsToRows(elmY);
- var col = gridster.pixelsToColumns(elmX);
- if (gridster.pushing !== false || gridster.getItems(row, col, item.sizeX, item.sizeY, item).length === 0) {
- item.row = row;
- item.col = col;
- }
- gridster.movingItem = null;
- item.setPosition(item.row, item.col);
-
- scope.$apply(function() {
- if (gridster.draggable && gridster.draggable.stop) {
- gridster.draggable.stop(event, $el, itemOptions);
- }
- });
- }
-
- var enabled = null;
- var $dragHandles = null;
- var unifiedInputs = [];
-
- this.enable = function() {
- if (enabled === true) {
- return;
- }
-
- // disable and timeout required for some template rendering
- $timeout(function() {
- // disable any existing draghandles
- for (var u = 0, ul = unifiedInputs.length; u < ul; ++u) {
- unifiedInputs[u].disable();
- }
- unifiedInputs = [];
-
- if (gridster.draggable && gridster.draggable.handle) {
- $dragHandles = angular.element($el[0].querySelectorAll(gridster.draggable.handle));
- if ($dragHandles.length === 0) {
- // fall back to element if handle not found...
- $dragHandles = $el;
- }
- } else {
- $dragHandles = $el;
- }
-
- for (var h = 0, hl = $dragHandles.length; h < hl; ++h) {
- unifiedInputs[h] = new GridsterTouch($dragHandles[h], mouseDown, mouseMove, mouseUp);
- unifiedInputs[h].enable();
- }
-
- enabled = true;
- });
- };
-
- this.disable = function() {
- if (enabled === false) {
- return;
- }
-
- // timeout to avoid race contition with the enable timeout
- $timeout(function() {
-
- for (var u = 0, ul = unifiedInputs.length; u < ul; ++u) {
- unifiedInputs[u].disable();
- }
-
- unifiedInputs = [];
- enabled = false;
- });
- };
-
- this.toggle = function(enabled) {
- if (enabled) {
- this.enable();
- } else {
- this.disable();
- }
- };
-
- this.destroy = function() {
- this.disable();
- };
- }
-
- return GridsterDraggable;
- }
- ])
-
- .factory('GridsterResizable', ['GridsterTouch', function(GridsterTouch) {
- function GridsterResizable($el, scope, gridster, item, itemOptions) {
-
- function ResizeHandle(handleClass) {
-
- var hClass = handleClass;
-
- var elmX, elmY, elmW, elmH,
-
- mouseX = 0,
- mouseY = 0,
- lastMouseX = 0,
- lastMouseY = 0,
- mOffX = 0,
- mOffY = 0,
-
- minTop = 0,
- maxTop = 9999,
- minLeft = 0;
-
- var getMinHeight = function() {
- return (item.minSizeY ? item.minSizeY : 1) * gridster.curRowHeight - gridster.margins[0];
- };
- var getMinWidth = function() {
- return (item.minSizeX ? item.minSizeX : 1) * gridster.curColWidth - gridster.margins[1];
- };
-
- var originalWidth, originalHeight;
- var savedDraggable;
-
- function mouseDown(e) {
- switch (e.which) {
- case 1:
- // left mouse button
- break;
- case 2:
- case 3:
- // right or middle mouse button
- return;
- }
-
- // save the draggable setting to restore after resize
- savedDraggable = gridster.draggable.enabled;
- if (savedDraggable) {
- gridster.draggable.enabled = false;
- scope.$broadcast('gridster-draggable-changed', gridster);
- }
-
- // Get the current mouse position.
- lastMouseX = e.pageX;
- lastMouseY = e.pageY;
-
- // Record current widget dimensions
- elmX = parseInt($el.css('left'), 10);
- elmY = parseInt($el.css('top'), 10);
- elmW = $el[0].offsetWidth;
- elmH = $el[0].offsetHeight;
-
- originalWidth = item.sizeX;
- originalHeight = item.sizeY;
-
- resizeStart(e);
-
- return true;
- }
-
- function resizeStart(e) {
- $el.addClass('gridster-item-moving');
- $el.addClass('gridster-item-resizing');
-
- gridster.movingItem = item;
-
- item.setElementSizeX();
- item.setElementSizeY();
- item.setElementPosition();
- gridster.updateHeight(1);
-
- scope.$apply(function() {
- // callback
- if (gridster.resizable && gridster.resizable.start) {
- gridster.resizable.start(e, $el, itemOptions); // options is the item model
- }
- });
- }
-
- function mouseMove(e) {
- var maxLeft = gridster.curWidth - 1;
-
- // Get the current mouse position.
- mouseX = e.pageX;
- mouseY = e.pageY;
-
- // Get the deltas
- var diffX = mouseX - lastMouseX + mOffX;
- var diffY = mouseY - lastMouseY + mOffY;
- mOffX = mOffY = 0;
-
- // Update last processed mouse positions.
- lastMouseX = mouseX;
- lastMouseY = mouseY;
-
- var dY = diffY,
- dX = diffX;
-
- if (hClass.indexOf('n') >= 0) {
- if (elmH - dY < getMinHeight()) {
- diffY = elmH - getMinHeight();
- mOffY = dY - diffY;
- } else if (elmY + dY < minTop) {
- diffY = minTop - elmY;
- mOffY = dY - diffY;
- }
- elmY += diffY;
- elmH -= diffY;
- }
- if (hClass.indexOf('s') >= 0) {
- if (elmH + dY < getMinHeight()) {
- diffY = getMinHeight() - elmH;
- mOffY = dY - diffY;
- } else if (elmY + elmH + dY > maxTop) {
- diffY = maxTop - elmY - elmH;
- mOffY = dY - diffY;
- }
- elmH += diffY;
- }
- if (hClass.indexOf('w') >= 0) {
- if (elmW - dX < getMinWidth()) {
- diffX = elmW - getMinWidth();
- mOffX = dX - diffX;
- } else if (elmX + dX < minLeft) {
- diffX = minLeft - elmX;
- mOffX = dX - diffX;
- }
- elmX += diffX;
- elmW -= diffX;
- }
- if (hClass.indexOf('e') >= 0) {
- if (elmW + dX < getMinWidth()) {
- diffX = getMinWidth() - elmW;
- mOffX = dX - diffX;
- } else if (elmX + elmW + dX > maxLeft) {
- diffX = maxLeft - elmX - elmW;
- mOffX = dX - diffX;
- }
- elmW += diffX;
- }
-
- // set new position
- $el.css({
- 'top': elmY + 'px',
- 'left': elmX + 'px',
- 'width': elmW + 'px',
- 'height': elmH + 'px'
- });
-
- resize(e);
-
- return true;
- }
-
- function mouseUp(e) {
- // restore draggable setting to its original state
- if (gridster.draggable.enabled !== savedDraggable) {
- gridster.draggable.enabled = savedDraggable;
- scope.$broadcast('gridster-draggable-changed', gridster);
- }
-
- mOffX = mOffY = 0;
-
- resizeStop(e);
-
- return true;
- }
-
- function resize(e) {
- var oldRow = item.row,
- oldCol = item.col,
- oldSizeX = item.sizeX,
- oldSizeY = item.sizeY,
- hasCallback = gridster.resizable && gridster.resizable.resize;
-
- var col = item.col;
- // only change column if grabbing left edge
- if (['w', 'nw', 'sw'].indexOf(handleClass) !== -1) {
- col = gridster.pixelsToColumns(elmX, false);
- }
-
- var row = item.row;
- // only change row if grabbing top edge
- if (['n', 'ne', 'nw'].indexOf(handleClass) !== -1) {
- row = gridster.pixelsToRows(elmY, false);
- }
-
- var sizeX = item.sizeX;
- // only change row if grabbing left or right edge
- if (['n', 's'].indexOf(handleClass) === -1) {
- sizeX = gridster.pixelsToColumns(elmW, true);
- }
-
- var sizeY = item.sizeY;
- // only change row if grabbing top or bottom edge
- if (['e', 'w'].indexOf(handleClass) === -1) {
- sizeY = gridster.pixelsToRows(elmH, true);
- }
-
- if (gridster.pushing !== false || gridster.getItems(row, col, sizeX, sizeY, item).length === 0) {
- item.row = row;
- item.col = col;
- item.sizeX = sizeX;
- item.sizeY = sizeY;
- }
- var isChanged = item.row !== oldRow || item.col !== oldCol || item.sizeX !== oldSizeX || item.sizeY !== oldSizeY;
-
- if (hasCallback || isChanged) {
- scope.$apply(function() {
- if (hasCallback) {
- gridster.resizable.resize(e, $el, itemOptions); // options is the item model
- }
- });
- }
- }
-
- function resizeStop(e) {
- $el.removeClass('gridster-item-moving');
- $el.removeClass('gridster-item-resizing');
-
- gridster.movingItem = null;
-
- item.setPosition(item.row, item.col);
- item.setSizeY(item.sizeY);
- item.setSizeX(item.sizeX);
-
- scope.$apply(function() {
- if (gridster.resizable && gridster.resizable.stop) {
- gridster.resizable.stop(e, $el, itemOptions); // options is the item model
- }
- });
- }
-
- var $dragHandle = null;
- var unifiedInput;
-
- this.enable = function() {
- if (!$dragHandle) {
- $dragHandle = angular.element('<div class="gridster-item-resizable-handler handle-' + hClass + '"></div>');
- $el.append($dragHandle);
- }
-
- unifiedInput = new GridsterTouch($dragHandle[0], mouseDown, mouseMove, mouseUp);
- unifiedInput.enable();
- };
-
- this.disable = function() {
- if ($dragHandle) {
- $dragHandle.remove();
- $dragHandle = null;
- }
-
- unifiedInput.disable();
- unifiedInput = undefined;
- };
-
- this.destroy = function() {
- this.disable();
- };
- }
-
- var handles = [];
- var handlesOpts = gridster.resizable.handles;
- if (typeof handlesOpts === 'string') {
- handlesOpts = gridster.resizable.handles.split(',');
- }
- var enabled = false;
-
- for (var c = 0, l = handlesOpts.length; c < l; c++) {
- handles.push(new ResizeHandle(handlesOpts[c]));
- }
-
- this.enable = function() {
- if (enabled) {
- return;
- }
- for (var c = 0, l = handles.length; c < l; c++) {
- handles[c].enable();
- }
- enabled = true;
- };
-
- this.disable = function() {
- if (!enabled) {
- return;
- }
- for (var c = 0, l = handles.length; c < l; c++) {
- handles[c].disable();
- }
- enabled = false;
- };
-
- this.toggle = function(enabled) {
- if (enabled) {
- this.enable();
- } else {
- this.disable();
- }
- };
-
- this.destroy = function() {
- for (var c = 0, l = handles.length; c < l; c++) {
- handles[c].destroy();
- }
- };
- }
- return GridsterResizable;
- }])
-
- .factory('gridsterDebounce', function() {
- return function gridsterDebounce(func, wait, immediate) {
- var timeout;
- return function() {
- var context = this,
- args = arguments;
- var later = function() {
- timeout = null;
- if (!immediate) {
- func.apply(context, args);
- }
- };
- var callNow = immediate && !timeout;
- clearTimeout(timeout);
- timeout = setTimeout(later, wait);
- if (callNow) {
- func.apply(context, args);
- }
- };
- };
- })
-
- /**
- * GridsterItem directive
- * @param $parse
- * @param GridsterDraggable
- * @param GridsterResizable
- * @param gridsterDebounce
- */
- .directive('gridsterItem', ['$parse', 'GridsterDraggable', 'GridsterResizable', 'gridsterDebounce',
- function($parse, GridsterDraggable, GridsterResizable, gridsterDebounce) {
- return {
- scope: true,
- restrict: 'EA',
- controller: 'GridsterItemCtrl',
- controllerAs: 'gridsterItem',
- require: ['^gridster', 'gridsterItem'],
- link: function(scope, $el, attrs, controllers) {
- var optionsKey = attrs.gridsterItem,
- options;
-
- var gridster = controllers[0],
- item = controllers[1];
-
- scope.gridster = gridster;
-
-
- // bind the item's position properties
- // options can be an object specified by gridster-item="object"
- // or the options can be the element html attributes object
- if (optionsKey) {
- var $optionsGetter = $parse(optionsKey);
- options = $optionsGetter(scope) || {};
- if (!options && $optionsGetter.assign) {
- options = {
- row: item.row,
- col: item.col,
- sizeX: item.sizeX,
- sizeY: item.sizeY,
- minSizeX: 0,
- minSizeY: 0,
- maxSizeX: null,
- maxSizeY: null
- };
- $optionsGetter.assign(scope, options);
- }
- } else {
- options = attrs;
- }
-
- item.init($el, gridster);
-
- $el.addClass('gridster-item');
-
- var aspects = ['minSizeX', 'maxSizeX', 'minSizeY', 'maxSizeY', 'sizeX', 'sizeY', 'row', 'col'],
- $getters = {};
-
- var expressions = [];
- var aspectFn = function(aspect) {
- var expression;
- if (typeof options[aspect] === 'string') {
- // watch the expression in the scope
- expression = options[aspect];
- } else if (typeof options[aspect.toLowerCase()] === 'string') {
- // watch the expression in the scope
- expression = options[aspect.toLowerCase()];
- } else if (optionsKey) {
- // watch the expression on the options object in the scope
- expression = optionsKey + '.' + aspect;
- } else {
- return;
- }
- expressions.push('"' + aspect + '":' + expression);
- $getters[aspect] = $parse(expression);
-
- // initial set
- var val = $getters[aspect](scope);
- if (typeof val === 'number') {
- item[aspect] = val;
- }
- };
-
- for (var i = 0, l = aspects.length; i < l; ++i) {
- aspectFn(aspects[i]);
- }
-
- var watchExpressions = '{' + expressions.join(',') + '}';
-
- // when the value changes externally, update the internal item object
- scope.$watchCollection(watchExpressions, function(newVals, oldVals) {
- for (var aspect in newVals) {
- var newVal = newVals[aspect];
- var oldVal = oldVals[aspect];
- if (oldVal === newVal) {
- continue;
- }
- newVal = parseInt(newVal, 10);
- if (!isNaN(newVal)) {
- item[aspect] = newVal;
- }
- }
- });
-
- function positionChanged() {
- // call setPosition so the element and gridster controller are updated
- item.setPosition(item.row, item.col);
-
- // when internal item position changes, update externally bound values
- if ($getters.row && $getters.row.assign) {
- $getters.row.assign(scope, item.row);
- }
- if ($getters.col && $getters.col.assign) {
- $getters.col.assign(scope, item.col);
- }
- }
- scope.$watch(function() {
- return item.row + ',' + item.col;
- }, positionChanged);
-
- function sizeChanged() {
- var changedX = item.setSizeX(item.sizeX, true);
- if (changedX && $getters.sizeX && $getters.sizeX.assign) {
- $getters.sizeX.assign(scope, item.sizeX);
- }
- var changedY = item.setSizeY(item.sizeY, true);
- if (changedY && $getters.sizeY && $getters.sizeY.assign) {
- $getters.sizeY.assign(scope, item.sizeY);
- }
-
- if (changedX || changedY) {
- item.gridster.moveOverlappingItems(item);
- gridster.layoutChanged();
- scope.$broadcast('gridster-item-resized', item);
- }
- }
-
- scope.$watch(function() {
- return item.sizeY + ',' + item.sizeX + ',' + item.minSizeX + ',' + item.maxSizeX + ',' + item.minSizeY + ',' + item.maxSizeY;
- }, sizeChanged);
-
- var draggable = new GridsterDraggable($el, scope, gridster, item, options);
- var resizable = new GridsterResizable($el, scope, gridster, item, options);
-
- var updateResizable = function() {
- resizable.toggle(!gridster.isMobile && gridster.resizable && gridster.resizable.enabled);
- };
- updateResizable();
-
- var updateDraggable = function() {
- draggable.toggle(!gridster.isMobile && gridster.draggable && gridster.draggable.enabled);
- };
- updateDraggable();
-
- scope.$on('gridster-draggable-changed', updateDraggable);
- scope.$on('gridster-resizable-changed', updateResizable);
- scope.$on('gridster-resized', updateResizable);
- scope.$on('gridster-mobile-changed', function() {
- updateResizable();
- updateDraggable();
- });
-
- function whichTransitionEvent() {
- var el = document.createElement('div');
- var transitions = {
- 'transition': 'transitionend',
- 'OTransition': 'oTransitionEnd',
- 'MozTransition': 'transitionend',
- 'WebkitTransition': 'webkitTransitionEnd'
- };
- for (var t in transitions) {
- if (el.style[t] !== undefined) {
- return transitions[t];
- }
- }
- }
-
- var debouncedTransitionEndPublisher = gridsterDebounce(function() {
- scope.$apply(function() {
- scope.$broadcast('gridster-item-transition-end', item);
- });
- }, 50);
-
- if(whichTransitionEvent()){ //check for IE8, as it evaluates to null
- $el.on(whichTransitionEvent(), debouncedTransitionEndPublisher);
- }
-
- scope.$broadcast('gridster-item-initialized', item);
-
- return scope.$on('$destroy', function() {
- try {
- resizable.destroy();
- draggable.destroy();
- } catch (e) {}
-
- try {
- gridster.removeItem(item);
- } catch (e) {}
-
- try {
- item.destroy();
- } catch (e) {}
- });
- }
- };
- }
- ])
-
- .directive('gridsterNoDrag', function() {
- return {
- restrict: 'A',
- link: function(scope, $element) {
- $element.addClass('gridster-no-drag');
- }
- };
- })
-
- ;
-
-}));
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/ui-gridster-tpls.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/ui-gridster-tpls.js
deleted file mode 100644
index 3ca3db7d..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/ui-gridster-tpls.js
+++ /dev/null
@@ -1,168 +0,0 @@
-/**
-* FileName ui-gridster
-* Version 0.0.1
-* Build number ad58c6f4f8f8fd7f04ac457f95d76f09
-* Date 08/17/2015
-*/
-
-
-(function(angular, window){
-angular.module("att.gridster", ["att.gridster.tpls", "att.gridster.utilities","att.gridster.gridster"]);
-angular.module("att.gridster.tpls", ["template/gridster/gridster.html","template/gridster/gridsterItem.html","template/gridster/gridsterItemBody.html","template/gridster/gridsterItemFooter.html","template/gridster/gridsterItemHeader.html"]);
-angular.module('att.gridster.utilities', [])
- .factory('$extendObj', [function() {
- var _extendDeep = function(dst) {
- angular.forEach(arguments, function(obj) {
- if (obj !== dst) {
- angular.forEach(obj, function(value, key) {
- if (dst[key] && dst[key].constructor && dst[key].constructor === Object) {
- _extendDeep(dst[key], value);
- } else {
- dst[key] = value;
- }
- });
- }
- });
- return dst;
- };
- return {
- extendDeep: _extendDeep
- };
- }]);
-
-angular.module('att.gridster.gridster', ['attGridsterLib', 'att.gridster.utilities'])
- .config(['$compileProvider', function($compileProvider) {
- $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|javascript):/);
- }])
- .constant('attGridsterConfig',
- {
- columns: 3,
- margins: [10, 10],
- outerMargin: true,
- pushing: true,
- floating: true,
- swapping: true,
- draggable: {
- enabled: true
- }
- })
- .directive('attGridster', ['attGridsterConfig', '$extendObj', function(attGridsterConfig, $extendObj) {
- return {
- restrict: 'EA',
- scope: {
- attGridsterOptions: '=?'
- },
- templateUrl: 'template/gridster/gridster.html',
- replace: false,
- transclude: true,
- controller: [function() {}],
- link: function(scope) {
- if (angular.isDefined(scope.attGridsterOptions)) {
- attGridsterConfig = $extendObj.extendDeep(attGridsterConfig, scope.attGridsterOptions);
- }
- scope.attGridsterConfig = attGridsterConfig;
- }
- };
- }])
- .directive('attGridsterItem', ['$timeout', function($timeout) {
- return {
- restrict: 'EA',
- require: ['^attGridster'],
- scope: {
- attGridsterItem: '='
- },
- templateUrl: 'template/gridster/gridsterItem.html',
- replace: false,
- transclude: true,
- controller: [function() {}]
- };
- }])
- .directive('attGridsterItemHeader', [function() {
- return {
- restrict: 'EA',
- require: ['^attGridsterItem'],
- scope: {
- headerText: '@',
- subHeaderText: '@?'
- },
- templateUrl: 'template/gridster/gridsterItemHeader.html',
- replace: true,
- transclude: true,
- link: function(scope, element) {
- if (angular.isDefined(scope.subHeaderText) && scope.subHeaderText) {
- angular.element(element[0].querySelector('span.gridster-item-sub-header-content')).attr("tabindex", "0");
- angular.element(element[0].querySelector('span.gridster-item-sub-header-content')).attr("aria-label", scope.subHeaderText);
- }
- }
- };
- }])
- .directive('attGridsterItemBody', [function() {
- return {
- restrict: 'EA',
- require: ['^attGridsterItem'],
- scope: {},
- templateUrl: 'template/gridster/gridsterItemBody.html',
- replace: true,
- transclude: true
- };
- }])
- .directive('attGridsterItemFooter', ['$location', function($location) {
- return {
- restrict: 'EA',
- require: ['^attGridsterItem'],
- scope: {
- attGridsterItemFooterLink: '@?'
- },
- templateUrl: 'template/gridster/gridsterItemFooter.html',
- replace: true,
- transclude: true,
- controller: ['$scope', function($scope) {
- $scope.clickOnFooterLink = function(evt) {
- evt.preventDefault();
- evt.stopPropagation();
- if ($scope.attGridsterItemFooterLink) {
- $location.url($scope.attGridsterItemFooterLink);
- }
- };
- }],
- link: function(scope, element) {
- if (angular.isDefined(scope.attGridsterItemFooterLink) && scope.attGridsterItemFooterLink) {
- element.attr("role", "link");
- }
- }
- };
- }]);
-angular.module("template/gridster/gridster.html", []).run(["$templateCache", function($templateCache) {
- $templateCache.put("template/gridster/gridster.html",
- "<div gridster='attGridsterConfig'><div ng-transclude></div></div>");
-}]);
-
-angular.module("template/gridster/gridsterItem.html", []).run(["$templateCache", function($templateCache) {
- $templateCache.put("template/gridster/gridsterItem.html",
- "<div gridster-item='attGridsterItem' class=\"gridster-item-container\" ng-transclude></div>");
-}]);
-
-angular.module("template/gridster/gridsterItemBody.html", []).run(["$templateCache", function($templateCache) {
- $templateCache.put("template/gridster/gridsterItemBody.html",
- "<div class=\"gridster-item-body\" ng-transclude></div>");
-}]);
-
-angular.module("template/gridster/gridsterItemFooter.html", []).run(["$templateCache", function($templateCache) {
- $templateCache.put("template/gridster/gridsterItemFooter.html",
- "<div class=\"gridster-item-footer\" ng-click=\"clickOnFooterLink($event)\" tabindex=\"0\" ng-keydown=\"(($event.keyCode && $event.keyCode === 13) || ($event.which && $event.which === 13)) && clickOnFooterLink($event)\" >\n" +
- " <span class=\"gridster-item-footer-content\" ng-transclude></span>\n" +
- "</div>");
-}]);
-
-angular.module("template/gridster/gridsterItemHeader.html", []).run(["$templateCache", function($templateCache) {
- $templateCache.put("template/gridster/gridsterItemHeader.html",
- "<div class=\"gridster-item-header\">\n" +
- " <img gridster-item-drag src=\"static/fusion/images/att_angular_gridster/grips.png\" alt=\"||\" aria-label=\"Tap/Click to move\" class=\"gridster-item-handle\" />\n" +
- " <span class=\"gridster-item-header-content\" tabindex=\"0\" role=\"presentation\" aria-label=\"{{headerText}}\">{{headerText}}</span>\n" +
- " <span class=\"gridster-item-sub-header-content\" role=\"presentation\">{{subHeaderText}}</span>\n" +
- " <div class=\"gridster-item-header-buttons-container\" ng-transclude></div>\n" +
- "</div>");
-}]);
-
-return {}
-})(angular, window); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-closed-cloop.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-closed-cloop.js
deleted file mode 100644
index 39ef50e8..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-closed-cloop.js
+++ /dev/null
@@ -1,28 +0,0 @@
-app.controller('adminClosedLoopController', ['$scope','$http','$q','$log',function ($scope, $http,$q, $log){
- $scope.camunda_cockpit_url = '';
- var deferred = $q.defer();
- $http({
- method: "GET",
- url: "get_camunda_cockpit_link",
- }).success( function(res) {
- // if the returned response is error HTML page in string format
- if(res.link_defined=='false'){
- $log.error('Retrieval of camunda cockpit link failed. Please make sure the variable "camunda_cockpit_url" is defined in the system.properties file.');
- deferred.reject(status);
- }
- // valid cockpit url
- else if(res.camunda_cockpit_link!=null & res.camunda_cockpit_link!= '') {
- $scope.camunda_cockpit_url = res.camunda_cockpit_link;
- deferred.resolve(res);
- // if the defined url is empty;
- } else {
- $log.error('Please ensure the variable "camunda_cockpit_url" is properly defined in system.properties file (i.e., neither null nor empty).');
- deferred.reject(status);
- }
- // API call fails
- }).error( function(status) {
- $log.error('get_camunda_cockpit_link RestAPI call failed.');
- deferred.reject(status);
- });
- return deferred.promise;
-}]); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-whitelist.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-whitelist.js
deleted file mode 100644
index 5eed3003..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-whitelist.js
+++ /dev/null
@@ -1,3 +0,0 @@
-app.config(function ($sceDelegateProvider) {
- $sceDelegateProvider.resourceUrlWhitelist(['self','**']);
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/ase-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/ase-controller.js
deleted file mode 100644
index 3d92220f..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/ase-controller.js
+++ /dev/null
@@ -1,3 +0,0 @@
-app.controller('aseCtrl', function ($scope){
-/* do nothing yet*/
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-controller.js
deleted file mode 100644
index a6cde5ae..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-controller.js
+++ /dev/null
@@ -1,60 +0,0 @@
-app.controller('broadcastController', function ($scope, modalService, $modal,AdminService,$routeParams){
- //$scope.broadcastMessage=${broadcastMessage};
- //$scope.broadcastSites=${broadcastSites};
- //console.log($scope.broadcastMessage);
- $scope.broadcastMessage=[];
- $scope.broadcastSites=[];
- AdminService.getBroadcast($routeParams.messageLocationId, $routeParams.messageLocation, $routeParams.messageId).then(function(data){
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.broadcastMessage=JSON.parse($scope.data.broadcastMessage);
- $scope.broadcastSites=JSON.parse($scope.data.broadcastSites);
- console.log($scope.broadcastMessage);
- console.log($scope.broadcastMessage.id);
- console.log($scope.broadcastSites);
- //$scope.resetMenu();
-
- },function(error){
- console.log("failed");
- reloadPageOnce();
- });
-
- $scope.save = function() {
- var uuu = "broadcast/save";
- var postData={broadcastMessage: $scope.broadcastMessage};
- $.ajax({
- type : 'POST',
- url : uuu,
- dataType: 'json',
- contentType: 'application/json',
- data: JSON.stringify(postData),
- success : function(data){
- window.location.href = "admin#/broadcast_list";
- },
- error : function(data){
- modalService.showFailure("Fail","Error while saving.");
- }
- });
- };
-
- $scope.close = function() {
- window.location.href = "admin#/broadcast_list";
-};
-
-});
-
-$(function() {
- $( "#startDatepicker" ).datepicker();
- $( "#endDatepicker" ).datepicker();
-
- $( "#startDatepicker" ).change(function() {
- var tempStartDate = moment($( "#startDatepicker" ).val()).format('YYYY-MM-DD hh:mm:ss.S');
- $( "#startDateHidden" ).val(tempStartDate.toString());
- //alert( $( "#startDateHidden" ).val() );
- });
- $( "#endDatepicker" ).change(function() {
- var tempEndDate = moment($( "#endDatepicker" ).val()).format('YYYY-MM-DD hh:mm:ss.S');
- $( "#endDateHidden" ).val(tempEndDate.toString());
- //alert( $( "#endDateHidden" ).val() );
- });
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-list-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-list-controller.js
deleted file mode 100644
index b487fc9a..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-list-controller.js
+++ /dev/null
@@ -1,101 +0,0 @@
-app.controller('broadcastListController', function ($scope, modalService, $modal,AdminService){
- //$scope.broadcastMessage=${broadcastMessage};
- //$scope.broadcastSites=${broadcastSites};
- //console.log($scope.broadcastMessage);
- var messagesMap = {};
- AdminService.getBroadcastList().then(function(data){
-
- var j = data;
- $scope.data = JSON.parse(j.data);
- $scope.messagesList=(($scope.data.messagesList===null) ? [""]:$scope.data.messagesList);
- $scope.messageLocations=(($scope.data.messageLocations===null) ? [""]:$scope.data.messageLocations);
- console.log("messages: "+$scope.messagesList);
- console.log("location: "+$scope.messageLocations);
- $.each($scope.messageLocations, function(i, a){
- //var result = [];
- angular.forEach($scope.messagesList, function(value, key) {
- if (key+'' === a.value+'') {
- //var objsJSON = JSON.parse(value);
-
- $.each(value, function(i, a){
- var startDateLong = a.startDate;
- var tempStartDate = new Date(startDateLong);
- tempStartDate = moment(tempStartDate).format('DD MMM YYYY hh:mmA zz');//03 Jun 2013 04:15PM EDT
- a.displayStartDate=tempStartDate.toString();
-
- var endDateLong = a.endDate;
- var tempEndDate = new Date(endDateLong);
- tempEndDate = moment(tempEndDate).format('DD MMM YYYY hh:mmA zz');//03 Jun 2013 04:15PM EDT
- a.displayEndDate=tempEndDate.toString();
- });
- a.messages = value;
- }
- });
- console.log(a.messages);
- });
-
- //$scope.resetMenu();
-
- },function(error){
- console.log("failed");
- reloadPageOnce();
- });
-
-
- $scope.editMessage = function(location) {
-
- editMessage(location.value, location.label);
- };
-
- $scope.toggleActive = function(broadcastMessage) {
-
- //alert('deleted'+role.name);
- var uuu = "broadcast_list/toggleActive";
- var postData={broadcastMessage:broadcastMessage};
- $.ajax({
- type : 'POST',
- url : uuu,
- dataType: 'json',
- contentType: 'application/json',
- data: JSON.stringify(postData),
- success : function(data){
- //window.location.reload();
- },
- error : function(data){
- console.log(data);
- modalService.showFailure("Fail","Error while toggling: "+ data.responseText);
-
- }
- });
-
-
- };
-
- $scope.remove = function(broadcastMessage) {
-
- //alert('deleted'+role.name);
- var uuu = "broadcast_list/remove";
- var postData={broadcastMessage:broadcastMessage};
- $.ajax({
- type : 'POST',
- url : uuu,
- dataType: 'json',
- contentType: 'application/json',
- data: JSON.stringify(postData),
- success : function(data){
- window.location.reload();
- },
- error : function(data){
- console.log(data);
- modalService.showFailure("Fail","Error while deleting: "+ data.responseText);
- }
- });
-
-
- };
-
-});
-
-function editMessage(messageLocationId, messageLocation, messageId) {
- window.location=encodeURIComponent('admin#/broadcast/'+messageLocationId + '/' + messageLocation + ((messageId != null) ? '/' + messageId : ''));
-}
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/collaborate-list-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/collaborate-list-controller.js
deleted file mode 100644
index a1831b7e..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/collaborate-list-controller.js
+++ /dev/null
@@ -1,44 +0,0 @@
-app.controller("collaborateListController", function ($scope,$http,modalService, $modal,AdminService) {
- // Table Data
- AdminService.getCollaborateList().then(function(data){
-
- var j = data;
- $scope.tableData = JSON.parse(j.data);
- //$scope.resetMenu();
-
- },function(error){
- console.log("failed");
- reloadPageOnce();
- });
-
- $scope.viewPerPage = 20;
- $scope.scrollViewsPerPage = 2;
- $scope.currentPage = 1;
- $scope.totalPage;
- $scope.searchCategory = "";
- $scope.searchString = "";
- /* modalService.showSuccess('','Modal Sample') ; */
- for(x in $scope.tableData){
- if($scope.tableData[x].active_yn=='Y')
- $scope.tableData[x].active_yn=true;
- else
- $scope.tableData[x].active_yn=false;
- }
- $scope.openCollaboration = function(chatId){
- openInNewTab('openCollaboration?chat_id=' + chatId);
- }
-
- $scope.toggleProfileActive = function(profileId) {
- modalService.popupConfirmWin("Confirm","You are about to change user's active status. Do you want to continue?",
- function(){
- $http.get("profile/toggleProfileActive?profile_id="+profileId).success(function(){});
-
- })
- };
-
-});
-
-function openInNewTab(url) {
- var win = window.open(url, '_blank');
- win.focus();
-}; \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/dummy.txt
deleted file mode 100644
index e69de29b..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/dummy.txt
+++ /dev/null
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/modelpopupController.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/modelpopupController.js
deleted file mode 100644
index 48fbbc03..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/modelpopupController.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var modalpopupController = function ($scope, $modalInstance, message){
-
- $scope.message = message;
-
-
- $scope.hello = function () {
- $modalInstance.close($scope.digitPattern);
- };
- $modalInstance.ok = function() {
- //add the ok functionality
- alert("Logout");
- };
- $modalInstance.cancel = function() {
- //add the cancel functionality
- alert("Keep Log in");
- };
- $modalInstance.cancelbutton = function() {
- //add the cancel functionality
- alert("Modal Waring popup close event");
- };
-} \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/dummy.txt
deleted file mode 100644
index e69de29b..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/dummy.txt
+++ /dev/null
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/footer.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/footer.js
deleted file mode 100644
index d49f5980..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/footer.js
+++ /dev/null
@@ -1,11 +0,0 @@
-app.directive('qFooter', function () {
- return {
- restrict: 'A', //This menas that it will be used as an attribute and NOT as an element. I don't like creating custom HTML elements
- replace: false,
- templateUrl: "app/fusion/scripts/view-models/footer.html",
- controller: ['$scope', '$filter', function ($scope, $filter) {
- // Your behaviour goes here :)
- }]
- }
-});
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/header.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/header.js
deleted file mode 100644
index 32024aaf..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/header.js
+++ /dev/null
@@ -1,477 +0,0 @@
-app.directive('qHeader', function () {
- return {
- restrict: 'A', //This menas that it will be used as an attribute and NOT as an element. I don't like creating custom HTML elements
- replace: false,
- templateUrl: "app/fusion/scripts/view-models/header.html",
- controller: ['$scope', '$filter','$http','$timeout', '$log','UserInfoService', '$window', '$cookies', function ($scope, $filter, $http, $timeout, $log,UserInfoService, $window, $cookies) {
-
- /*Define fields*/
- $scope.userName;
- $scope.userFirstName;
- $scope.redirectUrl;
- $scope.contactUsUrl;
- $scope.getAccessUrl;
- $scope.childData=[];
- $scope.parentData=[];
- $scope.menuItems = [];
- $scope.loadMenufail=false;
- $scope.megaMenuDataObject=[];
- $scope.activeClickSubMenu = {
- x: ''
- };
- $scope.activeClickMenu = {
- x: ''
- };
- $scope.favoritesMenuItems = [];
- $scope.favoriteItemsCount = 0;
- $scope.showFavorites = false;
- $scope.emptyFavorites = false;
- $scope.favoritesWindow = false;
-
- /*Menu Structure*/
- var menuStructureConvert = function(menuItems) {
- // console.log(menuItems);
- $scope.megaMenuDataObjectTemp =
- [
- {
- text: "ECOMP",
- children: menuItems
- },
- {
- text: "Help",
- children: [
- {
- text:"Contact Us",
- url:$scope.contactUsUrl
- },
- {
- text:"Get Access",
- url:$scope.getAccessUrl
- }]
- }
- ];
- return $scope.megaMenuDataObjectTemp;
- };
-
- /***************functions**************/
- /*Put user info into fields*/
- $scope.inputUserInfo = function(userInfo){
- if (typeof(userInfo) != "undefined" && userInfo!=null && userInfo!=''){
- if(typeof(userInfo.USER_FIRST_NAME) != "undefined" && userInfo.USER_FIRST_NAME!=null){
- $scope.userFirstName = userInfo.USER_FIRST_NAME;
- }
- }
- }
- /*getting user info from session*/
- $scope.getUserNameFromSession = function(){
- UserInfoService.getFunctionalMenuStaticDetailSession()
- .then(function (res) {
- $scope.contactUsUrl=res.contactUsLink;
- $scope.userName = res.userName;
- $scope.userFirstName = res.firstName;
- $scope.redirectUrl = res.portalUrl;
- $scope.getAccessUrl = res.getAccessUrl;
- });
- }
- $scope.getTopMenuStaticInfo=function() {
- var promise = UserInfoService.getFunctionalMenuStaticDetailSession();
- promise.then(
- function(res) {
- $scope.contactUsUrl=res.contactUsLink;
- $scope.userName = res.userName;
- $scope.userId = res.userid;
- $scope.userEmail = res.email;
- $scope.userFirstName = res.firstName;
- $scope.redirectUrl = res.portalUrl;
- $scope.getAccessUrl = res.getAccessUrl;
- $scope.isAppCentralized = res.isAppCentralized;
- },
- function(err) {
- $log.error('getFunctionalMenuStaticDetailShareContext failed', err);
- }
- );
- }
-
- $scope.returnToPortal=function(){
- window.location.href = $scope.redirectUrl;
- }
-
- var unflatten = function( array, parent, tree ){
- tree = typeof tree !== 'undefined' ? tree : [];
- parent = typeof parent !== 'undefined' ? parent : { menuId: null };
- var children = _.filter( array, function(child){ return child.parentMenuId == parent.menuId; });
- if( !_.isEmpty( children ) ){
- if( parent.menuId === null ){
- tree = children;
- }else{
- parent['children'] = children
- }
- _.each( children, function( child ){ unflatten( array, child ) } );
- }
- return tree;
- }
-
- $scope.getMenu=function() {
- $scope.getUserNameFromSession();
- $http({
- method: "GET",
- url: 'get_functional_menu',
-// TIMEOUT USED FOR LOCAL TESTING ONLY
-// timeout: 100
- }).success(function (response) {
-
- if (response == '101: Timeout') {
- $log.debug('Timeout attempting to get_functional_menu');
- $scope.megaMenuDataObject = menuStructureConvert("");
-// $scope.createErrorMenu();
- //$scope.loadMenufail=true;
- } else {
- if(typeof response != 'undefined' && response.length!=0 && typeof response[0] != 'undefined' && typeof response[0].error!="undefined"){
- $log.debug('Timeout attempting to get_functional_menu');
- $scope.menuItems = unflatten( response);
- $scope.megaMenuDataObject = menuStructureConvert($scope.menuItems);
-// $scope.createErrorMenu();
- //$scope.loadMenufail=true;
- }else{
- $scope.loadMenufail=false;
- $scope.contactUsURL = response.contactUsLink;
- $log.debug('functional_menu',response);
- $scope.megaMenuDataObject = menuStructureConvert("");
- }
- }
- }).error(function (response){
- $scope.megaMenuDataObject = menuStructureConvert("");
-// $scope.createErrorMenu();
- //$scope.loadMenufail=true;
- $log.debug('REST API failed get_functional_menu...');
- });
-
- }
-
- $scope.adjustHeader=function() {
- $scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header);
-
- if($scope.showHeader == true) {
- $scope.drawer_margin_top = 70;
- $scope.drawer_custom_top = 54;
- $scope.toggle_drawer_top = 55;
- }
- else {
-
- $scope.drawer_margin_top = 60;
- $scope.drawer_custom_top = 0;
- $scope.toggle_drawer_top = 10;
- }
-
- }
-
- $scope.getMenu();
- $scope.adjustHeader();
-
-/* **************************************************************************/
-/* Logic for the favorite menus is here */
-
- $scope.loadFavorites = function () {
- $log.debug('loadFavorites has happened.');
- if ($scope.favoritesMenuItems == '') {
- $scope.generateFavoriteItems();
- $log.debug('loadFavorites is calling generateFavoriteItems()');
- } else {
- $log.debug('loadFavorites is NOT calling generateFavoriteItems()');
- }
- }
-
- $scope.goToUrl = function (item) {
- $log.debug("goToUrl called", item);
-
- var url = item.url;
- var restrictedApp = item.restrictedApp;
- // $log.debug('Restricted app status is: ' + restrictedApp);
- if (!url) {
- $log.error('No url found for this application, doing nothing..');
- return;
- }
- if (restrictedApp) {
- $window.open(url, '_blank');
- } else {
- $window.open(url, '_self');
- }
-
- }
-
- $scope.submenuLevelAction = function(index, column) {
- if ($scope.favoritesMenuItems == '') {
- $scope.generateFavoriteItems();
- $log.debug('submenuLevelAction is calling generateFavoriteItems()');
- }
- $log.debug('item hovered/clicked: ' + index + '; column = ' + column);
- if (column == 2) { // 2 is Design
- $scope.favoritesWindow = false;
- $scope.showFavorites = false;
- $scope.emptyFavorites = false;
- }
- if (index=='Favorites' && $scope.favoriteItemsCount != 0) {
- $log.debug('Showing Favorites window');
- $scope.favoritesWindow = true;
- $scope.showFavorites = true;
- $scope.emptyFavorites = false;
- }
- if (index=='Favorites' && $scope.favoriteItemsCount == 0) {
- $log.debug('Hiding Favorites window in favor of No Favorites Window');
- $scope.favoritesWindow = true;
- $scope.showFavorites = false;
- $scope.emptyFavorites = true;
- }
- if (column > 2) {
- $scope.favoritesWindow = false;
- $scope.showFavorites = false;
- $scope.emptyFavorites = false;
- }
- };
-
- $scope.hideFavoritesWindow = function() {
- $log.debug('$scope.hideFavoritesWindow has been called');
- $scope.showFavorites = false;
- $scope.emptyFavorites = false;
- }
-
- $scope.isUrlFavorite = function (menuId) {
-// $log.debug('array objects in menu favorites = ' + $scope.favoriteItemsCount + '; menuId=' + menuId);
- var jsonMenu = JSON.stringify($scope.favoritesMenuItems);
- var isMenuFavorite = jsonMenu.indexOf('menuId\":' + menuId);
- if (isMenuFavorite==-1) {
- return false;
- } else {
- return true;
- }
-
- }
-
- $scope.generateFavoriteItems = function() {
- $http({
- method: "GET",
- url: 'get_favorites',
-// TIMEOUT USED FOR LOCAL TESTING ONLY
-// timeout: 100
- }).success(function (response) {
- if (response == '101: Timeout') {
- $log.error('Timeout attempting to get_favorites_menu');
- } else {
- if(typeof response != 'undefined' && response.length!=0 && typeof response[0] != 'undefined' && typeof response[0].error!="undefined"){
- $log.error('REST API failed get_favorites' + response);
- }else{
- $log.debug('get_favorites = ' + JSON.stringify(response));
- $scope.favoritesMenuItems = response;
- $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length;
- // $log.info('number of favorite menus: ' + $scope.favoriteItemsCount);
- }
- }
- }).error(function (response){
- $log.error('REST API failed get_favorites' + response);
-//createFavoriteErrorMenu() USED FOR LOCAL TESTING ONLY
-// $scope.createFavoriteErrorMenu();
- });
- }
-
- $scope.createFavoriteErrorMenu=function() {
- $scope.favoritesMenuItems = [];
- $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length;
- // $log.info('number of favorite menus: ' + $scope.favoriteItemsCount);
- }
-
- /* end of Favorite Menu code */
- /* **************************************************************************/
-
-
- /* **************************************************************************/
- // THIS IS USED FOR LOCAL TESTING ONLY
- /* **************************************************************************/
- $scope.createErrorMenu=function() {
- $log.debug('Creating fake menu now...');
-// $scope.loadMenufail=true;
- $scope.menuItems = [
- {
- "menuId": 1,
- "column": 2,
- "text": "Design",
- "parentMenuId": null,
- "url": ""
- },
- {
- "menuId": 2,
- "column": 3,
- "text": "Infrastructure Ordering",
- "parentMenuId": null,
- "url": ""
- },
- {
- "menuId": 3,
- "column": 4,
- "text": "Service Creation",
- "parentMenuId": null,
- "url": ""
- },
- {
- "menuId": 4,
- "column": 5,
- "text": "Service Mgmt",
- "parentMenuId": null,
- "url": ""
- },
- {
- "menuId": 90,
- "column": 1,
- "text": "Google",
- "parentMenuId": 1,
- "url": "http://google.com"
- },
- {
- "menuId": 91,
- "column": 1,
- "text": "Mike Little's Coffee Cup",
- "parentMenuId": 2,
- "url": "http://coffee.com"
- },
- {
- "menuId": 92,
- "column": 2,
- "text": "Andy and his Astrophotgraphy",
- "parentMenuId": 3,
- "url": "http://nightskypix.com"
- },
- {
- "menuId": 93,
- "column": 1,
- "text": "JSONLint",
- "parentMenuId": 4,
- "url": "http://http://jsonlint.com"
- },
- {
- "menuId": 94,
- "column": 2,
- "text": "ONAP test link",
- "parentMenuId": 4,
- "url": "http://tbd.onap.org/testlink"
- },
- {
- "menuId": 95,
- "column": 2,
- "text": "4th Level App4a R16",
- "parentMenuId": 4,
- "url": "http://app4ar16.onap.org/testlink"
- },
- {
- "menuId": 96,
- "column": 3,
- "text": "3rd Level App1c R200",
- "parentMenuId": 4,
- "url": "http://app1c.com"
- },
- {
- "menuId": 97,
- "column": 1,
- "text": "3rd Level App4b R16",
- "parentMenuId": 5,
- "url": "http://app4b.com"
- },
- {
- "menuId": 98,
- "column": 2,
- "text": "3rd Level App2b R16",
- "parentMenuId": 5,
- "url": "http://app2b.com"
- },
- {
- "menuId": 99,
- "column": 1,
- "text": "Favorites",
- "parentMenuId": null,
- "url": ""
- }
- ];
- $scope.menuItems = unflatten( $scope.menuItems );
- //remove this
- $scope.megaMenuDataObject = menuStructureConvert($scope.menuItems);
- }
- }]
- }
-});
-
-app.filter("ellipsis", function(){
- return function(text, length){
- if (text) {
- var ellipsis = text.length > length ? "..." : "";
- return text.slice(0, length) + ellipsis;
- };
- return text;
- }
-});
-
-function reloadPageOnce() {
- if( window.localStorage )
- {
- if( !localStorage.getItem('firstLoad') )
- {
- localStorage['firstLoad'] = true;
- window.location.reload();
- }
- else
- localStorage.removeItem('firstLoad');
- }
-}
-app.controller('loginSnippetCtrl', function ($scope,$http, $log,UserInfoService){
- /*Define fields*/
- $scope.userProfile={
- firstName:'',
- lastName:'',
- fullName:'',
- email:'',
- }
- /*Put user info into fields*/
- $scope.inputUserInfo = function(userInfo){
- if (typeof(userInfo) != "undefined" && userInfo!=null && userInfo!=''){
- if (typeof(userInfo.USER_FIRST_NAME) != "undefined" && userInfo.USER_FIRST_NAME!=null && userInfo.USER_FIRST_NAME!='')
- $scope.userProfile.firstName = userInfo.USER_FIRST_NAME;
- if (typeof(userInfo.USER_LAST_NAME) != "undefined" && userInfo.USER_LAST_NAME!=null && userInfo.USER_LAST_NAME!='')
- $scope.userProfile.lastName = userInfo.USER_LAST_NAME;
- if (typeof(userInfo.USER_EMAIL) != "undefined" && userInfo.USER_EMAIL!=null && userInfo.USER_EMAIL!='')
- $scope.userProfile.email = userInfo.USER_EMAIL;
-
- }
- }
- /*getting user info from session*/
- $scope.getUserNameFromSession = function(){
- UserInfoService.getFunctionalMenuStaticDetailSession()
- .then(function (response) {
- $scope.userProfile.fullName = response.userName;
- $scope.userProfile.email = response.email;
- });
- }
- /*getting user info from shared context*/
- $scope.getUserName=function() {
- var promise = UserInfoService.getFunctionalMenuStaticDetailShareContext();
- promise.then(
- function(res) {
- if(res==null || res==''){
- $log.error('getFunctionalMenuStaticDetailShareContext failed');
- $scope.getUserNameFromSession();
- }else{
- // $log.info('Received User information from shared context',res);
- var resData = res;
- // console.log(resData);
- $scope.inputUserInfo(resData);
- $scope.userProfile.fullName = $scope.userProfile.firstName+ ' '+ $scope.userProfile.lastName;
- }
- },
- function(err) {
- console.log('getFunctionalMenuStaticDetailShareContext failed', err);
- }
- );
- };
- /*call the get user info function*/
- try{
- $scope.getUserName();
- }catch(err){
- $log.info('getUserName failed', err);
- }
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/leftMenu.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/leftMenu.js
deleted file mode 100644
index f42276fe..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/leftMenu.js
+++ /dev/null
@@ -1,184 +0,0 @@
-
-app.directive('qMenu', function () {
- return {
- restrict: 'A', //This menas that it will be used as an attribute and NOT as an element. I don't like creating custom HTML elements
- replace: false,
- templateUrl: "app/fusion/scripts/view-models/left_menu.html",
- controller: ['$scope', '$filter','$http','$timeout','$cookies','LeftMenuService', function ($scope, $filter, $http,$timeout,$cookies,LeftMenuService) {
-
- $scope.leftChildData=[];
- $scope.leftParentData=[];
- $scope.leftMenuItems = [];
- $scope.app_name = "";
- $scope.app_name_full;
- LeftMenuService.getLeftMenu().then(function(response){
- var j = response;
- try{
- if(j && j !== "null" && j!== "undefined"){
- $scope.leftParentData = JSON.parse(j.data);
- $scope.leftChildData = JSON.parse(j.data2);
- }else{
- throw "Get Left Menu response is not an object/is empty";
- }
- try{
- var leftChildItemList = $scope.leftChildData;
- var pageUrl = window.location.href.split('/')[window.location.href.split('/').length-1];
- var leftParentList =$scope.leftParentData;
- for (var i = 0; i < leftParentList.length; i++) {
- $scope.item = {
- parentLabel : leftParentList[i].label,
- parentAction : leftParentList[i].action,
- parentImageSrc : leftParentList[i].imageSrc,
- open:pageUrl==leftParentList[i].action?true:false,
- childItemList : leftChildItemList[i]
- }
- $scope.leftMenuItems.push($scope.item);
- };
- }catch(err){
- console.log("failed to set left menu structure", err);
- }
- }catch (e) {
- console.log("failed to get left menu items", e);
- reloadPageOnce();
- return;
- }
- },function(error){
- console.log("error happened while calling getLeftMenu", error);
- });
-
- LeftMenuService.getAppName().then(function(response){
- var j = response;
- try{
- if(j && j !== "null" && j!== "undefined"){
- // console.log("app name is " + $scope.app_name);
- $scope.app_name_full = j.data;
- var processed_app_name = j.data;
- var n = processed_app_name.length;
- if (n > 15) {
- n = 15;
- }
- $scope.app_name = processed_app_name.substr(0, n);
- }else{
- throw "Get app_name respsone is not an object/is empty";
- }
- }catch (e) {
- console.log("failed to get app name", e);
- return;
- }
- },function(error){
- console.log("failed in getAppName", error);
- });
-
- $scope.adjustHeader=function() {
- $scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header);
-
- if($scope.showHeader == true) {
- $scope.drawer_margin_top = 50;
- $scope.drawer_custom_top = 54;
- $scope.toggle_drawer_top = 55;
- }
- else {
-
- $scope.drawer_margin_top = 40;
- $scope.drawer_custom_top = 0;
- $scope.toggle_drawer_top = 10;
- }
-
-
- };
-
- $scope.adjustHLeftMenu = function (type){
- $scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header);
-
- if($scope.showHeader == true) {
- $scope.drawer_margin_top = 60;
- $scope.drawer_custom_top = 54;
- $scope.toggle_drawer_top = 55;
- }
- else {
-
- $scope.drawer_margin_top = 50;
- $scope.drawer_custom_top = 0;
- $scope.toggle_drawer_top = 10;
- }
- if(type=='burgerIcon'){
- return { "top": $scope.toggle_drawer_top+"px"};
- }else if(type=='leftMenu'){
- return { "margin-top": $scope.drawer_margin_top+"px"};
- }else
- return;
- }
- $scope.adjustHeader();
- $scope.drawerOpen = true;
-
- $scope.toggleDrawer = function() {
- $scope.drawerOpen = !($scope.drawerOpen);
- if ($scope.drawerOpen) {
- // setCookie('drawerOpen','open',30);
- $scope.arrowShow = true;
-
-
- if (document.getElementById('fnMenueContent')!=null)
- document.getElementById('fnMenueContent').style.marginLeft = "0px";
-
- if (document.getElementById('rightContentAdmin')!=null)
- document.getElementById('rightContentAdmin').style.marginLeft = "210px";
-
- else if (document.getElementById('rightContentProfile')!=null)
- document.getElementById('rightContentProfile').style.marginLeft = "210px";
-
-
-
- } else {
-
- $scope.arrowShow = false;
-
- if (document.getElementById('fnMenueContent')!=null)
- document.getElementById('fnMenueContent').style.marginLeft = "-150px";
-
- if (document.getElementById('rightContentAdmin')!=null) {
- document.getElementById('rightContentAdmin').style.marginLeft = "50px";
-
- }
-
- else if (document.getElementById('rightContentProfile')!=null)
- document.getElementById('rightContentProfile').style.marginLeft = "50px";
-
-
-
-
- }
- };
-
- $timeout(function() {
- detectScrollEvent();
- }, 800);
- }]
- }
-
-});
-$(window).scroll(function() {
- if ($('.att-drawer').is(':visible')) {
- detectScrollEvent();
- }
-
-});
-
-function detectScrollEvent() {
- try{
- var footerOff = $('#footerContainer').offset().top;
- var headOff = $('#headerContainer').offset().top;
- var winHeight = $(window).height();
- if ((footerOff - headOff) <= winHeight) {
- $('.att-drawer').css({
- "height" : footerOff - headOff - 55
- });
- } else {
- $('.att-drawer').css({
- "height" : "94vh"
- });
- }
- }catch(err){
- console.log('detectScrollEvent failed', err)
- }
-}
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/jquery.resize.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/jquery.resize.js
deleted file mode 100644
index 1ebd6c95..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/jquery.resize.js
+++ /dev/null
@@ -1,139 +0,0 @@
-/*!
- * jquery.resize.js 0.0.1 - https://github.com/yckart/jquery.resize.js
- * Resize-event for DOM-Nodes
- *
- * @see http://workingdraft.de/113/
- * @see http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/
- *
- * Copyright (c) 2013 Yannick Albert (http://yckart.com)
- * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php).
- * 2013/04/01
- */
-
-(function(factory) {
- if(typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module.
- define(['jquery'], factory);
- } else if(typeof exports === 'object') {
- // Node/CommonJS style for Browserify
- module.exports = factory;
- } else {
- // Browser globals
- factory(jQuery);
- }
-}(function($) {
-
- function addFlowListener(element, type, fn) {
- var flow = type == 'over';
- element.addEventListener('OverflowEvent' in window ? 'overflowchanged' : type + 'flow', function(e) {
- if(e.type == (type + 'flow') || ((e.orient == 0 && e.horizontalOverflow == flow) || (e.orient == 1 && e.verticalOverflow == flow) || (e.orient == 2 && e.horizontalOverflow == flow && e.verticalOverflow == flow))) {
- e.flow = type;
- return fn.call(this, e);
- }
- }, false);
- };
-
- function fireEvent(element, type, data, options) {
- var options = options || {},
- event = document.createEvent('Event');
- event.initEvent(type, 'bubbles' in options ? options.bubbles : true, 'cancelable' in options ? options.cancelable : true);
- for(var z in data) event[z] = data[z];
- element.dispatchEvent(event);
- };
-
- $.event.special.resize = {
- setup: function() {
- var element = this;
- var resize = 'onresize' in element;
- if(!resize && !element._resizeSensor) {
- var sensor = element._resizeSensor = document.createElement('div');
- sensor.className = 'resize-sensor';
- sensor.innerHTML = '<div class="resize-overflow"><div></div></div><div class="resize-underflow"><div></div></div>';
-
- var x = 0,
- y = 0,
- first = sensor.firstElementChild.firstChild,
- last = sensor.lastElementChild.firstChild,
- matchFlow = function(event) {
- var change = false,
- width = element.offsetWidth;
- if(x != width) {
- first.style.width = width - 1 + 'px';
- last.style.width = width + 1 + 'px';
- change = true;
- x = width;
- }
- var height = element.offsetHeight;
- if(y != height) {
- first.style.height = height - 1 + 'px';
- last.style.height = height + 1 + 'px';
- change = true;
- y = height;
- }
- if(change && event.currentTarget != element) fireEvent(element, 'resize');
- };
-
- if(getComputedStyle(element).position == 'static') {
- element.style.position = 'relative';
- element._resizeSensor._resetPosition = true;
- }
- addFlowListener(sensor, 'over', matchFlow);
- addFlowListener(sensor, 'under', matchFlow);
- addFlowListener(sensor.firstElementChild, 'over', matchFlow);
- addFlowListener(sensor.lastElementChild, 'under', matchFlow);
- element.appendChild(sensor);
- matchFlow({});
- }
- var events = element._flowEvents || (element._flowEvents = []);
- if(events.indexOf(handler) == -1) events.push(handler);
- if(!resize) element.addEventListener('resize', handler, false);
- element.onresize = function(e) {
- events.forEach(function(fn) {
- fn.call(element, e);
- });
- };
- },
-
- teardown: function() {
- var element = this;
- var index = element._flowEvents.indexOf(handler);
- if(index > -1) element._flowEvents.splice(index, 1);
- if(!element._flowEvents.length) {
- var sensor = element._resizeSensor;
- if(sensor) {
- element.removeChild(sensor);
- if(sensor._resetPosition) element.style.position = 'static';
- delete element._resizeSensor;
- }
- if('onresize' in element) element.onresize = null;
- delete element._flowEvents;
- }
- element.removeEventListener('resize', handler);
- }
- };
-
- $.fn.extend({
- resize: function(fn) {
- return fn ? this.bind("resize", fn) : this.trigger("resize");
- },
-
- unresize: function(fn) {
- return this.unbind("resize", fn);
- }
- });
-
-
- function handler(event) {
- var orgEvent = event || window.event,
- args = [].slice.call(arguments, 1);
-
- event = $.event.fix(orgEvent);
- event.type = "resize";
-
- // Add event to the front of the arguments
- args.unshift(event);
-
- return($.event.dispatch || $.event.handle).apply(this, args);
- }
-
-})); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/debug.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/debug.js
deleted file mode 100644
index eff36a25..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/debug.js
+++ /dev/null
@@ -1,329 +0,0 @@
-/**
- * debugData
- *
- * Pass me a data structure {} and I'll output all the key/value pairs - recursively
- *
- * @example var HTML = debugData( oElem.style, "Element.style", { keys: "top,left,width,height", recurse: true, sort: true, display: true, returnHTML: true });
- *
- * @param Object o_Data A JSON-style data structure
- * @param String s_Title Title for dialog (optional)
- * @param Hash options Pass additional options in a hash
- */
-function debugData (o_Data, s_Title, options) {
- options = options || {};
- var
- str=(s_Title||s_Title==='' ? s_Title : 'DATA')
- , dType=$.type(o_Data)
- // maintain backward compatibility with OLD 'recurseData' param
- , recurse=($.type(options)==='boolean' ? options : options.recurse !==false)
- , keys=(options.keys?','+options.keys+',':false)
- , display=options.display !==false
- , html=options.returnHTML !==false
- , sort=!!options.sort
- , prefix=options.indent ? ' ' : ''
- , D=[], i=0 // Array to hold data, i=counter
- , hasSubKeys = false
- , k, t, skip, x, type // loop vars
- ;
- if (dType!=='object' && dType!=='array') {
- if (options.display) alert( (s_Title || 'debugData') +': '+ o_Data );
- return o_Data;
- }
- if (dType==='object' && $.isPlainObject(o_Data))
- dType='hash';
-
- if (o_Data.jquery) {
- str=s_Title+'jQuery Collection ('+ o_Data.length +')\n context="'+ o_Data.context +'"';
- }
- else if (o_Data.nodeName) {
- str=s_Title+o_Data.tagName;
- var id = o_Data.id, cls=o_Data.className, src=o_Data.src, hrf=o_Data.href;
- if (id) str+='\n id="'+ id+'"';
- if (cls) str+='\n class="'+ cls+'"';
- if (src) str+='\n src="'+ src+'"';
- if (hrf) str+='\n href="'+ hrf+'"';
- }
- else {
- parse(o_Data,prefix,dType); // recursive parsing
- if (sort && !hasSubKeys) D.sort(); // sort by keyName - but NOT if has subKeys!
- if (str) str += '\n***'+ '****************************'.substr(0,str.length) +'\n';
- str += D.join('\n'); // add line-breaks
- }
-
- if (display) alert(str); // display data
- if (html) str=str.replace(/\n/g, ' <br>').replace(/ /g, ' &nbsp;'); // format as HTML
- return str;
-
- function parse ( data, prefix, parentType ) {
- var first = true;
- try {
- $.each( data, function (key, val) {
- skip = (keys && keys.indexOf(','+key+',') === -1);
- type = $.type(val);
- if (type==='object' && $.isPlainObject(val))
- type = 'hash';
- k = prefix + (first ? ' ' : ', ');
- first = false;
-
- if (parentType!=='array') // no key-names for array items
- k += key+': '; // NOT an array
-
- if (type==="date" || type==="regexp") {
- val = val.toString();
- type = "string";
- }
- if (type==="string") { // STRING
- if (!skip) D[i++] = k +'"'+ val +'"';
- }
- // NULL, UNDEFINED, NUMBER or BOOLEAN
- else if (/^(null|undefined|number|boolean)/.test(type)) {
- if (!skip) D[i++] = k + val;
- }
- else if (type==="function") { // FUNCTION
- if (!skip) D[i++] = k +'function()';
- }
- else if (type==="array") { // ARRAY
- if (!skip) {
- D[i++] = k +'[';
- parse( val, prefix+' ',type); // RECURSE
- D[i++] = prefix +' ]';
- }
- }
- else if (val.jquery) { // JQUERY OBJECT
- if (!skip) D[i++] = k +'jQuery ('+ val.length +') context="'+ val.context +'"';
- }
- else if (val.nodeName) { // DOM ELEMENT
- var id = val.id, cls=val.className, src=val.src, hrf=val.href;
- if (skip) D[i++] = k +' '+
- id ? 'id="'+ id+'"' :
- src ? 'src="'+ src+'"' :
- hrf ? 'href="'+ hrf+'"' :
- cls ? 'class="'+cls+'"' :
- '';
- }
- else if (type==="hash") { // JSON
- if (!recurse || $.isEmptyObject(val)) { // show an empty hash
- if (!skip) D[i++] = k +'{ }';
- }
- else { // recurse into JSON hash - indent output
- D[i++] = k +'{';
- parse( val, prefix+' ',type); // RECURSE
- D[i++] = prefix +' }';
- }
- }
- else { // OBJECT
- if (!skip) D[i++] = k +'OBJECT'; // NOT a hash
- }
- });
- } catch (e) {}
- }
-};
-
-function debugStackTrace (s_Title, options) {
- var
- callstack = []
- , isCallstackPopulated = false
- ;
- try {
- i.dont.exist += 0; // doesn't exist- that's the point
- } catch(e) {
- if (e.stack) { // Firefox
- var lines = e.stack.split('\n');
- for (var i=0, len=lines.length; i<len; i++) {
- if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
- callstack.push(lines[i]);
- }
- }
- //Remove call to printStackTrace()
- callstack.shift();
- isCallstackPopulated = true;
- }
- else if (window.opera && e.message) { // Opera
- var lines = e.message.split('\n');
- for (var i=0, len=lines.length; i<len; i++) {
- if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
- var entry = lines[i];
- //Append next line also since it has the file info
- if (lines[i+1]) {
- entry += ' at ' + lines[i+1];
- i++;
- }
- callstack.push(entry);
- }
- }
- //Remove call to printStackTrace()
- callstack.shift();
- isCallstackPopulated = true;
- }
- }
-
- if (!isCallstackPopulated) { // IE and Safari
- var currentFunction = arguments.callee.caller;
- while (currentFunction) {
- var fn = currentFunction.toString();
- var fname = fn.substring(fn.indexOf('function') + 8, fn.indexOf('')) || 'anonymous';
- callstack.push(fname);
- currentFunction = currentFunction.caller;
- }
- }
-
- debugData( callstack, s_Title, options );
-};
-
-if (!window.console) window.console = { log: debugData };
-
-if (!window.console.trace)
- window.console.trace = function (s_Title) {
- window.console.log( debugStackTrace(s_Title, { display: false, returnHTML: false, sort: false }) );
- };
-
-// add method to output 'hash data' inside an string
-window.console.data = function (data, title) {
- var w = { array: ['[',']'], object: ['{','}'], string: ['"','"'], number: ['',''], function: ['','()'] }
- , x = $.type( data )
- , obj = x.match(/(object|array)/)
- , delim = !obj ? ['',''] : x === 'object' ? ['{\n','\n}'] : ['[\n','\n]']
- , opts = { display: false, returnHTML: false, sort: false }
- , debug = debugData( data, '', opts)
- ;
- console.log(
- (title ? title +' = ' : '')
- + delim[0]
- + ($.type(debug) === 'string' ? debug.replace(/ /g, '\t') : debug)
- + delim[1]
- );
-};
-
-
-/**
- * timer
- *
- * Utility for debug timing of events
- * Can track multiple timers and returns either a total time or interval from last event
- * @param String timerName Name of the timer - defaults to debugTimer
- * @param String action Keyword for action or return-value...
- * action: 'reset' = reset; 'clear' = delete; 'total' = ms since init; 'step' or '' = ms since last event
- */
-/**
- * timer
- *
- * Utility method for timing performance
- * Can track multiple timers and returns either a total time or interval from last event
- *
- * returns time-data: {
- * start: Date Object
- * , last: Date Object
- * , step: 99 // time since 'last'
- * , total: 99 // time since 'start'
- * }
- *
- * USAGE SAMPLES
- * =============
- * timer('name'); // create/init timer
- * timer('name', 'reset'); // re-init timer
- * timer('name', 'clear'); // clear/remove timer
- * var i = timer('name'); // how long since last timer request?
- * var i = timer('name', 'total'); // how long since timer started?
- *
- * @param String timerName Name of the timer - defaults to debugTimer
- * @param String action Keyword for action or return-value...
- * @param Hash options Options to customize return data
- * action: 'reset' = reset; 'clear' = delete; 'total' = ms since init; 'step' or '' = ms since last event
- */
-function timer (timerName, action, options) {
- var
- name = timerName || 'debugTimer'
- , Timer = window[ name ]
- , defaults = {
- returnString: true
- , padNumbers: true
- , timePrefix: ''
- , timeSuffix: ''
- }
- ;
-
- // init the timer first time called
- if (!Timer || action == 'reset') { // init timer
- Timer = window[ name ] = {
- start: new Date()
- , last: new Date()
- , step: 0 // time since 'last'
- , total: 0 // time since 'start'
- , options: $.extend({}, defaults, options)
- };
- }
- else if (action == 'clear') { // remove timer
- window[ name ] = null;
- return null;
- }
- else { // update existing timer
- Timer.step = (new Date()) - Timer.last; // time since 'last'
- Timer.total = (new Date()) - Timer.start; // time since 'start'
- Timer.last = new Date();
- }
-
- var
- time = (action == 'total') ? Timer.total : Timer.step
- , o = Timer.options // alias
- ;
-
- if (o.returnString) {
- time += ""; // convert integer to string
- // pad time to 4 chars with underscores
- if (o.padNumbers)
- switch (time.length) {
- case 1: time = "&ensp;&ensp;&ensp;"+ time; break;
- case 2: time = "&ensp;&ensp;"+ time; break;
- case 3: time = "&ensp;"+ time; break;
- }
- // add prefix and suffix
- if (o.timePrefix || o.timeSuffix)
- time = o.timePrefix + time + o.timeSuffix;
- }
-
- return time;
-};
-
-
-/**
- * showOptions
- *
- * Pass a layout-options object, and the pane/key you want to display
- */
-function showOptions (Layout, key, debugOpts) {
- var data = Layout.options;
- $.each(key.split("."), function() {
- data = data[this]; // recurse through multiple key-levels
- });
- debugData( data, 'options.'+key, debugOpts );
-};
-
-/**
- * showState
- *
- * Pass a layout-options object, and the pane/key you want to display
- */
-function showState (Layout, key, debugOpts) {
- var data = Layout.state;
- $.each(key.split("."), function() {
- data = data[this]; // recurse through multiple key-levels
- });
- debugData( data, 'state.'+key, debugOpts );
-};
-
-
-
-
-function debugWindow ( content, options ) {
- var defaults = {
- css: {
- position: 'fixed'
- , top: 0
- }
- };
- $.extend( true, (options || {}), defaults );
- var $W = $('<div></div>')
- .html( content.replace(/\n/g, '<br>').replace(/ /g, ' &nbsp;') ) // format as HTML
- .css( options.css )
- ;
-};
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery-latest.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery-latest.js
deleted file mode 100644
index 5b16efa1..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery-latest.js
+++ /dev/null
@@ -1,10598 +0,0 @@
-/*!
- * jQuery JavaScript Library v3.4.1
- * https://jquery.com/
- *
- * Includes Sizzle.js
- * https://sizzlejs.com/
- *
- * Copyright JS Foundation and other contributors
- * Released under the MIT license
- * https://jquery.org/license
- *
- * Date: 2019-05-01T21:04Z
- */
-( function( global, factory ) {
-
- "use strict";
-
- if ( typeof module === "object" && typeof module.exports === "object" ) {
-
- // For CommonJS and CommonJS-like environments where a proper `window`
- // is present, execute the factory and get jQuery.
- // For environments that do not have a `window` with a `document`
- // (such as Node.js), expose a factory as module.exports.
- // This accentuates the need for the creation of a real `window`.
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info.
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- } else {
- factory( global );
- }
-
-// Pass this if window is not defined yet
-} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
-// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
-// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
-// enough that all such attempts are guarded in a try block.
-"use strict";
-
-var arr = [];
-
-var document = window.document;
-
-var getProto = Object.getPrototypeOf;
-
-var slice = arr.slice;
-
-var concat = arr.concat;
-
-var push = arr.push;
-
-var indexOf = arr.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var fnToString = hasOwn.toString;
-
-var ObjectFunctionString = fnToString.call( Object );
-
-var support = {};
-
-var isFunction = function isFunction( obj ) {
-
- // Support: Chrome <=57, Firefox <=52
- // In some browsers, typeof returns "function" for HTML <object> elements
- // (i.e., `typeof document.createElement( "object" ) === "function"`).
- // We don't want to classify *any* DOM node as a function.
- return typeof obj === "function" && typeof obj.nodeType !== "number";
- };
-
-
-var isWindow = function isWindow( obj ) {
- return obj != null && obj === obj.window;
- };
-
-
-
-
- var preservedScriptAttributes = {
- type: true,
- src: true,
- nonce: true,
- noModule: true
- };
-
- function DOMEval( code, node, doc ) {
- doc = doc || document;
-
- var i, val,
- script = doc.createElement( "script" );
-
- script.text = code;
- if ( node ) {
- for ( i in preservedScriptAttributes ) {
-
- // Support: Firefox 64+, Edge 18+
- // Some browsers don't support the "nonce" property on scripts.
- // On the other hand, just using `getAttribute` is not enough as
- // the `nonce` attribute is reset to an empty string whenever it
- // becomes browsing-context connected.
- // See https://github.com/whatwg/html/issues/2369
- // See https://html.spec.whatwg.org/#nonce-attributes
- // The `node.getAttribute` check was added for the sake of
- // `jQuery.globalEval` so that it can fake a nonce-containing node
- // via an object.
- val = node[ i ] || node.getAttribute && node.getAttribute( i );
- if ( val ) {
- script.setAttribute( i, val );
- }
- }
- }
- doc.head.appendChild( script ).parentNode.removeChild( script );
- }
-
-
-function toType( obj ) {
- if ( obj == null ) {
- return obj + "";
- }
-
- // Support: Android <=2.3 only (functionish RegExp)
- return typeof obj === "object" || typeof obj === "function" ?
- class2type[ toString.call( obj ) ] || "object" :
- typeof obj;
-}
-/* global Symbol */
-// Defining this global in .eslintrc.json would create a danger of using the global
-// unguarded in another place, it seems safer to define global only for this module
-
-
-
-var
- version = "3.4.1",
-
- // Define a local copy of jQuery
- jQuery = function( selector, context ) {
-
- // The jQuery object is actually just the init constructor 'enhanced'
- // Need init if jQuery is called (just allow error to be thrown if not included)
- return new jQuery.fn.init( selector, context );
- },
-
- // Support: Android <=4.0 only
- // Make sure we trim BOM and NBSP
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
-
-jQuery.fn = jQuery.prototype = {
-
- // The current version of jQuery being used
- jquery: version,
-
- constructor: jQuery,
-
- // The default length of a jQuery object is 0
- length: 0,
-
- toArray: function() {
- return slice.call( this );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
-
- // Return all the elements in a clean array
- if ( num == null ) {
- return slice.call( this );
- }
-
- // Return just the one element from the set
- return num < 0 ? this[ num + this.length ] : this[ num ];
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems ) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge( this.constructor(), elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- each: function( callback ) {
- return jQuery.each( this, callback );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map( this, function( elem, i ) {
- return callback.call( elem, i, elem );
- } ) );
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ) );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- eq: function( i ) {
- var len = this.length,
- j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
- },
-
- end: function() {
- return this.prevObject || this.constructor();
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: arr.sort,
- splice: arr.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[ 0 ] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
-
- // Skip the boolean and the target
- target = arguments[ i ] || {};
- i++;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !isFunction( target ) ) {
- target = {};
- }
-
- // Extend jQuery itself if only one argument is passed
- if ( i === length ) {
- target = this;
- i--;
- }
-
- for ( ; i < length; i++ ) {
-
- // Only deal with non-null/undefined values
- if ( ( options = arguments[ i ] ) != null ) {
-
- // Extend the base object
- for ( name in options ) {
- copy = options[ name ];
-
- // Prevent Object.prototype pollution
- // Prevent never-ending loop
- if ( name === "__proto__" || target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
- ( copyIsArray = Array.isArray( copy ) ) ) ) {
- src = target[ name ];
-
- // Ensure proper type for the source value
- if ( copyIsArray && !Array.isArray( src ) ) {
- clone = [];
- } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
- clone = {};
- } else {
- clone = src;
- }
- copyIsArray = false;
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend( {
-
- // Unique for each copy of jQuery on the page
- expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
- // Assume jQuery is ready without the ready module
- isReady: true,
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- noop: function() {},
-
- isPlainObject: function( obj ) {
- var proto, Ctor;
-
- // Detect obvious negatives
- // Use toString instead of jQuery.type to catch host objects
- if ( !obj || toString.call( obj ) !== "[object Object]" ) {
- return false;
- }
-
- proto = getProto( obj );
-
- // Objects with no prototype (e.g., `Object.create( null )`) are plain
- if ( !proto ) {
- return true;
- }
-
- // Objects with prototype are plain iff they were constructed by a global Object function
- Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
- return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
- },
-
- isEmptyObject: function( obj ) {
- var name;
-
- for ( name in obj ) {
- return false;
- }
- return true;
- },
-
- // Evaluates a script in a global context
- globalEval: function( code, options ) {
- DOMEval( code, { nonce: options && options.nonce } );
- },
-
- each: function( obj, callback ) {
- var length, i = 0;
-
- if ( isArrayLike( obj ) ) {
- length = obj.length;
- for ( ; i < length; i++ ) {
- if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
- break;
- }
- }
- }
-
- return obj;
- },
-
- // Support: Android <=4.0 only
- trim: function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
- },
-
- // results is for internal usage only
- makeArray: function( arr, results ) {
- var ret = results || [];
-
- if ( arr != null ) {
- if ( isArrayLike( Object( arr ) ) ) {
- jQuery.merge( ret,
- typeof arr === "string" ?
- [ arr ] : arr
- );
- } else {
- push.call( ret, arr );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, arr, i ) {
- return arr == null ? -1 : indexOf.call( arr, elem, i );
- },
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- merge: function( first, second ) {
- var len = +second.length,
- j = 0,
- i = first.length;
-
- for ( ; j < len; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, invert ) {
- var callbackInverse,
- matches = [],
- i = 0,
- length = elems.length,
- callbackExpect = !invert;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( ; i < length; i++ ) {
- callbackInverse = !callback( elems[ i ], i );
- if ( callbackInverse !== callbackExpect ) {
- matches.push( elems[ i ] );
- }
- }
-
- return matches;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var length, value,
- i = 0,
- ret = [];
-
- // Go through the array, translating each of the items to their new values
- if ( isArrayLike( elems ) ) {
- length = elems.length;
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( i in elems ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
- }
-
- // Flatten any nested arrays
- return concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // jQuery.support is not used in Core but other projects attach their
- // properties to it so it needs to exist.
- support: support
-} );
-
-if ( typeof Symbol === "function" ) {
- jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
-}
-
-// Populate the class2type map
-jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
-function( i, name ) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-} );
-
-function isArrayLike( obj ) {
-
- // Support: real iOS 8.2 only (not reproducible in simulator)
- // `in` check used to prevent JIT error (gh-2145)
- // hasOwn isn't used here due to false negatives
- // regarding Nodelist length in IE
- var length = !!obj && "length" in obj && obj.length,
- type = toType( obj );
-
- if ( isFunction( obj ) || isWindow( obj ) ) {
- return false;
- }
-
- return type === "array" || length === 0 ||
- typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v2.3.4
- * https://sizzlejs.com/
- *
- * Copyright JS Foundation and other contributors
- * Released under the MIT license
- * https://js.foundation/
- *
- * Date: 2019-04-08
- */
-(function( window ) {
-
-var i,
- support,
- Expr,
- getText,
- isXML,
- tokenize,
- compile,
- select,
- outermostContext,
- sortInput,
- hasDuplicate,
-
- // Local document vars
- setDocument,
- document,
- docElem,
- documentIsHTML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
-
- // Instance-specific data
- expando = "sizzle" + 1 * new Date(),
- preferredDoc = window.document,
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
- nonnativeSelectorCache = createCache(),
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- }
- return 0;
- },
-
- // Instance methods
- hasOwn = ({}).hasOwnProperty,
- arr = [],
- pop = arr.pop,
- push_native = arr.push,
- push = arr.push,
- slice = arr.slice,
- // Use a stripped-down indexOf as it's faster than native
- // https://jsperf.com/thor-indexof-vs-for/5
- indexOf = function( list, elem ) {
- var i = 0,
- len = list.length;
- for ( ; i < len; i++ ) {
- if ( list[i] === elem ) {
- return i;
- }
- }
- return -1;
- },
-
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
- // Regular expressions
-
- // http://www.w3.org/TR/css3-selectors/#whitespace
- whitespace = "[\\x20\\t\\r\\n\\f]",
-
- // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
- identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
-
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
- attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
- // Operator (capture 2)
- "*([*^$|!~]?=)" + whitespace +
- // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
- "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
- "*\\]",
-
- pseudos = ":(" + identifier + ")(?:\\((" +
- // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
- // 1. quoted (capture 3; capture 4 or capture 5)
- "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
- // 2. simple (capture 6)
- "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
- // 3. anything else (capture 2)
- ".*" +
- ")\\)|)",
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rwhitespace = new RegExp( whitespace + "+", "g" ),
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
- rdescend = new RegExp( whitespace + "|>" ),
-
- rpseudo = new RegExp( pseudos ),
- ridentifier = new RegExp( "^" + identifier + "$" ),
-
- matchExpr = {
- "ID": new RegExp( "^#(" + identifier + ")" ),
- "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
- "TAG": new RegExp( "^(" + identifier + "|[*])" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
- whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
- },
-
- rhtml = /HTML$/i,
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
-
- rnative = /^[^{]+\{\s*\[native \w/,
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
- rsibling = /[+~]/,
-
- // CSS escapes
- // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
- runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
- funescape = function( _, escaped, escapedWhitespace ) {
- var high = "0x" + escaped - 0x10000;
- // NaN means non-codepoint
- // Support: Firefox<24
- // Workaround erroneous numeric interpretation of +"0x"
- return high !== high || escapedWhitespace ?
- escaped :
- high < 0 ?
- // BMP codepoint
- String.fromCharCode( high + 0x10000 ) :
- // Supplemental Plane codepoint (surrogate pair)
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- },
-
- // CSS string/identifier serialization
- // https://drafts.csswg.org/cssom/#common-serializing-idioms
- rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
- fcssescape = function( ch, asCodePoint ) {
- if ( asCodePoint ) {
-
- // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
- if ( ch === "\0" ) {
- return "\uFFFD";
- }
-
- // Control characters and (dependent upon position) numbers get escaped as code points
- return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
- }
-
- // Other potentially-special ASCII characters get backslash-escaped
- return "\\" + ch;
- },
-
- // Used for iframes
- // See setDocument()
- // Removing the function wrapper causes a "Permission Denied"
- // error in IE
- unloadHandler = function() {
- setDocument();
- },
-
- inDisabledFieldset = addCombinator(
- function( elem ) {
- return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
- },
- { dir: "parentNode", next: "legend" }
- );
-
-// Optimize for push.apply( _, NodeList )
-try {
- push.apply(
- (arr = slice.call( preferredDoc.childNodes )),
- preferredDoc.childNodes
- );
- // Support: Android<4.0
- // Detect silently failing push.apply
- arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
- push = { apply: arr.length ?
-
- // Leverage slice if possible
- function( target, els ) {
- push_native.apply( target, slice.call(els) );
- } :
-
- // Support: IE<9
- // Otherwise append directly
- function( target, els ) {
- var j = target.length,
- i = 0;
- // Can't trust NodeList.length
- while ( (target[j++] = els[i++]) ) {}
- target.length = j - 1;
- }
- };
-}
-
-function Sizzle( selector, context, results, seed ) {
- var m, i, elem, nid, match, groups, newSelector,
- newContext = context && context.ownerDocument,
-
- // nodeType defaults to 9, since context defaults to document
- nodeType = context ? context.nodeType : 9;
-
- results = results || [];
-
- // Return early from calls with invalid selector or context
- if ( typeof selector !== "string" || !selector ||
- nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
-
- return results;
- }
-
- // Try to shortcut find operations (as opposed to filters) in HTML documents
- if ( !seed ) {
-
- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
- setDocument( context );
- }
- context = context || document;
-
- if ( documentIsHTML ) {
-
- // If the selector is sufficiently simple, try using a "get*By*" DOM method
- // (excepting DocumentFragment context, where the methods don't exist)
- if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
-
- // ID selector
- if ( (m = match[1]) ) {
-
- // Document context
- if ( nodeType === 9 ) {
- if ( (elem = context.getElementById( m )) ) {
-
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
-
- // Element context
- } else {
-
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if ( newContext && (elem = newContext.getElementById( m )) &&
- contains( context, elem ) &&
- elem.id === m ) {
-
- results.push( elem );
- return results;
- }
- }
-
- // Type selector
- } else if ( match[2] ) {
- push.apply( results, context.getElementsByTagName( selector ) );
- return results;
-
- // Class selector
- } else if ( (m = match[3]) && support.getElementsByClassName &&
- context.getElementsByClassName ) {
-
- push.apply( results, context.getElementsByClassName( m ) );
- return results;
- }
- }
-
- // Take advantage of querySelectorAll
- if ( support.qsa &&
- !nonnativeSelectorCache[ selector + " " ] &&
- (!rbuggyQSA || !rbuggyQSA.test( selector )) &&
-
- // Support: IE 8 only
- // Exclude object elements
- (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) {
-
- newSelector = selector;
- newContext = context;
-
- // qSA considers elements outside a scoping root when evaluating child or
- // descendant combinators, which is not what we want.
- // In such cases, we work around the behavior by prefixing every selector in the
- // list with an ID selector referencing the scope context.
- // Thanks to Andrew Dupont for this technique.
- if ( nodeType === 1 && rdescend.test( selector ) ) {
-
- // Capture the context ID, setting it first if necessary
- if ( (nid = context.getAttribute( "id" )) ) {
- nid = nid.replace( rcssescape, fcssescape );
- } else {
- context.setAttribute( "id", (nid = expando) );
- }
-
- // Prefix every selector in the list
- groups = tokenize( selector );
- i = groups.length;
- while ( i-- ) {
- groups[i] = "#" + nid + " " + toSelector( groups[i] );
- }
- newSelector = groups.join( "," );
-
- // Expand context for sibling selectors
- newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
- context;
- }
-
- try {
- push.apply( results,
- newContext.querySelectorAll( newSelector )
- );
- return results;
- } catch ( qsaError ) {
- nonnativeSelectorCache( selector, true );
- } finally {
- if ( nid === expando ) {
- context.removeAttribute( "id" );
- }
- }
- }
- }
- }
-
- // All others
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {function(string, object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
-function createCache() {
- var keys = [];
-
- function cache( key, value ) {
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
- if ( keys.push( key + " " ) > Expr.cacheLength ) {
- // Only keep the most recent entries
- delete cache[ keys.shift() ];
- }
- return (cache[ key + " " ] = value);
- }
- return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
- fn[ expando ] = true;
- return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created element and returns a boolean result
- */
-function assert( fn ) {
- var el = document.createElement("fieldset");
-
- try {
- return !!fn( el );
- } catch (e) {
- return false;
- } finally {
- // Remove from its parent by default
- if ( el.parentNode ) {
- el.parentNode.removeChild( el );
- }
- // release memory in IE
- el = null;
- }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
- var arr = attrs.split("|"),
- i = arr.length;
-
- while ( i-- ) {
- Expr.attrHandle[ arr[i] ] = handler;
- }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
- var cur = b && a,
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
- a.sourceIndex - b.sourceIndex;
-
- // Use IE sourceIndex if available on both nodes
- if ( diff ) {
- return diff;
- }
-
- // Check if b follows a
- if ( cur ) {
- while ( (cur = cur.nextSibling) ) {
- if ( cur === b ) {
- return -1;
- }
- }
- }
-
- return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for :enabled/:disabled
- * @param {Boolean} disabled true for :disabled; false for :enabled
- */
-function createDisabledPseudo( disabled ) {
-
- // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
- return function( elem ) {
-
- // Only certain elements can match :enabled or :disabled
- // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
- // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
- if ( "form" in elem ) {
-
- // Check for inherited disabledness on relevant non-disabled elements:
- // * listed form-associated elements in a disabled fieldset
- // https://html.spec.whatwg.org/multipage/forms.html#category-listed
- // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
- // * option elements in a disabled optgroup
- // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
- // All such elements have a "form" property.
- if ( elem.parentNode && elem.disabled === false ) {
-
- // Option elements defer to a parent optgroup if present
- if ( "label" in elem ) {
- if ( "label" in elem.parentNode ) {
- return elem.parentNode.disabled === disabled;
- } else {
- return elem.disabled === disabled;
- }
- }
-
- // Support: IE 6 - 11
- // Use the isDisabled shortcut property to check for disabled fieldset ancestors
- return elem.isDisabled === disabled ||
-
- // Where there is no isDisabled, check manually
- /* jshint -W018 */
- elem.isDisabled !== !disabled &&
- inDisabledFieldset( elem ) === disabled;
- }
-
- return elem.disabled === disabled;
-
- // Try to winnow out elements that can't be disabled before trusting the disabled property.
- // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
- // even exist on them, let alone have a boolean value.
- } else if ( "label" in elem ) {
- return elem.disabled === disabled;
- }
-
- // Remaining elements are neither :enabled nor :disabled
- return false;
- };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
- return markFunction(function( argument ) {
- argument = +argument;
- return markFunction(function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while ( i-- ) {
- if ( seed[ (j = matchIndexes[i]) ] ) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
- return context && typeof context.getElementsByTagName !== "undefined" && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
- var namespace = elem.namespaceURI,
- docElem = (elem.ownerDocument || elem).documentElement;
-
- // Support: IE <=8
- // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
- // https://bugs.jquery.com/ticket/4833
- return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
- var hasCompare, subWindow,
- doc = node ? node.ownerDocument || node : preferredDoc;
-
- // Return early if doc is invalid or already selected
- if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
- return document;
- }
-
- // Update global variables
- document = doc;
- docElem = document.documentElement;
- documentIsHTML = !isXML( document );
-
- // Support: IE 9-11, Edge
- // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
- if ( preferredDoc !== document &&
- (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
-
- // Support: IE 11, Edge
- if ( subWindow.addEventListener ) {
- subWindow.addEventListener( "unload", unloadHandler, false );
-
- // Support: IE 9 - 10 only
- } else if ( subWindow.attachEvent ) {
- subWindow.attachEvent( "onunload", unloadHandler );
- }
- }
-
- /* Attributes
- ---------------------------------------------------------------------- */
-
- // Support: IE<8
- // Verify that getAttribute really returns attributes and not properties
- // (excepting IE8 booleans)
- support.attributes = assert(function( el ) {
- el.className = "i";
- return !el.getAttribute("className");
- });
-
- /* getElement(s)By*
- ---------------------------------------------------------------------- */
-
- // Check if getElementsByTagName("*") returns only elements
- support.getElementsByTagName = assert(function( el ) {
- el.appendChild( document.createComment("") );
- return !el.getElementsByTagName("*").length;
- });
-
- // Support: IE<9
- support.getElementsByClassName = rnative.test( document.getElementsByClassName );
-
- // Support: IE<10
- // Check if getElementById returns elements by name
- // The broken getElementById methods don't pick up programmatically-set names,
- // so use a roundabout getElementsByName test
- support.getById = assert(function( el ) {
- docElem.appendChild( el ).id = expando;
- return !document.getElementsByName || !document.getElementsByName( expando ).length;
- });
-
- // ID filter and find
- if ( support.getById ) {
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- return elem.getAttribute("id") === attrId;
- };
- };
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
- var elem = context.getElementById( id );
- return elem ? [ elem ] : [];
- }
- };
- } else {
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== "undefined" &&
- elem.getAttributeNode("id");
- return node && node.value === attrId;
- };
- };
-
- // Support: IE 6 - 7 only
- // getElementById is not reliable as a find shortcut
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
- var node, i, elems,
- elem = context.getElementById( id );
-
- if ( elem ) {
-
- // Verify the id attribute
- node = elem.getAttributeNode("id");
- if ( node && node.value === id ) {
- return [ elem ];
- }
-
- // Fall back on getElementsByName
- elems = context.getElementsByName( id );
- i = 0;
- while ( (elem = elems[i++]) ) {
- node = elem.getAttributeNode("id");
- if ( node && node.value === id ) {
- return [ elem ];
- }
- }
- }
-
- return [];
- }
- };
- }
-
- // Tag
- Expr.find["TAG"] = support.getElementsByTagName ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- return context.getElementsByTagName( tag );
-
- // DocumentFragment nodes don't have gEBTN
- } else if ( support.qsa ) {
- return context.querySelectorAll( tag );
- }
- } :
-
- function( tag, context ) {
- var elem,
- tmp = [],
- i = 0,
- // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
- results = context.getElementsByTagName( tag );
-
- // Filter out possible comments
- if ( tag === "*" ) {
- while ( (elem = results[i++]) ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
-
- return tmp;
- }
- return results;
- };
-
- // Class
- Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
- return context.getElementsByClassName( className );
- }
- };
-
- /* QSA/matchesSelector
- ---------------------------------------------------------------------- */
-
- // QSA and matchesSelector support
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- rbuggyMatches = [];
-
- // qSa(:focus) reports false when true (Chrome 21)
- // We allow this because of a bug in IE8/9 that throws an error
- // whenever `document.activeElement` is accessed on an iframe
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
- // See https://bugs.jquery.com/ticket/13378
- rbuggyQSA = [];
-
- if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
- // Build QSA regex
- // Regex strategy adopted from Diego Perini
- assert(function( el ) {
- // Select is set to empty string on purpose
- // This is to test IE's treatment of not explicitly
- // setting a boolean content attribute,
- // since its presence should be enough
- // https://bugs.jquery.com/ticket/12359
- docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
- "<select id='" + expando + "-\r\\' msallowcapture=''>" +
- "<option selected=''></option></select>";
-
- // Support: IE8, Opera 11-12.16
- // Nothing should be selected when empty strings follow ^= or $= or *=
- // The test attribute must be unknown in Opera but "safe" for WinRT
- // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
- if ( el.querySelectorAll("[msallowcapture^='']").length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
- }
-
- // Support: IE8
- // Boolean attributes and "value" are not treated correctly
- if ( !el.querySelectorAll("[selected]").length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
- }
-
- // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
- if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
- rbuggyQSA.push("~=");
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here and will not see later tests
- if ( !el.querySelectorAll(":checked").length ) {
- rbuggyQSA.push(":checked");
- }
-
- // Support: Safari 8+, iOS 8+
- // https://bugs.webkit.org/show_bug.cgi?id=136851
- // In-page `selector#id sibling-combinator selector` fails
- if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
- rbuggyQSA.push(".#.+[+~]");
- }
- });
-
- assert(function( el ) {
- el.innerHTML = "<a href='' disabled='disabled'></a>" +
- "<select disabled='disabled'><option/></select>";
-
- // Support: Windows 8 Native Apps
- // The type and name attributes are restricted during .innerHTML assignment
- var input = document.createElement("input");
- input.setAttribute( "type", "hidden" );
- el.appendChild( input ).setAttribute( "name", "D" );
-
- // Support: IE8
- // Enforce case-sensitivity of name attribute
- if ( el.querySelectorAll("[name=d]").length ) {
- rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here and will not see later tests
- if ( el.querySelectorAll(":enabled").length !== 2 ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Support: IE9-11+
- // IE's :disabled selector does not pick up the children of disabled fieldsets
- docElem.appendChild( el ).disabled = true;
- if ( el.querySelectorAll(":disabled").length !== 2 ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Opera 10-11 does not throw on post-comma invalid pseudos
- el.querySelectorAll("*,:x");
- rbuggyQSA.push(",.*:");
- });
- }
-
- if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
- docElem.webkitMatchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector) )) ) {
-
- assert(function( el ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- support.disconnectedMatch = matches.call( el, "*" );
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( el, "[s!='']:x" );
- rbuggyMatches.push( "!=", pseudos );
- });
- }
-
- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
- /* Contains
- ---------------------------------------------------------------------- */
- hasCompare = rnative.test( docElem.compareDocumentPosition );
-
- // Element contains another
- // Purposefully self-exclusive
- // As in, an element does not contain itself
- contains = hasCompare || rnative.test( docElem.contains ) ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && (
- adown.contains ?
- adown.contains( bup ) :
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
- ));
- } :
- function( a, b ) {
- if ( b ) {
- while ( (b = b.parentNode) ) {
- if ( b === a ) {
- return true;
- }
- }
- }
- return false;
- };
-
- /* Sorting
- ---------------------------------------------------------------------- */
-
- // Document order sorting
- sortOrder = hasCompare ?
- function( a, b ) {
-
- // Flag for duplicate removal
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- // Sort on method existence if only one input has compareDocumentPosition
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
- if ( compare ) {
- return compare;
- }
-
- // Calculate position if both inputs belong to the same document
- compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
- a.compareDocumentPosition( b ) :
-
- // Otherwise we know they are disconnected
- 1;
-
- // Disconnected nodes
- if ( compare & 1 ||
- (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
- // Choose the first element that is related to our preferred document
- if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
- return -1;
- }
- if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
- return 1;
- }
-
- // Maintain original order
- return sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
- 0;
- }
-
- return compare & 4 ? -1 : 1;
- } :
- function( a, b ) {
- // Exit early if the nodes are identical
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [ a ],
- bp = [ b ];
-
- // Parentless nodes are either documents or disconnected
- if ( !aup || !bup ) {
- return a === document ? -1 :
- b === document ? 1 :
- aup ? -1 :
- bup ? 1 :
- sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
- 0;
-
- // If the nodes are siblings, we can do a quick check
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
- }
-
- // Otherwise we need full lists of their ancestors for comparison
- cur = a;
- while ( (cur = cur.parentNode) ) {
- ap.unshift( cur );
- }
- cur = b;
- while ( (cur = cur.parentNode) ) {
- bp.unshift( cur );
- }
-
- // Walk down the tree looking for a discrepancy
- while ( ap[i] === bp[i] ) {
- i++;
- }
-
- return i ?
- // Do a sibling check if the nodes have a common ancestor
- siblingCheck( ap[i], bp[i] ) :
-
- // Otherwise nodes in our document sort first
- ap[i] === preferredDoc ? -1 :
- bp[i] === preferredDoc ? 1 :
- 0;
- };
-
- return document;
-};
-
-Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- if ( support.matchesSelector && documentIsHTML &&
- !nonnativeSelectorCache[ expr + " " ] &&
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
-
- try {
- var ret = matches.call( elem, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || support.disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch (e) {
- nonnativeSelectorCache( expr, true );
- }
- }
-
- return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
- // Set document vars if needed
- if ( ( context.ownerDocument || context ) !== document ) {
- setDocument( context );
- }
- return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- var fn = Expr.attrHandle[ name.toLowerCase() ],
- // Don't get fooled by Object.prototype properties (jQuery #13807)
- val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
- fn( elem, name, !documentIsHTML ) :
- undefined;
-
- return val !== undefined ?
- val :
- support.attributes || !documentIsHTML ?
- elem.getAttribute( name ) :
- (val = elem.getAttributeNode(name)) && val.specified ?
- val.value :
- null;
-};
-
-Sizzle.escape = function( sel ) {
- return (sel + "").replace( rcssescape, fcssescape );
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- j = 0,
- i = 0;
-
- // Unless we *know* we can detect duplicates, assume their presence
- hasDuplicate = !support.detectDuplicates;
- sortInput = !support.sortStable && results.slice( 0 );
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- while ( (elem = results[i++]) ) {
- if ( elem === results[ i ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
- // Clear input after sorting to release objects
- // See https://github.com/jquery/sizzle/pull/225
- sortInput = null;
-
- return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if ( !nodeType ) {
- // If no nodeType, this is expected to be an array
- while ( (node = elem[i++]) ) {
- // Do not traverse comment nodes
- ret += getText( node );
- }
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (jQuery #11153)
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
- // Traverse its children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- // Do not include comment or processing instruction nodes
-
- return ret;
-};
-
-Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- attrHandle: {},
-
- find: {},
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function( match ) {
- match[1] = match[1].replace( runescape, funescape );
-
- // Move the given value to match[3] whether quoted or unquoted
- match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
-
- if ( match[2] === "~=" ) {
- match[3] = " " + match[3] + " ";
- }
-
- return match.slice( 0, 4 );
- },
-
- "CHILD": function( match ) {
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[1] = match[1].toLowerCase();
-
- if ( match[1].slice( 0, 3 ) === "nth" ) {
- // nth-* requires argument
- if ( !match[3] ) {
- Sizzle.error( match[0] );
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
- match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
- // other types prohibit arguments
- } else if ( match[3] ) {
- Sizzle.error( match[0] );
- }
-
- return match;
- },
-
- "PSEUDO": function( match ) {
- var excess,
- unquoted = !match[6] && match[2];
-
- if ( matchExpr["CHILD"].test( match[0] ) ) {
- return null;
- }
-
- // Accept quoted arguments as-is
- if ( match[3] ) {
- match[2] = match[4] || match[5] || "";
-
- // Strip excess characters from unquoted arguments
- } else if ( unquoted && rpseudo.test( unquoted ) &&
- // Get excess from tokenize (recursively)
- (excess = tokenize( unquoted, true )) &&
- // advance to the next closing parenthesis
- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
- // excess is a negative index
- match[0] = match[0].slice( 0, excess );
- match[2] = unquoted.slice( 0, excess );
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice( 0, 3 );
- }
- },
-
- filter: {
-
- "TAG": function( nodeNameSelector ) {
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
- return nodeNameSelector === "*" ?
- function() { return true; } :
- function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function( className ) {
- var pattern = classCache[ className + " " ];
-
- return pattern ||
- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
- classCache( className, function( elem ) {
- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
- });
- },
-
- "ATTR": function( name, operator, check ) {
- return function( elem ) {
- var result = Sizzle.attr( elem, name );
-
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
-
- result += "";
-
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
- false;
- };
- },
-
- "CHILD": function( type, what, argument, first, last ) {
- var simple = type.slice( 0, 3 ) !== "nth",
- forward = type.slice( -4 ) !== "last",
- ofType = what === "of-type";
-
- return first === 1 && last === 0 ?
-
- // Shortcut for :nth-*(n)
- function( elem ) {
- return !!elem.parentNode;
- } :
-
- function( elem, context, xml ) {
- var cache, uniqueCache, outerCache, node, nodeIndex, start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType,
- diff = false;
-
- if ( parent ) {
-
- // :(first|last|only)-(child|of-type)
- if ( simple ) {
- while ( dir ) {
- node = elem;
- while ( (node = node[ dir ]) ) {
- if ( ofType ?
- node.nodeName.toLowerCase() === name :
- node.nodeType === 1 ) {
-
- return false;
- }
- }
- // Reverse direction for :only-* (if we haven't yet done so)
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
-
- start = [ forward ? parent.firstChild : parent.lastChild ];
-
- // non-xml :nth-child(...) stores cache data on `parent`
- if ( forward && useCache ) {
-
- // Seek `elem` from a previously-cached index
-
- // ...in a gzip-friendly way
- node = parent;
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- cache = uniqueCache[ type ] || [];
- nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
- diff = nodeIndex && cache[ 2 ];
- node = nodeIndex && parent.childNodes[ nodeIndex ];
-
- while ( (node = ++nodeIndex && node && node[ dir ] ||
-
- // Fallback to seeking `elem` from the start
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- // When found, cache indexes on `parent` and break
- if ( node.nodeType === 1 && ++diff && node === elem ) {
- uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
- break;
- }
- }
-
- } else {
- // Use previously-cached element index if available
- if ( useCache ) {
- // ...in a gzip-friendly way
- node = elem;
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- cache = uniqueCache[ type ] || [];
- nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
- diff = nodeIndex;
- }
-
- // xml :nth-child(...)
- // or :nth-last-child(...) or :nth(-last)?-of-type(...)
- if ( diff === false ) {
- // Use the same loop as above to seek `elem` from the start
- while ( (node = ++nodeIndex && node && node[ dir ] ||
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- if ( ( ofType ?
- node.nodeName.toLowerCase() === name :
- node.nodeType === 1 ) &&
- ++diff ) {
-
- // Cache the index of each encountered element
- if ( useCache ) {
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- uniqueCache[ type ] = [ dirruns, diff ];
- }
-
- if ( node === elem ) {
- break;
- }
- }
- }
- }
- }
-
- // Incorporate the offset, then check against cycle size
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- }
- };
- },
-
- "PSEUDO": function( pseudo, argument ) {
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- // But maintain support for old signatures
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction(function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf( seed, matched[i] );
- seed[ idx ] = !( matches[ idx ] = matched[i] );
- }
- }) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
- // Potentially complex pseudos
- "not": markFunction(function( selector ) {
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
-
- return matcher[ expando ] ?
- markFunction(function( seed, matches, context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while ( i-- ) {
- if ( (elem = unmatched[i]) ) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) :
- function( elem, context, xml ) {
- input[0] = elem;
- matcher( input, null, xml, results );
- // Don't keep the element (issue #299)
- input[0] = null;
- return !results.pop();
- };
- }),
-
- "has": markFunction(function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- }),
-
- "contains": markFunction(function( text ) {
- text = text.replace( runescape, funescape );
- return function( elem ) {
- return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
- };
- }),
-
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // http://www.w3.org/TR/selectors/#lang-pseudo
- "lang": markFunction( function( lang ) {
- // lang value must be a valid identifier
- if ( !ridentifier.test(lang || "") ) {
- Sizzle.error( "unsupported lang: " + lang );
- }
- lang = lang.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- var elemLang;
- do {
- if ( (elemLang = documentIsHTML ?
- elem.lang :
- elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
- }
- } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
- return false;
- };
- }),
-
- // Miscellaneous
- "target": function( elem ) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice( 1 ) === elem.id;
- },
-
- "root": function( elem ) {
- return elem === docElem;
- },
-
- "focus": function( elem ) {
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- // Boolean properties
- "enabled": createDisabledPseudo( false ),
- "disabled": createDisabledPseudo( true ),
-
- "checked": function( elem ) {
- // In CSS3, :checked should return both checked and selected elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- var nodeName = elem.nodeName.toLowerCase();
- return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
- },
-
- "selected": function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- // Contents
- "empty": function( elem ) {
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
- // but not by others (comment: 8; processing instruction: 7; etc.)
- // nodeType < 6 works because attributes (2) do not appear as children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- if ( elem.nodeType < 6 ) {
- return false;
- }
- }
- return true;
- },
-
- "parent": function( elem ) {
- return !Expr.pseudos["empty"]( elem );
- },
-
- // Element/input types
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
-
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
-
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "text": function( elem ) {
- var attr;
- return elem.nodeName.toLowerCase() === "input" &&
- elem.type === "text" &&
-
- // Support: IE<8
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
- },
-
- // Position-in-collection
- "first": createPositionalPseudo(function() {
- return [ 0 ];
- }),
-
- "last": createPositionalPseudo(function( matchIndexes, length ) {
- return [ length - 1 ];
- }),
-
- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- }),
-
- "even": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 0;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "odd": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 1;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ?
- argument + length :
- argument > length ?
- length :
- argument;
- for ( ; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- })
- }
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
- Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
- Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ selector + " " ];
-
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while ( soFar ) {
-
- // Comma and first run
- if ( !matched || (match = rcomma.exec( soFar )) ) {
- if ( match ) {
- // Don't consume trailing commas as valid
- soFar = soFar.slice( match[0].length ) || soFar;
- }
- groups.push( (tokens = []) );
- }
-
- matched = false;
-
- // Combinators
- if ( (match = rcombinators.exec( soFar )) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- // Cast descendant combinators to space
- type: match[0].replace( rtrim, " " )
- });
- soFar = soFar.slice( matched.length );
- }
-
- // Filters
- for ( type in Expr.filter ) {
- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- (match = preFilters[ type ]( match ))) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- type: type,
- matches: match
- });
- soFar = soFar.slice( matched.length );
- }
- }
-
- if ( !matched ) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
- // Cache the tokens
- tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for ( ; i < len; i++ ) {
- selector += tokens[i].value;
- }
- return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- skip = combinator.next,
- key = skip || dir,
- checkNonElements = base && key === "parentNode",
- doneName = done++;
-
- return combinator.first ?
- // Check against closest ancestor/preceding element
- function( elem, context, xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- return matcher( elem, context, xml );
- }
- }
- return false;
- } :
-
- // Check against all ancestor/preceding elements
- function( elem, context, xml ) {
- var oldCache, uniqueCache, outerCache,
- newCache = [ dirruns, doneName ];
-
- // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
- if ( xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- if ( matcher( elem, context, xml ) ) {
- return true;
- }
- }
- }
- } else {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- outerCache = elem[ expando ] || (elem[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
-
- if ( skip && skip === elem.nodeName.toLowerCase() ) {
- elem = elem[ dir ] || elem;
- } else if ( (oldCache = uniqueCache[ key ]) &&
- oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
- // Assign to newCache so results back-propagate to previous elements
- return (newCache[ 2 ] = oldCache[ 2 ]);
- } else {
- // Reuse newcache so results back-propagate to previous elements
- uniqueCache[ key ] = newCache;
-
- // A match means we're done; a fail means we have to keep checking
- if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
- return true;
- }
- }
- }
- }
- }
- return false;
- };
-}
-
-function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[i]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results );
- }
- return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for ( ; i < len; i++ ) {
- if ( (elem = unmatched[i]) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
-
- return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction(function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
-
- matcherOut = matcher ?
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results :
- matcherIn;
-
- // Find primary matches
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- // Apply postFilter
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while ( i-- ) {
- if ( (elem = temp[i]) ) {
- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
- }
- }
- }
-
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) ) {
- // Restore matcherIn since elem is not yet a final match
- temp.push( (matcherIn[i] = elem) );
- }
- }
- postFinder( null, (matcherOut = []), temp, xml );
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
-
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- });
-}
-
-function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[0].type ],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- (checkContext = context).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
- // Avoid hanging onto element (issue #299)
- checkContext = null;
- return ret;
- } ];
-
- for ( ; i < len; i++ ) {
- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
- matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
- } else {
- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
- // Return special upon seeing a positional matcher
- if ( matcher[ expando ] ) {
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[j].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && toSelector(
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
- tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
- ).replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
- j < len && toSelector( tokens )
- );
- }
- matchers.push( matcher );
- }
- }
-
- return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- var bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, outermost ) {
- var elem, j, matcher,
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- setMatched = [],
- contextBackup = outermostContext,
- // We must always have either seed elements or outermost context
- elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
- // Use integer dirruns iff this is the outermost matcher
- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
- len = elems.length;
-
- if ( outermost ) {
- outermostContext = context === document || context || outermost;
- }
-
- // Add elements passing elementMatchers directly to results
- // Support: IE<9, Safari
- // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
- for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
- if ( byElement && elem ) {
- j = 0;
- if ( !context && elem.ownerDocument !== document ) {
- setDocument( elem );
- xml = !documentIsHTML;
- }
- while ( (matcher = elementMatchers[j++]) ) {
- if ( matcher( elem, context || document, xml) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- }
- }
-
- // Track unmatched elements for set filters
- if ( bySet ) {
- // They will have gone through all possible matchers
- if ( (elem = !matcher && elem) ) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- // `i` is now the count of elements visited above, and adding it to `matchedCount`
- // makes the latter nonnegative.
- matchedCount += i;
-
- // Apply set filters to unmatched elements
- // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
- // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
- // no element matchers and no seed.
- // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
- // case, which will result in a "00" `matchedCount` that differs from `i` but is also
- // numerically zero.
- if ( bySet && i !== matchedCount ) {
- j = 0;
- while ( (matcher = setMatchers[j++]) ) {
- matcher( unmatched, setMatched, context, xml );
- }
-
- if ( seed ) {
- // Reintegrate element matches to eliminate the need for sorting
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !(unmatched[i] || setMatched[i]) ) {
- setMatched[i] = pop.call( results );
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense( setMatched );
- }
-
- // Add matches to results
- push.apply( results, setMatched );
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
-
- Sizzle.uniqueSort( results );
- }
- }
-
- // Override manipulation of globals by nested matchers
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ selector + " " ];
-
- if ( !cached ) {
- // Generate a function of recursive functions that can be used to check each element
- if ( !match ) {
- match = tokenize( selector );
- }
- i = match.length;
- while ( i-- ) {
- cached = matcherFromTokens( match[i] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- // Cache the compiled function
- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
- // Save selector and tokenization
- cached.selector = selector;
- }
- return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- * selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- * selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
- var i, tokens, token, type, find,
- compiled = typeof selector === "function" && selector,
- match = !seed && tokenize( (selector = compiled.selector || selector) );
-
- results = results || [];
-
- // Try to minimize operations if there is only one selector in the list and no seed
- // (the latter of which guarantees us context)
- if ( match.length === 1 ) {
-
- // Reduce context if the leading compound selector is an ID
- tokens = match[0] = match[0].slice( 0 );
- if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
- context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
-
- context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
- if ( !context ) {
- return results;
-
- // Precompiled matchers will still verify ancestry, so step up a level
- } else if ( compiled ) {
- context = context.parentNode;
- }
-
- selector = selector.slice( tokens.shift().value.length );
- }
-
- // Fetch a seed set for right-to-left matching
- i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
- while ( i-- ) {
- token = tokens[i];
-
- // Abort if we hit a combinator
- if ( Expr.relative[ (type = token.type) ] ) {
- break;
- }
- if ( (find = Expr.find[ type ]) ) {
- // Search, expanding context for leading sibling combinators
- if ( (seed = find(
- token.matches[0].replace( runescape, funescape ),
- rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
- )) ) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice( i, 1 );
- selector = seed.length && toSelector( tokens );
- if ( !selector ) {
- push.apply( results, seed );
- return results;
- }
-
- break;
- }
- }
- }
- }
-
- // Compile and execute a filtering function if one is not provided
- // Provide `match` to avoid retokenization if we modified the selector above
- ( compiled || compile( selector, match ) )(
- seed,
- context,
- !documentIsHTML,
- results,
- !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
- );
- return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome 14-35+
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( el ) {
- // Should return 1, but returns 4 (following)
- return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( el ) {
- el.innerHTML = "<a href='#'></a>";
- return el.firstChild.getAttribute("href") === "#" ;
-}) ) {
- addHandle( "type|href|height|width", function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
- }
- });
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( el ) {
- el.innerHTML = "<input/>";
- el.firstChild.setAttribute( "value", "" );
- return el.firstChild.getAttribute( "value" ) === "";
-}) ) {
- addHandle( "value", function( elem, name, isXML ) {
- if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
- return elem.defaultValue;
- }
- });
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( el ) {
- return el.getAttribute("disabled") == null;
-}) ) {
- addHandle( booleans, function( elem, name, isXML ) {
- var val;
- if ( !isXML ) {
- return elem[ name ] === true ? name.toLowerCase() :
- (val = elem.getAttributeNode( name )) && val.specified ?
- val.value :
- null;
- }
- });
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-
-// Deprecated
-jQuery.expr[ ":" ] = jQuery.expr.pseudos;
-jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-jQuery.escapeSelector = Sizzle.escape;
-
-
-
-
-var dir = function( elem, dir, until ) {
- var matched = [],
- truncate = until !== undefined;
-
- while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
- if ( elem.nodeType === 1 ) {
- if ( truncate && jQuery( elem ).is( until ) ) {
- break;
- }
- matched.push( elem );
- }
- }
- return matched;
-};
-
-
-var siblings = function( n, elem ) {
- var matched = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- matched.push( n );
- }
- }
-
- return matched;
-};
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-
-
-function nodeName( elem, name ) {
-
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
-
-};
-var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
-
-
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
- if ( isFunction( qualifier ) ) {
- return jQuery.grep( elements, function( elem, i ) {
- return !!qualifier.call( elem, i, elem ) !== not;
- } );
- }
-
- // Single element
- if ( qualifier.nodeType ) {
- return jQuery.grep( elements, function( elem ) {
- return ( elem === qualifier ) !== not;
- } );
- }
-
- // Arraylike of elements (jQuery, arguments, Array)
- if ( typeof qualifier !== "string" ) {
- return jQuery.grep( elements, function( elem ) {
- return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
- } );
- }
-
- // Filtered directly for both simple and complex selectors
- return jQuery.filter( qualifier, elements, not );
-}
-
-jQuery.filter = function( expr, elems, not ) {
- var elem = elems[ 0 ];
-
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- if ( elems.length === 1 && elem.nodeType === 1 ) {
- return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
- }
-
- return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
- return elem.nodeType === 1;
- } ) );
-};
-
-jQuery.fn.extend( {
- find: function( selector ) {
- var i, ret,
- len = this.length,
- self = this;
-
- if ( typeof selector !== "string" ) {
- return this.pushStack( jQuery( selector ).filter( function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- } ) );
- }
-
- ret = this.pushStack( [] );
-
- for ( i = 0; i < len; i++ ) {
- jQuery.find( selector, self[ i ], ret );
- }
-
- return len > 1 ? jQuery.uniqueSort( ret ) : ret;
- },
- filter: function( selector ) {
- return this.pushStack( winnow( this, selector || [], false ) );
- },
- not: function( selector ) {
- return this.pushStack( winnow( this, selector || [], true ) );
- },
- is: function( selector ) {
- return !!winnow(
- this,
-
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- typeof selector === "string" && rneedsContext.test( selector ) ?
- jQuery( selector ) :
- selector || [],
- false
- ).length;
- }
-} );
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
- // A simple way to check for HTML strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- // Strict HTML recognition (#11290: must start with <)
- // Shortcut simple #id case for speed
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
-
- init = jQuery.fn.init = function( selector, context, root ) {
- var match, elem;
-
- // HANDLE: $(""), $(null), $(undefined), $(false)
- if ( !selector ) {
- return this;
- }
-
- // Method init() accepts an alternate rootjQuery
- // so migrate can support jQuery.sub (gh-2101)
- root = root || rootjQuery;
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- if ( selector[ 0 ] === "<" &&
- selector[ selector.length - 1 ] === ">" &&
- selector.length >= 3 ) {
-
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = rquickExpr.exec( selector );
- }
-
- // Match html or make sure no context is specified for #id
- if ( match && ( match[ 1 ] || !context ) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[ 1 ] ) {
- context = context instanceof jQuery ? context[ 0 ] : context;
-
- // Option to run scripts is true for back-compat
- // Intentionally let the error be thrown if parseHTML is not present
- jQuery.merge( this, jQuery.parseHTML(
- match[ 1 ],
- context && context.nodeType ? context.ownerDocument || context : document,
- true
- ) );
-
- // HANDLE: $(html, props)
- if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
- for ( match in context ) {
-
- // Properties of context are called as methods if possible
- if ( isFunction( this[ match ] ) ) {
- this[ match ]( context[ match ] );
-
- // ...and otherwise set as attributes
- } else {
- this.attr( match, context[ match ] );
- }
- }
- }
-
- return this;
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById( match[ 2 ] );
-
- if ( elem ) {
-
- // Inject the element directly into the jQuery object
- this[ 0 ] = elem;
- this.length = 1;
- }
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || root ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(DOMElement)
- } else if ( selector.nodeType ) {
- this[ 0 ] = selector;
- this.length = 1;
- return this;
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( isFunction( selector ) ) {
- return root.ready !== undefined ?
- root.ready( selector ) :
-
- // Execute immediately if ready is not present
- selector( jQuery );
- }
-
- return jQuery.makeArray( selector, this );
- };
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-
- // Methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend( {
- has: function( target ) {
- var targets = jQuery( target, this ),
- l = targets.length;
-
- return this.filter( function() {
- var i = 0;
- for ( ; i < l; i++ ) {
- if ( jQuery.contains( this, targets[ i ] ) ) {
- return true;
- }
- }
- } );
- },
-
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- matched = [],
- targets = typeof selectors !== "string" && jQuery( selectors );
-
- // Positional selectors never match, since there's no _selection_ context
- if ( !rneedsContext.test( selectors ) ) {
- for ( ; i < l; i++ ) {
- for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
-
- // Always skip document fragments
- if ( cur.nodeType < 11 && ( targets ?
- targets.index( cur ) > -1 :
-
- // Don't pass non-elements to Sizzle
- cur.nodeType === 1 &&
- jQuery.find.matchesSelector( cur, selectors ) ) ) {
-
- matched.push( cur );
- break;
- }
- }
- }
- }
-
- return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
- },
-
- // Determine the position of an element within the set
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
- }
-
- // Index in selector
- if ( typeof elem === "string" ) {
- return indexOf.call( jQuery( elem ), this[ 0 ] );
- }
-
- // Locate the position of the desired element
- return indexOf.call( this,
-
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[ 0 ] : elem
- );
- },
-
- add: function( selector, context ) {
- return this.pushStack(
- jQuery.uniqueSort(
- jQuery.merge( this.get(), jQuery( selector, context ) )
- )
- );
- },
-
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter( selector )
- );
- }
-} );
-
-function sibling( cur, dir ) {
- while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
- return cur;
-}
-
-jQuery.each( {
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return sibling( elem, "nextSibling" );
- },
- prev: function( elem ) {
- return sibling( elem, "previousSibling" );
- },
- nextAll: function( elem ) {
- return dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return siblings( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return siblings( elem.firstChild );
- },
- contents: function( elem ) {
- if ( typeof elem.contentDocument !== "undefined" ) {
- return elem.contentDocument;
- }
-
- // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
- // Treat the template element as a regular one in browsers that
- // don't support it.
- if ( nodeName( elem, "template" ) ) {
- elem = elem.content || elem;
- }
-
- return jQuery.merge( [], elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var matched = jQuery.map( this, fn, until );
-
- if ( name.slice( -5 ) !== "Until" ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- matched = jQuery.filter( selector, matched );
- }
-
- if ( this.length > 1 ) {
-
- // Remove duplicates
- if ( !guaranteedUnique[ name ] ) {
- jQuery.uniqueSort( matched );
- }
-
- // Reverse order for parents* and prev-derivatives
- if ( rparentsprev.test( name ) ) {
- matched.reverse();
- }
- }
-
- return this.pushStack( matched );
- };
-} );
-var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
-
-
-
-// Convert String-formatted options into Object-formatted ones
-function createOptions( options ) {
- var object = {};
- jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
- object[ flag ] = true;
- } );
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
- // Convert options from String-formatted to Object-formatted if needed
- // (we check in cache first)
- options = typeof options === "string" ?
- createOptions( options ) :
- jQuery.extend( {}, options );
-
- var // Flag to know if list is currently firing
- firing,
-
- // Last fire value for non-forgettable lists
- memory,
-
- // Flag to know if list was already fired
- fired,
-
- // Flag to prevent firing
- locked,
-
- // Actual callback list
- list = [],
-
- // Queue of execution data for repeatable lists
- queue = [],
-
- // Index of currently firing callback (modified by add/remove as needed)
- firingIndex = -1,
-
- // Fire callbacks
- fire = function() {
-
- // Enforce single-firing
- locked = locked || options.once;
-
- // Execute callbacks for all pending executions,
- // respecting firingIndex overrides and runtime changes
- fired = firing = true;
- for ( ; queue.length; firingIndex = -1 ) {
- memory = queue.shift();
- while ( ++firingIndex < list.length ) {
-
- // Run callback and check for early termination
- if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
- options.stopOnFalse ) {
-
- // Jump to end and forget the data so .add doesn't re-fire
- firingIndex = list.length;
- memory = false;
- }
- }
- }
-
- // Forget the data if we're done with it
- if ( !options.memory ) {
- memory = false;
- }
-
- firing = false;
-
- // Clean up if we're done firing for good
- if ( locked ) {
-
- // Keep an empty list if we have data for future add calls
- if ( memory ) {
- list = [];
-
- // Otherwise, this object is spent
- } else {
- list = "";
- }
- }
- },
-
- // Actual Callbacks object
- self = {
-
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
-
- // If we have memory from a past run, we should fire after adding
- if ( memory && !firing ) {
- firingIndex = list.length - 1;
- queue.push( memory );
- }
-
- ( function add( args ) {
- jQuery.each( args, function( _, arg ) {
- if ( isFunction( arg ) ) {
- if ( !options.unique || !self.has( arg ) ) {
- list.push( arg );
- }
- } else if ( arg && arg.length && toType( arg ) !== "string" ) {
-
- // Inspect recursively
- add( arg );
- }
- } );
- } )( arguments );
-
- if ( memory && !firing ) {
- fire();
- }
- }
- return this;
- },
-
- // Remove a callback from the list
- remove: function() {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
-
- // Handle firing indexes
- if ( index <= firingIndex ) {
- firingIndex--;
- }
- }
- } );
- return this;
- },
-
- // Check if a given callback is in the list.
- // If no argument is given, return whether or not list has callbacks attached.
- has: function( fn ) {
- return fn ?
- jQuery.inArray( fn, list ) > -1 :
- list.length > 0;
- },
-
- // Remove all callbacks from the list
- empty: function() {
- if ( list ) {
- list = [];
- }
- return this;
- },
-
- // Disable .fire and .add
- // Abort any current/pending executions
- // Clear all callbacks and values
- disable: function() {
- locked = queue = [];
- list = memory = "";
- return this;
- },
- disabled: function() {
- return !list;
- },
-
- // Disable .fire
- // Also disable .add unless we have memory (since it would have no effect)
- // Abort any pending executions
- lock: function() {
- locked = queue = [];
- if ( !memory && !firing ) {
- list = memory = "";
- }
- return this;
- },
- locked: function() {
- return !!locked;
- },
-
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- if ( !locked ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- queue.push( args );
- if ( !firing ) {
- fire();
- }
- }
- return this;
- },
-
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
-
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!fired;
- }
- };
-
- return self;
-};
-
-
-function Identity( v ) {
- return v;
-}
-function Thrower( ex ) {
- throw ex;
-}
-
-function adoptValue( value, resolve, reject, noValue ) {
- var method;
-
- try {
-
- // Check for promise aspect first to privilege synchronous behavior
- if ( value && isFunction( ( method = value.promise ) ) ) {
- method.call( value ).done( resolve ).fail( reject );
-
- // Other thenables
- } else if ( value && isFunction( ( method = value.then ) ) ) {
- method.call( value, resolve, reject );
-
- // Other non-thenables
- } else {
-
- // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
- // * false: [ value ].slice( 0 ) => resolve( value )
- // * true: [ value ].slice( 1 ) => resolve()
- resolve.apply( undefined, [ value ].slice( noValue ) );
- }
-
- // For Promises/A+, convert exceptions into rejections
- // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
- // Deferred#then to conditionally suppress rejection.
- } catch ( value ) {
-
- // Support: Android 4.0 only
- // Strict mode functions invoked without .call/.apply get global-object context
- reject.apply( undefined, [ value ] );
- }
-}
-
-jQuery.extend( {
-
- Deferred: function( func ) {
- var tuples = [
-
- // action, add listener, callbacks,
- // ... .then handlers, argument index, [final state]
- [ "notify", "progress", jQuery.Callbacks( "memory" ),
- jQuery.Callbacks( "memory" ), 2 ],
- [ "resolve", "done", jQuery.Callbacks( "once memory" ),
- jQuery.Callbacks( "once memory" ), 0, "resolved" ],
- [ "reject", "fail", jQuery.Callbacks( "once memory" ),
- jQuery.Callbacks( "once memory" ), 1, "rejected" ]
- ],
- state = "pending",
- promise = {
- state: function() {
- return state;
- },
- always: function() {
- deferred.done( arguments ).fail( arguments );
- return this;
- },
- "catch": function( fn ) {
- return promise.then( null, fn );
- },
-
- // Keep pipe for back-compat
- pipe: function( /* fnDone, fnFail, fnProgress */ ) {
- var fns = arguments;
-
- return jQuery.Deferred( function( newDefer ) {
- jQuery.each( tuples, function( i, tuple ) {
-
- // Map tuples (progress, done, fail) to arguments (done, fail, progress)
- var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
-
- // deferred.progress(function() { bind to newDefer or newDefer.notify })
- // deferred.done(function() { bind to newDefer or newDefer.resolve })
- // deferred.fail(function() { bind to newDefer or newDefer.reject })
- deferred[ tuple[ 1 ] ]( function() {
- var returned = fn && fn.apply( this, arguments );
- if ( returned && isFunction( returned.promise ) ) {
- returned.promise()
- .progress( newDefer.notify )
- .done( newDefer.resolve )
- .fail( newDefer.reject );
- } else {
- newDefer[ tuple[ 0 ] + "With" ](
- this,
- fn ? [ returned ] : arguments
- );
- }
- } );
- } );
- fns = null;
- } ).promise();
- },
- then: function( onFulfilled, onRejected, onProgress ) {
- var maxDepth = 0;
- function resolve( depth, deferred, handler, special ) {
- return function() {
- var that = this,
- args = arguments,
- mightThrow = function() {
- var returned, then;
-
- // Support: Promises/A+ section 2.3.3.3.3
- // https://promisesaplus.com/#point-59
- // Ignore double-resolution attempts
- if ( depth < maxDepth ) {
- return;
- }
-
- returned = handler.apply( that, args );
-
- // Support: Promises/A+ section 2.3.1
- // https://promisesaplus.com/#point-48
- if ( returned === deferred.promise() ) {
- throw new TypeError( "Thenable self-resolution" );
- }
-
- // Support: Promises/A+ sections 2.3.3.1, 3.5
- // https://promisesaplus.com/#point-54
- // https://promisesaplus.com/#point-75
- // Retrieve `then` only once
- then = returned &&
-
- // Support: Promises/A+ section 2.3.4
- // https://promisesaplus.com/#point-64
- // Only check objects and functions for thenability
- ( typeof returned === "object" ||
- typeof returned === "function" ) &&
- returned.then;
-
- // Handle a returned thenable
- if ( isFunction( then ) ) {
-
- // Special processors (notify) just wait for resolution
- if ( special ) {
- then.call(
- returned,
- resolve( maxDepth, deferred, Identity, special ),
- resolve( maxDepth, deferred, Thrower, special )
- );
-
- // Normal processors (resolve) also hook into progress
- } else {
-
- // ...and disregard older resolution values
- maxDepth++;
-
- then.call(
- returned,
- resolve( maxDepth, deferred, Identity, special ),
- resolve( maxDepth, deferred, Thrower, special ),
- resolve( maxDepth, deferred, Identity,
- deferred.notifyWith )
- );
- }
-
- // Handle all other returned values
- } else {
-
- // Only substitute handlers pass on context
- // and multiple values (non-spec behavior)
- if ( handler !== Identity ) {
- that = undefined;
- args = [ returned ];
- }
-
- // Process the value(s)
- // Default process is resolve
- ( special || deferred.resolveWith )( that, args );
- }
- },
-
- // Only normal processors (resolve) catch and reject exceptions
- process = special ?
- mightThrow :
- function() {
- try {
- mightThrow();
- } catch ( e ) {
-
- if ( jQuery.Deferred.exceptionHook ) {
- jQuery.Deferred.exceptionHook( e,
- process.stackTrace );
- }
-
- // Support: Promises/A+ section 2.3.3.3.4.1
- // https://promisesaplus.com/#point-61
- // Ignore post-resolution exceptions
- if ( depth + 1 >= maxDepth ) {
-
- // Only substitute handlers pass on context
- // and multiple values (non-spec behavior)
- if ( handler !== Thrower ) {
- that = undefined;
- args = [ e ];
- }
-
- deferred.rejectWith( that, args );
- }
- }
- };
-
- // Support: Promises/A+ section 2.3.3.3.1
- // https://promisesaplus.com/#point-57
- // Re-resolve promises immediately to dodge false rejection from
- // subsequent errors
- if ( depth ) {
- process();
- } else {
-
- // Call an optional hook to record the stack, in case of exception
- // since it's otherwise lost when execution goes async
- if ( jQuery.Deferred.getStackHook ) {
- process.stackTrace = jQuery.Deferred.getStackHook();
- }
- window.setTimeout( process );
- }
- };
- }
-
- return jQuery.Deferred( function( newDefer ) {
-
- // progress_handlers.add( ... )
- tuples[ 0 ][ 3 ].add(
- resolve(
- 0,
- newDefer,
- isFunction( onProgress ) ?
- onProgress :
- Identity,
- newDefer.notifyWith
- )
- );
-
- // fulfilled_handlers.add( ... )
- tuples[ 1 ][ 3 ].add(
- resolve(
- 0,
- newDefer,
- isFunction( onFulfilled ) ?
- onFulfilled :
- Identity
- )
- );
-
- // rejected_handlers.add( ... )
- tuples[ 2 ][ 3 ].add(
- resolve(
- 0,
- newDefer,
- isFunction( onRejected ) ?
- onRejected :
- Thrower
- )
- );
- } ).promise();
- },
-
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- return obj != null ? jQuery.extend( obj, promise ) : promise;
- }
- },
- deferred = {};
-
- // Add list-specific methods
- jQuery.each( tuples, function( i, tuple ) {
- var list = tuple[ 2 ],
- stateString = tuple[ 5 ];
-
- // promise.progress = list.add
- // promise.done = list.add
- // promise.fail = list.add
- promise[ tuple[ 1 ] ] = list.add;
-
- // Handle state
- if ( stateString ) {
- list.add(
- function() {
-
- // state = "resolved" (i.e., fulfilled)
- // state = "rejected"
- state = stateString;
- },
-
- // rejected_callbacks.disable
- // fulfilled_callbacks.disable
- tuples[ 3 - i ][ 2 ].disable,
-
- // rejected_handlers.disable
- // fulfilled_handlers.disable
- tuples[ 3 - i ][ 3 ].disable,
-
- // progress_callbacks.lock
- tuples[ 0 ][ 2 ].lock,
-
- // progress_handlers.lock
- tuples[ 0 ][ 3 ].lock
- );
- }
-
- // progress_handlers.fire
- // fulfilled_handlers.fire
- // rejected_handlers.fire
- list.add( tuple[ 3 ].fire );
-
- // deferred.notify = function() { deferred.notifyWith(...) }
- // deferred.resolve = function() { deferred.resolveWith(...) }
- // deferred.reject = function() { deferred.rejectWith(...) }
- deferred[ tuple[ 0 ] ] = function() {
- deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
- return this;
- };
-
- // deferred.notifyWith = list.fireWith
- // deferred.resolveWith = list.fireWith
- // deferred.rejectWith = list.fireWith
- deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
- } );
-
- // Make the deferred a promise
- promise.promise( deferred );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( singleValue ) {
- var
-
- // count of uncompleted subordinates
- remaining = arguments.length,
-
- // count of unprocessed arguments
- i = remaining,
-
- // subordinate fulfillment data
- resolveContexts = Array( i ),
- resolveValues = slice.call( arguments ),
-
- // the master Deferred
- master = jQuery.Deferred(),
-
- // subordinate callback factory
- updateFunc = function( i ) {
- return function( value ) {
- resolveContexts[ i ] = this;
- resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
- if ( !( --remaining ) ) {
- master.resolveWith( resolveContexts, resolveValues );
- }
- };
- };
-
- // Single- and empty arguments are adopted like Promise.resolve
- if ( remaining <= 1 ) {
- adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
- !remaining );
-
- // Use .then() to unwrap secondary thenables (cf. gh-3000)
- if ( master.state() === "pending" ||
- isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
-
- return master.then();
- }
- }
-
- // Multiple arguments are aggregated like Promise.all array elements
- while ( i-- ) {
- adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
- }
-
- return master.promise();
- }
-} );
-
-
-// These usually indicate a programmer mistake during development,
-// warn about them ASAP rather than swallowing them by default.
-var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
-
-jQuery.Deferred.exceptionHook = function( error, stack ) {
-
- // Support: IE 8 - 9 only
- // Console exists when dev tools are open, which can happen at any time
- if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
- window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
- }
-};
-
-
-
-
-jQuery.readyException = function( error ) {
- window.setTimeout( function() {
- throw error;
- } );
-};
-
-
-
-
-// The deferred used on DOM ready
-var readyList = jQuery.Deferred();
-
-jQuery.fn.ready = function( fn ) {
-
- readyList
- .then( fn )
-
- // Wrap jQuery.readyException in a function so that the lookup
- // happens at the time of error handling instead of callback
- // registration.
- .catch( function( error ) {
- jQuery.readyException( error );
- } );
-
- return this;
-};
-
-jQuery.extend( {
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Handle when the DOM is ready
- ready: function( wait ) {
-
- // Abort if there are pending holds or we're already ready
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
- }
-} );
-
-jQuery.ready.then = readyList.then;
-
-// The ready event handler and self cleanup method
-function completed() {
- document.removeEventListener( "DOMContentLoaded", completed );
- window.removeEventListener( "load", completed );
- jQuery.ready();
-}
-
-// Catch cases where $(document).ready() is called
-// after the browser event has already occurred.
-// Support: IE <=9 - 10 only
-// Older IE sometimes signals "interactive" too soon
-if ( document.readyState === "complete" ||
- ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
-
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- window.setTimeout( jQuery.ready );
-
-} else {
-
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", completed );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", completed );
-}
-
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
- var i = 0,
- len = elems.length,
- bulk = key == null;
-
- // Sets many values
- if ( toType( key ) === "object" ) {
- chainable = true;
- for ( i in key ) {
- access( elems, fn, i, key[ i ], true, emptyGet, raw );
- }
-
- // Sets one value
- } else if ( value !== undefined ) {
- chainable = true;
-
- if ( !isFunction( value ) ) {
- raw = true;
- }
-
- if ( bulk ) {
-
- // Bulk operations run against the entire set
- if ( raw ) {
- fn.call( elems, value );
- fn = null;
-
- // ...except when executing function values
- } else {
- bulk = fn;
- fn = function( elem, key, value ) {
- return bulk.call( jQuery( elem ), value );
- };
- }
- }
-
- if ( fn ) {
- for ( ; i < len; i++ ) {
- fn(
- elems[ i ], key, raw ?
- value :
- value.call( elems[ i ], i, fn( elems[ i ], key ) )
- );
- }
- }
- }
-
- if ( chainable ) {
- return elems;
- }
-
- // Gets
- if ( bulk ) {
- return fn.call( elems );
- }
-
- return len ? fn( elems[ 0 ], key ) : emptyGet;
-};
-
-
-// Matches dashed string for camelizing
-var rmsPrefix = /^-ms-/,
- rdashAlpha = /-([a-z])/g;
-
-// Used by camelCase as callback to replace()
-function fcamelCase( all, letter ) {
- return letter.toUpperCase();
-}
-
-// Convert dashed to camelCase; used by the css and data modules
-// Support: IE <=9 - 11, Edge 12 - 15
-// Microsoft forgot to hump their vendor prefix (#9572)
-function camelCase( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-}
-var acceptData = function( owner ) {
-
- // Accepts only:
- // - Node
- // - Node.ELEMENT_NODE
- // - Node.DOCUMENT_NODE
- // - Object
- // - Any
- return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
-};
-
-
-
-
-function Data() {
- this.expando = jQuery.expando + Data.uid++;
-}
-
-Data.uid = 1;
-
-Data.prototype = {
-
- cache: function( owner ) {
-
- // Check if the owner object already has a cache
- var value = owner[ this.expando ];
-
- // If not, create one
- if ( !value ) {
- value = {};
-
- // We can accept data for non-element nodes in modern browsers,
- // but we should not, see #8335.
- // Always return an empty object.
- if ( acceptData( owner ) ) {
-
- // If it is a node unlikely to be stringify-ed or looped over
- // use plain assignment
- if ( owner.nodeType ) {
- owner[ this.expando ] = value;
-
- // Otherwise secure it in a non-enumerable property
- // configurable must be true to allow the property to be
- // deleted when data is removed
- } else {
- Object.defineProperty( owner, this.expando, {
- value: value,
- configurable: true
- } );
- }
- }
- }
-
- return value;
- },
- set: function( owner, data, value ) {
- var prop,
- cache = this.cache( owner );
-
- // Handle: [ owner, key, value ] args
- // Always use camelCase key (gh-2257)
- if ( typeof data === "string" ) {
- cache[ camelCase( data ) ] = value;
-
- // Handle: [ owner, { properties } ] args
- } else {
-
- // Copy the properties one-by-one to the cache object
- for ( prop in data ) {
- cache[ camelCase( prop ) ] = data[ prop ];
- }
- }
- return cache;
- },
- get: function( owner, key ) {
- return key === undefined ?
- this.cache( owner ) :
-
- // Always use camelCase key (gh-2257)
- owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
- },
- access: function( owner, key, value ) {
-
- // In cases where either:
- //
- // 1. No key was specified
- // 2. A string key was specified, but no value provided
- //
- // Take the "read" path and allow the get method to determine
- // which value to return, respectively either:
- //
- // 1. The entire cache object
- // 2. The data stored at the key
- //
- if ( key === undefined ||
- ( ( key && typeof key === "string" ) && value === undefined ) ) {
-
- return this.get( owner, key );
- }
-
- // When the key is not a string, or both a key and value
- // are specified, set or extend (existing objects) with either:
- //
- // 1. An object of properties
- // 2. A key and value
- //
- this.set( owner, key, value );
-
- // Since the "set" path can have two possible entry points
- // return the expected data based on which path was taken[*]
- return value !== undefined ? value : key;
- },
- remove: function( owner, key ) {
- var i,
- cache = owner[ this.expando ];
-
- if ( cache === undefined ) {
- return;
- }
-
- if ( key !== undefined ) {
-
- // Support array or space separated string of keys
- if ( Array.isArray( key ) ) {
-
- // If key is an array of keys...
- // We always set camelCase keys, so remove that.
- key = key.map( camelCase );
- } else {
- key = camelCase( key );
-
- // If a key with the spaces exists, use it.
- // Otherwise, create an array by matching non-whitespace
- key = key in cache ?
- [ key ] :
- ( key.match( rnothtmlwhite ) || [] );
- }
-
- i = key.length;
-
- while ( i-- ) {
- delete cache[ key[ i ] ];
- }
- }
-
- // Remove the expando if there's no more data
- if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
-
- // Support: Chrome <=35 - 45
- // Webkit & Blink performance suffers when deleting properties
- // from DOM nodes, so set to undefined instead
- // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
- if ( owner.nodeType ) {
- owner[ this.expando ] = undefined;
- } else {
- delete owner[ this.expando ];
- }
- }
- },
- hasData: function( owner ) {
- var cache = owner[ this.expando ];
- return cache !== undefined && !jQuery.isEmptyObject( cache );
- }
-};
-var dataPriv = new Data();
-
-var dataUser = new Data();
-
-
-
-// Implementation Summary
-//
-// 1. Enforce API surface and semantic compatibility with 1.9.x branch
-// 2. Improve the module's maintainability by reducing the storage
-// paths to a single mechanism.
-// 3. Use the same single mechanism to support "private" and "user" data.
-// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
-// 5. Avoid exposing implementation details on user objects (eg. expando properties)
-// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
- rmultiDash = /[A-Z]/g;
-
-function getData( data ) {
- if ( data === "true" ) {
- return true;
- }
-
- if ( data === "false" ) {
- return false;
- }
-
- if ( data === "null" ) {
- return null;
- }
-
- // Only convert to a number if it doesn't change the string
- if ( data === +data + "" ) {
- return +data;
- }
-
- if ( rbrace.test( data ) ) {
- return JSON.parse( data );
- }
-
- return data;
-}
-
-function dataAttr( elem, key, data ) {
- var name;
-
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
- name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = getData( data );
- } catch ( e ) {}
-
- // Make sure we set the data so it isn't changed later
- dataUser.set( elem, key, data );
- } else {
- data = undefined;
- }
- }
- return data;
-}
-
-jQuery.extend( {
- hasData: function( elem ) {
- return dataUser.hasData( elem ) || dataPriv.hasData( elem );
- },
-
- data: function( elem, name, data ) {
- return dataUser.access( elem, name, data );
- },
-
- removeData: function( elem, name ) {
- dataUser.remove( elem, name );
- },
-
- // TODO: Now that all calls to _data and _removeData have been replaced
- // with direct calls to dataPriv methods, these can be deprecated.
- _data: function( elem, name, data ) {
- return dataPriv.access( elem, name, data );
- },
-
- _removeData: function( elem, name ) {
- dataPriv.remove( elem, name );
- }
-} );
-
-jQuery.fn.extend( {
- data: function( key, value ) {
- var i, name, data,
- elem = this[ 0 ],
- attrs = elem && elem.attributes;
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = dataUser.get( elem );
-
- if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
- i = attrs.length;
- while ( i-- ) {
-
- // Support: IE 11 only
- // The attrs elements can be null (#14894)
- if ( attrs[ i ] ) {
- name = attrs[ i ].name;
- if ( name.indexOf( "data-" ) === 0 ) {
- name = camelCase( name.slice( 5 ) );
- dataAttr( elem, name, data[ name ] );
- }
- }
- }
- dataPriv.set( elem, "hasDataAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each( function() {
- dataUser.set( this, key );
- } );
- }
-
- return access( this, function( value ) {
- var data;
-
- // The calling jQuery object (element matches) is not empty
- // (and therefore has an element appears at this[ 0 ]) and the
- // `value` parameter was not undefined. An empty jQuery object
- // will result in `undefined` for elem = this[ 0 ] which will
- // throw an exception if an attempt to read a data cache is made.
- if ( elem && value === undefined ) {
-
- // Attempt to get data from the cache
- // The key will always be camelCased in Data
- data = dataUser.get( elem, key );
- if ( data !== undefined ) {
- return data;
- }
-
- // Attempt to "discover" the data in
- // HTML5 custom data-* attrs
- data = dataAttr( elem, key );
- if ( data !== undefined ) {
- return data;
- }
-
- // We tried really hard, but the data doesn't exist.
- return;
- }
-
- // Set the data...
- this.each( function() {
-
- // We always store the camelCased key
- dataUser.set( this, key, value );
- } );
- }, null, value, arguments.length > 1, null, true );
- },
-
- removeData: function( key ) {
- return this.each( function() {
- dataUser.remove( this, key );
- } );
- }
-} );
-
-
-jQuery.extend( {
- queue: function( elem, type, data ) {
- var queue;
-
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = dataPriv.get( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !queue || Array.isArray( data ) ) {
- queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
-
- if ( fn ) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- // Clear up the last queue stop function
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
-
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- // Not public - generate a queueHooks object, or return the current one
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
- empty: jQuery.Callbacks( "once memory" ).add( function() {
- dataPriv.remove( elem, [ type + "queue", key ] );
- } )
- } );
- }
-} );
-
-jQuery.fn.extend( {
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[ 0 ], type );
- }
-
- return data === undefined ?
- this :
- this.each( function() {
- var queue = jQuery.queue( this, type, data );
-
- // Ensure a hooks for this queue
- jQuery._queueHooks( this, type );
-
- if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- } );
- },
- dequeue: function( type ) {
- return this.each( function() {
- jQuery.dequeue( this, type );
- } );
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
-
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
-
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while ( i-- ) {
- tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
-} );
-var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
-
-var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
-
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var documentElement = document.documentElement;
-
-
-
- var isAttached = function( elem ) {
- return jQuery.contains( elem.ownerDocument, elem );
- },
- composed = { composed: true };
-
- // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
- // Check attachment across shadow DOM boundaries when possible (gh-3504)
- // Support: iOS 10.0-10.2 only
- // Early iOS 10 versions support `attachShadow` but not `getRootNode`,
- // leading to errors. We need to check for `getRootNode`.
- if ( documentElement.getRootNode ) {
- isAttached = function( elem ) {
- return jQuery.contains( elem.ownerDocument, elem ) ||
- elem.getRootNode( composed ) === elem.ownerDocument;
- };
- }
-var isHiddenWithinTree = function( elem, el ) {
-
- // isHiddenWithinTree might be called from jQuery#filter function;
- // in that case, element will be second argument
- elem = el || elem;
-
- // Inline style trumps all
- return elem.style.display === "none" ||
- elem.style.display === "" &&
-
- // Otherwise, check computed style
- // Support: Firefox <=43 - 45
- // Disconnected elements can have computed display: none, so first confirm that elem is
- // in the document.
- isAttached( elem ) &&
-
- jQuery.css( elem, "display" ) === "none";
- };
-
-var swap = function( elem, options, callback, args ) {
- var ret, name,
- old = {};
-
- // Remember the old values, and insert the new ones
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- ret = callback.apply( elem, args || [] );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
-
- return ret;
-};
-
-
-
-
-function adjustCSS( elem, prop, valueParts, tween ) {
- var adjusted, scale,
- maxIterations = 20,
- currentValue = tween ?
- function() {
- return tween.cur();
- } :
- function() {
- return jQuery.css( elem, prop, "" );
- },
- initial = currentValue(),
- unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
- // Starting value computation is required for potential unit mismatches
- initialInUnit = elem.nodeType &&
- ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
- rcssNum.exec( jQuery.css( elem, prop ) );
-
- if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
-
- // Support: Firefox <=54
- // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
- initial = initial / 2;
-
- // Trust units reported by jQuery.css
- unit = unit || initialInUnit[ 3 ];
-
- // Iteratively approximate from a nonzero starting point
- initialInUnit = +initial || 1;
-
- while ( maxIterations-- ) {
-
- // Evaluate and update our best guess (doubling guesses that zero out).
- // Finish if the scale equals or crosses 1 (making the old*new product non-positive).
- jQuery.style( elem, prop, initialInUnit + unit );
- if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
- maxIterations = 0;
- }
- initialInUnit = initialInUnit / scale;
-
- }
-
- initialInUnit = initialInUnit * 2;
- jQuery.style( elem, prop, initialInUnit + unit );
-
- // Make sure we update the tween properties later on
- valueParts = valueParts || [];
- }
-
- if ( valueParts ) {
- initialInUnit = +initialInUnit || +initial || 0;
-
- // Apply relative offset (+=/-=) if specified
- adjusted = valueParts[ 1 ] ?
- initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
- +valueParts[ 2 ];
- if ( tween ) {
- tween.unit = unit;
- tween.start = initialInUnit;
- tween.end = adjusted;
- }
- }
- return adjusted;
-}
-
-
-var defaultDisplayMap = {};
-
-function getDefaultDisplay( elem ) {
- var temp,
- doc = elem.ownerDocument,
- nodeName = elem.nodeName,
- display = defaultDisplayMap[ nodeName ];
-
- if ( display ) {
- return display;
- }
-
- temp = doc.body.appendChild( doc.createElement( nodeName ) );
- display = jQuery.css( temp, "display" );
-
- temp.parentNode.removeChild( temp );
-
- if ( display === "none" ) {
- display = "block";
- }
- defaultDisplayMap[ nodeName ] = display;
-
- return display;
-}
-
-function showHide( elements, show ) {
- var display, elem,
- values = [],
- index = 0,
- length = elements.length;
-
- // Determine new display value for elements that need to change
- for ( ; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
-
- display = elem.style.display;
- if ( show ) {
-
- // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
- // check is required in this first loop unless we have a nonempty display value (either
- // inline or about-to-be-restored)
- if ( display === "none" ) {
- values[ index ] = dataPriv.get( elem, "display" ) || null;
- if ( !values[ index ] ) {
- elem.style.display = "";
- }
- }
- if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
- values[ index ] = getDefaultDisplay( elem );
- }
- } else {
- if ( display !== "none" ) {
- values[ index ] = "none";
-
- // Remember what we're overwriting
- dataPriv.set( elem, "display", display );
- }
- }
- }
-
- // Set the display of the elements in a second loop to avoid constant reflow
- for ( index = 0; index < length; index++ ) {
- if ( values[ index ] != null ) {
- elements[ index ].style.display = values[ index ];
- }
- }
-
- return elements;
-}
-
-jQuery.fn.extend( {
- show: function() {
- return showHide( this, true );
- },
- hide: function() {
- return showHide( this );
- },
- toggle: function( state ) {
- if ( typeof state === "boolean" ) {
- return state ? this.show() : this.hide();
- }
-
- return this.each( function() {
- if ( isHiddenWithinTree( this ) ) {
- jQuery( this ).show();
- } else {
- jQuery( this ).hide();
- }
- } );
- }
-} );
-var rcheckableType = ( /^(?:checkbox|radio)$/i );
-
-var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
-
-var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
-
-
-
-// We have to close these tags to support XHTML (#13200)
-var wrapMap = {
-
- // Support: IE <=9 only
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
-
- // XHTML parsers do not magically insert elements in the
- // same way that tag soup parsers do. So we cannot shorten
- // this by omitting <tbody> or other required elements.
- thead: [ 1, "<table>", "</table>" ],
- col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
- _default: [ 0, "", "" ]
-};
-
-// Support: IE <=9 only
-wrapMap.optgroup = wrapMap.option;
-
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-
-function getAll( context, tag ) {
-
- // Support: IE <=9 - 11 only
- // Use typeof to avoid zero-argument method invocation on host objects (#15151)
- var ret;
-
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- ret = context.getElementsByTagName( tag || "*" );
-
- } else if ( typeof context.querySelectorAll !== "undefined" ) {
- ret = context.querySelectorAll( tag || "*" );
-
- } else {
- ret = [];
- }
-
- if ( tag === undefined || tag && nodeName( context, tag ) ) {
- return jQuery.merge( [ context ], ret );
- }
-
- return ret;
-}
-
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
- var i = 0,
- l = elems.length;
-
- for ( ; i < l; i++ ) {
- dataPriv.set(
- elems[ i ],
- "globalEval",
- !refElements || dataPriv.get( refElements[ i ], "globalEval" )
- );
- }
-}
-
-
-var rhtml = /<|&#?\w+;/;
-
-function buildFragment( elems, context, scripts, selection, ignored ) {
- var elem, tmp, tag, wrap, attached, j,
- fragment = context.createDocumentFragment(),
- nodes = [],
- i = 0,
- l = elems.length;
-
- for ( ; i < l; i++ ) {
- elem = elems[ i ];
-
- if ( elem || elem === 0 ) {
-
- // Add nodes directly
- if ( toType( elem ) === "object" ) {
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
- // Convert non-html into a text node
- } else if ( !rhtml.test( elem ) ) {
- nodes.push( context.createTextNode( elem ) );
-
- // Convert html into DOM nodes
- } else {
- tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
-
- // Deserialize a standard representation
- tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
- tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
-
- // Descend through wrappers to the right content
- j = wrap[ 0 ];
- while ( j-- ) {
- tmp = tmp.lastChild;
- }
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( nodes, tmp.childNodes );
-
- // Remember the top-level container
- tmp = fragment.firstChild;
-
- // Ensure the created nodes are orphaned (#12392)
- tmp.textContent = "";
- }
- }
- }
-
- // Remove wrapper from fragment
- fragment.textContent = "";
-
- i = 0;
- while ( ( elem = nodes[ i++ ] ) ) {
-
- // Skip elements already in the context collection (trac-4087)
- if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
- if ( ignored ) {
- ignored.push( elem );
- }
- continue;
- }
-
- attached = isAttached( elem );
-
- // Append to fragment
- tmp = getAll( fragment.appendChild( elem ), "script" );
-
- // Preserve script evaluation history
- if ( attached ) {
- setGlobalEval( tmp );
- }
-
- // Capture executables
- if ( scripts ) {
- j = 0;
- while ( ( elem = tmp[ j++ ] ) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
- }
- }
-
- return fragment;
-}
-
-
-( function() {
- var fragment = document.createDocumentFragment(),
- div = fragment.appendChild( document.createElement( "div" ) ),
- input = document.createElement( "input" );
-
- // Support: Android 4.0 - 4.3 only
- // Check state lost if the name is set (#11217)
- // Support: Windows Web Apps (WWA)
- // `name` and `type` must use .setAttribute for WWA (#14901)
- input.setAttribute( "type", "radio" );
- input.setAttribute( "checked", "checked" );
- input.setAttribute( "name", "t" );
-
- div.appendChild( input );
-
- // Support: Android <=4.1 only
- // Older WebKit doesn't clone checked state correctly in fragments
- support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Support: IE <=11 only
- // Make sure textarea (and checkbox) defaultValue is properly cloned
- div.innerHTML = "<textarea>x</textarea>";
- support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-} )();
-
-
-var
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
-
-function returnTrue() {
- return true;
-}
-
-function returnFalse() {
- return false;
-}
-
-// Support: IE <=9 - 11+
-// focus() and blur() are asynchronous, except when they are no-op.
-// So expect focus to be synchronous when the element is already active,
-// and blur to be synchronous when the element is not already active.
-// (focus and blur are always synchronous in other supported browsers,
-// this just defines when we can count on it).
-function expectSync( elem, type ) {
- return ( elem === safeActiveElement() ) === ( type === "focus" );
-}
-
-// Support: IE <=9 only
-// Accessing document.activeElement can throw unexpectedly
-// https://bugs.jquery.com/ticket/13393
-function safeActiveElement() {
- try {
- return document.activeElement;
- } catch ( err ) { }
-}
-
-function on( elem, types, selector, data, fn, one ) {
- var origFn, type;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
-
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
-
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- on( elem, type, selector, data, types[ type ], one );
- }
- return elem;
- }
-
- if ( data == null && fn == null ) {
-
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
-
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
-
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return elem;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
-
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
-
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return elem.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- } );
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- global: {},
-
- add: function( elem, types, handler, data, selector ) {
-
- var handleObjIn, eventHandle, tmp,
- events, t, handleObj,
- special, handlers, type, namespaces, origType,
- elemData = dataPriv.get( elem );
-
- // Don't attach events to noData or text/comment nodes (but allow plain objects)
- if ( !elemData ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Ensure that invalid selectors throw exceptions at attach time
- // Evaluate against documentElement in case elem is a non-element node (e.g., document)
- if ( selector ) {
- jQuery.find.matchesSelector( documentElement, selector );
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- if ( !( events = elemData.events ) ) {
- events = elemData.events = {};
- }
- if ( !( eventHandle = elemData.handle ) ) {
- eventHandle = elemData.handle = function( e ) {
-
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
- jQuery.event.dispatch.apply( elem, arguments ) : undefined;
- };
- }
-
- // Handle multiple events separated by a space
- types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[ t ] ) || [];
- type = origType = tmp[ 1 ];
- namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
- // There *must* be a type, no attaching namespace-only handlers
- if ( !type ) {
- continue;
- }
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend( {
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join( "." )
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- if ( !( handlers = events[ type ] ) ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener if the special events handler returns false
- if ( !special.setup ||
- special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- },
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
-
- var j, origCount, tmp,
- events, t, handleObj,
- special, handlers, type, namespaces, origType,
- elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
-
- if ( !elemData || !( events = elemData.events ) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[ t ] ) || [];
- type = origType = tmp[ 1 ];
- namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector ? special.delegateType : special.bindType ) || type;
- handlers = events[ type ] || [];
- tmp = tmp[ 2 ] &&
- new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
-
- // Remove matching events
- origCount = j = handlers.length;
- while ( j-- ) {
- handleObj = handlers[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector ||
- selector === "**" && handleObj.selector ) ) {
- handlers.splice( j, 1 );
-
- if ( handleObj.selector ) {
- handlers.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( origCount && !handlers.length ) {
- if ( !special.teardown ||
- special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
-
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove data and the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- dataPriv.remove( elem, "handle events" );
- }
- },
-
- dispatch: function( nativeEvent ) {
-
- // Make a writable jQuery.Event from the native event object
- var event = jQuery.event.fix( nativeEvent );
-
- var i, j, ret, matched, handleObj, handlerQueue,
- args = new Array( arguments.length ),
- handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
- special = jQuery.event.special[ event.type ] || {};
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[ 0 ] = event;
-
- for ( i = 1; i < arguments.length; i++ ) {
- args[ i ] = arguments[ i ];
- }
-
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
- // Run delegates first; they may want to stop propagation beneath us
- i = 0;
- while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
- event.currentTarget = matched.elem;
-
- j = 0;
- while ( ( handleObj = matched.handlers[ j++ ] ) &&
- !event.isImmediatePropagationStopped() ) {
-
- // If the event is namespaced, then each handler is only invoked if it is
- // specially universal or its namespaces are a superset of the event's.
- if ( !event.rnamespace || handleObj.namespace === false ||
- event.rnamespace.test( handleObj.namespace ) ) {
-
- event.handleObj = handleObj;
- event.data = handleObj.data;
-
- ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
- handleObj.handler ).apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- if ( ( event.result = ret ) === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- handlers: function( event, handlers ) {
- var i, handleObj, sel, matchedHandlers, matchedSelectors,
- handlerQueue = [],
- delegateCount = handlers.delegateCount,
- cur = event.target;
-
- // Find delegate handlers
- if ( delegateCount &&
-
- // Support: IE <=9
- // Black-hole SVG <use> instance trees (trac-13180)
- cur.nodeType &&
-
- // Support: Firefox <=42
- // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
- // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
- // Support: IE 11 only
- // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
- !( event.type === "click" && event.button >= 1 ) ) {
-
- for ( ; cur !== this; cur = cur.parentNode || this ) {
-
- // Don't check non-elements (#13208)
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
- if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
- matchedHandlers = [];
- matchedSelectors = {};
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
-
- // Don't conflict with Object.prototype properties (#13203)
- sel = handleObj.selector + " ";
-
- if ( matchedSelectors[ sel ] === undefined ) {
- matchedSelectors[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) > -1 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( matchedSelectors[ sel ] ) {
- matchedHandlers.push( handleObj );
- }
- }
- if ( matchedHandlers.length ) {
- handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- cur = this;
- if ( delegateCount < handlers.length ) {
- handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
- }
-
- return handlerQueue;
- },
-
- addProp: function( name, hook ) {
- Object.defineProperty( jQuery.Event.prototype, name, {
- enumerable: true,
- configurable: true,
-
- get: isFunction( hook ) ?
- function() {
- if ( this.originalEvent ) {
- return hook( this.originalEvent );
- }
- } :
- function() {
- if ( this.originalEvent ) {
- return this.originalEvent[ name ];
- }
- },
-
- set: function( value ) {
- Object.defineProperty( this, name, {
- enumerable: true,
- configurable: true,
- writable: true,
- value: value
- } );
- }
- } );
- },
-
- fix: function( originalEvent ) {
- return originalEvent[ jQuery.expando ] ?
- originalEvent :
- new jQuery.Event( originalEvent );
- },
-
- special: {
- load: {
-
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
- click: {
-
- // Utilize native event to ensure correct state for checkable inputs
- setup: function( data ) {
-
- // For mutual compressibility with _default, replace `this` access with a local var.
- // `|| data` is dead code meant only to preserve the variable through minification.
- var el = this || data;
-
- // Claim the first handler
- if ( rcheckableType.test( el.type ) &&
- el.click && nodeName( el, "input" ) ) {
-
- // dataPriv.set( el, "click", ... )
- leverageNative( el, "click", returnTrue );
- }
-
- // Return false to allow normal processing in the caller
- return false;
- },
- trigger: function( data ) {
-
- // For mutual compressibility with _default, replace `this` access with a local var.
- // `|| data` is dead code meant only to preserve the variable through minification.
- var el = this || data;
-
- // Force setup before triggering a click
- if ( rcheckableType.test( el.type ) &&
- el.click && nodeName( el, "input" ) ) {
-
- leverageNative( el, "click" );
- }
-
- // Return non-false to allow normal event-path propagation
- return true;
- },
-
- // For cross-browser consistency, suppress native .click() on links
- // Also prevent it if we're currently inside a leveraged native-event stack
- _default: function( event ) {
- var target = event.target;
- return rcheckableType.test( target.type ) &&
- target.click && nodeName( target, "input" ) &&
- dataPriv.get( target, "click" ) ||
- nodeName( target, "a" );
- }
- },
-
- beforeunload: {
- postDispatch: function( event ) {
-
- // Support: Firefox 20+
- // Firefox doesn't alert if the returnValue field is not set.
- if ( event.result !== undefined && event.originalEvent ) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- }
-};
-
-// Ensure the presence of an event listener that handles manually-triggered
-// synthetic events by interrupting progress until reinvoked in response to
-// *native* events that it fires directly, ensuring that state changes have
-// already occurred before other listeners are invoked.
-function leverageNative( el, type, expectSync ) {
-
- // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
- if ( !expectSync ) {
- if ( dataPriv.get( el, type ) === undefined ) {
- jQuery.event.add( el, type, returnTrue );
- }
- return;
- }
-
- // Register the controller as a special universal handler for all event namespaces
- dataPriv.set( el, type, false );
- jQuery.event.add( el, type, {
- namespace: false,
- handler: function( event ) {
- var notAsync, result,
- saved = dataPriv.get( this, type );
-
- if ( ( event.isTrigger & 1 ) && this[ type ] ) {
-
- // Interrupt processing of the outer synthetic .trigger()ed event
- // Saved data should be false in such cases, but might be a leftover capture object
- // from an async native handler (gh-4350)
- if ( !saved.length ) {
-
- // Store arguments for use when handling the inner native event
- // There will always be at least one argument (an event object), so this array
- // will not be confused with a leftover capture object.
- saved = slice.call( arguments );
- dataPriv.set( this, type, saved );
-
- // Trigger the native event and capture its result
- // Support: IE <=9 - 11+
- // focus() and blur() are asynchronous
- notAsync = expectSync( this, type );
- this[ type ]();
- result = dataPriv.get( this, type );
- if ( saved !== result || notAsync ) {
- dataPriv.set( this, type, false );
- } else {
- result = {};
- }
- if ( saved !== result ) {
-
- // Cancel the outer synthetic event
- event.stopImmediatePropagation();
- event.preventDefault();
- return result.value;
- }
-
- // If this is an inner synthetic event for an event with a bubbling surrogate
- // (focus or blur), assume that the surrogate already propagated from triggering the
- // native event and prevent that from happening again here.
- // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
- // bubbling surrogate propagates *after* the non-bubbling base), but that seems
- // less bad than duplication.
- } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
- event.stopPropagation();
- }
-
- // If this is a native event triggered above, everything is now in order
- // Fire an inner synthetic event with the original arguments
- } else if ( saved.length ) {
-
- // ...and capture the result
- dataPriv.set( this, type, {
- value: jQuery.event.trigger(
-
- // Support: IE <=9 - 11+
- // Extend with the prototype to reset the above stopImmediatePropagation()
- jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
- saved.slice( 1 ),
- this
- )
- } );
-
- // Abort handling of the native event
- event.stopImmediatePropagation();
- }
- }
- } );
-}
-
-jQuery.removeEvent = function( elem, type, handle ) {
-
- // This "if" is needed for plain objects
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle );
- }
-};
-
-jQuery.Event = function( src, props ) {
-
- // Allow instantiation without the 'new' keyword
- if ( !( this instanceof jQuery.Event ) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = src.defaultPrevented ||
- src.defaultPrevented === undefined &&
-
- // Support: Android <=2.3 only
- src.returnValue === false ?
- returnTrue :
- returnFalse;
-
- // Create target properties
- // Support: Safari <=6 - 7 only
- // Target should not be a text node (#504, #13143)
- this.target = ( src.target && src.target.nodeType === 3 ) ?
- src.target.parentNode :
- src.target;
-
- this.currentTarget = src.currentTarget;
- this.relatedTarget = src.relatedTarget;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || Date.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- constructor: jQuery.Event,
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
- isSimulated: false,
-
- preventDefault: function() {
- var e = this.originalEvent;
-
- this.isDefaultPrevented = returnTrue;
-
- if ( e && !this.isSimulated ) {
- e.preventDefault();
- }
- },
- stopPropagation: function() {
- var e = this.originalEvent;
-
- this.isPropagationStopped = returnTrue;
-
- if ( e && !this.isSimulated ) {
- e.stopPropagation();
- }
- },
- stopImmediatePropagation: function() {
- var e = this.originalEvent;
-
- this.isImmediatePropagationStopped = returnTrue;
-
- if ( e && !this.isSimulated ) {
- e.stopImmediatePropagation();
- }
-
- this.stopPropagation();
- }
-};
-
-// Includes all common event props including KeyEvent and MouseEvent specific props
-jQuery.each( {
- altKey: true,
- bubbles: true,
- cancelable: true,
- changedTouches: true,
- ctrlKey: true,
- detail: true,
- eventPhase: true,
- metaKey: true,
- pageX: true,
- pageY: true,
- shiftKey: true,
- view: true,
- "char": true,
- code: true,
- charCode: true,
- key: true,
- keyCode: true,
- button: true,
- buttons: true,
- clientX: true,
- clientY: true,
- offsetX: true,
- offsetY: true,
- pointerId: true,
- pointerType: true,
- screenX: true,
- screenY: true,
- targetTouches: true,
- toElement: true,
- touches: true,
-
- which: function( event ) {
- var button = event.button;
-
- // Add which for key events
- if ( event.which == null && rkeyEvent.test( event.type ) ) {
- return event.charCode != null ? event.charCode : event.keyCode;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
- if ( button & 1 ) {
- return 1;
- }
-
- if ( button & 2 ) {
- return 3;
- }
-
- if ( button & 4 ) {
- return 2;
- }
-
- return 0;
- }
-
- return event.which;
- }
-}, jQuery.event.addProp );
-
-jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
- jQuery.event.special[ type ] = {
-
- // Utilize native event if possible so blur/focus sequence is correct
- setup: function() {
-
- // Claim the first handler
- // dataPriv.set( this, "focus", ... )
- // dataPriv.set( this, "blur", ... )
- leverageNative( this, type, expectSync );
-
- // Return false to allow normal processing in the caller
- return false;
- },
- trigger: function() {
-
- // Force setup before trigger
- leverageNative( this, type );
-
- // Return non-false to allow normal event-path propagation
- return true;
- },
-
- delegateType: delegateType
- };
-} );
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-// so that event delegation works in jQuery.
-// Do the same for pointerenter/pointerleave and pointerover/pointerout
-//
-// Support: Safari 7 only
-// Safari sends mouseenter too often; see:
-// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
-// for the description of the bug (it existed in older Chrome versions as well).
-jQuery.each( {
- mouseenter: "mouseover",
- mouseleave: "mouseout",
- pointerenter: "pointerover",
- pointerleave: "pointerout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
- // For mouseenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-} );
-
-jQuery.fn.extend( {
-
- on: function( types, selector, data, fn ) {
- return on( this, types, selector, data, fn );
- },
- one: function( types, selector, data, fn ) {
- return on( this, types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- var handleObj, type;
- if ( types && types.preventDefault && types.handleObj ) {
-
- // ( event ) dispatched jQuery.Event
- handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ?
- handleObj.origType + "." + handleObj.namespace :
- handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
-
- // ( types-object [, selector] )
- for ( type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
-
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each( function() {
- jQuery.event.remove( this, types, fn, selector );
- } );
- }
-} );
-
-
-var
-
- /* eslint-disable max-len */
-
- // See https://github.com/eslint/eslint/issues/3229
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
-
- /* eslint-enable */
-
- // Support: IE <=10 - 11, Edge 12 - 13 only
- // In IE/Edge using regex groups here causes severe slowdowns.
- // See https://connect.microsoft.com/IE/feedback/details/1736512/
- rnoInnerhtml = /<script|<style|<link/i,
-
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
-
-// Prefer a tbody over its parent table for containing new rows
-function manipulationTarget( elem, content ) {
- if ( nodeName( elem, "table" ) &&
- nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
-
- return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
- }
-
- return elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
- elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
- return elem;
-}
-function restoreScript( elem ) {
- if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
- elem.type = elem.type.slice( 5 );
- } else {
- elem.removeAttribute( "type" );
- }
-
- return elem;
-}
-
-function cloneCopyEvent( src, dest ) {
- var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
-
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- // 1. Copy private data: events, handlers, etc.
- if ( dataPriv.hasData( src ) ) {
- pdataOld = dataPriv.access( src );
- pdataCur = dataPriv.set( dest, pdataOld );
- events = pdataOld.events;
-
- if ( events ) {
- delete pdataCur.handle;
- pdataCur.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
- }
-
- // 2. Copy user data
- if ( dataUser.hasData( src ) ) {
- udataOld = dataUser.access( src );
- udataCur = jQuery.extend( {}, udataOld );
-
- dataUser.set( dest, udataCur );
- }
-}
-
-// Fix IE bugs, see support tests
-function fixInput( src, dest ) {
- var nodeName = dest.nodeName.toLowerCase();
-
- // Fails to persist the checked state of a cloned checkbox or radio button.
- if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
- dest.checked = src.checked;
-
- // Fails to return the selected option to the default selected state when cloning options
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-}
-
-function domManip( collection, args, callback, ignored ) {
-
- // Flatten any nested arrays
- args = concat.apply( [], args );
-
- var fragment, first, scripts, hasScripts, node, doc,
- i = 0,
- l = collection.length,
- iNoClone = l - 1,
- value = args[ 0 ],
- valueIsFunction = isFunction( value );
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( valueIsFunction ||
- ( l > 1 && typeof value === "string" &&
- !support.checkClone && rchecked.test( value ) ) ) {
- return collection.each( function( index ) {
- var self = collection.eq( index );
- if ( valueIsFunction ) {
- args[ 0 ] = value.call( this, index, self.html() );
- }
- domManip( self, args, callback, ignored );
- } );
- }
-
- if ( l ) {
- fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
- first = fragment.firstChild;
-
- if ( fragment.childNodes.length === 1 ) {
- fragment = first;
- }
-
- // Require either new content or an interest in ignored elements to invoke the callback
- if ( first || ignored ) {
- scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
- hasScripts = scripts.length;
-
- // Use the original fragment for the last item
- // instead of the first because it can end up
- // being emptied incorrectly in certain situations (#8070).
- for ( ; i < l; i++ ) {
- node = fragment;
-
- if ( i !== iNoClone ) {
- node = jQuery.clone( node, true, true );
-
- // Keep references to cloned scripts for later restoration
- if ( hasScripts ) {
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( scripts, getAll( node, "script" ) );
- }
- }
-
- callback.call( collection[ i ], node, i );
- }
-
- if ( hasScripts ) {
- doc = scripts[ scripts.length - 1 ].ownerDocument;
-
- // Reenable scripts
- jQuery.map( scripts, restoreScript );
-
- // Evaluate executable scripts on first document insertion
- for ( i = 0; i < hasScripts; i++ ) {
- node = scripts[ i ];
- if ( rscriptType.test( node.type || "" ) &&
- !dataPriv.access( node, "globalEval" ) &&
- jQuery.contains( doc, node ) ) {
-
- if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) {
-
- // Optional AJAX dependency, but won't run scripts if not present
- if ( jQuery._evalUrl && !node.noModule ) {
- jQuery._evalUrl( node.src, {
- nonce: node.nonce || node.getAttribute( "nonce" )
- } );
- }
- } else {
- DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
- }
- }
- }
- }
- }
- }
-
- return collection;
-}
-
-function remove( elem, selector, keepData ) {
- var node,
- nodes = selector ? jQuery.filter( selector, elem ) : elem,
- i = 0;
-
- for ( ; ( node = nodes[ i ] ) != null; i++ ) {
- if ( !keepData && node.nodeType === 1 ) {
- jQuery.cleanData( getAll( node ) );
- }
-
- if ( node.parentNode ) {
- if ( keepData && isAttached( node ) ) {
- setGlobalEval( getAll( node, "script" ) );
- }
- node.parentNode.removeChild( node );
- }
- }
-
- return elem;
-}
-
-jQuery.extend( {
- htmlPrefilter: function( html ) {
- return html.replace( rxhtmlTag, "<$1></$2>" );
- },
-
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var i, l, srcElements, destElements,
- clone = elem.cloneNode( true ),
- inPage = isAttached( elem );
-
- // Fix IE cloning issues
- if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
- !jQuery.isXMLDoc( elem ) ) {
-
- // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
- destElements = getAll( clone );
- srcElements = getAll( elem );
-
- for ( i = 0, l = srcElements.length; i < l; i++ ) {
- fixInput( srcElements[ i ], destElements[ i ] );
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- if ( deepDataAndEvents ) {
- srcElements = srcElements || getAll( elem );
- destElements = destElements || getAll( clone );
-
- for ( i = 0, l = srcElements.length; i < l; i++ ) {
- cloneCopyEvent( srcElements[ i ], destElements[ i ] );
- }
- } else {
- cloneCopyEvent( elem, clone );
- }
- }
-
- // Preserve script evaluation history
- destElements = getAll( clone, "script" );
- if ( destElements.length > 0 ) {
- setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
- }
-
- // Return the cloned set
- return clone;
- },
-
- cleanData: function( elems ) {
- var data, elem, type,
- special = jQuery.event.special,
- i = 0;
-
- for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
- if ( acceptData( elem ) ) {
- if ( ( data = elem[ dataPriv.expando ] ) ) {
- if ( data.events ) {
- for ( type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
- }
-
- // Support: Chrome <=35 - 45+
- // Assign undefined instead of using delete, see Data#remove
- elem[ dataPriv.expando ] = undefined;
- }
- if ( elem[ dataUser.expando ] ) {
-
- // Support: Chrome <=35 - 45+
- // Assign undefined instead of using delete, see Data#remove
- elem[ dataUser.expando ] = undefined;
- }
- }
- }
- }
-} );
-
-jQuery.fn.extend( {
- detach: function( selector ) {
- return remove( this, selector, true );
- },
-
- remove: function( selector ) {
- return remove( this, selector );
- },
-
- text: function( value ) {
- return access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().each( function() {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- this.textContent = value;
- }
- } );
- }, null, value, arguments.length );
- },
-
- append: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.appendChild( elem );
- }
- } );
- },
-
- prepend: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.insertBefore( elem, target.firstChild );
- }
- } );
- },
-
- before: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this );
- }
- } );
- },
-
- after: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- }
- } );
- },
-
- empty: function() {
- var elem,
- i = 0;
-
- for ( ; ( elem = this[ i ] ) != null; i++ ) {
- if ( elem.nodeType === 1 ) {
-
- // Prevent memory leaks
- jQuery.cleanData( getAll( elem, false ) );
-
- // Remove any remaining nodes
- elem.textContent = "";
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map( function() {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- } );
- },
-
- html: function( value ) {
- return access( this, function( value ) {
- var elem = this[ 0 ] || {},
- i = 0,
- l = this.length;
-
- if ( value === undefined && elem.nodeType === 1 ) {
- return elem.innerHTML;
- }
-
- // See if we can take a shortcut and just use innerHTML
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
-
- value = jQuery.htmlPrefilter( value );
-
- try {
- for ( ; i < l; i++ ) {
- elem = this[ i ] || {};
-
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch ( e ) {}
- }
-
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
-
- replaceWith: function() {
- var ignored = [];
-
- // Make the changes, replacing each non-ignored context element with the new content
- return domManip( this, arguments, function( elem ) {
- var parent = this.parentNode;
-
- if ( jQuery.inArray( this, ignored ) < 0 ) {
- jQuery.cleanData( getAll( this ) );
- if ( parent ) {
- parent.replaceChild( elem, this );
- }
- }
-
- // Force callback invocation
- }, ignored );
- }
-} );
-
-jQuery.each( {
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var elems,
- ret = [],
- insert = jQuery( selector ),
- last = insert.length - 1,
- i = 0;
-
- for ( ; i <= last; i++ ) {
- elems = i === last ? this : this.clone( true );
- jQuery( insert[ i ] )[ original ]( elems );
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // .get() because push.apply(_, arraylike) throws on ancient WebKit
- push.apply( ret, elems.get() );
- }
-
- return this.pushStack( ret );
- };
-} );
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-var getStyles = function( elem ) {
-
- // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
- // IE throws on elements created in popups
- // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
- var view = elem.ownerDocument.defaultView;
-
- if ( !view || !view.opener ) {
- view = window;
- }
-
- return view.getComputedStyle( elem );
- };
-
-var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
-
-
-
-( function() {
-
- // Executing both pixelPosition & boxSizingReliable tests require only one layout
- // so they're executed at the same time to save the second computation.
- function computeStyleTests() {
-
- // This is a singleton, we need to execute it only once
- if ( !div ) {
- return;
- }
-
- container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
- "margin-top:1px;padding:0;border:0";
- div.style.cssText =
- "position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
- "margin:auto;border:1px;padding:1px;" +
- "width:60%;top:1%";
- documentElement.appendChild( container ).appendChild( div );
-
- var divStyle = window.getComputedStyle( div );
- pixelPositionVal = divStyle.top !== "1%";
-
- // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
- reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
-
- // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
- // Some styles come back with percentage values, even though they shouldn't
- div.style.right = "60%";
- pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
-
- // Support: IE 9 - 11 only
- // Detect misreporting of content dimensions for box-sizing:border-box elements
- boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
-
- // Support: IE 9 only
- // Detect overflow:scroll screwiness (gh-3699)
- // Support: Chrome <=64
- // Don't get tricked when zoom affects offsetWidth (gh-4029)
- div.style.position = "absolute";
- scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
-
- documentElement.removeChild( container );
-
- // Nullify the div so it wouldn't be stored in the memory and
- // it will also be a sign that checks already performed
- div = null;
- }
-
- function roundPixelMeasures( measure ) {
- return Math.round( parseFloat( measure ) );
- }
-
- var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
- reliableMarginLeftVal,
- container = document.createElement( "div" ),
- div = document.createElement( "div" );
-
- // Finish early in limited (non-browser) environments
- if ( !div.style ) {
- return;
- }
-
- // Support: IE <=9 - 11 only
- // Style of cloned element affects source element cloned (#8908)
- div.style.backgroundClip = "content-box";
- div.cloneNode( true ).style.backgroundClip = "";
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
- jQuery.extend( support, {
- boxSizingReliable: function() {
- computeStyleTests();
- return boxSizingReliableVal;
- },
- pixelBoxStyles: function() {
- computeStyleTests();
- return pixelBoxStylesVal;
- },
- pixelPosition: function() {
- computeStyleTests();
- return pixelPositionVal;
- },
- reliableMarginLeft: function() {
- computeStyleTests();
- return reliableMarginLeftVal;
- },
- scrollboxSize: function() {
- computeStyleTests();
- return scrollboxSizeVal;
- }
- } );
-} )();
-
-
-function curCSS( elem, name, computed ) {
- var width, minWidth, maxWidth, ret,
-
- // Support: Firefox 51+
- // Retrieving style before computed somehow
- // fixes an issue with getting wrong values
- // on detached elements
- style = elem.style;
-
- computed = computed || getStyles( elem );
-
- // getPropertyValue is needed for:
- // .css('filter') (IE 9 only, #12537)
- // .css('--customProperty) (#3144)
- if ( computed ) {
- ret = computed.getPropertyValue( name ) || computed[ name ];
-
- if ( ret === "" && !isAttached( elem ) ) {
- ret = jQuery.style( elem, name );
- }
-
- // A tribute to the "awesome hack by Dean Edwards"
- // Android Browser returns percentage for some values,
- // but width seems to be reliably pixels.
- // This is against the CSSOM draft spec:
- // https://drafts.csswg.org/cssom/#resolved-values
- if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
-
- // Remember the original values
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- // Put in the new values to get a computed value out
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- // Revert the changed values
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
- return ret !== undefined ?
-
- // Support: IE <=9 - 11 only
- // IE returns zIndex value as an integer.
- ret + "" :
- ret;
-}
-
-
-function addGetHookIf( conditionFn, hookFn ) {
-
- // Define the hook, we'll check on the first run if it's really needed.
- return {
- get: function() {
- if ( conditionFn() ) {
-
- // Hook not needed (or it's not possible to use it due
- // to missing dependency), remove it.
- delete this.get;
- return;
- }
-
- // Hook needed; redefine it so that the support test is not executed again.
- return ( this.get = hookFn ).apply( this, arguments );
- }
- };
-}
-
-
-var cssPrefixes = [ "Webkit", "Moz", "ms" ],
- emptyStyle = document.createElement( "div" ).style,
- vendorProps = {};
-
-// Return a vendor-prefixed property or undefined
-function vendorPropName( name ) {
-
- // Check for vendor prefixed names
- var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
- i = cssPrefixes.length;
-
- while ( i-- ) {
- name = cssPrefixes[ i ] + capName;
- if ( name in emptyStyle ) {
- return name;
- }
- }
-}
-
-// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
-function finalPropName( name ) {
- var final = jQuery.cssProps[ name ] || vendorProps[ name ];
-
- if ( final ) {
- return final;
- }
- if ( name in emptyStyle ) {
- return name;
- }
- return vendorProps[ name ] = vendorPropName( name ) || name;
-}
-
-
-var
-
- // Swappable if display is none or starts with table
- // except "table", "table-cell", or "table-caption"
- // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- rcustomProp = /^--/,
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: "0",
- fontWeight: "400"
- };
-
-function setPositiveNumber( elem, value, subtract ) {
-
- // Any relative (+/-) values have already been
- // normalized at this point
- var matches = rcssNum.exec( value );
- return matches ?
-
- // Guard against undefined "subtract", e.g., when used as in cssHooks
- Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
- value;
-}
-
-function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
- var i = dimension === "width" ? 1 : 0,
- extra = 0,
- delta = 0;
-
- // Adjustment may not be necessary
- if ( box === ( isBorderBox ? "border" : "content" ) ) {
- return 0;
- }
-
- for ( ; i < 4; i += 2 ) {
-
- // Both box models exclude margin
- if ( box === "margin" ) {
- delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
- }
-
- // If we get here with a content-box, we're seeking "padding" or "border" or "margin"
- if ( !isBorderBox ) {
-
- // Add padding
- delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
- // For "border" or "margin", add border
- if ( box !== "padding" ) {
- delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-
- // But still keep track of it otherwise
- } else {
- extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
-
- // If we get here with a border-box (content + padding + border), we're seeking "content" or
- // "padding" or "margin"
- } else {
-
- // For "content", subtract padding
- if ( box === "content" ) {
- delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
- }
-
- // For "content" or "padding", subtract border
- if ( box !== "margin" ) {
- delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- }
- }
-
- // Account for positive content-box scroll gutter when requested by providing computedVal
- if ( !isBorderBox && computedVal >= 0 ) {
-
- // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
- // Assuming integer scroll gutter, subtract the rest and round down
- delta += Math.max( 0, Math.ceil(
- elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
- computedVal -
- delta -
- extra -
- 0.5
-
- // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
- // Use an explicit zero to avoid NaN (gh-3964)
- ) ) || 0;
- }
-
- return delta;
-}
-
-function getWidthOrHeight( elem, dimension, extra ) {
-
- // Start with computed style
- var styles = getStyles( elem ),
-
- // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
- // Fake content-box until we know it's needed to know the true value.
- boxSizingNeeded = !support.boxSizingReliable() || extra,
- isBorderBox = boxSizingNeeded &&
- jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- valueIsBorderBox = isBorderBox,
-
- val = curCSS( elem, dimension, styles ),
- offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
-
- // Support: Firefox <=54
- // Return a confounding non-pixel value or feign ignorance, as appropriate.
- if ( rnumnonpx.test( val ) ) {
- if ( !extra ) {
- return val;
- }
- val = "auto";
- }
-
-
- // Fall back to offsetWidth/offsetHeight when value is "auto"
- // This happens for inline elements with no explicit setting (gh-3571)
- // Support: Android <=4.1 - 4.3 only
- // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
- // Support: IE 9-11 only
- // Also use offsetWidth/offsetHeight for when box sizing is unreliable
- // We use getClientRects() to check for hidden/disconnected.
- // In those cases, the computed value can be trusted to be border-box
- if ( ( !support.boxSizingReliable() && isBorderBox ||
- val === "auto" ||
- !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
- elem.getClientRects().length ) {
-
- isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
- // Where available, offsetWidth/offsetHeight approximate border box dimensions.
- // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
- // retrieved value as a content box dimension.
- valueIsBorderBox = offsetProp in elem;
- if ( valueIsBorderBox ) {
- val = elem[ offsetProp ];
- }
- }
-
- // Normalize "" and auto
- val = parseFloat( val ) || 0;
-
- // Adjust for the element's box model
- return ( val +
- boxModelAdjustment(
- elem,
- dimension,
- extra || ( isBorderBox ? "border" : "content" ),
- valueIsBorderBox,
- styles,
-
- // Provide the current computed size to request scroll gutter calculation (gh-3589)
- val
- )
- ) + "px";
-}
-
-jQuery.extend( {
-
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
-
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
- }
- }
- }
- },
-
- // Don't automatically add "px" to these possibly-unitless properties
- cssNumber: {
- "animationIterationCount": true,
- "columnCount": true,
- "fillOpacity": true,
- "flexGrow": true,
- "flexShrink": true,
- "fontWeight": true,
- "gridArea": true,
- "gridColumn": true,
- "gridColumnEnd": true,
- "gridColumnStart": true,
- "gridRow": true,
- "gridRowEnd": true,
- "gridRowStart": true,
- "lineHeight": true,
- "opacity": true,
- "order": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {},
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
-
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, hooks,
- origName = camelCase( name ),
- isCustomProp = rcustomProp.test( name ),
- style = elem.style;
-
- // Make sure that we're working with the right name. We don't
- // want to query the value if it is a CSS custom property
- // since they are user-defined.
- if ( !isCustomProp ) {
- name = finalPropName( origName );
- }
-
- // Gets hook for the prefixed version, then unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // Convert "+=" or "-=" to relative numbers (#7345)
- if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
- value = adjustCSS( elem, name, ret );
-
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that null and NaN values aren't set (#7116)
- if ( value == null || value !== value ) {
- return;
- }
-
- // If a number was passed in, add the unit (except for certain CSS properties)
- // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
- // "px" to a few hardcoded values.
- if ( type === "number" && !isCustomProp ) {
- value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
- }
-
- // background-* props affect original clone's values
- if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
- style[ name ] = "inherit";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !( "set" in hooks ) ||
- ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
-
- if ( isCustomProp ) {
- style.setProperty( name, value );
- } else {
- style[ name ] = value;
- }
- }
-
- } else {
-
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks &&
- ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
-
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra, styles ) {
- var val, num, hooks,
- origName = camelCase( name ),
- isCustomProp = rcustomProp.test( name );
-
- // Make sure that we're working with the right name. We don't
- // want to modify the value if it is a CSS custom property
- // since they are user-defined.
- if ( !isCustomProp ) {
- name = finalPropName( origName );
- }
-
- // Try prefixed name followed by the unprefixed name
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks ) {
- val = hooks.get( elem, true, extra );
- }
-
- // Otherwise, if a way to get the computed value exists, use that
- if ( val === undefined ) {
- val = curCSS( elem, name, styles );
- }
-
- // Convert "normal" to computed value
- if ( val === "normal" && name in cssNormalTransform ) {
- val = cssNormalTransform[ name ];
- }
-
- // Make numeric if forced or a qualifier was provided and val looks numeric
- if ( extra === "" || extra ) {
- num = parseFloat( val );
- return extra === true || isFinite( num ) ? num || 0 : val;
- }
-
- return val;
- }
-} );
-
-jQuery.each( [ "height", "width" ], function( i, dimension ) {
- jQuery.cssHooks[ dimension ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
-
- // Certain elements can have dimension info if we invisibly show them
- // but it must have a current display style that would benefit
- return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
-
- // Support: Safari 8+
- // Table columns in Safari have non-zero offsetWidth & zero
- // getBoundingClientRect().width unless display is changed.
- // Support: IE <=11 only
- // Running getBoundingClientRect on a disconnected node
- // in IE throws an error.
- ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
- swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, dimension, extra );
- } ) :
- getWidthOrHeight( elem, dimension, extra );
- }
- },
-
- set: function( elem, value, extra ) {
- var matches,
- styles = getStyles( elem ),
-
- // Only read styles.position if the test has a chance to fail
- // to avoid forcing a reflow.
- scrollboxSizeBuggy = !support.scrollboxSize() &&
- styles.position === "absolute",
-
- // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
- boxSizingNeeded = scrollboxSizeBuggy || extra,
- isBorderBox = boxSizingNeeded &&
- jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- subtract = extra ?
- boxModelAdjustment(
- elem,
- dimension,
- extra,
- isBorderBox,
- styles
- ) :
- 0;
-
- // Account for unreliable border-box dimensions by comparing offset* to computed and
- // faking a content-box to get border and padding (gh-3699)
- if ( isBorderBox && scrollboxSizeBuggy ) {
- subtract -= Math.ceil(
- elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
- parseFloat( styles[ dimension ] ) -
- boxModelAdjustment( elem, dimension, "border", false, styles ) -
- 0.5
- );
- }
-
- // Convert to pixels if value adjustment is needed
- if ( subtract && ( matches = rcssNum.exec( value ) ) &&
- ( matches[ 3 ] || "px" ) !== "px" ) {
-
- elem.style[ dimension ] = value;
- value = jQuery.css( elem, dimension );
- }
-
- return setPositiveNumber( elem, value, subtract );
- }
- };
-} );
-
-jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
- function( elem, computed ) {
- if ( computed ) {
- return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
- elem.getBoundingClientRect().left -
- swap( elem, { marginLeft: 0 }, function() {
- return elem.getBoundingClientRect().left;
- } )
- ) + "px";
- }
- }
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each( {
- margin: "",
- padding: "",
- border: "Width"
-}, function( prefix, suffix ) {
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i = 0,
- expanded = {},
-
- // Assumes a single number if not a string
- parts = typeof value === "string" ? value.split( " " ) : [ value ];
-
- for ( ; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
-
- return expanded;
- }
- };
-
- if ( prefix !== "margin" ) {
- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
- }
-} );
-
-jQuery.fn.extend( {
- css: function( name, value ) {
- return access( this, function( elem, name, value ) {
- var styles, len,
- map = {},
- i = 0;
-
- if ( Array.isArray( name ) ) {
- styles = getStyles( elem );
- len = name.length;
-
- for ( ; i < len; i++ ) {
- map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
- }
-
- return map;
- }
-
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
- }
-} );
-
-
-function Tween( elem, options, prop, end, easing ) {
- return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
- constructor: Tween,
- init: function( elem, options, prop, end, easing, unit ) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || jQuery.easing._default;
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
- },
- cur: function() {
- var hooks = Tween.propHooks[ this.prop ];
-
- return hooks && hooks.get ?
- hooks.get( this ) :
- Tween.propHooks._default.get( this );
- },
- run: function( percent ) {
- var eased,
- hooks = Tween.propHooks[ this.prop ];
-
- if ( this.options.duration ) {
- this.pos = eased = jQuery.easing[ this.easing ](
- percent, this.options.duration * percent, 0, 1, this.options.duration
- );
- } else {
- this.pos = eased = percent;
- }
- this.now = ( this.end - this.start ) * eased + this.start;
-
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- if ( hooks && hooks.set ) {
- hooks.set( this );
- } else {
- Tween.propHooks._default.set( this );
- }
- return this;
- }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
- _default: {
- get: function( tween ) {
- var result;
-
- // Use a property on the element directly when it is not a DOM element,
- // or when there is no matching style property that exists.
- if ( tween.elem.nodeType !== 1 ||
- tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
- return tween.elem[ tween.prop ];
- }
-
- // Passing an empty string as a 3rd parameter to .css will automatically
- // attempt a parseFloat and fallback to a string if the parse fails.
- // Simple values such as "10px" are parsed to Float;
- // complex values such as "rotate(1rad)" are returned as-is.
- result = jQuery.css( tween.elem, tween.prop, "" );
-
- // Empty strings, null, undefined and "auto" are converted to 0.
- return !result || result === "auto" ? 0 : result;
- },
- set: function( tween ) {
-
- // Use step hook for back compat.
- // Use cssHook if its there.
- // Use .style if available and use plain properties where available.
- if ( jQuery.fx.step[ tween.prop ] ) {
- jQuery.fx.step[ tween.prop ]( tween );
- } else if ( tween.elem.nodeType === 1 && (
- jQuery.cssHooks[ tween.prop ] ||
- tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
- } else {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- }
-};
-
-// Support: IE <=9 only
-// Panic based approach to setting things on disconnected nodes
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function( tween ) {
- if ( tween.elem.nodeType && tween.elem.parentNode ) {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
-};
-
-jQuery.easing = {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return 0.5 - Math.cos( p * Math.PI ) / 2;
- },
- _default: "swing"
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
- fxNow, inProgress,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rrun = /queueHooks$/;
-
-function schedule() {
- if ( inProgress ) {
- if ( document.hidden === false && window.requestAnimationFrame ) {
- window.requestAnimationFrame( schedule );
- } else {
- window.setTimeout( schedule, jQuery.fx.interval );
- }
-
- jQuery.fx.tick();
- }
-}
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- window.setTimeout( function() {
- fxNow = undefined;
- } );
- return ( fxNow = Date.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
- var which,
- i = 0,
- attrs = { height: type };
-
- // If we include width, step value is 1 to do all cssExpand values,
- // otherwise step value is 2 to skip over Left and Right
- includeWidth = includeWidth ? 1 : 0;
- for ( ; i < 4; i += 2 - includeWidth ) {
- which = cssExpand[ i ];
- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
- }
-
- if ( includeWidth ) {
- attrs.opacity = attrs.width = type;
- }
-
- return attrs;
-}
-
-function createTween( value, prop, animation ) {
- var tween,
- collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
- index = 0,
- length = collection.length;
- for ( ; index < length; index++ ) {
- if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
-
- // We're done with this property
- return tween;
- }
- }
-}
-
-function defaultPrefilter( elem, props, opts ) {
- var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
- isBox = "width" in props || "height" in props,
- anim = this,
- orig = {},
- style = elem.style,
- hidden = elem.nodeType && isHiddenWithinTree( elem ),
- dataShow = dataPriv.get( elem, "fxshow" );
-
- // Queue-skipping animations hijack the fx hooks
- if ( !opts.queue ) {
- hooks = jQuery._queueHooks( elem, "fx" );
- if ( hooks.unqueued == null ) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function() {
- if ( !hooks.unqueued ) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
-
- anim.always( function() {
-
- // Ensure the complete handler is called before this completes
- anim.always( function() {
- hooks.unqueued--;
- if ( !jQuery.queue( elem, "fx" ).length ) {
- hooks.empty.fire();
- }
- } );
- } );
- }
-
- // Detect show/hide animations
- for ( prop in props ) {
- value = props[ prop ];
- if ( rfxtypes.test( value ) ) {
- delete props[ prop ];
- toggle = toggle || value === "toggle";
- if ( value === ( hidden ? "hide" : "show" ) ) {
-
- // Pretend to be hidden if this is a "show" and
- // there is still data from a stopped show/hide
- if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
- hidden = true;
-
- // Ignore all other no-op show/hide data
- } else {
- continue;
- }
- }
- orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
- }
- }
-
- // Bail out if this is a no-op like .hide().hide()
- propTween = !jQuery.isEmptyObject( props );
- if ( !propTween && jQuery.isEmptyObject( orig ) ) {
- return;
- }
-
- // Restrict "overflow" and "display" styles during box animations
- if ( isBox && elem.nodeType === 1 ) {
-
- // Support: IE <=9 - 11, Edge 12 - 15
- // Record all 3 overflow attributes because IE does not infer the shorthand
- // from identically-valued overflowX and overflowY and Edge just mirrors
- // the overflowX value there.
- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
- // Identify a display type, preferring old show/hide data over the CSS cascade
- restoreDisplay = dataShow && dataShow.display;
- if ( restoreDisplay == null ) {
- restoreDisplay = dataPriv.get( elem, "display" );
- }
- display = jQuery.css( elem, "display" );
- if ( display === "none" ) {
- if ( restoreDisplay ) {
- display = restoreDisplay;
- } else {
-
- // Get nonempty value(s) by temporarily forcing visibility
- showHide( [ elem ], true );
- restoreDisplay = elem.style.display || restoreDisplay;
- display = jQuery.css( elem, "display" );
- showHide( [ elem ] );
- }
- }
-
- // Animate inline elements as inline-block
- if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
- if ( jQuery.css( elem, "float" ) === "none" ) {
-
- // Restore the original display value at the end of pure show/hide animations
- if ( !propTween ) {
- anim.done( function() {
- style.display = restoreDisplay;
- } );
- if ( restoreDisplay == null ) {
- display = style.display;
- restoreDisplay = display === "none" ? "" : display;
- }
- }
- style.display = "inline-block";
- }
- }
- }
-
- if ( opts.overflow ) {
- style.overflow = "hidden";
- anim.always( function() {
- style.overflow = opts.overflow[ 0 ];
- style.overflowX = opts.overflow[ 1 ];
- style.overflowY = opts.overflow[ 2 ];
- } );
- }
-
- // Implement show/hide animations
- propTween = false;
- for ( prop in orig ) {
-
- // General show/hide setup for this element animation
- if ( !propTween ) {
- if ( dataShow ) {
- if ( "hidden" in dataShow ) {
- hidden = dataShow.hidden;
- }
- } else {
- dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
- }
-
- // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
- if ( toggle ) {
- dataShow.hidden = !hidden;
- }
-
- // Show elements before animating them
- if ( hidden ) {
- showHide( [ elem ], true );
- }
-
- /* eslint-disable no-loop-func */
-
- anim.done( function() {
-
- /* eslint-enable no-loop-func */
-
- // The final step of a "hide" animation is actually hiding the element
- if ( !hidden ) {
- showHide( [ elem ] );
- }
- dataPriv.remove( elem, "fxshow" );
- for ( prop in orig ) {
- jQuery.style( elem, prop, orig[ prop ] );
- }
- } );
- }
-
- // Per-property setup
- propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
- if ( !( prop in dataShow ) ) {
- dataShow[ prop ] = propTween.start;
- if ( hidden ) {
- propTween.end = propTween.start;
- propTween.start = 0;
- }
- }
- }
-}
-
-function propFilter( props, specialEasing ) {
- var index, name, easing, value, hooks;
-
- // camelCase, specialEasing and expand cssHook pass
- for ( index in props ) {
- name = camelCase( index );
- easing = specialEasing[ name ];
- value = props[ index ];
- if ( Array.isArray( value ) ) {
- easing = value[ 1 ];
- value = props[ index ] = value[ 0 ];
- }
-
- if ( index !== name ) {
- props[ name ] = value;
- delete props[ index ];
- }
-
- hooks = jQuery.cssHooks[ name ];
- if ( hooks && "expand" in hooks ) {
- value = hooks.expand( value );
- delete props[ name ];
-
- // Not quite $.extend, this won't overwrite existing keys.
- // Reusing 'index' because we have the correct "name"
- for ( index in value ) {
- if ( !( index in props ) ) {
- props[ index ] = value[ index ];
- specialEasing[ index ] = easing;
- }
- }
- } else {
- specialEasing[ name ] = easing;
- }
- }
-}
-
-function Animation( elem, properties, options ) {
- var result,
- stopped,
- index = 0,
- length = Animation.prefilters.length,
- deferred = jQuery.Deferred().always( function() {
-
- // Don't match elem in the :animated selector
- delete tick.elem;
- } ),
- tick = function() {
- if ( stopped ) {
- return false;
- }
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-
- // Support: Android 2.3 only
- // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
-
- for ( ; index < length; index++ ) {
- animation.tweens[ index ].run( percent );
- }
-
- deferred.notifyWith( elem, [ animation, percent, remaining ] );
-
- // If there's more to do, yield
- if ( percent < 1 && length ) {
- return remaining;
- }
-
- // If this was an empty animation, synthesize a final progress notification
- if ( !length ) {
- deferred.notifyWith( elem, [ animation, 1, 0 ] );
- }
-
- // Resolve the animation and report its conclusion
- deferred.resolveWith( elem, [ animation ] );
- return false;
- },
- animation = deferred.promise( {
- elem: elem,
- props: jQuery.extend( {}, properties ),
- opts: jQuery.extend( true, {
- specialEasing: {},
- easing: jQuery.easing._default
- }, options ),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function( prop, end ) {
- var tween = jQuery.Tween( elem, animation.opts, prop, end,
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
- animation.tweens.push( tween );
- return tween;
- },
- stop: function( gotoEnd ) {
- var index = 0,
-
- // If we are going to the end, we want to run all the tweens
- // otherwise we skip this part
- length = gotoEnd ? animation.tweens.length : 0;
- if ( stopped ) {
- return this;
- }
- stopped = true;
- for ( ; index < length; index++ ) {
- animation.tweens[ index ].run( 1 );
- }
-
- // Resolve when we played the last frame; otherwise, reject
- if ( gotoEnd ) {
- deferred.notifyWith( elem, [ animation, 1, 0 ] );
- deferred.resolveWith( elem, [ animation, gotoEnd ] );
- } else {
- deferred.rejectWith( elem, [ animation, gotoEnd ] );
- }
- return this;
- }
- } ),
- props = animation.props;
-
- propFilter( props, animation.opts.specialEasing );
-
- for ( ; index < length; index++ ) {
- result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
- if ( result ) {
- if ( isFunction( result.stop ) ) {
- jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
- result.stop.bind( result );
- }
- return result;
- }
- }
-
- jQuery.map( props, createTween, animation );
-
- if ( isFunction( animation.opts.start ) ) {
- animation.opts.start.call( elem, animation );
- }
-
- // Attach callbacks from options
- animation
- .progress( animation.opts.progress )
- .done( animation.opts.done, animation.opts.complete )
- .fail( animation.opts.fail )
- .always( animation.opts.always );
-
- jQuery.fx.timer(
- jQuery.extend( tick, {
- elem: elem,
- anim: animation,
- queue: animation.opts.queue
- } )
- );
-
- return animation;
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-
- tweeners: {
- "*": [ function( prop, value ) {
- var tween = this.createTween( prop, value );
- adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
- return tween;
- } ]
- },
-
- tweener: function( props, callback ) {
- if ( isFunction( props ) ) {
- callback = props;
- props = [ "*" ];
- } else {
- props = props.match( rnothtmlwhite );
- }
-
- var prop,
- index = 0,
- length = props.length;
-
- for ( ; index < length; index++ ) {
- prop = props[ index ];
- Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
- Animation.tweeners[ prop ].unshift( callback );
- }
- },
-
- prefilters: [ defaultPrefilter ],
-
- prefilter: function( callback, prepend ) {
- if ( prepend ) {
- Animation.prefilters.unshift( callback );
- } else {
- Animation.prefilters.push( callback );
- }
- }
-} );
-
-jQuery.speed = function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !isFunction( easing ) && easing
- };
-
- // Go to the end state if fx are off
- if ( jQuery.fx.off ) {
- opt.duration = 0;
-
- } else {
- if ( typeof opt.duration !== "number" ) {
- if ( opt.duration in jQuery.fx.speeds ) {
- opt.duration = jQuery.fx.speeds[ opt.duration ];
-
- } else {
- opt.duration = jQuery.fx.speeds._default;
- }
- }
- }
-
- // Normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function() {
- if ( isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- }
- };
-
- return opt;
-};
-
-jQuery.fn.extend( {
- fadeTo: function( speed, to, easing, callback ) {
-
- // Show any hidden elements after setting opacity to 0
- return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
-
- // Animate to the value specified
- .end().animate( { opacity: to }, speed, easing, callback );
- },
- animate: function( prop, speed, easing, callback ) {
- var empty = jQuery.isEmptyObject( prop ),
- optall = jQuery.speed( speed, easing, callback ),
- doAnimation = function() {
-
- // Operate on a copy of prop so per-property easing won't be lost
- var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
- // Empty animations, or finishing resolves immediately
- if ( empty || dataPriv.get( this, "finish" ) ) {
- anim.stop( true );
- }
- };
- doAnimation.finish = doAnimation;
-
- return empty || optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
- stop: function( type, clearQueue, gotoEnd ) {
- var stopQueue = function( hooks ) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop( gotoEnd );
- };
-
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each( function() {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = dataPriv.get( this );
-
- if ( index ) {
- if ( data[ index ] && data[ index ].stop ) {
- stopQueue( data[ index ] );
- }
- } else {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
- stopQueue( data[ index ] );
- }
- }
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this &&
- ( type == null || timers[ index ].queue === type ) ) {
-
- timers[ index ].anim.stop( gotoEnd );
- dequeue = false;
- timers.splice( index, 1 );
- }
- }
-
- // Start the next in the queue if the last step wasn't forced.
- // Timers currently will call their complete callbacks, which
- // will dequeue but only if they were gotoEnd.
- if ( dequeue || !gotoEnd ) {
- jQuery.dequeue( this, type );
- }
- } );
- },
- finish: function( type ) {
- if ( type !== false ) {
- type = type || "fx";
- }
- return this.each( function() {
- var index,
- data = dataPriv.get( this ),
- queue = data[ type + "queue" ],
- hooks = data[ type + "queueHooks" ],
- timers = jQuery.timers,
- length = queue ? queue.length : 0;
-
- // Enable finishing flag on private data
- data.finish = true;
-
- // Empty the queue first
- jQuery.queue( this, type, [] );
-
- if ( hooks && hooks.stop ) {
- hooks.stop.call( this, true );
- }
-
- // Look for any active animations, and finish them
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
- timers[ index ].anim.stop( true );
- timers.splice( index, 1 );
- }
- }
-
- // Look for any animations in the old queue and finish them
- for ( index = 0; index < length; index++ ) {
- if ( queue[ index ] && queue[ index ].finish ) {
- queue[ index ].finish.call( this );
- }
- }
-
- // Turn off finishing flag
- delete data.finish;
- } );
- }
-} );
-
-jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
- var cssFn = jQuery.fn[ name ];
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return speed == null || typeof speed === "boolean" ?
- cssFn.apply( this, arguments ) :
- this.animate( genFx( name, true ), speed, easing, callback );
- };
-} );
-
-// Generate shortcuts for custom animations
-jQuery.each( {
- slideDown: genFx( "show" ),
- slideUp: genFx( "hide" ),
- slideToggle: genFx( "toggle" ),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-} );
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
- var timer,
- i = 0,
- timers = jQuery.timers;
-
- fxNow = Date.now();
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
-
- // Run the timer and safely remove it when done (allowing for external removal)
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
- jQuery.timers.push( timer );
- jQuery.fx.start();
-};
-
-jQuery.fx.interval = 13;
-jQuery.fx.start = function() {
- if ( inProgress ) {
- return;
- }
-
- inProgress = true;
- schedule();
-};
-
-jQuery.fx.stop = function() {
- inProgress = null;
-};
-
-jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
-
- // Default speed
- _default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = window.setTimeout( next, time );
- hooks.stop = function() {
- window.clearTimeout( timeout );
- };
- } );
-};
-
-
-( function() {
- var input = document.createElement( "input" ),
- select = document.createElement( "select" ),
- opt = select.appendChild( document.createElement( "option" ) );
-
- input.type = "checkbox";
-
- // Support: Android <=4.3 only
- // Default value for a checkbox should be "on"
- support.checkOn = input.value !== "";
-
- // Support: IE <=11 only
- // Must access selectedIndex to make default options select
- support.optSelected = opt.selected;
-
- // Support: IE <=11 only
- // An input loses its value after becoming a radio
- input = document.createElement( "input" );
- input.value = "t";
- input.type = "radio";
- support.radioValue = input.value === "t";
-} )();
-
-
-var boolHook,
- attrHandle = jQuery.expr.attrHandle;
-
-jQuery.fn.extend( {
- attr: function( name, value ) {
- return access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
-
- removeAttr: function( name ) {
- return this.each( function() {
- jQuery.removeAttr( this, name );
- } );
- }
-} );
-
-jQuery.extend( {
- attr: function( elem, name, value ) {
- var ret, hooks,
- nType = elem.nodeType;
-
- // Don't get/set attributes on text, comment and attribute nodes
- if ( nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === "undefined" ) {
- return jQuery.prop( elem, name, value );
- }
-
- // Attribute hooks are determined by the lowercase version
- // Grab necessary hook if one is defined
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
- hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
- ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
- }
-
- if ( value !== undefined ) {
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
- return;
- }
-
- if ( hooks && "set" in hooks &&
- ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
- return ret;
- }
-
- elem.setAttribute( name, value + "" );
- return value;
- }
-
- if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
- return ret;
- }
-
- ret = jQuery.find.attr( elem, name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret == null ? undefined : ret;
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- if ( !support.radioValue && value === "radio" &&
- nodeName( elem, "input" ) ) {
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- }
- },
-
- removeAttr: function( elem, value ) {
- var name,
- i = 0,
-
- // Attribute names can contain non-HTML whitespace characters
- // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
- attrNames = value && value.match( rnothtmlwhite );
-
- if ( attrNames && elem.nodeType === 1 ) {
- while ( ( name = attrNames[ i++ ] ) ) {
- elem.removeAttribute( name );
- }
- }
- }
-} );
-
-// Hooks for boolean attributes
-boolHook = {
- set: function( elem, value, name ) {
- if ( value === false ) {
-
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else {
- elem.setAttribute( name, name );
- }
- return name;
- }
-};
-
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
- var getter = attrHandle[ name ] || jQuery.find.attr;
-
- attrHandle[ name ] = function( elem, name, isXML ) {
- var ret, handle,
- lowercaseName = name.toLowerCase();
-
- if ( !isXML ) {
-
- // Avoid an infinite loop by temporarily removing this function from the getter
- handle = attrHandle[ lowercaseName ];
- attrHandle[ lowercaseName ] = ret;
- ret = getter( elem, name, isXML ) != null ?
- lowercaseName :
- null;
- attrHandle[ lowercaseName ] = handle;
- }
- return ret;
- };
-} );
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button)$/i,
- rclickable = /^(?:a|area)$/i;
-
-jQuery.fn.extend( {
- prop: function( name, value ) {
- return access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
-
- removeProp: function( name ) {
- return this.each( function() {
- delete this[ jQuery.propFix[ name ] || name ];
- } );
- }
-} );
-
-jQuery.extend( {
- prop: function( elem, name, value ) {
- var ret, hooks,
- nType = elem.nodeType;
-
- // Don't get/set properties on text, comment and attribute nodes
- if ( nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- if ( hooks && "set" in hooks &&
- ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
- return ret;
- }
-
- return ( elem[ name ] = value );
- }
-
- if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
- return ret;
- }
-
- return elem[ name ];
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
-
- // Support: IE <=9 - 11 only
- // elem.tabIndex doesn't always return the
- // correct value when it hasn't been explicitly set
- // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- // Use proper attribute retrieval(#12072)
- var tabindex = jQuery.find.attr( elem, "tabindex" );
-
- if ( tabindex ) {
- return parseInt( tabindex, 10 );
- }
-
- if (
- rfocusable.test( elem.nodeName ) ||
- rclickable.test( elem.nodeName ) &&
- elem.href
- ) {
- return 0;
- }
-
- return -1;
- }
- }
- },
-
- propFix: {
- "for": "htmlFor",
- "class": "className"
- }
-} );
-
-// Support: IE <=11 only
-// Accessing the selectedIndex property
-// forces the browser to respect setting selected
-// on the option
-// The getter ensures a default option is selected
-// when in an optgroup
-// eslint rule "no-unused-expressions" is disabled for this code
-// since it considers such accessions noop
-if ( !support.optSelected ) {
- jQuery.propHooks.selected = {
- get: function( elem ) {
-
- /* eslint no-unused-expressions: "off" */
-
- var parent = elem.parentNode;
- if ( parent && parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- return null;
- },
- set: function( elem ) {
-
- /* eslint no-unused-expressions: "off" */
-
- var parent = elem.parentNode;
- if ( parent ) {
- parent.selectedIndex;
-
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- }
- };
-}
-
-jQuery.each( [
- "tabIndex",
- "readOnly",
- "maxLength",
- "cellSpacing",
- "cellPadding",
- "rowSpan",
- "colSpan",
- "useMap",
- "frameBorder",
- "contentEditable"
-], function() {
- jQuery.propFix[ this.toLowerCase() ] = this;
-} );
-
-
-
-
- // Strip and collapse whitespace according to HTML spec
- // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
- function stripAndCollapse( value ) {
- var tokens = value.match( rnothtmlwhite ) || [];
- return tokens.join( " " );
- }
-
-
-function getClass( elem ) {
- return elem.getAttribute && elem.getAttribute( "class" ) || "";
-}
-
-function classesToArray( value ) {
- if ( Array.isArray( value ) ) {
- return value;
- }
- if ( typeof value === "string" ) {
- return value.match( rnothtmlwhite ) || [];
- }
- return [];
-}
-
-jQuery.fn.extend( {
- addClass: function( value ) {
- var classes, elem, cur, curValue, clazz, j, finalValue,
- i = 0;
-
- if ( isFunction( value ) ) {
- return this.each( function( j ) {
- jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
- } );
- }
-
- classes = classesToArray( value );
-
- if ( classes.length ) {
- while ( ( elem = this[ i++ ] ) ) {
- curValue = getClass( elem );
- cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
-
- if ( cur ) {
- j = 0;
- while ( ( clazz = classes[ j++ ] ) ) {
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
- cur += clazz + " ";
- }
- }
-
- // Only assign if different to avoid unneeded rendering.
- finalValue = stripAndCollapse( cur );
- if ( curValue !== finalValue ) {
- elem.setAttribute( "class", finalValue );
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classes, elem, cur, curValue, clazz, j, finalValue,
- i = 0;
-
- if ( isFunction( value ) ) {
- return this.each( function( j ) {
- jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
- } );
- }
-
- if ( !arguments.length ) {
- return this.attr( "class", "" );
- }
-
- classes = classesToArray( value );
-
- if ( classes.length ) {
- while ( ( elem = this[ i++ ] ) ) {
- curValue = getClass( elem );
-
- // This expression is here for better compressibility (see addClass)
- cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
-
- if ( cur ) {
- j = 0;
- while ( ( clazz = classes[ j++ ] ) ) {
-
- // Remove *all* instances
- while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
- cur = cur.replace( " " + clazz + " ", " " );
- }
- }
-
- // Only assign if different to avoid unneeded rendering.
- finalValue = stripAndCollapse( cur );
- if ( curValue !== finalValue ) {
- elem.setAttribute( "class", finalValue );
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value,
- isValidValue = type === "string" || Array.isArray( value );
-
- if ( typeof stateVal === "boolean" && isValidValue ) {
- return stateVal ? this.addClass( value ) : this.removeClass( value );
- }
-
- if ( isFunction( value ) ) {
- return this.each( function( i ) {
- jQuery( this ).toggleClass(
- value.call( this, i, getClass( this ), stateVal ),
- stateVal
- );
- } );
- }
-
- return this.each( function() {
- var className, i, self, classNames;
-
- if ( isValidValue ) {
-
- // Toggle individual class names
- i = 0;
- self = jQuery( this );
- classNames = classesToArray( value );
-
- while ( ( className = classNames[ i++ ] ) ) {
-
- // Check each className given, space separated list
- if ( self.hasClass( className ) ) {
- self.removeClass( className );
- } else {
- self.addClass( className );
- }
- }
-
- // Toggle whole class name
- } else if ( value === undefined || type === "boolean" ) {
- className = getClass( this );
- if ( className ) {
-
- // Store className if set
- dataPriv.set( this, "__className__", className );
- }
-
- // If the element has a class name or if we're passed `false`,
- // then remove the whole classname (if there was one, the above saved it).
- // Otherwise bring back whatever was previously saved (if anything),
- // falling back to the empty string if nothing was stored.
- if ( this.setAttribute ) {
- this.setAttribute( "class",
- className || value === false ?
- "" :
- dataPriv.get( this, "__className__" ) || ""
- );
- }
- }
- } );
- },
-
- hasClass: function( selector ) {
- var className, elem,
- i = 0;
-
- className = " " + selector + " ";
- while ( ( elem = this[ i++ ] ) ) {
- if ( elem.nodeType === 1 &&
- ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
- return true;
- }
- }
-
- return false;
- }
-} );
-
-
-
-
-var rreturn = /\r/g;
-
-jQuery.fn.extend( {
- val: function( value ) {
- var hooks, ret, valueIsFunction,
- elem = this[ 0 ];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] ||
- jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
- if ( hooks &&
- "get" in hooks &&
- ( ret = hooks.get( elem, "value" ) ) !== undefined
- ) {
- return ret;
- }
-
- ret = elem.value;
-
- // Handle most common string cases
- if ( typeof ret === "string" ) {
- return ret.replace( rreturn, "" );
- }
-
- // Handle cases where value is null/undef or number
- return ret == null ? "" : ret;
- }
-
- return;
- }
-
- valueIsFunction = isFunction( value );
-
- return this.each( function( i ) {
- var val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( valueIsFunction ) {
- val = value.call( this, i, jQuery( this ).val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
-
- } else if ( typeof val === "number" ) {
- val += "";
-
- } else if ( Array.isArray( val ) ) {
- val = jQuery.map( val, function( value ) {
- return value == null ? "" : value + "";
- } );
- }
-
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- } );
- }
-} );
-
-jQuery.extend( {
- valHooks: {
- option: {
- get: function( elem ) {
-
- var val = jQuery.find.attr( elem, "value" );
- return val != null ?
- val :
-
- // Support: IE <=10 - 11 only
- // option.text throws exceptions (#14686, #14858)
- // Strip and collapse whitespace
- // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
- stripAndCollapse( jQuery.text( elem ) );
- }
- },
- select: {
- get: function( elem ) {
- var value, option, i,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one",
- values = one ? null : [],
- max = one ? index + 1 : options.length;
-
- if ( index < 0 ) {
- i = max;
-
- } else {
- i = one ? index : 0;
- }
-
- // Loop through all the selected options
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // Support: IE <=9 only
- // IE8-9 doesn't update selected after form reset (#2551)
- if ( ( option.selected || i === index ) &&
-
- // Don't return options that are disabled or in a disabled optgroup
- !option.disabled &&
- ( !option.parentNode.disabled ||
- !nodeName( option.parentNode, "optgroup" ) ) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var optionSet, option,
- options = elem.options,
- values = jQuery.makeArray( value ),
- i = options.length;
-
- while ( i-- ) {
- option = options[ i ];
-
- /* eslint-disable no-cond-assign */
-
- if ( option.selected =
- jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
- ) {
- optionSet = true;
- }
-
- /* eslint-enable no-cond-assign */
- }
-
- // Force browsers to behave consistently when non-matching value is set
- if ( !optionSet ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- }
-} );
-
-// Radios and checkboxes getter/setter
-jQuery.each( [ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- set: function( elem, value ) {
- if ( Array.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
- }
- }
- };
- if ( !support.checkOn ) {
- jQuery.valHooks[ this ].get = function( elem ) {
- return elem.getAttribute( "value" ) === null ? "on" : elem.value;
- };
- }
-} );
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-support.focusin = "onfocusin" in window;
-
-
-var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- stopPropagationCallback = function( e ) {
- e.stopPropagation();
- };
-
-jQuery.extend( jQuery.event, {
-
- trigger: function( event, data, elem, onlyHandlers ) {
-
- var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
- eventPath = [ elem || document ],
- type = hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
-
- cur = lastElement = tmp = elem = elem || document;
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf( "." ) > -1 ) {
-
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split( "." );
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf( ":" ) < 0 && "on" + type;
-
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
- event = event[ jQuery.expando ] ?
- event :
- new jQuery.Event( type, typeof event === "object" && event );
-
- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
- event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join( "." );
- event.rnamespace = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
- null;
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data == null ?
- [ event ] :
- jQuery.makeArray( data, [ event ] );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- if ( !rfocusMorph.test( bubbleType + type ) ) {
- cur = cur.parentNode;
- }
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push( cur );
- tmp = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( tmp === ( elem.ownerDocument || document ) ) {
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
- }
- }
-
- // Fire handlers on the event path
- i = 0;
- while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
- lastElement = cur;
- event.type = i > 1 ?
- bubbleType :
- special.bindType || type;
-
- // jQuery handler
- handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
- dataPriv.get( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Native handler
- handle = ontype && cur[ ontype ];
- if ( handle && handle.apply && acceptData( cur ) ) {
- event.result = handle.apply( cur, data );
- if ( event.result === false ) {
- event.preventDefault();
- }
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( ( !special._default ||
- special._default.apply( eventPath.pop(), data ) === false ) &&
- acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name as the event.
- // Don't do default actions on window, that's where global variables be (#6170)
- if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- tmp = elem[ ontype ];
-
- if ( tmp ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
-
- if ( event.isPropagationStopped() ) {
- lastElement.addEventListener( type, stopPropagationCallback );
- }
-
- elem[ type ]();
-
- if ( event.isPropagationStopped() ) {
- lastElement.removeEventListener( type, stopPropagationCallback );
- }
-
- jQuery.event.triggered = undefined;
-
- if ( tmp ) {
- elem[ ontype ] = tmp;
- }
- }
- }
- }
-
- return event.result;
- },
-
- // Piggyback on a donor event to simulate a different one
- // Used only for `focus(in | out)` events
- simulate: function( type, elem, event ) {
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- {
- type: type,
- isSimulated: true
- }
- );
-
- jQuery.event.trigger( e, null, elem );
- }
-
-} );
-
-jQuery.fn.extend( {
-
- trigger: function( type, data ) {
- return this.each( function() {
- jQuery.event.trigger( type, data, this );
- } );
- },
- triggerHandler: function( type, data ) {
- var elem = this[ 0 ];
- if ( elem ) {
- return jQuery.event.trigger( type, data, elem, true );
- }
- }
-} );
-
-
-// Support: Firefox <=44
-// Firefox doesn't have focus(in | out) events
-// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
-//
-// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
-// focus(in | out) events fire after focus & blur events,
-// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
-// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
-if ( !support.focusin ) {
- jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler on the document while someone wants focusin/focusout
- var handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- var doc = this.ownerDocument || this,
- attaches = dataPriv.access( doc, fix );
-
- if ( !attaches ) {
- doc.addEventListener( orig, handler, true );
- }
- dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
- },
- teardown: function() {
- var doc = this.ownerDocument || this,
- attaches = dataPriv.access( doc, fix ) - 1;
-
- if ( !attaches ) {
- doc.removeEventListener( orig, handler, true );
- dataPriv.remove( doc, fix );
-
- } else {
- dataPriv.access( doc, fix, attaches );
- }
- }
- };
- } );
-}
-var location = window.location;
-
-var nonce = Date.now();
-
-var rquery = ( /\?/ );
-
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
- var xml;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
-
- // Support: IE 9 - 11 only
- // IE throws on parseFromString with invalid input.
- try {
- xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
- } catch ( e ) {
- xml = undefined;
- }
-
- if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
-};
-
-
-var
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
- var name;
-
- if ( Array.isArray( obj ) ) {
-
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
-
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
-
- // Item is non-scalar (array or object), encode its numeric index.
- buildParams(
- prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
- v,
- traditional,
- add
- );
- }
- } );
-
- } else if ( !traditional && toType( obj ) === "object" ) {
-
- // Serialize object item.
- for ( name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
-
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
- var prefix,
- s = [],
- add = function( key, valueOrFunction ) {
-
- // If value is a function, invoke it and use its return value
- var value = isFunction( valueOrFunction ) ?
- valueOrFunction() :
- valueOrFunction;
-
- s[ s.length ] = encodeURIComponent( key ) + "=" +
- encodeURIComponent( value == null ? "" : value );
- };
-
- if ( a == null ) {
- return "";
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- } );
-
- } else {
-
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" );
-};
-
-jQuery.fn.extend( {
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
- serializeArray: function() {
- return this.map( function() {
-
- // Can add propHook for "elements" to filter or add form elements
- var elements = jQuery.prop( this, "elements" );
- return elements ? jQuery.makeArray( elements ) : this;
- } )
- .filter( function() {
- var type = this.type;
-
- // Use .is( ":disabled" ) so that fieldset[disabled] works
- return this.name && !jQuery( this ).is( ":disabled" ) &&
- rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
- ( this.checked || !rcheckableType.test( type ) );
- } )
- .map( function( i, elem ) {
- var val = jQuery( this ).val();
-
- if ( val == null ) {
- return null;
- }
-
- if ( Array.isArray( val ) ) {
- return jQuery.map( val, function( val ) {
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- } );
- }
-
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- } ).get();
- }
-} );
-
-
-var
- r20 = /%20/g,
- rhash = /#.*$/,
- rantiCache = /([?&])_=[^&]*/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
-
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = "*/".concat( "*" ),
-
- // Anchor tag for parsing the document origin
- originAnchor = document.createElement( "a" );
- originAnchor.href = location.href;
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- var dataType,
- i = 0,
- dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
-
- if ( isFunction( func ) ) {
-
- // For each dataType in the dataTypeExpression
- while ( ( dataType = dataTypes[ i++ ] ) ) {
-
- // Prepend if requested
- if ( dataType[ 0 ] === "+" ) {
- dataType = dataType.slice( 1 ) || "*";
- ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
-
- // Otherwise append
- } else {
- ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
- }
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
- var inspected = {},
- seekingTransport = ( structure === transports );
-
- function inspect( dataType ) {
- var selected;
- inspected[ dataType ] = true;
- jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
- var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
- if ( typeof dataTypeOrTransport === "string" &&
- !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
-
- options.dataTypes.unshift( dataTypeOrTransport );
- inspect( dataTypeOrTransport );
- return false;
- } else if ( seekingTransport ) {
- return !( selected = dataTypeOrTransport );
- }
- } );
- return selected;
- }
-
- return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var key, deep,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-
- return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
- var ct, type, finalDataType, firstDataType,
- contents = s.contents,
- dataTypes = s.dataTypes;
-
- // Remove auto dataType and get content-type in the process
- while ( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
-
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
-
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
- var conv2, current, conv, tmp, prev,
- converters = {},
-
- // Work with a copy of dataTypes in case we need to modify it for conversion
- dataTypes = s.dataTypes.slice();
-
- // Create converters map with lowercased keys
- if ( dataTypes[ 1 ] ) {
- for ( conv in s.converters ) {
- converters[ conv.toLowerCase() ] = s.converters[ conv ];
- }
- }
-
- current = dataTypes.shift();
-
- // Convert to each sequential dataType
- while ( current ) {
-
- if ( s.responseFields[ current ] ) {
- jqXHR[ s.responseFields[ current ] ] = response;
- }
-
- // Apply the dataFilter if provided
- if ( !prev && isSuccess && s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- prev = current;
- current = dataTypes.shift();
-
- if ( current ) {
-
- // There's only work to do if current dataType is non-auto
- if ( current === "*" ) {
-
- current = prev;
-
- // Convert response if prev dataType is non-auto and differs from current
- } else if ( prev !== "*" && prev !== current ) {
-
- // Seek a direct converter
- conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
- // If none found, seek a pair
- if ( !conv ) {
- for ( conv2 in converters ) {
-
- // If conv2 outputs current
- tmp = conv2.split( " " );
- if ( tmp[ 1 ] === current ) {
-
- // If prev can be converted to accepted input
- conv = converters[ prev + " " + tmp[ 0 ] ] ||
- converters[ "* " + tmp[ 0 ] ];
- if ( conv ) {
-
- // Condense equivalence converters
- if ( conv === true ) {
- conv = converters[ conv2 ];
-
- // Otherwise, insert the intermediate dataType
- } else if ( converters[ conv2 ] !== true ) {
- current = tmp[ 0 ];
- dataTypes.unshift( tmp[ 1 ] );
- }
- break;
- }
- }
- }
- }
-
- // Apply converter (if not an equivalence)
- if ( conv !== true ) {
-
- // Unless errors are allowed to bubble, catch and return them
- if ( conv && s.throws ) {
- response = conv( response );
- } else {
- try {
- response = conv( response );
- } catch ( e ) {
- return {
- state: "parsererror",
- error: conv ? e : "No conversion from " + prev + " to " + current
- };
- }
- }
- }
- }
- }
- }
-
- return { state: "success", data: response };
-}
-
-jQuery.extend( {
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {},
-
- ajaxSettings: {
- url: location.href,
- type: "GET",
- isLocal: rlocalProtocol.test( location.protocol ),
- global: true,
- processData: true,
- async: true,
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- "*": allTypes,
- text: "text/plain",
- html: "text/html",
- xml: "application/xml, text/xml",
- json: "application/json, text/javascript"
- },
-
- contents: {
- xml: /\bxml\b/,
- html: /\bhtml/,
- json: /\bjson\b/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText",
- json: "responseJSON"
- },
-
- // Data converters
- // Keys separate source (or catchall "*") and destination types with a single space
- converters: {
-
- // Convert anything to text
- "* text": String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": JSON.parse,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- url: true,
- context: true
- }
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- return settings ?
-
- // Building a settings object
- ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
- // Extending ajaxSettings
- ajaxExtend( jQuery.ajaxSettings, target );
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var transport,
-
- // URL without anti-cache param
- cacheURL,
-
- // Response headers
- responseHeadersString,
- responseHeaders,
-
- // timeout handle
- timeoutTimer,
-
- // Url cleanup var
- urlAnchor,
-
- // Request state (becomes false upon send and true upon completion)
- completed,
-
- // To know if global events are to be dispatched
- fireGlobals,
-
- // Loop variable
- i,
-
- // uncached part of the url
- uncached,
-
- // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
-
- // Callbacks context
- callbackContext = s.context || s,
-
- // Context for global events is callbackContext if it is a DOM node or jQuery collection
- globalEventContext = s.context &&
- ( callbackContext.nodeType || callbackContext.jquery ) ?
- jQuery( callbackContext ) :
- jQuery.event,
-
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks( "once memory" ),
-
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
-
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
-
- // Default abort message
- strAbort = "canceled",
-
- // Fake xhr
- jqXHR = {
- readyState: 0,
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( completed ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
- responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
- ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
- .concat( match[ 2 ] );
- }
- }
- match = responseHeaders[ key.toLowerCase() + " " ];
- }
- return match == null ? null : match.join( ", " );
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return completed ? responseHeadersString : null;
- },
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- if ( completed == null ) {
- name = requestHeadersNames[ name.toLowerCase() ] =
- requestHeadersNames[ name.toLowerCase() ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( completed == null ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Status-dependent callbacks
- statusCode: function( map ) {
- var code;
- if ( map ) {
- if ( completed ) {
-
- // Execute the appropriate callbacks
- jqXHR.always( map[ jqXHR.status ] );
- } else {
-
- // Lazy-add the new callbacks in a way that preserves old ones
- for ( code in map ) {
- statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
- }
- }
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- var finalText = statusText || strAbort;
- if ( transport ) {
- transport.abort( finalText );
- }
- done( 0, finalText );
- return this;
- }
- };
-
- // Attach deferreds
- deferred.promise( jqXHR );
-
- // Add protocol if not provided (prefilters might expect it)
- // Handle falsy url in the settings object (#10093: consistency with old signature)
- // We also use the url parameter if available
- s.url = ( ( url || s.url || location.href ) + "" )
- .replace( rprotocol, location.protocol + "//" );
-
- // Alias method option to type as per ticket #12004
- s.type = options.method || options.type || s.method || s.type;
-
- // Extract dataTypes list
- s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
-
- // A cross-domain request is in order when the origin doesn't match the current origin.
- if ( s.crossDomain == null ) {
- urlAnchor = document.createElement( "a" );
-
- // Support: IE <=8 - 11, Edge 12 - 15
- // IE throws exception on accessing the href property if url is malformed,
- // e.g. http://example.com:80x/
- try {
- urlAnchor.href = s.url;
-
- // Support: IE <=8 - 11 only
- // Anchor's host property isn't correctly set when s.url is relative
- urlAnchor.href = urlAnchor.href;
- s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
- urlAnchor.protocol + "//" + urlAnchor.host;
- } catch ( e ) {
-
- // If there is an error parsing the URL, assume it is crossDomain,
- // it can be rejected by the transport if it is invalid
- s.crossDomain = true;
- }
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefilter, stop there
- if ( completed ) {
- return jqXHR;
- }
-
- // We can fire global events as of now if asked to
- // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
- fireGlobals = jQuery.event && s.global;
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger( "ajaxStart" );
- }
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Save the URL in case we're toying with the If-Modified-Since
- // and/or If-None-Match header later on
- // Remove hash to simplify url manipulation
- cacheURL = s.url.replace( rhash, "" );
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // Remember the hash so we can put it back
- uncached = s.url.slice( cacheURL.length );
-
- // If data is available and should be processed, append data to url
- if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
- cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
-
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Add or update anti-cache param if needed
- if ( s.cache === false ) {
- cacheURL = cacheURL.replace( rantiCache, "$1" );
- uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
- }
-
- // Put hash and anti-cache on the URL that will be requested (gh-1732)
- s.url = cacheURL + uncached;
-
- // Change '%20' to '+' if this is encoded form body content (gh-2658)
- } else if ( s.data && s.processData &&
- ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
- s.data = s.data.replace( r20, "+" );
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
- }
- if ( jQuery.etag[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
- s.accepts[ s.dataTypes[ 0 ] ] +
- ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend &&
- ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
-
- // Abort if not done already and return
- return jqXHR.abort();
- }
-
- // Aborting is no longer a cancellation
- strAbort = "abort";
-
- // Install callbacks on deferreds
- completeDeferred.add( s.complete );
- jqXHR.done( s.success );
- jqXHR.fail( s.error );
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
-
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
-
- // If request was aborted inside ajaxSend, stop there
- if ( completed ) {
- return jqXHR;
- }
-
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = window.setTimeout( function() {
- jqXHR.abort( "timeout" );
- }, s.timeout );
- }
-
- try {
- completed = false;
- transport.send( requestHeaders, done );
- } catch ( e ) {
-
- // Rethrow post-completion exceptions
- if ( completed ) {
- throw e;
- }
-
- // Propagate others as results
- done( -1, e );
- }
- }
-
- // Callback for when everything is done
- function done( status, nativeStatusText, responses, headers ) {
- var isSuccess, success, error, response, modified,
- statusText = nativeStatusText;
-
- // Ignore repeat invocations
- if ( completed ) {
- return;
- }
-
- completed = true;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- window.clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- // Determine if successful
- isSuccess = status >= 200 && status < 300 || status === 304;
-
- // Get response data
- if ( responses ) {
- response = ajaxHandleResponses( s, jqXHR, responses );
- }
-
- // Convert no matter what (that way responseXXX fields are always set)
- response = ajaxConvert( s, response, jqXHR, isSuccess );
-
- // If successful, handle type chaining
- if ( isSuccess ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- modified = jqXHR.getResponseHeader( "Last-Modified" );
- if ( modified ) {
- jQuery.lastModified[ cacheURL ] = modified;
- }
- modified = jqXHR.getResponseHeader( "etag" );
- if ( modified ) {
- jQuery.etag[ cacheURL ] = modified;
- }
- }
-
- // if no content
- if ( status === 204 || s.type === "HEAD" ) {
- statusText = "nocontent";
-
- // if not modified
- } else if ( status === 304 ) {
- statusText = "notmodified";
-
- // If we have data, let's convert it
- } else {
- statusText = response.state;
- success = response.data;
- error = response.error;
- isSuccess = !error;
- }
- } else {
-
- // Extract error from statusText and normalize for non-aborts
- error = statusText;
- if ( status || !statusText ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger( "ajaxStop" );
- }
- }
- }
-
- return jqXHR;
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- }
-} );
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
-
- // Shift arguments if data argument was omitted
- if ( isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- // The url can be an options object (which then must have .url)
- return jQuery.ajax( jQuery.extend( {
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- }, jQuery.isPlainObject( url ) && url ) );
- };
-} );
-
-
-jQuery._evalUrl = function( url, options ) {
- return jQuery.ajax( {
- url: url,
-
- // Make this explicit, since user can override this through ajaxSetup (#11264)
- type: "GET",
- dataType: "script",
- cache: true,
- async: false,
- global: false,
-
- // Only evaluate the response if it is successful (gh-4126)
- // dataFilter is not invoked for failure responses, so using it instead
- // of the default converter is kludgy but it works.
- converters: {
- "text script": function() {}
- },
- dataFilter: function( response ) {
- jQuery.globalEval( response, options );
- }
- } );
-};
-
-
-jQuery.fn.extend( {
- wrapAll: function( html ) {
- var wrap;
-
- if ( this[ 0 ] ) {
- if ( isFunction( html ) ) {
- html = html.call( this[ 0 ] );
- }
-
- // The elements to wrap the target around
- wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
-
- if ( this[ 0 ].parentNode ) {
- wrap.insertBefore( this[ 0 ] );
- }
-
- wrap.map( function() {
- var elem = this;
-
- while ( elem.firstElementChild ) {
- elem = elem.firstElementChild;
- }
-
- return elem;
- } ).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( isFunction( html ) ) {
- return this.each( function( i ) {
- jQuery( this ).wrapInner( html.call( this, i ) );
- } );
- }
-
- return this.each( function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- } );
- },
-
- wrap: function( html ) {
- var htmlIsFunction = isFunction( html );
-
- return this.each( function( i ) {
- jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
- } );
- },
-
- unwrap: function( selector ) {
- this.parent( selector ).not( "body" ).each( function() {
- jQuery( this ).replaceWith( this.childNodes );
- } );
- return this;
- }
-} );
-
-
-jQuery.expr.pseudos.hidden = function( elem ) {
- return !jQuery.expr.pseudos.visible( elem );
-};
-jQuery.expr.pseudos.visible = function( elem ) {
- return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
-};
-
-
-
-
-jQuery.ajaxSettings.xhr = function() {
- try {
- return new window.XMLHttpRequest();
- } catch ( e ) {}
-};
-
-var xhrSuccessStatus = {
-
- // File protocol always yields status code 0, assume 200
- 0: 200,
-
- // Support: IE <=9 only
- // #1450: sometimes IE returns 1223 when it should be 204
- 1223: 204
- },
- xhrSupported = jQuery.ajaxSettings.xhr();
-
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-support.ajax = xhrSupported = !!xhrSupported;
-
-jQuery.ajaxTransport( function( options ) {
- var callback, errorCallback;
-
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( support.cors || xhrSupported && !options.crossDomain ) {
- return {
- send: function( headers, complete ) {
- var i,
- xhr = options.xhr();
-
- xhr.open(
- options.type,
- options.url,
- options.async,
- options.username,
- options.password
- );
-
- // Apply custom fields if provided
- if ( options.xhrFields ) {
- for ( i in options.xhrFields ) {
- xhr[ i ] = options.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( options.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( options.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
- headers[ "X-Requested-With" ] = "XMLHttpRequest";
- }
-
- // Set headers
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
-
- // Callback
- callback = function( type ) {
- return function() {
- if ( callback ) {
- callback = errorCallback = xhr.onload =
- xhr.onerror = xhr.onabort = xhr.ontimeout =
- xhr.onreadystatechange = null;
-
- if ( type === "abort" ) {
- xhr.abort();
- } else if ( type === "error" ) {
-
- // Support: IE <=9 only
- // On a manual native abort, IE9 throws
- // errors on any property access that is not readyState
- if ( typeof xhr.status !== "number" ) {
- complete( 0, "error" );
- } else {
- complete(
-
- // File: protocol always yields status 0; see #8605, #14207
- xhr.status,
- xhr.statusText
- );
- }
- } else {
- complete(
- xhrSuccessStatus[ xhr.status ] || xhr.status,
- xhr.statusText,
-
- // Support: IE <=9 only
- // IE9 has no XHR2 but throws on binary (trac-11426)
- // For XHR2 non-text, let the caller handle it (gh-2498)
- ( xhr.responseType || "text" ) !== "text" ||
- typeof xhr.responseText !== "string" ?
- { binary: xhr.response } :
- { text: xhr.responseText },
- xhr.getAllResponseHeaders()
- );
- }
- }
- };
- };
-
- // Listen to events
- xhr.onload = callback();
- errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
-
- // Support: IE 9 only
- // Use onreadystatechange to replace onabort
- // to handle uncaught aborts
- if ( xhr.onabort !== undefined ) {
- xhr.onabort = errorCallback;
- } else {
- xhr.onreadystatechange = function() {
-
- // Check readyState before timeout as it changes
- if ( xhr.readyState === 4 ) {
-
- // Allow onerror to be called first,
- // but that will not handle a native abort
- // Also, save errorCallback to a variable
- // as xhr.onerror cannot be accessed
- window.setTimeout( function() {
- if ( callback ) {
- errorCallback();
- }
- } );
- }
- };
- }
-
- // Create the abort callback
- callback = callback( "abort" );
-
- try {
-
- // Do send the request (this may raise an exception)
- xhr.send( options.hasContent && options.data || null );
- } catch ( e ) {
-
- // #14683: Only rethrow if this hasn't been notified as an error yet
- if ( callback ) {
- throw e;
- }
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback();
- }
- }
- };
- }
-} );
-
-
-
-
-// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
-jQuery.ajaxPrefilter( function( s ) {
- if ( s.crossDomain ) {
- s.contents.script = false;
- }
-} );
-
-// Install script dataType
-jQuery.ajaxSetup( {
- accepts: {
- script: "text/javascript, application/javascript, " +
- "application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /\b(?:java|ecma)script\b/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-} );
-
-// Handle cache's special case and crossDomain
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- }
-} );
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function( s ) {
-
- // This transport only deals with cross domain or forced-by-attrs requests
- if ( s.crossDomain || s.scriptAttrs ) {
- var script, callback;
- return {
- send: function( _, complete ) {
- script = jQuery( "<script>" )
- .attr( s.scriptAttrs || {} )
- .prop( { charset: s.scriptCharset, src: s.url } )
- .on( "load error", callback = function( evt ) {
- script.remove();
- callback = null;
- if ( evt ) {
- complete( evt.type === "error" ? 404 : 200, evt.type );
- }
- } );
-
- // Use native DOM manipulation to avoid our domManip AJAX trickery
- document.head.appendChild( script[ 0 ] );
- },
- abort: function() {
- if ( callback ) {
- callback();
- }
- }
- };
- }
-} );
-
-
-
-
-var oldCallbacks = [],
- rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup( {
- jsonp: "callback",
- jsonpCallback: function() {
- var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
- this[ callback ] = true;
- return callback;
- }
-} );
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var callbackName, overwritten, responseContainer,
- jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
- "url" :
- typeof s.data === "string" &&
- ( s.contentType || "" )
- .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
- rjsonp.test( s.data ) && "data"
- );
-
- // Handle iff the expected data type is "jsonp" or we have a parameter to set
- if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
- // Get callback name, remembering preexisting value associated with it
- callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
- s.jsonpCallback() :
- s.jsonpCallback;
-
- // Insert callback into url or form data
- if ( jsonProp ) {
- s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
- } else if ( s.jsonp !== false ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
- }
-
- // Use data converter to retrieve json after script execution
- s.converters[ "script json" ] = function() {
- if ( !responseContainer ) {
- jQuery.error( callbackName + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // Force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Install callback
- overwritten = window[ callbackName ];
- window[ callbackName ] = function() {
- responseContainer = arguments;
- };
-
- // Clean-up function (fires after converters)
- jqXHR.always( function() {
-
- // If previous value didn't exist - remove it
- if ( overwritten === undefined ) {
- jQuery( window ).removeProp( callbackName );
-
- // Otherwise restore preexisting value
- } else {
- window[ callbackName ] = overwritten;
- }
-
- // Save back as free
- if ( s[ callbackName ] ) {
-
- // Make sure that re-using the options doesn't screw things around
- s.jsonpCallback = originalSettings.jsonpCallback;
-
- // Save the callback name for future use
- oldCallbacks.push( callbackName );
- }
-
- // Call if it was a function and we have a response
- if ( responseContainer && isFunction( overwritten ) ) {
- overwritten( responseContainer[ 0 ] );
- }
-
- responseContainer = overwritten = undefined;
- } );
-
- // Delegate to script
- return "script";
- }
-} );
-
-
-
-
-// Support: Safari 8 only
-// In Safari 8 documents created via document.implementation.createHTMLDocument
-// collapse sibling forms: the second one becomes a child of the first one.
-// Because of that, this security measure has to be disabled in Safari 8.
-// https://bugs.webkit.org/show_bug.cgi?id=137337
-support.createHTMLDocument = ( function() {
- var body = document.implementation.createHTMLDocument( "" ).body;
- body.innerHTML = "<form></form><form></form>";
- return body.childNodes.length === 2;
-} )();
-
-
-// Argument "data" should be string of html
-// context (optional): If specified, the fragment will be created in this context,
-// defaults to document
-// keepScripts (optional): If true, will include scripts passed in the html string
-jQuery.parseHTML = function( data, context, keepScripts ) {
- if ( typeof data !== "string" ) {
- return [];
- }
- if ( typeof context === "boolean" ) {
- keepScripts = context;
- context = false;
- }
-
- var base, parsed, scripts;
-
- if ( !context ) {
-
- // Stop scripts or inline event handlers from being executed immediately
- // by using document.implementation
- if ( support.createHTMLDocument ) {
- context = document.implementation.createHTMLDocument( "" );
-
- // Set the base href for the created document
- // so any parsed elements with URLs
- // are based on the document's URL (gh-2965)
- base = context.createElement( "base" );
- base.href = document.location.href;
- context.head.appendChild( base );
- } else {
- context = document;
- }
- }
-
- parsed = rsingleTag.exec( data );
- scripts = !keepScripts && [];
-
- // Single tag
- if ( parsed ) {
- return [ context.createElement( parsed[ 1 ] ) ];
- }
-
- parsed = buildFragment( [ data ], context, scripts );
-
- if ( scripts && scripts.length ) {
- jQuery( scripts ).remove();
- }
-
- return jQuery.merge( [], parsed.childNodes );
-};
-
-
-/**
- * Load a url into a page
- */
-jQuery.fn.load = function( url, params, callback ) {
- var selector, type, response,
- self = this,
- off = url.indexOf( " " );
-
- if ( off > -1 ) {
- selector = stripAndCollapse( url.slice( off ) );
- url = url.slice( 0, off );
- }
-
- // If it's a function
- if ( isFunction( params ) ) {
-
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( params && typeof params === "object" ) {
- type = "POST";
- }
-
- // If we have elements to modify, make the request
- if ( self.length > 0 ) {
- jQuery.ajax( {
- url: url,
-
- // If "type" variable is undefined, then "GET" method will be used.
- // Make value of this field explicit since
- // user can override it through ajaxSetup method
- type: type || "GET",
- dataType: "html",
- data: params
- } ).done( function( responseText ) {
-
- // Save response for use in complete callback
- response = arguments;
-
- self.html( selector ?
-
- // If a selector was specified, locate the right elements in a dummy div
- // Exclude scripts to avoid IE 'Permission Denied' errors
- jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
- // Otherwise use the full result
- responseText );
-
- // If the request succeeds, this function gets "data", "status", "jqXHR"
- // but they are ignored because response was set above.
- // If it fails, this function gets "jqXHR", "status", "error"
- } ).always( callback && function( jqXHR, status ) {
- self.each( function() {
- callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
- } );
- } );
- }
-
- return this;
-};
-
-
-
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [
- "ajaxStart",
- "ajaxStop",
- "ajaxComplete",
- "ajaxError",
- "ajaxSuccess",
- "ajaxSend"
-], function( i, type ) {
- jQuery.fn[ type ] = function( fn ) {
- return this.on( type, fn );
- };
-} );
-
-
-
-
-jQuery.expr.pseudos.animated = function( elem ) {
- return jQuery.grep( jQuery.timers, function( fn ) {
- return elem === fn.elem;
- } ).length;
-};
-
-
-
-
-jQuery.offset = {
- setOffset: function( elem, options, i ) {
- var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
- position = jQuery.css( elem, "position" ),
- curElem = jQuery( elem ),
- props = {};
-
- // Set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- curOffset = curElem.offset();
- curCSSTop = jQuery.css( elem, "top" );
- curCSSLeft = jQuery.css( elem, "left" );
- calculatePosition = ( position === "absolute" || position === "fixed" ) &&
- ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
-
- // Need to be able to calculate position if either
- // top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
-
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( isFunction( options ) ) {
-
- // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
- options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
-
- } else {
- curElem.css( props );
- }
- }
-};
-
-jQuery.fn.extend( {
-
- // offset() relates an element's border box to the document origin
- offset: function( options ) {
-
- // Preserve chaining for setter
- if ( arguments.length ) {
- return options === undefined ?
- this :
- this.each( function( i ) {
- jQuery.offset.setOffset( this, options, i );
- } );
- }
-
- var rect, win,
- elem = this[ 0 ];
-
- if ( !elem ) {
- return;
- }
-
- // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
- // Support: IE <=11 only
- // Running getBoundingClientRect on a
- // disconnected node in IE throws an error
- if ( !elem.getClientRects().length ) {
- return { top: 0, left: 0 };
- }
-
- // Get document-relative position by adding viewport scroll to viewport-relative gBCR
- rect = elem.getBoundingClientRect();
- win = elem.ownerDocument.defaultView;
- return {
- top: rect.top + win.pageYOffset,
- left: rect.left + win.pageXOffset
- };
- },
-
- // position() relates an element's margin box to its offset parent's padding box
- // This corresponds to the behavior of CSS absolute positioning
- position: function() {
- if ( !this[ 0 ] ) {
- return;
- }
-
- var offsetParent, offset, doc,
- elem = this[ 0 ],
- parentOffset = { top: 0, left: 0 };
-
- // position:fixed elements are offset from the viewport, which itself always has zero offset
- if ( jQuery.css( elem, "position" ) === "fixed" ) {
-
- // Assume position:fixed implies availability of getBoundingClientRect
- offset = elem.getBoundingClientRect();
-
- } else {
- offset = this.offset();
-
- // Account for the *real* offset parent, which can be the document or its root element
- // when a statically positioned element is identified
- doc = elem.ownerDocument;
- offsetParent = elem.offsetParent || doc.documentElement;
- while ( offsetParent &&
- ( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
- jQuery.css( offsetParent, "position" ) === "static" ) {
-
- offsetParent = offsetParent.parentNode;
- }
- if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
-
- // Incorporate borders into its offset, since they are outside its content origin
- parentOffset = jQuery( offsetParent ).offset();
- parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
- parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
- }
- }
-
- // Subtract parent offsets and element margins
- return {
- top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
- left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
- };
- },
-
- // This method will return documentElement in the following cases:
- // 1) For the element inside the iframe without offsetParent, this method will return
- // documentElement of the parent window
- // 2) For the hidden or detached element
- // 3) For body or html element, i.e. in case of the html node - it will return itself
- //
- // but those exceptions were never presented as a real life use-cases
- // and might be considered as more preferable results.
- //
- // This logic, however, is not guaranteed and can change at any point in the future
- offsetParent: function() {
- return this.map( function() {
- var offsetParent = this.offsetParent;
-
- while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
- offsetParent = offsetParent.offsetParent;
- }
-
- return offsetParent || documentElement;
- } );
- }
-} );
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
- var top = "pageYOffset" === prop;
-
- jQuery.fn[ method ] = function( val ) {
- return access( this, function( elem, method, val ) {
-
- // Coalesce documents and windows
- var win;
- if ( isWindow( elem ) ) {
- win = elem;
- } else if ( elem.nodeType === 9 ) {
- win = elem.defaultView;
- }
-
- if ( val === undefined ) {
- return win ? win[ prop ] : elem[ method ];
- }
-
- if ( win ) {
- win.scrollTo(
- !top ? val : win.pageXOffset,
- top ? val : win.pageYOffset
- );
-
- } else {
- elem[ method ] = val;
- }
- }, method, val, arguments.length );
- };
-} );
-
-// Support: Safari <=7 - 9.1, Chrome <=37 - 49
-// Add the top/left cssHooks using jQuery.fn.position
-// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
-// getComputedStyle returns percent when specified for top/left/bottom/right;
-// rather than make the css module depend on the offset module, just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
- jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
- function( elem, computed ) {
- if ( computed ) {
- computed = curCSS( elem, prop );
-
- // If curCSS returns percentage, fallback to offset
- return rnumnonpx.test( computed ) ?
- jQuery( elem ).position()[ prop ] + "px" :
- computed;
- }
- }
- );
-} );
-
-
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
- function( defaultExtra, funcName ) {
-
- // Margin is only for outerHeight, outerWidth
- jQuery.fn[ funcName ] = function( margin, value ) {
- var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
- extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
- return access( this, function( elem, type, value ) {
- var doc;
-
- if ( isWindow( elem ) ) {
-
- // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
- return funcName.indexOf( "outer" ) === 0 ?
- elem[ "inner" + name ] :
- elem.document.documentElement[ "client" + name ];
- }
-
- // Get document width or height
- if ( elem.nodeType === 9 ) {
- doc = elem.documentElement;
-
- // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
- // whichever is greatest
- return Math.max(
- elem.body[ "scroll" + name ], doc[ "scroll" + name ],
- elem.body[ "offset" + name ], doc[ "offset" + name ],
- doc[ "client" + name ]
- );
- }
-
- return value === undefined ?
-
- // Get width or height on the element, requesting but not forcing parseFloat
- jQuery.css( elem, type, extra ) :
-
- // Set width or height on the element
- jQuery.style( elem, type, value, extra );
- }, type, chainable ? margin : undefined, chainable );
- };
- } );
-} );
-
-
-jQuery.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( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-} );
-
-jQuery.fn.extend( {
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- }
-} );
-
-
-
-
-jQuery.fn.extend( {
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
-
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length === 1 ?
- this.off( selector, "**" ) :
- this.off( types, selector || "**", fn );
- }
-} );
-
-// Bind a function to a context, optionally partially applying any
-// arguments.
-// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
-// However, it is not slated for removal any time soon
-jQuery.proxy = function( fn, context ) {
- var tmp, args, proxy;
-
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- args = slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
-};
-
-jQuery.holdReady = function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
-};
-jQuery.isArray = Array.isArray;
-jQuery.parseJSON = JSON.parse;
-jQuery.nodeName = nodeName;
-jQuery.isFunction = isFunction;
-jQuery.isWindow = isWindow;
-jQuery.camelCase = camelCase;
-jQuery.type = toType;
-
-jQuery.now = Date.now;
-
-jQuery.isNumeric = function( obj ) {
-
- // As of jQuery 3.0, isNumeric is limited to
- // strings and numbers (primitives or objects)
- // that can be coerced to finite numbers (gh-2662)
- var type = jQuery.type( obj );
- return ( type === "number" || type === "string" ) &&
-
- // parseFloat NaNs numeric-cast false positives ("")
- // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
- // subtraction forces infinities to NaN
- !isNaN( obj - parseFloat( obj ) );
-};
-
-
-
-
-// Register as a named AMD module, since jQuery can be concatenated with other
-// files that may use define, but not via a proper concatenation script that
-// understands anonymous AMD modules. A named AMD is safest and most robust
-// way to register. Lowercase jquery is used because AMD module names are
-// derived from file names, and jQuery is normally delivered in a lowercase
-// file name. Do this after creating the global so that if an AMD module wants
-// to call noConflict to hide this version of jQuery, it will work.
-
-// Note that for maximum portability, libraries that are not jQuery should
-// declare themselves as anonymous modules, and avoid setting a global if an
-// AMD loader is present. jQuery is a special case. For more information, see
-// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
-if ( typeof define === "function" && define.amd ) {
- define( "jquery", [], function() {
- return jQuery;
- } );
-}
-
-
-
-
-var
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$;
-
-jQuery.noConflict = function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
-};
-
-// Expose jQuery and $ identifiers, even in AMD
-// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
-// and CommonJS for browser emulators (#13566)
-if ( !noGlobal ) {
- window.jQuery = window.$ = jQuery;
-}
-
-
-
-
-return jQuery;
-} ); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery-ui-latest.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery-ui-latest.js
deleted file mode 100644
index 02135523..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery-ui-latest.js
+++ /dev/null
@@ -1,18706 +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( factory ) {
- if ( typeof define === "function" && define.amd ) {
-
- // AMD. Register as an anonymous module.
- define([ "jquery" ], factory );
- } else {
-
- // Browser globals
- factory( jQuery );
- }
-}(function( $ ) {
-
-$.ui = $.ui || {};
-
-var version = $.ui.version = "1.12.1";
-
-
-/*!
- * jQuery UI Widget 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Widget
-//>>group: Core
-//>>description: Provides a factory for creating stateful widgets with a common API.
-//>>docs: http://api.jqueryui.com/jQuery.widget/
-//>>demos: http://jqueryui.com/widget/
-
-
-
-var widgetUuid = 0;
-var widgetSlice = Array.prototype.slice;
-
-$.cleanData = ( function( orig ) {
- return function( elems ) {
- var events, elem, i;
- for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {
- try {
-
- // Only trigger remove when necessary to save time
- events = $._data( elem, "events" );
- if ( events && events.remove ) {
- $( elem ).triggerHandler( "remove" );
- }
-
- // Http://bugs.jquery.com/ticket/8235
- } catch ( e ) {}
- }
- orig( elems );
- };
-} )( $.cleanData );
-
-$.widget = function( name, base, prototype ) {
- var existingConstructor, constructor, basePrototype;
-
- // ProxiedPrototype allows the provided prototype to remain unmodified
- // so that it can be used as a mixin for multiple widgets (#8876)
- var proxiedPrototype = {};
-
- var namespace = name.split( "." )[ 0 ];
- name = name.split( "." )[ 1 ];
- var fullName = namespace + "-" + name;
-
- if ( !prototype ) {
- prototype = base;
- base = $.Widget;
- }
-
- if ( $.isArray( prototype ) ) {
- prototype = $.extend.apply( null, [ {} ].concat( prototype ) );
- }
-
- // Create selector for plugin
- $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
- return !!$.data( elem, fullName );
- };
-
- $[ namespace ] = $[ namespace ] || {};
- existingConstructor = $[ namespace ][ name ];
- constructor = $[ namespace ][ name ] = function( options, element ) {
-
- // Allow instantiation without "new" keyword
- if ( !this._createWidget ) {
- return new constructor( options, element );
- }
-
- // Allow instantiation without initializing for simple inheritance
- // must use "new" keyword (the code above always passes args)
- if ( arguments.length ) {
- this._createWidget( options, element );
- }
- };
-
- // Extend with the existing constructor to carry over any static properties
- $.extend( constructor, existingConstructor, {
- version: prototype.version,
-
- // Copy the object used to create the prototype in case we need to
- // redefine the widget later
- _proto: $.extend( {}, prototype ),
-
- // Track widgets that inherit from this widget in case this widget is
- // redefined after a widget inherits from it
- _childConstructors: []
- } );
-
- basePrototype = new base();
-
- // We need to make the options hash a property directly on the new instance
- // otherwise we'll modify the options hash on the prototype that we're
- // inheriting from
- basePrototype.options = $.widget.extend( {}, basePrototype.options );
- $.each( prototype, function( prop, value ) {
- if ( !$.isFunction( value ) ) {
- proxiedPrototype[ prop ] = value;
- return;
- }
- proxiedPrototype[ prop ] = ( function() {
- function _super() {
- return base.prototype[ prop ].apply( this, arguments );
- }
-
- function _superApply( args ) {
- return base.prototype[ prop ].apply( this, args );
- }
-
- return function() {
- var __super = this._super;
- var __superApply = this._superApply;
- var returnValue;
-
- this._super = _super;
- this._superApply = _superApply;
-
- returnValue = value.apply( this, arguments );
-
- this._super = __super;
- this._superApply = __superApply;
-
- return returnValue;
- };
- } )();
- } );
- constructor.prototype = $.widget.extend( basePrototype, {
-
- // TODO: remove support for widgetEventPrefix
- // always use the name + a colon as the prefix, e.g., draggable:start
- // don't prefix for widgets that aren't DOM-based
- widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name
- }, proxiedPrototype, {
- constructor: constructor,
- namespace: namespace,
- widgetName: name,
- widgetFullName: fullName
- } );
-
- // If this widget is being redefined then we need to find all widgets that
- // are inheriting from it and redefine all of them so that they inherit from
- // the new version of this widget. We're essentially trying to replace one
- // level in the prototype chain.
- if ( existingConstructor ) {
- $.each( existingConstructor._childConstructors, function( i, child ) {
- var childPrototype = child.prototype;
-
- // Redefine the child widget using the same prototype that was
- // originally used, but inherit from the new version of the base
- $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor,
- child._proto );
- } );
-
- // Remove the list of existing child constructors from the old constructor
- // so the old child constructors can be garbage collected
- delete existingConstructor._childConstructors;
- } else {
- base._childConstructors.push( constructor );
- }
-
- $.widget.bridge( name, constructor );
-
- return constructor;
-};
-
-$.widget.extend = function( target ) {
- var input = widgetSlice.call( arguments, 1 );
- var inputIndex = 0;
- var inputLength = input.length;
- var key;
- var value;
-
- for ( ; inputIndex < inputLength; inputIndex++ ) {
- for ( key in input[ inputIndex ] ) {
- value = input[ inputIndex ][ key ];
- if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
-
- // Clone objects
- if ( $.isPlainObject( value ) ) {
- target[ key ] = $.isPlainObject( target[ key ] ) ?
- $.widget.extend( {}, target[ key ], value ) :
-
- // Don't extend strings, arrays, etc. with objects
- $.widget.extend( {}, value );
-
- // Copy everything else by reference
- } else {
- target[ key ] = value;
- }
- }
- }
- }
- return target;
-};
-
-$.widget.bridge = function( name, object ) {
- var fullName = object.prototype.widgetFullName || name;
- $.fn[ name ] = function( options ) {
- var isMethodCall = typeof options === "string";
- var args = widgetSlice.call( arguments, 1 );
- var returnValue = this;
-
- if ( isMethodCall ) {
-
- // If this is an empty collection, we need to have the instance method
- // return undefined instead of the jQuery instance
- if ( !this.length && options === "instance" ) {
- returnValue = undefined;
- } else {
- this.each( function() {
- var methodValue;
- var instance = $.data( this, fullName );
-
- if ( options === "instance" ) {
- returnValue = instance;
- return false;
- }
-
- if ( !instance ) {
- return $.error( "cannot call methods on " + name +
- " prior to initialization; " +
- "attempted to call method '" + options + "'" );
- }
-
- if ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) {
- return $.error( "no such method '" + options + "' for " + name +
- " widget instance" );
- }
-
- methodValue = instance[ options ].apply( instance, args );
-
- if ( methodValue !== instance && methodValue !== undefined ) {
- returnValue = methodValue && methodValue.jquery ?
- returnValue.pushStack( methodValue.get() ) :
- methodValue;
- return false;
- }
- } );
- }
- } else {
-
- // Allow multiple hashes to be passed on init
- if ( args.length ) {
- options = $.widget.extend.apply( null, [ options ].concat( args ) );
- }
-
- this.each( function() {
- var instance = $.data( this, fullName );
- if ( instance ) {
- instance.option( options || {} );
- if ( instance._init ) {
- instance._init();
- }
- } else {
- $.data( this, fullName, new object( options, this ) );
- }
- } );
- }
-
- return returnValue;
- };
-};
-
-$.Widget = function( /* options, element */ ) {};
-$.Widget._childConstructors = [];
-
-$.Widget.prototype = {
- widgetName: "widget",
- widgetEventPrefix: "",
- defaultElement: "<div>",
-
- options: {
- classes: {},
- disabled: false,
-
- // Callbacks
- create: null
- },
-
- _createWidget: function( options, element ) {
- element = $( element || this.defaultElement || this )[ 0 ];
- this.element = $( element );
- this.uuid = widgetUuid++;
- this.eventNamespace = "." + this.widgetName + this.uuid;
-
- this.bindings = $();
- this.hoverable = $();
- this.focusable = $();
- this.classesElementLookup = {};
-
- if ( element !== this ) {
- $.data( element, this.widgetFullName, this );
- this._on( true, this.element, {
- remove: function( event ) {
- if ( event.target === element ) {
- this.destroy();
- }
- }
- } );
- this.document = $( element.style ?
-
- // Element within the document
- element.ownerDocument :
-
- // Element is window or document
- element.document || element );
- this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );
- }
-
- this.options = $.widget.extend( {},
- this.options,
- this._getCreateOptions(),
- options );
-
- this._create();
-
- if ( this.options.disabled ) {
- this._setOptionDisabled( this.options.disabled );
- }
-
- this._trigger( "create", null, this._getCreateEventData() );
- this._init();
- },
-
- _getCreateOptions: function() {
- return {};
- },
-
- _getCreateEventData: $.noop,
-
- _create: $.noop,
-
- _init: $.noop,
-
- destroy: function() {
- var that = this;
-
- this._destroy();
- $.each( this.classesElementLookup, function( key, value ) {
- that._removeClass( value, key );
- } );
-
- // We can probably remove the unbind calls in 2.0
- // all event bindings should go through this._on()
- this.element
- .off( this.eventNamespace )
- .removeData( this.widgetFullName );
- this.widget()
- .off( this.eventNamespace )
- .removeAttr( "aria-disabled" );
-
- // Clean up events and states
- this.bindings.off( this.eventNamespace );
- },
-
- _destroy: $.noop,
-
- widget: function() {
- return this.element;
- },
-
- option: function( key, value ) {
- var options = key;
- var parts;
- var curOption;
- var i;
-
- if ( arguments.length === 0 ) {
-
- // Don't return a reference to the internal hash
- return $.widget.extend( {}, this.options );
- }
-
- if ( typeof key === "string" ) {
-
- // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
- options = {};
- parts = key.split( "." );
- key = parts.shift();
- if ( parts.length ) {
- curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
- for ( i = 0; i < parts.length - 1; i++ ) {
- curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
- curOption = curOption[ parts[ i ] ];
- }
- key = parts.pop();
- if ( arguments.length === 1 ) {
- return curOption[ key ] === undefined ? null : curOption[ key ];
- }
- curOption[ key ] = value;
- } else {
- if ( arguments.length === 1 ) {
- return this.options[ key ] === undefined ? null : this.options[ key ];
- }
- options[ key ] = value;
- }
- }
-
- this._setOptions( options );
-
- return this;
- },
-
- _setOptions: function( options ) {
- var key;
-
- for ( key in options ) {
- this._setOption( key, options[ key ] );
- }
-
- return this;
- },
-
- _setOption: function( key, value ) {
- if ( key === "classes" ) {
- this._setOptionClasses( value );
- }
-
- this.options[ key ] = value;
-
- if ( key === "disabled" ) {
- this._setOptionDisabled( value );
- }
-
- return this;
- },
-
- _setOptionClasses: function( value ) {
- var classKey, elements, currentElements;
-
- for ( classKey in value ) {
- currentElements = this.classesElementLookup[ classKey ];
- if ( value[ classKey ] === this.options.classes[ classKey ] ||
- !currentElements ||
- !currentElements.length ) {
- continue;
- }
-
- // We are doing this to create a new jQuery object because the _removeClass() call
- // on the next line is going to destroy the reference to the current elements being
- // tracked. We need to save a copy of this collection so that we can add the new classes
- // below.
- elements = $( currentElements.get() );
- this._removeClass( currentElements, classKey );
-
- // We don't use _addClass() here, because that uses this.options.classes
- // for generating the string of classes. We want to use the value passed in from
- // _setOption(), this is the new value of the classes option which was passed to
- // _setOption(). We pass this value directly to _classes().
- elements.addClass( this._classes( {
- element: elements,
- keys: classKey,
- classes: value,
- add: true
- } ) );
- }
- },
-
- _setOptionDisabled: function( value ) {
- this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );
-
- // If the widget is becoming disabled, then nothing is interactive
- if ( value ) {
- this._removeClass( this.hoverable, null, "ui-state-hover" );
- this._removeClass( this.focusable, null, "ui-state-focus" );
- }
- },
-
- enable: function() {
- return this._setOptions( { disabled: false } );
- },
-
- disable: function() {
- return this._setOptions( { disabled: true } );
- },
-
- _classes: function( options ) {
- var full = [];
- var that = this;
-
- options = $.extend( {
- element: this.element,
- classes: this.options.classes || {}
- }, options );
-
- function processClassString( classes, checkOption ) {
- var current, i;
- for ( i = 0; i < classes.length; i++ ) {
- current = that.classesElementLookup[ classes[ i ] ] || $();
- if ( options.add ) {
- current = $( $.unique( current.get().concat( options.element.get() ) ) );
- } else {
- current = $( current.not( options.element ).get() );
- }
- that.classesElementLookup[ classes[ i ] ] = current;
- full.push( classes[ i ] );
- if ( checkOption && options.classes[ classes[ i ] ] ) {
- full.push( options.classes[ classes[ i ] ] );
- }
- }
- }
-
- this._on( options.element, {
- "remove": "_untrackClassesElement"
- } );
-
- if ( options.keys ) {
- processClassString( options.keys.match( /\S+/g ) || [], true );
- }
- if ( options.extra ) {
- processClassString( options.extra.match( /\S+/g ) || [] );
- }
-
- return full.join( " " );
- },
-
- _untrackClassesElement: function( event ) {
- var that = this;
- $.each( that.classesElementLookup, function( key, value ) {
- if ( $.inArray( event.target, value ) !== -1 ) {
- that.classesElementLookup[ key ] = $( value.not( event.target ).get() );
- }
- } );
- },
-
- _removeClass: function( element, keys, extra ) {
- return this._toggleClass( element, keys, extra, false );
- },
-
- _addClass: function( element, keys, extra ) {
- return this._toggleClass( element, keys, extra, true );
- },
-
- _toggleClass: function( element, keys, extra, add ) {
- add = ( typeof add === "boolean" ) ? add : extra;
- var shift = ( typeof element === "string" || element === null ),
- options = {
- extra: shift ? keys : extra,
- keys: shift ? element : keys,
- element: shift ? this.element : element,
- add: add
- };
- options.element.toggleClass( this._classes( options ), add );
- return this;
- },
-
- _on: function( suppressDisabledCheck, element, handlers ) {
- var delegateElement;
- var instance = this;
-
- // No suppressDisabledCheck flag, shuffle arguments
- if ( typeof suppressDisabledCheck !== "boolean" ) {
- handlers = element;
- element = suppressDisabledCheck;
- suppressDisabledCheck = false;
- }
-
- // No element argument, shuffle and use this.element
- if ( !handlers ) {
- handlers = element;
- element = this.element;
- delegateElement = this.widget();
- } else {
- element = delegateElement = $( element );
- this.bindings = this.bindings.add( element );
- }
-
- $.each( handlers, function( event, handler ) {
- function handlerProxy() {
-
- // Allow widgets to customize the disabled handling
- // - disabled as an array instead of boolean
- // - disabled class as method for disabling individual parts
- if ( !suppressDisabledCheck &&
- ( instance.options.disabled === true ||
- $( this ).hasClass( "ui-state-disabled" ) ) ) {
- return;
- }
- return ( typeof handler === "string" ? instance[ handler ] : handler )
- .apply( instance, arguments );
- }
-
- // Copy the guid so direct unbinding works
- if ( typeof handler !== "string" ) {
- handlerProxy.guid = handler.guid =
- handler.guid || handlerProxy.guid || $.guid++;
- }
-
- var match = event.match( /^([\w:-]*)\s*(.*)$/ );
- var eventName = match[ 1 ] + instance.eventNamespace;
- var selector = match[ 2 ];
-
- if ( selector ) {
- delegateElement.on( eventName, selector, handlerProxy );
- } else {
- element.on( eventName, handlerProxy );
- }
- } );
- },
-
- _off: function( element, eventName ) {
- eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +
- this.eventNamespace;
- element.off( eventName ).off( eventName );
-
- // Clear the stack to avoid memory leaks (#10056)
- this.bindings = $( this.bindings.not( element ).get() );
- this.focusable = $( this.focusable.not( element ).get() );
- this.hoverable = $( this.hoverable.not( element ).get() );
- },
-
- _delay: function( handler, delay ) {
- function handlerProxy() {
- return ( typeof handler === "string" ? instance[ handler ] : handler )
- .apply( instance, arguments );
- }
- var instance = this;
- return setTimeout( handlerProxy, delay || 0 );
- },
-
- _hoverable: function( element ) {
- this.hoverable = this.hoverable.add( element );
- this._on( element, {
- mouseenter: function( event ) {
- this._addClass( $( event.currentTarget ), null, "ui-state-hover" );
- },
- mouseleave: function( event ) {
- this._removeClass( $( event.currentTarget ), null, "ui-state-hover" );
- }
- } );
- },
-
- _focusable: function( element ) {
- this.focusable = this.focusable.add( element );
- this._on( element, {
- focusin: function( event ) {
- this._addClass( $( event.currentTarget ), null, "ui-state-focus" );
- },
- focusout: function( event ) {
- this._removeClass( $( event.currentTarget ), null, "ui-state-focus" );
- }
- } );
- },
-
- _trigger: function( type, event, data ) {
- var prop, orig;
- var callback = this.options[ type ];
-
- data = data || {};
- event = $.Event( event );
- event.type = ( type === this.widgetEventPrefix ?
- type :
- this.widgetEventPrefix + type ).toLowerCase();
-
- // The original event may come from any element
- // so we need to reset the target on the new event
- event.target = this.element[ 0 ];
-
- // Copy original event properties over to the new event
- orig = event.originalEvent;
- if ( orig ) {
- for ( prop in orig ) {
- if ( !( prop in event ) ) {
- event[ prop ] = orig[ prop ];
- }
- }
- }
-
- this.element.trigger( event, data );
- return !( $.isFunction( callback ) &&
- callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||
- event.isDefaultPrevented() );
- }
-};
-
-$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
- $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
- if ( typeof options === "string" ) {
- options = { effect: options };
- }
-
- var hasOptions;
- var effectName = !options ?
- method :
- options === true || typeof options === "number" ?
- defaultEffect :
- options.effect || defaultEffect;
-
- options = options || {};
- if ( typeof options === "number" ) {
- options = { duration: options };
- }
-
- hasOptions = !$.isEmptyObject( options );
- options.complete = callback;
-
- if ( options.delay ) {
- element.delay( options.delay );
- }
-
- if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
- element[ method ]( options );
- } else if ( effectName !== method && element[ effectName ] ) {
- element[ effectName ]( options.duration, options.easing, callback );
- } else {
- element.queue( function( next ) {
- $( this )[ method ]();
- if ( callback ) {
- callback.call( element[ 0 ] );
- }
- next();
- } );
- }
- };
-} );
-
-var widget = $.widget;
-
-
-/*!
- * jQuery UI Position 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * http://api.jqueryui.com/position/
- */
-
-//>>label: Position
-//>>group: Core
-//>>description: Positions elements relative to other elements.
-//>>docs: http://api.jqueryui.com/position/
-//>>demos: http://jqueryui.com/position/
-
-
-( function() {
-var cachedScrollbarWidth,
- max = Math.max,
- abs = Math.abs,
- rhorizontal = /left|center|right/,
- rvertical = /top|center|bottom/,
- roffset = /[\+\-]\d+(\.[\d]+)?%?/,
- rposition = /^\w+/,
- rpercent = /%$/,
- _position = $.fn.position;
-
-function getOffsets( offsets, width, height ) {
- return [
- parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
- parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
- ];
-}
-
-function parseCss( element, property ) {
- return parseInt( $.css( element, property ), 10 ) || 0;
-}
-
-function getDimensions( elem ) {
- var raw = elem[ 0 ];
- if ( raw.nodeType === 9 ) {
- return {
- width: elem.width(),
- height: elem.height(),
- offset: { top: 0, left: 0 }
- };
- }
- if ( $.isWindow( raw ) ) {
- return {
- width: elem.width(),
- height: elem.height(),
- offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
- };
- }
- if ( raw.preventDefault ) {
- return {
- width: 0,
- height: 0,
- offset: { top: raw.pageY, left: raw.pageX }
- };
- }
- return {
- width: elem.outerWidth(),
- height: elem.outerHeight(),
- offset: elem.offset()
- };
-}
-
-$.position = {
- scrollbarWidth: function() {
- if ( cachedScrollbarWidth !== undefined ) {
- return cachedScrollbarWidth;
- }
- var w1, w2,
- div = $( "<div " +
- "style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>" +
- "<div style='height:100px;width:auto;'></div></div>" ),
- innerDiv = div.children()[ 0 ];
-
- $( "body" ).append( div );
- w1 = innerDiv.offsetWidth;
- div.css( "overflow", "scroll" );
-
- w2 = innerDiv.offsetWidth;
-
- if ( w1 === w2 ) {
- w2 = div[ 0 ].clientWidth;
- }
-
- div.remove();
-
- return ( cachedScrollbarWidth = w1 - w2 );
- },
- getScrollInfo: function( within ) {
- var overflowX = within.isWindow || within.isDocument ? "" :
- within.element.css( "overflow-x" ),
- overflowY = within.isWindow || within.isDocument ? "" :
- within.element.css( "overflow-y" ),
- hasOverflowX = overflowX === "scroll" ||
- ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ),
- hasOverflowY = overflowY === "scroll" ||
- ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight );
- return {
- width: hasOverflowY ? $.position.scrollbarWidth() : 0,
- height: hasOverflowX ? $.position.scrollbarWidth() : 0
- };
- },
- getWithinInfo: function( element ) {
- var withinElement = $( element || window ),
- isWindow = $.isWindow( withinElement[ 0 ] ),
- isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,
- hasOffset = !isWindow && !isDocument;
- return {
- element: withinElement,
- isWindow: isWindow,
- isDocument: isDocument,
- offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },
- scrollLeft: withinElement.scrollLeft(),
- scrollTop: withinElement.scrollTop(),
- width: withinElement.outerWidth(),
- height: withinElement.outerHeight()
- };
- }
-};
-
-$.fn.position = function( options ) {
- if ( !options || !options.of ) {
- return _position.apply( this, arguments );
- }
-
- // Make a copy, we don't want to modify arguments
- options = $.extend( {}, options );
-
- var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
- target = $( options.of ),
- within = $.position.getWithinInfo( options.within ),
- scrollInfo = $.position.getScrollInfo( within ),
- collision = ( options.collision || "flip" ).split( " " ),
- offsets = {};
-
- dimensions = getDimensions( target );
- if ( target[ 0 ].preventDefault ) {
-
- // Force left top to allow flipping
- options.at = "left top";
- }
- targetWidth = dimensions.width;
- targetHeight = dimensions.height;
- targetOffset = dimensions.offset;
-
- // Clone to reuse original targetOffset later
- basePosition = $.extend( {}, targetOffset );
-
- // Force my and at to have valid horizontal and vertical positions
- // if a value is missing or invalid, it will be converted to center
- $.each( [ "my", "at" ], function() {
- var pos = ( options[ this ] || "" ).split( " " ),
- horizontalOffset,
- verticalOffset;
-
- if ( pos.length === 1 ) {
- pos = rhorizontal.test( pos[ 0 ] ) ?
- pos.concat( [ "center" ] ) :
- rvertical.test( pos[ 0 ] ) ?
- [ "center" ].concat( pos ) :
- [ "center", "center" ];
- }
- pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
- pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
-
- // Calculate offsets
- horizontalOffset = roffset.exec( pos[ 0 ] );
- verticalOffset = roffset.exec( pos[ 1 ] );
- offsets[ this ] = [
- horizontalOffset ? horizontalOffset[ 0 ] : 0,
- verticalOffset ? verticalOffset[ 0 ] : 0
- ];
-
- // Reduce to just the positions without the offsets
- options[ this ] = [
- rposition.exec( pos[ 0 ] )[ 0 ],
- rposition.exec( pos[ 1 ] )[ 0 ]
- ];
- } );
-
- // Normalize collision option
- if ( collision.length === 1 ) {
- collision[ 1 ] = collision[ 0 ];
- }
-
- if ( options.at[ 0 ] === "right" ) {
- basePosition.left += targetWidth;
- } else if ( options.at[ 0 ] === "center" ) {
- basePosition.left += targetWidth / 2;
- }
-
- if ( options.at[ 1 ] === "bottom" ) {
- basePosition.top += targetHeight;
- } else if ( options.at[ 1 ] === "center" ) {
- basePosition.top += targetHeight / 2;
- }
-
- atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
- basePosition.left += atOffset[ 0 ];
- basePosition.top += atOffset[ 1 ];
-
- return this.each( function() {
- var collisionPosition, using,
- elem = $( this ),
- elemWidth = elem.outerWidth(),
- elemHeight = elem.outerHeight(),
- marginLeft = parseCss( this, "marginLeft" ),
- marginTop = parseCss( this, "marginTop" ),
- collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) +
- scrollInfo.width,
- collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) +
- scrollInfo.height,
- position = $.extend( {}, basePosition ),
- myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
-
- if ( options.my[ 0 ] === "right" ) {
- position.left -= elemWidth;
- } else if ( options.my[ 0 ] === "center" ) {
- position.left -= elemWidth / 2;
- }
-
- if ( options.my[ 1 ] === "bottom" ) {
- position.top -= elemHeight;
- } else if ( options.my[ 1 ] === "center" ) {
- position.top -= elemHeight / 2;
- }
-
- position.left += myOffset[ 0 ];
- position.top += myOffset[ 1 ];
-
- collisionPosition = {
- marginLeft: marginLeft,
- marginTop: marginTop
- };
-
- $.each( [ "left", "top" ], function( i, dir ) {
- if ( $.ui.position[ collision[ i ] ] ) {
- $.ui.position[ collision[ i ] ][ dir ]( position, {
- targetWidth: targetWidth,
- targetHeight: targetHeight,
- elemWidth: elemWidth,
- elemHeight: elemHeight,
- collisionPosition: collisionPosition,
- collisionWidth: collisionWidth,
- collisionHeight: collisionHeight,
- offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
- my: options.my,
- at: options.at,
- within: within,
- elem: elem
- } );
- }
- } );
-
- if ( options.using ) {
-
- // Adds feedback as second argument to using callback, if present
- using = function( props ) {
- var left = targetOffset.left - position.left,
- right = left + targetWidth - elemWidth,
- top = targetOffset.top - position.top,
- bottom = top + targetHeight - elemHeight,
- feedback = {
- target: {
- element: target,
- left: targetOffset.left,
- top: targetOffset.top,
- width: targetWidth,
- height: targetHeight
- },
- element: {
- element: elem,
- left: position.left,
- top: position.top,
- width: elemWidth,
- height: elemHeight
- },
- horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
- vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
- };
- if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
- feedback.horizontal = "center";
- }
- if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
- feedback.vertical = "middle";
- }
- if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
- feedback.important = "horizontal";
- } else {
- feedback.important = "vertical";
- }
- options.using.call( this, props, feedback );
- };
- }
-
- elem.offset( $.extend( position, { using: using } ) );
- } );
-};
-
-$.ui.position = {
- fit: {
- left: function( position, data ) {
- var within = data.within,
- withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
- outerWidth = within.width,
- collisionPosLeft = position.left - data.collisionPosition.marginLeft,
- overLeft = withinOffset - collisionPosLeft,
- overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
- newOverRight;
-
- // Element is wider than within
- if ( data.collisionWidth > outerWidth ) {
-
- // Element is initially over the left side of within
- if ( overLeft > 0 && overRight <= 0 ) {
- newOverRight = position.left + overLeft + data.collisionWidth - outerWidth -
- withinOffset;
- position.left += overLeft - newOverRight;
-
- // Element is initially over right side of within
- } else if ( overRight > 0 && overLeft <= 0 ) {
- position.left = withinOffset;
-
- // Element is initially over both left and right sides of within
- } else {
- if ( overLeft > overRight ) {
- position.left = withinOffset + outerWidth - data.collisionWidth;
- } else {
- position.left = withinOffset;
- }
- }
-
- // Too far left -> align with left edge
- } else if ( overLeft > 0 ) {
- position.left += overLeft;
-
- // Too far right -> align with right edge
- } else if ( overRight > 0 ) {
- position.left -= overRight;
-
- // Adjust based on position and margin
- } else {
- position.left = max( position.left - collisionPosLeft, position.left );
- }
- },
- top: function( position, data ) {
- var within = data.within,
- withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
- outerHeight = data.within.height,
- collisionPosTop = position.top - data.collisionPosition.marginTop,
- overTop = withinOffset - collisionPosTop,
- overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
- newOverBottom;
-
- // Element is taller than within
- if ( data.collisionHeight > outerHeight ) {
-
- // Element is initially over the top of within
- if ( overTop > 0 && overBottom <= 0 ) {
- newOverBottom = position.top + overTop + data.collisionHeight - outerHeight -
- withinOffset;
- position.top += overTop - newOverBottom;
-
- // Element is initially over bottom of within
- } else if ( overBottom > 0 && overTop <= 0 ) {
- position.top = withinOffset;
-
- // Element is initially over both top and bottom of within
- } else {
- if ( overTop > overBottom ) {
- position.top = withinOffset + outerHeight - data.collisionHeight;
- } else {
- position.top = withinOffset;
- }
- }
-
- // Too far up -> align with top
- } else if ( overTop > 0 ) {
- position.top += overTop;
-
- // Too far down -> align with bottom edge
- } else if ( overBottom > 0 ) {
- position.top -= overBottom;
-
- // Adjust based on position and margin
- } else {
- position.top = max( position.top - collisionPosTop, position.top );
- }
- }
- },
- flip: {
- left: function( position, data ) {
- var within = data.within,
- withinOffset = within.offset.left + within.scrollLeft,
- outerWidth = within.width,
- offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
- collisionPosLeft = position.left - data.collisionPosition.marginLeft,
- overLeft = collisionPosLeft - offsetLeft,
- overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
- myOffset = data.my[ 0 ] === "left" ?
- -data.elemWidth :
- data.my[ 0 ] === "right" ?
- data.elemWidth :
- 0,
- atOffset = data.at[ 0 ] === "left" ?
- data.targetWidth :
- data.at[ 0 ] === "right" ?
- -data.targetWidth :
- 0,
- offset = -2 * data.offset[ 0 ],
- newOverRight,
- newOverLeft;
-
- if ( overLeft < 0 ) {
- newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -
- outerWidth - withinOffset;
- if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
- position.left += myOffset + atOffset + offset;
- }
- } else if ( overRight > 0 ) {
- newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +
- atOffset + offset - offsetLeft;
- if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
- position.left += myOffset + atOffset + offset;
- }
- }
- },
- top: function( position, data ) {
- var within = data.within,
- withinOffset = within.offset.top + within.scrollTop,
- outerHeight = within.height,
- offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
- collisionPosTop = position.top - data.collisionPosition.marginTop,
- overTop = collisionPosTop - offsetTop,
- overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
- top = data.my[ 1 ] === "top",
- myOffset = top ?
- -data.elemHeight :
- data.my[ 1 ] === "bottom" ?
- data.elemHeight :
- 0,
- atOffset = data.at[ 1 ] === "top" ?
- data.targetHeight :
- data.at[ 1 ] === "bottom" ?
- -data.targetHeight :
- 0,
- offset = -2 * data.offset[ 1 ],
- newOverTop,
- newOverBottom;
- if ( overTop < 0 ) {
- newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -
- outerHeight - withinOffset;
- if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
- position.top += myOffset + atOffset + offset;
- }
- } else if ( overBottom > 0 ) {
- newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +
- offset - offsetTop;
- if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
- position.top += myOffset + atOffset + offset;
- }
- }
- }
- },
- flipfit: {
- left: function() {
- $.ui.position.flip.left.apply( this, arguments );
- $.ui.position.fit.left.apply( this, arguments );
- },
- top: function() {
- $.ui.position.flip.top.apply( this, arguments );
- $.ui.position.fit.top.apply( this, arguments );
- }
- }
-};
-
-} )();
-
-var position = $.ui.position;
-
-
-/*!
- * jQuery UI :data 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: :data Selector
-//>>group: Core
-//>>description: Selects elements which have data stored under the specified key.
-//>>docs: http://api.jqueryui.com/data-selector/
-
-
-var data = $.extend( $.expr[ ":" ], {
- data: $.expr.createPseudo ?
- $.expr.createPseudo( function( dataName ) {
- return function( elem ) {
- return !!$.data( elem, dataName );
- };
- } ) :
-
- // Support: jQuery <1.8
- function( elem, i, match ) {
- return !!$.data( elem, match[ 3 ] );
- }
-} );
-
-/*!
- * jQuery UI Disable Selection 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: disableSelection
-//>>group: Core
-//>>description: Disable selection of text content within the set of matched elements.
-//>>docs: http://api.jqueryui.com/disableSelection/
-
-// This file is deprecated
-
-
-var disableSelection = $.fn.extend( {
- disableSelection: ( function() {
- var eventType = "onselectstart" in document.createElement( "div" ) ?
- "selectstart" :
- "mousedown";
-
- return function() {
- return this.on( eventType + ".ui-disableSelection", function( event ) {
- event.preventDefault();
- } );
- };
- } )(),
-
- enableSelection: function() {
- return this.off( ".ui-disableSelection" );
- }
-} );
-
-
-/*!
- * jQuery UI Effects 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Effects Core
-//>>group: Effects
-// jscs:disable maximumLineLength
-//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.
-// jscs:enable maximumLineLength
-//>>docs: http://api.jqueryui.com/category/effects-core/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var dataSpace = "ui-effects-",
- dataSpaceStyle = "ui-effects-style",
- dataSpaceAnimated = "ui-effects-animated",
-
- // Create a local jQuery because jQuery Color relies on it and the
- // global may not exist with AMD and a custom build (#10199)
- jQuery = $;
-
-$.effects = {
- effect: {}
-};
-
-/*!
- * jQuery Color Animations v2.1.2
- * https://github.com/jquery/jquery-color
- *
- * Copyright 2014 jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * Date: Wed Jan 16 08:47:09 2013 -0600
- */
-( function( jQuery, undefined ) {
-
- var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor " +
- "borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
-
- // Plusequals test for += 100 -= 100
- rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
-
- // A set of RE's that can match strings and generate color tuples.
- stringParsers = [ {
- re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
- parse: function( execResult ) {
- return [
- execResult[ 1 ],
- execResult[ 2 ],
- execResult[ 3 ],
- execResult[ 4 ]
- ];
- }
- }, {
- re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
- parse: function( execResult ) {
- return [
- execResult[ 1 ] * 2.55,
- execResult[ 2 ] * 2.55,
- execResult[ 3 ] * 2.55,
- execResult[ 4 ]
- ];
- }
- }, {
-
- // This regex ignores A-F because it's compared against an already lowercased string
- re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
- parse: function( execResult ) {
- return [
- parseInt( execResult[ 1 ], 16 ),
- parseInt( execResult[ 2 ], 16 ),
- parseInt( execResult[ 3 ], 16 )
- ];
- }
- }, {
-
- // This regex ignores A-F because it's compared against an already lowercased string
- re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
- parse: function( execResult ) {
- return [
- parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
- parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
- parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
- ];
- }
- }, {
- re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
- space: "hsla",
- parse: function( execResult ) {
- return [
- execResult[ 1 ],
- execResult[ 2 ] / 100,
- execResult[ 3 ] / 100,
- execResult[ 4 ]
- ];
- }
- } ],
-
- // JQuery.Color( )
- color = jQuery.Color = function( color, green, blue, alpha ) {
- return new jQuery.Color.fn.parse( color, green, blue, alpha );
- },
- spaces = {
- 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"
- }
- }
- }
- },
- propTypes = {
- "byte": {
- floor: true,
- max: 255
- },
- "percent": {
- max: 1
- },
- "degrees": {
- mod: 360,
- floor: true
- }
- },
- support = color.support = {},
-
- // Element for support tests
- supportElem = jQuery( "<p>" )[ 0 ],
-
- // Colors = jQuery.Color.names
- colors,
-
- // Local aliases of functions called often
- each = jQuery.each;
-
-// Determine rgba support immediately
-supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
-support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
-
-// Define cache name and alpha properties
-// for rgba and hsla spaces
-each( spaces, function( spaceName, space ) {
- space.cache = "_" + spaceName;
- space.props.alpha = {
- idx: 3,
- type: "percent",
- def: 1
- };
-} );
-
-function clamp( value, prop, allowEmpty ) {
- var type = propTypes[ prop.type ] || {};
-
- if ( value == null ) {
- return ( allowEmpty || !prop.def ) ? null : prop.def;
- }
-
- // ~~ is an short way of doing floor for positive numbers
- value = type.floor ? ~~value : parseFloat( value );
-
- // IE will pass in empty strings as value for alpha,
- // which will hit this case
- if ( isNaN( value ) ) {
- return prop.def;
- }
-
- if ( type.mod ) {
-
- // We add mod before modding to make sure that negatives values
- // get converted properly: -10 -> 350
- return ( value + type.mod ) % type.mod;
- }
-
- // For now all property types without mod have min and max
- return 0 > value ? 0 : type.max < value ? type.max : value;
-}
-
-function stringParse( string ) {
- var inst = color(),
- rgba = inst._rgba = [];
-
- string = string.toLowerCase();
-
- each( stringParsers, function( i, parser ) {
- var parsed,
- match = parser.re.exec( string ),
- values = match && parser.parse( match ),
- spaceName = parser.space || "rgba";
-
- if ( values ) {
- parsed = inst[ spaceName ]( values );
-
- // If this was an rgba parse the assignment might happen twice
- // oh well....
- inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
- rgba = inst._rgba = parsed._rgba;
-
- // Exit each( stringParsers ) here because we matched
- return false;
- }
- } );
-
- // Found a stringParser that handled it
- if ( rgba.length ) {
-
- // If this came from a parsed string, force "transparent" when alpha is 0
- // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
- if ( rgba.join() === "0,0,0,0" ) {
- jQuery.extend( rgba, colors.transparent );
- }
- return inst;
- }
-
- // Named colors
- return colors[ string ];
-}
-
-color.fn = jQuery.extend( color.prototype, {
- parse: function( red, green, blue, alpha ) {
- if ( red === undefined ) {
- this._rgba = [ null, null, null, null ];
- return this;
- }
- if ( red.jquery || red.nodeType ) {
- red = jQuery( red ).css( green );
- green = undefined;
- }
-
- var inst = this,
- type = jQuery.type( red ),
- rgba = this._rgba = [];
-
- // More than 1 argument specified - assume ( red, green, blue, alpha )
- if ( green !== undefined ) {
- red = [ red, green, blue, alpha ];
- type = "array";
- }
-
- if ( type === "string" ) {
- return this.parse( stringParse( red ) || colors._default );
- }
-
- if ( type === "array" ) {
- each( spaces.rgba.props, function( key, prop ) {
- rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
- } );
- return this;
- }
-
- if ( type === "object" ) {
- if ( red instanceof color ) {
- each( spaces, function( spaceName, space ) {
- if ( red[ space.cache ] ) {
- inst[ space.cache ] = red[ space.cache ].slice();
- }
- } );
- } else {
- each( spaces, function( spaceName, space ) {
- var cache = space.cache;
- each( space.props, function( key, prop ) {
-
- // If the cache doesn't exist, and we know how to convert
- if ( !inst[ cache ] && space.to ) {
-
- // If the value was null, we don't need to copy it
- // if the key was alpha, we don't need to copy it either
- if ( key === "alpha" || red[ key ] == null ) {
- return;
- }
- inst[ cache ] = space.to( inst._rgba );
- }
-
- // This is the only case where we allow nulls for ALL properties.
- // call clamp with alwaysAllowEmpty
- inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
- } );
-
- // Everything defined but alpha?
- if ( inst[ cache ] &&
- jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
-
- // Use the default of 1
- inst[ cache ][ 3 ] = 1;
- if ( space.from ) {
- inst._rgba = space.from( inst[ cache ] );
- }
- }
- } );
- }
- return this;
- }
- },
- is: function( compare ) {
- var is = color( compare ),
- same = true,
- inst = this;
-
- each( spaces, function( _, space ) {
- var localCache,
- isCache = is[ space.cache ];
- if ( isCache ) {
- localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
- each( space.props, function( _, prop ) {
- if ( isCache[ prop.idx ] != null ) {
- same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
- return same;
- }
- } );
- }
- return same;
- } );
- return same;
- },
- _space: function() {
- var used = [],
- inst = this;
- each( spaces, function( spaceName, space ) {
- if ( inst[ space.cache ] ) {
- used.push( spaceName );
- }
- } );
- return used.pop();
- },
- transition: function( other, distance ) {
- var end = color( other ),
- spaceName = end._space(),
- space = spaces[ spaceName ],
- startColor = this.alpha() === 0 ? color( "transparent" ) : this,
- start = startColor[ space.cache ] || space.to( startColor._rgba ),
- result = start.slice();
-
- end = end[ space.cache ];
- each( space.props, function( key, prop ) {
- var index = prop.idx,
- startValue = start[ index ],
- endValue = end[ index ],
- type = propTypes[ prop.type ] || {};
-
- // If null, don't override start value
- if ( endValue === null ) {
- return;
- }
-
- // If null - use end
- if ( startValue === null ) {
- result[ index ] = endValue;
- } else {
- if ( type.mod ) {
- if ( endValue - startValue > type.mod / 2 ) {
- startValue += type.mod;
- } else if ( startValue - endValue > type.mod / 2 ) {
- startValue -= type.mod;
- }
- }
- result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
- }
- } );
- return this[ spaceName ]( result );
- },
- blend: function( opaque ) {
-
- // If we are already opaque - return ourself
- if ( this._rgba[ 3 ] === 1 ) {
- return this;
- }
-
- var rgb = this._rgba.slice(),
- a = rgb.pop(),
- blend = color( opaque )._rgba;
-
- return color( jQuery.map( rgb, function( v, i ) {
- return ( 1 - a ) * blend[ i ] + a * v;
- } ) );
- },
- toRgbaString: function() {
- var prefix = "rgba(",
- rgba = jQuery.map( this._rgba, function( v, i ) {
- return v == null ? ( i > 2 ? 1 : 0 ) : v;
- } );
-
- if ( rgba[ 3 ] === 1 ) {
- rgba.pop();
- prefix = "rgb(";
- }
-
- return prefix + rgba.join() + ")";
- },
- toHslaString: function() {
- var prefix = "hsla(",
- hsla = jQuery.map( this.hsla(), function( v, i ) {
- if ( v == null ) {
- v = i > 2 ? 1 : 0;
- }
-
- // Catch 1 and 2
- if ( i && i < 3 ) {
- v = Math.round( v * 100 ) + "%";
- }
- return v;
- } );
-
- if ( hsla[ 3 ] === 1 ) {
- hsla.pop();
- prefix = "hsl(";
- }
- return prefix + hsla.join() + ")";
- },
- toHexString: function( includeAlpha ) {
- var rgba = this._rgba.slice(),
- alpha = rgba.pop();
-
- if ( includeAlpha ) {
- rgba.push( ~~( alpha * 255 ) );
- }
-
- return "#" + jQuery.map( rgba, function( v ) {
-
- // Default to 0 when nulls exist
- v = ( v || 0 ).toString( 16 );
- return v.length === 1 ? "0" + v : v;
- } ).join( "" );
- },
- toString: function() {
- return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
- }
-} );
-color.fn.parse.prototype = color.fn;
-
-// Hsla conversions adapted from:
-// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
-
-function hue2rgb( p, q, h ) {
- h = ( h + 1 ) % 1;
- if ( h * 6 < 1 ) {
- return p + ( q - p ) * h * 6;
- }
- if ( h * 2 < 1 ) {
- return q;
- }
- if ( h * 3 < 2 ) {
- return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;
- }
- return p;
-}
-
-spaces.hsla.to = function( rgba ) {
- if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
- return [ null, null, null, rgba[ 3 ] ];
- }
- var r = rgba[ 0 ] / 255,
- g = rgba[ 1 ] / 255,
- b = rgba[ 2 ] / 255,
- a = rgba[ 3 ],
- max = Math.max( r, g, b ),
- min = Math.min( r, g, b ),
- diff = max - min,
- add = max + min,
- l = add * 0.5,
- h, s;
-
- if ( min === max ) {
- h = 0;
- } else if ( r === max ) {
- h = ( 60 * ( g - b ) / diff ) + 360;
- } else if ( g === max ) {
- h = ( 60 * ( b - r ) / diff ) + 120;
- } else {
- h = ( 60 * ( r - g ) / diff ) + 240;
- }
-
- // Chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
- // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
- if ( diff === 0 ) {
- s = 0;
- } else if ( l <= 0.5 ) {
- s = diff / add;
- } else {
- s = diff / ( 2 - add );
- }
- return [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];
-};
-
-spaces.hsla.from = function( hsla ) {
- if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
- return [ null, null, null, hsla[ 3 ] ];
- }
- var h = hsla[ 0 ] / 360,
- s = hsla[ 1 ],
- l = hsla[ 2 ],
- a = hsla[ 3 ],
- q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
- p = 2 * l - q;
-
- return [
- Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
- Math.round( hue2rgb( p, q, h ) * 255 ),
- Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
- a
- ];
-};
-
-each( spaces, function( spaceName, space ) {
- var props = space.props,
- cache = space.cache,
- to = space.to,
- from = space.from;
-
- // Makes rgba() and hsla()
- color.fn[ spaceName ] = function( value ) {
-
- // Generate a cache for this space if it doesn't exist
- if ( to && !this[ cache ] ) {
- this[ cache ] = to( this._rgba );
- }
- if ( value === undefined ) {
- return this[ cache ].slice();
- }
-
- var ret,
- type = jQuery.type( value ),
- arr = ( type === "array" || type === "object" ) ? value : arguments,
- local = this[ cache ].slice();
-
- each( props, function( key, prop ) {
- var val = arr[ type === "object" ? key : prop.idx ];
- if ( val == null ) {
- val = local[ prop.idx ];
- }
- local[ prop.idx ] = clamp( val, prop );
- } );
-
- if ( from ) {
- ret = color( from( local ) );
- ret[ cache ] = local;
- return ret;
- } else {
- return color( local );
- }
- };
-
- // Makes red() green() blue() alpha() hue() saturation() lightness()
- each( props, function( key, prop ) {
-
- // Alpha is included in more than one space
- if ( color.fn[ key ] ) {
- return;
- }
- color.fn[ key ] = function( value ) {
- var vtype = jQuery.type( value ),
- fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
- local = this[ fn ](),
- cur = local[ prop.idx ],
- match;
-
- if ( vtype === "undefined" ) {
- return cur;
- }
-
- if ( vtype === "function" ) {
- value = value.call( this, cur );
- vtype = jQuery.type( value );
- }
- if ( value == null && prop.empty ) {
- return this;
- }
- if ( vtype === "string" ) {
- match = rplusequals.exec( value );
- if ( match ) {
- value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
- }
- }
- local[ prop.idx ] = value;
- return this[ fn ]( local );
- };
- } );
-} );
-
-// Add cssHook and .fx.step function for each named hook.
-// accept a space separated string of properties
-color.hook = function( hook ) {
- var hooks = hook.split( " " );
- each( hooks, function( i, hook ) {
- jQuery.cssHooks[ hook ] = {
- set: function( elem, value ) {
- var parsed, curElem,
- backgroundColor = "";
-
- if ( value !== "transparent" && ( jQuery.type( value ) !== "string" ||
- ( parsed = stringParse( value ) ) ) ) {
- value = color( parsed || value );
- if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
- curElem = hook === "backgroundColor" ? elem.parentNode : elem;
- while (
- ( backgroundColor === "" || backgroundColor === "transparent" ) &&
- curElem && curElem.style
- ) {
- try {
- backgroundColor = jQuery.css( curElem, "backgroundColor" );
- curElem = curElem.parentNode;
- } catch ( e ) {
- }
- }
-
- value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
- backgroundColor :
- "_default" );
- }
-
- value = value.toRgbaString();
- }
- try {
- elem.style[ hook ] = value;
- } catch ( e ) {
-
- // Wrapped to prevent IE from throwing errors on "invalid" values like
- // 'auto' or 'inherit'
- }
- }
- };
- jQuery.fx.step[ hook ] = function( fx ) {
- if ( !fx.colorInit ) {
- fx.start = color( fx.elem, hook );
- fx.end = color( fx.end );
- fx.colorInit = true;
- }
- jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
- };
- } );
-
-};
-
-color.hook( stepHooks );
-
-jQuery.cssHooks.borderColor = {
- expand: function( value ) {
- var expanded = {};
-
- each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
- expanded[ "border" + part + "Color" ] = value;
- } );
- return expanded;
- }
-};
-
-// Basic color names only.
-// Usage of any of the other color names requires adding yourself or including
-// jquery.color.svg-names.js.
-colors = jQuery.Color.names = {
-
- // 4.1. Basic color keywords
- 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",
-
- // 4.2.3. "transparent" color keyword
- transparent: [ null, null, null, 0 ],
-
- _default: "#ffffff"
-};
-
-} )( jQuery );
-
-/******************************************************************************/
-/****************************** CLASS ANIMATIONS ******************************/
-/******************************************************************************/
-( function() {
-
-var classAnimationActions = [ "add", "remove", "toggle" ],
- shorthandStyles = {
- border: 1,
- borderBottom: 1,
- borderColor: 1,
- borderLeft: 1,
- borderRight: 1,
- borderTop: 1,
- borderWidth: 1,
- margin: 1,
- padding: 1
- };
-
-$.each(
- [ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ],
- function( _, prop ) {
- $.fx.step[ prop ] = function( fx ) {
- if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
- jQuery.style( fx.elem, prop, fx.end );
- fx.setAttr = true;
- }
- };
- }
-);
-
-function getElementStyles( elem ) {
- var key, len,
- style = elem.ownerDocument.defaultView ?
- elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
- elem.currentStyle,
- styles = {};
-
- if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
- len = style.length;
- while ( len-- ) {
- key = style[ len ];
- if ( typeof style[ key ] === "string" ) {
- styles[ $.camelCase( key ) ] = style[ key ];
- }
- }
-
- // Support: Opera, IE <9
- } else {
- for ( key in style ) {
- if ( typeof style[ key ] === "string" ) {
- styles[ key ] = style[ key ];
- }
- }
- }
-
- return styles;
-}
-
-function styleDifference( oldStyle, newStyle ) {
- var diff = {},
- name, value;
-
- for ( name in newStyle ) {
- value = newStyle[ name ];
- if ( oldStyle[ name ] !== value ) {
- if ( !shorthandStyles[ name ] ) {
- if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
- diff[ name ] = value;
- }
- }
- }
- }
-
- return diff;
-}
-
-// Support: jQuery <1.8
-if ( !$.fn.addBack ) {
- $.fn.addBack = function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter( selector )
- );
- };
-}
-
-$.effects.animateClass = function( value, duration, easing, callback ) {
- var o = $.speed( duration, easing, callback );
-
- return this.queue( function() {
- var animated = $( this ),
- baseClass = animated.attr( "class" ) || "",
- applyClassChange,
- allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
-
- // Map the animated objects to store the original styles.
- allAnimations = allAnimations.map( function() {
- var el = $( this );
- return {
- el: el,
- start: getElementStyles( this )
- };
- } );
-
- // Apply class change
- applyClassChange = function() {
- $.each( classAnimationActions, function( i, action ) {
- if ( value[ action ] ) {
- animated[ action + "Class" ]( value[ action ] );
- }
- } );
- };
- applyClassChange();
-
- // Map all animated objects again - calculate new styles and diff
- allAnimations = allAnimations.map( function() {
- this.end = getElementStyles( this.el[ 0 ] );
- this.diff = styleDifference( this.start, this.end );
- return this;
- } );
-
- // Apply original class
- animated.attr( "class", baseClass );
-
- // Map all animated objects again - this time collecting a promise
- allAnimations = allAnimations.map( function() {
- var styleInfo = this,
- dfd = $.Deferred(),
- opts = $.extend( {}, o, {
- queue: false,
- complete: function() {
- dfd.resolve( styleInfo );
- }
- } );
-
- this.el.animate( this.diff, opts );
- return dfd.promise();
- } );
-
- // Once all animations have completed:
- $.when.apply( $, allAnimations.get() ).done( function() {
-
- // Set the final class
- applyClassChange();
-
- // For each animated element,
- // clear all css properties that were animated
- $.each( arguments, function() {
- var el = this.el;
- $.each( this.diff, function( key ) {
- el.css( key, "" );
- } );
- } );
-
- // This is guarnteed to be there if you use jQuery.speed()
- // it also handles dequeuing the next anim...
- o.complete.call( animated[ 0 ] );
- } );
- } );
-};
-
-$.fn.extend( {
- addClass: ( function( orig ) {
- return function( classNames, speed, easing, callback ) {
- return speed ?
- $.effects.animateClass.call( this,
- { add: classNames }, speed, easing, callback ) :
- orig.apply( this, arguments );
- };
- } )( $.fn.addClass ),
-
- removeClass: ( function( orig ) {
- return function( classNames, speed, easing, callback ) {
- return arguments.length > 1 ?
- $.effects.animateClass.call( this,
- { remove: classNames }, speed, easing, callback ) :
- orig.apply( this, arguments );
- };
- } )( $.fn.removeClass ),
-
- toggleClass: ( function( orig ) {
- return function( classNames, force, speed, easing, callback ) {
- if ( typeof force === "boolean" || force === undefined ) {
- if ( !speed ) {
-
- // Without speed parameter
- return orig.apply( this, arguments );
- } else {
- return $.effects.animateClass.call( this,
- ( force ? { add: classNames } : { remove: classNames } ),
- speed, easing, callback );
- }
- } else {
-
- // Without force parameter
- return $.effects.animateClass.call( this,
- { toggle: classNames }, force, speed, easing );
- }
- };
- } )( $.fn.toggleClass ),
-
- switchClass: function( remove, add, speed, easing, callback ) {
- return $.effects.animateClass.call( this, {
- add: add,
- remove: remove
- }, speed, easing, callback );
- }
-} );
-
-} )();
-
-/******************************************************************************/
-/*********************************** EFFECTS **********************************/
-/******************************************************************************/
-
-( function() {
-
-if ( $.expr && $.expr.filters && $.expr.filters.animated ) {
- $.expr.filters.animated = ( function( orig ) {
- return function( elem ) {
- return !!$( elem ).data( dataSpaceAnimated ) || orig( elem );
- };
- } )( $.expr.filters.animated );
-}
-
-if ( $.uiBackCompat !== false ) {
- $.extend( $.effects, {
-
- // Saves a set of properties in a data storage
- save: function( element, set ) {
- var i = 0, length = set.length;
- for ( ; i < length; i++ ) {
- if ( set[ i ] !== null ) {
- element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
- }
- }
- },
-
- // Restores a set of previously saved properties from a data storage
- restore: function( element, set ) {
- var val, i = 0, length = set.length;
- for ( ; i < length; i++ ) {
- if ( set[ i ] !== null ) {
- val = element.data( dataSpace + set[ i ] );
- element.css( set[ i ], val );
- }
- }
- },
-
- setMode: function( el, mode ) {
- if ( mode === "toggle" ) {
- mode = el.is( ":hidden" ) ? "show" : "hide";
- }
- return mode;
- },
-
- // Wraps the element around a wrapper that copies position properties
- createWrapper: function( element ) {
-
- // If the element is already wrapped, return it
- if ( element.parent().is( ".ui-effects-wrapper" ) ) {
- return element.parent();
- }
-
- // Wrap the element
- var props = {
- width: element.outerWidth( true ),
- height: element.outerHeight( true ),
- "float": element.css( "float" )
- },
- wrapper = $( "<div></div>" )
- .addClass( "ui-effects-wrapper" )
- .css( {
- fontSize: "100%",
- background: "transparent",
- border: "none",
- margin: 0,
- padding: 0
- } ),
-
- // Store the size in case width/height are defined in % - Fixes #5245
- size = {
- width: element.width(),
- height: element.height()
- },
- active = document.activeElement;
-
- // Support: Firefox
- // Firefox incorrectly exposes anonymous content
- // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
- try {
- active.id;
- } catch ( e ) {
- active = document.body;
- }
-
- element.wrap( wrapper );
-
- // Fixes #7595 - Elements lose focus when wrapped.
- if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
- $( active ).trigger( "focus" );
- }
-
- // Hotfix for jQuery 1.4 since some change in wrap() seems to actually
- // lose the reference to the wrapped element
- wrapper = element.parent();
-
- // Transfer positioning properties to the wrapper
- if ( element.css( "position" ) === "static" ) {
- wrapper.css( { position: "relative" } );
- element.css( { position: "relative" } );
- } else {
- $.extend( props, {
- position: element.css( "position" ),
- zIndex: element.css( "z-index" )
- } );
- $.each( [ "top", "left", "bottom", "right" ], function( i, pos ) {
- props[ pos ] = element.css( pos );
- if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
- props[ pos ] = "auto";
- }
- } );
- element.css( {
- position: "relative",
- top: 0,
- left: 0,
- right: "auto",
- bottom: "auto"
- } );
- }
- element.css( size );
-
- return wrapper.css( props ).show();
- },
-
- removeWrapper: function( element ) {
- var active = document.activeElement;
-
- if ( element.parent().is( ".ui-effects-wrapper" ) ) {
- element.parent().replaceWith( element );
-
- // Fixes #7595 - Elements lose focus when wrapped.
- if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
- $( active ).trigger( "focus" );
- }
- }
-
- return element;
- }
- } );
-}
-
-$.extend( $.effects, {
- version: "1.12.1",
-
- define: function( name, mode, effect ) {
- if ( !effect ) {
- effect = mode;
- mode = "effect";
- }
-
- $.effects.effect[ name ] = effect;
- $.effects.effect[ name ].mode = mode;
-
- return effect;
- },
-
- scaledDimensions: function( element, percent, direction ) {
- if ( percent === 0 ) {
- return {
- height: 0,
- width: 0,
- outerHeight: 0,
- outerWidth: 0
- };
- }
-
- var x = direction !== "horizontal" ? ( ( percent || 100 ) / 100 ) : 1,
- y = direction !== "vertical" ? ( ( percent || 100 ) / 100 ) : 1;
-
- return {
- height: element.height() * y,
- width: element.width() * x,
- outerHeight: element.outerHeight() * y,
- outerWidth: element.outerWidth() * x
- };
-
- },
-
- clipToBox: function( animation ) {
- return {
- width: animation.clip.right - animation.clip.left,
- height: animation.clip.bottom - animation.clip.top,
- left: animation.clip.left,
- top: animation.clip.top
- };
- },
-
- // Injects recently queued functions to be first in line (after "inprogress")
- unshift: function( element, queueLength, count ) {
- var queue = element.queue();
-
- if ( queueLength > 1 ) {
- queue.splice.apply( queue,
- [ 1, 0 ].concat( queue.splice( queueLength, count ) ) );
- }
- element.dequeue();
- },
-
- saveStyle: function( element ) {
- element.data( dataSpaceStyle, element[ 0 ].style.cssText );
- },
-
- restoreStyle: function( element ) {
- element[ 0 ].style.cssText = element.data( dataSpaceStyle ) || "";
- element.removeData( dataSpaceStyle );
- },
-
- mode: function( element, mode ) {
- var hidden = element.is( ":hidden" );
-
- if ( mode === "toggle" ) {
- mode = hidden ? "show" : "hide";
- }
- if ( hidden ? mode === "hide" : mode === "show" ) {
- mode = "none";
- }
- return mode;
- },
-
- // Translates a [top,left] array into a baseline value
- getBaseline: function( origin, original ) {
- var y, x;
-
- switch ( origin[ 0 ] ) {
- case "top":
- y = 0;
- break;
- case "middle":
- y = 0.5;
- break;
- case "bottom":
- y = 1;
- break;
- default:
- y = origin[ 0 ] / original.height;
- }
-
- switch ( origin[ 1 ] ) {
- case "left":
- x = 0;
- break;
- case "center":
- x = 0.5;
- break;
- case "right":
- x = 1;
- break;
- default:
- x = origin[ 1 ] / original.width;
- }
-
- return {
- x: x,
- y: y
- };
- },
-
- // Creates a placeholder element so that the original element can be made absolute
- createPlaceholder: function( element ) {
- var placeholder,
- cssPosition = element.css( "position" ),
- position = element.position();
-
- // Lock in margins first to account for form elements, which
- // will change margin if you explicitly set height
- // see: http://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380
- // Support: Safari
- element.css( {
- marginTop: element.css( "marginTop" ),
- marginBottom: element.css( "marginBottom" ),
- marginLeft: element.css( "marginLeft" ),
- marginRight: element.css( "marginRight" )
- } )
- .outerWidth( element.outerWidth() )
- .outerHeight( element.outerHeight() );
-
- if ( /^(static|relative)/.test( cssPosition ) ) {
- cssPosition = "absolute";
-
- placeholder = $( "<" + element[ 0 ].nodeName + ">" ).insertAfter( element ).css( {
-
- // Convert inline to inline block to account for inline elements
- // that turn to inline block based on content (like img)
- display: /^(inline|ruby)/.test( element.css( "display" ) ) ?
- "inline-block" :
- "block",
- visibility: "hidden",
-
- // Margins need to be set to account for margin collapse
- marginTop: element.css( "marginTop" ),
- marginBottom: element.css( "marginBottom" ),
- marginLeft: element.css( "marginLeft" ),
- marginRight: element.css( "marginRight" ),
- "float": element.css( "float" )
- } )
- .outerWidth( element.outerWidth() )
- .outerHeight( element.outerHeight() )
- .addClass( "ui-effects-placeholder" );
-
- element.data( dataSpace + "placeholder", placeholder );
- }
-
- element.css( {
- position: cssPosition,
- left: position.left,
- top: position.top
- } );
-
- return placeholder;
- },
-
- removePlaceholder: function( element ) {
- var dataKey = dataSpace + "placeholder",
- placeholder = element.data( dataKey );
-
- if ( placeholder ) {
- placeholder.remove();
- element.removeData( dataKey );
- }
- },
-
- // Removes a placeholder if it exists and restores
- // properties that were modified during placeholder creation
- cleanUp: function( element ) {
- $.effects.restoreStyle( element );
- $.effects.removePlaceholder( element );
- },
-
- setTransition: function( element, list, factor, value ) {
- value = value || {};
- $.each( list, function( i, x ) {
- var unit = element.cssUnit( x );
- if ( unit[ 0 ] > 0 ) {
- value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
- }
- } );
- return value;
- }
-} );
-
-// Return an effect options object for the given parameters:
-function _normalizeArguments( effect, options, speed, callback ) {
-
- // Allow passing all options as the first parameter
- if ( $.isPlainObject( effect ) ) {
- options = effect;
- effect = effect.effect;
- }
-
- // Convert to an object
- effect = { effect: effect };
-
- // Catch (effect, null, ...)
- if ( options == null ) {
- options = {};
- }
-
- // Catch (effect, callback)
- if ( $.isFunction( options ) ) {
- callback = options;
- speed = null;
- options = {};
- }
-
- // Catch (effect, speed, ?)
- if ( typeof options === "number" || $.fx.speeds[ options ] ) {
- callback = speed;
- speed = options;
- options = {};
- }
-
- // Catch (effect, options, callback)
- if ( $.isFunction( speed ) ) {
- callback = speed;
- speed = null;
- }
-
- // Add options to effect
- if ( options ) {
- $.extend( effect, options );
- }
-
- speed = speed || options.duration;
- effect.duration = $.fx.off ? 0 :
- typeof speed === "number" ? speed :
- speed in $.fx.speeds ? $.fx.speeds[ speed ] :
- $.fx.speeds._default;
-
- effect.complete = callback || options.complete;
-
- return effect;
-}
-
-function standardAnimationOption( option ) {
-
- // Valid standard speeds (nothing, number, named speed)
- if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
- return true;
- }
-
- // Invalid strings - treat as "normal" speed
- if ( typeof option === "string" && !$.effects.effect[ option ] ) {
- return true;
- }
-
- // Complete callback
- if ( $.isFunction( option ) ) {
- return true;
- }
-
- // Options hash (but not naming an effect)
- if ( typeof option === "object" && !option.effect ) {
- return true;
- }
-
- // Didn't match any standard API
- return false;
-}
-
-$.fn.extend( {
- effect: function( /* effect, options, speed, callback */ ) {
- var args = _normalizeArguments.apply( this, arguments ),
- effectMethod = $.effects.effect[ args.effect ],
- defaultMode = effectMethod.mode,
- queue = args.queue,
- queueName = queue || "fx",
- complete = args.complete,
- mode = args.mode,
- modes = [],
- prefilter = function( next ) {
- var el = $( this ),
- normalizedMode = $.effects.mode( el, mode ) || defaultMode;
-
- // Sentinel for duck-punching the :animated psuedo-selector
- el.data( dataSpaceAnimated, true );
-
- // Save effect mode for later use,
- // we can't just call $.effects.mode again later,
- // as the .show() below destroys the initial state
- modes.push( normalizedMode );
-
- // See $.uiBackCompat inside of run() for removal of defaultMode in 1.13
- if ( defaultMode && ( normalizedMode === "show" ||
- ( normalizedMode === defaultMode && normalizedMode === "hide" ) ) ) {
- el.show();
- }
-
- if ( !defaultMode || normalizedMode !== "none" ) {
- $.effects.saveStyle( el );
- }
-
- if ( $.isFunction( next ) ) {
- next();
- }
- };
-
- if ( $.fx.off || !effectMethod ) {
-
- // Delegate to the original method (e.g., .show()) if possible
- if ( mode ) {
- return this[ mode ]( args.duration, complete );
- } else {
- return this.each( function() {
- if ( complete ) {
- complete.call( this );
- }
- } );
- }
- }
-
- function run( next ) {
- var elem = $( this );
-
- function cleanup() {
- elem.removeData( dataSpaceAnimated );
-
- $.effects.cleanUp( elem );
-
- if ( args.mode === "hide" ) {
- elem.hide();
- }
-
- done();
- }
-
- function done() {
- if ( $.isFunction( complete ) ) {
- complete.call( elem[ 0 ] );
- }
-
- if ( $.isFunction( next ) ) {
- next();
- }
- }
-
- // Override mode option on a per element basis,
- // as toggle can be either show or hide depending on element state
- args.mode = modes.shift();
-
- if ( $.uiBackCompat !== false && !defaultMode ) {
- if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
-
- // Call the core method to track "olddisplay" properly
- elem[ mode ]();
- done();
- } else {
- effectMethod.call( elem[ 0 ], args, done );
- }
- } else {
- if ( args.mode === "none" ) {
-
- // Call the core method to track "olddisplay" properly
- elem[ mode ]();
- done();
- } else {
- effectMethod.call( elem[ 0 ], args, cleanup );
- }
- }
- }
-
- // Run prefilter on all elements first to ensure that
- // any showing or hiding happens before placeholder creation,
- // which ensures that any layout changes are correctly captured.
- return queue === false ?
- this.each( prefilter ).each( run ) :
- this.queue( queueName, prefilter ).queue( queueName, run );
- },
-
- show: ( function( orig ) {
- return function( option ) {
- if ( standardAnimationOption( option ) ) {
- return orig.apply( this, arguments );
- } else {
- var args = _normalizeArguments.apply( this, arguments );
- args.mode = "show";
- return this.effect.call( this, args );
- }
- };
- } )( $.fn.show ),
-
- hide: ( function( orig ) {
- return function( option ) {
- if ( standardAnimationOption( option ) ) {
- return orig.apply( this, arguments );
- } else {
- var args = _normalizeArguments.apply( this, arguments );
- args.mode = "hide";
- return this.effect.call( this, args );
- }
- };
- } )( $.fn.hide ),
-
- toggle: ( function( orig ) {
- return function( option ) {
- if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
- return orig.apply( this, arguments );
- } else {
- var args = _normalizeArguments.apply( this, arguments );
- args.mode = "toggle";
- return this.effect.call( this, args );
- }
- };
- } )( $.fn.toggle ),
-
- cssUnit: function( key ) {
- var style = this.css( key ),
- val = [];
-
- $.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
- if ( style.indexOf( unit ) > 0 ) {
- val = [ parseFloat( style ), unit ];
- }
- } );
- return val;
- },
-
- cssClip: function( clipObj ) {
- if ( clipObj ) {
- return this.css( "clip", "rect(" + clipObj.top + "px " + clipObj.right + "px " +
- clipObj.bottom + "px " + clipObj.left + "px)" );
- }
- return parseClip( this.css( "clip" ), this );
- },
-
- transfer: function( options, done ) {
- var element = $( this ),
- target = $( options.to ),
- targetFixed = target.css( "position" ) === "fixed",
- body = $( "body" ),
- fixTop = targetFixed ? body.scrollTop() : 0,
- fixLeft = targetFixed ? body.scrollLeft() : 0,
- endPosition = target.offset(),
- animation = {
- top: endPosition.top - fixTop,
- left: endPosition.left - fixLeft,
- height: target.innerHeight(),
- width: target.innerWidth()
- },
- startPosition = element.offset(),
- transfer = $( "<div class='ui-effects-transfer'></div>" )
- .appendTo( "body" )
- .addClass( options.className )
- .css( {
- top: startPosition.top - fixTop,
- left: startPosition.left - fixLeft,
- height: element.innerHeight(),
- width: element.innerWidth(),
- position: targetFixed ? "fixed" : "absolute"
- } )
- .animate( animation, options.duration, options.easing, function() {
- transfer.remove();
- if ( $.isFunction( done ) ) {
- done();
- }
- } );
- }
-} );
-
-function parseClip( str, element ) {
- var outerWidth = element.outerWidth(),
- outerHeight = element.outerHeight(),
- clipRegex = /^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,
- values = clipRegex.exec( str ) || [ "", 0, outerWidth, outerHeight, 0 ];
-
- return {
- top: parseFloat( values[ 1 ] ) || 0,
- right: values[ 2 ] === "auto" ? outerWidth : parseFloat( values[ 2 ] ),
- bottom: values[ 3 ] === "auto" ? outerHeight : parseFloat( values[ 3 ] ),
- left: parseFloat( values[ 4 ] ) || 0
- };
-}
-
-$.fx.step.clip = function( fx ) {
- if ( !fx.clipInit ) {
- fx.start = $( fx.elem ).cssClip();
- if ( typeof fx.end === "string" ) {
- fx.end = parseClip( fx.end, fx.elem );
- }
- fx.clipInit = true;
- }
-
- $( fx.elem ).cssClip( {
- top: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,
- right: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,
- bottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,
- left: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left
- } );
-};
-
-} )();
-
-/******************************************************************************/
-/*********************************** EASING ***********************************/
-/******************************************************************************/
-
-( function() {
-
-// Based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
-
-var baseEasings = {};
-
-$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
- baseEasings[ name ] = function( p ) {
- return Math.pow( p, i + 2 );
- };
-} );
-
-$.extend( baseEasings, {
- Sine: function( p ) {
- return 1 - Math.cos( p * Math.PI / 2 );
- },
- Circ: function( p ) {
- return 1 - Math.sqrt( 1 - p * p );
- },
- Elastic: function( p ) {
- return p === 0 || p === 1 ? p :
- -Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );
- },
- Back: function( p ) {
- return p * p * ( 3 * p - 2 );
- },
- Bounce: function( p ) {
- var pow2,
- bounce = 4;
-
- while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
- return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
- }
-} );
-
-$.each( baseEasings, function( name, easeIn ) {
- $.easing[ "easeIn" + name ] = easeIn;
- $.easing[ "easeOut" + name ] = function( p ) {
- return 1 - easeIn( 1 - p );
- };
- $.easing[ "easeInOut" + name ] = function( p ) {
- return p < 0.5 ?
- easeIn( p * 2 ) / 2 :
- 1 - easeIn( p * -2 + 2 ) / 2;
- };
-} );
-
-} )();
-
-var effect = $.effects;
-
-
-/*!
- * jQuery UI Effects Blind 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Blind Effect
-//>>group: Effects
-//>>description: Blinds the element.
-//>>docs: http://api.jqueryui.com/blind-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectBlind = $.effects.define( "blind", "hide", function( options, done ) {
- var map = {
- up: [ "bottom", "top" ],
- vertical: [ "bottom", "top" ],
- down: [ "top", "bottom" ],
- left: [ "right", "left" ],
- horizontal: [ "right", "left" ],
- right: [ "left", "right" ]
- },
- element = $( this ),
- direction = options.direction || "up",
- start = element.cssClip(),
- animate = { clip: $.extend( {}, start ) },
- placeholder = $.effects.createPlaceholder( element );
-
- animate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ];
-
- if ( options.mode === "show" ) {
- element.cssClip( animate.clip );
- if ( placeholder ) {
- placeholder.css( $.effects.clipToBox( animate ) );
- }
-
- animate.clip = start;
- }
-
- if ( placeholder ) {
- placeholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing );
- }
-
- element.animate( animate, {
- queue: false,
- duration: options.duration,
- easing: options.easing,
- complete: done
- } );
-} );
-
-
-/*!
- * jQuery UI Effects Bounce 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Bounce Effect
-//>>group: Effects
-//>>description: Bounces an element horizontally or vertically n times.
-//>>docs: http://api.jqueryui.com/bounce-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectBounce = $.effects.define( "bounce", function( options, done ) {
- var upAnim, downAnim, refValue,
- element = $( this ),
-
- // Defaults:
- mode = options.mode,
- hide = mode === "hide",
- show = mode === "show",
- direction = options.direction || "up",
- distance = options.distance,
- times = options.times || 5,
-
- // Number of internal animations
- anims = times * 2 + ( show || hide ? 1 : 0 ),
- speed = options.duration / anims,
- easing = options.easing,
-
- // Utility:
- ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
- motion = ( direction === "up" || direction === "left" ),
- i = 0,
-
- queuelen = element.queue().length;
-
- $.effects.createPlaceholder( element );
-
- refValue = element.css( ref );
-
- // Default distance for the BIGGEST bounce is the outer Distance / 3
- if ( !distance ) {
- distance = element[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
- }
-
- if ( show ) {
- downAnim = { opacity: 1 };
- downAnim[ ref ] = refValue;
-
- // If we are showing, force opacity 0 and set the initial position
- // then do the "first" animation
- element
- .css( "opacity", 0 )
- .css( ref, motion ? -distance * 2 : distance * 2 )
- .animate( downAnim, speed, easing );
- }
-
- // Start at the smallest distance if we are hiding
- if ( hide ) {
- distance = distance / Math.pow( 2, times - 1 );
- }
-
- downAnim = {};
- downAnim[ ref ] = refValue;
-
- // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
- for ( ; i < times; i++ ) {
- upAnim = {};
- upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
-
- element
- .animate( upAnim, speed, easing )
- .animate( downAnim, speed, easing );
-
- distance = hide ? distance * 2 : distance / 2;
- }
-
- // Last Bounce when Hiding
- if ( hide ) {
- upAnim = { opacity: 0 };
- upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
-
- element.animate( upAnim, speed, easing );
- }
-
- element.queue( done );
-
- $.effects.unshift( element, queuelen, anims + 1 );
-} );
-
-
-/*!
- * jQuery UI Effects Clip 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Clip Effect
-//>>group: Effects
-//>>description: Clips the element on and off like an old TV.
-//>>docs: http://api.jqueryui.com/clip-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectClip = $.effects.define( "clip", "hide", function( options, done ) {
- var start,
- animate = {},
- element = $( this ),
- direction = options.direction || "vertical",
- both = direction === "both",
- horizontal = both || direction === "horizontal",
- vertical = both || direction === "vertical";
-
- start = element.cssClip();
- animate.clip = {
- top: vertical ? ( start.bottom - start.top ) / 2 : start.top,
- right: horizontal ? ( start.right - start.left ) / 2 : start.right,
- bottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom,
- left: horizontal ? ( start.right - start.left ) / 2 : start.left
- };
-
- $.effects.createPlaceholder( element );
-
- if ( options.mode === "show" ) {
- element.cssClip( animate.clip );
- animate.clip = start;
- }
-
- element.animate( animate, {
- queue: false,
- duration: options.duration,
- easing: options.easing,
- complete: done
- } );
-
-} );
-
-
-/*!
- * jQuery UI Effects Drop 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Drop Effect
-//>>group: Effects
-//>>description: Moves an element in one direction and hides it at the same time.
-//>>docs: http://api.jqueryui.com/drop-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectDrop = $.effects.define( "drop", "hide", function( options, done ) {
-
- var distance,
- element = $( this ),
- mode = options.mode,
- show = mode === "show",
- direction = options.direction || "left",
- ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
- motion = ( direction === "up" || direction === "left" ) ? "-=" : "+=",
- oppositeMotion = ( motion === "+=" ) ? "-=" : "+=",
- animation = {
- opacity: 0
- };
-
- $.effects.createPlaceholder( element );
-
- distance = options.distance ||
- element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2;
-
- animation[ ref ] = motion + distance;
-
- if ( show ) {
- element.css( animation );
-
- animation[ ref ] = oppositeMotion + distance;
- animation.opacity = 1;
- }
-
- // Animate
- element.animate( animation, {
- queue: false,
- duration: options.duration,
- easing: options.easing,
- complete: done
- } );
-} );
-
-
-/*!
- * jQuery UI Effects Explode 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Explode Effect
-//>>group: Effects
-// jscs:disable maximumLineLength
-//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.
-// jscs:enable maximumLineLength
-//>>docs: http://api.jqueryui.com/explode-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectExplode = $.effects.define( "explode", "hide", function( options, done ) {
-
- var i, j, left, top, mx, my,
- rows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3,
- cells = rows,
- element = $( this ),
- mode = options.mode,
- show = mode === "show",
-
- // Show and then visibility:hidden the element before calculating offset
- offset = element.show().css( "visibility", "hidden" ).offset(),
-
- // Width and height of a piece
- width = Math.ceil( element.outerWidth() / cells ),
- height = Math.ceil( element.outerHeight() / rows ),
- pieces = [];
-
- // Children animate complete:
- function childComplete() {
- pieces.push( this );
- if ( pieces.length === rows * cells ) {
- animComplete();
- }
- }
-
- // Clone the element for each row and cell.
- for ( i = 0; i < rows; i++ ) { // ===>
- top = offset.top + i * height;
- my = i - ( rows - 1 ) / 2;
-
- for ( j = 0; j < cells; j++ ) { // |||
- left = offset.left + j * width;
- mx = j - ( cells - 1 ) / 2;
-
- // Create a clone of the now hidden main element that will be absolute positioned
- // within a wrapper div off the -left and -top equal to size of our pieces
- element
- .clone()
- .appendTo( "body" )
- .wrap( "<div></div>" )
- .css( {
- position: "absolute",
- visibility: "visible",
- left: -j * width,
- top: -i * height
- } )
-
- // Select the wrapper - make it overflow: hidden and absolute positioned based on
- // where the original was located +left and +top equal to the size of pieces
- .parent()
- .addClass( "ui-effects-explode" )
- .css( {
- position: "absolute",
- overflow: "hidden",
- width: width,
- height: height,
- left: left + ( show ? mx * width : 0 ),
- top: top + ( show ? my * height : 0 ),
- opacity: show ? 0 : 1
- } )
- .animate( {
- left: left + ( show ? 0 : mx * width ),
- top: top + ( show ? 0 : my * height ),
- opacity: show ? 1 : 0
- }, options.duration || 500, options.easing, childComplete );
- }
- }
-
- function animComplete() {
- element.css( {
- visibility: "visible"
- } );
- $( pieces ).remove();
- done();
- }
-} );
-
-
-/*!
- * jQuery UI Effects Fade 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Fade Effect
-//>>group: Effects
-//>>description: Fades the element.
-//>>docs: http://api.jqueryui.com/fade-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectFade = $.effects.define( "fade", "toggle", function( options, done ) {
- var show = options.mode === "show";
-
- $( this )
- .css( "opacity", show ? 0 : 1 )
- .animate( {
- opacity: show ? 1 : 0
- }, {
- queue: false,
- duration: options.duration,
- easing: options.easing,
- complete: done
- } );
-} );
-
-
-/*!
- * jQuery UI Effects Fold 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Fold Effect
-//>>group: Effects
-//>>description: Folds an element first horizontally and then vertically.
-//>>docs: http://api.jqueryui.com/fold-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectFold = $.effects.define( "fold", "hide", function( options, done ) {
-
- // Create element
- var element = $( this ),
- mode = options.mode,
- show = mode === "show",
- hide = mode === "hide",
- size = options.size || 15,
- percent = /([0-9]+)%/.exec( size ),
- horizFirst = !!options.horizFirst,
- ref = horizFirst ? [ "right", "bottom" ] : [ "bottom", "right" ],
- duration = options.duration / 2,
-
- placeholder = $.effects.createPlaceholder( element ),
-
- start = element.cssClip(),
- animation1 = { clip: $.extend( {}, start ) },
- animation2 = { clip: $.extend( {}, start ) },
-
- distance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ],
-
- queuelen = element.queue().length;
-
- if ( percent ) {
- size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
- }
- animation1.clip[ ref[ 0 ] ] = size;
- animation2.clip[ ref[ 0 ] ] = size;
- animation2.clip[ ref[ 1 ] ] = 0;
-
- if ( show ) {
- element.cssClip( animation2.clip );
- if ( placeholder ) {
- placeholder.css( $.effects.clipToBox( animation2 ) );
- }
-
- animation2.clip = start;
- }
-
- // Animate
- element
- .queue( function( next ) {
- if ( placeholder ) {
- placeholder
- .animate( $.effects.clipToBox( animation1 ), duration, options.easing )
- .animate( $.effects.clipToBox( animation2 ), duration, options.easing );
- }
-
- next();
- } )
- .animate( animation1, duration, options.easing )
- .animate( animation2, duration, options.easing )
- .queue( done );
-
- $.effects.unshift( element, queuelen, 4 );
-} );
-
-
-/*!
- * jQuery UI Effects Highlight 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Highlight Effect
-//>>group: Effects
-//>>description: Highlights the background of an element in a defined color for a custom duration.
-//>>docs: http://api.jqueryui.com/highlight-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectHighlight = $.effects.define( "highlight", "show", function( options, done ) {
- var element = $( this ),
- animation = {
- backgroundColor: element.css( "backgroundColor" )
- };
-
- if ( options.mode === "hide" ) {
- animation.opacity = 0;
- }
-
- $.effects.saveStyle( element );
-
- element
- .css( {
- backgroundImage: "none",
- backgroundColor: options.color || "#ffff99"
- } )
- .animate( animation, {
- queue: false,
- duration: options.duration,
- easing: options.easing,
- complete: done
- } );
-} );
-
-
-/*!
- * jQuery UI Effects Size 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Size Effect
-//>>group: Effects
-//>>description: Resize an element to a specified width and height.
-//>>docs: http://api.jqueryui.com/size-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectSize = $.effects.define( "size", function( options, done ) {
-
- // Create element
- var baseline, factor, temp,
- element = $( this ),
-
- // Copy for children
- cProps = [ "fontSize" ],
- vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
- hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
-
- // Set options
- mode = options.mode,
- restore = mode !== "effect",
- scale = options.scale || "both",
- origin = options.origin || [ "middle", "center" ],
- position = element.css( "position" ),
- pos = element.position(),
- original = $.effects.scaledDimensions( element ),
- from = options.from || original,
- to = options.to || $.effects.scaledDimensions( element, 0 );
-
- $.effects.createPlaceholder( element );
-
- if ( mode === "show" ) {
- temp = from;
- from = to;
- to = temp;
- }
-
- // Set scaling factor
- factor = {
- from: {
- y: from.height / original.height,
- x: from.width / original.width
- },
- to: {
- y: to.height / original.height,
- x: to.width / original.width
- }
- };
-
- // Scale the css box
- if ( scale === "box" || scale === "both" ) {
-
- // Vertical props scaling
- if ( factor.from.y !== factor.to.y ) {
- from = $.effects.setTransition( element, vProps, factor.from.y, from );
- to = $.effects.setTransition( element, vProps, factor.to.y, to );
- }
-
- // Horizontal props scaling
- if ( factor.from.x !== factor.to.x ) {
- from = $.effects.setTransition( element, hProps, factor.from.x, from );
- to = $.effects.setTransition( element, hProps, factor.to.x, to );
- }
- }
-
- // Scale the content
- if ( scale === "content" || scale === "both" ) {
-
- // Vertical props scaling
- if ( factor.from.y !== factor.to.y ) {
- from = $.effects.setTransition( element, cProps, factor.from.y, from );
- to = $.effects.setTransition( element, cProps, factor.to.y, to );
- }
- }
-
- // Adjust the position properties based on the provided origin points
- if ( origin ) {
- baseline = $.effects.getBaseline( origin, original );
- from.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;
- from.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;
- to.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;
- to.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;
- }
- element.css( from );
-
- // Animate the children if desired
- if ( scale === "content" || scale === "both" ) {
-
- vProps = vProps.concat( [ "marginTop", "marginBottom" ] ).concat( cProps );
- hProps = hProps.concat( [ "marginLeft", "marginRight" ] );
-
- // Only animate children with width attributes specified
- // TODO: is this right? should we include anything with css width specified as well
- element.find( "*[width]" ).each( function() {
- var child = $( this ),
- childOriginal = $.effects.scaledDimensions( child ),
- childFrom = {
- height: childOriginal.height * factor.from.y,
- width: childOriginal.width * factor.from.x,
- outerHeight: childOriginal.outerHeight * factor.from.y,
- outerWidth: childOriginal.outerWidth * factor.from.x
- },
- childTo = {
- height: childOriginal.height * factor.to.y,
- width: childOriginal.width * factor.to.x,
- outerHeight: childOriginal.height * factor.to.y,
- outerWidth: childOriginal.width * factor.to.x
- };
-
- // Vertical props scaling
- if ( factor.from.y !== factor.to.y ) {
- childFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );
- childTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );
- }
-
- // Horizontal props scaling
- if ( factor.from.x !== factor.to.x ) {
- childFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );
- childTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );
- }
-
- if ( restore ) {
- $.effects.saveStyle( child );
- }
-
- // Animate children
- child.css( childFrom );
- child.animate( childTo, options.duration, options.easing, function() {
-
- // Restore children
- if ( restore ) {
- $.effects.restoreStyle( child );
- }
- } );
- } );
- }
-
- // Animate
- element.animate( to, {
- queue: false,
- duration: options.duration,
- easing: options.easing,
- complete: function() {
-
- var offset = element.offset();
-
- if ( to.opacity === 0 ) {
- element.css( "opacity", from.opacity );
- }
-
- if ( !restore ) {
- element
- .css( "position", position === "static" ? "relative" : position )
- .offset( offset );
-
- // Need to save style here so that automatic style restoration
- // doesn't restore to the original styles from before the animation.
- $.effects.saveStyle( element );
- }
-
- done();
- }
- } );
-
-} );
-
-
-/*!
- * jQuery UI Effects Scale 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Scale Effect
-//>>group: Effects
-//>>description: Grows or shrinks an element and its content.
-//>>docs: http://api.jqueryui.com/scale-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectScale = $.effects.define( "scale", function( options, done ) {
-
- // Create element
- var el = $( this ),
- mode = options.mode,
- percent = parseInt( options.percent, 10 ) ||
- ( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== "effect" ? 0 : 100 ) ),
-
- newOptions = $.extend( true, {
- from: $.effects.scaledDimensions( el ),
- to: $.effects.scaledDimensions( el, percent, options.direction || "both" ),
- origin: options.origin || [ "middle", "center" ]
- }, options );
-
- // Fade option to support puff
- if ( options.fade ) {
- newOptions.from.opacity = 1;
- newOptions.to.opacity = 0;
- }
-
- $.effects.effect.size.call( this, newOptions, done );
-} );
-
-
-/*!
- * jQuery UI Effects Puff 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Puff Effect
-//>>group: Effects
-//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.
-//>>docs: http://api.jqueryui.com/puff-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectPuff = $.effects.define( "puff", "hide", function( options, done ) {
- var newOptions = $.extend( true, {}, options, {
- fade: true,
- percent: parseInt( options.percent, 10 ) || 150
- } );
-
- $.effects.effect.scale.call( this, newOptions, done );
-} );
-
-
-/*!
- * jQuery UI Effects Pulsate 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Pulsate Effect
-//>>group: Effects
-//>>description: Pulsates an element n times by changing the opacity to zero and back.
-//>>docs: http://api.jqueryui.com/pulsate-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectPulsate = $.effects.define( "pulsate", "show", function( options, done ) {
- var element = $( this ),
- mode = options.mode,
- show = mode === "show",
- hide = mode === "hide",
- showhide = show || hide,
-
- // Showing or hiding leaves off the "last" animation
- anims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
- duration = options.duration / anims,
- animateTo = 0,
- i = 1,
- queuelen = element.queue().length;
-
- if ( show || !element.is( ":visible" ) ) {
- element.css( "opacity", 0 ).show();
- animateTo = 1;
- }
-
- // Anims - 1 opacity "toggles"
- for ( ; i < anims; i++ ) {
- element.animate( { opacity: animateTo }, duration, options.easing );
- animateTo = 1 - animateTo;
- }
-
- element.animate( { opacity: animateTo }, duration, options.easing );
-
- element.queue( done );
-
- $.effects.unshift( element, queuelen, anims + 1 );
-} );
-
-
-/*!
- * jQuery UI Effects Shake 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Shake Effect
-//>>group: Effects
-//>>description: Shakes an element horizontally or vertically n times.
-//>>docs: http://api.jqueryui.com/shake-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectShake = $.effects.define( "shake", function( options, done ) {
-
- var i = 1,
- element = $( this ),
- direction = options.direction || "left",
- distance = options.distance || 20,
- times = options.times || 3,
- anims = times * 2 + 1,
- speed = Math.round( options.duration / anims ),
- ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
- positiveMotion = ( direction === "up" || direction === "left" ),
- animation = {},
- animation1 = {},
- animation2 = {},
-
- queuelen = element.queue().length;
-
- $.effects.createPlaceholder( element );
-
- // Animation
- animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
- animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
- animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
-
- // Animate
- element.animate( animation, speed, options.easing );
-
- // Shakes
- for ( ; i < times; i++ ) {
- element
- .animate( animation1, speed, options.easing )
- .animate( animation2, speed, options.easing );
- }
-
- element
- .animate( animation1, speed, options.easing )
- .animate( animation, speed / 2, options.easing )
- .queue( done );
-
- $.effects.unshift( element, queuelen, anims + 1 );
-} );
-
-
-/*!
- * jQuery UI Effects Slide 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Slide Effect
-//>>group: Effects
-//>>description: Slides an element in and out of the viewport.
-//>>docs: http://api.jqueryui.com/slide-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effectsEffectSlide = $.effects.define( "slide", "show", function( options, done ) {
- var startClip, startRef,
- element = $( this ),
- map = {
- up: [ "bottom", "top" ],
- down: [ "top", "bottom" ],
- left: [ "right", "left" ],
- right: [ "left", "right" ]
- },
- mode = options.mode,
- direction = options.direction || "left",
- ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
- positiveMotion = ( direction === "up" || direction === "left" ),
- distance = options.distance ||
- element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ),
- animation = {};
-
- $.effects.createPlaceholder( element );
-
- startClip = element.cssClip();
- startRef = element.position()[ ref ];
-
- // Define hide animation
- animation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef;
- animation.clip = element.cssClip();
- animation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ];
-
- // Reverse the animation if we're showing
- if ( mode === "show" ) {
- element.cssClip( animation.clip );
- element.css( ref, animation[ ref ] );
- animation.clip = startClip;
- animation[ ref ] = startRef;
- }
-
- // Actually animate
- element.animate( animation, {
- queue: false,
- duration: options.duration,
- easing: options.easing,
- complete: done
- } );
-} );
-
-
-/*!
- * jQuery UI Effects Transfer 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Transfer Effect
-//>>group: Effects
-//>>description: Displays a transfer effect from one element to another.
-//>>docs: http://api.jqueryui.com/transfer-effect/
-//>>demos: http://jqueryui.com/effect/
-
-
-
-var effect;
-if ( $.uiBackCompat !== false ) {
- effect = $.effects.define( "transfer", function( options, done ) {
- $( this ).transfer( options, done );
- } );
-}
-var effectsEffectTransfer = effect;
-
-
-/*!
- * jQuery UI Focusable 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: :focusable Selector
-//>>group: Core
-//>>description: Selects elements which can be focused.
-//>>docs: http://api.jqueryui.com/focusable-selector/
-
-
-
-// Selectors
-$.ui.focusable = function( element, hasTabindex ) {
- var map, mapName, img, focusableIfVisible, fieldset,
- nodeName = element.nodeName.toLowerCase();
-
- if ( "area" === nodeName ) {
- map = element.parentNode;
- mapName = map.name;
- if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
- return false;
- }
- img = $( "img[usemap='#" + mapName + "']" );
- return img.length > 0 && img.is( ":visible" );
- }
-
- if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {
- focusableIfVisible = !element.disabled;
-
- if ( focusableIfVisible ) {
-
- // Form controls within a disabled fieldset are disabled.
- // However, controls within the fieldset's legend do not get disabled.
- // Since controls generally aren't placed inside legends, we skip
- // this portion of the check.
- fieldset = $( element ).closest( "fieldset" )[ 0 ];
- if ( fieldset ) {
- focusableIfVisible = !fieldset.disabled;
- }
- }
- } else if ( "a" === nodeName ) {
- focusableIfVisible = element.href || hasTabindex;
- } else {
- focusableIfVisible = hasTabindex;
- }
-
- return focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) );
-};
-
-// Support: IE 8 only
-// IE 8 doesn't resolve inherit to visible/hidden for computed values
-function visible( element ) {
- var visibility = element.css( "visibility" );
- while ( visibility === "inherit" ) {
- element = element.parent();
- visibility = element.css( "visibility" );
- }
- return visibility !== "hidden";
-}
-
-$.extend( $.expr[ ":" ], {
- focusable: function( element ) {
- return $.ui.focusable( element, $.attr( element, "tabindex" ) != null );
- }
-} );
-
-var focusable = $.ui.focusable;
-
-
-
-
-// Support: IE8 Only
-// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop
-// with a string, so we need to find the proper form.
-var form = $.fn.form = function() {
- return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form );
-};
-
-
-/*!
- * jQuery UI Form Reset Mixin 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Form Reset Mixin
-//>>group: Core
-//>>description: Refresh input widgets when their form is reset
-//>>docs: http://api.jqueryui.com/form-reset-mixin/
-
-
-
-var formResetMixin = $.ui.formResetMixin = {
- _formResetHandler: function() {
- var form = $( this );
-
- // Wait for the form reset to actually happen before refreshing
- setTimeout( function() {
- var instances = form.data( "ui-form-reset-instances" );
- $.each( instances, function() {
- this.refresh();
- } );
- } );
- },
-
- _bindFormResetHandler: function() {
- this.form = this.element.form();
- if ( !this.form.length ) {
- return;
- }
-
- var instances = this.form.data( "ui-form-reset-instances" ) || [];
- if ( !instances.length ) {
-
- // We don't use _on() here because we use a single event handler per form
- this.form.on( "reset.ui-form-reset", this._formResetHandler );
- }
- instances.push( this );
- this.form.data( "ui-form-reset-instances", instances );
- },
-
- _unbindFormResetHandler: function() {
- if ( !this.form.length ) {
- return;
- }
-
- var instances = this.form.data( "ui-form-reset-instances" );
- instances.splice( $.inArray( this, instances ), 1 );
- if ( instances.length ) {
- this.form.data( "ui-form-reset-instances", instances );
- } else {
- this.form
- .removeData( "ui-form-reset-instances" )
- .off( "reset.ui-form-reset" );
- }
- }
-};
-
-
-/*!
- * jQuery UI Support for jQuery core 1.7.x 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- */
-
-//>>label: jQuery 1.7 Support
-//>>group: Core
-//>>description: Support version 1.7.x of jQuery core
-
-
-
-// Support: jQuery 1.7 only
-// Not a great way to check versions, but since we only support 1.7+ and only
-// need to detect <1.8, this is a simple check that should suffice. Checking
-// for "1.7." would be a bit safer, but the version string is 1.7, not 1.7.0
-// and we'll never reach 1.70.0 (if we do, we certainly won't be supporting
-// 1.7 anymore). See #11197 for why we're not using feature detection.
-if ( $.fn.jquery.substring( 0, 3 ) === "1.7" ) {
-
- // Setters for .innerWidth(), .innerHeight(), .outerWidth(), .outerHeight()
- // Unlike jQuery Core 1.8+, these only support numeric values to set the
- // dimensions in pixels
- $.each( [ "Width", "Height" ], function( i, name ) {
- var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
- type = name.toLowerCase(),
- orig = {
- innerWidth: $.fn.innerWidth,
- innerHeight: $.fn.innerHeight,
- outerWidth: $.fn.outerWidth,
- outerHeight: $.fn.outerHeight
- };
-
- function reduce( elem, size, border, margin ) {
- $.each( side, function() {
- size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
- if ( border ) {
- size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
- }
- if ( margin ) {
- size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
- }
- } );
- return size;
- }
-
- $.fn[ "inner" + name ] = function( size ) {
- if ( size === undefined ) {
- return orig[ "inner" + name ].call( this );
- }
-
- return this.each( function() {
- $( this ).css( type, reduce( this, size ) + "px" );
- } );
- };
-
- $.fn[ "outer" + name ] = function( size, margin ) {
- if ( typeof size !== "number" ) {
- return orig[ "outer" + name ].call( this, size );
- }
-
- return this.each( function() {
- $( this ).css( type, reduce( this, size, true, margin ) + "px" );
- } );
- };
- } );
-
- $.fn.addBack = function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter( selector )
- );
- };
-}
-
-;
-/*!
- * jQuery UI Keycode 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Keycode
-//>>group: Core
-//>>description: Provide keycodes as keynames
-//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/
-
-
-var keycode = $.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
-};
-
-
-
-
-// Internal use only
-var escapeSelector = $.ui.escapeSelector = ( function() {
- var selectorEscape = /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;
- return function( selector ) {
- return selector.replace( selectorEscape, "\\$1" );
- };
-} )();
-
-
-/*!
- * jQuery UI Labels 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: labels
-//>>group: Core
-//>>description: Find all the labels associated with a given input
-//>>docs: http://api.jqueryui.com/labels/
-
-
-
-var labels = $.fn.labels = function() {
- var ancestor, selector, id, labels, ancestors;
-
- // Check control.labels first
- if ( this[ 0 ].labels && this[ 0 ].labels.length ) {
- return this.pushStack( this[ 0 ].labels );
- }
-
- // Support: IE <= 11, FF <= 37, Android <= 2.3 only
- // Above browsers do not support control.labels. Everything below is to support them
- // as well as document fragments. control.labels does not work on document fragments
- labels = this.eq( 0 ).parents( "label" );
-
- // Look for the label based on the id
- id = this.attr( "id" );
- if ( id ) {
-
- // We don't search against the document in case the element
- // is disconnected from the DOM
- ancestor = this.eq( 0 ).parents().last();
-
- // Get a full set of top level ancestors
- ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );
-
- // Create a selector for the label based on the id
- selector = "label[for='" + $.ui.escapeSelector( id ) + "']";
-
- labels = labels.add( ancestors.find( selector ).addBack( selector ) );
-
- }
-
- // Return whatever we have found for labels
- return this.pushStack( labels );
-};
-
-
-/*!
- * jQuery UI Scroll Parent 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: scrollParent
-//>>group: Core
-//>>description: Get the closest ancestor element that is scrollable.
-//>>docs: http://api.jqueryui.com/scrollParent/
-
-
-
-var scrollParent = $.fn.scrollParent = function( includeHidden ) {
- var position = this.css( "position" ),
- excludeStaticParent = position === "absolute",
- overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
- scrollParent = this.parents().filter( function() {
- var parent = $( this );
- if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
- return false;
- }
- return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) +
- parent.css( "overflow-x" ) );
- } ).eq( 0 );
-
- return position === "fixed" || !scrollParent.length ?
- $( this[ 0 ].ownerDocument || document ) :
- scrollParent;
-};
-
-
-/*!
- * jQuery UI Tabbable 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: :tabbable Selector
-//>>group: Core
-//>>description: Selects elements which can be tabbed to.
-//>>docs: http://api.jqueryui.com/tabbable-selector/
-
-
-
-var tabbable = $.extend( $.expr[ ":" ], {
- tabbable: function( element ) {
- var tabIndex = $.attr( element, "tabindex" ),
- hasTabindex = tabIndex != null;
- return ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );
- }
-} );
-
-
-/*!
- * jQuery UI Unique ID 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: uniqueId
-//>>group: Core
-//>>description: Functions to generate and remove uniqueId's
-//>>docs: http://api.jqueryui.com/uniqueId/
-
-
-
-var uniqueId = $.fn.extend( {
- uniqueId: ( function() {
- var uuid = 0;
-
- return function() {
- return this.each( function() {
- if ( !this.id ) {
- this.id = "ui-id-" + ( ++uuid );
- }
- } );
- };
- } )(),
-
- removeUniqueId: function() {
- return this.each( function() {
- if ( /^ui-id-\d+$/.test( this.id ) ) {
- $( this ).removeAttr( "id" );
- }
- } );
- }
-} );
-
-
-/*!
- * jQuery UI Accordion 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Accordion
-//>>group: Widgets
-// jscs:disable maximumLineLength
-//>>description: Displays collapsible content panels for presenting information in a limited amount of space.
-// jscs:enable maximumLineLength
-//>>docs: http://api.jqueryui.com/accordion/
-//>>demos: http://jqueryui.com/accordion/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/accordion.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-var widgetsAccordion = $.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: false,
- event: "click",
- header: "> li > :first-child, > :not(li):even",
- heightStyle: "auto",
- icons: {
- activeHeader: "ui-icon-triangle-1-s",
- header: "ui-icon-triangle-1-e"
- },
-
- // Callbacks
- 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 options = this.options;
-
- this.prevShow = this.prevHide = $();
- this._addClass( "ui-accordion", "ui-widget ui-helper-reset" );
- this.element.attr( "role", "tablist" );
-
- // Don't allow collapsible: false and active: false / null
- if ( !options.collapsible && ( options.active === false || options.active == null ) ) {
- options.active = 0;
- }
-
- this._processPanels();
-
- // handle negative values
- if ( options.active < 0 ) {
- options.active += this.headers.length;
- }
- this._refresh();
- },
-
- _getCreateEventData: function() {
- return {
- header: this.active,
- panel: !this.active.length ? $() : this.active.next()
- };
- },
-
- _createIcons: function() {
- var icon, children,
- icons = this.options.icons;
-
- if ( icons ) {
- icon = $( "<span>" );
- this._addClass( icon, "ui-accordion-header-icon", "ui-icon " + icons.header );
- icon.prependTo( this.headers );
- children = this.active.children( ".ui-accordion-header-icon" );
- this._removeClass( children, icons.header )
- ._addClass( children, null, icons.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 contents;
-
- // Clean up main element
- this.element.removeAttr( "role" );
-
- // Clean up headers
- this.headers
- .removeAttr( "role aria-expanded aria-selected aria-controls tabIndex" )
- .removeUniqueId();
-
- this._destroyIcons();
-
- // Clean up content panels
- contents = this.headers.next()
- .css( "display", "" )
- .removeAttr( "role aria-hidden aria-labelledby" )
- .removeUniqueId();
-
- if ( this.options.heightStyle !== "content" ) {
- contents.css( "height", "" );
- }
- },
-
- _setOption: function( key, value ) {
- if ( key === "active" ) {
-
- // _activate() will handle invalid values and update this.options
- this._activate( value );
- return;
- }
-
- if ( key === "event" ) {
- if ( this.options.event ) {
- this._off( this.headers, this.options.event );
- }
- this._setupEvents( value );
- }
-
- this._super( key, value );
-
- // Setting collapsible: false while collapsed; open first panel
- if ( key === "collapsible" && !value && this.options.active === false ) {
- this._activate( 0 );
- }
-
- if ( key === "icons" ) {
- this._destroyIcons();
- if ( value ) {
- this._createIcons();
- }
- }
- },
-
- _setOptionDisabled: function( value ) {
- this._super( value );
-
- this.element.attr( "aria-disabled", value );
-
- // Support: IE8 Only
- // #5332 / #6059 - opacity doesn't cascade to positioned elements in IE
- // so we need to add the disabled class to the headers and panels
- this._toggleClass( null, "ui-state-disabled", !!value );
- this._toggleClass( this.headers.add( this.headers.next() ), null, "ui-state-disabled",
- !!value );
- },
-
- _keydown: function( event ) {
- if ( event.altKey || event.ctrlKey ) {
- return;
- }
-
- var keyCode = $.ui.keyCode,
- length = this.headers.length,
- currentIndex = this.headers.index( event.target ),
- toFocus = false;
-
- switch ( event.keyCode ) {
- case keyCode.RIGHT:
- case keyCode.DOWN:
- toFocus = this.headers[ ( currentIndex + 1 ) % length ];
- break;
- case keyCode.LEFT:
- case keyCode.UP:
- toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
- break;
- case keyCode.SPACE:
- case keyCode.ENTER:
- this._eventHandler( event );
- break;
- case keyCode.HOME:
- toFocus = this.headers[ 0 ];
- break;
- case keyCode.END:
- toFocus = this.headers[ length - 1 ];
- break;
- }
-
- if ( toFocus ) {
- $( event.target ).attr( "tabIndex", -1 );
- $( toFocus ).attr( "tabIndex", 0 );
- $( toFocus ).trigger( "focus" );
- event.preventDefault();
- }
- },
-
- _panelKeyDown: function( event ) {
- if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
- $( event.currentTarget ).prev().trigger( "focus" );
- }
- },
-
- refresh: function() {
- var options = this.options;
- this._processPanels();
-
- // Was collapsed or no panel
- if ( ( options.active === false && options.collapsible === true ) ||
- !this.headers.length ) {
- options.active = false;
- this.active = $();
-
- // active false only when collapsible is true
- } else if ( options.active === false ) {
- this._activate( 0 );
-
- // was active, but active panel is gone
- } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
-
- // all remaining panel are disabled
- if ( this.headers.length === this.headers.find( ".ui-state-disabled" ).length ) {
- options.active = false;
- this.active = $();
-
- // activate previous panel
- } else {
- this._activate( Math.max( 0, options.active - 1 ) );
- }
-
- // was active, active panel still exists
- } else {
-
- // make sure active index is correct
- options.active = this.headers.index( this.active );
- }
-
- this._destroyIcons();
-
- this._refresh();
- },
-
- _processPanels: function() {
- var prevHeaders = this.headers,
- prevPanels = 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" );
-
- // Avoid memory leaks (#10056)
- if ( prevPanels ) {
- this._off( prevHeaders.not( this.headers ) );
- this._off( prevPanels.not( this.panels ) );
- }
- },
-
- _refresh: function() {
- var maxHeight,
- options = this.options,
- heightStyle = options.heightStyle,
- parent = this.element.parent();
-
- this.active = this._findActive( options.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 header = $( this ),
- headerId = header.uniqueId().attr( "id" ),
- panel = header.next(),
- panelId = panel.uniqueId().attr( "id" );
- header.attr( "aria-controls", panelId );
- panel.attr( "aria-labelledby", headerId );
- } )
- .next()
- .attr( "role", "tabpanel" );
-
- this.headers
- .not( this.active )
- .attr( {
- "aria-selected": "false",
- "aria-expanded": "false",
- tabIndex: -1
- } )
- .next()
- .attr( {
- "aria-hidden": "true"
- } )
- .hide();
-
- // Make sure at least one header is in the tab order
- if ( !this.active.length ) {
- this.headers.eq( 0 ).attr( "tabIndex", 0 );
- } else {
- this.active.attr( {
- "aria-selected": "true",
- "aria-expanded": "true",
- tabIndex: 0
- } )
- .next()
- .attr( {
- "aria-hidden": "false"
- } );
- }
-
- this._createIcons();
-
- this._setupEvents( options.event );
-
- if ( heightStyle === "fill" ) {
- maxHeight = parent.height();
- this.element.siblings( ":visible" ).each( function() {
- var elem = $( this ),
- position = elem.css( "position" );
-
- if ( position === "absolute" || position === "fixed" ) {
- return;
- }
- maxHeight -= elem.outerHeight( true );
- } );
-
- this.headers.each( function() {
- maxHeight -= $( this ).outerHeight( true );
- } );
-
- this.headers.next()
- .each( function() {
- $( this ).height( Math.max( 0, maxHeight -
- $( this ).innerHeight() + $( this ).height() ) );
- } )
- .css( "overflow", "auto" );
- } else if ( heightStyle === "auto" ) {
- maxHeight = 0;
- this.headers.next()
- .each( function() {
- var isVisible = $( this ).is( ":visible" );
- if ( !isVisible ) {
- $( this ).show();
- }
- maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
- if ( !isVisible ) {
- $( this ).hide();
- }
- } )
- .height( maxHeight );
- }
- },
-
- _activate: function( index ) {
- var active = this._findActive( index )[ 0 ];
-
- // Trying to activate the already active panel
- if ( active === this.active[ 0 ] ) {
- return;
- }
-
- // Trying to collapse, simulate a click on the currently active header
- active = active || this.active[ 0 ];
-
- this._eventHandler( {
- target: active,
- currentTarget: active,
- preventDefault: $.noop
- } );
- },
-
- _findActive: function( selector ) {
- return typeof selector === "number" ? this.headers.eq( selector ) : $();
- },
-
- _setupEvents: function( event ) {
- var events = {
- keydown: "_keydown"
- };
- if ( event ) {
- $.each( event.split( " " ), function( index, eventName ) {
- events[ eventName ] = "_eventHandler";
- } );
- }
-
- this._off( this.headers.add( this.headers.next() ) );
- this._on( this.headers, events );
- this._on( this.headers.next(), { keydown: "_panelKeyDown" } );
- this._hoverable( this.headers );
- this._focusable( this.headers );
- },
-
- _eventHandler: function( event ) {
- var activeChildren, clickedChildren,
- options = this.options,
- active = this.active,
- clicked = $( event.currentTarget ),
- clickedIsActive = clicked[ 0 ] === active[ 0 ],
- collapsing = clickedIsActive && options.collapsible,
- toShow = collapsing ? $() : clicked.next(),
- toHide = active.next(),
- eventData = {
- oldHeader: active,
- oldPanel: toHide,
- newHeader: collapsing ? $() : clicked,
- newPanel: toShow
- };
-
- event.preventDefault();
-
- if (
-
- // click on active header, but not collapsible
- ( clickedIsActive && !options.collapsible ) ||
-
- // allow canceling activation
- ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
- return;
- }
-
- options.active = collapsing ? false : this.headers.index( clicked );
-
- // When the call to ._toggle() comes after the class changes
- // it causes a very odd bug in IE 8 (see #6720)
- this.active = clickedIsActive ? $() : clicked;
- this._toggle( eventData );
-
- // Switch classes
- // corner classes on the previously active header stay after the animation
- this._removeClass( active, "ui-accordion-header-active", "ui-state-active" );
- if ( options.icons ) {
- activeChildren = active.children( ".ui-accordion-header-icon" );
- this._removeClass( activeChildren, null, options.icons.activeHeader )
- ._addClass( activeChildren, null, options.icons.header );
- }
-
- if ( !clickedIsActive ) {
- this._removeClass( clicked, "ui-accordion-header-collapsed" )
- ._addClass( clicked, "ui-accordion-header-active", "ui-state-active" );
- if ( options.icons ) {
- clickedChildren = clicked.children( ".ui-accordion-header-icon" );
- this._removeClass( clickedChildren, null, options.icons.header )
- ._addClass( clickedChildren, null, options.icons.activeHeader );
- }
-
- this._addClass( clicked.next(), "ui-accordion-content-active" );
- }
- },
-
- _toggle: function( data ) {
- var toShow = data.newPanel,
- toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
-
- // Handle activating a panel during the animation for another activation
- this.prevShow.add( this.prevHide ).stop( true, true );
- this.prevShow = toShow;
- this.prevHide = toHide;
-
- if ( this.options.animate ) {
- this._animate( toShow, toHide, data );
- } else {
- toHide.hide();
- toShow.show();
- this._toggleComplete( data );
- }
-
- toHide.attr( {
- "aria-hidden": "true"
- } );
- toHide.prev().attr( {
- "aria-selected": "false",
- "aria-expanded": "false"
- } );
-
- // if we're switching panels, remove the old header from the tab order
- // if we're opening from collapsed state, remove the previous header from the tab order
- // if we're collapsing, then keep the collapsing header in the tab order
- if ( toShow.length && toHide.length ) {
- toHide.prev().attr( {
- "tabIndex": -1,
- "aria-expanded": "false"
- } );
- } else if ( toShow.length ) {
- this.headers.filter( function() {
- return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0;
- } )
- .attr( "tabIndex", -1 );
- }
-
- toShow
- .attr( "aria-hidden", "false" )
- .prev()
- .attr( {
- "aria-selected": "true",
- "aria-expanded": "true",
- tabIndex: 0
- } );
- },
-
- _animate: function( toShow, toHide, data ) {
- var total, easing, duration,
- that = this,
- adjust = 0,
- boxSizing = toShow.css( "box-sizing" ),
- down = toShow.length &&
- ( !toHide.length || ( toShow.index() < toHide.index() ) ),
- animate = this.options.animate || {},
- options = down && animate.down || animate,
- complete = function() {
- that._toggleComplete( data );
- };
-
- if ( typeof options === "number" ) {
- duration = options;
- }
- if ( typeof options === "string" ) {
- easing = options;
- }
-
- // fall back from options to animation in case of partial down settings
- easing = easing || options.easing || animate.easing;
- duration = duration || options.duration || animate.duration;
-
- if ( !toHide.length ) {
- return toShow.animate( this.showProps, duration, easing, complete );
- }
- if ( !toShow.length ) {
- return toHide.animate( this.hideProps, duration, easing, complete );
- }
-
- total = toShow.show().outerHeight();
- toHide.animate( this.hideProps, {
- duration: duration,
- easing: easing,
- step: function( now, fx ) {
- fx.now = Math.round( now );
- }
- } );
- toShow
- .hide()
- .animate( this.showProps, {
- duration: duration,
- easing: easing,
- complete: complete,
- step: function( now, fx ) {
- fx.now = Math.round( now );
- if ( fx.prop !== "height" ) {
- if ( boxSizing === "content-box" ) {
- adjust += fx.now;
- }
- } else if ( that.options.heightStyle !== "content" ) {
- fx.now = Math.round( total - toHide.outerHeight() - adjust );
- adjust = 0;
- }
- }
- } );
- },
-
- _toggleComplete: function( data ) {
- var toHide = data.oldPanel,
- prev = toHide.prev();
-
- this._removeClass( toHide, "ui-accordion-content-active" );
- this._removeClass( prev, "ui-accordion-header-active" )
- ._addClass( prev, "ui-accordion-header-collapsed" );
-
- // Work around for rendering bug in IE (#5421)
- if ( toHide.length ) {
- toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;
- }
- this._trigger( "activate", null, data );
- }
-} );
-
-
-
-var safeActiveElement = $.ui.safeActiveElement = function( document ) {
- var activeElement;
-
- // Support: IE 9 only
- // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
- try {
- activeElement = document.activeElement;
- } catch ( error ) {
- activeElement = document.body;
- }
-
- // Support: IE 9 - 11 only
- // IE may return null instead of an element
- // Interestingly, this only seems to occur when NOT in an iframe
- if ( !activeElement ) {
- activeElement = document.body;
- }
-
- // Support: IE 11 only
- // IE11 returns a seemingly empty object in some cases when accessing
- // document.activeElement from an <iframe>
- if ( !activeElement.nodeName ) {
- activeElement = document.body;
- }
-
- return activeElement;
-};
-
-
-/*!
- * jQuery UI Menu 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Menu
-//>>group: Widgets
-//>>description: Creates nestable menus.
-//>>docs: http://api.jqueryui.com/menu/
-//>>demos: http://jqueryui.com/menu/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/menu.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-var widgetsMenu = $.widget( "ui.menu", {
- version: "1.12.1",
- defaultElement: "<ul>",
- delay: 300,
- options: {
- icons: {
- submenu: "ui-icon-caret-1-e"
- },
- items: "> *",
- menus: "ul",
- position: {
- my: "left top",
- at: "right top"
- },
- role: "menu",
-
- // Callbacks
- blur: null,
- focus: null,
- select: null
- },
-
- _create: function() {
- this.activeMenu = this.element;
-
- // Flag used to prevent firing of the click handler
- // as the event bubbles up through nested menus
- this.mouseHandled = false;
- this.element
- .uniqueId()
- .attr( {
- role: this.options.role,
- tabIndex: 0
- } );
-
- this._addClass( "ui-menu", "ui-widget ui-widget-content" );
- this._on( {
-
- // Prevent focus from sticking to links inside menu after clicking
- // them (focus should always stay on UL during navigation).
- "mousedown .ui-menu-item": function( event ) {
- event.preventDefault();
- },
- "click .ui-menu-item": function( event ) {
- var target = $( event.target );
- var active = $( $.ui.safeActiveElement( this.document[ 0 ] ) );
- if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
- this.select( event );
-
- // Only set the mouseHandled flag if the event will bubble, see #9469.
- if ( !event.isPropagationStopped() ) {
- this.mouseHandled = true;
- }
-
- // Open submenu on click
- if ( target.has( ".ui-menu" ).length ) {
- this.expand( event );
- } else if ( !this.element.is( ":focus" ) &&
- active.closest( ".ui-menu" ).length ) {
-
- // Redirect focus to the menu
- this.element.trigger( "focus", [ true ] );
-
- // If the active item is on the top level, let it stay active.
- // Otherwise, blur the active item since it is no longer visible.
- if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
- clearTimeout( this.timer );
- }
- }
- }
- },
- "mouseenter .ui-menu-item": function( event ) {
-
- // Ignore mouse events while typeahead is active, see #10458.
- // Prevents focusing the wrong item when typeahead causes a scroll while the mouse
- // is over an item in the menu
- if ( this.previousFilter ) {
- return;
- }
-
- var actualTarget = $( event.target ).closest( ".ui-menu-item" ),
- target = $( event.currentTarget );
-
- // Ignore bubbled events on parent items, see #11641
- if ( actualTarget[ 0 ] !== target[ 0 ] ) {
- return;
- }
-
- // Remove ui-state-active class from siblings of the newly focused menu item
- // to avoid a jump caused by adjacent elements both having a class with a border
- this._removeClass( target.siblings().children( ".ui-state-active" ),
- null, "ui-state-active" );
- this.focus( event, target );
- },
- mouseleave: "collapseAll",
- "mouseleave .ui-menu": "collapseAll",
- focus: function( event, keepActiveItem ) {
-
- // If there's already an active item, keep it active
- // If not, activate the first item
- var item = this.active || this.element.find( this.options.items ).eq( 0 );
-
- if ( !keepActiveItem ) {
- this.focus( event, item );
- }
- },
- blur: function( event ) {
- this._delay( function() {
- var notContained = !$.contains(
- this.element[ 0 ],
- $.ui.safeActiveElement( this.document[ 0 ] )
- );
- if ( notContained ) {
- this.collapseAll( event );
- }
- } );
- },
- keydown: "_keydown"
- } );
-
- this.refresh();
-
- // Clicks outside of a menu collapse any open menus
- this._on( this.document, {
- click: function( event ) {
- if ( this._closeOnDocumentClick( event ) ) {
- this.collapseAll( event );
- }
-
- // Reset the mouseHandled flag
- this.mouseHandled = false;
- }
- } );
- },
-
- _destroy: function() {
- var items = this.element.find( ".ui-menu-item" )
- .removeAttr( "role aria-disabled" ),
- submenus = items.children( ".ui-menu-item-wrapper" )
- .removeUniqueId()
- .removeAttr( "tabIndex role aria-haspopup" );
-
- // Destroy (sub)menus
- this.element
- .removeAttr( "aria-activedescendant" )
- .find( ".ui-menu" ).addBack()
- .removeAttr( "role aria-labelledby aria-expanded aria-hidden aria-disabled " +
- "tabIndex" )
- .removeUniqueId()
- .show();
-
- submenus.children().each( function() {
- var elem = $( this );
- if ( elem.data( "ui-menu-submenu-caret" ) ) {
- elem.remove();
- }
- } );
- },
-
- _keydown: function( event ) {
- var match, prev, character, skip,
- preventDefault = true;
-
- switch ( event.keyCode ) {
- case $.ui.keyCode.PAGE_UP:
- this.previousPage( event );
- break;
- case $.ui.keyCode.PAGE_DOWN:
- this.nextPage( event );
- break;
- case $.ui.keyCode.HOME:
- this._move( "first", "first", event );
- break;
- case $.ui.keyCode.END:
- this._move( "last", "last", event );
- break;
- case $.ui.keyCode.UP:
- this.previous( event );
- break;
- case $.ui.keyCode.DOWN:
- this.next( event );
- break;
- case $.ui.keyCode.LEFT:
- this.collapse( event );
- break;
- case $.ui.keyCode.RIGHT:
- if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
- this.expand( event );
- }
- break;
- case $.ui.keyCode.ENTER:
- case $.ui.keyCode.SPACE:
- this._activate( event );
- break;
- case $.ui.keyCode.ESCAPE:
- this.collapse( event );
- break;
- default:
- preventDefault = false;
- prev = this.previousFilter || "";
- skip = false;
-
- // Support number pad values
- character = event.keyCode >= 96 && event.keyCode <= 105 ?
- ( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );
-
- clearTimeout( this.filterTimer );
-
- if ( character === prev ) {
- skip = true;
- } else {
- character = prev + character;
- }
-
- match = this._filterMenuItems( character );
- match = skip && match.index( this.active.next() ) !== -1 ?
- this.active.nextAll( ".ui-menu-item" ) :
- match;
-
- // If no matches on the current filter, reset to the last character pressed
- // to move down the menu to the first item that starts with that character
- if ( !match.length ) {
- character = String.fromCharCode( event.keyCode );
- match = this._filterMenuItems( character );
- }
-
- if ( match.length ) {
- this.focus( event, match );
- this.previousFilter = character;
- this.filterTimer = this._delay( function() {
- delete this.previousFilter;
- }, 1000 );
- } else {
- delete this.previousFilter;
- }
- }
-
- if ( preventDefault ) {
- event.preventDefault();
- }
- },
-
- _activate: function( event ) {
- if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
- if ( this.active.children( "[aria-haspopup='true']" ).length ) {
- this.expand( event );
- } else {
- this.select( event );
- }
- }
- },
-
- refresh: function() {
- var menus, items, newSubmenus, newItems, newWrappers,
- that = this,
- icon = this.options.icons.submenu,
- submenus = this.element.find( this.options.menus );
-
- this._toggleClass( "ui-menu-icons", null, !!this.element.find( ".ui-icon" ).length );
-
- // Initialize nested menus
- newSubmenus = submenus.filter( ":not(.ui-menu)" )
- .hide()
- .attr( {
- role: this.options.role,
- "aria-hidden": "true",
- "aria-expanded": "false"
- } )
- .each( function() {
- var menu = $( this ),
- item = menu.prev(),
- submenuCaret = $( "<span>" ).data( "ui-menu-submenu-caret", true );
-
- that._addClass( submenuCaret, "ui-menu-icon", "ui-icon " + icon );
- item
- .attr( "aria-haspopup", "true" )
- .prepend( submenuCaret );
- menu.attr( "aria-labelledby", item.attr( "id" ) );
- } );
-
- this._addClass( newSubmenus, "ui-menu", "ui-widget ui-widget-content ui-front" );
-
- menus = submenus.add( this.element );
- items = menus.find( this.options.items );
-
- // Initialize menu-items containing spaces and/or dashes only as dividers
- items.not( ".ui-menu-item" ).each( function() {
- var item = $( this );
- if ( that._isDivider( item ) ) {
- that._addClass( item, "ui-menu-divider", "ui-widget-content" );
- }
- } );
-
- // Don't refresh list items that are already adapted
- newItems = items.not( ".ui-menu-item, .ui-menu-divider" );
- newWrappers = newItems.children()
- .not( ".ui-menu" )
- .uniqueId()
- .attr( {
- tabIndex: -1,
- role: this._itemRole()
- } );
- this._addClass( newItems, "ui-menu-item" )
- ._addClass( newWrappers, "ui-menu-item-wrapper" );
-
- // Add aria-disabled attribute to any disabled menu item
- items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
-
- // If the active item has been removed, blur the menu
- if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
- this.blur();
- }
- },
-
- _itemRole: function() {
- return {
- menu: "menuitem",
- listbox: "option"
- }[ this.options.role ];
- },
-
- _setOption: function( key, value ) {
- if ( key === "icons" ) {
- var icons = this.element.find( ".ui-menu-icon" );
- this._removeClass( icons, null, this.options.icons.submenu )
- ._addClass( icons, null, value.submenu );
- }
- this._super( key, value );
- },
-
- _setOptionDisabled: function( value ) {
- this._super( value );
-
- this.element.attr( "aria-disabled", String( value ) );
- this._toggleClass( null, "ui-state-disabled", !!value );
- },
-
- focus: function( event, item ) {
- var nested, focused, activeParent;
- this.blur( event, event && event.type === "focus" );
-
- this._scrollIntoView( item );
-
- this.active = item.first();
-
- focused = this.active.children( ".ui-menu-item-wrapper" );
- this._addClass( focused, null, "ui-state-active" );
-
- // Only update aria-activedescendant if there's a role
- // otherwise we assume focus is managed elsewhere
- if ( this.options.role ) {
- this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
- }
-
- // Highlight active parent menu item, if any
- activeParent = this.active
- .parent()
- .closest( ".ui-menu-item" )
- .children( ".ui-menu-item-wrapper" );
- this._addClass( activeParent, null, "ui-state-active" );
-
- if ( event && event.type === "keydown" ) {
- this._close();
- } else {
- this.timer = this._delay( function() {
- this._close();
- }, this.delay );
- }
-
- nested = item.children( ".ui-menu" );
- if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
- this._startOpening( nested );
- }
- this.activeMenu = item.parent();
-
- this._trigger( "focus", event, { item: item } );
- },
-
- _scrollIntoView: function( item ) {
- var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
- if ( this._hasScroll() ) {
- borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0;
- paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0;
- offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
- scroll = this.activeMenu.scrollTop();
- elementHeight = this.activeMenu.height();
- itemHeight = item.outerHeight();
-
- if ( offset < 0 ) {
- this.activeMenu.scrollTop( scroll + offset );
- } else if ( offset + itemHeight > elementHeight ) {
- this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
- }
- }
- },
-
- blur: function( event, fromFocus ) {
- if ( !fromFocus ) {
- clearTimeout( this.timer );
- }
-
- if ( !this.active ) {
- return;
- }
-
- this._removeClass( this.active.children( ".ui-menu-item-wrapper" ),
- null, "ui-state-active" );
-
- this._trigger( "blur", event, { item: this.active } );
- this.active = null;
- },
-
- _startOpening: function( submenu ) {
- clearTimeout( this.timer );
-
- // Don't open if already open fixes a Firefox bug that caused a .5 pixel
- // shift in the submenu position when mousing over the caret icon
- if ( submenu.attr( "aria-hidden" ) !== "true" ) {
- return;
- }
-
- this.timer = this._delay( function() {
- this._close();
- this._open( submenu );
- }, this.delay );
- },
-
- _open: function( submenu ) {
- var position = $.extend( {
- of: this.active
- }, this.options.position );
-
- clearTimeout( this.timer );
- this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
- .hide()
- .attr( "aria-hidden", "true" );
-
- submenu
- .show()
- .removeAttr( "aria-hidden" )
- .attr( "aria-expanded", "true" )
- .position( position );
- },
-
- collapseAll: function( event, all ) {
- clearTimeout( this.timer );
- this.timer = this._delay( function() {
-
- // If we were passed an event, look for the submenu that contains the event
- var currentMenu = all ? this.element :
- $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
-
- // If we found no valid submenu ancestor, use the main menu to close all
- // sub menus anyway
- if ( !currentMenu.length ) {
- currentMenu = this.element;
- }
-
- this._close( currentMenu );
-
- this.blur( event );
-
- // Work around active item staying active after menu is blurred
- this._removeClass( currentMenu.find( ".ui-state-active" ), null, "ui-state-active" );
-
- this.activeMenu = currentMenu;
- }, this.delay );
- },
-
- // With no arguments, closes the currently active menu - if nothing is active
- // it closes all menus. If passed an argument, it will search for menus BELOW
- _close: function( startMenu ) {
- if ( !startMenu ) {
- startMenu = this.active ? this.active.parent() : this.element;
- }
-
- startMenu.find( ".ui-menu" )
- .hide()
- .attr( "aria-hidden", "true" )
- .attr( "aria-expanded", "false" );
- },
-
- _closeOnDocumentClick: function( event ) {
- return !$( event.target ).closest( ".ui-menu" ).length;
- },
-
- _isDivider: function( item ) {
-
- // Match hyphen, em dash, en dash
- return !/[^\-\u2014\u2013\s]/.test( item.text() );
- },
-
- collapse: function( event ) {
- var newItem = this.active &&
- this.active.parent().closest( ".ui-menu-item", this.element );
- if ( newItem && newItem.length ) {
- this._close();
- this.focus( event, newItem );
- }
- },
-
- expand: function( event ) {
- var newItem = this.active &&
- this.active
- .children( ".ui-menu " )
- .find( this.options.items )
- .first();
-
- if ( newItem && newItem.length ) {
- this._open( newItem.parent() );
-
- // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
- this._delay( function() {
- this.focus( event, newItem );
- } );
- }
- },
-
- next: function( event ) {
- this._move( "next", "first", event );
- },
-
- previous: function( event ) {
- this._move( "prev", "last", event );
- },
-
- 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( direction, filter, event ) {
- var next;
- if ( this.active ) {
- if ( direction === "first" || direction === "last" ) {
- next = this.active
- [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
- .eq( -1 );
- } else {
- next = this.active
- [ direction + "All" ]( ".ui-menu-item" )
- .eq( 0 );
- }
- }
- if ( !next || !next.length || !this.active ) {
- next = this.activeMenu.find( this.options.items )[ filter ]();
- }
-
- this.focus( event, next );
- },
-
- nextPage: function( event ) {
- var item, base, height;
-
- if ( !this.active ) {
- this.next( event );
- return;
- }
- if ( this.isLastItem() ) {
- return;
- }
- if ( this._hasScroll() ) {
- base = this.active.offset().top;
- height = this.element.height();
- this.active.nextAll( ".ui-menu-item" ).each( function() {
- item = $( this );
- return item.offset().top - base - height < 0;
- } );
-
- this.focus( event, item );
- } else {
- this.focus( event, this.activeMenu.find( this.options.items )
- [ !this.active ? "first" : "last" ]() );
- }
- },
-
- previousPage: function( event ) {
- var item, base, height;
- if ( !this.active ) {
- this.next( event );
- return;
- }
- if ( this.isFirstItem() ) {
- return;
- }
- if ( this._hasScroll() ) {
- base = this.active.offset().top;
- height = this.element.height();
- this.active.prevAll( ".ui-menu-item" ).each( function() {
- item = $( this );
- return item.offset().top - base + height > 0;
- } );
-
- this.focus( event, item );
- } else {
- this.focus( event, this.activeMenu.find( this.options.items ).first() );
- }
- },
-
- _hasScroll: function() {
- return this.element.outerHeight() < this.element.prop( "scrollHeight" );
- },
-
- select: function( event ) {
-
- // TODO: It should never be possible to not have an active item at this
- // point, but the tests don't trigger mouseenter before click.
- this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
- var ui = { item: this.active };
- if ( !this.active.has( ".ui-menu" ).length ) {
- this.collapseAll( event, true );
- }
- this._trigger( "select", event, ui );
- },
-
- _filterMenuItems: function( character ) {
- var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ),
- regex = new RegExp( "^" + escapedCharacter, "i" );
-
- return this.activeMenu
- .find( this.options.items )
-
- // Only match on items, not dividers or other content (#10571)
- .filter( ".ui-menu-item" )
- .filter( function() {
- return regex.test(
- $.trim( $( this ).children( ".ui-menu-item-wrapper" ).text() ) );
- } );
- }
-} );
-
-
-/*!
- * jQuery UI Autocomplete 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Autocomplete
-//>>group: Widgets
-//>>description: Lists suggested words as the user is typing.
-//>>docs: http://api.jqueryui.com/autocomplete/
-//>>demos: http://jqueryui.com/autocomplete/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/autocomplete.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-$.widget( "ui.autocomplete", {
- version: "1.12.1",
- defaultElement: "<input>",
- options: {
- appendTo: null,
- autoFocus: false,
- delay: 300,
- minLength: 1,
- position: {
- my: "left top",
- at: "left bottom",
- collision: "none"
- },
- source: null,
-
- // Callbacks
- change: null,
- close: null,
- focus: null,
- open: null,
- response: null,
- search: null,
- select: null
- },
-
- requestIndex: 0,
- pending: 0,
-
- _create: function() {
-
- // Some browsers only repeat keydown events, not keypress events,
- // so we use the suppressKeyPress flag to determine if we've already
- // handled the keydown event. #7269
- // Unfortunately the code for & in keypress is the same as the up arrow,
- // so we use the suppressKeyPressRepeat flag to avoid handling keypress
- // events when we know the keydown event was used to modify the
- // search term. #7799
- var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
- nodeName = this.element[ 0 ].nodeName.toLowerCase(),
- isTextarea = nodeName === "textarea",
- isInput = nodeName === "input";
-
- // Textareas are always multi-line
- // Inputs are always single-line, even if inside a contentEditable element
- // IE also treats inputs as contentEditable
- // All other element types are determined by whether or not they're contentEditable
- this.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element );
-
- this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
- this.isNewMenu = true;
-
- this._addClass( "ui-autocomplete-input" );
- this.element.attr( "autocomplete", "off" );
-
- this._on( this.element, {
- keydown: function( event ) {
- if ( this.element.prop( "readOnly" ) ) {
- suppressKeyPress = true;
- suppressInput = true;
- suppressKeyPressRepeat = true;
- return;
- }
-
- suppressKeyPress = false;
- suppressInput = false;
- suppressKeyPressRepeat = false;
- var keyCode = $.ui.keyCode;
- switch ( event.keyCode ) {
- case keyCode.PAGE_UP:
- suppressKeyPress = true;
- this._move( "previousPage", event );
- break;
- case keyCode.PAGE_DOWN:
- suppressKeyPress = true;
- this._move( "nextPage", event );
- break;
- case keyCode.UP:
- suppressKeyPress = true;
- this._keyEvent( "previous", event );
- break;
- case keyCode.DOWN:
- suppressKeyPress = true;
- this._keyEvent( "next", event );
- break;
- case keyCode.ENTER:
-
- // when menu is open and has focus
- if ( this.menu.active ) {
-
- // #6055 - Opera still allows the keypress to occur
- // which causes forms to submit
- suppressKeyPress = true;
- event.preventDefault();
- this.menu.select( event );
- }
- break;
- case keyCode.TAB:
- if ( this.menu.active ) {
- this.menu.select( event );
- }
- break;
- case keyCode.ESCAPE:
- if ( this.menu.element.is( ":visible" ) ) {
- if ( !this.isMultiLine ) {
- this._value( this.term );
- }
- this.close( event );
-
- // Different browsers have different default behavior for escape
- // Single press can mean undo or clear
- // Double press in IE means clear the whole form
- event.preventDefault();
- }
- break;
- default:
- suppressKeyPressRepeat = true;
-
- // search timeout should be triggered before the input value is changed
- this._searchTimeout( event );
- break;
- }
- },
- keypress: function( event ) {
- if ( suppressKeyPress ) {
- suppressKeyPress = false;
- if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
- event.preventDefault();
- }
- return;
- }
- if ( suppressKeyPressRepeat ) {
- return;
- }
-
- // Replicate some key handlers to allow them to repeat in Firefox and Opera
- var keyCode = $.ui.keyCode;
- switch ( event.keyCode ) {
- case keyCode.PAGE_UP:
- this._move( "previousPage", event );
- break;
- case keyCode.PAGE_DOWN:
- this._move( "nextPage", event );
- break;
- case keyCode.UP:
- this._keyEvent( "previous", event );
- break;
- case keyCode.DOWN:
- this._keyEvent( "next", event );
- break;
- }
- },
- input: function( event ) {
- if ( suppressInput ) {
- suppressInput = false;
- event.preventDefault();
- return;
- }
- this._searchTimeout( event );
- },
- focus: function() {
- this.selectedItem = null;
- this.previous = this._value();
- },
- blur: function( event ) {
- if ( this.cancelBlur ) {
- delete this.cancelBlur;
- return;
- }
-
- clearTimeout( this.searching );
- this.close( event );
- this._change( event );
- }
- } );
-
- this._initSource();
- this.menu = $( "<ul>" )
- .appendTo( this._appendTo() )
- .menu( {
-
- // disable ARIA support, the live region takes care of that
- role: null
- } )
- .hide()
- .menu( "instance" );
-
- this._addClass( this.menu.element, "ui-autocomplete", "ui-front" );
- this._on( this.menu.element, {
- mousedown: function( event ) {
-
- // prevent moving focus out of the text field
- event.preventDefault();
-
- // IE doesn't prevent moving focus even with event.preventDefault()
- // so we set a flag to know when we should ignore the blur event
- this.cancelBlur = true;
- this._delay( function() {
- delete this.cancelBlur;
-
- // Support: IE 8 only
- // Right clicking a menu item or selecting text from the menu items will
- // result in focus moving out of the input. However, we've already received
- // and ignored the blur event because of the cancelBlur flag set above. So
- // we restore focus to ensure that the menu closes properly based on the user's
- // next actions.
- if ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {
- this.element.trigger( "focus" );
- }
- } );
- },
- menufocus: function( event, ui ) {
- var label, item;
-
- // support: Firefox
- // Prevent accidental activation of menu items in Firefox (#7024 #9118)
- if ( this.isNewMenu ) {
- this.isNewMenu = false;
- if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
- this.menu.blur();
-
- this.document.one( "mousemove", function() {
- $( event.target ).trigger( event.originalEvent );
- } );
-
- return;
- }
- }
-
- item = ui.item.data( "ui-autocomplete-item" );
- if ( false !== this._trigger( "focus", event, { item: item } ) ) {
-
- // use value to match what will end up in the input, if it was a key event
- if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
- this._value( item.value );
- }
- }
-
- // Announce the value in the liveRegion
- label = ui.item.attr( "aria-label" ) || item.value;
- if ( label && $.trim( label ).length ) {
- this.liveRegion.children().hide();
- $( "<div>" ).text( label ).appendTo( this.liveRegion );
- }
- },
- menuselect: function( event, ui ) {
- var item = ui.item.data( "ui-autocomplete-item" ),
- previous = this.previous;
-
- // Only trigger when focus was lost (click on menu)
- if ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {
- this.element.trigger( "focus" );
- this.previous = previous;
-
- // #6109 - IE triggers two focus events and the second
- // is asynchronous, so we need to reset the previous
- // term synchronously and asynchronously :-(
- this._delay( function() {
- this.previous = previous;
- this.selectedItem = item;
- } );
- }
-
- if ( false !== this._trigger( "select", event, { item: item } ) ) {
- this._value( item.value );
- }
-
- // reset the term after the select event
- // this allows custom select handling to work properly
- this.term = this._value();
-
- this.close( event );
- this.selectedItem = item;
- }
- } );
-
- this.liveRegion = $( "<div>", {
- role: "status",
- "aria-live": "assertive",
- "aria-relevant": "additions"
- } )
- .appendTo( this.document[ 0 ].body );
-
- this._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" );
-
- // Turning off autocomplete prevents the browser from remembering the
- // value when navigating through history, so we re-enable autocomplete
- // if the page is unloaded before the widget is destroyed. #7790
- 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( key, value ) {
- this._super( key, value );
- if ( key === "source" ) {
- this._initSource();
- }
- if ( key === "appendTo" ) {
- this.menu.element.appendTo( this._appendTo() );
- }
- if ( key === "disabled" && value && this.xhr ) {
- this.xhr.abort();
- }
- },
-
- _isEventTargetInWidget: function( event ) {
- var menuElement = this.menu.element[ 0 ];
-
- return event.target === this.element[ 0 ] ||
- event.target === menuElement ||
- $.contains( menuElement, event.target );
- },
-
- _closeOnClickOutside: function( event ) {
- if ( !this._isEventTargetInWidget( event ) ) {
- this.close();
- }
- },
-
- _appendTo: function() {
- var element = this.options.appendTo;
-
- if ( element ) {
- element = element.jquery || element.nodeType ?
- $( element ) :
- this.document.find( element ).eq( 0 );
- }
-
- if ( !element || !element[ 0 ] ) {
- element = this.element.closest( ".ui-front, dialog" );
- }
-
- if ( !element.length ) {
- element = this.document[ 0 ].body;
- }
-
- return element;
- },
-
- _initSource: function() {
- var array, url,
- that = this;
- if ( $.isArray( this.options.source ) ) {
- array = this.options.source;
- this.source = function( request, response ) {
- response( $.ui.autocomplete.filter( array, request.term ) );
- };
- } else if ( typeof this.options.source === "string" ) {
- url = this.options.source;
- this.source = function( request, response ) {
- if ( that.xhr ) {
- that.xhr.abort();
- }
- that.xhr = $.ajax( {
- url: url,
- data: request,
- dataType: "json",
- success: function( data ) {
- response( data );
- },
- error: function() {
- response( [] );
- }
- } );
- };
- } else {
- this.source = this.options.source;
- }
- },
-
- _searchTimeout: function( event ) {
- clearTimeout( this.searching );
- this.searching = this._delay( function() {
-
- // Search if the value has changed, or if the user retypes the same value (see #7434)
- var equalValues = this.term === this._value(),
- menuVisible = this.menu.element.is( ":visible" ),
- modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
-
- if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {
- this.selectedItem = null;
- this.search( null, event );
- }
- }, this.options.delay );
- },
-
- search: function( value, event ) {
- value = value != null ? value : this._value();
-
- // Always save the actual value, not the one passed as an argument
- this.term = this._value();
-
- if ( value.length < this.options.minLength ) {
- return this.close( event );
- }
-
- if ( this._trigger( "search", event ) === false ) {
- return;
- }
-
- return this._search( value );
- },
-
- _search: function( value ) {
- this.pending++;
- this._addClass( "ui-autocomplete-loading" );
- this.cancelSearch = false;
-
- this.source( { term: value }, this._response() );
- },
-
- _response: function() {
- var index = ++this.requestIndex;
-
- return $.proxy( function( content ) {
- if ( index === this.requestIndex ) {
- this.__response( content );
- }
-
- this.pending--;
- if ( !this.pending ) {
- this._removeClass( "ui-autocomplete-loading" );
- }
- }, this );
- },
-
- __response: function( content ) {
- if ( content ) {
- content = this._normalize( content );
- }
- this._trigger( "response", null, { content: content } );
- if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
- this._suggest( content );
- this._trigger( "open" );
- } else {
-
- // use ._close() instead of .close() so we don't cancel future searches
- this._close();
- }
- },
-
- close: function( event ) {
- this.cancelSearch = true;
- this._close( event );
- },
-
- _close: function( event ) {
-
- // Remove the handler that closes the menu on outside clicks
- this._off( this.document, "mousedown" );
-
- if ( this.menu.element.is( ":visible" ) ) {
- this.menu.element.hide();
- this.menu.blur();
- this.isNewMenu = true;
- this._trigger( "close", event );
- }
- },
-
- _change: function( event ) {
- if ( this.previous !== this._value() ) {
- this._trigger( "change", event, { item: this.selectedItem } );
- }
- },
-
- _normalize: function( items ) {
-
- // assume all items have the right format when the first item is complete
- if ( items.length && items[ 0 ].label && items[ 0 ].value ) {
- return items;
- }
- return $.map( items, function( item ) {
- if ( typeof item === "string" ) {
- return {
- label: item,
- value: item
- };
- }
- return $.extend( {}, item, {
- label: item.label || item.value,
- value: item.value || item.label
- } );
- } );
- },
-
- _suggest: function( items ) {
- var ul = this.menu.element.empty();
- this._renderMenu( ul, items );
- this.isNewMenu = true;
- this.menu.refresh();
-
- // Size and position menu
- ul.show();
- this._resizeMenu();
- ul.position( $.extend( {
- of: this.element
- }, this.options.position ) );
-
- if ( this.options.autoFocus ) {
- this.menu.next();
- }
-
- // Listen for interactions outside of the widget (#6642)
- this._on( this.document, {
- mousedown: "_closeOnClickOutside"
- } );
- },
-
- _resizeMenu: function() {
- var ul = this.menu.element;
- ul.outerWidth( Math.max(
-
- // Firefox wraps long text (possibly a rounding bug)
- // so we add 1px to avoid the wrapping (#7513)
- ul.width( "" ).outerWidth() + 1,
- this.element.outerWidth()
- ) );
- },
-
- _renderMenu: function( ul, items ) {
- var that = this;
- $.each( items, function( index, item ) {
- that._renderItemData( ul, item );
- } );
- },
-
- _renderItemData: function( ul, item ) {
- return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
- },
-
- _renderItem: function( ul, item ) {
- return $( "<li>" )
- .append( $( "<div>" ).text( item.label ) )
- .appendTo( ul );
- },
-
- _move: function( direction, event ) {
- if ( !this.menu.element.is( ":visible" ) ) {
- this.search( null, event );
- return;
- }
- if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
- this.menu.isLastItem() && /^next/.test( direction ) ) {
-
- if ( !this.isMultiLine ) {
- this._value( this.term );
- }
-
- this.menu.blur();
- return;
- }
- this.menu[ direction ]( event );
- },
-
- widget: function() {
- return this.menu.element;
- },
-
- _value: function() {
- return this.valueMethod.apply( this.element, arguments );
- },
-
- _keyEvent: function( keyEvent, event ) {
- if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
- this._move( keyEvent, event );
-
- // Prevents moving cursor to beginning/end of the text field in some browsers
- event.preventDefault();
- }
- },
-
- // Support: Chrome <=50
- // We should be able to just use this.element.prop( "isContentEditable" )
- // but hidden elements always report false in Chrome.
- // https://code.google.com/p/chromium/issues/detail?id=313082
- _isContentEditable: function( element ) {
- if ( !element.length ) {
- return false;
- }
-
- var editable = element.prop( "contentEditable" );
-
- if ( editable === "inherit" ) {
- return this._isContentEditable( element.parent() );
- }
-
- return editable === "true";
- }
-} );
-
-$.extend( $.ui.autocomplete, {
- escapeRegex: function( value ) {
- return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
- },
- filter: function( array, term ) {
- var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" );
- return $.grep( array, function( value ) {
- return matcher.test( value.label || value.value || value );
- } );
- }
-} );
-
-// Live region extension, adding a `messages` option
-// NOTE: This is an experimental API. We are still investigating
-// a full solution for string manipulation and internationalization.
-$.widget( "ui.autocomplete", $.ui.autocomplete, {
- options: {
- messages: {
- noResults: "No search results.",
- results: function( amount ) {
- return amount + ( amount > 1 ? " results are" : " result is" ) +
- " available, use up and down arrow keys to navigate.";
- }
- }
- },
-
- __response: function( content ) {
- var message;
- this._superApply( arguments );
- if ( this.options.disabled || this.cancelSearch ) {
- return;
- }
- if ( content && content.length ) {
- message = this.options.messages.results( content.length );
- } else {
- message = this.options.messages.noResults;
- }
- this.liveRegion.children().hide();
- $( "<div>" ).text( message ).appendTo( this.liveRegion );
- }
-} );
-
-var widgetsAutocomplete = $.ui.autocomplete;
-
-
-/*!
- * jQuery UI Controlgroup 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Controlgroup
-//>>group: Widgets
-//>>description: Visually groups form control widgets
-//>>docs: http://api.jqueryui.com/controlgroup/
-//>>demos: http://jqueryui.com/controlgroup/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/controlgroup.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-var controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;
-
-var widgetsControlgroup = $.widget( "ui.controlgroup", {
- version: "1.12.1",
- defaultElement: "<div>",
- options: {
- direction: "horizontal",
- disabled: null,
- onlyVisible: true,
- 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();
- },
-
- // To support the enhanced option in jQuery Mobile, we isolate DOM manipulation
- _enhance: function() {
- this.element.attr( "role", "toolbar" );
- this.refresh();
- },
-
- _destroy: function() {
- this._callChildMethod( "destroy" );
- this.childWidgets.removeData( "ui-controlgroup-data" );
- this.element.removeAttr( "role" );
- if ( this.options.items.controlgroupLabel ) {
- this.element
- .find( this.options.items.controlgroupLabel )
- .find( ".ui-controlgroup-label-contents" )
- .contents().unwrap();
- }
- },
-
- _initWidgets: function() {
- var that = this,
- childWidgets = [];
-
- // First we iterate over each of the items options
- $.each( this.options.items, function( widget, selector ) {
- var labels;
- var options = {};
-
- // Make sure the widget has a selector set
- if ( !selector ) {
- return;
- }
-
- if ( widget === "controlgroupLabel" ) {
- labels = that.element.find( selector );
- labels.each( function() {
- var element = $( this );
-
- if ( element.children( ".ui-controlgroup-label-contents" ).length ) {
- return;
- }
- element.contents()
- .wrapAll( "<span class='ui-controlgroup-label-contents'></span>" );
- } );
- that._addClass( labels, null, "ui-widget ui-widget-content ui-state-default" );
- childWidgets = childWidgets.concat( labels.get() );
- return;
- }
-
- // Make sure the widget actually exists
- if ( !$.fn[ widget ] ) {
- return;
- }
-
- // We assume everything is in the middle to start because we can't determine
- // first / last elements until all enhancments are done.
- if ( that[ "_" + widget + "Options" ] ) {
- options = that[ "_" + widget + "Options" ]( "middle" );
- } else {
- options = { classes: {} };
- }
-
- // Find instances of this widget inside controlgroup and init them
- that.element
- .find( selector )
- .each( function() {
- var element = $( this );
- var instance = element[ widget ]( "instance" );
-
- // We need to clone the default options for this type of widget to avoid
- // polluting the variable options which has a wider scope than a single widget.
- var instanceOptions = $.widget.extend( {}, options );
-
- // If the button is the child of a spinner ignore it
- // TODO: Find a more generic solution
- if ( widget === "button" && element.parent( ".ui-spinner" ).length ) {
- return;
- }
-
- // Create the widget if it doesn't exist
- if ( !instance ) {
- instance = element[ widget ]()[ widget ]( "instance" );
- }
- if ( instance ) {
- instanceOptions.classes =
- that._resolveClassesValues( instanceOptions.classes, instance );
- }
- element[ widget ]( instanceOptions );
-
- // Store an instance of the controlgroup to be able to reference
- // from the outermost element for changing options and refresh
- var widgetElement = element[ widget ]( "widget" );
- $.data( widgetElement[ 0 ], "ui-controlgroup-data",
- instance ? instance : element[ widget ]( "instance" ) );
-
- childWidgets.push( widgetElement[ 0 ] );
- } );
- } );
-
- this.childWidgets = $( $.unique( childWidgets ) );
- this._addClass( this.childWidgets, "ui-controlgroup-item" );
- },
-
- _callChildMethod: function( method ) {
- this.childWidgets.each( function() {
- var element = $( this ),
- data = element.data( "ui-controlgroup-data" );
- if ( data && data[ method ] ) {
- data[ method ]();
- }
- } );
- },
-
- _updateCornerClass: function( element, position ) {
- var remove = "ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all";
- var add = this._buildSimpleOptions( position, "label" ).classes.label;
-
- this._removeClass( element, null, remove );
- this._addClass( element, null, add );
- },
-
- _buildSimpleOptions: function( position, key ) {
- var direction = this.options.direction === "vertical";
- var result = {
- classes: {}
- };
- result.classes[ key ] = {
- "middle": "",
- "first": "ui-corner-" + ( direction ? "top" : "left" ),
- "last": "ui-corner-" + ( direction ? "bottom" : "right" ),
- "only": "ui-corner-all"
- }[ position ];
-
- return result;
- },
-
- _spinnerOptions: function( position ) {
- var options = this._buildSimpleOptions( position, "ui-spinner" );
-
- options.classes[ "ui-spinner-up" ] = "";
- options.classes[ "ui-spinner-down" ] = "";
-
- return options;
- },
-
- _buttonOptions: function( position ) {
- return this._buildSimpleOptions( position, "ui-button" );
- },
-
- _checkboxradioOptions: function( position ) {
- return this._buildSimpleOptions( position, "ui-checkboxradio-label" );
- },
-
- _selectmenuOptions: function( position ) {
- var direction = this.options.direction === "vertical";
- return {
- width: direction ? "auto" : false,
- classes: {
- middle: {
- "ui-selectmenu-button-open": "",
- "ui-selectmenu-button-closed": ""
- },
- first: {
- "ui-selectmenu-button-open": "ui-corner-" + ( direction ? "top" : "tl" ),
- "ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "top" : "left" )
- },
- last: {
- "ui-selectmenu-button-open": direction ? "" : "ui-corner-tr",
- "ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "bottom" : "right" )
- },
- only: {
- "ui-selectmenu-button-open": "ui-corner-top",
- "ui-selectmenu-button-closed": "ui-corner-all"
- }
-
- }[ position ]
- };
- },
-
- _resolveClassesValues: function( classes, instance ) {
- var result = {};
- $.each( classes, function( key ) {
- var current = instance.options.classes[ key ] || "";
- current = $.trim( current.replace( controlgroupCornerRegex, "" ) );
- result[ key ] = ( current + " " + classes[ key ] ).replace( /\s+/g, " " );
- } );
- return result;
- },
-
- _setOption: function( key, value ) {
- if ( key === "direction" ) {
- this._removeClass( "ui-controlgroup-" + this.options.direction );
- }
-
- this._super( key, value );
- if ( key === "disabled" ) {
- this._callChildMethod( value ? "disable" : "enable" );
- return;
- }
-
- this.refresh();
- },
-
- refresh: function() {
- var children,
- that = this;
-
- this._addClass( "ui-controlgroup ui-controlgroup-" + this.options.direction );
-
- if ( this.options.direction === "horizontal" ) {
- this._addClass( null, "ui-helper-clearfix" );
- }
- this._initWidgets();
-
- children = this.childWidgets;
-
- // We filter here because we need to track all childWidgets not just the visible ones
- if ( this.options.onlyVisible ) {
- children = children.filter( ":visible" );
- }
-
- if ( children.length ) {
-
- // We do this last because we need to make sure all enhancment is done
- // before determining first and last
- $.each( [ "first", "last" ], function( index, value ) {
- var instance = children[ value ]().data( "ui-controlgroup-data" );
-
- if ( instance && that[ "_" + instance.widgetName + "Options" ] ) {
- var options = that[ "_" + instance.widgetName + "Options" ](
- children.length === 1 ? "only" : value
- );
- options.classes = that._resolveClassesValues( options.classes, instance );
- instance.element[ instance.widgetName ]( options );
- } else {
- that._updateCornerClass( children[ value ](), value );
- }
- } );
-
- // Finally call the refresh method on each of the child widgets.
- this._callChildMethod( "refresh" );
- }
- }
-} );
-
-/*!
- * jQuery UI Checkboxradio 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Checkboxradio
-//>>group: Widgets
-//>>description: Enhances a form with multiple themeable checkboxes or radio buttons.
-//>>docs: http://api.jqueryui.com/checkboxradio/
-//>>demos: http://jqueryui.com/checkboxradio/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/button.css
-//>>css.structure: ../../themes/base/checkboxradio.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-$.widget( "ui.checkboxradio", [ $.ui.formResetMixin, {
- version: "1.12.1",
- options: {
- disabled: null,
- label: null,
- icon: true,
- classes: {
- "ui-checkboxradio-label": "ui-corner-all",
- "ui-checkboxradio-icon": "ui-corner-all"
- }
- },
-
- _getCreateOptions: function() {
- var disabled, labels;
- var that = this;
- var options = this._super() || {};
-
- // We read the type here, because it makes more sense to throw a element type error first,
- // rather then the error for lack of a label. Often if its the wrong type, it
- // won't have a label (e.g. calling on a div, btn, etc)
- this._readType();
-
- labels = this.element.labels();
-
- // If there are multiple labels, use the last one
- this.label = $( labels[ labels.length - 1 ] );
- if ( !this.label.length ) {
- $.error( "No label found for checkboxradio widget" );
- }
-
- this.originalLabel = "";
-
- // We need to get the label text but this may also need to make sure it does not contain the
- // input itself.
- this.label.contents().not( this.element[ 0 ] ).each( function() {
-
- // The label contents could be text, html, or a mix. We concat each element to get a
- // string representation of the label, without the input as part of it.
- that.originalLabel += this.nodeType === 3 ? $( this ).text() : this.outerHTML;
- } );
-
- // Set the label option if we found label text
- if ( this.originalLabel ) {
- options.label = this.originalLabel;
- }
-
- disabled = this.element[ 0 ].disabled;
- if ( disabled != null ) {
- options.disabled = disabled;
- }
- return options;
- },
-
- _create: function() {
- var checked = this.element[ 0 ].checked;
-
- this._bindFormResetHandler();
-
- if ( this.options.disabled == null ) {
- 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" );
-
- if ( this.type === "radio" ) {
- this._addClass( this.label, "ui-checkboxradio-radio-label" );
- }
-
- if ( this.options.label && this.options.label !== this.originalLabel ) {
- this._updateLabel();
- } else if ( this.originalLabel ) {
- this.options.label = this.originalLabel;
- }
-
- this._enhance();
-
- if ( checked ) {
- this._addClass( this.label, "ui-checkboxradio-checked", "ui-state-active" );
- if ( 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 nodeName = this.element[ 0 ].nodeName.toLowerCase();
- this.type = this.element[ 0 ].type;
- if ( nodeName !== "input" || !/radio|checkbox/.test( this.type ) ) {
- $.error( "Can't create checkboxradio on element.nodeName=" + nodeName +
- " and element.type=" + this.type );
- }
- },
-
- // Support jQuery Mobile enhanced option
- _enhance: function() {
- this._updateIcon( this.element[ 0 ].checked );
- },
-
- widget: function() {
- return this.label;
- },
-
- _getRadioGroup: function() {
- var group;
- var name = this.element[ 0 ].name;
- var nameSelector = "input[name='" + $.ui.escapeSelector( name ) + "']";
-
- if ( !name ) {
- return $( [] );
- }
-
- if ( this.form.length ) {
- group = $( this.form[ 0 ].elements ).filter( nameSelector );
- } else {
-
- // Not inside a form, check all inputs that also are not inside a form
- group = $( nameSelector ).filter( function() {
- return $( this ).form().length === 0;
- } );
- }
-
- return group.not( this.element );
- },
-
- _toggleClasses: function() {
- var checked = this.element[ 0 ].checked;
- this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked );
-
- if ( this.options.icon && this.type === "checkbox" ) {
- this._toggleClass( this.icon, null, "ui-icon-check ui-state-checked", checked )
- ._toggleClass( this.icon, null, "ui-icon-blank", !checked );
- }
-
- if ( this.type === "radio" ) {
- this._getRadioGroup()
- .each( function() {
- var instance = $( this ).checkboxradio( "instance" );
-
- if ( instance ) {
- instance._removeClass( instance.label,
- "ui-checkboxradio-checked", "ui-state-active" );
- }
- } );
- }
- },
-
- _destroy: function() {
- this._unbindFormResetHandler();
-
- if ( this.icon ) {
- this.icon.remove();
- this.iconSpace.remove();
- }
- },
-
- _setOption: function( key, value ) {
-
- // We don't allow the value to be set to nothing
- if ( key === "label" && !value ) {
- return;
- }
-
- this._super( key, value );
-
- if ( key === "disabled" ) {
- this._toggleClass( this.label, null, "ui-state-disabled", value );
- this.element[ 0 ].disabled = value;
-
- // Don't refresh when setting disabled
- return;
- }
- this.refresh();
- },
-
- _updateIcon: function( checked ) {
- var toAdd = "ui-icon ui-icon-background ";
-
- if ( this.options.icon ) {
- if ( !this.icon ) {
- this.icon = $( "<span>" );
- this.iconSpace = $( "<span> </span>" );
- this._addClass( this.iconSpace, "ui-checkboxradio-icon-space" );
- }
-
- if ( this.type === "checkbox" ) {
- toAdd += checked ? "ui-icon-check ui-state-checked" : "ui-icon-blank";
- this._removeClass( this.icon, null, checked ? "ui-icon-blank" : "ui-icon-check" );
- } else {
- toAdd += "ui-icon-blank";
- }
- this._addClass( this.icon, "ui-checkboxradio-icon", toAdd );
- if ( !checked ) {
- this._removeClass( this.icon, null, "ui-icon-check ui-state-checked" );
- }
- this.icon.prependTo( this.label ).after( this.iconSpace );
- } else if ( this.icon !== undefined ) {
- this.icon.remove();
- this.iconSpace.remove();
- delete this.icon;
- }
- },
-
- _updateLabel: function() {
-
- // Remove the contents of the label ( minus the icon, icon space, and input )
- var contents = this.label.contents().not( this.element[ 0 ] );
- if ( this.icon ) {
- contents = contents.not( this.icon[ 0 ] );
- }
- if ( this.iconSpace ) {
- contents = contents.not( this.iconSpace[ 0 ] );
- }
- contents.remove();
-
- this.label.append( this.options.label );
- },
-
- refresh: function() {
- var checked = this.element[ 0 ].checked,
- isDisabled = this.element[ 0 ].disabled;
-
- this._updateIcon( checked );
- this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked );
- if ( this.options.label !== null ) {
- this._updateLabel();
- }
-
- if ( isDisabled !== this.options.disabled ) {
- this._setOptions( { "disabled": isDisabled } );
- }
- }
-
-} ] );
-
-var widgetsCheckboxradio = $.ui.checkboxradio;
-
-
-/*!
- * jQuery UI Button 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Button
-//>>group: Widgets
-//>>description: Enhances a form with themeable buttons.
-//>>docs: http://api.jqueryui.com/button/
-//>>demos: http://jqueryui.com/button/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/button.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-$.widget( "ui.button", {
- version: "1.12.1",
- defaultElement: "<button>",
- options: {
- classes: {
- "ui-button": "ui-corner-all"
- },
- disabled: null,
- icon: null,
- iconPosition: "beginning",
- label: null,
- showLabel: true
- },
-
- _getCreateOptions: function() {
- var disabled,
-
- // This is to support cases like in jQuery Mobile where the base widget does have
- // an implementation of _getCreateOptions
- options = this._super() || {};
-
- this.isInput = this.element.is( "input" );
-
- disabled = this.element[ 0 ].disabled;
- if ( disabled != null ) {
- options.disabled = disabled;
- }
-
- this.originalLabel = this.isInput ? this.element.val() : this.element.html();
- if ( this.originalLabel ) {
- options.label = this.originalLabel;
- }
-
- return options;
- },
-
- _create: function() {
- if ( !this.option.showLabel & !this.options.icon ) {
- this.options.showLabel = true;
- }
-
- // We have to check the option again here even though we did in _getCreateOptions,
- // because null may have been passed on init which would override what was set in
- // _getCreateOptions
- if ( this.options.disabled == null ) {
- this.options.disabled = this.element[ 0 ].disabled || false;
- }
-
- this.hasTitle = !!this.element.attr( "title" );
-
- // Check to see if the label needs to be set or if its already correct
- if ( this.options.label && this.options.label !== this.originalLabel ) {
- if ( this.isInput ) {
- this.element.val( this.options.label );
- } else {
- this.element.html( this.options.label );
- }
- }
- this._addClass( "ui-button", "ui-widget" );
- this._setOption( "disabled", this.options.disabled );
- this._enhance();
-
- if ( this.element.is( "a" ) ) {
- this._on( {
- "keyup": function( event ) {
- if ( event.keyCode === $.ui.keyCode.SPACE ) {
- event.preventDefault();
-
- // Support: PhantomJS <= 1.9, IE 8 Only
- // If a native click is available use it so we actually cause navigation
- // otherwise just trigger a click event
- if ( this.element[ 0 ].click ) {
- this.element[ 0 ].click();
- } else {
- this.element.trigger( "click" );
- }
- }
- }
- } );
- }
- },
-
- _enhance: function() {
- if ( !this.element.is( "button" ) ) {
- this.element.attr( "role", "button" );
- }
-
- if ( this.options.icon ) {
- this._updateIcon( "icon", this.options.icon );
- this._updateTooltip();
- }
- },
-
- _updateTooltip: function() {
- this.title = this.element.attr( "title" );
-
- if ( !this.options.showLabel && !this.title ) {
- this.element.attr( "title", this.options.label );
- }
- },
-
- _updateIcon: function( option, value ) {
- var icon = option !== "iconPosition",
- position = icon ? this.options.iconPosition : value,
- displayBlock = position === "top" || position === "bottom";
-
- // Create icon
- if ( !this.icon ) {
- this.icon = $( "<span>" );
-
- this._addClass( this.icon, "ui-button-icon", "ui-icon" );
-
- if ( !this.options.showLabel ) {
- this._addClass( "ui-button-icon-only" );
- }
- } else if ( icon ) {
-
- // If we are updating the icon remove the old icon class
- this._removeClass( this.icon, null, this.options.icon );
- }
-
- // If we are updating the icon add the new icon class
- if ( icon ) {
- this._addClass( this.icon, null, value );
- }
-
- this._attachIcon( position );
-
- // If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove
- // the iconSpace if there is one.
- if ( displayBlock ) {
- this._addClass( this.icon, null, "ui-widget-icon-block" );
- if ( this.iconSpace ) {
- this.iconSpace.remove();
- }
- } else {
-
- // Position is beginning or end so remove the ui-widget-icon-block class and add the
- // space if it does not exist
- if ( !this.iconSpace ) {
- this.iconSpace = $( "<span> </span>" );
- this._addClass( this.iconSpace, "ui-button-icon-space" );
- }
- this._removeClass( this.icon, null, "ui-wiget-icon-block" );
- this._attachIconSpace( position );
- }
- },
-
- _destroy: function() {
- this.element.removeAttr( "role" );
-
- if ( this.icon ) {
- this.icon.remove();
- }
- if ( this.iconSpace ) {
- this.iconSpace.remove();
- }
- if ( !this.hasTitle ) {
- this.element.removeAttr( "title" );
- }
- },
-
- _attachIconSpace: function( iconPosition ) {
- this.icon[ /^(?:end|bottom)/.test( iconPosition ) ? "before" : "after" ]( this.iconSpace );
- },
-
- _attachIcon: function( iconPosition ) {
- this.element[ /^(?:end|bottom)/.test( iconPosition ) ? "append" : "prepend" ]( this.icon );
- },
-
- _setOptions: function( options ) {
- var newShowLabel = options.showLabel === undefined ?
- this.options.showLabel :
- options.showLabel,
- newIcon = options.icon === undefined ? this.options.icon : options.icon;
-
- if ( !newShowLabel && !newIcon ) {
- options.showLabel = true;
- }
- this._super( options );
- },
-
- _setOption: function( key, value ) {
- if ( key === "icon" ) {
- if ( value ) {
- this._updateIcon( key, value );
- } else if ( this.icon ) {
- this.icon.remove();
- if ( this.iconSpace ) {
- this.iconSpace.remove();
- }
- }
- }
-
- if ( key === "iconPosition" ) {
- this._updateIcon( key, value );
- }
-
- // Make sure we can't end up with a button that has neither text nor icon
- if ( key === "showLabel" ) {
- this._toggleClass( "ui-button-icon-only", null, !value );
- this._updateTooltip();
- }
-
- if ( key === "label" ) {
- if ( this.isInput ) {
- this.element.val( value );
- } else {
-
- // If there is an icon, append it, else nothing then append the value
- // this avoids removal of the icon when setting label text
- this.element.html( value );
- if ( this.icon ) {
- this._attachIcon( this.options.iconPosition );
- this._attachIconSpace( this.options.iconPosition );
- }
- }
- }
-
- this._super( key, value );
-
- if ( key === "disabled" ) {
- this._toggleClass( null, "ui-state-disabled", value );
- this.element[ 0 ].disabled = value;
- if ( value ) {
- this.element.blur();
- }
- }
- },
-
- refresh: function() {
-
- // Make sure to only check disabled if its an element that supports this otherwise
- // check for the disabled class to determine state
- var isDisabled = this.element.is( "input, button" ) ?
- this.element[ 0 ].disabled : this.element.hasClass( "ui-button-disabled" );
-
- if ( isDisabled !== this.options.disabled ) {
- this._setOptions( { disabled: isDisabled } );
- }
-
- this._updateTooltip();
- }
-} );
-
-// DEPRECATED
-if ( $.uiBackCompat !== false ) {
-
- // Text and Icons options
- $.widget( "ui.button", $.ui.button, {
- options: {
- text: true,
- icons: {
- primary: null,
- secondary: null
- }
- },
-
- _create: function() {
- if ( this.options.showLabel && !this.options.text ) {
- this.options.showLabel = this.options.text;
- }
- if ( !this.options.showLabel && this.options.text ) {
- this.options.text = this.options.showLabel;
- }
- if ( !this.options.icon && ( this.options.icons.primary ||
- this.options.icons.secondary ) ) {
- if ( this.options.icons.primary ) {
- this.options.icon = this.options.icons.primary;
- } else {
- this.options.icon = this.options.icons.secondary;
- this.options.iconPosition = "end";
- }
- } else if ( this.options.icon ) {
- this.options.icons.primary = this.options.icon;
- }
- this._super();
- },
-
- _setOption: function( key, value ) {
- if ( key === "text" ) {
- this._super( "showLabel", value );
- return;
- }
- if ( key === "showLabel" ) {
- this.options.text = value;
- }
- if ( key === "icon" ) {
- this.options.icons.primary = value;
- }
- if ( key === "icons" ) {
- if ( value.primary ) {
- this._super( "icon", value.primary );
- this._super( "iconPosition", "beginning" );
- } else if ( value.secondary ) {
- this._super( "icon", value.secondary );
- this._super( "iconPosition", "end" );
- }
- }
- this._superApply( arguments );
- }
- } );
-
- $.fn.button = ( function( orig ) {
- return function() {
- if ( !this.length || ( this.length && this[ 0 ].tagName !== "INPUT" ) ||
- ( this.length && this[ 0 ].tagName === "INPUT" && (
- this.attr( "type" ) !== "checkbox" && this.attr( "type" ) !== "radio"
- ) ) ) {
- return orig.apply( this, arguments );
- }
- if ( !$.ui.checkboxradio ) {
- $.error( "Checkboxradio widget missing" );
- }
- if ( arguments.length === 0 ) {
- return this.checkboxradio( {
- "icon": false
- } );
- }
- return this.checkboxradio.apply( this, arguments );
- };
- } )( $.fn.button );
-
- $.fn.buttonset = function() {
- if ( !$.ui.controlgroup ) {
- $.error( "Controlgroup widget missing" );
- }
- if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" && arguments[ 2 ] ) {
- return this.controlgroup.apply( this,
- [ arguments[ 0 ], "items.button", arguments[ 2 ] ] );
- }
- if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" ) {
- return this.controlgroup.apply( this, [ arguments[ 0 ], "items.button" ] );
- }
- if ( typeof arguments[ 0 ] === "object" && arguments[ 0 ].items ) {
- arguments[ 0 ].items = {
- button: arguments[ 0 ].items
- };
- }
- return this.controlgroup.apply( this, arguments );
- };
-}
-
-var widgetsButton = $.ui.button;
-
-
-// jscs:disable maximumLineLength
-/* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
-/*!
- * jQuery UI Datepicker 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Datepicker
-//>>group: Widgets
-//>>description: Displays a calendar from an input or inline for selecting dates.
-//>>docs: http://api.jqueryui.com/datepicker/
-//>>demos: http://jqueryui.com/datepicker/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/datepicker.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-$.extend( $.ui, { datepicker: { version: "1.12.1" } } );
-
-var datepicker_instActive;
-
-function datepicker_getZindex( elem ) {
- var position, value;
- while ( elem.length && elem[ 0 ] !== document ) {
-
- // Ignore z-index if position is set to a value where z-index is ignored by the browser
- // This makes behavior of this function consistent across browsers
- // WebKit always returns auto if the element is positioned
- position = elem.css( "position" );
- if ( position === "absolute" || position === "relative" || position === "fixed" ) {
-
- // IE returns 0 when zIndex is not specified
- // other browsers return a string
- // we ignore the case of nested elements with an explicit value of 0
- // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
- value = parseInt( elem.css( "zIndex" ), 10 );
- if ( !isNaN( value ) && value !== 0 ) {
- return value;
- }
- }
- elem = elem.parent();
- }
-
- return 0;
-}
-/* Date picker manager.
- Use the singleton instance of this class, $.datepicker, to interact with the date picker.
- Settings for (groups of) date pickers are maintained in an instance object,
- allowing multiple different settings on the same page. */
-
-function Datepicker() {
- this._curInst = null; // The current instance in use
- this._keyEvent = false; // If the last event was a key event
- this._disabledInputs = []; // List of date picker inputs that have been disabled
- this._datepickerShowing = false; // True if the popup picker is showing , false if not
- this._inDialog = false; // True if showing within a "dialog", false if not
- this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
- this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
- this._appendClass = "ui-datepicker-append"; // The name of the append marker class
- this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
- this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
- this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
- this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
- this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
- this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
- this.regional = []; // Available regional settings, indexed by language code
- this.regional[ "" ] = { // Default regional settings
- closeText: "Done", // Display text for close link
- prevText: "Prev", // Display text for previous month link
- nextText: "Next", // Display text for next month link
- currentText: "Today", // Display text for current month link
- monthNames: [ "January","February","March","April","May","June",
- "July","August","September","October","November","December" ], // Names of months for drop-down and formatting
- monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], // For formatting
- dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], // For formatting
- dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], // For formatting
- dayNamesMin: [ "Su","Mo","Tu","We","Th","Fr","Sa" ], // Column headings for days starting at Sunday
- weekHeader: "Wk", // Column header for week of the year
- dateFormat: "mm/dd/yy", // See format options on parseDate
- firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
- isRTL: false, // True if right-to-left language, false if left-to-right
- showMonthAfterYear: false, // True if the year select precedes month, false for month then year
- yearSuffix: "" // Additional text to append to the year in the month headers
- };
- this._defaults = { // Global defaults for all the date picker instances
- showOn: "focus", // "focus" for popup on focus,
- // "button" for trigger button, or "both" for either
- showAnim: "fadeIn", // Name of jQuery animation for popup
- showOptions: {}, // Options for enhanced animations
- defaultDate: null, // Used when field is blank: actual date,
- // +/-number for offset from today, null for today
- appendText: "", // Display text following the input box, e.g. showing the format
- buttonText: "...", // Text for trigger button
- buttonImage: "", // URL for trigger button image
- buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
- hideIfNoPrevNext: false, // True to hide next/previous month links
- // if not applicable, false to just disable them
- navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
- gotoCurrent: false, // True if today link goes back to current selection instead
- changeMonth: false, // True if month can be selected directly, false if only prev/next
- changeYear: false, // True if year can be selected directly, false if only prev/next
- yearRange: "c-10:c+10", // Range of years to display in drop-down,
- // either relative to today's year (-nn:+nn), relative to currently displayed year
- // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
- showOtherMonths: false, // True to show dates in other months, false to leave blank
- selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
- showWeek: false, // True to show week of the year, false to not show it
- calculateWeek: this.iso8601Week, // How to calculate the week of the year,
- // takes a Date and returns the number of the week for it
- shortYearCutoff: "+10", // Short year values < this are in the current century,
- // > this are in the previous century,
- // string value starting with "+" for current year + value
- minDate: null, // The earliest selectable date, or null for no limit
- maxDate: null, // The latest selectable date, or null for no limit
- duration: "fast", // Duration of display/closure
- beforeShowDay: null, // Function that takes a date and returns an array with
- // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
- // [2] = cell title (optional), e.g. $.datepicker.noWeekends
- beforeShow: null, // Function that takes an input field and
- // returns a set of custom settings for the date picker
- onSelect: null, // Define a callback function when a date is selected
- onChangeMonthYear: null, // Define a callback function when the month or year is changed
- onClose: null, // Define a callback function when the datepicker is closed
- numberOfMonths: 1, // Number of months to show at a time
- showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
- stepMonths: 1, // Number of months to step back/forward
- stepBigMonths: 12, // Number of months to step back/forward for the big links
- altField: "", // Selector for an alternate field to store selected dates into
- altFormat: "", // The date format to use for the alternate field
- constrainInput: true, // The input is constrained by the current date format
- showButtonPanel: false, // True to show button panel, false to not show it
- autoSize: false, // True to size the input for the date format, false to leave as is
- disabled: false // The initial disabled state
- };
- $.extend( this._defaults, this.regional[ "" ] );
- this.regional.en = $.extend( true, {}, this.regional[ "" ] );
- this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en );
- this.dpDiv = datepicker_bindHover( $( "<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) );
-}
-
-$.extend( Datepicker.prototype, {
- /* Class name added to elements to indicate already configured with a date picker. */
- markerClassName: "hasDatepicker",
-
- //Keep track of the maximum number of rows displayed (see #7043)
- maxRows: 4,
-
- // TODO rename to "widget" when switching to widget factory
- _widgetDatepicker: function() {
- return this.dpDiv;
- },
-
- /* Override the default settings for all instances of the date picker.
- * @param settings object - the new settings to use as defaults (anonymous object)
- * @return the manager object
- */
- setDefaults: function( settings ) {
- datepicker_extendRemove( this._defaults, settings || {} );
- return this;
- },
-
- /* Attach the date picker to a jQuery selection.
- * @param target element - the target input field or division or span
- * @param settings object - the new settings to use for this date picker instance (anonymous)
- */
- _attachDatepicker: function( target, settings ) {
- var nodeName, inline, inst;
- nodeName = target.nodeName.toLowerCase();
- inline = ( nodeName === "div" || nodeName === "span" );
- if ( !target.id ) {
- this.uuid += 1;
- target.id = "dp" + this.uuid;
- }
- inst = this._newInst( $( target ), inline );
- inst.settings = $.extend( {}, settings || {} );
- if ( nodeName === "input" ) {
- this._connectDatepicker( target, inst );
- } else if ( inline ) {
- this._inlineDatepicker( target, inst );
- }
- },
-
- /* Create a new instance object. */
- _newInst: function( target, inline ) {
- var id = target[ 0 ].id.replace( /([^A-Za-z0-9_\-])/g, "\\\\$1" ); // escape jQuery meta chars
- return { id: id, input: target, // associated target
- selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
- drawMonth: 0, drawYear: 0, // month being drawn
- inline: inline, // is datepicker inline or not
- dpDiv: ( !inline ? this.dpDiv : // presentation div
- datepicker_bindHover( $( "<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ) ) };
- },
-
- /* Attach the date picker to an input field. */
- _connectDatepicker: function( target, inst ) {
- var input = $( target );
- inst.append = $( [] );
- inst.trigger = $( [] );
- if ( input.hasClass( this.markerClassName ) ) {
- return;
- }
- this._attachments( input, inst );
- input.addClass( this.markerClassName ).on( "keydown", this._doKeyDown ).
- on( "keypress", this._doKeyPress ).on( "keyup", this._doKeyUp );
- this._autoSize( inst );
- $.data( target, "datepicker", inst );
-
- //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
- if ( inst.settings.disabled ) {
- this._disableDatepicker( target );
- }
- },
-
- /* Make attachments based on settings. */
- _attachments: function( input, inst ) {
- var showOn, buttonText, buttonImage,
- appendText = this._get( inst, "appendText" ),
- isRTL = this._get( inst, "isRTL" );
-
- if ( inst.append ) {
- inst.append.remove();
- }
- if ( appendText ) {
- inst.append = $( "<span class='" + this._appendClass + "'>" + appendText + "</span>" );
- input[ isRTL ? "before" : "after" ]( inst.append );
- }
-
- input.off( "focus", this._showDatepicker );
-
- if ( inst.trigger ) {
- inst.trigger.remove();
- }
-
- showOn = this._get( inst, "showOn" );
- if ( showOn === "focus" || showOn === "both" ) { // pop-up date picker when in the marked field
- input.on( "focus", this._showDatepicker );
- }
- if ( showOn === "button" || showOn === "both" ) { // pop-up date picker when button clicked
- buttonText = this._get( inst, "buttonText" );
- buttonImage = this._get( inst, "buttonImage" );
- inst.trigger = $( this._get( inst, "buttonImageOnly" ) ?
- $( "<img/>" ).addClass( this._triggerClass ).
- attr( { src: buttonImage, alt: buttonText, title: buttonText } ) :
- $( "<button type='button'></button>" ).addClass( this._triggerClass ).
- html( !buttonImage ? buttonText : $( "<img/>" ).attr(
- { src:buttonImage, alt:buttonText, title:buttonText } ) ) );
- input[ isRTL ? "before" : "after" ]( inst.trigger );
- inst.trigger.on( "click", function() {
- if ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {
- $.datepicker._hideDatepicker();
- } else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {
- $.datepicker._hideDatepicker();
- $.datepicker._showDatepicker( input[ 0 ] );
- } else {
- $.datepicker._showDatepicker( input[ 0 ] );
- }
- return false;
- } );
- }
- },
-
- /* Apply the maximum length for the date format. */
- _autoSize: function( inst ) {
- if ( this._get( inst, "autoSize" ) && !inst.inline ) {
- var findMax, max, maxI, i,
- date = new Date( 2009, 12 - 1, 20 ), // Ensure double digits
- dateFormat = this._get( inst, "dateFormat" );
-
- if ( dateFormat.match( /[DM]/ ) ) {
- findMax = function( names ) {
- max = 0;
- maxI = 0;
- for ( i = 0; i < names.length; i++ ) {
- if ( names[ i ].length > max ) {
- max = names[ i ].length;
- maxI = i;
- }
- }
- return maxI;
- };
- date.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?
- "monthNames" : "monthNamesShort" ) ) ) );
- date.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?
- "dayNames" : "dayNamesShort" ) ) ) + 20 - date.getDay() );
- }
- inst.input.attr( "size", this._formatDate( inst, date ).length );
- }
- },
-
- /* Attach an inline date picker to a div. */
- _inlineDatepicker: function( target, inst ) {
- var divSpan = $( target );
- if ( divSpan.hasClass( this.markerClassName ) ) {
- return;
- }
- divSpan.addClass( this.markerClassName ).append( inst.dpDiv );
- $.data( target, "datepicker", inst );
- this._setDate( inst, this._getDefaultDate( inst ), true );
- this._updateDatepicker( inst );
- this._updateAlternate( inst );
-
- //If disabled option is true, disable the datepicker before showing it (see ticket #5665)
- if ( inst.settings.disabled ) {
- this._disableDatepicker( target );
- }
-
- // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
- // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
- inst.dpDiv.css( "display", "block" );
- },
-
- /* Pop-up the date picker in a "dialog" box.
- * @param input element - ignored
- * @param date string or Date - the initial date to display
- * @param onSelect function - the function to call when a date is selected
- * @param settings object - update the dialog date picker instance's settings (anonymous object)
- * @param pos int[2] - coordinates for the dialog's position within the screen or
- * event - with x/y coordinates or
- * leave empty for default (screen centre)
- * @return the manager object
- */
- _dialogDatepicker: function( input, date, onSelect, settings, pos ) {
- var id, browserWidth, browserHeight, scrollX, scrollY,
- inst = this._dialogInst; // internal instance
-
- if ( !inst ) {
- this.uuid += 1;
- id = "dp" + this.uuid;
- this._dialogInput = $( "<input type='text' id='" + id +
- "' style='position: absolute; top: -100px; width: 0px;'/>" );
- this._dialogInput.on( "keydown", this._doKeyDown );
- $( "body" ).append( this._dialogInput );
- inst = this._dialogInst = this._newInst( this._dialogInput, false );
- inst.settings = {};
- $.data( this._dialogInput[ 0 ], "datepicker", inst );
- }
- datepicker_extendRemove( inst.settings, settings || {} );
- date = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );
- this._dialogInput.val( date );
-
- this._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );
- if ( !this._pos ) {
- browserWidth = document.documentElement.clientWidth;
- browserHeight = document.documentElement.clientHeight;
- scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
- scrollY = document.documentElement.scrollTop || document.body.scrollTop;
- this._pos = // should use actual width/height below
- [ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];
- }
-
- // Move input on screen for focus, but hidden behind dialog
- this._dialogInput.css( "left", ( this._pos[ 0 ] + 20 ) + "px" ).css( "top", this._pos[ 1 ] + "px" );
- inst.settings.onSelect = onSelect;
- this._inDialog = true;
- this.dpDiv.addClass( this._dialogClass );
- this._showDatepicker( this._dialogInput[ 0 ] );
- if ( $.blockUI ) {
- $.blockUI( this.dpDiv );
- }
- $.data( this._dialogInput[ 0 ], "datepicker", inst );
- return this;
- },
-
- /* Detach a datepicker from its control.
- * @param target element - the target input field or division or span
- */
- _destroyDatepicker: function( target ) {
- var nodeName,
- $target = $( target ),
- inst = $.data( target, "datepicker" );
-
- if ( !$target.hasClass( this.markerClassName ) ) {
- return;
- }
-
- nodeName = target.nodeName.toLowerCase();
- $.removeData( target, "datepicker" );
- if ( nodeName === "input" ) {
- inst.append.remove();
- inst.trigger.remove();
- $target.removeClass( this.markerClassName ).
- off( "focus", this._showDatepicker ).
- off( "keydown", this._doKeyDown ).
- off( "keypress", this._doKeyPress ).
- off( "keyup", this._doKeyUp );
- } else if ( nodeName === "div" || nodeName === "span" ) {
- $target.removeClass( this.markerClassName ).empty();
- }
-
- if ( datepicker_instActive === inst ) {
- datepicker_instActive = null;
- }
- },
-
- /* Enable the date picker to a jQuery selection.
- * @param target element - the target input field or division or span
- */
- _enableDatepicker: function( target ) {
- var nodeName, inline,
- $target = $( target ),
- inst = $.data( target, "datepicker" );
-
- if ( !$target.hasClass( this.markerClassName ) ) {
- return;
- }
-
- nodeName = target.nodeName.toLowerCase();
- if ( nodeName === "input" ) {
- target.disabled = false;
- inst.trigger.filter( "button" ).
- each( function() { this.disabled = false; } ).end().
- filter( "img" ).css( { opacity: "1.0", cursor: "" } );
- } else if ( nodeName === "div" || nodeName === "span" ) {
- inline = $target.children( "." + this._inlineClass );
- inline.children().removeClass( "ui-state-disabled" );
- inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ).
- prop( "disabled", false );
- }
- this._disabledInputs = $.map( this._disabledInputs,
- function( value ) { return ( value === target ? null : value ); } ); // delete entry
- },
-
- /* Disable the date picker to a jQuery selection.
- * @param target element - the target input field or division or span
- */
- _disableDatepicker: function( target ) {
- var nodeName, inline,
- $target = $( target ),
- inst = $.data( target, "datepicker" );
-
- if ( !$target.hasClass( this.markerClassName ) ) {
- return;
- }
-
- nodeName = target.nodeName.toLowerCase();
- if ( nodeName === "input" ) {
- target.disabled = true;
- inst.trigger.filter( "button" ).
- each( function() { this.disabled = true; } ).end().
- filter( "img" ).css( { opacity: "0.5", cursor: "default" } );
- } else if ( nodeName === "div" || nodeName === "span" ) {
- inline = $target.children( "." + this._inlineClass );
- inline.children().addClass( "ui-state-disabled" );
- inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ).
- prop( "disabled", true );
- }
- this._disabledInputs = $.map( this._disabledInputs,
- function( value ) { return ( value === target ? null : value ); } ); // delete entry
- this._disabledInputs[ this._disabledInputs.length ] = target;
- },
-
- /* Is the first field in a jQuery collection disabled as a datepicker?
- * @param target element - the target input field or division or span
- * @return boolean - true if disabled, false if enabled
- */
- _isDisabledDatepicker: function( target ) {
- if ( !target ) {
- return false;
- }
- for ( var i = 0; i < this._disabledInputs.length; i++ ) {
- if ( this._disabledInputs[ i ] === target ) {
- return true;
- }
- }
- return false;
- },
-
- /* Retrieve the instance data for the target control.
- * @param target element - the target input field or division or span
- * @return object - the associated instance data
- * @throws error if a jQuery problem getting data
- */
- _getInst: function( target ) {
- try {
- return $.data( target, "datepicker" );
- }
- catch ( err ) {
- throw "Missing instance data for this datepicker";
- }
- },
-
- /* Update or retrieve the settings for a date picker attached to an input field or division.
- * @param target element - the target input field or division or span
- * @param name object - the new settings to update or
- * string - the name of the setting to change or retrieve,
- * when retrieving also "all" for all instance settings or
- * "defaults" for all global defaults
- * @param value any - the new value for the setting
- * (omit if above is an object or to retrieve a value)
- */
- _optionDatepicker: function( target, name, value ) {
- var settings, date, minDate, maxDate,
- inst = this._getInst( target );
-
- if ( arguments.length === 2 && typeof name === "string" ) {
- return ( name === "defaults" ? $.extend( {}, $.datepicker._defaults ) :
- ( inst ? ( name === "all" ? $.extend( {}, inst.settings ) :
- this._get( inst, name ) ) : null ) );
- }
-
- settings = name || {};
- if ( typeof name === "string" ) {
- settings = {};
- settings[ name ] = value;
- }
-
- if ( inst ) {
- if ( this._curInst === inst ) {
- this._hideDatepicker();
- }
-
- date = this._getDateDatepicker( target, true );
- minDate = this._getMinMaxDate( inst, "min" );
- maxDate = this._getMinMaxDate( inst, "max" );
- datepicker_extendRemove( inst.settings, settings );
-
- // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
- if ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {
- inst.settings.minDate = this._formatDate( inst, minDate );
- }
- if ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {
- inst.settings.maxDate = this._formatDate( inst, maxDate );
- }
- if ( "disabled" in settings ) {
- if ( settings.disabled ) {
- this._disableDatepicker( target );
- } else {
- this._enableDatepicker( target );
- }
- }
- this._attachments( $( target ), inst );
- this._autoSize( inst );
- this._setDate( inst, date );
- this._updateAlternate( inst );
- this._updateDatepicker( inst );
- }
- },
-
- // Change method deprecated
- _changeDatepicker: function( target, name, value ) {
- this._optionDatepicker( target, name, value );
- },
-
- /* Redraw the date picker attached to an input field or division.
- * @param target element - the target input field or division or span
- */
- _refreshDatepicker: function( target ) {
- var inst = this._getInst( target );
- if ( inst ) {
- this._updateDatepicker( inst );
- }
- },
-
- /* Set the dates for a jQuery selection.
- * @param target element - the target input field or division or span
- * @param date Date - the new date
- */
- _setDateDatepicker: function( target, date ) {
- var inst = this._getInst( target );
- if ( inst ) {
- this._setDate( inst, date );
- this._updateDatepicker( inst );
- this._updateAlternate( inst );
- }
- },
-
- /* Get the date(s) for the first entry in a jQuery selection.
- * @param target element - the target input field or division or span
- * @param noDefault boolean - true if no default date is to be used
- * @return Date - the current date
- */
- _getDateDatepicker: function( target, noDefault ) {
- var inst = this._getInst( target );
- if ( inst && !inst.inline ) {
- this._setDateFromField( inst, noDefault );
- }
- return ( inst ? this._getDate( inst ) : null );
- },
-
- /* Handle keystrokes. */
- _doKeyDown: function( event ) {
- var onSelect, dateStr, sel,
- inst = $.datepicker._getInst( event.target ),
- handled = true,
- isRTL = inst.dpDiv.is( ".ui-datepicker-rtl" );
-
- inst._keyEvent = true;
- if ( $.datepicker._datepickerShowing ) {
- switch ( event.keyCode ) {
- case 9: $.datepicker._hideDatepicker();
- handled = false;
- break; // hide on tab out
- case 13: sel = $( "td." + $.datepicker._dayOverClass + ":not(." +
- $.datepicker._currentClass + ")", inst.dpDiv );
- if ( sel[ 0 ] ) {
- $.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );
- }
-
- onSelect = $.datepicker._get( inst, "onSelect" );
- if ( onSelect ) {
- dateStr = $.datepicker._formatDate( inst );
-
- // Trigger custom callback
- onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );
- } else {
- $.datepicker._hideDatepicker();
- }
-
- return false; // don't submit the form
- case 27: $.datepicker._hideDatepicker();
- break; // hide on escape
- case 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
- -$.datepicker._get( inst, "stepBigMonths" ) :
- -$.datepicker._get( inst, "stepMonths" ) ), "M" );
- break; // previous month/year on page up/+ ctrl
- case 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
- +$.datepicker._get( inst, "stepBigMonths" ) :
- +$.datepicker._get( inst, "stepMonths" ) ), "M" );
- break; // next month/year on page down/+ ctrl
- case 35: if ( event.ctrlKey || event.metaKey ) {
- $.datepicker._clearDate( event.target );
- }
- handled = event.ctrlKey || event.metaKey;
- break; // clear on ctrl or command +end
- case 36: if ( event.ctrlKey || event.metaKey ) {
- $.datepicker._gotoToday( event.target );
- }
- handled = event.ctrlKey || event.metaKey;
- break; // current on ctrl or command +home
- case 37: if ( event.ctrlKey || event.metaKey ) {
- $.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), "D" );
- }
- handled = event.ctrlKey || event.metaKey;
-
- // -1 day on ctrl or command +left
- if ( event.originalEvent.altKey ) {
- $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
- -$.datepicker._get( inst, "stepBigMonths" ) :
- -$.datepicker._get( inst, "stepMonths" ) ), "M" );
- }
-
- // next month/year on alt +left on Mac
- break;
- case 38: if ( event.ctrlKey || event.metaKey ) {
- $.datepicker._adjustDate( event.target, -7, "D" );
- }
- handled = event.ctrlKey || event.metaKey;
- break; // -1 week on ctrl or command +up
- case 39: if ( event.ctrlKey || event.metaKey ) {
- $.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), "D" );
- }
- handled = event.ctrlKey || event.metaKey;
-
- // +1 day on ctrl or command +right
- if ( event.originalEvent.altKey ) {
- $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
- +$.datepicker._get( inst, "stepBigMonths" ) :
- +$.datepicker._get( inst, "stepMonths" ) ), "M" );
- }
-
- // next month/year on alt +right
- break;
- case 40: if ( event.ctrlKey || event.metaKey ) {
- $.datepicker._adjustDate( event.target, +7, "D" );
- }
- handled = event.ctrlKey || event.metaKey;
- break; // +1 week on ctrl or command +down
- default: handled = false;
- }
- } else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home
- $.datepicker._showDatepicker( this );
- } else {
- handled = false;
- }
-
- if ( handled ) {
- event.preventDefault();
- event.stopPropagation();
- }
- },
-
- /* Filter entered characters - based on date format. */
- _doKeyPress: function( event ) {
- var chars, chr,
- inst = $.datepicker._getInst( event.target );
-
- if ( $.datepicker._get( inst, "constrainInput" ) ) {
- chars = $.datepicker._possibleChars( $.datepicker._get( inst, "dateFormat" ) );
- chr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );
- return event.ctrlKey || event.metaKey || ( chr < " " || !chars || chars.indexOf( chr ) > -1 );
- }
- },
-
- /* Synchronise manual entry and field/alternate field. */
- _doKeyUp: function( event ) {
- var date,
- inst = $.datepicker._getInst( event.target );
-
- if ( inst.input.val() !== inst.lastVal ) {
- try {
- date = $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ),
- ( inst.input ? inst.input.val() : null ),
- $.datepicker._getFormatConfig( inst ) );
-
- if ( date ) { // only if valid
- $.datepicker._setDateFromField( inst );
- $.datepicker._updateAlternate( inst );
- $.datepicker._updateDatepicker( inst );
- }
- }
- catch ( err ) {
- }
- }
- return true;
- },
-
- /* Pop-up the date picker for a given input field.
- * If false returned from beforeShow event handler do not show.
- * @param input element - the input field attached to the date picker or
- * event - if triggered by focus
- */
- _showDatepicker: function( input ) {
- input = input.target || input;
- if ( input.nodeName.toLowerCase() !== "input" ) { // find from button/image trigger
- input = $( "input", input.parentNode )[ 0 ];
- }
-
- if ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here
- return;
- }
-
- var inst, beforeShow, beforeShowSettings, isFixed,
- offset, showAnim, duration;
-
- inst = $.datepicker._getInst( input );
- if ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {
- $.datepicker._curInst.dpDiv.stop( true, true );
- if ( inst && $.datepicker._datepickerShowing ) {
- $.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );
- }
- }
-
- beforeShow = $.datepicker._get( inst, "beforeShow" );
- beforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};
- if ( beforeShowSettings === false ) {
- return;
- }
- datepicker_extendRemove( inst.settings, beforeShowSettings );
-
- inst.lastVal = null;
- $.datepicker._lastInput = input;
- $.datepicker._setDateFromField( inst );
-
- if ( $.datepicker._inDialog ) { // hide cursor
- input.value = "";
- }
- if ( !$.datepicker._pos ) { // position below input
- $.datepicker._pos = $.datepicker._findPos( input );
- $.datepicker._pos[ 1 ] += input.offsetHeight; // add the height
- }
-
- isFixed = false;
- $( input ).parents().each( function() {
- isFixed |= $( this ).css( "position" ) === "fixed";
- return !isFixed;
- } );
-
- offset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };
- $.datepicker._pos = null;
-
- //to avoid flashes on Firefox
- inst.dpDiv.empty();
-
- // determine sizing offscreen
- inst.dpDiv.css( { position: "absolute", display: "block", top: "-1000px" } );
- $.datepicker._updateDatepicker( inst );
-
- // fix width for dynamic number of date pickers
- // and adjust position before showing
- offset = $.datepicker._checkOffset( inst, offset, isFixed );
- inst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?
- "static" : ( isFixed ? "fixed" : "absolute" ) ), display: "none",
- left: offset.left + "px", top: offset.top + "px" } );
-
- if ( !inst.inline ) {
- showAnim = $.datepicker._get( inst, "showAnim" );
- duration = $.datepicker._get( inst, "duration" );
- inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 );
- $.datepicker._datepickerShowing = true;
-
- if ( $.effects && $.effects.effect[ showAnim ] ) {
- inst.dpDiv.show( showAnim, $.datepicker._get( inst, "showOptions" ), duration );
- } else {
- inst.dpDiv[ showAnim || "show" ]( showAnim ? duration : null );
- }
-
- if ( $.datepicker._shouldFocusInput( inst ) ) {
- inst.input.trigger( "focus" );
- }
-
- $.datepicker._curInst = inst;
- }
- },
-
- /* Generate the date picker content. */
- _updateDatepicker: function( inst ) {
- this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
- datepicker_instActive = inst; // for delegate hover events
- inst.dpDiv.empty().append( this._generateHTML( inst ) );
- this._attachHandlers( inst );
-
- var origyearshtml,
- numMonths = this._getNumberOfMonths( inst ),
- cols = numMonths[ 1 ],
- width = 17,
- activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );
-
- if ( activeCell.length > 0 ) {
- datepicker_handleMouseover.apply( activeCell.get( 0 ) );
- }
-
- inst.dpDiv.removeClass( "ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4" ).width( "" );
- if ( cols > 1 ) {
- inst.dpDiv.addClass( "ui-datepicker-multi-" + cols ).css( "width", ( width * cols ) + "em" );
- }
- inst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? "add" : "remove" ) +
- "Class" ]( "ui-datepicker-multi" );
- inst.dpDiv[ ( this._get( inst, "isRTL" ) ? "add" : "remove" ) +
- "Class" ]( "ui-datepicker-rtl" );
-
- if ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
- inst.input.trigger( "focus" );
- }
-
- // Deffered render of the years select (to avoid flashes on Firefox)
- if ( inst.yearshtml ) {
- origyearshtml = inst.yearshtml;
- setTimeout( function() {
-
- //assure that inst.yearshtml didn't change.
- if ( origyearshtml === inst.yearshtml && inst.yearshtml ) {
- inst.dpDiv.find( "select.ui-datepicker-year:first" ).replaceWith( inst.yearshtml );
- }
- origyearshtml = inst.yearshtml = null;
- }, 0 );
- }
- },
-
- // #6694 - don't focus the input if it's already focused
- // this breaks the change event in IE
- // Support: IE and jQuery <1.9
- _shouldFocusInput: function( inst ) {
- return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
- },
-
- /* Check positioning to remain on screen. */
- _checkOffset: function( inst, offset, isFixed ) {
- var dpWidth = inst.dpDiv.outerWidth(),
- dpHeight = inst.dpDiv.outerHeight(),
- inputWidth = inst.input ? inst.input.outerWidth() : 0,
- inputHeight = inst.input ? inst.input.outerHeight() : 0,
- viewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),
- viewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );
-
- offset.left -= ( this._get( inst, "isRTL" ) ? ( dpWidth - inputWidth ) : 0 );
- offset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;
- offset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;
-
- // Now check if datepicker is showing outside window viewport - move to a better place if so.
- offset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?
- Math.abs( offset.left + dpWidth - viewWidth ) : 0 );
- offset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?
- Math.abs( dpHeight + inputHeight ) : 0 );
-
- return offset;
- },
-
- /* Find an object's position on the screen. */
- _findPos: function( obj ) {
- var position,
- inst = this._getInst( obj ),
- isRTL = this._get( inst, "isRTL" );
-
- while ( obj && ( obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden( obj ) ) ) {
- obj = obj[ isRTL ? "previousSibling" : "nextSibling" ];
- }
-
- position = $( obj ).offset();
- return [ position.left, position.top ];
- },
-
- /* Hide the date picker from view.
- * @param input element - the input field attached to the date picker
- */
- _hideDatepicker: function( input ) {
- var showAnim, duration, postProcess, onClose,
- inst = this._curInst;
-
- if ( !inst || ( input && inst !== $.data( input, "datepicker" ) ) ) {
- return;
- }
-
- if ( this._datepickerShowing ) {
- showAnim = this._get( inst, "showAnim" );
- duration = this._get( inst, "duration" );
- postProcess = function() {
- $.datepicker._tidyDialog( inst );
- };
-
- // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
- if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
- inst.dpDiv.hide( showAnim, $.datepicker._get( inst, "showOptions" ), duration, postProcess );
- } else {
- inst.dpDiv[ ( showAnim === "slideDown" ? "slideUp" :
- ( showAnim === "fadeIn" ? "fadeOut" : "hide" ) ) ]( ( showAnim ? duration : null ), postProcess );
- }
-
- if ( !showAnim ) {
- postProcess();
- }
- this._datepickerShowing = false;
-
- onClose = this._get( inst, "onClose" );
- if ( onClose ) {
- onClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : "" ), inst ] );
- }
-
- this._lastInput = null;
- if ( this._inDialog ) {
- this._dialogInput.css( { position: "absolute", left: "0", top: "-100px" } );
- if ( $.blockUI ) {
- $.unblockUI();
- $( "body" ).append( this.dpDiv );
- }
- }
- this._inDialog = false;
- }
- },
-
- /* Tidy up after a dialog display. */
- _tidyDialog: function( inst ) {
- inst.dpDiv.removeClass( this._dialogClass ).off( ".ui-datepicker-calendar" );
- },
-
- /* Close date picker if clicked elsewhere. */
- _checkExternalClick: function( event ) {
- if ( !$.datepicker._curInst ) {
- return;
- }
-
- var $target = $( event.target ),
- inst = $.datepicker._getInst( $target[ 0 ] );
-
- if ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&
- $target.parents( "#" + $.datepicker._mainDivId ).length === 0 &&
- !$target.hasClass( $.datepicker.markerClassName ) &&
- !$target.closest( "." + $.datepicker._triggerClass ).length &&
- $.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||
- ( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {
- $.datepicker._hideDatepicker();
- }
- },
-
- /* Adjust one of the date sub-fields. */
- _adjustDate: function( id, offset, period ) {
- var target = $( id ),
- inst = this._getInst( target[ 0 ] );
-
- if ( this._isDisabledDatepicker( target[ 0 ] ) ) {
- return;
- }
- this._adjustInstDate( inst, offset +
- ( period === "M" ? this._get( inst, "showCurrentAtPos" ) : 0 ), // undo positioning
- period );
- this._updateDatepicker( inst );
- },
-
- /* Action for current link. */
- _gotoToday: function( id ) {
- var date,
- target = $( id ),
- inst = this._getInst( target[ 0 ] );
-
- if ( this._get( inst, "gotoCurrent" ) && inst.currentDay ) {
- inst.selectedDay = inst.currentDay;
- inst.drawMonth = inst.selectedMonth = inst.currentMonth;
- inst.drawYear = inst.selectedYear = inst.currentYear;
- } else {
- date = new Date();
- inst.selectedDay = date.getDate();
- inst.drawMonth = inst.selectedMonth = date.getMonth();
- inst.drawYear = inst.selectedYear = date.getFullYear();
- }
- this._notifyChange( inst );
- this._adjustDate( target );
- },
-
- /* Action for selecting a new month/year. */
- _selectMonthYear: function( id, select, period ) {
- var target = $( id ),
- inst = this._getInst( target[ 0 ] );
-
- inst[ "selected" + ( period === "M" ? "Month" : "Year" ) ] =
- inst[ "draw" + ( period === "M" ? "Month" : "Year" ) ] =
- parseInt( select.options[ select.selectedIndex ].value, 10 );
-
- this._notifyChange( inst );
- this._adjustDate( target );
- },
-
- /* Action for selecting a day. */
- _selectDay: function( id, month, year, td ) {
- var inst,
- target = $( id );
-
- if ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {
- return;
- }
-
- inst = this._getInst( target[ 0 ] );
- inst.selectedDay = inst.currentDay = $( "a", td ).html();
- inst.selectedMonth = inst.currentMonth = month;
- inst.selectedYear = inst.currentYear = year;
- this._selectDate( id, this._formatDate( inst,
- inst.currentDay, inst.currentMonth, inst.currentYear ) );
- },
-
- /* Erase the input field and hide the date picker. */
- _clearDate: function( id ) {
- var target = $( id );
- this._selectDate( target, "" );
- },
-
- /* Update the input field with the selected date. */
- _selectDate: function( id, dateStr ) {
- var onSelect,
- target = $( id ),
- inst = this._getInst( target[ 0 ] );
-
- dateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );
- if ( inst.input ) {
- inst.input.val( dateStr );
- }
- this._updateAlternate( inst );
-
- onSelect = this._get( inst, "onSelect" );
- if ( onSelect ) {
- onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); // trigger custom callback
- } else if ( inst.input ) {
- inst.input.trigger( "change" ); // fire the change event
- }
-
- if ( inst.inline ) {
- this._updateDatepicker( inst );
- } else {
- this._hideDatepicker();
- this._lastInput = inst.input[ 0 ];
- if ( typeof( inst.input[ 0 ] ) !== "object" ) {
- inst.input.trigger( "focus" ); // restore focus
- }
- this._lastInput = null;
- }
- },
-
- /* Update any alternate field to synchronise with the main field. */
- _updateAlternate: function( inst ) {
- var altFormat, date, dateStr,
- altField = this._get( inst, "altField" );
-
- if ( altField ) { // update alternate field too
- altFormat = this._get( inst, "altFormat" ) || this._get( inst, "dateFormat" );
- date = this._getDate( inst );
- dateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );
- $( altField ).val( dateStr );
- }
- },
-
- /* Set as beforeShowDay function to prevent selection of weekends.
- * @param date Date - the date to customise
- * @return [boolean, string] - is this date selectable?, what is its CSS class?
- */
- noWeekends: function( date ) {
- var day = date.getDay();
- return [ ( day > 0 && day < 6 ), "" ];
- },
-
- /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
- * @param date Date - the date to get the week for
- * @return number - the number of the week within the year that contains this date
- */
- iso8601Week: function( date ) {
- var time,
- checkDate = new Date( date.getTime() );
-
- // Find Thursday of this week starting on Monday
- checkDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );
-
- time = checkDate.getTime();
- checkDate.setMonth( 0 ); // Compare with Jan 1
- checkDate.setDate( 1 );
- return Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;
- },
-
- /* Parse a string value into a date object.
- * See formatDate below for the possible formats.
- *
- * @param format string - the expected format of the date
- * @param value string - the date in the above format
- * @param settings Object - attributes include:
- * shortYearCutoff number - the cutoff year for determining the century (optional)
- * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
- * dayNames string[7] - names of the days from Sunday (optional)
- * monthNamesShort string[12] - abbreviated names of the months (optional)
- * monthNames string[12] - names of the months (optional)
- * @return Date - the extracted date value or null if value is blank
- */
- parseDate: function( format, value, settings ) {
- if ( format == null || value == null ) {
- throw "Invalid arguments";
- }
-
- value = ( typeof value === "object" ? value.toString() : value + "" );
- if ( value === "" ) {
- return null;
- }
-
- var iFormat, dim, extra,
- iValue = 0,
- shortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,
- shortYearCutoff = ( typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
- new Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),
- dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,
- dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,
- monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,
- monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,
- year = -1,
- month = -1,
- day = -1,
- doy = -1,
- literal = false,
- date,
-
- // Check whether a format character is doubled
- lookAhead = function( match ) {
- var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );
- if ( matches ) {
- iFormat++;
- }
- return matches;
- },
-
- // Extract a number from the string value
- getNumber = function( match ) {
- var isDoubled = lookAhead( match ),
- size = ( match === "@" ? 14 : ( match === "!" ? 20 :
- ( match === "y" && isDoubled ? 4 : ( match === "o" ? 3 : 2 ) ) ) ),
- minSize = ( match === "y" ? size : 1 ),
- digits = new RegExp( "^\\d{" + minSize + "," + size + "}" ),
- num = value.substring( iValue ).match( digits );
- if ( !num ) {
- throw "Missing number at position " + iValue;
- }
- iValue += num[ 0 ].length;
- return parseInt( num[ 0 ], 10 );
- },
-
- // Extract a name from the string value and convert to an index
- getName = function( match, shortNames, longNames ) {
- var index = -1,
- names = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {
- return [ [ k, v ] ];
- } ).sort( function( a, b ) {
- return -( a[ 1 ].length - b[ 1 ].length );
- } );
-
- $.each( names, function( i, pair ) {
- var name = pair[ 1 ];
- if ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {
- index = pair[ 0 ];
- iValue += name.length;
- return false;
- }
- } );
- if ( index !== -1 ) {
- return index + 1;
- } else {
- throw "Unknown name at position " + iValue;
- }
- },
-
- // Confirm that a literal character matches the string value
- checkLiteral = function() {
- if ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {
- throw "Unexpected literal at position " + iValue;
- }
- iValue++;
- };
-
- for ( iFormat = 0; iFormat < format.length; iFormat++ ) {
- if ( literal ) {
- if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) {
- literal = false;
- } else {
- checkLiteral();
- }
- } else {
- switch ( format.charAt( iFormat ) ) {
- case "d":
- day = getNumber( "d" );
- break;
- case "D":
- getName( "D", dayNamesShort, dayNames );
- break;
- case "o":
- doy = getNumber( "o" );
- break;
- case "m":
- month = getNumber( "m" );
- break;
- case "M":
- month = getName( "M", monthNamesShort, monthNames );
- break;
- case "y":
- year = getNumber( "y" );
- break;
- case "@":
- date = new Date( getNumber( "@" ) );
- year = date.getFullYear();
- month = date.getMonth() + 1;
- day = date.getDate();
- break;
- case "!":
- date = new Date( ( getNumber( "!" ) - this._ticksTo1970 ) / 10000 );
- year = date.getFullYear();
- month = date.getMonth() + 1;
- day = date.getDate();
- break;
- case "'":
- if ( lookAhead( "'" ) ) {
- checkLiteral();
- } else {
- literal = true;
- }
- break;
- default:
- checkLiteral();
- }
- }
- }
-
- if ( iValue < value.length ) {
- extra = value.substr( iValue );
- if ( !/^\s+/.test( extra ) ) {
- throw "Extra/unparsed characters found in date: " + extra;
- }
- }
-
- if ( year === -1 ) {
- year = new Date().getFullYear();
- } else if ( year < 100 ) {
- year += new Date().getFullYear() - new Date().getFullYear() % 100 +
- ( year <= shortYearCutoff ? 0 : -100 );
- }
-
- if ( doy > -1 ) {
- month = 1;
- day = doy;
- do {
- dim = this._getDaysInMonth( year, month - 1 );
- if ( day <= dim ) {
- break;
- }
- month++;
- day -= dim;
- } while ( true );
- }
-
- date = this._daylightSavingAdjust( new Date( year, month - 1, day ) );
- if ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {
- throw "Invalid date"; // E.g. 31/02/00
- }
- return date;
- },
-
- /* Standard date formats. */
- ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
- COOKIE: "D, dd M yy",
- ISO_8601: "yy-mm-dd",
- RFC_822: "D, d M y",
- RFC_850: "DD, dd-M-y",
- RFC_1036: "D, d M y",
- RFC_1123: "D, d M yy",
- RFC_2822: "D, d M yy",
- RSS: "D, d M y", // RFC 822
- TICKS: "!",
- TIMESTAMP: "@",
- W3C: "yy-mm-dd", // ISO 8601
-
- _ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +
- Math.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),
-
- /* Format a date object into a string value.
- * The format can be combinations of the following:
- * d - day of month (no leading zero)
- * dd - day of month (two digit)
- * o - day of year (no leading zeros)
- * oo - day of year (three digit)
- * D - day name short
- * DD - day name long
- * m - month of year (no leading zero)
- * mm - month of year (two digit)
- * M - month name short
- * MM - month name long
- * y - year (two digit)
- * yy - year (four digit)
- * @ - Unix timestamp (ms since 01/01/1970)
- * ! - Windows ticks (100ns since 01/01/0001)
- * "..." - literal text
- * '' - single quote
- *
- * @param format string - the desired format of the date
- * @param date Date - the date value to format
- * @param settings Object - attributes include:
- * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
- * dayNames string[7] - names of the days from Sunday (optional)
- * monthNamesShort string[12] - abbreviated names of the months (optional)
- * monthNames string[12] - names of the months (optional)
- * @return string - the date in the above format
- */
- formatDate: function( format, date, settings ) {
- if ( !date ) {
- return "";
- }
-
- var iFormat,
- dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,
- dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,
- monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,
- monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,
-
- // Check whether a format character is doubled
- lookAhead = function( match ) {
- var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );
- if ( matches ) {
- iFormat++;
- }
- return matches;
- },
-
- // Format a number, with leading zero if necessary
- formatNumber = function( match, value, len ) {
- var num = "" + value;
- if ( lookAhead( match ) ) {
- while ( num.length < len ) {
- num = "0" + num;
- }
- }
- return num;
- },
-
- // Format a name, short or long as requested
- formatName = function( match, value, shortNames, longNames ) {
- return ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );
- },
- output = "",
- literal = false;
-
- if ( date ) {
- for ( iFormat = 0; iFormat < format.length; iFormat++ ) {
- if ( literal ) {
- if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) {
- literal = false;
- } else {
- output += format.charAt( iFormat );
- }
- } else {
- switch ( format.charAt( iFormat ) ) {
- case "d":
- output += formatNumber( "d", date.getDate(), 2 );
- break;
- case "D":
- output += formatName( "D", date.getDay(), dayNamesShort, dayNames );
- break;
- case "o":
- output += formatNumber( "o",
- Math.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );
- break;
- case "m":
- output += formatNumber( "m", date.getMonth() + 1, 2 );
- break;
- case "M":
- output += formatName( "M", date.getMonth(), monthNamesShort, monthNames );
- break;
- case "y":
- output += ( lookAhead( "y" ) ? date.getFullYear() :
- ( date.getFullYear() % 100 < 10 ? "0" : "" ) + date.getFullYear() % 100 );
- break;
- case "@":
- output += date.getTime();
- break;
- case "!":
- output += date.getTime() * 10000 + this._ticksTo1970;
- break;
- case "'":
- if ( lookAhead( "'" ) ) {
- output += "'";
- } else {
- literal = true;
- }
- break;
- default:
- output += format.charAt( iFormat );
- }
- }
- }
- }
- return output;
- },
-
- /* Extract all possible characters from the date format. */
- _possibleChars: function( format ) {
- var iFormat,
- chars = "",
- literal = false,
-
- // Check whether a format character is doubled
- lookAhead = function( match ) {
- var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );
- if ( matches ) {
- iFormat++;
- }
- return matches;
- };
-
- for ( iFormat = 0; iFormat < format.length; iFormat++ ) {
- if ( literal ) {
- if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) {
- literal = false;
- } else {
- chars += format.charAt( iFormat );
- }
- } else {
- switch ( format.charAt( iFormat ) ) {
- case "d": case "m": case "y": case "@":
- chars += "0123456789";
- break;
- case "D": case "M":
- return null; // Accept anything
- case "'":
- if ( lookAhead( "'" ) ) {
- chars += "'";
- } else {
- literal = true;
- }
- break;
- default:
- chars += format.charAt( iFormat );
- }
- }
- }
- return chars;
- },
-
- /* Get a setting value, defaulting if necessary. */
- _get: function( inst, name ) {
- return inst.settings[ name ] !== undefined ?
- inst.settings[ name ] : this._defaults[ name ];
- },
-
- /* Parse existing date and initialise date picker. */
- _setDateFromField: function( inst, noDefault ) {
- if ( inst.input.val() === inst.lastVal ) {
- return;
- }
-
- var dateFormat = this._get( inst, "dateFormat" ),
- dates = inst.lastVal = inst.input ? inst.input.val() : null,
- defaultDate = this._getDefaultDate( inst ),
- date = defaultDate,
- settings = this._getFormatConfig( inst );
-
- try {
- date = this.parseDate( dateFormat, dates, settings ) || defaultDate;
- } catch ( event ) {
- dates = ( noDefault ? "" : dates );
- }
- inst.selectedDay = date.getDate();
- inst.drawMonth = inst.selectedMonth = date.getMonth();
- inst.drawYear = inst.selectedYear = date.getFullYear();
- inst.currentDay = ( dates ? date.getDate() : 0 );
- inst.currentMonth = ( dates ? date.getMonth() : 0 );
- inst.currentYear = ( dates ? date.getFullYear() : 0 );
- this._adjustInstDate( inst );
- },
-
- /* Retrieve the default date shown on opening. */
- _getDefaultDate: function( inst ) {
- return this._restrictMinMax( inst,
- this._determineDate( inst, this._get( inst, "defaultDate" ), new Date() ) );
- },
-
- /* A date may be specified as an exact value or a relative one. */
- _determineDate: function( inst, date, defaultDate ) {
- var offsetNumeric = function( offset ) {
- var date = new Date();
- date.setDate( date.getDate() + offset );
- return date;
- },
- offsetString = function( offset ) {
- try {
- return $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ),
- offset, $.datepicker._getFormatConfig( inst ) );
- }
- catch ( e ) {
-
- // Ignore
- }
-
- var date = ( offset.toLowerCase().match( /^c/ ) ?
- $.datepicker._getDate( inst ) : null ) || new Date(),
- year = date.getFullYear(),
- month = date.getMonth(),
- day = date.getDate(),
- pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
- matches = pattern.exec( offset );
-
- while ( matches ) {
- switch ( matches[ 2 ] || "d" ) {
- case "d" : case "D" :
- day += parseInt( matches[ 1 ], 10 ); break;
- case "w" : case "W" :
- day += parseInt( matches[ 1 ], 10 ) * 7; break;
- case "m" : case "M" :
- month += parseInt( matches[ 1 ], 10 );
- day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );
- break;
- case "y": case "Y" :
- year += parseInt( matches[ 1 ], 10 );
- day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );
- break;
- }
- matches = pattern.exec( offset );
- }
- return new Date( year, month, day );
- },
- newDate = ( date == null || date === "" ? defaultDate : ( typeof date === "string" ? offsetString( date ) :
- ( typeof date === "number" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );
-
- newDate = ( newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate );
- if ( newDate ) {
- newDate.setHours( 0 );
- newDate.setMinutes( 0 );
- newDate.setSeconds( 0 );
- newDate.setMilliseconds( 0 );
- }
- return this._daylightSavingAdjust( newDate );
- },
-
- /* Handle switch to/from daylight saving.
- * Hours may be non-zero on daylight saving cut-over:
- * > 12 when midnight changeover, but then cannot generate
- * midnight datetime, so jump to 1AM, otherwise reset.
- * @param date (Date) the date to check
- * @return (Date) the corrected date
- */
- _daylightSavingAdjust: function( date ) {
- if ( !date ) {
- return null;
- }
- date.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );
- return date;
- },
-
- /* Set the date(s) directly. */
- _setDate: function( inst, date, noChange ) {
- var clear = !date,
- origMonth = inst.selectedMonth,
- origYear = inst.selectedYear,
- newDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );
-
- inst.selectedDay = inst.currentDay = newDate.getDate();
- inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
- inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
- if ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {
- this._notifyChange( inst );
- }
- this._adjustInstDate( inst );
- if ( inst.input ) {
- inst.input.val( clear ? "" : this._formatDate( inst ) );
- }
- },
-
- /* Retrieve the date(s) directly. */
- _getDate: function( inst ) {
- var startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === "" ) ? null :
- this._daylightSavingAdjust( new Date(
- inst.currentYear, inst.currentMonth, inst.currentDay ) ) );
- return startDate;
- },
-
- /* Attach the onxxx handlers. These are declared statically so
- * they work with static code transformers like Caja.
- */
- _attachHandlers: function( inst ) {
- var stepMonths = this._get( inst, "stepMonths" ),
- id = "#" + inst.id.replace( /\\\\/g, "\\" );
- inst.dpDiv.find( "[data-handler]" ).map( function() {
- var handler = {
- prev: function() {
- $.datepicker._adjustDate( id, -stepMonths, "M" );
- },
- next: function() {
- $.datepicker._adjustDate( id, +stepMonths, "M" );
- },
- hide: function() {
- $.datepicker._hideDatepicker();
- },
- today: function() {
- $.datepicker._gotoToday( id );
- },
- selectDay: function() {
- $.datepicker._selectDay( id, +this.getAttribute( "data-month" ), +this.getAttribute( "data-year" ), this );
- return false;
- },
- selectMonth: function() {
- $.datepicker._selectMonthYear( id, this, "M" );
- return false;
- },
- selectYear: function() {
- $.datepicker._selectMonthYear( id, this, "Y" );
- return false;
- }
- };
- $( this ).on( this.getAttribute( "data-event" ), handler[ this.getAttribute( "data-handler" ) ] );
- } );
- },
-
- /* Generate the HTML for the current state of the date picker. */
- _generateHTML: function( inst ) {
- var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
- controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
- monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
- selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
- cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
- printDate, dRow, tbody, daySettings, otherMonth, unselectable,
- tempDate = new Date(),
- today = this._daylightSavingAdjust(
- new Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time
- isRTL = this._get( inst, "isRTL" ),
- showButtonPanel = this._get( inst, "showButtonPanel" ),
- hideIfNoPrevNext = this._get( inst, "hideIfNoPrevNext" ),
- navigationAsDateFormat = this._get( inst, "navigationAsDateFormat" ),
- numMonths = this._getNumberOfMonths( inst ),
- showCurrentAtPos = this._get( inst, "showCurrentAtPos" ),
- stepMonths = this._get( inst, "stepMonths" ),
- isMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),
- currentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :
- new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),
- minDate = this._getMinMaxDate( inst, "min" ),
- maxDate = this._getMinMaxDate( inst, "max" ),
- drawMonth = inst.drawMonth - showCurrentAtPos,
- drawYear = inst.drawYear;
-
- if ( drawMonth < 0 ) {
- drawMonth += 12;
- drawYear--;
- }
- if ( maxDate ) {
- maxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),
- maxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );
- maxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );
- while ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {
- drawMonth--;
- if ( drawMonth < 0 ) {
- drawMonth = 11;
- drawYear--;
- }
- }
- }
- inst.drawMonth = drawMonth;
- inst.drawYear = drawYear;
-
- prevText = this._get( inst, "prevText" );
- prevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,
- this._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),
- this._getFormatConfig( inst ) ) );
-
- prev = ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ?
- "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
- " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "'>" + prevText + "</span></a>" :
- ( hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "'>" + prevText + "</span></a>" ) );
-
- nextText = this._get( inst, "nextText" );
- nextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,
- this._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),
- this._getFormatConfig( inst ) ) );
-
- next = ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ?
- "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
- " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "'>" + nextText + "</span></a>" :
- ( hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "'>" + nextText + "</span></a>" ) );
-
- currentText = this._get( inst, "currentText" );
- gotoDate = ( this._get( inst, "gotoCurrent" ) && inst.currentDay ? currentDate : today );
- currentText = ( !navigationAsDateFormat ? currentText :
- this.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );
-
- controls = ( !inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
- this._get( inst, "closeText" ) + "</button>" : "" );
-
- buttonPanel = ( showButtonPanel ) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + ( isRTL ? controls : "" ) +
- ( this._isInRange( inst, gotoDate ) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
- ">" + currentText + "</button>" : "" ) + ( isRTL ? "" : controls ) + "</div>" : "";
-
- firstDay = parseInt( this._get( inst, "firstDay" ), 10 );
- firstDay = ( isNaN( firstDay ) ? 0 : firstDay );
-
- showWeek = this._get( inst, "showWeek" );
- dayNames = this._get( inst, "dayNames" );
- dayNamesMin = this._get( inst, "dayNamesMin" );
- monthNames = this._get( inst, "monthNames" );
- monthNamesShort = this._get( inst, "monthNamesShort" );
- beforeShowDay = this._get( inst, "beforeShowDay" );
- showOtherMonths = this._get( inst, "showOtherMonths" );
- selectOtherMonths = this._get( inst, "selectOtherMonths" );
- defaultDate = this._getDefaultDate( inst );
- html = "";
-
- for ( row = 0; row < numMonths[ 0 ]; row++ ) {
- group = "";
- this.maxRows = 4;
- for ( col = 0; col < numMonths[ 1 ]; col++ ) {
- selectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );
- cornerClass = " ui-corner-all";
- calender = "";
- if ( isMultiMonth ) {
- calender += "<div class='ui-datepicker-group";
- if ( numMonths[ 1 ] > 1 ) {
- switch ( col ) {
- case 0: calender += " ui-datepicker-group-first";
- cornerClass = " ui-corner-" + ( isRTL ? "right" : "left" ); break;
- case numMonths[ 1 ] - 1: calender += " ui-datepicker-group-last";
- cornerClass = " ui-corner-" + ( isRTL ? "left" : "right" ); break;
- default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
- }
- }
- calender += "'>";
- }
- calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
- ( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : "" ) +
- ( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : "" ) +
- this._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,
- row > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers
- "</div><table class='ui-datepicker-calendar'><thead>" +
- "<tr>";
- thead = ( showWeek ? "<th class='ui-datepicker-week-col'>" + this._get( inst, "weekHeader" ) + "</th>" : "" );
- for ( dow = 0; dow < 7; dow++ ) { // days of the week
- day = ( dow + firstDay ) % 7;
- thead += "<th scope='col'" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "" ) + ">" +
- "<span title='" + dayNames[ day ] + "'>" + dayNamesMin[ day ] + "</span></th>";
- }
- calender += thead + "</tr></thead><tbody>";
- daysInMonth = this._getDaysInMonth( drawYear, drawMonth );
- if ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {
- inst.selectedDay = Math.min( inst.selectedDay, daysInMonth );
- }
- leadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;
- curRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate
- numRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)
- this.maxRows = numRows;
- printDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );
- for ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows
- calender += "<tr>";
- tbody = ( !showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
- this._get( inst, "calculateWeek" )( printDate ) + "</td>" );
- for ( dow = 0; dow < 7; dow++ ) { // create date picker days
- daySettings = ( beforeShowDay ?
- beforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, "" ] );
- otherMonth = ( printDate.getMonth() !== drawMonth );
- unselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||
- ( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );
- tbody += "<td class='" +
- ( ( dow + firstDay + 6 ) % 7 >= 5 ? " ui-datepicker-week-end" : "" ) + // highlight weekends
- ( otherMonth ? " ui-datepicker-other-month" : "" ) + // highlight days from other months
- ( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key
- ( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?
-
- // or defaultDate is current printedDate and defaultDate is selectedDate
- " " + this._dayOverClass : "" ) + // highlight selected day
- ( unselectable ? " " + this._unselectableClass + " ui-state-disabled" : "" ) + // highlight unselectable days
- ( otherMonth && !showOtherMonths ? "" : " " + daySettings[ 1 ] + // highlight custom dates
- ( printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "" ) + // highlight selected day
- ( printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "" ) ) + "'" + // highlight today (if different)
- ( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? " title='" + daySettings[ 2 ].replace( /'/g, "&#39;" ) + "'" : "" ) + // cell title
- ( unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'" ) + ">" + // actions
- ( otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
- ( unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
- ( printDate.getTime() === today.getTime() ? " ui-state-highlight" : "" ) +
- ( printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "" ) + // highlight selected day
- ( otherMonth ? " ui-priority-secondary" : "" ) + // distinguish dates from other months
- "' href='#'>" + printDate.getDate() + "</a>" ) ) + "</td>"; // display selectable date
- printDate.setDate( printDate.getDate() + 1 );
- printDate = this._daylightSavingAdjust( printDate );
- }
- calender += tbody + "</tr>";
- }
- drawMonth++;
- if ( drawMonth > 11 ) {
- drawMonth = 0;
- drawYear++;
- }
- calender += "</tbody></table>" + ( isMultiMonth ? "</div>" +
- ( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? "<div class='ui-datepicker-row-break'></div>" : "" ) : "" );
- group += calender;
- }
- html += group;
- }
- html += buttonPanel;
- inst._keyEvent = false;
- return html;
- },
-
- /* Generate the month and year header. */
- _generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,
- secondary, monthNames, monthNamesShort ) {
-
- var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
- changeMonth = this._get( inst, "changeMonth" ),
- changeYear = this._get( inst, "changeYear" ),
- showMonthAfterYear = this._get( inst, "showMonthAfterYear" ),
- html = "<div class='ui-datepicker-title'>",
- monthHtml = "";
-
- // Month selection
- if ( secondary || !changeMonth ) {
- monthHtml += "<span class='ui-datepicker-month'>" + monthNames[ drawMonth ] + "</span>";
- } else {
- inMinYear = ( minDate && minDate.getFullYear() === drawYear );
- inMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );
- monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
- for ( month = 0; month < 12; month++ ) {
- if ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {
- monthHtml += "<option value='" + month + "'" +
- ( month === drawMonth ? " selected='selected'" : "" ) +
- ">" + monthNamesShort[ month ] + "</option>";
- }
- }
- monthHtml += "</select>";
- }
-
- if ( !showMonthAfterYear ) {
- html += monthHtml + ( secondary || !( changeMonth && changeYear ) ? "&#xa0;" : "" );
- }
-
- // Year selection
- if ( !inst.yearshtml ) {
- inst.yearshtml = "";
- if ( secondary || !changeYear ) {
- html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
- } else {
-
- // determine range of years to display
- years = this._get( inst, "yearRange" ).split( ":" );
- thisYear = new Date().getFullYear();
- determineYear = function( value ) {
- var year = ( value.match( /c[+\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :
- ( value.match( /[+\-].*/ ) ? thisYear + parseInt( value, 10 ) :
- parseInt( value, 10 ) ) );
- return ( isNaN( year ) ? thisYear : year );
- };
- year = determineYear( years[ 0 ] );
- endYear = Math.max( year, determineYear( years[ 1 ] || "" ) );
- year = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );
- endYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );
- inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
- for ( ; year <= endYear; year++ ) {
- inst.yearshtml += "<option value='" + year + "'" +
- ( year === drawYear ? " selected='selected'" : "" ) +
- ">" + year + "</option>";
- }
- inst.yearshtml += "</select>";
-
- html += inst.yearshtml;
- inst.yearshtml = null;
- }
- }
-
- html += this._get( inst, "yearSuffix" );
- if ( showMonthAfterYear ) {
- html += ( secondary || !( changeMonth && changeYear ) ? "&#xa0;" : "" ) + monthHtml;
- }
- html += "</div>"; // Close datepicker_header
- return html;
- },
-
- /* Adjust one of the date sub-fields. */
- _adjustInstDate: function( inst, offset, period ) {
- var year = inst.selectedYear + ( period === "Y" ? offset : 0 ),
- month = inst.selectedMonth + ( period === "M" ? offset : 0 ),
- day = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === "D" ? offset : 0 ),
- date = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );
-
- inst.selectedDay = date.getDate();
- inst.drawMonth = inst.selectedMonth = date.getMonth();
- inst.drawYear = inst.selectedYear = date.getFullYear();
- if ( period === "M" || period === "Y" ) {
- this._notifyChange( inst );
- }
- },
-
- /* Ensure a date is within any min/max bounds. */
- _restrictMinMax: function( inst, date ) {
- var minDate = this._getMinMaxDate( inst, "min" ),
- maxDate = this._getMinMaxDate( inst, "max" ),
- newDate = ( minDate && date < minDate ? minDate : date );
- return ( maxDate && newDate > maxDate ? maxDate : newDate );
- },
-
- /* Notify change of month/year. */
- _notifyChange: function( inst ) {
- var onChange = this._get( inst, "onChangeMonthYear" );
- if ( onChange ) {
- onChange.apply( ( inst.input ? inst.input[ 0 ] : null ),
- [ inst.selectedYear, inst.selectedMonth + 1, inst ] );
- }
- },
-
- /* Determine the number of months to show. */
- _getNumberOfMonths: function( inst ) {
- var numMonths = this._get( inst, "numberOfMonths" );
- return ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === "number" ? [ 1, numMonths ] : numMonths ) );
- },
-
- /* Determine the current maximum date - ensure no time components are set. */
- _getMinMaxDate: function( inst, minMax ) {
- return this._determineDate( inst, this._get( inst, minMax + "Date" ), null );
- },
-
- /* Find the number of days in a given month. */
- _getDaysInMonth: function( year, month ) {
- return 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();
- },
-
- /* Find the day of the week of the first of a month. */
- _getFirstDayOfMonth: function( year, month ) {
- return new Date( year, month, 1 ).getDay();
- },
-
- /* Determines if we should allow a "next/prev" month display change. */
- _canAdjustMonth: function( inst, offset, curYear, curMonth ) {
- var numMonths = this._getNumberOfMonths( inst ),
- date = this._daylightSavingAdjust( new Date( curYear,
- curMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );
-
- if ( offset < 0 ) {
- date.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );
- }
- return this._isInRange( inst, date );
- },
-
- /* Is the given date in the accepted range? */
- _isInRange: function( inst, date ) {
- var yearSplit, currentYear,
- minDate = this._getMinMaxDate( inst, "min" ),
- maxDate = this._getMinMaxDate( inst, "max" ),
- minYear = null,
- maxYear = null,
- years = this._get( inst, "yearRange" );
- if ( years ) {
- yearSplit = years.split( ":" );
- currentYear = new Date().getFullYear();
- minYear = parseInt( yearSplit[ 0 ], 10 );
- maxYear = parseInt( yearSplit[ 1 ], 10 );
- if ( yearSplit[ 0 ].match( /[+\-].*/ ) ) {
- minYear += currentYear;
- }
- if ( yearSplit[ 1 ].match( /[+\-].*/ ) ) {
- maxYear += currentYear;
- }
- }
-
- return ( ( !minDate || date.getTime() >= minDate.getTime() ) &&
- ( !maxDate || date.getTime() <= maxDate.getTime() ) &&
- ( !minYear || date.getFullYear() >= minYear ) &&
- ( !maxYear || date.getFullYear() <= maxYear ) );
- },
-
- /* Provide the configuration settings for formatting/parsing. */
- _getFormatConfig: function( inst ) {
- var shortYearCutoff = this._get( inst, "shortYearCutoff" );
- shortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff :
- new Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );
- return { shortYearCutoff: shortYearCutoff,
- dayNamesShort: this._get( inst, "dayNamesShort" ), dayNames: this._get( inst, "dayNames" ),
- monthNamesShort: this._get( inst, "monthNamesShort" ), monthNames: this._get( inst, "monthNames" ) };
- },
-
- /* Format the given date for display. */
- _formatDate: function( inst, day, month, year ) {
- if ( !day ) {
- inst.currentDay = inst.selectedDay;
- inst.currentMonth = inst.selectedMonth;
- inst.currentYear = inst.selectedYear;
- }
- var date = ( day ? ( typeof day === "object" ? day :
- this._daylightSavingAdjust( new Date( year, month, day ) ) ) :
- this._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );
- return this.formatDate( this._get( inst, "dateFormat" ), date, this._getFormatConfig( inst ) );
- }
-} );
-
-/*
- * Bind hover events for datepicker elements.
- * Done via delegate so the binding only occurs once in the lifetime of the parent div.
- * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
- */
-function datepicker_bindHover( dpDiv ) {
- var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
- return dpDiv.on( "mouseout", selector, function() {
- $( this ).removeClass( "ui-state-hover" );
- if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) {
- $( this ).removeClass( "ui-datepicker-prev-hover" );
- }
- if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) {
- $( this ).removeClass( "ui-datepicker-next-hover" );
- }
- } )
- .on( "mouseover", selector, datepicker_handleMouseover );
-}
-
-function datepicker_handleMouseover() {
- if ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {
- $( this ).parents( ".ui-datepicker-calendar" ).find( "a" ).removeClass( "ui-state-hover" );
- $( this ).addClass( "ui-state-hover" );
- if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) {
- $( this ).addClass( "ui-datepicker-prev-hover" );
- }
- if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) {
- $( this ).addClass( "ui-datepicker-next-hover" );
- }
- }
-}
-
-/* jQuery extend now ignores nulls! */
-function datepicker_extendRemove( target, props ) {
- $.extend( target, props );
- for ( var name in props ) {
- if ( props[ name ] == null ) {
- target[ name ] = props[ name ];
- }
- }
- return target;
-}
-
-/* Invoke the datepicker functionality.
- @param options string - a command, optionally followed by additional parameters or
- Object - settings for attaching new datepicker functionality
- @return jQuery object */
-$.fn.datepicker = function( options ) {
-
- /* Verify an empty collection wasn't passed - Fixes #6976 */
- if ( !this.length ) {
- return this;
- }
-
- /* Initialise the date picker. */
- if ( !$.datepicker.initialized ) {
- $( document ).on( "mousedown", $.datepicker._checkExternalClick );
- $.datepicker.initialized = true;
- }
-
- /* Append datepicker main container to body if not exist. */
- if ( $( "#" + $.datepicker._mainDivId ).length === 0 ) {
- $( "body" ).append( $.datepicker.dpDiv );
- }
-
- var otherArgs = Array.prototype.slice.call( arguments, 1 );
- if ( typeof options === "string" && ( options === "isDisabled" || options === "getDate" || options === "widget" ) ) {
- return $.datepicker[ "_" + options + "Datepicker" ].
- apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );
- }
- if ( options === "option" && arguments.length === 2 && typeof arguments[ 1 ] === "string" ) {
- return $.datepicker[ "_" + options + "Datepicker" ].
- apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );
- }
- return this.each( function() {
- typeof options === "string" ?
- $.datepicker[ "_" + options + "Datepicker" ].
- apply( $.datepicker, [ this ].concat( otherArgs ) ) :
- $.datepicker._attachDatepicker( this, options );
- } );
-};
-
-$.datepicker = new Datepicker(); // singleton instance
-$.datepicker.initialized = false;
-$.datepicker.uuid = new Date().getTime();
-$.datepicker.version = "1.12.1";
-
-var widgetsDatepicker = $.datepicker;
-
-
-
-
-// This file is deprecated
-var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
-
-/*!
- * jQuery UI Mouse 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Mouse
-//>>group: Widgets
-//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.
-//>>docs: http://api.jqueryui.com/mouse/
-
-
-
-var mouseHandled = false;
-$( document ).on( "mouseup", function() {
- mouseHandled = false;
-} );
-
-var widgetsMouse = $.widget( "ui.mouse", {
- version: "1.12.1",
- options: {
- cancel: "input, textarea, button, select, option",
- distance: 1,
- delay: 0
- },
- _mouseInit: function() {
- var that = this;
-
- this.element
- .on( "mousedown." + this.widgetName, function( event ) {
- return that._mouseDown( event );
- } )
- .on( "click." + this.widgetName, function( event ) {
- if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) {
- $.removeData( event.target, that.widgetName + ".preventClickEvent" );
- event.stopImmediatePropagation();
- return false;
- }
- } );
-
- this.started = false;
- },
-
- // TODO: make sure destroying one instance of mouse doesn't mess with
- // other instances of mouse
- _mouseDestroy: function() {
- this.element.off( "." + this.widgetName );
- if ( this._mouseMoveDelegate ) {
- this.document
- .off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
- .off( "mouseup." + this.widgetName, this._mouseUpDelegate );
- }
- },
-
- _mouseDown: function( event ) {
-
- // don't let more than one widget handle mouseStart
- if ( mouseHandled ) {
- return;
- }
-
- this._mouseMoved = false;
-
- // We may have missed mouseup (out of window)
- ( this._mouseStarted && this._mouseUp( event ) );
-
- this._mouseDownEvent = event;
-
- var that = this,
- btnIsLeft = ( event.which === 1 ),
-
- // event.target.nodeName works around a bug in IE 8 with
- // disabled inputs (#7620)
- elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ?
- $( event.target ).closest( this.options.cancel ).length : false );
- if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {
- return true;
- }
-
- this.mouseDelayMet = !this.options.delay;
- if ( !this.mouseDelayMet ) {
- this._mouseDelayTimer = setTimeout( function() {
- that.mouseDelayMet = true;
- }, this.options.delay );
- }
-
- if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
- this._mouseStarted = ( this._mouseStart( event ) !== false );
- if ( !this._mouseStarted ) {
- event.preventDefault();
- return true;
- }
- }
-
- // Click event may never have fired (Gecko & Opera)
- if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) {
- $.removeData( event.target, this.widgetName + ".preventClickEvent" );
- }
-
- // These delegates are required to keep context
- this._mouseMoveDelegate = function( event ) {
- return that._mouseMove( event );
- };
- this._mouseUpDelegate = function( event ) {
- return that._mouseUp( event );
- };
-
- this.document
- .on( "mousemove." + this.widgetName, this._mouseMoveDelegate )
- .on( "mouseup." + this.widgetName, this._mouseUpDelegate );
-
- event.preventDefault();
-
- mouseHandled = true;
- return true;
- },
-
- _mouseMove: function( event ) {
-
- // Only check for mouseups outside the document if you've moved inside the document
- // at least once. This prevents the firing of mouseup in the case of IE<9, which will
- // fire a mousemove event if content is placed under the cursor. See #7778
- // Support: IE <9
- if ( this._mouseMoved ) {
-
- // IE mouseup check - mouseup happened when mouse was out of window
- if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&
- !event.button ) {
- return this._mouseUp( event );
-
- // Iframe mouseup check - mouseup occurred in another document
- } else if ( !event.which ) {
-
- // Support: Safari <=8 - 9
- // Safari sets which to 0 if you press any of the following keys
- // during a drag (#14461)
- if ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||
- event.originalEvent.metaKey || event.originalEvent.shiftKey ) {
- this.ignoreMissingWhich = true;
- } else if ( !this.ignoreMissingWhich ) {
- return this._mouseUp( event );
- }
- }
- }
-
- if ( event.which || event.button ) {
- this._mouseMoved = true;
- }
-
- if ( this._mouseStarted ) {
- this._mouseDrag( event );
- return event.preventDefault();
- }
-
- if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
- this._mouseStarted =
- ( this._mouseStart( this._mouseDownEvent, event ) !== false );
- ( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );
- }
-
- return !this._mouseStarted;
- },
-
- _mouseUp: function( event ) {
- this.document
- .off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
- .off( "mouseup." + this.widgetName, this._mouseUpDelegate );
-
- if ( this._mouseStarted ) {
- this._mouseStarted = false;
-
- if ( event.target === this._mouseDownEvent.target ) {
- $.data( event.target, this.widgetName + ".preventClickEvent", true );
- }
-
- this._mouseStop( event );
- }
-
- if ( this._mouseDelayTimer ) {
- clearTimeout( this._mouseDelayTimer );
- delete this._mouseDelayTimer;
- }
-
- this.ignoreMissingWhich = false;
- mouseHandled = false;
- event.preventDefault();
- },
-
- _mouseDistanceMet: function( event ) {
- return ( Math.max(
- Math.abs( this._mouseDownEvent.pageX - event.pageX ),
- Math.abs( this._mouseDownEvent.pageY - event.pageY )
- ) >= this.options.distance
- );
- },
-
- _mouseDelayMet: function( /* event */ ) {
- return this.mouseDelayMet;
- },
-
- // These are placeholder methods, to be overriden by extending plugin
- _mouseStart: function( /* event */ ) {},
- _mouseDrag: function( /* event */ ) {},
- _mouseStop: function( /* event */ ) {},
- _mouseCapture: function( /* event */ ) { return true; }
-} );
-
-
-
-
-// $.ui.plugin is deprecated. Use $.widget() extensions instead.
-var plugin = $.ui.plugin = {
- add: function( module, option, set ) {
- var i,
- proto = $.ui[ module ].prototype;
- for ( i in set ) {
- proto.plugins[ i ] = proto.plugins[ i ] || [];
- proto.plugins[ i ].push( [ option, set[ i ] ] );
- }
- },
- call: function( instance, name, args, allowDisconnected ) {
- var i,
- set = instance.plugins[ name ];
-
- if ( !set ) {
- return;
- }
-
- if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||
- instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
- return;
- }
-
- for ( i = 0; i < set.length; i++ ) {
- if ( instance.options[ set[ i ][ 0 ] ] ) {
- set[ i ][ 1 ].apply( instance.element, args );
- }
- }
- }
-};
-
-
-
-var safeBlur = $.ui.safeBlur = function( element ) {
-
- // Support: IE9 - 10 only
- // If the <body> is blurred, IE will switch windows, see #9420
- if ( element && element.nodeName.toLowerCase() !== "body" ) {
- $( element ).trigger( "blur" );
- }
-};
-
-
-/*!
- * jQuery UI Draggable 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Draggable
-//>>group: Interactions
-//>>description: Enables dragging functionality for any element.
-//>>docs: http://api.jqueryui.com/draggable/
-//>>demos: http://jqueryui.com/draggable/
-//>>css.structure: ../../themes/base/draggable.css
-
-
-
-$.widget( "ui.draggable", $.ui.mouse, {
- version: "1.12.1",
- widgetEventPrefix: "drag",
- options: {
- addClasses: true,
- appendTo: "parent",
- axis: false,
- connectToSortable: false,
- containment: false,
- cursor: "auto",
- cursorAt: false,
- grid: false,
- handle: false,
- helper: "original",
- iframeFix: false,
- opacity: false,
- refreshPositions: false,
- revert: false,
- revertDuration: 500,
- scope: "default",
- scroll: true,
- scrollSensitivity: 20,
- scrollSpeed: 20,
- snap: false,
- snapMode: "both",
- snapTolerance: 20,
- stack: false,
- zIndex: false,
-
- // Callbacks
- drag: null,
- start: null,
- stop: null
- },
- _create: function() {
-
- if ( this.options.helper === "original" ) {
- this._setPositionRelative();
- }
- if ( this.options.addClasses ) {
- this._addClass( "ui-draggable" );
- }
- this._setHandleClassName();
-
- this._mouseInit();
- },
-
- _setOption: function( key, value ) {
- this._super( key, value );
- if ( key === "handle" ) {
- this._removeHandleClassName();
- this._setHandleClassName();
- }
- },
-
- _destroy: function() {
- if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
- this.destroyOnClear = true;
- return;
- }
- this._removeHandleClassName();
- this._mouseDestroy();
- },
-
- _mouseCapture: function( event ) {
- var o = this.options;
-
- // Among others, prevent a drag on a resizable-handle
- if ( this.helper || o.disabled ||
- $( event.target ).closest( ".ui-resizable-handle" ).length > 0 ) {
- return false;
- }
-
- //Quit if we're not on a valid handle
- this.handle = this._getHandle( event );
- if ( !this.handle ) {
- return false;
- }
-
- this._blurActiveElement( event );
-
- this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
-
- return true;
-
- },
-
- _blockFrames: function( selector ) {
- this.iframeBlocks = this.document.find( selector ).map( function() {
- var iframe = $( this );
-
- return $( "<div>" )
- .css( "position", "absolute" )
- .appendTo( iframe.parent() )
- .outerWidth( iframe.outerWidth() )
- .outerHeight( iframe.outerHeight() )
- .offset( iframe.offset() )[ 0 ];
- } );
- },
-
- _unblockFrames: function() {
- if ( this.iframeBlocks ) {
- this.iframeBlocks.remove();
- delete this.iframeBlocks;
- }
- },
-
- _blurActiveElement: function( event ) {
- var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
- target = $( event.target );
-
- // Don't blur if the event occurred on an element that is within
- // the currently focused element
- // See #10527, #12472
- if ( target.closest( activeElement ).length ) {
- return;
- }
-
- // Blur any element that currently has focus, see #4261
- $.ui.safeBlur( activeElement );
- },
-
- _mouseStart: function( event ) {
-
- var o = this.options;
-
- //Create and append the visible helper
- this.helper = this._createHelper( event );
-
- this._addClass( this.helper, "ui-draggable-dragging" );
-
- //Cache the helper size
- this._cacheHelperProportions();
-
- //If ddmanager is used for droppables, set the global draggable
- if ( $.ui.ddmanager ) {
- $.ui.ddmanager.current = this;
- }
-
- /*
- * - Position generation -
- * This block generates everything position related - it's the core of draggables.
- */
-
- //Cache the margins of the original element
- this._cacheMargins();
-
- //Store the helper's css position
- this.cssPosition = this.helper.css( "position" );
- this.scrollParent = this.helper.scrollParent( true );
- this.offsetParent = this.helper.offsetParent();
- this.hasFixedAncestor = this.helper.parents().filter( function() {
- return $( this ).css( "position" ) === "fixed";
- } ).length > 0;
-
- //The element's absolute position on the page minus margins
- this.positionAbs = this.element.offset();
- this._refreshOffsets( event );
-
- //Generate the original position
- this.originalPosition = this.position = this._generatePosition( event, false );
- this.originalPageX = event.pageX;
- this.originalPageY = event.pageY;
-
- //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
- ( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );
-
- //Set a containment if given in the options
- this._setContainment();
-
- //Trigger event + callbacks
- if ( this._trigger( "start", event ) === false ) {
- this._clear();
- return false;
- }
-
- //Recache the helper size
- this._cacheHelperProportions();
-
- //Prepare the droppable offsets
- if ( $.ui.ddmanager && !o.dropBehaviour ) {
- $.ui.ddmanager.prepareOffsets( this, event );
- }
-
- // Execute the drag once - this causes the helper not to be visible before getting its
- // correct position
- this._mouseDrag( event, true );
-
- // If the ddmanager is used for droppables, inform the manager that dragging has started
- // (see #5003)
- if ( $.ui.ddmanager ) {
- $.ui.ddmanager.dragStart( this, event );
- }
-
- return true;
- },
-
- _refreshOffsets: function( event ) {
- this.offset = {
- top: this.positionAbs.top - this.margins.top,
- left: this.positionAbs.left - this.margins.left,
- scroll: false,
- parent: this._getParentOffset(),
- relative: this._getRelativeOffset()
- };
-
- this.offset.click = {
- left: event.pageX - this.offset.left,
- top: event.pageY - this.offset.top
- };
- },
-
- _mouseDrag: function( event, noPropagation ) {
-
- // reset any necessary cached properties (see #5009)
- if ( this.hasFixedAncestor ) {
- this.offset.parent = this._getParentOffset();
- }
-
- //Compute the helpers position
- this.position = this._generatePosition( event, true );
- this.positionAbs = this._convertPositionTo( "absolute" );
-
- //Call plugins and callbacks and use the resulting position if something is returned
- if ( !noPropagation ) {
- var ui = this._uiHash();
- if ( this._trigger( "drag", event, ui ) === false ) {
- this._mouseUp( new $.Event( "mouseup", event ) );
- return false;
- }
- this.position = ui.position;
- }
-
- this.helper[ 0 ].style.left = this.position.left + "px";
- this.helper[ 0 ].style.top = this.position.top + "px";
-
- if ( $.ui.ddmanager ) {
- $.ui.ddmanager.drag( this, event );
- }
-
- return false;
- },
-
- _mouseStop: function( event ) {
-
- //If we are using droppables, inform the manager about the drop
- var that = this,
- dropped = false;
- if ( $.ui.ddmanager && !this.options.dropBehaviour ) {
- dropped = $.ui.ddmanager.drop( this, event );
- }
-
- //if a drop comes from outside (a sortable)
- if ( this.dropped ) {
- dropped = this.dropped;
- this.dropped = false;
- }
-
- if ( ( this.options.revert === "invalid" && !dropped ) ||
- ( this.options.revert === "valid" && dropped ) ||
- this.options.revert === true || ( $.isFunction( this.options.revert ) &&
- this.options.revert.call( this.element, dropped ) )
- ) {
- $( this.helper ).animate(
- this.originalPosition,
- parseInt( this.options.revertDuration, 10 ),
- function() {
- if ( that._trigger( "stop", event ) !== false ) {
- that._clear();
- }
- }
- );
- } else {
- if ( this._trigger( "stop", event ) !== false ) {
- this._clear();
- }
- }
-
- return false;
- },
-
- _mouseUp: function( event ) {
- this._unblockFrames();
-
- // If the ddmanager is used for droppables, inform the manager that dragging has stopped
- // (see #5003)
- if ( $.ui.ddmanager ) {
- $.ui.ddmanager.dragStop( this, event );
- }
-
- // Only need to focus if the event occurred on the draggable itself, see #10527
- if ( this.handleElement.is( event.target ) ) {
-
- // The interaction is over; whether or not the click resulted in a drag,
- // focus the element
- this.element.trigger( "focus" );
- }
-
- return $.ui.mouse.prototype._mouseUp.call( this, event );
- },
-
- cancel: function() {
-
- if ( this.helper.is( ".ui-draggable-dragging" ) ) {
- this._mouseUp( new $.Event( "mouseup", { target: this.element[ 0 ] } ) );
- } else {
- this._clear();
- }
-
- return this;
-
- },
-
- _getHandle: function( event ) {
- return this.options.handle ?
- !!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
- true;
- },
-
- _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( event ) {
-
- var o = this.options,
- helperIsFunction = $.isFunction( o.helper ),
- helper = helperIsFunction ?
- $( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
- ( o.helper === "clone" ?
- this.element.clone().removeAttr( "id" ) :
- this.element );
-
- if ( !helper.parents( "body" ).length ) {
- helper.appendTo( ( o.appendTo === "parent" ?
- this.element[ 0 ].parentNode :
- o.appendTo ) );
- }
-
- // Http://bugs.jqueryui.com/ticket/9446
- // a helper function can return the original element
- // which wouldn't have been set to relative in _create
- if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
- this._setPositionRelative();
- }
-
- if ( helper[ 0 ] !== this.element[ 0 ] &&
- !( /(fixed|absolute)/ ).test( helper.css( "position" ) ) ) {
- helper.css( "position", "absolute" );
- }
-
- return helper;
-
- },
-
- _setPositionRelative: function() {
- if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
- this.element[ 0 ].style.position = "relative";
- }
- },
-
- _adjustOffsetFromHelper: function( obj ) {
- if ( typeof obj === "string" ) {
- obj = obj.split( " " );
- }
- if ( $.isArray( obj ) ) {
- obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };
- }
- if ( "left" in obj ) {
- this.offset.click.left = obj.left + this.margins.left;
- }
- if ( "right" in obj ) {
- this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
- }
- if ( "top" in obj ) {
- this.offset.click.top = obj.top + this.margins.top;
- }
- if ( "bottom" in obj ) {
- this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
- }
- },
-
- _isRootNode: function( element ) {
- return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
- },
-
- _getParentOffset: function() {
-
- //Get the offsetParent and cache its position
- var po = this.offsetParent.offset(),
- document = this.document[ 0 ];
-
- // This is a special case where we need to modify a offset calculated on start, since the
- // following happened:
- // 1. The position of the helper is absolute, so it's position is calculated based on the
- // next positioned parent
- // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't
- // the document, which means that the scroll is included in the initial calculation of the
- // offset of the parent, and never recalculated upon drag
- if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== document &&
- $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {
- po.left += this.scrollParent.scrollLeft();
- po.top += this.scrollParent.scrollTop();
- }
-
- if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
- po = { top: 0, left: 0 };
- }
-
- return {
- top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ),
- left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 )
- };
-
- },
-
- _getRelativeOffset: function() {
- if ( this.cssPosition !== "relative" ) {
- return { top: 0, left: 0 };
- }
-
- var p = this.element.position(),
- scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
-
- return {
- top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) +
- ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
- left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) +
- ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
- };
-
- },
-
- _cacheMargins: function() {
- this.margins = {
- left: ( parseInt( this.element.css( "marginLeft" ), 10 ) || 0 ),
- top: ( parseInt( this.element.css( "marginTop" ), 10 ) || 0 ),
- right: ( parseInt( this.element.css( "marginRight" ), 10 ) || 0 ),
- bottom: ( parseInt( this.element.css( "marginBottom" ), 10 ) || 0 )
- };
- },
-
- _cacheHelperProportions: function() {
- this.helperProportions = {
- width: this.helper.outerWidth(),
- height: this.helper.outerHeight()
- };
- },
-
- _setContainment: function() {
-
- var isUserScrollable, c, ce,
- o = this.options,
- document = this.document[ 0 ];
-
- this.relativeContainer = null;
-
- if ( !o.containment ) {
- this.containment = null;
- return;
- }
-
- if ( o.containment === "window" ) {
- this.containment = [
- $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
- $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
- $( window ).scrollLeft() + $( window ).width() -
- this.helperProportions.width - this.margins.left,
- $( window ).scrollTop() +
- ( $( window ).height() || document.body.parentNode.scrollHeight ) -
- this.helperProportions.height - this.margins.top
- ];
- return;
- }
-
- if ( o.containment === "document" ) {
- this.containment = [
- 0,
- 0,
- $( document ).width() - this.helperProportions.width - this.margins.left,
- ( $( document ).height() || document.body.parentNode.scrollHeight ) -
- this.helperProportions.height - this.margins.top
- ];
- return;
- }
-
- if ( o.containment.constructor === Array ) {
- this.containment = o.containment;
- return;
- }
-
- if ( o.containment === "parent" ) {
- o.containment = this.helper[ 0 ].parentNode;
- }
-
- c = $( o.containment );
- ce = c[ 0 ];
-
- if ( !ce ) {
- return;
- }
-
- isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
-
- this.containment = [
- ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) +
- ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
- ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) +
- ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
- ( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
- ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
- ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
- this.helperProportions.width -
- this.margins.left -
- this.margins.right,
- ( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
- ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
- ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
- this.helperProportions.height -
- this.margins.top -
- this.margins.bottom
- ];
- this.relativeContainer = c;
- },
-
- _convertPositionTo: function( d, pos ) {
-
- if ( !pos ) {
- pos = this.position;
- }
-
- var mod = d === "absolute" ? 1 : -1,
- scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
-
- return {
- top: (
-
- // The absolute mouse position
- pos.top +
-
- // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.relative.top * mod +
-
- // The offsetParent's offset without borders (offset + border)
- this.offset.parent.top * mod -
- ( ( this.cssPosition === "fixed" ?
- -this.offset.scroll.top :
- ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )
- ),
- left: (
-
- // The absolute mouse position
- pos.left +
-
- // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.relative.left * mod +
-
- // The offsetParent's offset without borders (offset + border)
- this.offset.parent.left * mod -
- ( ( this.cssPosition === "fixed" ?
- -this.offset.scroll.left :
- ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )
- )
- };
-
- },
-
- _generatePosition: function( event, constrainPosition ) {
-
- var containment, co, top, left,
- o = this.options,
- scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
- pageX = event.pageX,
- pageY = event.pageY;
-
- // Cache the scroll
- if ( !scrollIsRootNode || !this.offset.scroll ) {
- this.offset.scroll = {
- top: this.scrollParent.scrollTop(),
- left: this.scrollParent.scrollLeft()
- };
- }
-
- /*
- * - Position constraining -
- * Constrain the position to a mix of grid, containment.
- */
-
- // If we are not dragging yet, we won't check for options
- if ( constrainPosition ) {
- if ( this.containment ) {
- if ( this.relativeContainer ) {
- co = this.relativeContainer.offset();
- containment = [
- this.containment[ 0 ] + co.left,
- this.containment[ 1 ] + co.top,
- this.containment[ 2 ] + co.left,
- this.containment[ 3 ] + co.top
- ];
- } else {
- containment = this.containment;
- }
-
- if ( event.pageX - this.offset.click.left < containment[ 0 ] ) {
- pageX = containment[ 0 ] + this.offset.click.left;
- }
- if ( event.pageY - this.offset.click.top < containment[ 1 ] ) {
- pageY = containment[ 1 ] + this.offset.click.top;
- }
- if ( event.pageX - this.offset.click.left > containment[ 2 ] ) {
- pageX = containment[ 2 ] + this.offset.click.left;
- }
- if ( event.pageY - this.offset.click.top > containment[ 3 ] ) {
- pageY = containment[ 3 ] + this.offset.click.top;
- }
- }
-
- if ( o.grid ) {
-
- //Check for grid elements set to 0 to prevent divide by 0 error causing invalid
- // argument errors in IE (see ticket #6950)
- top = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -
- this.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;
- pageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||
- top - this.offset.click.top > containment[ 3 ] ) ?
- top :
- ( ( top - this.offset.click.top >= containment[ 1 ] ) ?
- top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;
-
- left = o.grid[ 0 ] ? this.originalPageX +
- Math.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :
- this.originalPageX;
- pageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||
- left - this.offset.click.left > containment[ 2 ] ) ?
- left :
- ( ( left - this.offset.click.left >= containment[ 0 ] ) ?
- left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;
- }
-
- if ( o.axis === "y" ) {
- pageX = this.originalPageX;
- }
-
- if ( o.axis === "x" ) {
- pageY = this.originalPageY;
- }
- }
-
- return {
- top: (
-
- // The absolute mouse position
- pageY -
-
- // Click offset (relative to the element)
- this.offset.click.top -
-
- // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.relative.top -
-
- // The offsetParent's offset without borders (offset + border)
- this.offset.parent.top +
- ( this.cssPosition === "fixed" ?
- -this.offset.scroll.top :
- ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
- ),
- left: (
-
- // The absolute mouse position
- pageX -
-
- // Click offset (relative to the element)
- this.offset.click.left -
-
- // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.relative.left -
-
- // The offsetParent's offset without borders (offset + border)
- this.offset.parent.left +
- ( this.cssPosition === "fixed" ?
- -this.offset.scroll.left :
- ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
- )
- };
-
- },
-
- _clear: function() {
- this._removeClass( this.helper, "ui-draggable-dragging" );
- if ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {
- this.helper.remove();
- }
- this.helper = null;
- this.cancelHelperRemoval = false;
- if ( this.destroyOnClear ) {
- this.destroy();
- }
- },
-
- // From now on bulk stuff - mainly helpers
-
- _trigger: function( type, event, ui ) {
- ui = ui || this._uiHash();
- $.ui.plugin.call( this, type, [ event, ui, this ], true );
-
- // Absolute position and offset (see #6884 ) have to be recalculated after plugins
- if ( /^(drag|start|stop)/.test( type ) ) {
- this.positionAbs = this._convertPositionTo( "absolute" );
- ui.offset = this.positionAbs;
- }
- return $.Widget.prototype._trigger.call( this, type, event, ui );
- },
-
- plugins: {},
-
- _uiHash: function() {
- return {
- helper: this.helper,
- position: this.position,
- originalPosition: this.originalPosition,
- offset: this.positionAbs
- };
- }
-
-} );
-
-$.ui.plugin.add( "draggable", "connectToSortable", {
- start: function( event, ui, draggable ) {
- var uiSortable = $.extend( {}, ui, {
- item: draggable.element
- } );
-
- draggable.sortables = [];
- $( draggable.options.connectToSortable ).each( function() {
- var sortable = $( this ).sortable( "instance" );
-
- if ( sortable && !sortable.options.disabled ) {
- draggable.sortables.push( sortable );
-
- // RefreshPositions is called at drag start to refresh the containerCache
- // which is used in drag. This ensures it's initialized and synchronized
- // with any changes that might have happened on the page since initialization.
- sortable.refreshPositions();
- sortable._trigger( "activate", event, uiSortable );
- }
- } );
- },
- stop: function( event, ui, draggable ) {
- var uiSortable = $.extend( {}, ui, {
- item: draggable.element
- } );
-
- draggable.cancelHelperRemoval = false;
-
- $.each( draggable.sortables, function() {
- var sortable = this;
-
- if ( sortable.isOver ) {
- sortable.isOver = 0;
-
- // Allow this sortable to handle removing the helper
- draggable.cancelHelperRemoval = true;
- sortable.cancelHelperRemoval = false;
-
- // Use _storedCSS To restore properties in the sortable,
- // as this also handles revert (#9675) since the draggable
- // may have modified them in unexpected ways (#8809)
- sortable._storedCSS = {
- position: sortable.placeholder.css( "position" ),
- top: sortable.placeholder.css( "top" ),
- left: sortable.placeholder.css( "left" )
- };
-
- sortable._mouseStop( event );
-
- // Once drag has ended, the sortable should return to using
- // its original helper, not the shared helper from draggable
- sortable.options.helper = sortable.options._helper;
- } else {
-
- // Prevent this Sortable from removing the helper.
- // However, don't set the draggable to remove the helper
- // either as another connected Sortable may yet handle the removal.
- sortable.cancelHelperRemoval = true;
-
- sortable._trigger( "deactivate", event, uiSortable );
- }
- } );
- },
- drag: function( event, ui, draggable ) {
- $.each( draggable.sortables, function() {
- var innermostIntersecting = false,
- sortable = this;
-
- // Copy over variables that sortable's _intersectsWith uses
- sortable.positionAbs = draggable.positionAbs;
- sortable.helperProportions = draggable.helperProportions;
- sortable.offset.click = draggable.offset.click;
-
- if ( sortable._intersectsWith( sortable.containerCache ) ) {
- innermostIntersecting = true;
-
- $.each( draggable.sortables, function() {
-
- // Copy over variables that sortable's _intersectsWith uses
- this.positionAbs = draggable.positionAbs;
- this.helperProportions = draggable.helperProportions;
- this.offset.click = draggable.offset.click;
-
- if ( this !== sortable &&
- this._intersectsWith( this.containerCache ) &&
- $.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
- innermostIntersecting = false;
- }
-
- return innermostIntersecting;
- } );
- }
-
- if ( innermostIntersecting ) {
-
- // If it intersects, we use a little isOver variable and set it once,
- // so that the move-in stuff gets fired only once.
- if ( !sortable.isOver ) {
- sortable.isOver = 1;
-
- // Store draggable's parent in case we need to reappend to it later.
- draggable._parent = ui.helper.parent();
-
- sortable.currentItem = ui.helper
- .appendTo( sortable.element )
- .data( "ui-sortable-item", true );
-
- // Store helper option to later restore it
- sortable.options._helper = sortable.options.helper;
-
- sortable.options.helper = function() {
- return ui.helper[ 0 ];
- };
-
- // Fire the start events of the sortable with our passed browser event,
- // and our own helper (so it doesn't create a new one)
- event.target = sortable.currentItem[ 0 ];
- sortable._mouseCapture( event, true );
- sortable._mouseStart( event, true, true );
-
- // Because the browser event is way off the new appended portlet,
- // modify necessary variables to reflect the changes
- sortable.offset.click.top = draggable.offset.click.top;
- sortable.offset.click.left = draggable.offset.click.left;
- sortable.offset.parent.left -= draggable.offset.parent.left -
- sortable.offset.parent.left;
- sortable.offset.parent.top -= draggable.offset.parent.top -
- sortable.offset.parent.top;
-
- draggable._trigger( "toSortable", event );
-
- // Inform draggable that the helper is in a valid drop zone,
- // used solely in the revert option to handle "valid/invalid".
- draggable.dropped = sortable.element;
-
- // Need to refreshPositions of all sortables in the case that
- // adding to one sortable changes the location of the other sortables (#9675)
- $.each( draggable.sortables, function() {
- this.refreshPositions();
- } );
-
- // Hack so receive/update callbacks work (mostly)
- draggable.currentItem = draggable.element;
- sortable.fromOutside = draggable;
- }
-
- if ( sortable.currentItem ) {
- sortable._mouseDrag( event );
-
- // Copy the sortable's position because the draggable's can potentially reflect
- // a relative position, while sortable is always absolute, which the dragged
- // element has now become. (#8809)
- ui.position = sortable.position;
- }
- } else {
-
- // If it doesn't intersect with the sortable, and it intersected before,
- // we fake the drag stop of the sortable, but make sure it doesn't remove
- // the helper by using cancelHelperRemoval.
- if ( sortable.isOver ) {
-
- sortable.isOver = 0;
- sortable.cancelHelperRemoval = true;
-
- // Calling sortable's mouseStop would trigger a revert,
- // so revert must be temporarily false until after mouseStop is called.
- sortable.options._revert = sortable.options.revert;
- sortable.options.revert = false;
-
- sortable._trigger( "out", event, sortable._uiHash( sortable ) );
- sortable._mouseStop( event, true );
-
- // Restore sortable behaviors that were modfied
- // when the draggable entered the sortable area (#9481)
- sortable.options.revert = sortable.options._revert;
- sortable.options.helper = sortable.options._helper;
-
- if ( sortable.placeholder ) {
- sortable.placeholder.remove();
- }
-
- // Restore and recalculate the draggable's offset considering the sortable
- // may have modified them in unexpected ways. (#8809, #10669)
- ui.helper.appendTo( draggable._parent );
- draggable._refreshOffsets( event );
- ui.position = draggable._generatePosition( event, true );
-
- draggable._trigger( "fromSortable", event );
-
- // Inform draggable that the helper is no longer in a valid drop zone
- draggable.dropped = false;
-
- // Need to refreshPositions of all sortables just in case removing
- // from one sortable changes the location of other sortables (#9675)
- $.each( draggable.sortables, function() {
- this.refreshPositions();
- } );
- }
- }
- } );
- }
-} );
-
-$.ui.plugin.add( "draggable", "cursor", {
- start: function( event, ui, instance ) {
- var t = $( "body" ),
- o = instance.options;
-
- if ( t.css( "cursor" ) ) {
- o._cursor = t.css( "cursor" );
- }
- t.css( "cursor", o.cursor );
- },
- stop: function( event, ui, instance ) {
- var o = instance.options;
- if ( o._cursor ) {
- $( "body" ).css( "cursor", o._cursor );
- }
- }
-} );
-
-$.ui.plugin.add( "draggable", "opacity", {
- start: function( event, ui, instance ) {
- var t = $( ui.helper ),
- o = instance.options;
- if ( t.css( "opacity" ) ) {
- o._opacity = t.css( "opacity" );
- }
- t.css( "opacity", o.opacity );
- },
- stop: function( event, ui, instance ) {
- var o = instance.options;
- if ( o._opacity ) {
- $( ui.helper ).css( "opacity", o._opacity );
- }
- }
-} );
-
-$.ui.plugin.add( "draggable", "scroll", {
- start: function( event, ui, i ) {
- if ( !i.scrollParentNotHidden ) {
- i.scrollParentNotHidden = i.helper.scrollParent( false );
- }
-
- if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&
- i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
- i.overflowOffset = i.scrollParentNotHidden.offset();
- }
- },
- drag: function( event, ui, i ) {
-
- var o = i.options,
- scrolled = false,
- scrollParent = i.scrollParentNotHidden[ 0 ],
- document = i.document[ 0 ];
-
- if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
- if ( !o.axis || o.axis !== "x" ) {
- if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <
- o.scrollSensitivity ) {
- scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
- } else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
- scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
- }
- }
-
- if ( !o.axis || o.axis !== "y" ) {
- if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <
- o.scrollSensitivity ) {
- scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
- } else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
- scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
- }
- }
-
- } else {
-
- if ( !o.axis || o.axis !== "x" ) {
- if ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {
- scrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );
- } else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <
- o.scrollSensitivity ) {
- scrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );
- }
- }
-
- if ( !o.axis || o.axis !== "y" ) {
- if ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {
- scrolled = $( document ).scrollLeft(
- $( document ).scrollLeft() - o.scrollSpeed
- );
- } else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <
- o.scrollSensitivity ) {
- scrolled = $( document ).scrollLeft(
- $( document ).scrollLeft() + o.scrollSpeed
- );
- }
- }
-
- }
-
- if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {
- $.ui.ddmanager.prepareOffsets( i, event );
- }
-
- }
-} );
-
-$.ui.plugin.add( "draggable", "snap", {
- start: function( event, ui, i ) {
-
- var o = i.options;
-
- i.snapElements = [];
-
- $( o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap )
- .each( function() {
- var $t = $( this ),
- $o = $t.offset();
- if ( this !== i.element[ 0 ] ) {
- i.snapElements.push( {
- item: this,
- width: $t.outerWidth(), height: $t.outerHeight(),
- top: $o.top, left: $o.left
- } );
- }
- } );
-
- },
- drag: function( event, ui, inst ) {
-
- var ts, bs, ls, rs, l, r, t, b, i, first,
- o = inst.options,
- d = o.snapTolerance,
- x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
- y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
-
- for ( i = inst.snapElements.length - 1; i >= 0; i-- ) {
-
- l = inst.snapElements[ i ].left - inst.margins.left;
- r = l + inst.snapElements[ i ].width;
- t = inst.snapElements[ i ].top - inst.margins.top;
- b = t + inst.snapElements[ i ].height;
-
- if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||
- !$.contains( inst.snapElements[ i ].item.ownerDocument,
- inst.snapElements[ i ].item ) ) {
- if ( inst.snapElements[ i ].snapping ) {
- ( inst.options.snap.release &&
- inst.options.snap.release.call(
- inst.element,
- event,
- $.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )
- ) );
- }
- inst.snapElements[ i ].snapping = false;
- continue;
- }
-
- if ( o.snapMode !== "inner" ) {
- ts = Math.abs( t - y2 ) <= d;
- bs = Math.abs( b - y1 ) <= d;
- ls = Math.abs( l - x2 ) <= d;
- rs = Math.abs( r - x1 ) <= d;
- if ( ts ) {
- ui.position.top = inst._convertPositionTo( "relative", {
- top: t - inst.helperProportions.height,
- left: 0
- } ).top;
- }
- if ( bs ) {
- ui.position.top = inst._convertPositionTo( "relative", {
- top: b,
- left: 0
- } ).top;
- }
- if ( ls ) {
- ui.position.left = inst._convertPositionTo( "relative", {
- top: 0,
- left: l - inst.helperProportions.width
- } ).left;
- }
- if ( rs ) {
- ui.position.left = inst._convertPositionTo( "relative", {
- top: 0,
- left: r
- } ).left;
- }
- }
-
- first = ( ts || bs || ls || rs );
-
- if ( o.snapMode !== "outer" ) {
- ts = Math.abs( t - y1 ) <= d;
- bs = Math.abs( b - y2 ) <= d;
- ls = Math.abs( l - x1 ) <= d;
- rs = Math.abs( r - x2 ) <= d;
- if ( ts ) {
- ui.position.top = inst._convertPositionTo( "relative", {
- top: t,
- left: 0
- } ).top;
- }
- if ( bs ) {
- ui.position.top = inst._convertPositionTo( "relative", {
- top: b - inst.helperProportions.height,
- left: 0
- } ).top;
- }
- if ( ls ) {
- ui.position.left = inst._convertPositionTo( "relative", {
- top: 0,
- left: l
- } ).left;
- }
- if ( rs ) {
- ui.position.left = inst._convertPositionTo( "relative", {
- top: 0,
- left: r - inst.helperProportions.width
- } ).left;
- }
- }
-
- if ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {
- ( inst.options.snap.snap &&
- inst.options.snap.snap.call(
- inst.element,
- event,
- $.extend( inst._uiHash(), {
- snapItem: inst.snapElements[ i ].item
- } ) ) );
- }
- inst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );
-
- }
-
- }
-} );
-
-$.ui.plugin.add( "draggable", "stack", {
- start: function( event, ui, instance ) {
- var min,
- o = instance.options,
- group = $.makeArray( $( o.stack ) ).sort( function( a, b ) {
- return ( parseInt( $( a ).css( "zIndex" ), 10 ) || 0 ) -
- ( parseInt( $( b ).css( "zIndex" ), 10 ) || 0 );
- } );
-
- if ( !group.length ) { return; }
-
- min = parseInt( $( group[ 0 ] ).css( "zIndex" ), 10 ) || 0;
- $( group ).each( function( i ) {
- $( this ).css( "zIndex", min + i );
- } );
- this.css( "zIndex", ( min + group.length ) );
- }
-} );
-
-$.ui.plugin.add( "draggable", "zIndex", {
- start: function( event, ui, instance ) {
- var t = $( ui.helper ),
- o = instance.options;
-
- if ( t.css( "zIndex" ) ) {
- o._zIndex = t.css( "zIndex" );
- }
- t.css( "zIndex", o.zIndex );
- },
- stop: function( event, ui, instance ) {
- var o = instance.options;
-
- if ( o._zIndex ) {
- $( ui.helper ).css( "zIndex", o._zIndex );
- }
- }
-} );
-
-var widgetsDraggable = $.ui.draggable;
-
-
-/*!
- * jQuery UI Resizable 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Resizable
-//>>group: Interactions
-//>>description: Enables resize functionality for any element.
-//>>docs: http://api.jqueryui.com/resizable/
-//>>demos: http://jqueryui.com/resizable/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/resizable.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-$.widget( "ui.resizable", $.ui.mouse, {
- version: "1.12.1",
- widgetEventPrefix: "resize",
- options: {
- alsoResize: false,
- animate: false,
- animateDuration: "slow",
- animateEasing: "swing",
- aspectRatio: false,
- autoHide: false,
- classes: {
- "ui-resizable-se": "ui-icon ui-icon-gripsmall-diagonal-se"
- },
- containment: false,
- ghost: false,
- grid: false,
- handles: "e,s,se",
- helper: false,
- maxHeight: null,
- maxWidth: null,
- minHeight: 10,
- minWidth: 10,
-
- // See #7960
- zIndex: 90,
-
- // Callbacks
- resize: null,
- start: null,
- stop: null
- },
-
- _num: function( value ) {
- return parseFloat( value ) || 0;
- },
-
- _isNumber: function( value ) {
- return !isNaN( parseFloat( value ) );
- },
-
- _hasScroll: function( el, a ) {
-
- if ( $( el ).css( "overflow" ) === "hidden" ) {
- return false;
- }
-
- var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
- has = false;
-
- if ( el[ scroll ] > 0 ) {
- return true;
- }
-
- // TODO: determine which cases actually cause this to happen
- // if the element doesn't have the scroll set, see if it's possible to
- // set the scroll
- el[ scroll ] = 1;
- has = ( el[ scroll ] > 0 );
- el[ scroll ] = 0;
- return has;
- },
-
- _create: function() {
-
- var margins,
- o = this.options,
- that = this;
- this._addClass( "ui-resizable" );
-
- $.extend( this, {
- _aspectRatio: !!( o.aspectRatio ),
- aspectRatio: o.aspectRatio,
- originalElement: this.element,
- _proportionallyResizeElements: [],
- _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
- } );
-
- // Wrap the element if it cannot hold child nodes
- if ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {
-
- this.element.wrap(
- $( "<div class='ui-wrapper' style='overflow: hidden;'></div>" ).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 = true;
-
- margins = {
- marginTop: this.originalElement.css( "marginTop" ),
- marginRight: this.originalElement.css( "marginRight" ),
- marginBottom: this.originalElement.css( "marginBottom" ),
- marginLeft: this.originalElement.css( "marginLeft" )
- };
-
- this.element.css( margins );
- this.originalElement.css( "margin", 0 );
-
- // support: Safari
- // Prevent Safari textarea resize
- this.originalResizeStyle = this.originalElement.css( "resize" );
- this.originalElement.css( "resize", "none" );
-
- this._proportionallyResizeElements.push( this.originalElement.css( {
- position: "static",
- zoom: 1,
- display: "block"
- } ) );
-
- // Support: IE9
- // avoid IE jump (hard set the margin)
- this.originalElement.css( margins );
-
- this._proportionallyResize();
- }
-
- this._setupHandles();
-
- if ( o.autoHide ) {
- $( this.element )
- .on( "mouseenter", function() {
- if ( o.disabled ) {
- return;
- }
- that._removeClass( "ui-resizable-autohide" );
- that._handles.show();
- } )
- .on( "mouseleave", function() {
- if ( o.disabled ) {
- return;
- }
- if ( !that.resizing ) {
- that._addClass( "ui-resizable-autohide" );
- that._handles.hide();
- }
- } );
- }
-
- this._mouseInit();
- },
-
- _destroy: function() {
-
- this._mouseDestroy();
-
- var wrapper,
- _destroy = function( exp ) {
- $( exp )
- .removeData( "resizable" )
- .removeData( "ui-resizable" )
- .off( ".resizable" )
- .find( ".ui-resizable-handle" )
- .remove();
- };
-
- // TODO: Unwrap at same DOM position
- if ( this.elementIsWrapper ) {
- _destroy( this.element );
- wrapper = this.element;
- this.originalElement.css( {
- position: wrapper.css( "position" ),
- width: wrapper.outerWidth(),
- height: wrapper.outerHeight(),
- top: wrapper.css( "top" ),
- left: wrapper.css( "left" )
- } ).insertAfter( wrapper );
- wrapper.remove();
- }
-
- this.originalElement.css( "resize", this.originalResizeStyle );
- _destroy( this.originalElement );
-
- return this;
- },
-
- _setOption: function( key, value ) {
- this._super( key, value );
-
- switch ( key ) {
- case "handles":
- this._removeHandles();
- this._setupHandles();
- break;
- default:
- break;
- }
- },
-
- _setupHandles: function() {
- var o = this.options, handle, i, n, hname, axis, that = this;
- this.handles = o.handles ||
- ( !$( ".ui-resizable-handle", this.element ).length ?
- "e,s,se" : {
- n: ".ui-resizable-n",
- e: ".ui-resizable-e",
- s: ".ui-resizable-s",
- w: ".ui-resizable-w",
- se: ".ui-resizable-se",
- sw: ".ui-resizable-sw",
- ne: ".ui-resizable-ne",
- nw: ".ui-resizable-nw"
- } );
-
- this._handles = $();
- if ( this.handles.constructor === String ) {
-
- if ( this.handles === "all" ) {
- this.handles = "n,e,s,w,se,sw,ne,nw";
- }
-
- n = this.handles.split( "," );
- this.handles = {};
-
- for ( i = 0; i < n.length; i++ ) {
-
- handle = $.trim( n[ i ] );
- hname = "ui-resizable-" + handle;
- axis = $( "<div>" );
- this._addClass( axis, "ui-resizable-handle " + hname );
-
- axis.css( { zIndex: o.zIndex } );
-
- this.handles[ handle ] = ".ui-resizable-" + handle;
- this.element.append( axis );
- }
-
- }
-
- this._renderAxis = function( target ) {
-
- var i, axis, padPos, padWrapper;
-
- target = target || this.element;
-
- for ( i in this.handles ) {
-
- if ( this.handles[ i ].constructor === String ) {
- this.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();
- } else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {
- this.handles[ i ] = $( this.handles[ i ] );
- this._on( this.handles[ i ], { "mousedown": that._mouseDown } );
- }
-
- if ( this.elementIsWrapper &&
- this.originalElement[ 0 ]
- .nodeName
- .match( /^(textarea|input|select|button)$/i ) ) {
- axis = $( this.handles[ i ], this.element );
-
- padWrapper = /sw|ne|nw|se|n|s/.test( i ) ?
- axis.outerHeight() :
- axis.outerWidth();
-
- padPos = [ "padding",
- /ne|nw|n/.test( i ) ? "Top" :
- /se|sw|s/.test( i ) ? "Bottom" :
- /^e$/.test( i ) ? "Right" : "Left" ].join( "" );
-
- target.css( padPos, padWrapper );
-
- this._proportionallyResize();
- }
-
- this._handles = this._handles.add( this.handles[ i ] );
- }
- };
-
- // TODO: make renderAxis a prototype function
- this._renderAxis( this.element );
-
- this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) );
- this._handles.disableSelection();
-
- this._handles.on( "mouseover", function() {
- if ( !that.resizing ) {
- if ( this.className ) {
- axis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );
- }
- that.axis = axis && axis[ 1 ] ? axis[ 1 ] : "se";
- }
- } );
-
- if ( o.autoHide ) {
- this._handles.hide();
- this._addClass( "ui-resizable-autohide" );
- }
- },
-
- _removeHandles: function() {
- this._handles.remove();
- },
-
- _mouseCapture: function( event ) {
- var i, handle,
- capture = false;
-
- for ( i in this.handles ) {
- handle = $( this.handles[ i ] )[ 0 ];
- if ( handle === event.target || $.contains( handle, event.target ) ) {
- capture = true;
- }
- }
-
- return !this.options.disabled && capture;
- },
-
- _mouseStart: function( event ) {
-
- var curleft, curtop, cursor,
- o = this.options,
- el = this.element;
-
- this.resizing = true;
-
- this._renderProxy();
-
- curleft = this._num( this.helper.css( "left" ) );
- curtop = this._num( this.helper.css( "top" ) );
-
- if ( o.containment ) {
- curleft += $( o.containment ).scrollLeft() || 0;
- curtop += $( o.containment ).scrollTop() || 0;
- }
-
- this.offset = this.helper.offset();
- this.position = { left: curleft, top: curtop };
-
- this.size = this._helper ? {
- width: this.helper.width(),
- height: this.helper.height()
- } : {
- width: el.width(),
- height: el.height()
- };
-
- this.originalSize = this._helper ? {
- width: el.outerWidth(),
- height: el.outerHeight()
- } : {
- width: el.width(),
- height: el.height()
- };
-
- this.sizeDiff = {
- width: el.outerWidth() - el.width(),
- height: el.outerHeight() - el.height()
- };
-
- this.originalPosition = { left: curleft, top: curtop };
- this.originalMousePosition = { left: event.pageX, top: event.pageY };
-
- this.aspectRatio = ( typeof o.aspectRatio === "number" ) ?
- o.aspectRatio :
- ( ( this.originalSize.width / this.originalSize.height ) || 1 );
-
- cursor = $( ".ui-resizable-" + this.axis ).css( "cursor" );
- $( "body" ).css( "cursor", cursor === "auto" ? this.axis + "-resize" : cursor );
-
- this._addClass( "ui-resizable-resizing" );
- this._propagate( "start", event );
- return true;
- },
-
- _mouseDrag: function( event ) {
-
- var data, props,
- smp = this.originalMousePosition,
- a = this.axis,
- dx = ( event.pageX - smp.left ) || 0,
- dy = ( event.pageY - smp.top ) || 0,
- trigger = this._change[ a ];
-
- this._updatePrevProperties();
-
- if ( !trigger ) {
- return false;
- }
-
- data = trigger.apply( this, [ event, dx, dy ] );
-
- this._updateVirtualBoundaries( event.shiftKey );
- if ( this._aspectRatio || event.shiftKey ) {
- data = this._updateRatio( data, event );
- }
-
- data = this._respectSize( data, event );
-
- this._updateCache( data );
-
- this._propagate( "resize", event );
-
- props = this._applyChanges();
-
- if ( !this._helper && this._proportionallyResizeElements.length ) {
- this._proportionallyResize();
- }
-
- if ( !$.isEmptyObject( props ) ) {
- this._updatePrevProperties();
- this._trigger( "resize", event, this.ui() );
- this._applyChanges();
- }
-
- return false;
- },
-
- _mouseStop: function( event ) {
-
- this.resizing = false;
- var pr, ista, soffseth, soffsetw, s, left, top,
- o = this.options, that = this;
-
- if ( this._helper ) {
-
- pr = this._proportionallyResizeElements;
- ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );
- soffseth = ista && this._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height;
- soffsetw = ista ? 0 : that.sizeDiff.width;
-
- s = {
- width: ( that.helper.width() - soffsetw ),
- height: ( that.helper.height() - soffseth )
- };
- left = ( parseFloat( that.element.css( "left" ) ) +
- ( that.position.left - that.originalPosition.left ) ) || null;
- top = ( parseFloat( that.element.css( "top" ) ) +
- ( that.position.top - that.originalPosition.top ) ) || null;
-
- if ( !o.animate ) {
- this.element.css( $.extend( s, { top: top, left: left } ) );
- }
-
- that.helper.height( that.size.height );
- that.helper.width( that.size.width );
-
- if ( this._helper && !o.animate ) {
- this._proportionallyResize();
- }
- }
-
- $( "body" ).css( "cursor", "auto" );
-
- this._removeClass( "ui-resizable-resizing" );
-
- this._propagate( "stop", event );
-
- if ( this._helper ) {
- this.helper.remove();
- }
-
- return false;
-
- },
-
- _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 props = {};
-
- if ( this.position.top !== this.prevPosition.top ) {
- props.top = this.position.top + "px";
- }
- if ( this.position.left !== this.prevPosition.left ) {
- props.left = this.position.left + "px";
- }
- if ( this.size.width !== this.prevSize.width ) {
- props.width = this.size.width + "px";
- }
- if ( this.size.height !== this.prevSize.height ) {
- props.height = this.size.height + "px";
- }
-
- this.helper.css( props );
-
- return props;
- },
-
- _updateVirtualBoundaries: function( forceAspectRatio ) {
- var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
- o = this.options;
-
- b = {
- minWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,
- maxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,
- minHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,
- maxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity
- };
-
- if ( this._aspectRatio || forceAspectRatio ) {
- pMinWidth = b.minHeight * this.aspectRatio;
- pMinHeight = b.minWidth / this.aspectRatio;
- pMaxWidth = b.maxHeight * this.aspectRatio;
- pMaxHeight = b.maxWidth / this.aspectRatio;
-
- if ( pMinWidth > b.minWidth ) {
- b.minWidth = pMinWidth;
- }
- if ( pMinHeight > b.minHeight ) {
- b.minHeight = pMinHeight;
- }
- if ( pMaxWidth < b.maxWidth ) {
- b.maxWidth = pMaxWidth;
- }
- if ( pMaxHeight < b.maxHeight ) {
- b.maxHeight = pMaxHeight;
- }
- }
- this._vBoundaries = b;
- },
-
- _updateCache: function( data ) {
- this.offset = this.helper.offset();
- if ( this._isNumber( data.left ) ) {
- this.position.left = data.left;
- }
- if ( this._isNumber( data.top ) ) {
- this.position.top = data.top;
- }
- if ( this._isNumber( data.height ) ) {
- this.size.height = data.height;
- }
- if ( this._isNumber( data.width ) ) {
- this.size.width = data.width;
- }
- },
-
- _updateRatio: function( data ) {
-
- var cpos = this.position,
- csize = this.size,
- a = this.axis;
-
- if ( this._isNumber( data.height ) ) {
- data.width = ( data.height * this.aspectRatio );
- } else if ( this._isNumber( data.width ) ) {
- data.height = ( data.width / this.aspectRatio );
- }
-
- if ( a === "sw" ) {
- data.left = cpos.left + ( csize.width - data.width );
- data.top = null;
- }
- if ( a === "nw" ) {
- data.top = cpos.top + ( csize.height - data.height );
- data.left = cpos.left + ( csize.width - data.width );
- }
-
- return data;
- },
-
- _respectSize: function( data ) {
-
- var o = this._vBoundaries,
- a = this.axis,
- ismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),
- ismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),
- isminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),
- isminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),
- dw = this.originalPosition.left + this.originalSize.width,
- dh = this.originalPosition.top + this.originalSize.height,
- cw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );
- if ( isminw ) {
- data.width = o.minWidth;
- }
- if ( isminh ) {
- data.height = o.minHeight;
- }
- if ( ismaxw ) {
- data.width = o.maxWidth;
- }
- if ( ismaxh ) {
- data.height = o.maxHeight;
- }
-
- if ( isminw && cw ) {
- data.left = dw - o.minWidth;
- }
- if ( ismaxw && cw ) {
- data.left = dw - o.maxWidth;
- }
- if ( isminh && ch ) {
- data.top = dh - o.minHeight;
- }
- if ( ismaxh && ch ) {
- data.top = dh - o.maxHeight;
- }
-
- // Fixing jump error on top/left - bug #2330
- if ( !data.width && !data.height && !data.left && data.top ) {
- data.top = null;
- } else if ( !data.width && !data.height && !data.top && data.left ) {
- data.left = null;
- }
-
- return data;
- },
-
- _getPaddingPlusBorderDimensions: function( element ) {
- var i = 0,
- widths = [],
- borders = [
- element.css( "borderTopWidth" ),
- element.css( "borderRightWidth" ),
- element.css( "borderBottomWidth" ),
- element.css( "borderLeftWidth" )
- ],
- paddings = [
- element.css( "paddingTop" ),
- element.css( "paddingRight" ),
- element.css( "paddingBottom" ),
- element.css( "paddingLeft" )
- ];
-
- for ( ; i < 4; i++ ) {
- widths[ i ] = ( parseFloat( borders[ i ] ) || 0 );
- widths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );
- }
-
- return {
- height: widths[ 0 ] + widths[ 2 ],
- width: widths[ 1 ] + widths[ 3 ]
- };
- },
-
- _proportionallyResize: function() {
-
- if ( !this._proportionallyResizeElements.length ) {
- return;
- }
-
- var prel,
- i = 0,
- element = this.helper || this.element;
-
- for ( ; i < this._proportionallyResizeElements.length; i++ ) {
-
- prel = this._proportionallyResizeElements[ i ];
-
- // TODO: Seems like a bug to cache this.outerDimensions
- // considering that we are in a loop.
- if ( !this.outerDimensions ) {
- this.outerDimensions = this._getPaddingPlusBorderDimensions( prel );
- }
-
- prel.css( {
- height: ( element.height() - this.outerDimensions.height ) || 0,
- width: ( element.width() - this.outerDimensions.width ) || 0
- } );
-
- }
-
- },
-
- _renderProxy: function() {
-
- var el = this.element, o = this.options;
- this.elementOffset = el.offset();
-
- if ( this._helper ) {
-
- this.helper = this.helper || $( "<div style='overflow:hidden;'></div>" );
-
- 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: ++o.zIndex //TODO: Don't modify option
- } );
-
- this.helper
- .appendTo( "body" )
- .disableSelection();
-
- } else {
- this.helper = this.element;
- }
-
- },
-
- _change: {
- e: function( event, dx ) {
- return { width: this.originalSize.width + dx };
- },
- w: function( event, dx ) {
- var cs = this.originalSize, sp = this.originalPosition;
- return { left: sp.left + dx, width: cs.width - dx };
- },
- n: function( event, dx, dy ) {
- var cs = this.originalSize, sp = this.originalPosition;
- return { top: sp.top + dy, height: cs.height - dy };
- },
- s: function( event, dx, dy ) {
- return { height: this.originalSize.height + dy };
- },
- se: function( event, dx, dy ) {
- return $.extend( this._change.s.apply( this, arguments ),
- this._change.e.apply( this, [ event, dx, dy ] ) );
- },
- sw: function( event, dx, dy ) {
- return $.extend( this._change.s.apply( this, arguments ),
- this._change.w.apply( this, [ event, dx, dy ] ) );
- },
- ne: function( event, dx, dy ) {
- return $.extend( this._change.n.apply( this, arguments ),
- this._change.e.apply( this, [ event, dx, dy ] ) );
- },
- nw: function( event, dx, dy ) {
- return $.extend( this._change.n.apply( this, arguments ),
- this._change.w.apply( this, [ event, dx, dy ] ) );
- }
- },
-
- _propagate: function( n, event ) {
- $.ui.plugin.call( this, n, [ event, this.ui() ] );
- ( n !== "resize" && this._trigger( n, event, this.ui() ) );
- },
-
- plugins: {},
-
- ui: function() {
- return {
- originalElement: this.originalElement,
- element: this.element,
- helper: this.helper,
- position: this.position,
- size: this.size,
- originalSize: this.originalSize,
- originalPosition: this.originalPosition
- };
- }
-
-} );
-
-/*
- * Resizable Extensions
- */
-
-$.ui.plugin.add( "resizable", "animate", {
-
- stop: function( event ) {
- var that = $( this ).resizable( "instance" ),
- o = that.options,
- pr = that._proportionallyResizeElements,
- ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),
- soffseth = ista && that._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height,
- soffsetw = ista ? 0 : that.sizeDiff.width,
- style = {
- width: ( that.size.width - soffsetw ),
- height: ( that.size.height - soffseth )
- },
- left = ( parseFloat( that.element.css( "left" ) ) +
- ( that.position.left - that.originalPosition.left ) ) || null,
- top = ( parseFloat( that.element.css( "top" ) ) +
- ( that.position.top - that.originalPosition.top ) ) || null;
-
- that.element.animate(
- $.extend( style, top && left ? { top: top, left: left } : {} ), {
- duration: o.animateDuration,
- easing: o.animateEasing,
- step: function() {
-
- var data = {
- width: parseFloat( that.element.css( "width" ) ),
- height: parseFloat( that.element.css( "height" ) ),
- top: parseFloat( that.element.css( "top" ) ),
- left: parseFloat( that.element.css( "left" ) )
- };
-
- if ( pr && pr.length ) {
- $( pr[ 0 ] ).css( { width: data.width, height: data.height } );
- }
-
- // Propagating resize, and updating values for each animation step
- that._updateCache( data );
- that._propagate( "resize", event );
-
- }
- }
- );
- }
-
-} );
-
-$.ui.plugin.add( "resizable", "containment", {
-
- start: function() {
- var element, p, co, ch, cw, width, height,
- that = $( this ).resizable( "instance" ),
- o = that.options,
- el = that.element,
- oc = o.containment,
- ce = ( oc instanceof $ ) ?
- oc.get( 0 ) :
- ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;
-
- if ( !ce ) {
- return;
- }
-
- that.containerElement = $( ce );
-
- if ( /document/.test( oc ) || oc === document ) {
- that.containerOffset = {
- left: 0,
- top: 0
- };
- that.containerPosition = {
- left: 0,
- top: 0
- };
-
- that.parentData = {
- element: $( document ),
- left: 0,
- top: 0,
- width: $( document ).width(),
- height: $( document ).height() || document.body.parentNode.scrollHeight
- };
- } else {
- element = $( ce );
- p = [];
- $( [ "Top", "Right", "Left", "Bottom" ] ).each( function( i, name ) {
- p[ i ] = that._num( element.css( "padding" + name ) );
- } );
-
- that.containerOffset = element.offset();
- that.containerPosition = element.position();
- that.containerSize = {
- height: ( element.innerHeight() - p[ 3 ] ),
- width: ( element.innerWidth() - p[ 1 ] )
- };
-
- co = that.containerOffset;
- ch = that.containerSize.height;
- cw = that.containerSize.width;
- width = ( that._hasScroll ( ce, "left" ) ? ce.scrollWidth : cw );
- height = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;
-
- that.parentData = {
- element: ce,
- left: co.left,
- top: co.top,
- width: width,
- height: height
- };
- }
- },
-
- resize: function( event ) {
- var woset, hoset, isParent, isOffsetRelative,
- that = $( this ).resizable( "instance" ),
- o = that.options,
- co = that.containerOffset,
- cp = that.position,
- pRatio = that._aspectRatio || event.shiftKey,
- cop = {
- top: 0,
- left: 0
- },
- ce = that.containerElement,
- continueResize = true;
-
- if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) {
- cop = co;
- }
-
- if ( cp.left < ( that._helper ? co.left : 0 ) ) {
- that.size.width = that.size.width +
- ( that._helper ?
- ( that.position.left - co.left ) :
- ( that.position.left - cop.left ) );
-
- if ( pRatio ) {
- that.size.height = that.size.width / that.aspectRatio;
- continueResize = false;
- }
- that.position.left = o.helper ? co.left : 0;
- }
-
- if ( cp.top < ( that._helper ? co.top : 0 ) ) {
- that.size.height = that.size.height +
- ( that._helper ?
- ( that.position.top - co.top ) :
- that.position.top );
-
- if ( pRatio ) {
- that.size.width = that.size.height * that.aspectRatio;
- continueResize = false;
- }
- that.position.top = that._helper ? co.top : 0;
- }
-
- isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );
- isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );
-
- if ( isParent && isOffsetRelative ) {
- that.offset.left = that.parentData.left + that.position.left;
- that.offset.top = that.parentData.top + that.position.top;
- } else {
- that.offset.left = that.element.offset().left;
- that.offset.top = that.element.offset().top;
- }
-
- woset = Math.abs( that.sizeDiff.width +
- ( that._helper ?
- that.offset.left - cop.left :
- ( that.offset.left - co.left ) ) );
-
- hoset = Math.abs( that.sizeDiff.height +
- ( that._helper ?
- that.offset.top - cop.top :
- ( that.offset.top - co.top ) ) );
-
- if ( woset + that.size.width >= that.parentData.width ) {
- that.size.width = that.parentData.width - woset;
- if ( pRatio ) {
- that.size.height = that.size.width / that.aspectRatio;
- continueResize = false;
- }
- }
-
- if ( hoset + that.size.height >= that.parentData.height ) {
- that.size.height = that.parentData.height - hoset;
- if ( pRatio ) {
- that.size.width = that.size.height * that.aspectRatio;
- continueResize = false;
- }
- }
-
- if ( !continueResize ) {
- that.position.left = that.prevPosition.left;
- that.position.top = that.prevPosition.top;
- that.size.width = that.prevSize.width;
- that.size.height = that.prevSize.height;
- }
- },
-
- stop: function() {
- var that = $( this ).resizable( "instance" ),
- o = that.options,
- co = that.containerOffset,
- cop = that.containerPosition,
- ce = that.containerElement,
- helper = $( that.helper ),
- ho = helper.offset(),
- w = helper.outerWidth() - that.sizeDiff.width,
- h = helper.outerHeight() - that.sizeDiff.height;
-
- if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) {
- $( this ).css( {
- left: ho.left - cop.left - co.left,
- width: w,
- height: h
- } );
- }
-
- if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) {
- $( this ).css( {
- left: ho.left - cop.left - co.left,
- width: w,
- height: h
- } );
- }
- }
-} );
-
-$.ui.plugin.add( "resizable", "alsoResize", {
-
- start: function() {
- var that = $( this ).resizable( "instance" ),
- o = that.options;
-
- $( o.alsoResize ).each( function() {
- var el = $( this );
- el.data( "ui-resizable-alsoresize", {
- width: parseFloat( el.width() ), height: parseFloat( el.height() ),
- left: parseFloat( el.css( "left" ) ), top: parseFloat( el.css( "top" ) )
- } );
- } );
- },
-
- resize: function( event, ui ) {
- var that = $( this ).resizable( "instance" ),
- o = that.options,
- os = that.originalSize,
- op = that.originalPosition,
- delta = {
- height: ( that.size.height - os.height ) || 0,
- width: ( that.size.width - os.width ) || 0,
- top: ( that.position.top - op.top ) || 0,
- left: ( that.position.left - op.left ) || 0
- };
-
- $( o.alsoResize ).each( function() {
- var el = $( this ), start = $( this ).data( "ui-resizable-alsoresize" ), style = {},
- css = el.parents( ui.originalElement[ 0 ] ).length ?
- [ "width", "height" ] :
- [ "width", "height", "top", "left" ];
-
- $.each( css, function( i, prop ) {
- var sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );
- if ( sum && sum >= 0 ) {
- style[ prop ] = sum || null;
- }
- } );
-
- el.css( style );
- } );
- },
-
- stop: function() {
- $( this ).removeData( "ui-resizable-alsoresize" );
- }
-} );
-
-$.ui.plugin.add( "resizable", "ghost", {
-
- start: function() {
-
- var that = $( this ).resizable( "instance" ), cs = that.size;
-
- that.ghost = that.originalElement.clone();
- that.ghost.css( {
- opacity: 0.25,
- display: "block",
- position: "relative",
- height: cs.height,
- width: cs.width,
- margin: 0,
- left: 0,
- top: 0
- } );
-
- that._addClass( that.ghost, "ui-resizable-ghost" );
-
- // DEPRECATED
- // TODO: remove after 1.12
- if ( $.uiBackCompat !== false && typeof that.options.ghost === "string" ) {
-
- // Ghost option
- that.ghost.addClass( this.options.ghost );
- }
-
- that.ghost.appendTo( that.helper );
-
- },
-
- resize: function() {
- var that = $( this ).resizable( "instance" );
- if ( that.ghost ) {
- that.ghost.css( {
- position: "relative",
- height: that.size.height,
- width: that.size.width
- } );
- }
- },
-
- stop: function() {
- var that = $( this ).resizable( "instance" );
- if ( that.ghost && that.helper ) {
- that.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );
- }
- }
-
-} );
-
-$.ui.plugin.add( "resizable", "grid", {
-
- resize: function() {
- var outerDimensions,
- that = $( this ).resizable( "instance" ),
- o = that.options,
- cs = that.size,
- os = that.originalSize,
- op = that.originalPosition,
- a = that.axis,
- grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,
- gridX = ( grid[ 0 ] || 1 ),
- gridY = ( grid[ 1 ] || 1 ),
- ox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,
- oy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,
- newWidth = os.width + ox,
- newHeight = os.height + oy,
- isMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),
- isMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),
- isMinWidth = o.minWidth && ( o.minWidth > newWidth ),
- isMinHeight = o.minHeight && ( o.minHeight > newHeight );
-
- o.grid = grid;
-
- if ( isMinWidth ) {
- newWidth += gridX;
- }
- if ( isMinHeight ) {
- newHeight += gridY;
- }
- if ( isMaxWidth ) {
- newWidth -= gridX;
- }
- if ( isMaxHeight ) {
- newHeight -= gridY;
- }
-
- if ( /^(se|s|e)$/.test( a ) ) {
- that.size.width = newWidth;
- that.size.height = newHeight;
- } else if ( /^(ne)$/.test( a ) ) {
- that.size.width = newWidth;
- that.size.height = newHeight;
- that.position.top = op.top - oy;
- } else if ( /^(sw)$/.test( a ) ) {
- that.size.width = newWidth;
- that.size.height = newHeight;
- that.position.left = op.left - ox;
- } else {
- if ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {
- outerDimensions = that._getPaddingPlusBorderDimensions( this );
- }
-
- if ( newHeight - gridY > 0 ) {
- that.size.height = newHeight;
- that.position.top = op.top - oy;
- } else {
- newHeight = gridY - outerDimensions.height;
- that.size.height = newHeight;
- that.position.top = op.top + os.height - newHeight;
- }
- if ( newWidth - gridX > 0 ) {
- that.size.width = newWidth;
- that.position.left = op.left - ox;
- } else {
- newWidth = gridX - outerDimensions.width;
- that.size.width = newWidth;
- that.position.left = op.left + os.width - newWidth;
- }
- }
- }
-
-} );
-
-var widgetsResizable = $.ui.resizable;
-
-
-/*!
- * jQuery UI Dialog 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Dialog
-//>>group: Widgets
-//>>description: Displays customizable dialog windows.
-//>>docs: http://api.jqueryui.com/dialog/
-//>>demos: http://jqueryui.com/dialog/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/dialog.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-$.widget( "ui.dialog", {
- version: "1.12.1",
- options: {
- appendTo: "body",
- autoOpen: true,
- buttons: [],
- classes: {
- "ui-dialog": "ui-corner-all",
- "ui-dialog-titlebar": "ui-corner-all"
- },
- closeOnEscape: true,
- closeText: "Close",
- draggable: true,
- hide: null,
- height: "auto",
- maxHeight: null,
- maxWidth: null,
- minHeight: 150,
- minWidth: 150,
- modal: false,
- position: {
- my: "center",
- at: "center",
- of: window,
- collision: "fit",
-
- // Ensure the titlebar is always visible
- using: function( pos ) {
- var topOffset = $( this ).css( pos ).offset().top;
- if ( topOffset < 0 ) {
- $( this ).css( "top", pos.top - topOffset );
- }
- }
- },
- resizable: true,
- show: null,
- title: null,
- width: 300,
-
- // Callbacks
- beforeClose: null,
- close: null,
- drag: null,
- dragStart: null,
- dragStop: null,
- focus: null,
- open: null,
- resize: null,
- resizeStart: null,
- resizeStop: null
- },
-
- sizeRelatedOptions: {
- buttons: true,
- height: true,
- maxHeight: true,
- maxWidth: true,
- minHeight: true,
- minWidth: true,
- width: true
- },
-
- resizableRelatedOptions: {
- maxHeight: true,
- maxWidth: true,
- minHeight: true,
- minWidth: true
- },
-
- _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" );
- if ( this.options.title == null && this.originalTitle != null ) {
- this.options.title = this.originalTitle;
- }
-
- // Dialogs can't be disabled
- if ( this.options.disabled ) {
- this.options.disabled = false;
- }
-
- this._createWrapper();
-
- this.element
- .show()
- .removeAttr( "title" )
- .appendTo( this.uiDialog );
-
- this._addClass( "ui-dialog-content", "ui-widget-content" );
-
- this._createTitlebar();
- this._createButtonPane();
-
- if ( this.options.draggable && $.fn.draggable ) {
- this._makeDraggable();
- }
- if ( this.options.resizable && $.fn.resizable ) {
- this._makeResizable();
- }
-
- this._isOpen = false;
-
- this._trackFocus();
- },
-
- _init: function() {
- if ( this.options.autoOpen ) {
- this.open();
- }
- },
-
- _appendTo: function() {
- var element = this.options.appendTo;
- if ( element && ( element.jquery || element.nodeType ) ) {
- return $( element );
- }
- return this.document.find( element || "body" ).eq( 0 );
- },
-
- _destroy: function() {
- var next,
- originalPosition = this.originalPosition;
-
- this._untrackInstance();
- this._destroyOverlay();
-
- this.element
- .removeUniqueId()
- .css( this.originalCss )
-
- // Without detaching first, the following becomes really slow
- .detach();
-
- this.uiDialog.remove();
-
- if ( this.originalTitle ) {
- this.element.attr( "title", this.originalTitle );
- }
-
- next = originalPosition.parent.children().eq( originalPosition.index );
-
- // Don't try to place the dialog next to itself (#8613)
- if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
- next.before( this.element );
- } else {
- originalPosition.parent.append( this.element );
- }
- },
-
- widget: function() {
- return this.uiDialog;
- },
-
- disable: $.noop,
- enable: $.noop,
-
- close: function( event ) {
- var that = this;
-
- if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
- return;
- }
-
- this._isOpen = false;
- this._focusedElement = null;
- this._destroyOverlay();
- this._untrackInstance();
-
- if ( !this.opener.filter( ":focusable" ).trigger( "focus" ).length ) {
-
- // Hiding a focused element doesn't trigger blur in WebKit
- // so in case we have nothing to focus on, explicitly blur the active element
- // https://bugs.webkit.org/show_bug.cgi?id=47182
- $.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) );
- }
-
- this._hide( this.uiDialog, this.options.hide, function() {
- that._trigger( "close", event );
- } );
- },
-
- isOpen: function() {
- return this._isOpen;
- },
-
- moveToTop: function() {
- this._moveToTop();
- },
-
- _moveToTop: function( event, silent ) {
- var moved = false,
- zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map( function() {
- return +$( this ).css( "z-index" );
- } ).get(),
- zIndexMax = Math.max.apply( null, zIndices );
-
- if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
- this.uiDialog.css( "z-index", zIndexMax + 1 );
- moved = true;
- }
-
- if ( moved && !silent ) {
- this._trigger( "focus", event );
- }
- return moved;
- },
-
- open: function() {
- var that = this;
- if ( this._isOpen ) {
- if ( this._moveToTop() ) {
- this._focusTabbable();
- }
- return;
- }
-
- this._isOpen = true;
- this.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) );
-
- this._size();
- this._position();
- this._createOverlay();
- this._moveToTop( null, true );
-
- // Ensure the overlay is moved to the top with the dialog, but only when
- // opening. The overlay shouldn't move after the dialog is open so that
- // modeless dialogs opened after the modal dialog stack properly.
- if ( this.overlay ) {
- this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );
- }
-
- this._show( this.uiDialog, this.options.show, function() {
- that._focusTabbable();
- that._trigger( "focus" );
- } );
-
- // Track the dialog immediately upon openening in case a focus event
- // somehow occurs outside of the dialog before an element inside the
- // dialog is focused (#10152)
- this._makeFocusTarget();
-
- this._trigger( "open" );
- },
-
- _focusTabbable: function() {
-
- // Set focus to the first match:
- // 1. An element that was focused previously
- // 2. First element inside the dialog matching [autofocus]
- // 3. Tabbable element inside the content element
- // 4. Tabbable element inside the buttonpane
- // 5. The close button
- // 6. The dialog itself
- var hasFocus = this._focusedElement;
- if ( !hasFocus ) {
- hasFocus = this.element.find( "[autofocus]" );
- }
- if ( !hasFocus.length ) {
- hasFocus = this.element.find( ":tabbable" );
- }
- if ( !hasFocus.length ) {
- hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
- }
- if ( !hasFocus.length ) {
- hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );
- }
- if ( !hasFocus.length ) {
- hasFocus = this.uiDialog;
- }
- hasFocus.eq( 0 ).trigger( "focus" );
- },
-
- _keepFocus: function( event ) {
- function checkFocus() {
- var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
- isActive = this.uiDialog[ 0 ] === activeElement ||
- $.contains( this.uiDialog[ 0 ], activeElement );
- if ( !isActive ) {
- this._focusTabbable();
- }
- }
- event.preventDefault();
- checkFocus.call( this );
-
- // support: IE
- // IE <= 8 doesn't prevent moving focus even with event.preventDefault()
- // so we check again later
- this._delay( checkFocus );
- },
-
- _createWrapper: function() {
- this.uiDialog = $( "<div>" )
- .hide()
- .attr( {
-
- // Setting tabIndex makes the div focusable
- 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( event ) {
- if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
- event.keyCode === $.ui.keyCode.ESCAPE ) {
- event.preventDefault();
- this.close( event );
- return;
- }
-
- // Prevent tabbing out of dialogs
- if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {
- return;
- }
- var tabbables = this.uiDialog.find( ":tabbable" ),
- first = tabbables.filter( ":first" ),
- last = tabbables.filter( ":last" );
-
- if ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&
- !event.shiftKey ) {
- this._delay( function() {
- first.trigger( "focus" );
- } );
- event.preventDefault();
- } else if ( ( event.target === first[ 0 ] ||
- event.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {
- this._delay( function() {
- last.trigger( "focus" );
- } );
- event.preventDefault();
- }
- },
- mousedown: function( event ) {
- if ( this._moveToTop( event ) ) {
- this._focusTabbable();
- }
- }
- } );
-
- // We assume that any existing aria-describedby attribute means
- // that the dialog content is marked up properly
- // otherwise we brute force the content as the description
- if ( !this.element.find( "[aria-describedby]" ).length ) {
- this.uiDialog.attr( {
- "aria-describedby": this.element.uniqueId().attr( "id" )
- } );
- }
- },
-
- _createTitlebar: function() {
- var uiDialogTitle;
-
- this.uiDialogTitlebar = $( "<div>" );
- this._addClass( this.uiDialogTitlebar,
- "ui-dialog-titlebar", "ui-widget-header ui-helper-clearfix" );
- this._on( this.uiDialogTitlebar, {
- mousedown: function( event ) {
-
- // Don't prevent click on close button (#8838)
- // Focusing a dialog that is partially scrolled out of view
- // causes the browser to scroll it into view, preventing the click event
- if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {
-
- // Dialog isn't getting focus when dragging (#8063)
- this.uiDialog.trigger( "focus" );
- }
- }
- } );
-
- // Support: IE
- // Use type="button" to prevent enter keypresses in textboxes from closing the
- // dialog in IE (#9312)
- this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
- .button( {
- label: $( "<a>" ).text( this.options.closeText ).html(),
- icon: "ui-icon-closethick",
- showLabel: false
- } )
- .appendTo( this.uiDialogTitlebar );
-
- this._addClass( this.uiDialogTitlebarClose, "ui-dialog-titlebar-close" );
- this._on( this.uiDialogTitlebarClose, {
- click: function( event ) {
- event.preventDefault();
- this.close( event );
- }
- } );
-
- uiDialogTitle = $( "<span>" ).uniqueId().prependTo( this.uiDialogTitlebar );
- this._addClass( uiDialogTitle, "ui-dialog-title" );
- this._title( uiDialogTitle );
-
- this.uiDialogTitlebar.prependTo( this.uiDialog );
-
- this.uiDialog.attr( {
- "aria-labelledby": uiDialogTitle.attr( "id" )
- } );
- },
-
- _title: function( title ) {
- if ( this.options.title ) {
- title.text( this.options.title );
- } else {
- title.html( "&#160;" );
- }
- },
-
- _createButtonPane: function() {
- this.uiDialogButtonPane = $( "<div>" );
- this._addClass( this.uiDialogButtonPane, "ui-dialog-buttonpane",
- "ui-widget-content ui-helper-clearfix" );
-
- this.uiButtonSet = $( "<div>" )
- .appendTo( this.uiDialogButtonPane );
- this._addClass( this.uiButtonSet, "ui-dialog-buttonset" );
-
- this._createButtons();
- },
-
- _createButtons: function() {
- var that = this,
- buttons = this.options.buttons;
-
- // If we already have a button pane, remove it
- this.uiDialogButtonPane.remove();
- this.uiButtonSet.empty();
-
- if ( $.isEmptyObject( buttons ) || ( $.isArray( buttons ) && !buttons.length ) ) {
- this._removeClass( this.uiDialog, "ui-dialog-buttons" );
- return;
- }
-
- $.each( buttons, function( name, props ) {
- var click, buttonOptions;
- props = $.isFunction( props ) ?
- { click: props, text: name } :
- props;
-
- // Default to a non-submitting button
- props = $.extend( { type: "button" }, props );
-
- // Change the context for the click callback to be the main element
- click = props.click;
- buttonOptions = {
- icon: props.icon,
- iconPosition: props.iconPosition,
- showLabel: props.showLabel,
-
- // Deprecated options
- icons: props.icons,
- text: props.text
- };
-
- delete props.click;
- delete props.icon;
- delete props.iconPosition;
- delete props.showLabel;
-
- // Deprecated options
- delete props.icons;
- if ( typeof props.text === "boolean" ) {
- delete props.text;
- }
-
- $( "<button></button>", props )
- .button( buttonOptions )
- .appendTo( that.uiButtonSet )
- .on( "click", function() {
- click.apply( that.element[ 0 ], arguments );
- } );
- } );
- this._addClass( this.uiDialog, "ui-dialog-buttons" );
- this.uiDialogButtonPane.appendTo( this.uiDialog );
- },
-
- _makeDraggable: function() {
- var that = this,
- options = this.options;
-
- function filteredUi( ui ) {
- return {
- position: ui.position,
- offset: ui.offset
- };
- }
-
- this.uiDialog.draggable( {
- cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
- handle: ".ui-dialog-titlebar",
- containment: "document",
- start: function( event, ui ) {
- that._addClass( $( this ), "ui-dialog-dragging" );
- that._blockFrames();
- that._trigger( "dragStart", event, filteredUi( ui ) );
- },
- drag: function( event, ui ) {
- that._trigger( "drag", event, filteredUi( ui ) );
- },
- stop: function( event, ui ) {
- var left = ui.offset.left - that.document.scrollLeft(),
- top = ui.offset.top - that.document.scrollTop();
-
- options.position = {
- my: "left top",
- at: "left" + ( left >= 0 ? "+" : "" ) + left + " " +
- "top" + ( top >= 0 ? "+" : "" ) + top,
- of: that.window
- };
- that._removeClass( $( this ), "ui-dialog-dragging" );
- that._unblockFrames();
- that._trigger( "dragStop", event, filteredUi( ui ) );
- }
- } );
- },
-
- _makeResizable: function() {
- var that = this,
- options = this.options,
- handles = options.resizable,
-
- // .ui-resizable has position: relative defined in the stylesheet
- // but dialogs have to use absolute or fixed positioning
- position = this.uiDialog.css( "position" ),
- resizeHandles = typeof handles === "string" ?
- handles :
- "n,e,s,w,se,sw,ne,nw";
-
- function filteredUi( ui ) {
- return {
- originalPosition: ui.originalPosition,
- originalSize: ui.originalSize,
- position: ui.position,
- size: ui.size
- };
- }
-
- this.uiDialog.resizable( {
- cancel: ".ui-dialog-content",
- containment: "document",
- alsoResize: this.element,
- maxWidth: options.maxWidth,
- maxHeight: options.maxHeight,
- minWidth: options.minWidth,
- minHeight: this._minHeight(),
- handles: resizeHandles,
- start: function( event, ui ) {
- that._addClass( $( this ), "ui-dialog-resizing" );
- that._blockFrames();
- that._trigger( "resizeStart", event, filteredUi( ui ) );
- },
- resize: function( event, ui ) {
- that._trigger( "resize", event, filteredUi( ui ) );
- },
- stop: function( event, ui ) {
- var offset = that.uiDialog.offset(),
- left = offset.left - that.document.scrollLeft(),
- top = offset.top - that.document.scrollTop();
-
- options.height = that.uiDialog.height();
- options.width = that.uiDialog.width();
- options.position = {
- my: "left top",
- at: "left" + ( left >= 0 ? "+" : "" ) + left + " " +
- "top" + ( top >= 0 ? "+" : "" ) + top,
- of: that.window
- };
- that._removeClass( $( this ), "ui-dialog-resizing" );
- that._unblockFrames();
- that._trigger( "resizeStop", event, filteredUi( ui ) );
- }
- } )
- .css( "position", position );
- },
-
- _trackFocus: function() {
- this._on( this.widget(), {
- focusin: function( event ) {
- this._makeFocusTarget();
- this._focusedElement = $( event.target );
- }
- } );
- },
-
- _makeFocusTarget: function() {
- this._untrackInstance();
- this._trackingInstances().unshift( this );
- },
-
- _untrackInstance: function() {
- var instances = this._trackingInstances(),
- exists = $.inArray( this, instances );
- if ( exists !== -1 ) {
- instances.splice( exists, 1 );
- }
- },
-
- _trackingInstances: function() {
- var instances = this.document.data( "ui-dialog-instances" );
- if ( !instances ) {
- instances = [];
- this.document.data( "ui-dialog-instances", instances );
- }
- return instances;
- },
-
- _minHeight: function() {
- var options = this.options;
-
- return options.height === "auto" ?
- options.minHeight :
- Math.min( options.minHeight, options.height );
- },
-
- _position: function() {
-
- // Need to show the dialog to get the actual offset in the position plugin
- var isVisible = this.uiDialog.is( ":visible" );
- if ( !isVisible ) {
- this.uiDialog.show();
- }
- this.uiDialog.position( this.options.position );
- if ( !isVisible ) {
- this.uiDialog.hide();
- }
- },
-
- _setOptions: function( options ) {
- var that = this,
- resize = false,
- resizableOptions = {};
-
- $.each( options, function( key, value ) {
- that._setOption( key, value );
-
- if ( key in that.sizeRelatedOptions ) {
- resize = true;
- }
- if ( key in that.resizableRelatedOptions ) {
- resizableOptions[ key ] = value;
- }
- } );
-
- if ( resize ) {
- this._size();
- this._position();
- }
- if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
- this.uiDialog.resizable( "option", resizableOptions );
- }
- },
-
- _setOption: function( key, value ) {
- var isDraggable, isResizable,
- uiDialog = this.uiDialog;
-
- if ( key === "disabled" ) {
- return;
- }
-
- this._super( key, value );
-
- if ( key === "appendTo" ) {
- this.uiDialog.appendTo( this._appendTo() );
- }
-
- if ( key === "buttons" ) {
- this._createButtons();
- }
-
- if ( key === "closeText" ) {
- this.uiDialogTitlebarClose.button( {
-
- // Ensure that we always pass a string
- label: $( "<a>" ).text( "" + this.options.closeText ).html()
- } );
- }
-
- if ( key === "draggable" ) {
- isDraggable = uiDialog.is( ":data(ui-draggable)" );
- if ( isDraggable && !value ) {
- uiDialog.draggable( "destroy" );
- }
-
- if ( !isDraggable && value ) {
- this._makeDraggable();
- }
- }
-
- if ( key === "position" ) {
- this._position();
- }
-
- if ( key === "resizable" ) {
-
- // currently resizable, becoming non-resizable
- isResizable = uiDialog.is( ":data(ui-resizable)" );
- if ( isResizable && !value ) {
- uiDialog.resizable( "destroy" );
- }
-
- // Currently resizable, changing handles
- if ( isResizable && typeof value === "string" ) {
- uiDialog.resizable( "option", "handles", value );
- }
-
- // Currently non-resizable, becoming resizable
- if ( !isResizable && value !== false ) {
- this._makeResizable();
- }
- }
-
- if ( key === "title" ) {
- this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
- }
- },
-
- _size: function() {
-
- // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
- // divs will both have width and height set, so we need to reset them
- var nonContentHeight, minContentHeight, maxContentHeight,
- options = this.options;
-
- // Reset content sizing
- this.element.show().css( {
- width: "auto",
- minHeight: 0,
- maxHeight: "none",
- height: 0
- } );
-
- if ( options.minWidth > options.width ) {
- options.width = options.minWidth;
- }
-
- // Reset wrapper sizing
- // determine the height of all the non-content elements
- nonContentHeight = this.uiDialog.css( {
- height: "auto",
- width: options.width
- } )
- .outerHeight();
- minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
- maxContentHeight = typeof options.maxHeight === "number" ?
- Math.max( 0, options.maxHeight - nonContentHeight ) :
- "none";
-
- if ( options.height === "auto" ) {
- this.element.css( {
- minHeight: minContentHeight,
- maxHeight: maxContentHeight,
- height: "auto"
- } );
- } else {
- this.element.height( Math.max( 0, options.height - nonContentHeight ) );
- }
-
- if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
- this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
- }
- },
-
- _blockFrames: function() {
- this.iframeBlocks = this.document.find( "iframe" ).map( function() {
- var iframe = $( this );
-
- return $( "<div>" )
- .css( {
- position: "absolute",
- width: iframe.outerWidth(),
- height: iframe.outerHeight()
- } )
- .appendTo( iframe.parent() )
- .offset( iframe.offset() )[ 0 ];
- } );
- },
-
- _unblockFrames: function() {
- if ( this.iframeBlocks ) {
- this.iframeBlocks.remove();
- delete this.iframeBlocks;
- }
- },
-
- _allowInteraction: function( event ) {
- if ( $( event.target ).closest( ".ui-dialog" ).length ) {
- return true;
- }
-
- // TODO: Remove hack when datepicker implements
- // the .ui-front logic (#8989)
- return !!$( event.target ).closest( ".ui-datepicker" ).length;
- },
-
- _createOverlay: function() {
- if ( !this.options.modal ) {
- return;
- }
-
- // We use a delay in case the overlay is created from an
- // event that we're going to be cancelling (#2804)
- var isOpening = true;
- this._delay( function() {
- isOpening = false;
- } );
-
- if ( !this.document.data( "ui-dialog-overlays" ) ) {
-
- // Prevent use of anchors and inputs
- // Using _on() for an event handler shared across many instances is
- // safe because the dialogs stack and must be closed in reverse order
- this._on( this.document, {
- focusin: function( event ) {
- if ( isOpening ) {
- return;
- }
-
- if ( !this._allowInteraction( event ) ) {
- event.preventDefault();
- this._trackingInstances()[ 0 ]._focusTabbable();
- }
- }
- } );
- }
-
- this.overlay = $( "<div>" )
- .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 ) {
- return;
- }
-
- if ( this.overlay ) {
- var overlays = this.document.data( "ui-dialog-overlays" ) - 1;
-
- if ( !overlays ) {
- this._off( this.document, "focusin" );
- this.document.removeData( "ui-dialog-overlays" );
- } else {
- this.document.data( "ui-dialog-overlays", overlays );
- }
-
- this.overlay.remove();
- this.overlay = null;
- }
- }
-} );
-
-// DEPRECATED
-// TODO: switch return back to widget declaration at top of file when this is removed
-if ( $.uiBackCompat !== false ) {
-
- // Backcompat for dialogClass option
- $.widget( "ui.dialog", $.ui.dialog, {
- options: {
- dialogClass: ""
- },
- _createWrapper: function() {
- this._super();
- this.uiDialog.addClass( this.options.dialogClass );
- },
- _setOption: function( key, value ) {
- if ( key === "dialogClass" ) {
- this.uiDialog
- .removeClass( this.options.dialogClass )
- .addClass( value );
- }
- this._superApply( arguments );
- }
- } );
-}
-
-var widgetsDialog = $.ui.dialog;
-
-
-/*!
- * jQuery UI Droppable 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Droppable
-//>>group: Interactions
-//>>description: Enables drop targets for draggable elements.
-//>>docs: http://api.jqueryui.com/droppable/
-//>>demos: http://jqueryui.com/droppable/
-
-
-
-$.widget( "ui.droppable", {
- version: "1.12.1",
- widgetEventPrefix: "drop",
- options: {
- accept: "*",
- addClasses: true,
- greedy: false,
- scope: "default",
- tolerance: "intersect",
-
- // Callbacks
- activate: null,
- deactivate: null,
- drop: null,
- out: null,
- over: null
- },
- _create: function() {
-
- var proportions,
- o = this.options,
- accept = o.accept;
-
- this.isover = false;
- this.isout = true;
-
- this.accept = $.isFunction( accept ) ? accept : function( d ) {
- return d.is( accept );
- };
-
- this.proportions = function( /* valueToWrite */ ) {
- if ( arguments.length ) {
-
- // Store the droppable's proportions
- proportions = arguments[ 0 ];
- } else {
-
- // Retrieve or derive the droppable's proportions
- return proportions ?
- proportions :
- proportions = {
- width: this.element[ 0 ].offsetWidth,
- height: this.element[ 0 ].offsetHeight
- };
- }
- };
-
- this._addToManager( o.scope );
-
- o.addClasses && this._addClass( "ui-droppable" );
-
- },
-
- _addToManager: function( scope ) {
-
- // Add the reference and positions to the manager
- $.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];
- $.ui.ddmanager.droppables[ scope ].push( this );
- },
-
- _splice: function( drop ) {
- var i = 0;
- for ( ; i < drop.length; i++ ) {
- if ( drop[ i ] === this ) {
- drop.splice( i, 1 );
- }
- }
- },
-
- _destroy: function() {
- var drop = $.ui.ddmanager.droppables[ this.options.scope ];
-
- this._splice( drop );
- },
-
- _setOption: function( key, value ) {
-
- if ( key === "accept" ) {
- this.accept = $.isFunction( value ) ? value : function( d ) {
- return d.is( value );
- };
- } else if ( key === "scope" ) {
- var drop = $.ui.ddmanager.droppables[ this.options.scope ];
-
- this._splice( drop );
- this._addToManager( value );
- }
-
- this._super( key, value );
- },
-
- _activate: function( event ) {
- var draggable = $.ui.ddmanager.current;
-
- this._addActiveClass();
- if ( draggable ) {
- this._trigger( "activate", event, this.ui( draggable ) );
- }
- },
-
- _deactivate: function( event ) {
- var draggable = $.ui.ddmanager.current;
-
- this._removeActiveClass();
- if ( draggable ) {
- this._trigger( "deactivate", event, this.ui( draggable ) );
- }
- },
-
- _over: function( event ) {
-
- var draggable = $.ui.ddmanager.current;
-
- // Bail if draggable and droppable are same element
- if ( !draggable || ( draggable.currentItem ||
- draggable.element )[ 0 ] === this.element[ 0 ] ) {
- return;
- }
-
- if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||
- draggable.element ) ) ) {
- this._addHoverClass();
- this._trigger( "over", event, this.ui( draggable ) );
- }
-
- },
-
- _out: function( event ) {
-
- var draggable = $.ui.ddmanager.current;
-
- // Bail if draggable and droppable are same element
- if ( !draggable || ( draggable.currentItem ||
- draggable.element )[ 0 ] === this.element[ 0 ] ) {
- return;
- }
-
- if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||
- draggable.element ) ) ) {
- this._removeHoverClass();
- this._trigger( "out", event, this.ui( draggable ) );
- }
-
- },
-
- _drop: function( event, custom ) {
-
- var draggable = custom || $.ui.ddmanager.current,
- childrenIntersection = false;
-
- // Bail if draggable and droppable are same element
- if ( !draggable || ( draggable.currentItem ||
- draggable.element )[ 0 ] === this.element[ 0 ] ) {
- return false;
- }
-
- this.element
- .find( ":data(ui-droppable)" )
- .not( ".ui-draggable-dragging" )
- .each( function() {
- var inst = $( this ).droppable( "instance" );
- if (
- inst.options.greedy &&
- !inst.options.disabled &&
- inst.options.scope === draggable.options.scope &&
- inst.accept.call(
- inst.element[ 0 ], ( draggable.currentItem || draggable.element )
- ) &&
- intersect(
- draggable,
- $.extend( inst, { offset: inst.element.offset() } ),
- inst.options.tolerance, event
- )
- ) {
- childrenIntersection = true;
- return false; }
- } );
- if ( childrenIntersection ) {
- return false;
- }
-
- if ( this.accept.call( this.element[ 0 ],
- ( draggable.currentItem || draggable.element ) ) ) {
- this._removeActiveClass();
- this._removeHoverClass();
-
- this._trigger( "drop", event, this.ui( draggable ) );
- return this.element;
- }
-
- return false;
-
- },
-
- ui: function( c ) {
- return {
- draggable: ( c.currentItem || c.element ),
- helper: c.helper,
- position: c.position,
- offset: c.positionAbs
- };
- },
-
- // Extension points just to make backcompat sane and avoid duplicating logic
- // TODO: Remove in 1.13 along with call to it below
- _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 intersect = $.ui.intersect = ( function() {
- function isOverAxis( x, reference, size ) {
- return ( x >= reference ) && ( x < ( reference + size ) );
- }
-
- return function( draggable, droppable, toleranceMode, event ) {
-
- if ( !droppable.offset ) {
- return false;
- }
-
- var x1 = ( draggable.positionAbs ||
- draggable.position.absolute ).left + draggable.margins.left,
- y1 = ( draggable.positionAbs ||
- draggable.position.absolute ).top + draggable.margins.top,
- x2 = x1 + draggable.helperProportions.width,
- y2 = y1 + draggable.helperProportions.height,
- l = droppable.offset.left,
- t = droppable.offset.top,
- r = l + droppable.proportions().width,
- b = t + droppable.proportions().height;
-
- switch ( toleranceMode ) {
- case "fit":
- return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );
- case "intersect":
- return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half
- x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half
- t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
- y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
- case "pointer":
- return isOverAxis( event.pageY, t, droppable.proportions().height ) &&
- isOverAxis( event.pageX, l, droppable.proportions().width );
- case "touch":
- return (
- ( y1 >= t && y1 <= b ) || // Top edge touching
- ( y2 >= t && y2 <= b ) || // Bottom edge touching
- ( y1 < t && y2 > b ) // Surrounded vertically
- ) && (
- ( x1 >= l && x1 <= r ) || // Left edge touching
- ( x2 >= l && x2 <= r ) || // Right edge touching
- ( x1 < l && x2 > r ) // Surrounded horizontally
- );
- default:
- return false;
- }
- };
-} )();
-
-/*
- This manager tracks offsets of draggables and droppables
-*/
-$.ui.ddmanager = {
- current: null,
- droppables: { "default": [] },
- prepareOffsets: function( t, event ) {
-
- var i, j,
- m = $.ui.ddmanager.droppables[ t.options.scope ] || [],
- type = event ? event.type : null, // workaround for #2317
- list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack();
-
- droppablesLoop: for ( i = 0; i < m.length; i++ ) {
-
- // No disabled and non-accepted
- if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ],
- ( t.currentItem || t.element ) ) ) ) {
- continue;
- }
-
- // Filter out elements in the current dragged item
- for ( j = 0; j < list.length; j++ ) {
- if ( list[ j ] === m[ i ].element[ 0 ] ) {
- m[ i ].proportions().height = 0;
- continue droppablesLoop;
- }
- }
-
- m[ i ].visible = m[ i ].element.css( "display" ) !== "none";
- if ( !m[ i ].visible ) {
- continue;
- }
-
- // Activate the droppable if used directly from draggables
- if ( type === "mousedown" ) {
- m[ i ]._activate.call( m[ i ], event );
- }
-
- m[ i ].offset = m[ i ].element.offset();
- m[ i ].proportions( {
- width: m[ i ].element[ 0 ].offsetWidth,
- height: m[ i ].element[ 0 ].offsetHeight
- } );
-
- }
-
- },
- drop: function( draggable, event ) {
-
- var dropped = false;
-
- // Create a copy of the droppables in case the list changes during the drop (#9116)
- $.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {
-
- if ( !this.options ) {
- return;
- }
- if ( !this.options.disabled && this.visible &&
- intersect( draggable, this, this.options.tolerance, event ) ) {
- dropped = this._drop.call( this, event ) || dropped;
- }
-
- if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ],
- ( draggable.currentItem || draggable.element ) ) ) {
- this.isout = true;
- this.isover = false;
- this._deactivate.call( this, event );
- }
-
- } );
- return dropped;
-
- },
- dragStart: function( draggable, event ) {
-
- // Listen for scrolling so that if the dragging causes scrolling the position of the
- // droppables can be recalculated (see #5003)
- draggable.element.parentsUntil( "body" ).on( "scroll.droppable", function() {
- if ( !draggable.options.refreshPositions ) {
- $.ui.ddmanager.prepareOffsets( draggable, event );
- }
- } );
- },
- drag: function( draggable, event ) {
-
- // If you have a highly dynamic page, you might try this option. It renders positions
- // every time you move the mouse.
- if ( draggable.options.refreshPositions ) {
- $.ui.ddmanager.prepareOffsets( draggable, event );
- }
-
- // Run through all droppables and check their positions based on specific tolerance options
- $.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {
-
- if ( this.options.disabled || this.greedyChild || !this.visible ) {
- return;
- }
-
- var parentInstance, scope, parent,
- intersects = intersect( draggable, this, this.options.tolerance, event ),
- c = !intersects && this.isover ?
- "isout" :
- ( intersects && !this.isover ? "isover" : null );
- if ( !c ) {
- return;
- }
-
- if ( this.options.greedy ) {
-
- // find droppable parents with same scope
- scope = this.options.scope;
- parent = this.element.parents( ":data(ui-droppable)" ).filter( function() {
- return $( this ).droppable( "instance" ).options.scope === scope;
- } );
-
- if ( parent.length ) {
- parentInstance = $( parent[ 0 ] ).droppable( "instance" );
- parentInstance.greedyChild = ( c === "isover" );
- }
- }
-
- // We just moved into a greedy child
- if ( parentInstance && c === "isover" ) {
- parentInstance.isover = false;
- parentInstance.isout = true;
- parentInstance._out.call( parentInstance, event );
- }
-
- this[ c ] = true;
- this[ c === "isout" ? "isover" : "isout" ] = false;
- this[ c === "isover" ? "_over" : "_out" ].call( this, event );
-
- // We just moved out of a greedy child
- if ( parentInstance && c === "isout" ) {
- parentInstance.isout = false;
- parentInstance.isover = true;
- parentInstance._over.call( parentInstance, event );
- }
- } );
-
- },
- dragStop: function( draggable, event ) {
- draggable.element.parentsUntil( "body" ).off( "scroll.droppable" );
-
- // Call prepareOffsets one final time since IE does not fire return scroll events when
- // overflow was caused by drag (see #5003)
- if ( !draggable.options.refreshPositions ) {
- $.ui.ddmanager.prepareOffsets( draggable, event );
- }
- }
-};
-
-// DEPRECATED
-// TODO: switch return back to widget declaration at top of file when this is removed
-if ( $.uiBackCompat !== false ) {
-
- // Backcompat for activeClass and hoverClass options
- $.widget( "ui.droppable", $.ui.droppable, {
- options: {
- hoverClass: false,
- activeClass: false
- },
- _addActiveClass: function() {
- this._super();
- if ( this.options.activeClass ) {
- this.element.addClass( this.options.activeClass );
- }
- },
- _removeActiveClass: function() {
- this._super();
- if ( this.options.activeClass ) {
- this.element.removeClass( this.options.activeClass );
- }
- },
- _addHoverClass: function() {
- this._super();
- if ( this.options.hoverClass ) {
- this.element.addClass( this.options.hoverClass );
- }
- },
- _removeHoverClass: function() {
- this._super();
- if ( this.options.hoverClass ) {
- this.element.removeClass( this.options.hoverClass );
- }
- }
- } );
-}
-
-var widgetsDroppable = $.ui.droppable;
-
-
-/*!
- * jQuery UI Progressbar 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Progressbar
-//>>group: Widgets
-// jscs:disable maximumLineLength
-//>>description: Displays a status indicator for loading state, standard percentage, and other progress indicators.
-// jscs:enable maximumLineLength
-//>>docs: http://api.jqueryui.com/progressbar/
-//>>demos: http://jqueryui.com/progressbar/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/progressbar.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-var widgetsProgressbar = $.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() {
-
- // Constrain initial value
- this.oldValue = this.options.value = this._constrainedValue();
-
- this.element.attr( {
-
- // Only set static values; aria-valuenow and aria-valuemax are
- // set inside _refreshValue()
- role: "progressbar",
- "aria-valuemin": this.min
- } );
- this._addClass( "ui-progressbar", "ui-widget ui-widget-content" );
-
- this.valueDiv = $( "<div>" ).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( newValue ) {
- if ( newValue === undefined ) {
- return this.options.value;
- }
-
- this.options.value = this._constrainedValue( newValue );
- this._refreshValue();
- },
-
- _constrainedValue: function( newValue ) {
- if ( newValue === undefined ) {
- newValue = this.options.value;
- }
-
- this.indeterminate = newValue === false;
-
- // Sanitize value
- if ( typeof newValue !== "number" ) {
- newValue = 0;
- }
-
- return this.indeterminate ? false :
- Math.min( this.options.max, Math.max( this.min, newValue ) );
- },
-
- _setOptions: function( options ) {
-
- // Ensure "value" option is set after other values (like max)
- var value = options.value;
- delete options.value;
-
- this._super( options );
-
- this.options.value = this._constrainedValue( value );
- this._refreshValue();
- },
-
- _setOption: function( key, value ) {
- if ( key === "max" ) {
-
- // Don't allow a max less than min
- value = Math.max( this.min, value );
- }
- this._super( key, value );
- },
-
- _setOptionDisabled: function( value ) {
- this._super( value );
-
- this.element.attr( "aria-disabled", value );
- this._toggleClass( null, "ui-state-disabled", !!value );
- },
-
- _percentage: function() {
- return this.indeterminate ?
- 100 :
- 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
- },
-
- _refreshValue: function() {
- var value = this.options.value,
- percentage = this._percentage();
-
- this.valueDiv
- .toggle( this.indeterminate || value > this.min )
- .width( percentage.toFixed( 0 ) + "%" );
-
- this
- ._toggleClass( this.valueDiv, "ui-progressbar-complete", null,
- value === this.options.max )
- ._toggleClass( "ui-progressbar-indeterminate", null, this.indeterminate );
-
- if ( this.indeterminate ) {
- this.element.removeAttr( "aria-valuenow" );
- if ( !this.overlayDiv ) {
- this.overlayDiv = $( "<div>" ).appendTo( this.valueDiv );
- this._addClass( this.overlayDiv, "ui-progressbar-overlay" );
- }
- } else {
- this.element.attr( {
- "aria-valuemax": this.options.max,
- "aria-valuenow": value
- } );
- if ( this.overlayDiv ) {
- this.overlayDiv.remove();
- this.overlayDiv = null;
- }
- }
-
- if ( this.oldValue !== value ) {
- this.oldValue = value;
- this._trigger( "change" );
- }
- if ( value === this.options.max ) {
- this._trigger( "complete" );
- }
- }
-} );
-
-
-/*!
- * jQuery UI Selectable 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Selectable
-//>>group: Interactions
-//>>description: Allows groups of elements to be selected with the mouse.
-//>>docs: http://api.jqueryui.com/selectable/
-//>>demos: http://jqueryui.com/selectable/
-//>>css.structure: ../../themes/base/selectable.css
-
-
-
-var widgetsSelectable = $.widget( "ui.selectable", $.ui.mouse, {
- version: "1.12.1",
- options: {
- appendTo: "body",
- autoRefresh: true,
- distance: 0,
- filter: "*",
- tolerance: "touch",
-
- // Callbacks
- selected: null,
- selecting: null,
- start: null,
- stop: null,
- unselected: null,
- unselecting: null
- },
- _create: function() {
- var that = this;
-
- this._addClass( "ui-selectable" );
-
- this.dragged = false;
-
- // Cache selectee children based on filter
- this.refresh = function() {
- that.elementPos = $( that.element[ 0 ] ).offset();
- that.selectees = $( that.options.filter, that.element[ 0 ] );
- that._addClass( that.selectees, "ui-selectee" );
- that.selectees.each( function() {
- var $this = $( this ),
- selecteeOffset = $this.offset(),
- pos = {
- left: selecteeOffset.left - that.elementPos.left,
- top: selecteeOffset.top - that.elementPos.top
- };
- $.data( this, "selectable-item", {
- element: this,
- $element: $this,
- left: pos.left,
- top: pos.top,
- right: pos.left + $this.outerWidth(),
- bottom: pos.top + $this.outerHeight(),
- startselected: false,
- selected: $this.hasClass( "ui-selected" ),
- selecting: $this.hasClass( "ui-selecting" ),
- unselecting: $this.hasClass( "ui-unselecting" )
- } );
- } );
- };
- this.refresh();
-
- this._mouseInit();
-
- this.helper = $( "<div>" );
- this._addClass( this.helper, "ui-selectable-helper" );
- },
-
- _destroy: function() {
- this.selectees.removeData( "selectable-item" );
- this._mouseDestroy();
- },
-
- _mouseStart: function( event ) {
- var that = this,
- options = this.options;
-
- this.opos = [ event.pageX, event.pageY ];
- this.elementPos = $( this.element[ 0 ] ).offset();
-
- if ( this.options.disabled ) {
- return;
- }
-
- this.selectees = $( options.filter, this.element[ 0 ] );
-
- this._trigger( "start", event );
-
- $( options.appendTo ).append( this.helper );
-
- // position helper (lasso)
- this.helper.css( {
- "left": event.pageX,
- "top": event.pageY,
- "width": 0,
- "height": 0
- } );
-
- if ( options.autoRefresh ) {
- this.refresh();
- }
-
- this.selectees.filter( ".ui-selected" ).each( function() {
- var selectee = $.data( this, "selectable-item" );
- selectee.startselected = true;
- if ( !event.metaKey && !event.ctrlKey ) {
- that._removeClass( selectee.$element, "ui-selected" );
- selectee.selected = false;
- that._addClass( selectee.$element, "ui-unselecting" );
- selectee.unselecting = true;
-
- // selectable UNSELECTING callback
- that._trigger( "unselecting", event, {
- unselecting: selectee.element
- } );
- }
- } );
-
- $( event.target ).parents().addBack().each( function() {
- var doSelect,
- selectee = $.data( this, "selectable-item" );
- if ( selectee ) {
- doSelect = ( !event.metaKey && !event.ctrlKey ) ||
- !selectee.$element.hasClass( "ui-selected" );
- that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )
- ._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );
- selectee.unselecting = !doSelect;
- selectee.selecting = doSelect;
- selectee.selected = doSelect;
-
- // selectable (UN)SELECTING callback
- if ( doSelect ) {
- that._trigger( "selecting", event, {
- selecting: selectee.element
- } );
- } else {
- that._trigger( "unselecting", event, {
- unselecting: selectee.element
- } );
- }
- return false;
- }
- } );
-
- },
-
- _mouseDrag: function( event ) {
-
- this.dragged = true;
-
- if ( this.options.disabled ) {
- return;
- }
-
- var tmp,
- that = this,
- options = this.options,
- x1 = this.opos[ 0 ],
- y1 = this.opos[ 1 ],
- x2 = event.pageX,
- y2 = event.pageY;
-
- if ( x1 > x2 ) { tmp = x2; x2 = x1; x1 = tmp; }
- if ( y1 > y2 ) { tmp = y2; y2 = y1; y1 = tmp; }
- this.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );
-
- this.selectees.each( function() {
- var selectee = $.data( this, "selectable-item" ),
- hit = false,
- offset = {};
-
- //prevent helper from being selected if appendTo: selectable
- if ( !selectee || selectee.element === that.element[ 0 ] ) {
- return;
- }
-
- offset.left = selectee.left + that.elementPos.left;
- offset.right = selectee.right + that.elementPos.left;
- offset.top = selectee.top + that.elementPos.top;
- offset.bottom = selectee.bottom + that.elementPos.top;
-
- if ( options.tolerance === "touch" ) {
- hit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||
- offset.bottom < y1 ) );
- } else if ( options.tolerance === "fit" ) {
- hit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&
- offset.bottom < y2 );
- }
-
- if ( hit ) {
-
- // SELECT
- if ( selectee.selected ) {
- that._removeClass( selectee.$element, "ui-selected" );
- selectee.selected = false;
- }
- if ( selectee.unselecting ) {
- that._removeClass( selectee.$element, "ui-unselecting" );
- selectee.unselecting = false;
- }
- if ( !selectee.selecting ) {
- that._addClass( selectee.$element, "ui-selecting" );
- selectee.selecting = true;
-
- // selectable SELECTING callback
- that._trigger( "selecting", event, {
- selecting: selectee.element
- } );
- }
- } else {
-
- // UNSELECT
- if ( selectee.selecting ) {
- if ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {
- that._removeClass( selectee.$element, "ui-selecting" );
- selectee.selecting = false;
- that._addClass( selectee.$element, "ui-selected" );
- selectee.selected = true;
- } else {
- that._removeClass( selectee.$element, "ui-selecting" );
- selectee.selecting = false;
- if ( selectee.startselected ) {
- that._addClass( selectee.$element, "ui-unselecting" );
- selectee.unselecting = true;
- }
-
- // selectable UNSELECTING callback
- that._trigger( "unselecting", event, {
- unselecting: selectee.element
- } );
- }
- }
- if ( selectee.selected ) {
- if ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {
- that._removeClass( selectee.$element, "ui-selected" );
- selectee.selected = false;
-
- that._addClass( selectee.$element, "ui-unselecting" );
- selectee.unselecting = true;
-
- // selectable UNSELECTING callback
- that._trigger( "unselecting", event, {
- unselecting: selectee.element
- } );
- }
- }
- }
- } );
-
- return false;
- },
-
- _mouseStop: function( event ) {
- var that = this;
-
- this.dragged = false;
-
- $( ".ui-unselecting", this.element[ 0 ] ).each( function() {
- var selectee = $.data( this, "selectable-item" );
- that._removeClass( selectee.$element, "ui-unselecting" );
- selectee.unselecting = false;
- selectee.startselected = false;
- that._trigger( "unselected", event, {
- unselected: selectee.element
- } );
- } );
- $( ".ui-selecting", this.element[ 0 ] ).each( function() {
- var selectee = $.data( this, "selectable-item" );
- that._removeClass( selectee.$element, "ui-selecting" )
- ._addClass( selectee.$element, "ui-selected" );
- selectee.selecting = false;
- selectee.selected = true;
- selectee.startselected = true;
- that._trigger( "selected", event, {
- selected: selectee.element
- } );
- } );
- this._trigger( "stop", event );
-
- this.helper.remove();
-
- return false;
- }
-
-} );
-
-
-/*!
- * jQuery UI Selectmenu 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Selectmenu
-//>>group: Widgets
-// jscs:disable maximumLineLength
-//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select.
-// jscs:enable maximumLineLength
-//>>docs: http://api.jqueryui.com/selectmenu/
-//>>demos: http://jqueryui.com/selectmenu/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-var widgetsSelectmenu = $.widget( "ui.selectmenu", [ $.ui.formResetMixin, {
- version: "1.12.1",
- defaultElement: "<select>",
- options: {
- appendTo: null,
- classes: {
- "ui-selectmenu-button-open": "ui-corner-top",
- "ui-selectmenu-button-closed": "ui-corner-all"
- },
- disabled: null,
- icons: {
- button: "ui-icon-triangle-1-s"
- },
- position: {
- my: "left top",
- at: "left bottom",
- collision: "none"
- },
- width: false,
-
- // Callbacks
- change: null,
- close: null,
- focus: null,
- open: null,
- select: null
- },
-
- _create: function() {
- var selectmenuId = this.element.uniqueId().attr( "id" );
- this.ids = {
- element: selectmenuId,
- button: selectmenuId + "-button",
- menu: selectmenuId + "-menu"
- };
-
- this._drawButton();
- this._drawMenu();
- this._bindFormResetHandler();
-
- this._rendered = false;
- this.menuItems = $();
- },
-
- _drawButton: function() {
- var icon,
- that = this,
- item = this._parseOption(
- this.element.find( "option:selected" ),
- this.element[ 0 ].selectedIndex
- );
-
- // Associate existing label with the new button
- this.labels = this.element.labels().attr( "for", this.ids.button );
- this._on( this.labels, {
- click: function( event ) {
- this.button.focus();
- event.preventDefault();
- }
- } );
-
- // Hide original select element
- this.element.hide();
-
- // Create button
- this.button = $( "<span>", {
- tabindex: this.options.disabled ? -1 : 0,
- id: this.ids.button,
- role: "combobox",
- "aria-expanded": "false",
- "aria-autocomplete": "list",
- "aria-owns": this.ids.menu,
- "aria-haspopup": "true",
- title: this.element.attr( "title" )
- } )
- .insertAfter( this.element );
-
- this._addClass( this.button, "ui-selectmenu-button ui-selectmenu-button-closed",
- "ui-button ui-widget" );
-
- icon = $( "<span>" ).appendTo( this.button );
- this._addClass( icon, "ui-selectmenu-icon", "ui-icon " + this.options.icons.button );
- this.buttonItem = this._renderButtonItem( item )
- .appendTo( this.button );
-
- if ( this.options.width !== false ) {
- this._resizeButton();
- }
-
- this._on( this.button, this._buttonEvents );
- this.button.one( "focusin", function() {
-
- // Delay rendering the menu items until the button receives focus.
- // The menu may have already been rendered via a programmatic open.
- if ( !that._rendered ) {
- that._refreshMenu();
- }
- } );
- },
-
- _drawMenu: function() {
- var that = this;
-
- // Create menu
- this.menu = $( "<ul>", {
- "aria-hidden": "true",
- "aria-labelledby": this.ids.button,
- id: this.ids.menu
- } );
-
- // Wrap menu
- this.menuWrap = $( "<div>" ).append( this.menu );
- this._addClass( this.menuWrap, "ui-selectmenu-menu", "ui-front" );
- this.menuWrap.appendTo( this._appendTo() );
-
- // Initialize menu widget
- this.menuInstance = this.menu
- .menu( {
- classes: {
- "ui-menu": "ui-corner-bottom"
- },
- role: "listbox",
- select: function( event, ui ) {
- event.preventDefault();
-
- // Support: IE8
- // If the item was selected via a click, the text selection
- // will be destroyed in IE
- that._setSelection();
-
- that._select( ui.item.data( "ui-selectmenu-item" ), event );
- },
- focus: function( event, ui ) {
- var item = ui.item.data( "ui-selectmenu-item" );
-
- // Prevent inital focus from firing and check if its a newly focused item
- if ( that.focusIndex != null && item.index !== that.focusIndex ) {
- that._trigger( "focus", event, { item: item } );
- if ( !that.isOpen ) {
- that._select( item, event );
- }
- }
- that.focusIndex = item.index;
-
- that.button.attr( "aria-activedescendant",
- that.menuItems.eq( item.index ).attr( "id" ) );
- }
- } )
- .menu( "instance" );
-
- // Don't close the menu on mouseleave
- this.menuInstance._off( this.menu, "mouseleave" );
-
- // Cancel the menu's collapseAll on document click
- this.menuInstance._closeOnDocumentClick = function() {
- return false;
- };
-
- // Selects often contain empty items, but never contain dividers
- this.menuInstance._isDivider = function() {
- return false;
- };
- },
-
- refresh: function() {
- this._refreshMenu();
- this.buttonItem.replaceWith(
- this.buttonItem = this._renderButtonItem(
-
- // Fall back to an empty object in case there are no options
- this._getSelectedItem().data( "ui-selectmenu-item" ) || {}
- )
- );
- if ( this.options.width === null ) {
- this._resizeButton();
- }
- },
-
- _refreshMenu: function() {
- var item,
- options = this.element.find( "option" );
-
- this.menu.empty();
-
- this._parseOptions( options );
- this._renderMenu( this.menu, this.items );
-
- this.menuInstance.refresh();
- this.menuItems = this.menu.find( "li" )
- .not( ".ui-selectmenu-optgroup" )
- .find( ".ui-menu-item-wrapper" );
-
- this._rendered = true;
-
- if ( !options.length ) {
- return;
- }
-
- item = this._getSelectedItem();
-
- // Update the menu to have the correct item focused
- this.menuInstance.focus( null, item );
- this._setAria( item.data( "ui-selectmenu-item" ) );
-
- // Set disabled state
- this._setOption( "disabled", this.element.prop( "disabled" ) );
- },
-
- open: function( event ) {
- if ( this.options.disabled ) {
- return;
- }
-
- // If this is the first time the menu is being opened, render the items
- if ( !this._rendered ) {
- this._refreshMenu();
- } else {
-
- // Menu clears focus on close, reset focus to selected item
- this._removeClass( this.menu.find( ".ui-state-active" ), null, "ui-state-active" );
- this.menuInstance.focus( null, this._getSelectedItem() );
- }
-
- // If there are no options, don't open the menu
- if ( !this.menuItems.length ) {
- return;
- }
-
- this.isOpen = true;
- this._toggleAttr();
- this._resizeMenu();
- this._position();
-
- this._on( this.document, this._documentClick );
-
- this._trigger( "open", event );
- },
-
- _position: function() {
- this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );
- },
-
- close: function( event ) {
- if ( !this.isOpen ) {
- return;
- }
-
- this.isOpen = false;
- this._toggleAttr();
-
- this.range = null;
- this._off( this.document );
-
- this._trigger( "close", event );
- },
-
- widget: function() {
- return this.button;
- },
-
- menuWidget: function() {
- return this.menu;
- },
-
- _renderButtonItem: function( item ) {
- var buttonItem = $( "<span>" );
-
- this._setText( buttonItem, item.label );
- this._addClass( buttonItem, "ui-selectmenu-text" );
-
- return buttonItem;
- },
-
- _renderMenu: function( ul, items ) {
- var that = this,
- currentOptgroup = "";
-
- $.each( items, function( index, item ) {
- var li;
-
- if ( item.optgroup !== currentOptgroup ) {
- li = $( "<li>", {
- text: item.optgroup
- } );
- that._addClass( li, "ui-selectmenu-optgroup", "ui-menu-divider" +
- ( item.element.parent( "optgroup" ).prop( "disabled" ) ?
- " ui-state-disabled" :
- "" ) );
-
- li.appendTo( ul );
-
- currentOptgroup = item.optgroup;
- }
-
- that._renderItemData( ul, item );
- } );
- },
-
- _renderItemData: function( ul, item ) {
- return this._renderItem( ul, item ).data( "ui-selectmenu-item", item );
- },
-
- _renderItem: function( ul, item ) {
- var li = $( "<li>" ),
- wrapper = $( "<div>", {
- title: item.element.attr( "title" )
- } );
-
- if ( item.disabled ) {
- this._addClass( li, null, "ui-state-disabled" );
- }
- this._setText( wrapper, item.label );
-
- return li.append( wrapper ).appendTo( ul );
- },
-
- _setText: function( element, value ) {
- if ( value ) {
- element.text( value );
- } else {
- element.html( "&#160;" );
- }
- },
-
- _move: function( direction, event ) {
- var item, next,
- filter = ".ui-menu-item";
-
- if ( this.isOpen ) {
- item = this.menuItems.eq( this.focusIndex ).parent( "li" );
- } else {
- item = this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" );
- filter += ":not(.ui-state-disabled)";
- }
-
- if ( direction === "first" || direction === "last" ) {
- next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 );
- } else {
- next = item[ direction + "All" ]( filter ).eq( 0 );
- }
-
- if ( next.length ) {
- this.menuInstance.focus( event, next );
- }
- },
-
- _getSelectedItem: function() {
- return this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" );
- },
-
- _toggle: function( event ) {
- this[ this.isOpen ? "close" : "open" ]( event );
- },
-
- _setSelection: function() {
- var selection;
-
- if ( !this.range ) {
- return;
- }
-
- if ( window.getSelection ) {
- selection = window.getSelection();
- selection.removeAllRanges();
- selection.addRange( this.range );
-
- // Support: IE8
- } else {
- this.range.select();
- }
-
- // Support: IE
- // Setting the text selection kills the button focus in IE, but
- // restoring the focus doesn't kill the selection.
- this.button.focus();
- },
-
- _documentClick: {
- mousedown: function( event ) {
- if ( !this.isOpen ) {
- return;
- }
-
- if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" +
- $.ui.escapeSelector( this.ids.button ) ).length ) {
- this.close( event );
- }
- }
- },
-
- _buttonEvents: {
-
- // Prevent text selection from being reset when interacting with the selectmenu (#10144)
- mousedown: function() {
- var selection;
-
- if ( window.getSelection ) {
- selection = window.getSelection();
- if ( selection.rangeCount ) {
- this.range = selection.getRangeAt( 0 );
- }
-
- // Support: IE8
- } else {
- this.range = document.selection.createRange();
- }
- },
-
- click: function( event ) {
- this._setSelection();
- this._toggle( event );
- },
-
- keydown: function( event ) {
- var preventDefault = true;
- switch ( event.keyCode ) {
- case $.ui.keyCode.TAB:
- case $.ui.keyCode.ESCAPE:
- this.close( event );
- preventDefault = false;
- break;
- case $.ui.keyCode.ENTER:
- if ( this.isOpen ) {
- this._selectFocusedItem( event );
- }
- break;
- case $.ui.keyCode.UP:
- if ( event.altKey ) {
- this._toggle( event );
- } else {
- this._move( "prev", event );
- }
- break;
- case $.ui.keyCode.DOWN:
- if ( event.altKey ) {
- this._toggle( event );
- } else {
- this._move( "next", event );
- }
- break;
- case $.ui.keyCode.SPACE:
- if ( this.isOpen ) {
- this._selectFocusedItem( event );
- } else {
- this._toggle( event );
- }
- break;
- case $.ui.keyCode.LEFT:
- this._move( "prev", event );
- break;
- case $.ui.keyCode.RIGHT:
- this._move( "next", event );
- break;
- case $.ui.keyCode.HOME:
- case $.ui.keyCode.PAGE_UP:
- this._move( "first", event );
- break;
- case $.ui.keyCode.END:
- case $.ui.keyCode.PAGE_DOWN:
- this._move( "last", event );
- break;
- default:
- this.menu.trigger( event );
- preventDefault = false;
- }
-
- if ( preventDefault ) {
- event.preventDefault();
- }
- }
- },
-
- _selectFocusedItem: function( event ) {
- var item = this.menuItems.eq( this.focusIndex ).parent( "li" );
- if ( !item.hasClass( "ui-state-disabled" ) ) {
- this._select( item.data( "ui-selectmenu-item" ), event );
- }
- },
-
- _select: function( item, event ) {
- var oldIndex = this.element[ 0 ].selectedIndex;
-
- // Change native select element
- this.element[ 0 ].selectedIndex = item.index;
- this.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) );
- this._setAria( item );
- this._trigger( "select", event, { item: item } );
-
- if ( item.index !== oldIndex ) {
- this._trigger( "change", event, { item: item } );
- }
-
- this.close( event );
- },
-
- _setAria: function( item ) {
- var id = this.menuItems.eq( item.index ).attr( "id" );
-
- this.button.attr( {
- "aria-labelledby": id,
- "aria-activedescendant": id
- } );
- this.menu.attr( "aria-activedescendant", id );
- },
-
- _setOption: function( key, value ) {
- if ( key === "icons" ) {
- var icon = this.button.find( "span.ui-icon" );
- this._removeClass( icon, null, this.options.icons.button )
- ._addClass( icon, null, value.button );
- }
-
- this._super( key, value );
-
- if ( key === "appendTo" ) {
- this.menuWrap.appendTo( this._appendTo() );
- }
-
- if ( key === "width" ) {
- this._resizeButton();
- }
- },
-
- _setOptionDisabled: function( value ) {
- this._super( value );
-
- this.menuInstance.option( "disabled", value );
- this.button.attr( "aria-disabled", value );
- this._toggleClass( this.button, null, "ui-state-disabled", value );
-
- this.element.prop( "disabled", value );
- if ( value ) {
- this.button.attr( "tabindex", -1 );
- this.close();
- } else {
- this.button.attr( "tabindex", 0 );
- }
- },
-
- _appendTo: function() {
- var element = this.options.appendTo;
-
- if ( element ) {
- element = element.jquery || element.nodeType ?
- $( element ) :
- this.document.find( element ).eq( 0 );
- }
-
- if ( !element || !element[ 0 ] ) {
- element = this.element.closest( ".ui-front, dialog" );
- }
-
- if ( !element.length ) {
- element = this.document[ 0 ].body;
- }
-
- return element;
- },
-
- _toggleAttr: function() {
- this.button.attr( "aria-expanded", this.isOpen );
-
- // We can't use two _toggleClass() calls here, because we need to make sure
- // we always remove classes first and add them second, otherwise if both classes have the
- // same theme class, it will be removed after we add it.
- this._removeClass( this.button, "ui-selectmenu-button-" +
- ( this.isOpen ? "closed" : "open" ) )
- ._addClass( this.button, "ui-selectmenu-button-" +
- ( this.isOpen ? "open" : "closed" ) )
- ._toggleClass( this.menuWrap, "ui-selectmenu-open", null, this.isOpen );
-
- this.menu.attr( "aria-hidden", !this.isOpen );
- },
-
- _resizeButton: function() {
- var width = this.options.width;
-
- // For `width: false`, just remove inline style and stop
- if ( width === false ) {
- this.button.css( "width", "" );
- return;
- }
-
- // For `width: null`, match the width of the original element
- if ( width === null ) {
- width = this.element.show().outerWidth();
- this.element.hide();
- }
-
- this.button.outerWidth( width );
- },
-
- _resizeMenu: function() {
- this.menu.outerWidth( Math.max(
- this.button.outerWidth(),
-
- // Support: IE10
- // IE10 wraps long text (possibly a rounding bug)
- // so we add 1px to avoid the wrapping
- this.menu.width( "" ).outerWidth() + 1
- ) );
- },
-
- _getCreateOptions: function() {
- var options = this._super();
-
- options.disabled = this.element.prop( "disabled" );
-
- return options;
- },
-
- _parseOptions: function( options ) {
- var that = this,
- data = [];
- options.each( function( index, item ) {
- data.push( that._parseOption( $( item ), index ) );
- } );
- this.items = data;
- },
-
- _parseOption: function( option, index ) {
- var optgroup = option.parent( "optgroup" );
-
- return {
- element: option,
- index: index,
- value: option.val(),
- label: option.text(),
- optgroup: optgroup.attr( "label" ) || "",
- disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
- };
- },
-
- _destroy: function() {
- this._unbindFormResetHandler();
- this.menuWrap.remove();
- this.button.remove();
- this.element.show();
- this.element.removeUniqueId();
- this.labels.attr( "for", this.ids.element );
- }
-} ] );
-
-
-/*!
- * jQuery UI Slider 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Slider
-//>>group: Widgets
-//>>description: Displays a flexible slider with ranges and accessibility via keyboard.
-//>>docs: http://api.jqueryui.com/slider/
-//>>demos: http://jqueryui.com/slider/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/slider.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-var widgetsSlider = $.widget( "ui.slider", $.ui.mouse, {
- version: "1.12.1",
- widgetEventPrefix: "slide",
-
- options: {
- animate: false,
- classes: {
- "ui-slider": "ui-corner-all",
- "ui-slider-handle": "ui-corner-all",
-
- // Note: ui-widget-header isn't the most fittingly semantic framework class for this
- // element, but worked best visually with a variety of themes
- "ui-slider-range": "ui-corner-all ui-widget-header"
- },
- distance: 0,
- max: 100,
- min: 0,
- orientation: "horizontal",
- range: false,
- step: 1,
- value: 0,
- values: null,
-
- // Callbacks
- change: null,
- slide: null,
- start: null,
- stop: null
- },
-
- // Number of pages in a slider
- // (how many times can you page up/down to go through the whole range)
- numPages: 5,
-
- _create: function() {
- this._keySliding = false;
- this._mouseSliding = false;
- this._animateOff = true;
- this._handleIndex = null;
- this._detectOrientation();
- this._mouseInit();
- this._calculateNewMax();
-
- this._addClass( "ui-slider ui-slider-" + this.orientation,
- "ui-widget ui-widget-content" );
-
- this._refresh();
-
- this._animateOff = false;
- },
-
- _refresh: function() {
- this._createRange();
- this._createHandles();
- this._setupEvents();
- this._refreshValue();
- },
-
- _createHandles: function() {
- var i, handleCount,
- options = this.options,
- existingHandles = this.element.find( ".ui-slider-handle" ),
- handle = "<span tabindex='0'></span>",
- handles = [];
-
- handleCount = ( options.values && options.values.length ) || 1;
-
- if ( existingHandles.length > handleCount ) {
- existingHandles.slice( handleCount ).remove();
- existingHandles = existingHandles.slice( 0, handleCount );
- }
-
- for ( i = existingHandles.length; i < handleCount; i++ ) {
- handles.push( handle );
- }
-
- this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
-
- this._addClass( this.handles, "ui-slider-handle", "ui-state-default" );
-
- this.handle = this.handles.eq( 0 );
-
- this.handles.each( function( i ) {
- $( this )
- .data( "ui-slider-handle-index", i )
- .attr( "tabIndex", 0 );
- } );
- },
-
- _createRange: function() {
- var options = this.options;
-
- if ( options.range ) {
- if ( options.range === true ) {
- if ( !options.values ) {
- options.values = [ this._valueMin(), this._valueMin() ];
- } else if ( options.values.length && options.values.length !== 2 ) {
- options.values = [ options.values[ 0 ], options.values[ 0 ] ];
- } else if ( $.isArray( options.values ) ) {
- options.values = options.values.slice( 0 );
- }
- }
-
- if ( !this.range || !this.range.length ) {
- this.range = $( "<div>" )
- .appendTo( this.element );
-
- this._addClass( this.range, "ui-slider-range" );
- } else {
- this._removeClass( this.range, "ui-slider-range-min ui-slider-range-max" );
-
- // Handle range switching from true to min/max
- this.range.css( {
- "left": "",
- "bottom": ""
- } );
- }
- if ( options.range === "min" || options.range === "max" ) {
- this._addClass( this.range, "ui-slider-range-" + options.range );
- }
- } else {
- if ( this.range ) {
- this.range.remove();
- }
- this.range = null;
- }
- },
-
- _setupEvents: function() {
- this._off( this.handles );
- this._on( this.handles, this._handleEvents );
- this._hoverable( this.handles );
- this._focusable( this.handles );
- },
-
- _destroy: function() {
- this.handles.remove();
- if ( this.range ) {
- this.range.remove();
- }
-
- this._mouseDestroy();
- },
-
- _mouseCapture: function( event ) {
- var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
- that = this,
- o = this.options;
-
- if ( o.disabled ) {
- return false;
- }
-
- this.elementSize = {
- width: this.element.outerWidth(),
- height: this.element.outerHeight()
- };
- this.elementOffset = this.element.offset();
-
- position = { x: event.pageX, y: event.pageY };
- normValue = this._normValueFromMouse( position );
- distance = this._valueMax() - this._valueMin() + 1;
- this.handles.each( function( i ) {
- var thisDistance = Math.abs( normValue - that.values( i ) );
- if ( ( distance > thisDistance ) ||
- ( distance === thisDistance &&
- ( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) {
- distance = thisDistance;
- closestHandle = $( this );
- index = i;
- }
- } );
-
- allowed = this._start( event, index );
- if ( allowed === false ) {
- return false;
- }
- this._mouseSliding = true;
-
- this._handleIndex = index;
-
- this._addClass( closestHandle, null, "ui-state-active" );
- closestHandle.trigger( "focus" );
-
- offset = closestHandle.offset();
- mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
- this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
- left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
- top: event.pageY - offset.top -
- ( closestHandle.height() / 2 ) -
- ( parseInt( closestHandle.css( "borderTopWidth" ), 10 ) || 0 ) -
- ( parseInt( closestHandle.css( "borderBottomWidth" ), 10 ) || 0 ) +
- ( parseInt( closestHandle.css( "marginTop" ), 10 ) || 0 )
- };
-
- if ( !this.handles.hasClass( "ui-state-hover" ) ) {
- this._slide( event, index, normValue );
- }
- this._animateOff = true;
- return true;
- },
-
- _mouseStart: function() {
- return true;
- },
-
- _mouseDrag: function( event ) {
- var position = { x: event.pageX, y: event.pageY },
- normValue = this._normValueFromMouse( position );
-
- this._slide( event, this._handleIndex, normValue );
-
- return false;
- },
-
- _mouseStop: function( event ) {
- this._removeClass( this.handles, null, "ui-state-active" );
- this._mouseSliding = false;
-
- this._stop( event, this._handleIndex );
- this._change( event, this._handleIndex );
-
- this._handleIndex = null;
- this._clickOffset = null;
- this._animateOff = false;
-
- return false;
- },
-
- _detectOrientation: function() {
- this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
- },
-
- _normValueFromMouse: function( position ) {
- var pixelTotal,
- pixelMouse,
- percentMouse,
- valueTotal,
- valueMouse;
-
- if ( this.orientation === "horizontal" ) {
- pixelTotal = this.elementSize.width;
- pixelMouse = position.x - this.elementOffset.left -
- ( this._clickOffset ? this._clickOffset.left : 0 );
- } else {
- pixelTotal = this.elementSize.height;
- pixelMouse = position.y - this.elementOffset.top -
- ( this._clickOffset ? this._clickOffset.top : 0 );
- }
-
- percentMouse = ( pixelMouse / pixelTotal );
- if ( percentMouse > 1 ) {
- percentMouse = 1;
- }
- if ( percentMouse < 0 ) {
- percentMouse = 0;
- }
- if ( this.orientation === "vertical" ) {
- percentMouse = 1 - percentMouse;
- }
-
- valueTotal = this._valueMax() - this._valueMin();
- valueMouse = this._valueMin() + percentMouse * valueTotal;
-
- return this._trimAlignValue( valueMouse );
- },
-
- _uiHash: function( index, value, values ) {
- var uiHash = {
- handle: this.handles[ index ],
- handleIndex: index,
- value: value !== undefined ? value : this.value()
- };
-
- if ( this._hasMultipleValues() ) {
- uiHash.value = value !== undefined ? value : this.values( index );
- uiHash.values = values || this.values();
- }
-
- return uiHash;
- },
-
- _hasMultipleValues: function() {
- return this.options.values && this.options.values.length;
- },
-
- _start: function( event, index ) {
- return this._trigger( "start", event, this._uiHash( index ) );
- },
-
- _slide: function( event, index, newVal ) {
- var allowed, otherVal,
- currentValue = this.value(),
- newValues = this.values();
-
- if ( this._hasMultipleValues() ) {
- otherVal = this.values( index ? 0 : 1 );
- currentValue = this.values( index );
-
- if ( this.options.values.length === 2 && this.options.range === true ) {
- newVal = index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal );
- }
-
- newValues[ index ] = newVal;
- }
-
- if ( newVal === currentValue ) {
- return;
- }
-
- allowed = this._trigger( "slide", event, this._uiHash( index, newVal, newValues ) );
-
- // A slide can be canceled by returning false from the slide callback
- if ( allowed === false ) {
- return;
- }
-
- if ( this._hasMultipleValues() ) {
- this.values( index, newVal );
- } else {
- this.value( newVal );
- }
- },
-
- _stop: function( event, index ) {
- this._trigger( "stop", event, this._uiHash( index ) );
- },
-
- _change: function( event, index ) {
- if ( !this._keySliding && !this._mouseSliding ) {
-
- //store the last changed value index for reference when handles overlap
- this._lastChangedValue = index;
- this._trigger( "change", event, this._uiHash( index ) );
- }
- },
-
- value: function( newValue ) {
- if ( arguments.length ) {
- this.options.value = this._trimAlignValue( newValue );
- this._refreshValue();
- this._change( null, 0 );
- return;
- }
-
- return this._value();
- },
-
- values: function( index, newValue ) {
- var vals,
- newValues,
- i;
-
- if ( arguments.length > 1 ) {
- this.options.values[ index ] = this._trimAlignValue( newValue );
- this._refreshValue();
- this._change( null, index );
- return;
- }
-
- if ( arguments.length ) {
- if ( $.isArray( arguments[ 0 ] ) ) {
- vals = this.options.values;
- newValues = arguments[ 0 ];
- for ( i = 0; i < vals.length; i += 1 ) {
- vals[ i ] = this._trimAlignValue( newValues[ i ] );
- this._change( null, i );
- }
- this._refreshValue();
- } else {
- if ( this._hasMultipleValues() ) {
- return this._values( index );
- } else {
- return this.value();
- }
- }
- } else {
- return this._values();
- }
- },
-
- _setOption: function( key, value ) {
- var i,
- valsLength = 0;
-
- if ( key === "range" && this.options.range === true ) {
- if ( value === "min" ) {
- this.options.value = this._values( 0 );
- this.options.values = null;
- } else if ( value === "max" ) {
- this.options.value = this._values( this.options.values.length - 1 );
- this.options.values = null;
- }
- }
-
- if ( $.isArray( this.options.values ) ) {
- valsLength = this.options.values.length;
- }
-
- this._super( key, value );
-
- switch ( key ) {
- case "orientation":
- this._detectOrientation();
- this._removeClass( "ui-slider-horizontal ui-slider-vertical" )
- ._addClass( "ui-slider-" + this.orientation );
- this._refreshValue();
- if ( this.options.range ) {
- this._refreshRange( value );
- }
-
- // Reset positioning from previous orientation
- this.handles.css( value === "horizontal" ? "bottom" : "left", "" );
- break;
- case "value":
- this._animateOff = true;
- this._refreshValue();
- this._change( null, 0 );
- this._animateOff = false;
- break;
- case "values":
- this._animateOff = true;
- this._refreshValue();
-
- // Start from the last handle to prevent unreachable handles (#9046)
- for ( i = valsLength - 1; i >= 0; i-- ) {
- this._change( null, i );
- }
- this._animateOff = false;
- break;
- case "step":
- case "min":
- case "max":
- this._animateOff = true;
- this._calculateNewMax();
- this._refreshValue();
- this._animateOff = false;
- break;
- case "range":
- this._animateOff = true;
- this._refresh();
- this._animateOff = false;
- break;
- }
- },
-
- _setOptionDisabled: function( value ) {
- this._super( value );
-
- this._toggleClass( null, "ui-state-disabled", !!value );
- },
-
- //internal value getter
- // _value() returns value trimmed by min and max, aligned by step
- _value: function() {
- var val = this.options.value;
- val = this._trimAlignValue( val );
-
- return val;
- },
-
- //internal values getter
- // _values() returns array of values trimmed by min and max, aligned by step
- // _values( index ) returns single value trimmed by min and max, aligned by step
- _values: function( index ) {
- var val,
- vals,
- i;
-
- if ( arguments.length ) {
- val = this.options.values[ index ];
- val = this._trimAlignValue( val );
-
- return val;
- } else if ( this._hasMultipleValues() ) {
-
- // .slice() creates a copy of the array
- // this copy gets trimmed by min and max and then returned
- vals = this.options.values.slice();
- for ( i = 0; i < vals.length; i += 1 ) {
- vals[ i ] = this._trimAlignValue( vals[ i ] );
- }
-
- return vals;
- } else {
- return [];
- }
- },
-
- // Returns the step-aligned value that val is closest to, between (inclusive) min and max
- _trimAlignValue: function( val ) {
- if ( val <= this._valueMin() ) {
- return this._valueMin();
- }
- if ( val >= this._valueMax() ) {
- return this._valueMax();
- }
- var step = ( this.options.step > 0 ) ? this.options.step : 1,
- valModStep = ( val - this._valueMin() ) % step,
- alignValue = val - valModStep;
-
- if ( Math.abs( valModStep ) * 2 >= step ) {
- alignValue += ( valModStep > 0 ) ? step : ( -step );
- }
-
- // Since JavaScript has problems with large floats, round
- // the final value to 5 digits after the decimal point (see #4124)
- return parseFloat( alignValue.toFixed( 5 ) );
- },
-
- _calculateNewMax: function() {
- var max = this.options.max,
- min = this._valueMin(),
- step = this.options.step,
- aboveMin = Math.round( ( max - min ) / step ) * step;
- max = aboveMin + min;
- if ( max > this.options.max ) {
-
- //If max is not divisible by step, rounding off may increase its value
- max -= step;
- }
- this.max = parseFloat( max.toFixed( this._precision() ) );
- },
-
- _precision: function() {
- var precision = this._precisionOf( this.options.step );
- if ( this.options.min !== null ) {
- precision = Math.max( precision, this._precisionOf( this.options.min ) );
- }
- return precision;
- },
-
- _precisionOf: function( num ) {
- var str = num.toString(),
- decimal = str.indexOf( "." );
- return decimal === -1 ? 0 : str.length - decimal - 1;
- },
-
- _valueMin: function() {
- return this.options.min;
- },
-
- _valueMax: function() {
- return this.max;
- },
-
- _refreshRange: function( orientation ) {
- if ( orientation === "vertical" ) {
- this.range.css( { "width": "", "left": "" } );
- }
- if ( orientation === "horizontal" ) {
- this.range.css( { "height": "", "bottom": "" } );
- }
- },
-
- _refreshValue: function() {
- var lastValPercent, valPercent, value, valueMin, valueMax,
- oRange = this.options.range,
- o = this.options,
- that = this,
- animate = ( !this._animateOff ) ? o.animate : false,
- _set = {};
-
- if ( this._hasMultipleValues() ) {
- this.handles.each( function( i ) {
- valPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() -
- that._valueMin() ) * 100;
- _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
- $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
- if ( that.options.range === true ) {
- if ( that.orientation === "horizontal" ) {
- if ( i === 0 ) {
- that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
- left: valPercent + "%"
- }, o.animate );
- }
- if ( i === 1 ) {
- that.range[ animate ? "animate" : "css" ]( {
- width: ( valPercent - lastValPercent ) + "%"
- }, {
- queue: false,
- duration: o.animate
- } );
- }
- } else {
- if ( i === 0 ) {
- that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
- bottom: ( valPercent ) + "%"
- }, o.animate );
- }
- if ( i === 1 ) {
- that.range[ animate ? "animate" : "css" ]( {
- height: ( valPercent - lastValPercent ) + "%"
- }, {
- queue: false,
- duration: o.animate
- } );
- }
- }
- }
- lastValPercent = valPercent;
- } );
- } else {
- value = this.value();
- valueMin = this._valueMin();
- valueMax = this._valueMax();
- valPercent = ( valueMax !== valueMin ) ?
- ( value - valueMin ) / ( valueMax - valueMin ) * 100 :
- 0;
- _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
- this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
-
- if ( oRange === "min" && this.orientation === "horizontal" ) {
- this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
- width: valPercent + "%"
- }, o.animate );
- }
- if ( oRange === "max" && this.orientation === "horizontal" ) {
- this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
- width: ( 100 - valPercent ) + "%"
- }, o.animate );
- }
- if ( oRange === "min" && this.orientation === "vertical" ) {
- this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
- height: valPercent + "%"
- }, o.animate );
- }
- if ( oRange === "max" && this.orientation === "vertical" ) {
- this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
- height: ( 100 - valPercent ) + "%"
- }, o.animate );
- }
- }
- },
-
- _handleEvents: {
- keydown: function( event ) {
- var allowed, curVal, newVal, step,
- index = $( event.target ).data( "ui-slider-handle-index" );
-
- switch ( event.keyCode ) {
- case $.ui.keyCode.HOME:
- case $.ui.keyCode.END:
- case $.ui.keyCode.PAGE_UP:
- case $.ui.keyCode.PAGE_DOWN:
- case $.ui.keyCode.UP:
- case $.ui.keyCode.RIGHT:
- case $.ui.keyCode.DOWN:
- case $.ui.keyCode.LEFT:
- event.preventDefault();
- if ( !this._keySliding ) {
- this._keySliding = true;
- this._addClass( $( event.target ), null, "ui-state-active" );
- allowed = this._start( event, index );
- if ( allowed === false ) {
- return;
- }
- }
- break;
- }
-
- step = this.options.step;
- if ( this._hasMultipleValues() ) {
- curVal = newVal = this.values( index );
- } else {
- curVal = newVal = this.value();
- }
-
- switch ( event.keyCode ) {
- case $.ui.keyCode.HOME:
- newVal = this._valueMin();
- break;
- case $.ui.keyCode.END:
- newVal = this._valueMax();
- break;
- case $.ui.keyCode.PAGE_UP:
- newVal = this._trimAlignValue(
- curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )
- );
- break;
- case $.ui.keyCode.PAGE_DOWN:
- newVal = this._trimAlignValue(
- curVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) );
- break;
- case $.ui.keyCode.UP:
- case $.ui.keyCode.RIGHT:
- if ( curVal === this._valueMax() ) {
- return;
- }
- newVal = this._trimAlignValue( curVal + step );
- break;
- case $.ui.keyCode.DOWN:
- case $.ui.keyCode.LEFT:
- if ( curVal === this._valueMin() ) {
- return;
- }
- newVal = this._trimAlignValue( curVal - step );
- break;
- }
-
- this._slide( event, index, newVal );
- },
- keyup: function( event ) {
- var index = $( event.target ).data( "ui-slider-handle-index" );
-
- if ( this._keySliding ) {
- this._keySliding = false;
- this._stop( event, index );
- this._change( event, index );
- this._removeClass( $( event.target ), null, "ui-state-active" );
- }
- }
- }
-} );
-
-
-/*!
- * jQuery UI Sortable 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Sortable
-//>>group: Interactions
-//>>description: Enables items in a list to be sorted using the mouse.
-//>>docs: http://api.jqueryui.com/sortable/
-//>>demos: http://jqueryui.com/sortable/
-//>>css.structure: ../../themes/base/sortable.css
-
-
-
-var widgetsSortable = $.widget( "ui.sortable", $.ui.mouse, {
- version: "1.12.1",
- widgetEventPrefix: "sort",
- ready: false,
- options: {
- appendTo: "parent",
- axis: false,
- connectWith: false,
- containment: false,
- cursor: "auto",
- cursorAt: false,
- dropOnEmpty: true,
- forcePlaceholderSize: false,
- forceHelperSize: false,
- grid: false,
- handle: false,
- helper: "original",
- items: "> *",
- opacity: false,
- placeholder: false,
- revert: false,
- scroll: true,
- scrollSensitivity: 20,
- scrollSpeed: 20,
- scope: "default",
- tolerance: "intersect",
- zIndex: 1000,
-
- // Callbacks
- activate: null,
- beforeStop: null,
- change: null,
- deactivate: null,
- out: null,
- over: null,
- receive: null,
- remove: null,
- sort: null,
- start: null,
- stop: null,
- update: null
- },
-
- _isOverAxis: function( x, reference, size ) {
- return ( x >= reference ) && ( x < ( reference + size ) );
- },
-
- _isFloating: function( item ) {
- return ( /left|right/ ).test( item.css( "float" ) ) ||
- ( /inline|table-cell/ ).test( item.css( "display" ) );
- },
-
- _create: function() {
- this.containerCache = {};
- this._addClass( "ui-sortable" );
-
- //Get the items
- this.refresh();
-
- //Let's determine the parent's offset
- this.offset = this.element.offset();
-
- //Initialize mouse events for interaction
- this._mouseInit();
-
- this._setHandleClassName();
-
- //We're ready to go
- this.ready = true;
-
- },
-
- _setOption: function( key, value ) {
- this._super( key, value );
-
- if ( key === "handle" ) {
- this._setHandleClassName();
- }
- },
-
- _setHandleClassName: function() {
- var that = this;
- this._removeClass( this.element.find( ".ui-sortable-handle" ), "ui-sortable-handle" );
- $.each( this.items, function() {
- that._addClass(
- this.instance.options.handle ?
- this.item.find( this.instance.options.handle ) :
- this.item,
- "ui-sortable-handle"
- );
- } );
- },
-
- _destroy: function() {
- this._mouseDestroy();
-
- for ( var i = this.items.length - 1; i >= 0; i-- ) {
- this.items[ i ].item.removeData( this.widgetName + "-item" );
- }
-
- return this;
- },
-
- _mouseCapture: function( event, overrideHandle ) {
- var currentItem = null,
- validHandle = false,
- that = this;
-
- if ( this.reverting ) {
- return false;
- }
-
- if ( this.options.disabled || this.options.type === "static" ) {
- return false;
- }
-
- //We have to refresh the items data once first
- this._refreshItems( event );
-
- //Find out if the clicked node (or one of its parents) is a actual item in this.items
- $( event.target ).parents().each( function() {
- if ( $.data( this, that.widgetName + "-item" ) === that ) {
- currentItem = $( this );
- return false;
- }
- } );
- if ( $.data( event.target, that.widgetName + "-item" ) === that ) {
- currentItem = $( event.target );
- }
-
- if ( !currentItem ) {
- return false;
- }
- if ( this.options.handle && !overrideHandle ) {
- $( this.options.handle, currentItem ).find( "*" ).addBack().each( function() {
- if ( this === event.target ) {
- validHandle = true;
- }
- } );
- if ( !validHandle ) {
- return false;
- }
- }
-
- this.currentItem = currentItem;
- this._removeCurrentsFromItems();
- return true;
-
- },
-
- _mouseStart: function( event, overrideHandle, noActivation ) {
-
- var i, body,
- o = this.options;
-
- this.currentContainer = this;
-
- //We only need to call refreshPositions, because the refreshItems call has been moved to
- // mouseCapture
- this.refreshPositions();
-
- //Create and append the visible helper
- this.helper = this._createHelper( event );
-
- //Cache the helper size
- this._cacheHelperProportions();
-
- /*
- * - Position generation -
- * This block generates everything position related - it's the core of draggables.
- */
-
- //Cache the margins of the original element
- this._cacheMargins();
-
- //Get the next scrolling parent
- this.scrollParent = this.helper.scrollParent();
-
- //The element's absolute position on the page minus margins
- this.offset = this.currentItem.offset();
- this.offset = {
- top: this.offset.top - this.margins.top,
- left: this.offset.left - this.margins.left
- };
-
- $.extend( this.offset, {
- click: { //Where the click happened, relative to the element
- left: event.pageX - this.offset.left,
- top: event.pageY - this.offset.top
- },
- parent: this._getParentOffset(),
-
- // This is a relative to absolute position minus the actual position calculation -
- // only used for relative positioned helper
- relative: this._getRelativeOffset()
- } );
-
- // Only after we got the offset, we can change the helper's position to absolute
- // TODO: Still need to figure out a way to make relative sorting possible
- this.helper.css( "position", "absolute" );
- this.cssPosition = this.helper.css( "position" );
-
- //Generate the original position
- this.originalPosition = this._generatePosition( event );
- this.originalPageX = event.pageX;
- this.originalPageY = event.pageY;
-
- //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
- ( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );
-
- //Cache the former DOM position
- this.domPosition = {
- prev: this.currentItem.prev()[ 0 ],
- parent: this.currentItem.parent()[ 0 ]
- };
-
- // If the helper is not the original, hide the original so it's not playing any role during
- // the drag, won't cause anything bad this way
- if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
- this.currentItem.hide();
- }
-
- //Create the placeholder
- this._createPlaceholder();
-
- //Set a containment if given in the options
- if ( o.containment ) {
- this._setContainment();
- }
-
- if ( o.cursor && o.cursor !== "auto" ) { // cursor option
- body = this.document.find( "body" );
-
- // Support: IE
- this.storedCursor = body.css( "cursor" );
- body.css( "cursor", o.cursor );
-
- this.storedStylesheet =
- $( "<style>*{ cursor: " + o.cursor + " !important; }</style>" ).appendTo( body );
- }
-
- if ( o.opacity ) { // opacity option
- if ( this.helper.css( "opacity" ) ) {
- this._storedOpacity = this.helper.css( "opacity" );
- }
- this.helper.css( "opacity", o.opacity );
- }
-
- if ( o.zIndex ) { // zIndex option
- if ( this.helper.css( "zIndex" ) ) {
- this._storedZIndex = this.helper.css( "zIndex" );
- }
- this.helper.css( "zIndex", o.zIndex );
- }
-
- //Prepare scrolling
- if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
- this.scrollParent[ 0 ].tagName !== "HTML" ) {
- this.overflowOffset = this.scrollParent.offset();
- }
-
- //Call callbacks
- this._trigger( "start", event, this._uiHash() );
-
- //Recache the helper size
- if ( !this._preserveHelperProportions ) {
- this._cacheHelperProportions();
- }
-
- //Post "activate" events to possible containers
- if ( !noActivation ) {
- for ( i = this.containers.length - 1; i >= 0; i-- ) {
- this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
- }
- }
-
- //Prepare possible droppables
- if ( $.ui.ddmanager ) {
- $.ui.ddmanager.current = this;
- }
-
- if ( $.ui.ddmanager && !o.dropBehaviour ) {
- $.ui.ddmanager.prepareOffsets( this, event );
- }
-
- this.dragging = true;
-
- this._addClass( this.helper, "ui-sortable-helper" );
-
- // Execute the drag once - this causes the helper not to be visiblebefore getting its
- // correct position
- this._mouseDrag( event );
- return true;
-
- },
-
- _mouseDrag: function( event ) {
- var i, item, itemElement, intersection,
- o = this.options,
- scrolled = false;
-
- //Compute the helpers position
- this.position = this._generatePosition( event );
- this.positionAbs = this._convertPositionTo( "absolute" );
-
- if ( !this.lastPositionAbs ) {
- this.lastPositionAbs = this.positionAbs;
- }
-
- //Do scrolling
- if ( this.options.scroll ) {
- if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
- this.scrollParent[ 0 ].tagName !== "HTML" ) {
-
- if ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -
- event.pageY < o.scrollSensitivity ) {
- this.scrollParent[ 0 ].scrollTop =
- scrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;
- } else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {
- this.scrollParent[ 0 ].scrollTop =
- scrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;
- }
-
- if ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -
- event.pageX < o.scrollSensitivity ) {
- this.scrollParent[ 0 ].scrollLeft = scrolled =
- this.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;
- } else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {
- this.scrollParent[ 0 ].scrollLeft = scrolled =
- this.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;
- }
-
- } else {
-
- if ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {
- scrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );
- } else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <
- o.scrollSensitivity ) {
- scrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );
- }
-
- if ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {
- scrolled = this.document.scrollLeft(
- this.document.scrollLeft() - o.scrollSpeed
- );
- } else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <
- o.scrollSensitivity ) {
- scrolled = this.document.scrollLeft(
- this.document.scrollLeft() + o.scrollSpeed
- );
- }
-
- }
-
- if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {
- $.ui.ddmanager.prepareOffsets( this, event );
- }
- }
-
- //Regenerate the absolute position used for position checks
- this.positionAbs = this._convertPositionTo( "absolute" );
-
- //Set the helper position
- if ( !this.options.axis || this.options.axis !== "y" ) {
- this.helper[ 0 ].style.left = this.position.left + "px";
- }
- if ( !this.options.axis || this.options.axis !== "x" ) {
- this.helper[ 0 ].style.top = this.position.top + "px";
- }
-
- //Rearrange
- for ( i = this.items.length - 1; i >= 0; i-- ) {
-
- //Cache variables and intersection, continue if no intersection
- item = this.items[ i ];
- itemElement = item.item[ 0 ];
- intersection = this._intersectsWithPointer( item );
- if ( !intersection ) {
- continue;
- }
-
- // Only put the placeholder inside the current Container, skip all
- // items from other containers. This works because when moving
- // an item from one container to another the
- // currentContainer is switched before the placeholder is moved.
- //
- // Without this, moving items in "sub-sortables" can cause
- // the placeholder to jitter between the outer and inner container.
- if ( item.instance !== this.currentContainer ) {
- continue;
- }
-
- // Cannot intersect with itself
- // no useless actions that have been done before
- // no action if the item moved is the parent of the item checked
- if ( itemElement !== this.currentItem[ 0 ] &&
- this.placeholder[ intersection === 1 ? "next" : "prev" ]()[ 0 ] !== itemElement &&
- !$.contains( this.placeholder[ 0 ], itemElement ) &&
- ( this.options.type === "semi-dynamic" ?
- !$.contains( this.element[ 0 ], itemElement ) :
- true
- )
- ) {
-
- this.direction = intersection === 1 ? "down" : "up";
-
- if ( this.options.tolerance === "pointer" || this._intersectsWithSides( item ) ) {
- this._rearrange( event, item );
- } else {
- break;
- }
-
- this._trigger( "change", event, this._uiHash() );
- break;
- }
- }
-
- //Post events to containers
- this._contactContainers( event );
-
- //Interconnect with droppables
- if ( $.ui.ddmanager ) {
- $.ui.ddmanager.drag( this, event );
- }
-
- //Call callbacks
- this._trigger( "sort", event, this._uiHash() );
-
- this.lastPositionAbs = this.positionAbs;
- return false;
-
- },
-
- _mouseStop: function( event, noPropagation ) {
-
- if ( !event ) {
- return;
- }
-
- //If we are using droppables, inform the manager about the drop
- if ( $.ui.ddmanager && !this.options.dropBehaviour ) {
- $.ui.ddmanager.drop( this, event );
- }
-
- if ( this.options.revert ) {
- var that = this,
- cur = this.placeholder.offset(),
- axis = this.options.axis,
- animation = {};
-
- if ( !axis || axis === "x" ) {
- animation.left = cur.left - this.offset.parent.left - this.margins.left +
- ( this.offsetParent[ 0 ] === this.document[ 0 ].body ?
- 0 :
- this.offsetParent[ 0 ].scrollLeft
- );
- }
- if ( !axis || axis === "y" ) {
- animation.top = cur.top - this.offset.parent.top - this.margins.top +
- ( this.offsetParent[ 0 ] === this.document[ 0 ].body ?
- 0 :
- this.offsetParent[ 0 ].scrollTop
- );
- }
- this.reverting = true;
- $( this.helper ).animate(
- animation,
- parseInt( this.options.revert, 10 ) || 500,
- function() {
- that._clear( event );
- }
- );
- } else {
- this._clear( event, noPropagation );
- }
-
- return false;
-
- },
-
- cancel: function() {
-
- if ( this.dragging ) {
-
- this._mouseUp( new $.Event( "mouseup", { target: null } ) );
-
- if ( this.options.helper === "original" ) {
- this.currentItem.css( this._storedCSS );
- this._removeClass( this.currentItem, "ui-sortable-helper" );
- } else {
- this.currentItem.show();
- }
-
- //Post deactivating events to containers
- for ( var i = this.containers.length - 1; i >= 0; i-- ) {
- this.containers[ i ]._trigger( "deactivate", null, this._uiHash( this ) );
- if ( this.containers[ i ].containerCache.over ) {
- this.containers[ i ]._trigger( "out", null, this._uiHash( this ) );
- this.containers[ i ].containerCache.over = 0;
- }
- }
-
- }
-
- if ( this.placeholder ) {
-
- //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,
- // it unbinds ALL events from the original node!
- if ( this.placeholder[ 0 ].parentNode ) {
- this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );
- }
- if ( this.options.helper !== "original" && this.helper &&
- this.helper[ 0 ].parentNode ) {
- this.helper.remove();
- }
-
- $.extend( this, {
- helper: null,
- dragging: false,
- reverting: false,
- _noFinalSort: null
- } );
-
- if ( this.domPosition.prev ) {
- $( this.domPosition.prev ).after( this.currentItem );
- } else {
- $( this.domPosition.parent ).prepend( this.currentItem );
- }
- }
-
- return this;
-
- },
-
- serialize: function( o ) {
-
- var items = this._getItemsAsjQuery( o && o.connected ),
- str = [];
- o = o || {};
-
- $( items ).each( function() {
- var res = ( $( o.item || this ).attr( o.attribute || "id" ) || "" )
- .match( o.expression || ( /(.+)[\-=_](.+)/ ) );
- if ( res ) {
- str.push(
- ( o.key || res[ 1 ] + "[]" ) +
- "=" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );
- }
- } );
-
- if ( !str.length && o.key ) {
- str.push( o.key + "=" );
- }
-
- return str.join( "&" );
-
- },
-
- toArray: function( o ) {
-
- var items = this._getItemsAsjQuery( o && o.connected ),
- ret = [];
-
- o = o || {};
-
- items.each( function() {
- ret.push( $( o.item || this ).attr( o.attribute || "id" ) || "" );
- } );
- return ret;
-
- },
-
- /* Be careful with the following core functions */
- _intersectsWith: function( item ) {
-
- var x1 = this.positionAbs.left,
- x2 = x1 + this.helperProportions.width,
- y1 = this.positionAbs.top,
- y2 = y1 + this.helperProportions.height,
- l = item.left,
- r = l + item.width,
- t = item.top,
- b = t + item.height,
- dyClick = this.offset.click.top,
- dxClick = this.offset.click.left,
- isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t &&
- ( y1 + dyClick ) < b ),
- isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l &&
- ( x1 + dxClick ) < r ),
- isOverElement = isOverElementHeight && isOverElementWidth;
-
- if ( this.options.tolerance === "pointer" ||
- this.options.forcePointerForContainers ||
- ( this.options.tolerance !== "pointer" &&
- this.helperProportions[ this.floating ? "width" : "height" ] >
- item[ this.floating ? "width" : "height" ] )
- ) {
- return isOverElement;
- } else {
-
- return ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half
- x2 - ( this.helperProportions.width / 2 ) < r && // Left Half
- t < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half
- y2 - ( this.helperProportions.height / 2 ) < b ); // Top Half
-
- }
- },
-
- _intersectsWithPointer: function( item ) {
- var verticalDirection, horizontalDirection,
- isOverElementHeight = ( this.options.axis === "x" ) ||
- this._isOverAxis(
- this.positionAbs.top + this.offset.click.top, item.top, item.height ),
- isOverElementWidth = ( this.options.axis === "y" ) ||
- this._isOverAxis(
- this.positionAbs.left + this.offset.click.left, item.left, item.width ),
- isOverElement = isOverElementHeight && isOverElementWidth;
-
- if ( !isOverElement ) {
- return false;
- }
-
- verticalDirection = this._getDragVerticalDirection();
- horizontalDirection = this._getDragHorizontalDirection();
-
- return this.floating ?
- ( ( horizontalDirection === "right" || verticalDirection === "down" ) ? 2 : 1 )
- : ( verticalDirection && ( verticalDirection === "down" ? 2 : 1 ) );
-
- },
-
- _intersectsWithSides: function( item ) {
-
- var isOverBottomHalf = this._isOverAxis( this.positionAbs.top +
- this.offset.click.top, item.top + ( item.height / 2 ), item.height ),
- isOverRightHalf = this._isOverAxis( this.positionAbs.left +
- this.offset.click.left, item.left + ( item.width / 2 ), item.width ),
- verticalDirection = this._getDragVerticalDirection(),
- horizontalDirection = this._getDragHorizontalDirection();
-
- if ( this.floating && horizontalDirection ) {
- return ( ( horizontalDirection === "right" && isOverRightHalf ) ||
- ( horizontalDirection === "left" && !isOverRightHalf ) );
- } else {
- return verticalDirection && ( ( verticalDirection === "down" && isOverBottomHalf ) ||
- ( verticalDirection === "up" && !isOverBottomHalf ) );
- }
-
- },
-
- _getDragVerticalDirection: function() {
- var delta = this.positionAbs.top - this.lastPositionAbs.top;
- return delta !== 0 && ( delta > 0 ? "down" : "up" );
- },
-
- _getDragHorizontalDirection: function() {
- var delta = this.positionAbs.left - this.lastPositionAbs.left;
- return delta !== 0 && ( delta > 0 ? "right" : "left" );
- },
-
- refresh: function( event ) {
- this._refreshItems( event );
- this._setHandleClassName();
- this.refreshPositions();
- return this;
- },
-
- _connectWith: function() {
- var options = this.options;
- return options.connectWith.constructor === String ?
- [ options.connectWith ] :
- options.connectWith;
- },
-
- _getItemsAsjQuery: function( connected ) {
-
- var i, j, cur, inst,
- items = [],
- queries = [],
- connectWith = this._connectWith();
-
- if ( connectWith && connected ) {
- for ( i = connectWith.length - 1; i >= 0; i-- ) {
- cur = $( connectWith[ i ], this.document[ 0 ] );
- for ( j = cur.length - 1; j >= 0; j-- ) {
- inst = $.data( cur[ j ], this.widgetFullName );
- if ( inst && inst !== this && !inst.options.disabled ) {
- queries.push( [ $.isFunction( inst.options.items ) ?
- inst.options.items.call( inst.element ) :
- $( inst.options.items, inst.element )
- .not( ".ui-sortable-helper" )
- .not( ".ui-sortable-placeholder" ), inst ] );
- }
- }
- }
- }
-
- queries.push( [ $.isFunction( this.options.items ) ?
- this.options.items
- .call( this.element, null, { options: this.options, item: this.currentItem } ) :
- $( this.options.items, this.element )
- .not( ".ui-sortable-helper" )
- .not( ".ui-sortable-placeholder" ), this ] );
-
- function addItems() {
- items.push( this );
- }
- for ( i = queries.length - 1; i >= 0; i-- ) {
- queries[ i ][ 0 ].each( addItems );
- }
-
- return $( items );
-
- },
-
- _removeCurrentsFromItems: function() {
-
- var list = this.currentItem.find( ":data(" + this.widgetName + "-item)" );
-
- this.items = $.grep( this.items, function( item ) {
- for ( var j = 0; j < list.length; j++ ) {
- if ( list[ j ] === item.item[ 0 ] ) {
- return false;
- }
- }
- return true;
- } );
-
- },
-
- _refreshItems: function( event ) {
-
- this.items = [];
- this.containers = [ this ];
-
- var i, j, cur, inst, targetData, _queries, item, queriesLength,
- items = this.items,
- queries = [ [ $.isFunction( this.options.items ) ?
- this.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :
- $( this.options.items, this.element ), this ] ],
- connectWith = this._connectWith();
-
- //Shouldn't be run the first time through due to massive slow-down
- if ( connectWith && this.ready ) {
- for ( i = connectWith.length - 1; i >= 0; i-- ) {
- cur = $( connectWith[ i ], this.document[ 0 ] );
- for ( j = cur.length - 1; j >= 0; j-- ) {
- inst = $.data( cur[ j ], this.widgetFullName );
- if ( inst && inst !== this && !inst.options.disabled ) {
- queries.push( [ $.isFunction( inst.options.items ) ?
- inst.options.items
- .call( inst.element[ 0 ], event, { item: this.currentItem } ) :
- $( inst.options.items, inst.element ), inst ] );
- this.containers.push( inst );
- }
- }
- }
- }
-
- for ( i = queries.length - 1; i >= 0; i-- ) {
- targetData = queries[ i ][ 1 ];
- _queries = queries[ i ][ 0 ];
-
- for ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {
- item = $( _queries[ j ] );
-
- // Data for target checking (mouse manager)
- item.data( this.widgetName + "-item", targetData );
-
- items.push( {
- item: item,
- instance: targetData,
- width: 0, height: 0,
- left: 0, top: 0
- } );
- }
- }
-
- },
-
- refreshPositions: function( fast ) {
-
- // Determine whether items are being displayed horizontally
- this.floating = this.items.length ?
- this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :
- false;
-
- //This has to be redone because due to the item being moved out/into the offsetParent,
- // the offsetParent's position will change
- if ( this.offsetParent && this.helper ) {
- this.offset.parent = this._getParentOffset();
- }
-
- var i, item, t, p;
-
- for ( i = this.items.length - 1; i >= 0; i-- ) {
- item = this.items[ i ];
-
- //We ignore calculating positions of all connected containers when we're not over them
- if ( item.instance !== this.currentContainer && this.currentContainer &&
- item.item[ 0 ] !== this.currentItem[ 0 ] ) {
- continue;
- }
-
- t = this.options.toleranceElement ?
- $( this.options.toleranceElement, item.item ) :
- item.item;
-
- if ( !fast ) {
- item.width = t.outerWidth();
- item.height = t.outerHeight();
- }
-
- p = t.offset();
- item.left = p.left;
- item.top = p.top;
- }
-
- if ( this.options.custom && this.options.custom.refreshContainers ) {
- this.options.custom.refreshContainers.call( this );
- } else {
- for ( i = this.containers.length - 1; i >= 0; i-- ) {
- p = this.containers[ i ].element.offset();
- this.containers[ i ].containerCache.left = p.left;
- this.containers[ i ].containerCache.top = p.top;
- this.containers[ i ].containerCache.width =
- this.containers[ i ].element.outerWidth();
- this.containers[ i ].containerCache.height =
- this.containers[ i ].element.outerHeight();
- }
- }
-
- return this;
- },
-
- _createPlaceholder: function( that ) {
- that = that || this;
- var className,
- o = that.options;
-
- if ( !o.placeholder || o.placeholder.constructor === String ) {
- className = o.placeholder;
- o.placeholder = {
- element: function() {
-
- var nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(),
- element = $( "<" + nodeName + ">", that.document[ 0 ] );
-
- that._addClass( element, "ui-sortable-placeholder",
- className || that.currentItem[ 0 ].className )
- ._removeClass( element, "ui-sortable-helper" );
-
- if ( nodeName === "tbody" ) {
- that._createTrPlaceholder(
- that.currentItem.find( "tr" ).eq( 0 ),
- $( "<tr>", that.document[ 0 ] ).appendTo( element )
- );
- } else if ( nodeName === "tr" ) {
- that._createTrPlaceholder( that.currentItem, element );
- } else if ( nodeName === "img" ) {
- element.attr( "src", that.currentItem.attr( "src" ) );
- }
-
- if ( !className ) {
- element.css( "visibility", "hidden" );
- }
-
- return element;
- },
- update: function( container, p ) {
-
- // 1. If a className is set as 'placeholder option, we don't force sizes -
- // the class is responsible for that
- // 2. The option 'forcePlaceholderSize can be enabled to force it even if a
- // class name is specified
- if ( className && !o.forcePlaceholderSize ) {
- return;
- }
-
- //If the element doesn't have a actual height by itself (without styles coming
- // from a stylesheet), it receives the inline height from the dragged item
- if ( !p.height() ) {
- p.height(
- that.currentItem.innerHeight() -
- parseInt( that.currentItem.css( "paddingTop" ) || 0, 10 ) -
- parseInt( that.currentItem.css( "paddingBottom" ) || 0, 10 ) );
- }
- if ( !p.width() ) {
- p.width(
- that.currentItem.innerWidth() -
- parseInt( that.currentItem.css( "paddingLeft" ) || 0, 10 ) -
- parseInt( that.currentItem.css( "paddingRight" ) || 0, 10 ) );
- }
- }
- };
- }
-
- //Create the placeholder
- that.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );
-
- //Append it after the actual current item
- that.currentItem.after( that.placeholder );
-
- //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
- o.placeholder.update( that, that.placeholder );
-
- },
-
- _createTrPlaceholder: function( sourceTr, targetTr ) {
- var that = this;
-
- sourceTr.children().each( function() {
- $( "<td>&#160;</td>", that.document[ 0 ] )
- .attr( "colspan", $( this ).attr( "colspan" ) || 1 )
- .appendTo( targetTr );
- } );
- },
-
- _contactContainers: function( event ) {
- var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,
- floating, axis,
- innermostContainer = null,
- innermostIndex = null;
-
- // Get innermost container that intersects with item
- for ( i = this.containers.length - 1; i >= 0; i-- ) {
-
- // Never consider a container that's located within the item itself
- if ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {
- continue;
- }
-
- if ( this._intersectsWith( this.containers[ i ].containerCache ) ) {
-
- // If we've already found a container and it's more "inner" than this, then continue
- if ( innermostContainer &&
- $.contains(
- this.containers[ i ].element[ 0 ],
- innermostContainer.element[ 0 ] ) ) {
- continue;
- }
-
- innermostContainer = this.containers[ i ];
- innermostIndex = i;
-
- } else {
-
- // container doesn't intersect. trigger "out" event if necessary
- if ( this.containers[ i ].containerCache.over ) {
- this.containers[ i ]._trigger( "out", event, this._uiHash( this ) );
- this.containers[ i ].containerCache.over = 0;
- }
- }
-
- }
-
- // If no intersecting containers found, return
- if ( !innermostContainer ) {
- return;
- }
-
- // Move the item into the container if it's not there already
- if ( this.containers.length === 1 ) {
- if ( !this.containers[ innermostIndex ].containerCache.over ) {
- this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) );
- this.containers[ innermostIndex ].containerCache.over = 1;
- }
- } else {
-
- // When entering a new container, we will find the item with the least distance and
- // append our item near it
- dist = 10000;
- itemWithLeastDistance = null;
- floating = innermostContainer.floating || this._isFloating( this.currentItem );
- posProperty = floating ? "left" : "top";
- sizeProperty = floating ? "width" : "height";
- axis = floating ? "pageX" : "pageY";
-
- for ( j = this.items.length - 1; j >= 0; j-- ) {
- if ( !$.contains(
- this.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )
- ) {
- continue;
- }
- if ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {
- continue;
- }
-
- cur = this.items[ j ].item.offset()[ posProperty ];
- nearBottom = false;
- if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {
- nearBottom = true;
- }
-
- if ( Math.abs( event[ axis ] - cur ) < dist ) {
- dist = Math.abs( event[ axis ] - cur );
- itemWithLeastDistance = this.items[ j ];
- this.direction = nearBottom ? "up" : "down";
- }
- }
-
- //Check if dropOnEmpty is enabled
- if ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {
- return;
- }
-
- if ( this.currentContainer === this.containers[ innermostIndex ] ) {
- if ( !this.currentContainer.containerCache.over ) {
- this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );
- this.currentContainer.containerCache.over = 1;
- }
- return;
- }
-
- itemWithLeastDistance ?
- this._rearrange( event, itemWithLeastDistance, null, true ) :
- this._rearrange( event, null, this.containers[ innermostIndex ].element, true );
- this._trigger( "change", event, this._uiHash() );
- this.containers[ innermostIndex ]._trigger( "change", event, this._uiHash( this ) );
- this.currentContainer = this.containers[ innermostIndex ];
-
- //Update the placeholder
- this.options.placeholder.update( this.currentContainer, this.placeholder );
-
- this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) );
- this.containers[ innermostIndex ].containerCache.over = 1;
- }
-
- },
-
- _createHelper: function( event ) {
-
- var o = this.options,
- helper = $.isFunction( o.helper ) ?
- $( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :
- ( o.helper === "clone" ? this.currentItem.clone() : this.currentItem );
-
- //Add the helper to the DOM if that didn't happen already
- if ( !helper.parents( "body" ).length ) {
- $( o.appendTo !== "parent" ?
- o.appendTo :
- this.currentItem[ 0 ].parentNode )[ 0 ].appendChild( helper[ 0 ] );
- }
-
- if ( helper[ 0 ] === this.currentItem[ 0 ] ) {
- this._storedCSS = {
- width: this.currentItem[ 0 ].style.width,
- height: this.currentItem[ 0 ].style.height,
- position: this.currentItem.css( "position" ),
- top: this.currentItem.css( "top" ),
- left: this.currentItem.css( "left" )
- };
- }
-
- if ( !helper[ 0 ].style.width || o.forceHelperSize ) {
- helper.width( this.currentItem.width() );
- }
- if ( !helper[ 0 ].style.height || o.forceHelperSize ) {
- helper.height( this.currentItem.height() );
- }
-
- return helper;
-
- },
-
- _adjustOffsetFromHelper: function( obj ) {
- if ( typeof obj === "string" ) {
- obj = obj.split( " " );
- }
- if ( $.isArray( obj ) ) {
- obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };
- }
- if ( "left" in obj ) {
- this.offset.click.left = obj.left + this.margins.left;
- }
- if ( "right" in obj ) {
- this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
- }
- if ( "top" in obj ) {
- this.offset.click.top = obj.top + this.margins.top;
- }
- if ( "bottom" in obj ) {
- this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
- }
- },
-
- _getParentOffset: function() {
-
- //Get the offsetParent and cache its position
- this.offsetParent = this.helper.offsetParent();
- var po = this.offsetParent.offset();
-
- // This is a special case where we need to modify a offset calculated on start, since the
- // following happened:
- // 1. The position of the helper is absolute, so it's position is calculated based on the
- // next positioned parent
- // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't
- // the document, which means that the scroll is included in the initial calculation of the
- // offset of the parent, and never recalculated upon drag
- if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&
- $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {
- po.left += this.scrollParent.scrollLeft();
- po.top += this.scrollParent.scrollTop();
- }
-
- // This needs to be actually done for all browsers, since pageX/pageY includes this
- // information with an ugly IE fix
- if ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||
- ( this.offsetParent[ 0 ].tagName &&
- this.offsetParent[ 0 ].tagName.toLowerCase() === "html" && $.ui.ie ) ) {
- po = { top: 0, left: 0 };
- }
-
- return {
- top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ),
- left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 )
- };
-
- },
-
- _getRelativeOffset: function() {
-
- if ( this.cssPosition === "relative" ) {
- var p = this.currentItem.position();
- return {
- top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) +
- this.scrollParent.scrollTop(),
- left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) +
- this.scrollParent.scrollLeft()
- };
- } else {
- return { top: 0, left: 0 };
- }
-
- },
-
- _cacheMargins: function() {
- this.margins = {
- left: ( parseInt( this.currentItem.css( "marginLeft" ), 10 ) || 0 ),
- top: ( parseInt( this.currentItem.css( "marginTop" ), 10 ) || 0 )
- };
- },
-
- _cacheHelperProportions: function() {
- this.helperProportions = {
- width: this.helper.outerWidth(),
- height: this.helper.outerHeight()
- };
- },
-
- _setContainment: function() {
-
- var ce, co, over,
- o = this.options;
- if ( o.containment === "parent" ) {
- o.containment = this.helper[ 0 ].parentNode;
- }
- if ( o.containment === "document" || o.containment === "window" ) {
- this.containment = [
- 0 - this.offset.relative.left - this.offset.parent.left,
- 0 - this.offset.relative.top - this.offset.parent.top,
- o.containment === "document" ?
- this.document.width() :
- this.window.width() - this.helperProportions.width - this.margins.left,
- ( o.containment === "document" ?
- ( this.document.height() || document.body.parentNode.scrollHeight ) :
- this.window.height() || this.document[ 0 ].body.parentNode.scrollHeight
- ) - this.helperProportions.height - this.margins.top
- ];
- }
-
- if ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {
- ce = $( o.containment )[ 0 ];
- co = $( o.containment ).offset();
- over = ( $( ce ).css( "overflow" ) !== "hidden" );
-
- this.containment = [
- co.left + ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) +
- ( parseInt( $( ce ).css( "paddingLeft" ), 10 ) || 0 ) - this.margins.left,
- co.top + ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) +
- ( parseInt( $( ce ).css( "paddingTop" ), 10 ) || 0 ) - this.margins.top,
- co.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
- ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) -
- ( parseInt( $( ce ).css( "paddingRight" ), 10 ) || 0 ) -
- this.helperProportions.width - this.margins.left,
- co.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
- ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) -
- ( parseInt( $( ce ).css( "paddingBottom" ), 10 ) || 0 ) -
- this.helperProportions.height - this.margins.top
- ];
- }
-
- },
-
- _convertPositionTo: function( d, pos ) {
-
- if ( !pos ) {
- pos = this.position;
- }
- var mod = d === "absolute" ? 1 : -1,
- scroll = this.cssPosition === "absolute" &&
- !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
- $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?
- this.offsetParent :
- this.scrollParent,
- scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );
-
- return {
- top: (
-
- // The absolute mouse position
- pos.top +
-
- // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.relative.top * mod +
-
- // The offsetParent's offset without borders (offset + border)
- this.offset.parent.top * mod -
- ( ( this.cssPosition === "fixed" ?
- -this.scrollParent.scrollTop() :
- ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )
- ),
- left: (
-
- // The absolute mouse position
- pos.left +
-
- // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.relative.left * mod +
-
- // The offsetParent's offset without borders (offset + border)
- this.offset.parent.left * mod -
- ( ( this.cssPosition === "fixed" ?
- -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :
- scroll.scrollLeft() ) * mod )
- )
- };
-
- },
-
- _generatePosition: function( event ) {
-
- var top, left,
- o = this.options,
- pageX = event.pageX,
- pageY = event.pageY,
- scroll = this.cssPosition === "absolute" &&
- !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
- $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?
- this.offsetParent :
- this.scrollParent,
- scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );
-
- // This is another very weird special case that only happens for relative elements:
- // 1. If the css position is relative
- // 2. and the scroll parent is the document or similar to the offset parent
- // we have to refresh the relative offset during the scroll so there are no jumps
- if ( this.cssPosition === "relative" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
- this.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {
- this.offset.relative = this._getRelativeOffset();
- }
-
- /*
- * - Position constraining -
- * Constrain the position to a mix of grid, containment.
- */
-
- if ( this.originalPosition ) { //If we are not dragging yet, we won't check for options
-
- if ( this.containment ) {
- if ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {
- pageX = this.containment[ 0 ] + this.offset.click.left;
- }
- if ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {
- pageY = this.containment[ 1 ] + this.offset.click.top;
- }
- if ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {
- pageX = this.containment[ 2 ] + this.offset.click.left;
- }
- if ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {
- pageY = this.containment[ 3 ] + this.offset.click.top;
- }
- }
-
- if ( o.grid ) {
- top = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /
- o.grid[ 1 ] ) * o.grid[ 1 ];
- pageY = this.containment ?
- ( ( top - this.offset.click.top >= this.containment[ 1 ] &&
- top - this.offset.click.top <= this.containment[ 3 ] ) ?
- top :
- ( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?
- top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :
- top;
-
- left = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /
- o.grid[ 0 ] ) * o.grid[ 0 ];
- pageX = this.containment ?
- ( ( left - this.offset.click.left >= this.containment[ 0 ] &&
- left - this.offset.click.left <= this.containment[ 2 ] ) ?
- left :
- ( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?
- left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :
- left;
- }
-
- }
-
- return {
- top: (
-
- // The absolute mouse position
- pageY -
-
- // Click offset (relative to the element)
- this.offset.click.top -
-
- // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.relative.top -
-
- // The offsetParent's offset without borders (offset + border)
- this.offset.parent.top +
- ( ( this.cssPosition === "fixed" ?
- -this.scrollParent.scrollTop() :
- ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )
- ),
- left: (
-
- // The absolute mouse position
- pageX -
-
- // Click offset (relative to the element)
- this.offset.click.left -
-
- // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.relative.left -
-
- // The offsetParent's offset without borders (offset + border)
- this.offset.parent.left +
- ( ( this.cssPosition === "fixed" ?
- -this.scrollParent.scrollLeft() :
- scrollIsRootNode ? 0 : scroll.scrollLeft() ) )
- )
- };
-
- },
-
- _rearrange: function( event, i, a, hardRefresh ) {
-
- a ? a[ 0 ].appendChild( this.placeholder[ 0 ] ) :
- i.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],
- ( this.direction === "down" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );
-
- //Various things done here to improve the performance:
- // 1. we create a setTimeout, that calls refreshPositions
- // 2. on the instance, we have a counter variable, that get's higher after every append
- // 3. on the local scope, we copy the counter variable, and check in the timeout,
- // if it's still the same
- // 4. this lets only the last addition to the timeout stack through
- this.counter = this.counter ? ++this.counter : 1;
- var counter = this.counter;
-
- this._delay( function() {
- if ( counter === this.counter ) {
-
- //Precompute after each DOM insertion, NOT on mousemove
- this.refreshPositions( !hardRefresh );
- }
- } );
-
- },
-
- _clear: function( event, noPropagation ) {
-
- this.reverting = false;
-
- // We delay all events that have to be triggered to after the point where the placeholder
- // has been removed and everything else normalized again
- var i,
- delayedTriggers = [];
-
- // We first have to update the dom position of the actual currentItem
- // Note: don't do it if the current item is already removed (by a user), or it gets
- // reappended (see #4088)
- if ( !this._noFinalSort && this.currentItem.parent().length ) {
- this.placeholder.before( this.currentItem );
- }
- this._noFinalSort = null;
-
- if ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {
- for ( i in this._storedCSS ) {
- if ( this._storedCSS[ i ] === "auto" || this._storedCSS[ i ] === "static" ) {
- this._storedCSS[ i ] = "";
- }
- }
- this.currentItem.css( this._storedCSS );
- this._removeClass( this.currentItem, "ui-sortable-helper" );
- } else {
- this.currentItem.show();
- }
-
- if ( this.fromOutside && !noPropagation ) {
- delayedTriggers.push( function( event ) {
- this._trigger( "receive", event, this._uiHash( this.fromOutside ) );
- } );
- }
- if ( ( this.fromOutside ||
- this.domPosition.prev !==
- this.currentItem.prev().not( ".ui-sortable-helper" )[ 0 ] ||
- this.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {
-
- // Trigger update callback if the DOM position has changed
- delayedTriggers.push( function( event ) {
- this._trigger( "update", event, this._uiHash() );
- } );
- }
-
- // Check if the items Container has Changed and trigger appropriate
- // events.
- if ( this !== this.currentContainer ) {
- if ( !noPropagation ) {
- delayedTriggers.push( function( event ) {
- this._trigger( "remove", event, this._uiHash() );
- } );
- delayedTriggers.push( ( function( c ) {
- return function( event ) {
- c._trigger( "receive", event, this._uiHash( this ) );
- };
- } ).call( this, this.currentContainer ) );
- delayedTriggers.push( ( function( c ) {
- return function( event ) {
- c._trigger( "update", event, this._uiHash( this ) );
- };
- } ).call( this, this.currentContainer ) );
- }
- }
-
- //Post events to containers
- function delayEvent( type, instance, container ) {
- return function( event ) {
- container._trigger( type, event, instance._uiHash( instance ) );
- };
- }
- for ( i = this.containers.length - 1; i >= 0; i-- ) {
- if ( !noPropagation ) {
- delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
- }
- if ( this.containers[ i ].containerCache.over ) {
- delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
- this.containers[ i ].containerCache.over = 0;
- }
- }
-
- //Do what was originally in plugins
- if ( this.storedCursor ) {
- this.document.find( "body" ).css( "cursor", this.storedCursor );
- this.storedStylesheet.remove();
- }
- if ( this._storedOpacity ) {
- this.helper.css( "opacity", this._storedOpacity );
- }
- if ( this._storedZIndex ) {
- this.helper.css( "zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex );
- }
-
- this.dragging = false;
-
- if ( !noPropagation ) {
- this._trigger( "beforeStop", event, this._uiHash() );
- }
-
- //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,
- // it unbinds ALL events from the original node!
- this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );
-
- if ( !this.cancelHelperRemoval ) {
- if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
- this.helper.remove();
- }
- this.helper = null;
- }
-
- if ( !noPropagation ) {
- for ( i = 0; i < delayedTriggers.length; i++ ) {
-
- // Trigger all delayed events
- delayedTriggers[ i ].call( this, event );
- }
- this._trigger( "stop", event, this._uiHash() );
- }
-
- this.fromOutside = false;
- return !this.cancelHelperRemoval;
-
- },
-
- _trigger: function() {
- if ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {
- this.cancel();
- }
- },
-
- _uiHash: function( _inst ) {
- var inst = _inst || this;
- return {
- helper: inst.helper,
- placeholder: inst.placeholder || $( [] ),
- position: inst.position,
- originalPosition: inst.originalPosition,
- offset: inst.positionAbs,
- item: inst.currentItem,
- sender: _inst ? _inst.element : null
- };
- }
-
-} );
-
-
-/*!
- * jQuery UI Spinner 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Spinner
-//>>group: Widgets
-//>>description: Displays buttons to easily input numbers via the keyboard or mouse.
-//>>docs: http://api.jqueryui.com/spinner/
-//>>demos: http://jqueryui.com/spinner/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/spinner.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-function spinnerModifer( fn ) {
- return function() {
- var previous = this.element.val();
- fn.apply( this, arguments );
- this._refresh();
- if ( previous !== this.element.val() ) {
- this._trigger( "change" );
- }
- };
-}
-
-$.widget( "ui.spinner", {
- version: "1.12.1",
- defaultElement: "<input>",
- 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: true,
- max: null,
- min: null,
- numberFormat: null,
- page: 10,
- step: 1,
-
- change: null,
- spin: null,
- start: null,
- stop: null
- },
-
- _create: function() {
-
- // handle string values that need to be parsed
- this._setOption( "max", this.options.max );
- this._setOption( "min", this.options.min );
- this._setOption( "step", this.options.step );
-
- // Only format if there is a value, prevents the field from being marked
- // as invalid in Firefox, see #9573.
- if ( this.value() !== "" ) {
-
- // Format the value, but don't constrain.
- this._value( this.element.val(), true );
- }
-
- this._draw();
- this._on( this._events );
- this._refresh();
-
- // Turning off autocomplete prevents the browser from remembering the
- // value when navigating through history, so we re-enable autocomplete
- // if the page is unloaded before the widget is destroyed. #7790
- this._on( this.window, {
- beforeunload: function() {
- this.element.removeAttr( "autocomplete" );
- }
- } );
- },
-
- _getCreateOptions: function() {
- var options = this._super();
- var element = this.element;
-
- $.each( [ "min", "max", "step" ], function( i, option ) {
- var value = element.attr( option );
- if ( value != null && value.length ) {
- options[ option ] = value;
- }
- } );
-
- return options;
- },
-
- _events: {
- keydown: function( event ) {
- if ( this._start( event ) && this._keydown( event ) ) {
- event.preventDefault();
- }
- },
- keyup: "_stop",
- focus: function() {
- this.previous = this.element.val();
- },
- blur: function( event ) {
- if ( this.cancelBlur ) {
- delete this.cancelBlur;
- return;
- }
-
- this._stop();
- this._refresh();
- if ( this.previous !== this.element.val() ) {
- this._trigger( "change", event );
- }
- },
- mousewheel: function( event, delta ) {
- if ( !delta ) {
- return;
- }
- if ( !this.spinning && !this._start( event ) ) {
- return false;
- }
-
- this._spin( ( delta > 0 ? 1 : -1 ) * this.options.step, event );
- clearTimeout( this.mousewheelTimer );
- this.mousewheelTimer = this._delay( function() {
- if ( this.spinning ) {
- this._stop( event );
- }
- }, 100 );
- event.preventDefault();
- },
- "mousedown .ui-spinner-button": function( event ) {
- var previous;
-
- // We never want the buttons to have focus; whenever the user is
- // interacting with the spinner, the focus should be on the input.
- // If the input is focused then this.previous is properly set from
- // when the input first received focus. If the input is not focused
- // then we need to set this.previous based on the value before spinning.
- previous = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ) ?
- this.previous : this.element.val();
- function checkFocus() {
- var isActive = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] );
- if ( !isActive ) {
- this.element.trigger( "focus" );
- this.previous = previous;
-
- // support: IE
- // IE sets focus asynchronously, so we need to check if focus
- // moved off of the input because the user clicked on the button.
- this._delay( function() {
- this.previous = previous;
- } );
- }
- }
-
- // Ensure focus is on (or stays on) the text field
- event.preventDefault();
- checkFocus.call( this );
-
- // Support: IE
- // IE doesn't prevent moving focus even with event.preventDefault()
- // so we set a flag to know when we should ignore the blur event
- // and check (again) if focus moved off of the input.
- this.cancelBlur = true;
- this._delay( function() {
- delete this.cancelBlur;
- checkFocus.call( this );
- } );
-
- if ( this._start( event ) === false ) {
- return;
- }
-
- this._repeat( null, $( event.currentTarget )
- .hasClass( "ui-spinner-up" ) ? 1 : -1, event );
- },
- "mouseup .ui-spinner-button": "_stop",
- "mouseenter .ui-spinner-button": function( event ) {
-
- // button will add ui-state-active if mouse was down while mouseleave and kept down
- if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
- return;
- }
-
- if ( this._start( event ) === false ) {
- return false;
- }
- this._repeat( null, $( event.currentTarget )
- .hasClass( "ui-spinner-up" ) ? 1 : -1, event );
- },
-
- // TODO: do we really want to consider this a stop?
- // shouldn't we just stop the repeater and wait until mouseup before
- // we trigger the stop event?
- "mouseleave .ui-spinner-button": "_stop"
- },
-
- // Support mobile enhanced option and make backcompat more sane
- _enhance: function() {
- this.uiSpinner = this.element
- .attr( "autocomplete", "off" )
- .wrap( "<span>" )
- .parent()
-
- // Add buttons
- .append(
- "<a></a><a></a>"
- );
- },
-
- _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" );
-
- // Button bindings
- this.buttons = this.uiSpinner.children( "a" )
- .attr( "tabIndex", -1 )
- .attr( "aria-hidden", true )
- .button( {
- classes: {
- "ui-button": ""
- }
- } );
-
- // TODO: Right now button does not support classes this is already updated in button PR
- 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": false
- } );
- this.buttons.last().button( {
- "icon": this.options.icons.down,
- "showLabel": false
- } );
-
- // IE 6 doesn't understand height: 50% for the buttons
- // unless the wrapper has an explicit height
- if ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) &&
- this.uiSpinner.height() > 0 ) {
- this.uiSpinner.height( this.uiSpinner.height() );
- }
- },
-
- _keydown: function( event ) {
- var options = this.options,
- keyCode = $.ui.keyCode;
-
- switch ( event.keyCode ) {
- case keyCode.UP:
- this._repeat( null, 1, event );
- return true;
- case keyCode.DOWN:
- this._repeat( null, -1, event );
- return true;
- case keyCode.PAGE_UP:
- this._repeat( null, options.page, event );
- return true;
- case keyCode.PAGE_DOWN:
- this._repeat( null, -options.page, event );
- return true;
- }
-
- return false;
- },
-
- _start: function( event ) {
- if ( !this.spinning && this._trigger( "start", event ) === false ) {
- return false;
- }
-
- if ( !this.counter ) {
- this.counter = 1;
- }
- this.spinning = true;
- return true;
- },
-
- _repeat: function( i, steps, event ) {
- i = i || 500;
-
- clearTimeout( this.timer );
- this.timer = this._delay( function() {
- this._repeat( 40, steps, event );
- }, i );
-
- this._spin( steps * this.options.step, event );
- },
-
- _spin: function( step, event ) {
- var value = this.value() || 0;
-
- if ( !this.counter ) {
- this.counter = 1;
- }
-
- value = this._adjustValue( value + step * this._increment( this.counter ) );
-
- if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false ) {
- this._value( value );
- this.counter++;
- }
- },
-
- _increment: function( i ) {
- var incremental = this.options.incremental;
-
- if ( incremental ) {
- return $.isFunction( incremental ) ?
- incremental( i ) :
- Math.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );
- }
-
- return 1;
- },
-
- _precision: function() {
- var precision = this._precisionOf( this.options.step );
- if ( this.options.min !== null ) {
- precision = Math.max( precision, this._precisionOf( this.options.min ) );
- }
- return precision;
- },
-
- _precisionOf: function( num ) {
- var str = num.toString(),
- decimal = str.indexOf( "." );
- return decimal === -1 ? 0 : str.length - decimal - 1;
- },
-
- _adjustValue: function( value ) {
- var base, aboveMin,
- options = this.options;
-
- // Make sure we're at a valid step
- // - find out where we are relative to the base (min or 0)
- base = options.min !== null ? options.min : 0;
- aboveMin = value - base;
-
- // - round to the nearest step
- aboveMin = Math.round( aboveMin / options.step ) * options.step;
-
- // - rounding is based on 0, so adjust back to our base
- value = base + aboveMin;
-
- // Fix precision from bad JS floating point math
- value = parseFloat( value.toFixed( this._precision() ) );
-
- // Clamp the value
- if ( options.max !== null && value > options.max ) {
- return options.max;
- }
- if ( options.min !== null && value < options.min ) {
- return options.min;
- }
-
- return value;
- },
-
- _stop: function( event ) {
- if ( !this.spinning ) {
- return;
- }
-
- clearTimeout( this.timer );
- clearTimeout( this.mousewheelTimer );
- this.counter = 0;
- this.spinning = false;
- this._trigger( "stop", event );
- },
-
- _setOption: function( key, value ) {
- var prevValue, first, last;
-
- if ( key === "culture" || key === "numberFormat" ) {
- prevValue = this._parse( this.element.val() );
- this.options[ key ] = value;
- this.element.val( this._format( prevValue ) );
- return;
- }
-
- if ( key === "max" || key === "min" || key === "step" ) {
- if ( typeof value === "string" ) {
- value = this._parse( value );
- }
- }
- if ( key === "icons" ) {
- first = this.buttons.first().find( ".ui-icon" );
- this._removeClass( first, null, this.options.icons.up );
- this._addClass( first, null, value.up );
- last = this.buttons.last().find( ".ui-icon" );
- this._removeClass( last, null, this.options.icons.down );
- this._addClass( last, null, value.down );
- }
-
- this._super( key, value );
- },
-
- _setOptionDisabled: function( value ) {
- this._super( value );
-
- this._toggleClass( this.uiSpinner, null, "ui-state-disabled", !!value );
- this.element.prop( "disabled", !!value );
- this.buttons.button( value ? "disable" : "enable" );
- },
-
- _setOptions: spinnerModifer( function( options ) {
- this._super( options );
- } ),
-
- _parse: function( val ) {
- if ( typeof val === "string" && val !== "" ) {
- val = window.Globalize && this.options.numberFormat ?
- Globalize.parseFloat( val, 10, this.options.culture ) : +val;
- }
- return val === "" || isNaN( val ) ? null : val;
- },
-
- _format: function( value ) {
- if ( value === "" ) {
- return "";
- }
- return window.Globalize && this.options.numberFormat ?
- Globalize.format( value, this.options.numberFormat, this.options.culture ) :
- value;
- },
-
- _refresh: function() {
- this.element.attr( {
- "aria-valuemin": this.options.min,
- "aria-valuemax": this.options.max,
-
- // TODO: what should we do with values that can't be parsed?
- "aria-valuenow": this._parse( this.element.val() )
- } );
- },
-
- isValid: function() {
- var value = this.value();
-
- // Null is invalid
- if ( value === null ) {
- return false;
- }
-
- // If value gets adjusted, it's invalid
- return value === this._adjustValue( value );
- },
-
- // Update the value without triggering change
- _value: function( value, allowAny ) {
- var parsed;
- if ( value !== "" ) {
- parsed = this._parse( value );
- if ( parsed !== null ) {
- if ( !allowAny ) {
- parsed = this._adjustValue( parsed );
- }
- value = this._format( parsed );
- }
- }
- this.element.val( value );
- this._refresh();
- },
-
- _destroy: function() {
- this.element
- .prop( "disabled", false )
- .removeAttr( "autocomplete role aria-valuemin aria-valuemax aria-valuenow" );
-
- this.uiSpinner.replaceWith( this.element );
- },
-
- stepUp: spinnerModifer( function( steps ) {
- this._stepUp( steps );
- } ),
- _stepUp: function( steps ) {
- if ( this._start() ) {
- this._spin( ( steps || 1 ) * this.options.step );
- this._stop();
- }
- },
-
- stepDown: spinnerModifer( function( steps ) {
- this._stepDown( steps );
- } ),
- _stepDown: function( steps ) {
- if ( this._start() ) {
- this._spin( ( steps || 1 ) * -this.options.step );
- this._stop();
- }
- },
-
- pageUp: spinnerModifer( function( pages ) {
- this._stepUp( ( pages || 1 ) * this.options.page );
- } ),
-
- pageDown: spinnerModifer( function( pages ) {
- this._stepDown( ( pages || 1 ) * this.options.page );
- } ),
-
- value: function( newVal ) {
- if ( !arguments.length ) {
- return this._parse( this.element.val() );
- }
- spinnerModifer( this._value ).call( this, newVal );
- },
-
- widget: function() {
- return this.uiSpinner;
- }
-} );
-
-// DEPRECATED
-// TODO: switch return back to widget declaration at top of file when this is removed
-if ( $.uiBackCompat !== false ) {
-
- // Backcompat for spinner html extension points
- $.widget( "ui.spinner", $.ui.spinner, {
- _enhance: function() {
- this.uiSpinner = this.element
- .attr( "autocomplete", "off" )
- .wrap( this._uiSpinnerHtml() )
- .parent()
-
- // Add buttons
- .append( this._buttonHtml() );
- },
- _uiSpinnerHtml: function() {
- return "<span>";
- },
-
- _buttonHtml: function() {
- return "<a></a><a></a>";
- }
- } );
-}
-
-var widgetsSpinner = $.ui.spinner;
-
-
-/*!
- * jQuery UI Tabs 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Tabs
-//>>group: Widgets
-//>>description: Transforms a set of container elements into a tab structure.
-//>>docs: http://api.jqueryui.com/tabs/
-//>>demos: http://jqueryui.com/tabs/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/tabs.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-$.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: false,
- event: "click",
- heightStyle: "content",
- hide: null,
- show: null,
-
- // Callbacks
- activate: null,
- beforeActivate: null,
- beforeLoad: null,
- load: null
- },
-
- _isLocal: ( function() {
- var rhash = /#.*$/;
-
- return function( anchor ) {
- var anchorUrl, locationUrl;
-
- anchorUrl = anchor.href.replace( rhash, "" );
- locationUrl = location.href.replace( rhash, "" );
-
- // Decoding may throw an error if the URL isn't UTF-8 (#9518)
- try {
- anchorUrl = decodeURIComponent( anchorUrl );
- } catch ( error ) {}
- try {
- locationUrl = decodeURIComponent( locationUrl );
- } catch ( error ) {}
-
- return anchor.hash.length > 1 && anchorUrl === locationUrl;
- };
- } )(),
-
- _create: function() {
- var that = this,
- options = this.options;
-
- this.running = false;
-
- this._addClass( "ui-tabs", "ui-widget ui-widget-content" );
- this._toggleClass( "ui-tabs-collapsible", null, options.collapsible );
-
- this._processTabs();
- options.active = this._initialActive();
-
- // Take disabling tabs via class attribute from HTML
- // into account and update option properly.
- if ( $.isArray( options.disabled ) ) {
- options.disabled = $.unique( options.disabled.concat(
- $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
- return that.tabs.index( li );
- } )
- ) ).sort();
- }
-
- // Check for length avoids error when initializing empty list
- if ( this.options.active !== false && this.anchors.length ) {
- this.active = this._findActive( options.active );
- } else {
- this.active = $();
- }
-
- this._refresh();
-
- if ( this.active.length ) {
- this.load( options.active );
- }
- },
-
- _initialActive: function() {
- var active = this.options.active,
- collapsible = this.options.collapsible,
- locationHash = location.hash.substring( 1 );
-
- if ( active === null ) {
-
- // check the fragment identifier in the URL
- if ( locationHash ) {
- this.tabs.each( function( i, tab ) {
- if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
- active = i;
- return false;
- }
- } );
- }
-
- // Check for a tab marked active via a class
- if ( active === null ) {
- active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
- }
-
- // No active tab, set to false
- if ( active === null || active === -1 ) {
- active = this.tabs.length ? 0 : false;
- }
- }
-
- // Handle numbers: negative, out of range
- if ( active !== false ) {
- active = this.tabs.index( this.tabs.eq( active ) );
- if ( active === -1 ) {
- active = collapsible ? false : 0;
- }
- }
-
- // Don't allow collapsible: false and active: false
- if ( !collapsible && active === false && this.anchors.length ) {
- active = 0;
- }
-
- return active;
- },
-
- _getCreateEventData: function() {
- return {
- tab: this.active,
- panel: !this.active.length ? $() : this._getPanelForTab( this.active )
- };
- },
-
- _tabKeydown: function( event ) {
- var focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( "li" ),
- selectedIndex = this.tabs.index( focusedTab ),
- goingForward = true;
-
- if ( this._handlePageNav( event ) ) {
- return;
- }
-
- switch ( event.keyCode ) {
- case $.ui.keyCode.RIGHT:
- case $.ui.keyCode.DOWN:
- selectedIndex++;
- break;
- case $.ui.keyCode.UP:
- case $.ui.keyCode.LEFT:
- goingForward = false;
- selectedIndex--;
- break;
- case $.ui.keyCode.END:
- selectedIndex = this.anchors.length - 1;
- break;
- case $.ui.keyCode.HOME:
- selectedIndex = 0;
- break;
- case $.ui.keyCode.SPACE:
-
- // Activate only, no collapsing
- event.preventDefault();
- clearTimeout( this.activating );
- this._activate( selectedIndex );
- return;
- case $.ui.keyCode.ENTER:
-
- // Toggle (cancel delayed activation, allow collapsing)
- event.preventDefault();
- clearTimeout( this.activating );
-
- // Determine if we should collapse or activate
- this._activate( selectedIndex === this.options.active ? false : selectedIndex );
- return;
- default:
- return;
- }
-
- // Focus the appropriate tab, based on which key was pressed
- event.preventDefault();
- clearTimeout( this.activating );
- selectedIndex = this._focusNextTab( selectedIndex, goingForward );
-
- // Navigating with control/command key will prevent automatic activation
- if ( !event.ctrlKey && !event.metaKey ) {
-
- // Update aria-selected immediately so that AT think the tab is already selected.
- // Otherwise AT may confuse the user by stating that they need to activate the tab,
- // but the tab will already be activated by the time the announcement finishes.
- focusedTab.attr( "aria-selected", "false" );
- this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
-
- this.activating = this._delay( function() {
- this.option( "active", selectedIndex );
- }, this.delay );
- }
- },
-
- _panelKeydown: function( event ) {
- if ( this._handlePageNav( event ) ) {
- return;
- }
-
- // Ctrl+up moves focus to the current tab
- if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
- event.preventDefault();
- this.active.trigger( "focus" );
- }
- },
-
- // Alt+page up/down moves focus to the previous/next tab (and activates)
- _handlePageNav: function( event ) {
- if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
- this._activate( this._focusNextTab( this.options.active - 1, false ) );
- return true;
- }
- if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
- this._activate( this._focusNextTab( this.options.active + 1, true ) );
- return true;
- }
- },
-
- _findNextTab: function( index, goingForward ) {
- var lastTabIndex = this.tabs.length - 1;
-
- function constrain() {
- if ( index > lastTabIndex ) {
- index = 0;
- }
- if ( index < 0 ) {
- index = lastTabIndex;
- }
- return index;
- }
-
- while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
- index = goingForward ? index + 1 : index - 1;
- }
-
- return index;
- },
-
- _focusNextTab: function( index, goingForward ) {
- index = this._findNextTab( index, goingForward );
- this.tabs.eq( index ).trigger( "focus" );
- return index;
- },
-
- _setOption: function( key, value ) {
- if ( key === "active" ) {
-
- // _activate() will handle invalid values and update this.options
- this._activate( value );
- return;
- }
-
- this._super( key, value );
-
- if ( key === "collapsible" ) {
- this._toggleClass( "ui-tabs-collapsible", null, value );
-
- // Setting collapsible: false while collapsed; open first panel
- if ( !value && this.options.active === false ) {
- this._activate( 0 );
- }
- }
-
- if ( key === "event" ) {
- this._setupEvents( value );
- }
-
- if ( key === "heightStyle" ) {
- this._setupHeightStyle( value );
- }
- },
-
- _sanitizeSelector: function( hash ) {
- return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
- },
-
- refresh: function() {
- var options = this.options,
- lis = this.tablist.children( ":has(a[href])" );
-
- // Get disabled tabs from class attribute from HTML
- // this will get converted to a boolean if needed in _refresh()
- options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
- return lis.index( tab );
- } );
-
- this._processTabs();
-
- // Was collapsed or no tabs
- if ( options.active === false || !this.anchors.length ) {
- options.active = false;
- this.active = $();
-
- // was active, but active tab is gone
- } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
-
- // all remaining tabs are disabled
- if ( this.tabs.length === options.disabled.length ) {
- options.active = false;
- this.active = $();
-
- // activate previous tab
- } else {
- this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
- }
-
- // was active, active tab still exists
- } else {
-
- // make sure active index is correct
- options.active = this.tabs.index( this.active );
- }
-
- 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"
- } );
-
- // Make sure one tab is in the tab order
- if ( !this.active.length ) {
- this.tabs.eq( 0 ).attr( "tabIndex", 0 );
- } else {
- 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"
- } );
- }
- },
-
- _processTabs: function() {
- var that = this,
- prevTabs = this.tabs,
- prevAnchors = this.anchors,
- prevPanels = 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" );
-
- // Prevent users from focusing disabled tabs via click
- this.tablist
- .on( "mousedown" + this.eventNamespace, "> li", function( event ) {
- if ( $( this ).is( ".ui-state-disabled" ) ) {
- event.preventDefault();
- }
- } )
-
- // Support: IE <9
- // Preventing the default action in mousedown doesn't prevent IE
- // from focusing the element, so if the anchor gets focused, blur.
- // We don't have to worry about focusing the previously focused
- // element since clicking on a non-focusable element should focus
- // the body anyway.
- .on( "focus" + this.eventNamespace, ".ui-tabs-anchor", function() {
- if ( $( 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 $( "a", this )[ 0 ];
- } )
- .attr( {
- role: "presentation",
- tabIndex: -1
- } );
- this._addClass( this.anchors, "ui-tabs-anchor" );
-
- this.panels = $();
-
- this.anchors.each( function( i, anchor ) {
- var selector, panel, panelId,
- anchorId = $( anchor ).uniqueId().attr( "id" ),
- tab = $( anchor ).closest( "li" ),
- originalAriaControls = tab.attr( "aria-controls" );
-
- // Inline tab
- if ( that._isLocal( anchor ) ) {
- selector = anchor.hash;
- panelId = selector.substring( 1 );
- panel = that.element.find( that._sanitizeSelector( selector ) );
-
- // remote tab
- } else {
-
- // If the tab doesn't already have aria-controls,
- // generate an id by using a throw-away element
- panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id;
- selector = "#" + panelId;
- panel = that.element.find( selector );
- if ( !panel.length ) {
- panel = that._createPanel( panelId );
- panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
- }
- panel.attr( "aria-live", "polite" );
- }
-
- if ( panel.length ) {
- that.panels = that.panels.add( panel );
- }
- if ( originalAriaControls ) {
- tab.data( "ui-tabs-aria-controls", originalAriaControls );
- }
- tab.attr( {
- "aria-controls": panelId,
- "aria-labelledby": anchorId
- } );
- panel.attr( "aria-labelledby", anchorId );
- } );
-
- this.panels.attr( "role", "tabpanel" );
- this._addClass( this.panels, "ui-tabs-panel", "ui-widget-content" );
-
- // Avoid memory leaks (#10056)
- if ( prevTabs ) {
- this._off( prevTabs.not( this.tabs ) );
- this._off( prevAnchors.not( this.anchors ) );
- this._off( prevPanels.not( this.panels ) );
- }
- },
-
- // Allow overriding how to find the list for rare usage scenarios (#7715)
- _getList: function() {
- return this.tablist || this.element.find( "ol, ul" ).eq( 0 );
- },
-
- _createPanel: function( id ) {
- return $( "<div>" )
- .attr( "id", id )
- .data( "ui-tabs-destroy", true );
- },
-
- _setOptionDisabled: function( disabled ) {
- var currentItem, li, i;
-
- if ( $.isArray( disabled ) ) {
- if ( !disabled.length ) {
- disabled = false;
- } else if ( disabled.length === this.anchors.length ) {
- disabled = true;
- }
- }
-
- // Disable tabs
- for ( i = 0; ( li = this.tabs[ i ] ); i++ ) {
- currentItem = $( li );
- if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
- currentItem.attr( "aria-disabled", "true" );
- this._addClass( currentItem, null, "ui-state-disabled" );
- } else {
- currentItem.removeAttr( "aria-disabled" );
- this._removeClass( currentItem, null, "ui-state-disabled" );
- }
- }
-
- this.options.disabled = disabled;
-
- this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null,
- disabled === true );
- },
-
- _setupEvents: function( event ) {
- var events = {};
- if ( event ) {
- $.each( event.split( " " ), function( index, eventName ) {
- events[ eventName ] = "_eventHandler";
- } );
- }
-
- this._off( this.anchors.add( this.tabs ).add( this.panels ) );
-
- // Always prevent the default action, even when disabled
- this._on( true, this.anchors, {
- click: function( event ) {
- event.preventDefault();
- }
- } );
- this._on( this.anchors, events );
- this._on( this.tabs, { keydown: "_tabKeydown" } );
- this._on( this.panels, { keydown: "_panelKeydown" } );
-
- this._focusable( this.tabs );
- this._hoverable( this.tabs );
- },
-
- _setupHeightStyle: function( heightStyle ) {
- var maxHeight,
- parent = this.element.parent();
-
- if ( heightStyle === "fill" ) {
- maxHeight = parent.height();
- maxHeight -= this.element.outerHeight() - this.element.height();
-
- this.element.siblings( ":visible" ).each( function() {
- var elem = $( this ),
- position = elem.css( "position" );
-
- if ( position === "absolute" || position === "fixed" ) {
- return;
- }
- maxHeight -= elem.outerHeight( true );
- } );
-
- this.element.children().not( this.panels ).each( function() {
- maxHeight -= $( this ).outerHeight( true );
- } );
-
- this.panels.each( function() {
- $( this ).height( Math.max( 0, maxHeight -
- $( this ).innerHeight() + $( this ).height() ) );
- } )
- .css( "overflow", "auto" );
- } else if ( heightStyle === "auto" ) {
- maxHeight = 0;
- this.panels.each( function() {
- maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
- } ).height( maxHeight );
- }
- },
-
- _eventHandler: function( event ) {
- var options = this.options,
- active = this.active,
- anchor = $( event.currentTarget ),
- tab = anchor.closest( "li" ),
- clickedIsActive = tab[ 0 ] === active[ 0 ],
- collapsing = clickedIsActive && options.collapsible,
- toShow = collapsing ? $() : this._getPanelForTab( tab ),
- toHide = !active.length ? $() : this._getPanelForTab( active ),
- eventData = {
- oldTab: active,
- oldPanel: toHide,
- newTab: collapsing ? $() : tab,
- newPanel: toShow
- };
-
- event.preventDefault();
-
- if ( tab.hasClass( "ui-state-disabled" ) ||
-
- // tab is already loading
- tab.hasClass( "ui-tabs-loading" ) ||
-
- // can't switch durning an animation
- this.running ||
-
- // click on active header, but not collapsible
- ( clickedIsActive && !options.collapsible ) ||
-
- // allow canceling activation
- ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
- return;
- }
-
- options.active = collapsing ? false : this.tabs.index( tab );
-
- this.active = clickedIsActive ? $() : tab;
- if ( this.xhr ) {
- this.xhr.abort();
- }
-
- if ( !toHide.length && !toShow.length ) {
- $.error( "jQuery UI Tabs: Mismatching fragment identifier." );
- }
-
- if ( toShow.length ) {
- this.load( this.tabs.index( tab ), event );
- }
- this._toggle( event, eventData );
- },
-
- // Handles show/hide for selecting tabs
- _toggle: function( event, eventData ) {
- var that = this,
- toShow = eventData.newPanel,
- toHide = eventData.oldPanel;
-
- this.running = true;
-
- function complete() {
- that.running = false;
- that._trigger( "activate", event, eventData );
- }
-
- function show() {
- that._addClass( eventData.newTab.closest( "li" ), "ui-tabs-active", "ui-state-active" );
-
- if ( toShow.length && that.options.show ) {
- that._show( toShow, that.options.show, complete );
- } else {
- toShow.show();
- complete();
- }
- }
-
- // Start out by hiding, then showing, then completing
- if ( toHide.length && this.options.hide ) {
- this._hide( toHide, this.options.hide, function() {
- that._removeClass( eventData.oldTab.closest( "li" ),
- "ui-tabs-active", "ui-state-active" );
- show();
- } );
- } else {
- this._removeClass( eventData.oldTab.closest( "li" ),
- "ui-tabs-active", "ui-state-active" );
- toHide.hide();
- show();
- }
-
- toHide.attr( "aria-hidden", "true" );
- eventData.oldTab.attr( {
- "aria-selected": "false",
- "aria-expanded": "false"
- } );
-
- // If we're switching tabs, remove the old tab from the tab order.
- // If we're opening from collapsed state, remove the previous tab from the tab order.
- // If we're collapsing, then keep the collapsing tab in the tab order.
- if ( toShow.length && toHide.length ) {
- eventData.oldTab.attr( "tabIndex", -1 );
- } else if ( toShow.length ) {
- this.tabs.filter( function() {
- return $( this ).attr( "tabIndex" ) === 0;
- } )
- .attr( "tabIndex", -1 );
- }
-
- toShow.attr( "aria-hidden", "false" );
- eventData.newTab.attr( {
- "aria-selected": "true",
- "aria-expanded": "true",
- tabIndex: 0
- } );
- },
-
- _activate: function( index ) {
- var anchor,
- active = this._findActive( index );
-
- // Trying to activate the already active panel
- if ( active[ 0 ] === this.active[ 0 ] ) {
- return;
- }
-
- // Trying to collapse, simulate a click on the current active header
- if ( !active.length ) {
- active = this.active;
- }
-
- anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
- this._eventHandler( {
- target: anchor,
- currentTarget: anchor,
- preventDefault: $.noop
- } );
- },
-
- _findActive: function( index ) {
- return index === false ? $() : this.tabs.eq( index );
- },
-
- _getIndex: function( index ) {
-
- // meta-function to give users option to provide a href string instead of a numerical index.
- if ( typeof index === "string" ) {
- index = this.anchors.index( this.anchors.filter( "[href$='" +
- $.ui.escapeSelector( index ) + "']" ) );
- }
-
- return index;
- },
-
- _destroy: function() {
- if ( 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() {
- if ( $.data( this, "ui-tabs-destroy" ) ) {
- $( this ).remove();
- } else {
- $( this ).removeAttr( "role tabIndex " +
- "aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded" );
- }
- } );
-
- this.tabs.each( function() {
- var li = $( this ),
- prev = li.data( "ui-tabs-aria-controls" );
- if ( prev ) {
- li
- .attr( "aria-controls", prev )
- .removeData( "ui-tabs-aria-controls" );
- } else {
- li.removeAttr( "aria-controls" );
- }
- } );
-
- this.panels.show();
-
- if ( this.options.heightStyle !== "content" ) {
- this.panels.css( "height", "" );
- }
- },
-
- enable: function( index ) {
- var disabled = this.options.disabled;
- if ( disabled === false ) {
- return;
- }
-
- if ( index === undefined ) {
- disabled = false;
- } else {
- index = this._getIndex( index );
- if ( $.isArray( disabled ) ) {
- disabled = $.map( disabled, function( num ) {
- return num !== index ? num : null;
- } );
- } else {
- disabled = $.map( this.tabs, function( li, num ) {
- return num !== index ? num : null;
- } );
- }
- }
- this._setOptionDisabled( disabled );
- },
-
- disable: function( index ) {
- var disabled = this.options.disabled;
- if ( disabled === true ) {
- return;
- }
-
- if ( index === undefined ) {
- disabled = true;
- } else {
- index = this._getIndex( index );
- if ( $.inArray( index, disabled ) !== -1 ) {
- return;
- }
- if ( $.isArray( disabled ) ) {
- disabled = $.merge( [ index ], disabled ).sort();
- } else {
- disabled = [ index ];
- }
- }
- this._setOptionDisabled( disabled );
- },
-
- load: function( index, event ) {
- index = this._getIndex( index );
- var that = this,
- tab = this.tabs.eq( index ),
- anchor = tab.find( ".ui-tabs-anchor" ),
- panel = this._getPanelForTab( tab ),
- eventData = {
- tab: tab,
- panel: panel
- },
- complete = function( jqXHR, status ) {
- if ( status === "abort" ) {
- that.panels.stop( false, true );
- }
-
- that._removeClass( tab, "ui-tabs-loading" );
- panel.removeAttr( "aria-busy" );
-
- if ( jqXHR === that.xhr ) {
- delete that.xhr;
- }
- };
-
- // Not remote
- if ( this._isLocal( anchor[ 0 ] ) ) {
- return;
- }
-
- this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
-
- // Support: jQuery <1.8
- // jQuery <1.8 returns false if the request is canceled in beforeSend,
- // but as of 1.8, $.ajax() always returns a jqXHR object.
- if ( this.xhr && this.xhr.statusText !== "canceled" ) {
- this._addClass( tab, "ui-tabs-loading" );
- panel.attr( "aria-busy", "true" );
-
- this.xhr
- .done( function( response, status, jqXHR ) {
-
- // support: jQuery <1.8
- // http://bugs.jquery.com/ticket/11778
- setTimeout( function() {
- panel.html( response );
- that._trigger( "load", event, eventData );
-
- complete( jqXHR, status );
- }, 1 );
- } )
- .fail( function( jqXHR, status ) {
-
- // support: jQuery <1.8
- // http://bugs.jquery.com/ticket/11778
- setTimeout( function() {
- complete( jqXHR, status );
- }, 1 );
- } );
- }
- },
-
- _ajaxSettings: function( anchor, event, eventData ) {
- var that = this;
- return {
-
- // Support: IE <11 only
- // Strip any hash that exists to prevent errors with the Ajax request
- url: anchor.attr( "href" ).replace( /#.*$/, "" ),
- beforeSend: function( jqXHR, settings ) {
- return that._trigger( "beforeLoad", event,
- $.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );
- }
- };
- },
-
- _getPanelForTab: function( tab ) {
- var id = $( tab ).attr( "aria-controls" );
- return this.element.find( this._sanitizeSelector( "#" + id ) );
- }
-} );
-
-// DEPRECATED
-// TODO: Switch return back to widget declaration at top of file when this is removed
-if ( $.uiBackCompat !== false ) {
-
- // Backcompat for ui-tab class (now ui-tabs-tab)
- $.widget( "ui.tabs", $.ui.tabs, {
- _processTabs: function() {
- this._superApply( arguments );
- this._addClass( this.tabs, "ui-tab" );
- }
- } );
-}
-
-var widgetsTabs = $.ui.tabs;
-
-
-/*!
- * jQuery UI Tooltip 1.12.1
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-//>>label: Tooltip
-//>>group: Widgets
-//>>description: Shows additional information for any element on hover or focus.
-//>>docs: http://api.jqueryui.com/tooltip/
-//>>demos: http://jqueryui.com/tooltip/
-//>>css.structure: ../../themes/base/core.css
-//>>css.structure: ../../themes/base/tooltip.css
-//>>css.theme: ../../themes/base/theme.css
-
-
-
-$.widget( "ui.tooltip", {
- version: "1.12.1",
- options: {
- classes: {
- "ui-tooltip": "ui-corner-all ui-widget-shadow"
- },
- content: function() {
-
- // support: IE<9, Opera in jQuery <1.7
- // .text() can't accept undefined, so coerce to a string
- var title = $( this ).attr( "title" ) || "";
-
- // Escape title, since we're going from an attribute to raw HTML
- return $( "<a>" ).text( title ).html();
- },
- hide: true,
-
- // Disabled elements have inconsistent behavior across browsers (#8661)
- items: "[title]:not([disabled])",
- position: {
- my: "left top+15",
- at: "left bottom",
- collision: "flipfit flip"
- },
- show: true,
- track: false,
-
- // Callbacks
- close: null,
- open: null
- },
-
- _addDescribedBy: function( elem, id ) {
- var describedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\s+/ );
- describedby.push( id );
- elem
- .data( "ui-tooltip-id", id )
- .attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
- },
-
- _removeDescribedBy: function( elem ) {
- var id = elem.data( "ui-tooltip-id" ),
- describedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\s+/ ),
- index = $.inArray( id, describedby );
-
- if ( index !== -1 ) {
- describedby.splice( index, 1 );
- }
-
- elem.removeData( "ui-tooltip-id" );
- describedby = $.trim( describedby.join( " " ) );
- if ( describedby ) {
- elem.attr( "aria-describedby", describedby );
- } else {
- elem.removeAttr( "aria-describedby" );
- }
- },
-
- _create: function() {
- this._on( {
- mouseover: "open",
- focusin: "open"
- } );
-
- // IDs of generated tooltips, needed for destroy
- this.tooltips = {};
-
- // IDs of parent tooltips where we removed the title attribute
- this.parents = {};
-
- // Append the aria-live region so tooltips announce correctly
- this.liveRegion = $( "<div>" )
- .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 = $( [] );
- },
-
- _setOption: function( key, value ) {
- var that = this;
-
- this._super( key, value );
-
- if ( key === "content" ) {
- $.each( this.tooltips, function( id, tooltipData ) {
- that._updateContent( tooltipData.element );
- } );
- }
- },
-
- _setOptionDisabled: function( value ) {
- this[ value ? "_disable" : "_enable" ]();
- },
-
- _disable: function() {
- var that = this;
-
- // Close open tooltips
- $.each( this.tooltips, function( id, tooltipData ) {
- var event = $.Event( "blur" );
- event.target = event.currentTarget = tooltipData.element[ 0 ];
- that.close( event, true );
- } );
-
- // Remove title attributes to prevent native tooltips
- this.disabledTitles = this.disabledTitles.add(
- this.element.find( this.options.items ).addBack()
- .filter( function() {
- var element = $( this );
- if ( element.is( "[title]" ) ) {
- return element
- .data( "ui-tooltip-title", element.attr( "title" ) )
- .removeAttr( "title" );
- }
- } )
- );
- },
-
- _enable: function() {
-
- // restore title attributes
- this.disabledTitles.each( function() {
- var element = $( this );
- if ( element.data( "ui-tooltip-title" ) ) {
- element.attr( "title", element.data( "ui-tooltip-title" ) );
- }
- } );
- this.disabledTitles = $( [] );
- },
-
- open: function( event ) {
- var that = this,
- target = $( event ? event.target : this.element )
-
- // we need closest here due to mouseover bubbling,
- // but always pointing at the same event target
- .closest( this.options.items );
-
- // No element to show a tooltip for or the tooltip is already open
- if ( !target.length || target.data( "ui-tooltip-id" ) ) {
- return;
- }
-
- if ( target.attr( "title" ) ) {
- target.data( "ui-tooltip-title", target.attr( "title" ) );
- }
-
- target.data( "ui-tooltip-open", true );
-
- // Kill parent tooltips, custom or native, for hover
- if ( event && event.type === "mouseover" ) {
- target.parents().each( function() {
- var parent = $( this ),
- blurEvent;
- if ( parent.data( "ui-tooltip-open" ) ) {
- blurEvent = $.Event( "blur" );
- blurEvent.target = blurEvent.currentTarget = this;
- that.close( blurEvent, true );
- }
- if ( parent.attr( "title" ) ) {
- parent.uniqueId();
- that.parents[ this.id ] = {
- element: this,
- title: parent.attr( "title" )
- };
- parent.attr( "title", "" );
- }
- } );
- }
-
- this._registerCloseHandlers( event, target );
- this._updateContent( target, event );
- },
-
- _updateContent: function( target, event ) {
- var content,
- contentOption = this.options.content,
- that = this,
- eventType = event ? event.type : null;
-
- if ( typeof contentOption === "string" || contentOption.nodeType ||
- contentOption.jquery ) {
- return this._open( event, target, contentOption );
- }
-
- content = contentOption.call( target[ 0 ], function( response ) {
-
- // IE may instantly serve a cached response for ajax requests
- // delay this call to _open so the other call to _open runs first
- that._delay( function() {
-
- // Ignore async response if tooltip was closed already
- if ( !target.data( "ui-tooltip-open" ) ) {
- return;
- }
-
- // JQuery creates a special event for focusin when it doesn't
- // exist natively. To improve performance, the native event
- // object is reused and the type is changed. Therefore, we can't
- // rely on the type being correct after the event finished
- // bubbling, so we set it back to the previous value. (#8740)
- if ( event ) {
- event.type = eventType;
- }
- this._open( event, target, response );
- } );
- } );
- if ( content ) {
- this._open( event, target, content );
- }
- },
-
- _open: function( event, target, content ) {
- var tooltipData, tooltip, delayedShow, a11yContent,
- positionOption = $.extend( {}, this.options.position );
-
- if ( !content ) {
- return;
- }
-
- // Content can be updated multiple times. If the tooltip already
- // exists, then just update the content and bail.
- tooltipData = this._find( target );
- if ( tooltipData ) {
- tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content );
- return;
- }
-
- // If we have a title, clear it to prevent the native tooltip
- // we have to check first to avoid defining a title if none exists
- // (we don't want to cause an element to start matching [title])
- //
- // We use removeAttr only for key events, to allow IE to export the correct
- // accessible attributes. For mouse events, set to empty string to avoid
- // native tooltip showing up (happens only when removing inside mouseover).
- if ( target.is( "[title]" ) ) {
- if ( event && event.type === "mouseover" ) {
- target.attr( "title", "" );
- } else {
- target.removeAttr( "title" );
- }
- }
-
- tooltipData = this._tooltip( target );
- tooltip = tooltipData.tooltip;
- this._addDescribedBy( target, tooltip.attr( "id" ) );
- tooltip.find( ".ui-tooltip-content" ).html( content );
-
- // Support: Voiceover on OS X, JAWS on IE <= 9
- // JAWS announces deletions even when aria-relevant="additions"
- // Voiceover will sometimes re-read the entire log region's contents from the beginning
- this.liveRegion.children().hide();
- a11yContent = $( "<div>" ).html( tooltip.find( ".ui-tooltip-content" ).html() );
- a11yContent.removeAttr( "name" ).find( "[name]" ).removeAttr( "name" );
- a11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" );
- a11yContent.appendTo( this.liveRegion );
-
- function position( event ) {
- positionOption.of = event;
- if ( tooltip.is( ":hidden" ) ) {
- return;
- }
- tooltip.position( positionOption );
- }
- if ( this.options.track && event && /^mouse/.test( event.type ) ) {
- this._on( this.document, {
- mousemove: position
- } );
-
- // trigger once to override element-relative positioning
- position( event );
- } else {
- tooltip.position( $.extend( {
- of: target
- }, this.options.position ) );
- }
-
- tooltip.hide();
-
- this._show( tooltip, this.options.show );
-
- // Handle tracking tooltips that are shown with a delay (#8644). As soon
- // as the tooltip is visible, position the tooltip using the most recent
- // event.
- // Adds the check to add the timers only when both delay and track options are set (#14682)
- if ( this.options.track && this.options.show && this.options.show.delay ) {
- delayedShow = this.delayedShow = setInterval( function() {
- if ( tooltip.is( ":visible" ) ) {
- position( positionOption.of );
- clearInterval( delayedShow );
- }
- }, $.fx.interval );
- }
-
- this._trigger( "open", event, { tooltip: tooltip } );
- },
-
- _registerCloseHandlers: function( event, target ) {
- var events = {
- keyup: function( event ) {
- if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
- var fakeEvent = $.Event( event );
- fakeEvent.currentTarget = target[ 0 ];
- this.close( fakeEvent, true );
- }
- }
- };
-
- // Only bind remove handler for delegated targets. Non-delegated
- // tooltips will handle this in destroy.
- if ( target[ 0 ] !== this.element[ 0 ] ) {
- events.remove = function() {
- this._removeTooltip( this._find( target ).tooltip );
- };
- }
-
- if ( !event || event.type === "mouseover" ) {
- events.mouseleave = "close";
- }
- if ( !event || event.type === "focusin" ) {
- events.focusout = "close";
- }
- this._on( true, target, events );
- },
-
- close: function( event ) {
- var tooltip,
- that = this,
- target = $( event ? event.currentTarget : this.element ),
- tooltipData = this._find( target );
-
- // The tooltip may already be closed
- if ( !tooltipData ) {
-
- // We set ui-tooltip-open immediately upon open (in open()), but only set the
- // additional data once there's actually content to show (in _open()). So even if the
- // tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in
- // the period between open() and _open().
- target.removeData( "ui-tooltip-open" );
- return;
- }
-
- tooltip = tooltipData.tooltip;
-
- // Disabling closes the tooltip, so we need to track when we're closing
- // to avoid an infinite loop in case the tooltip becomes disabled on close
- if ( tooltipData.closing ) {
- return;
- }
-
- // Clear the interval for delayed tracking tooltips
- clearInterval( this.delayedShow );
-
- // Only set title if we had one before (see comment in _open())
- // If the title attribute has changed since open(), don't restore
- if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) {
- target.attr( "title", target.data( "ui-tooltip-title" ) );
- }
-
- this._removeDescribedBy( target );
-
- tooltipData.hiding = true;
- tooltip.stop( true );
- this._hide( tooltip, this.options.hide, function() {
- that._removeTooltip( $( this ) );
- } );
-
- target.removeData( "ui-tooltip-open" );
- this._off( target, "mouseleave focusout keyup" );
-
- // Remove 'remove' binding only on delegated targets
- if ( target[ 0 ] !== this.element[ 0 ] ) {
- this._off( target, "remove" );
- }
- this._off( this.document, "mousemove" );
-
- if ( event && event.type === "mouseleave" ) {
- $.each( this.parents, function( id, parent ) {
- $( parent.element ).attr( "title", parent.title );
- delete that.parents[ id ];
- } );
- }
-
- tooltipData.closing = true;
- this._trigger( "close", event, { tooltip: tooltip } );
- if ( !tooltipData.hiding ) {
- tooltipData.closing = false;
- }
- },
-
- _tooltip: function( element ) {
- var tooltip = $( "<div>" ).attr( "role", "tooltip" ),
- content = $( "<div>" ).appendTo( tooltip ),
- id = tooltip.uniqueId().attr( "id" );
-
- this._addClass( content, "ui-tooltip-content" );
- this._addClass( tooltip, "ui-tooltip", "ui-widget ui-widget-content" );
-
- tooltip.appendTo( this._appendTo( element ) );
-
- return this.tooltips[ id ] = {
- element: element,
- tooltip: tooltip
- };
- },
-
- _find: function( target ) {
- var id = target.data( "ui-tooltip-id" );
- return id ? this.tooltips[ id ] : null;
- },
-
- _removeTooltip: function( tooltip ) {
- tooltip.remove();
- delete this.tooltips[ tooltip.attr( "id" ) ];
- },
-
- _appendTo: function( target ) {
- var element = target.closest( ".ui-front, dialog" );
-
- if ( !element.length ) {
- element = this.document[ 0 ].body;
- }
-
- return element;
- },
-
- _destroy: function() {
- var that = this;
-
- // Close open tooltips
- $.each( this.tooltips, function( id, tooltipData ) {
-
- // Delegate to close method to handle common cleanup
- var event = $.Event( "blur" ),
- element = tooltipData.element;
- event.target = event.currentTarget = element[ 0 ];
- that.close( event, true );
-
- // Remove immediately; destroying an open tooltip doesn't use the
- // hide animation
- $( "#" + id ).remove();
-
- // Restore the title
- if ( element.data( "ui-tooltip-title" ) ) {
-
- // If the title attribute has changed since open(), don't restore
- if ( !element.attr( "title" ) ) {
- element.attr( "title", element.data( "ui-tooltip-title" ) );
- }
- element.removeData( "ui-tooltip-title" );
- }
- } );
- this.liveRegion.remove();
- }
-} );
-
-// DEPRECATED
-// TODO: Switch return back to widget declaration at top of file when this is removed
-if ( $.uiBackCompat !== false ) {
-
- // Backcompat for tooltipClass option
- $.widget( "ui.tooltip", $.ui.tooltip, {
- options: {
- tooltipClass: null
- },
- _tooltip: function() {
- var tooltipData = this._superApply( arguments );
- if ( this.options.tooltipClass ) {
- tooltipData.tooltip.addClass( this.options.tooltipClass );
- }
- return tooltipData;
- }
- } );
-}
-
-var widgetsTooltip = $.ui.tooltip;
-
-
-
-
-})); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery.layout-latest.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery.layout-latest.js
deleted file mode 100644
index 434724d9..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery.layout-latest.js
+++ /dev/null
@@ -1,6086 +0,0 @@
-/**
- * @preserve
- * jquery.layout 1.4.3
- * $Date: 2015/03/13 22:37:04 $
- * $Rev: 1.0403 $
- *
- * Copyright (c) 2014 Kevin Dalman (http://jquery-dev.com)
- * Based on work by Fabrizio Balliano (http://www.fabrizioballiano.net)
- *
- * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html)
- * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses.
- *
- * SEE: http://layout.jquery-dev.com/LICENSE.txt
- *
- * Changelog: http://layout.jquery-dev.com/changelog.cfm
- *
- * Docs: http://layout.jquery-dev.com/documentation.html
- * Tips: http://layout.jquery-dev.com/tips.html
- * Help: http://groups.google.com/group/jquery-ui-layout
- */
-
-/* JavaDoc Info: http://code.google.com/closure/compiler/docs/js-for-compiler.html
- * {!Object} non-nullable type (never NULL)
- * {?string} nullable type (sometimes NULL) - default for {Object}
- * {number=} optional parameter
- * {*} ALL types
- */
-/* TODO for jQ 2.0
- * change .andSelf() to .addBack()
- * check $.fn.disableSelection - this is in jQuery UI 1.9.x
- */
-
-// NOTE: For best readability, view with a fixed-width font and tabs equal to 4-chars
-
-;(function ($) {
-
-// alias Math methods - used a lot!
-var min = Math.min
-, max = Math.max
-, round = Math.floor
-
-, isStr = function (v) { return $.type(v) === "string"; }
-
- /**
- * @param {!Object} Instance
- * @param {Array.<string>} a_fn
- */
-, runPluginCallbacks = function (Instance, a_fn) {
- if ($.isArray(a_fn))
- for (var i=0, c=a_fn.length; i<c; i++) {
- var fn = a_fn[i];
- try {
- if (isStr(fn)) // 'name' of a function
- fn = eval(fn);
- if ($.isFunction(fn))
- g(fn)( Instance );
- } catch (ex) {}
- }
- function g (f) { return f; }; // compiler hack
- }
-;
-
-/*
- * GENERIC $.layout METHODS - used by all layouts
- */
-$.layout = {
-
- version: "1.4.3"
-, revision: 1.0403 // eg: 1.4.1 final = 1.0401 - major(n+).minor(nn)+patch(nn+)
-
- // $.layout.browser REPLACES $.browser
-, browser: {} // set below
-
- // *PREDEFINED* EFFECTS & DEFAULTS
- // MUST list effect here - OR MUST set an fxSettings option (can be an empty hash: {})
-, effects: {
-
- // Pane Open/Close Animations
- slide: {
- all: { duration: "fast" } // eg: duration: 1000, easing: "easeOutBounce"
- , north: { direction: "up" }
- , south: { direction: "down" }
- , east: { direction: "right"}
- , west: { direction: "left" }
- }
- , drop: {
- all: { duration: "slow" }
- , north: { direction: "up" }
- , south: { direction: "down" }
- , east: { direction: "right"}
- , west: { direction: "left" }
- }
- , scale: {
- all: { duration: "fast" }
- }
- // these are not recommended, but can be used
- , blind: {}
- , clip: {}
- , explode: {}
- , fade: {}
- , fold: {}
- , puff: {}
-
- // Pane Resize Animations
- , size: {
- all: { easing: "swing" }
- }
- }
-
- // INTERNAL CONFIG DATA - DO NOT CHANGE THIS!
-, config: {
- optionRootKeys: "effects,panes,north,south,west,east,center".split(",")
- , allPanes: "north,south,west,east,center".split(",")
- , borderPanes: "north,south,west,east".split(",")
- , oppositeEdge: {
- north: "south"
- , south: "north"
- , east: "west"
- , west: "east"
- }
- // offscreen data
- , offscreenCSS: { left: "-99999px", right: "auto" } // used by hide/close if useOffscreenClose=true
- , offscreenReset: "offscreenReset" // key used for data
- // CSS used in multiple places
- , hidden: { visibility: "hidden" }
- , visible: { visibility: "visible" }
- // layout element settings
- , resizers: {
- cssReq: {
- position: "absolute"
- , padding: 0
- , margin: 0
- , fontSize: "1px"
- , textAlign: "left" // to counter-act "center" alignment!
- , overflow: "hidden" // prevent toggler-button from overflowing
- // SEE $.layout.defaults.zIndexes.resizer_normal
- }
- , cssDemo: { // DEMO CSS - applied if: options.PANE.applyDemoStyles=true
- background: "#DDD"
- , border: "none"
- }
- }
- , togglers: {
- cssReq: {
- position: "absolute"
- , display: "block"
- , padding: 0
- , margin: 0
- , overflow: "hidden"
- , textAlign: "center"
- , fontSize: "1px"
- , cursor: "pointer"
- , zIndex: 1
- }
- , cssDemo: { // DEMO CSS - applied if: options.PANE.applyDemoStyles=true
- background: "#AAA"
- }
- }
- , content: {
- cssReq: {
- position: "relative" /* contain floated or positioned elements */
- }
- , cssDemo: { // DEMO CSS - applied if: options.PANE.applyDemoStyles=true
- overflow: "auto"
- , padding: "10px"
- }
- , cssDemoPane: { // DEMO CSS - REMOVE scrolling from 'pane' when it has a content-div
- overflow: "hidden"
- , padding: 0
- }
- }
- , panes: { // defaults for ALL panes - overridden by 'per-pane settings' below
- cssReq: {
- position: "absolute"
- , margin: 0
- // $.layout.defaults.zIndexes.pane_normal
- }
- , cssDemo: { // DEMO CSS - applied if: options.PANE.applyDemoStyles=true
- padding: "10px"
- , background: "#FFF"
- , border: "1px solid #BBB"
- , overflow: "auto"
- }
- }
- , north: {
- side: "top"
- , sizeType: "Height"
- , dir: "horz"
- , cssReq: {
- top: 0
- , bottom: "auto"
- , left: 0
- , right: 0
- , width: "auto"
- // height: DYNAMIC
- }
- }
- , south: {
- side: "bottom"
- , sizeType: "Height"
- , dir: "horz"
- , cssReq: {
- top: "auto"
- , bottom: 0
- , left: 0
- , right: 0
- , width: "auto"
- // height: DYNAMIC
- }
- }
- , east: {
- side: "right"
- , sizeType: "Width"
- , dir: "vert"
- , cssReq: {
- left: "auto"
- , right: 0
- , top: "auto" // DYNAMIC
- , bottom: "auto" // DYNAMIC
- , height: "auto"
- // width: DYNAMIC
- }
- }
- , west: {
- side: "left"
- , sizeType: "Width"
- , dir: "vert"
- , cssReq: {
- left: 0
- , right: "auto"
- , top: "auto" // DYNAMIC
- , bottom: "auto" // DYNAMIC
- , height: "auto"
- // width: DYNAMIC
- }
- }
- , center: {
- dir: "center"
- , cssReq: {
- left: "auto" // DYNAMIC
- , right: "auto" // DYNAMIC
- , top: "auto" // DYNAMIC
- , bottom: "auto" // DYNAMIC
- , height: "auto"
- , width: "auto"
- }
- }
- }
-
- // CALLBACK FUNCTION NAMESPACE - used to store reusable callback functions
-, callbacks: {}
-
-, getParentPaneElem: function (el) {
- // must pass either a container or pane element
- var $el = $(el)
- , layout = $el.data("layout") || $el.data("parentLayout");
- if (layout) {
- var $cont = layout.container;
- // see if this container is directly-nested inside an outer-pane
- if ($cont.data("layoutPane")) return $cont;
- var $pane = $cont.closest("."+ $.layout.defaults.panes.paneClass);
- // if a pane was found, return it
- if ($pane.data("layoutPane")) return $pane;
- }
- return null;
- }
-
-, getParentPaneInstance: function (el) {
- // must pass either a container or pane element
- var $pane = $.layout.getParentPaneElem(el);
- return $pane ? $pane.data("layoutPane") : null;
- }
-
-, getParentLayoutInstance: function (el) {
- // must pass either a container or pane element
- var $pane = $.layout.getParentPaneElem(el);
- return $pane ? $pane.data("parentLayout") : null;
- }
-
-, getEventObject: function (evt) {
- return typeof evt === "object" && evt.stopPropagation ? evt : null;
- }
-, parsePaneName: function (evt_or_pane) {
- var evt = $.layout.getEventObject( evt_or_pane )
- , pane = evt_or_pane;
- if (evt) {
- // ALWAYS stop propagation of events triggered in Layout!
- evt.stopPropagation();
- pane = $(this).data("layoutEdge");
- }
- if (pane && !/^(west|east|north|south|center)$/.test(pane)) {
- $.layout.msg('LAYOUT ERROR - Invalid pane-name: "'+ pane +'"');
- pane = "error";
- }
- return pane;
- }
-
-
- // LAYOUT-PLUGIN REGISTRATION
- // more plugins can added beyond this default list
-, plugins: {
- draggable: !!$.fn.draggable // resizing
- , effects: {
- core: !!$.effects // animimations (specific effects tested by initOptions)
- , slide: $.effects && ($.effects.slide || ($.effects.effect && $.effects.effect.slide)) // default effect
- }
- }
-
-// arrays of plugin or other methods to be triggered for events in *each layout* - will be passed 'Instance'
-, onCreate: [] // runs when layout is just starting to be created - right after options are set
-, onLoad: [] // runs after layout container and global events init, but before initPanes is called
-, onReady: [] // runs after initialization *completes* - ie, after initPanes completes successfully
-, onDestroy: [] // runs after layout is destroyed
-, onUnload: [] // runs after layout is destroyed OR when page unloads
-, afterOpen: [] // runs after setAsOpen() completes
-, afterClose: [] // runs after setAsClosed() completes
-
- /*
- * GENERIC UTILITY METHODS
- */
-
- // calculate and return the scrollbar width, as an integer
-, scrollbarWidth: function () { return window.scrollbarWidth || $.layout.getScrollbarSize('width'); }
-, scrollbarHeight: function () { return window.scrollbarHeight || $.layout.getScrollbarSize('height'); }
-, getScrollbarSize: function (dim) {
- var $c = $('<div style="position: absolute; top: -10000px; left: -10000px; width: 100px; height: 100px; border: 0; overflow: scroll;"></div>').appendTo("body")
- , d = { width: $c.outerWidth - $c[0].clientWidth, height: 100 - $c[0].clientHeight };
- $c.remove();
- window.scrollbarWidth = d.width;
- window.scrollbarHeight = d.height;
- return dim.match(/^(width|height)$/) ? d[dim] : d;
- }
-
-
-, disableTextSelection: function () {
- var $d = $(document)
- , s = 'textSelectionDisabled'
- , x = 'textSelectionInitialized'
- ;
- if ($.fn.disableSelection) {
- if (!$d.data(x)) // document hasn't been initialized yet
- $d.on('mouseup', $.layout.enableTextSelection ).data(x, true);
- if (!$d.data(s))
- $d.disableSelection().data(s, true);
- }
- }
-, enableTextSelection: function () {
- var $d = $(document)
- , s = 'textSelectionDisabled';
- if ($.fn.enableSelection && $d.data(s))
- $d.enableSelection().data(s, false);
- }
-
-
- /**
- * Returns hash container 'display' and 'visibility'
- *
- * @see $.swap() - swaps CSS, runs callback, resets CSS
- * @param {!Object} $E jQuery element
- * @param {boolean=} [force=false] Run even if display != none
- * @return {!Object} Returns current style props, if applicable
- */
-, showInvisibly: function ($E, force) {
- if ($E && $E.length && (force || $E.css("display") === "none")) { // only if not *already hidden*
- var s = $E[0].style
- // save ONLY the 'style' props because that is what we must restore
- , CSS = { display: s.display || '', visibility: s.visibility || '' };
- // show element 'invisibly' so can be measured
- $E.css({ display: "block", visibility: "hidden" });
- return CSS;
- }
- return {};
- }
-
- /**
- * Returns data for setting size of an element (container or a pane).
- *
- * @see _create(), onWindowResize() for container, plus others for pane
- * @return JSON Returns a hash of all dimensions: top, bottom, left, right, outerWidth, innerHeight, etc
- */
-, getElementDimensions: function ($E, inset) {
- var
- // dimensions hash - start with current data IF passed
- d = { css: {}, inset: {} }
- , x = d.css // CSS hash
- , i = { bottom: 0 } // TEMP insets (bottom = complier hack)
- , N = $.layout.cssNum
- , R = Math.round
- , off = $E.offset()
- , b, p, ei // TEMP border, padding
- ;
- d.offsetLeft = off.left;
- d.offsetTop = off.top;
-
- if (!inset) inset = {}; // simplify logic below
-
- $.each("Left,Right,Top,Bottom".split(","), function (idx, e) { // e = edge
- b = x["border" + e] = $.layout.borderWidth($E, e);
- p = x["padding"+ e] = $.layout.cssNum($E, "padding"+e);
- ei = e.toLowerCase();
- d.inset[ei] = inset[ei] >= 0 ? inset[ei] : p; // any missing insetX value = paddingX
- i[ei] = d.inset[ei] + b; // total offset of content from outer side
- });
-
- x.width = R($E.width());
- x.height = R($E.height());
- x.top = N($E,"top",true);
- x.bottom = N($E,"bottom",true);
- x.left = N($E,"left",true);
- x.right = N($E,"right",true);
-
- d.outerWidth = R($E.outerWidth());
- d.outerHeight = R($E.outerHeight());
- // calc the TRUE inner-dimensions, even in quirks-mode!
- d.innerWidth = max(0, d.outerWidth - i.left - i.right);
- d.innerHeight = max(0, d.outerHeight - i.top - i.bottom);
- // layoutWidth/Height is used in calcs for manual resizing
- // layoutW/H only differs from innerW/H when in quirks-mode - then is like outerW/H
- d.layoutWidth = R($E.innerWidth());
- d.layoutHeight = R($E.innerHeight());
-
- //if ($E.prop('tagName') === 'BODY') { debugData( d, $E.prop('tagName') ); } // DEBUG
-
- //d.visible = $E.is(":visible");// && x.width > 0 && x.height > 0;
-
- return d;
- }
-
-, getElementStyles: function ($E, list) {
- var
- CSS = {}
- , style = $E[0].style
- , props = list.split(",")
- , sides = "Top,Bottom,Left,Right".split(",")
- , attrs = "Color,Style,Width".split(",")
- , p, s, a, i, j, k
- ;
- for (i=0; i < props.length; i++) {
- p = props[i];
- if (p.match(/(border|padding|margin)$/))
- for (j=0; j < 4; j++) {
- s = sides[j];
- if (p === "border")
- for (k=0; k < 3; k++) {
- a = attrs[k];
- CSS[p+s+a] = style[p+s+a];
- }
- else
- CSS[p+s] = style[p+s];
- }
- else
- CSS[p] = style[p];
- };
- return CSS
- }
-
- /**
- * Return the innerWidth for the current browser/doctype
- *
- * @see initPanes(), sizeMidPanes(), initHandles(), sizeHandles()
- * @param {Array.<Object>} $E Must pass a jQuery object - first element is processed
- * @param {number=} outerWidth (optional) Can pass a width, allowing calculations BEFORE element is resized
- * @return {number} Returns the innerWidth of the elem by subtracting padding and borders
- */
-, cssWidth: function ($E, outerWidth) {
- // a 'calculated' outerHeight can be passed so borders and/or padding are removed if needed
- if (outerWidth <= 0) return 0;
-
- var lb = $.layout.browser
- , bs = !lb.boxModel ? "border-box" : lb.boxSizing ? $E.css("boxSizing") : "content-box"
- , b = $.layout.borderWidth
- , n = $.layout.cssNum
- , W = outerWidth
- ;
- // strip border and/or padding from outerWidth to get CSS Width
- if (bs !== "border-box")
- W -= (b($E, "Left") + b($E, "Right"));
- if (bs === "content-box")
- W -= (n($E, "paddingLeft") + n($E, "paddingRight"));
- return max(0,W);
- }
-
- /**
- * Return the innerHeight for the current browser/doctype
- *
- * @see initPanes(), sizeMidPanes(), initHandles(), sizeHandles()
- * @param {Array.<Object>} $E Must pass a jQuery object - first element is processed
- * @param {number=} outerHeight (optional) Can pass a width, allowing calculations BEFORE element is resized
- * @return {number} Returns the innerHeight of the elem by subtracting padding and borders
- */
-, cssHeight: function ($E, outerHeight) {
- // a 'calculated' outerHeight can be passed so borders and/or padding are removed if needed
- if (outerHeight <= 0) return 0;
-
- var lb = $.layout.browser
- , bs = !lb.boxModel ? "border-box" : lb.boxSizing ? $E.css("boxSizing") : "content-box"
- , b = $.layout.borderWidth
- , n = $.layout.cssNum
- , H = outerHeight
- ;
- // strip border and/or padding from outerHeight to get CSS Height
- if (bs !== "border-box")
- H -= (b($E, "Top") + b($E, "Bottom"));
- if (bs === "content-box")
- H -= (n($E, "paddingTop") + n($E, "paddingBottom"));
- return max(0,H);
- }
-
- /**
- * Returns the 'current CSS numeric value' for a CSS property - 0 if property does not exist
- *
- * @see Called by many methods
- * @param {Array.<Object>} $E Must pass a jQuery object - first element is processed
- * @param {string} prop The name of the CSS property, eg: top, width, etc.
- * @param {boolean=} [allowAuto=false] true = return 'auto' if that is value; false = return 0
- * @return {(string|number)} Usually used to get an integer value for position (top, left) or size (height, width)
- */
-, cssNum: function ($E, prop, allowAuto) {
- if (!$E.jquery) $E = $($E);
- var CSS = $.layout.showInvisibly($E)
- , p = $.css($E[0], prop, true)
- , v = allowAuto && p=="auto" ? p : Math.round(parseFloat(p) || 0);
- $E.css( CSS ); // RESET
- return v;
- }
-
-, borderWidth: function (el, side) {
- if (el.jquery) el = el[0];
- var b = "border"+ side.substr(0,1).toUpperCase() + side.substr(1); // left => Left
- return $.css(el, b+"Style", true) === "none" ? 0 : Math.round(parseFloat($.css(el, b+"Width", true)) || 0);
- }
-
- /**
- * Mouse-tracking utility - FUTURE REFERENCE
- *
- * init: if (!window.mouse) {
- * window.mouse = { x: 0, y: 0 };
- * $(document).mousemove( $.layout.trackMouse );
- * }
- *
- * @param {Object} evt
- *
-, trackMouse: function (evt) {
- window.mouse = { x: evt.clientX, y: evt.clientY };
- }
- */
-
- /**
- * SUBROUTINE for preventPrematureSlideClose option
- *
- * @param {Object} evt
- * @param {Object=} el
- */
-, isMouseOverElem: function (evt, el) {
- var
- $E = $(el || this)
- , d = $E.offset()
- , T = d.top
- , L = d.left
- , R = L + $E.outerWidth()
- , B = T + $E.outerHeight()
- , x = evt.pageX // evt.clientX ?
- , y = evt.pageY // evt.clientY ?
- ;
- // if X & Y are < 0, probably means is over an open SELECT
- return ($.layout.browser.msie && x < 0 && y < 0) || ((x >= L && x <= R) && (y >= T && y <= B));
- }
-
- /**
- * Message/Logging Utility
- *
- * @example $.layout.msg("My message"); // log text
- * @example $.layout.msg("My message", true); // alert text
- * @example $.layout.msg({ foo: "bar" }, "Title"); // log hash-data, with custom title
- * @example $.layout.msg({ foo: "bar" }, true, "Title", { sort: false }); -OR-
- * @example $.layout.msg({ foo: "bar" }, "Title", { sort: false, display: true }); // alert hash-data
- *
- * @param {(Object|string)} info String message OR Hash/Array
- * @param {(Boolean|string|Object)=} [popup=false] True means alert-box - can be skipped
- * @param {(Object|string)=} [debugTitle=""] Title for Hash data - can be skipped
- * @param {Object=} [debugOpts] Extra options for debug output
- */
-, msg: function (info, popup, debugTitle, debugOpts) {
- if ($.isPlainObject(info) && window.debugData) {
- if (typeof popup === "string") {
- debugOpts = debugTitle;
- debugTitle = popup;
- }
- else if (typeof debugTitle === "object") {
- debugOpts = debugTitle;
- debugTitle = null;
- }
- var t = debugTitle || "log( <object> )"
- , o = $.extend({ sort: false, returnHTML: false, display: false }, debugOpts);
- if (popup === true || o.display)
- debugData( info, t, o );
- else if (window.console)
- console.log(debugData( info, t, o ));
- }
- else if (popup)
- alert(info);
- else if (window.console)
- console.log(info);
- else {
- var id = "#layoutLogger"
- , $l = $(id);
- if (!$l.length)
- $l = createLog();
- $l.children("ul").append('<li style="padding: 4px 10px; margin: 0; border-top: 1px solid #CCC;">'+ info.replace(/\</g,"&lt;").replace(/\>/g,"&gt;") +'</li>');
- }
-
- function createLog () {
- var pos = $.support.fixedPosition ? 'fixed' : 'absolute'
- , $e = $('<div id="layoutLogger" style="position: '+ pos +'; top: 5px; z-index: 999999; max-width: 25%; overflow: hidden; border: 1px solid #000; border-radius: 5px; background: #FBFBFB; box-shadow: 0 2px 10px rgba(0,0,0,0.3);">'
- + '<div style="font-size: 13px; font-weight: bold; padding: 5px 10px; background: #F6F6F6; border-radius: 5px 5px 0 0; cursor: move;">'
- + '<span style="float: right; padding-left: 7px; cursor: pointer;" title="Remove Console" onclick="$(this).closest(\'#layoutLogger\').remove()">X</span>Layout console.log</div>'
- + '<ul style="font-size: 13px; font-weight: none; list-style: none; margin: 0; padding: 0 0 2px;"></ul>'
- + '</div>'
- ).appendTo("body");
- $e.css('left', $(window).width() - $e.outerWidth() - 5)
- if ($.ui.draggable) $e.draggable({ handle: ':first-child' });
- return $e;
- };
- }
-
-};
-
-
-/*
- * $.layout.browser REPLACES removed $.browser, with extra data
- * Parsing code here adapted from jQuery 1.8 $.browse
- */
-(function(){
- var u = navigator.userAgent.toLowerCase()
- , m = /(chrome)[ \/]([\w.]+)/.exec( u )
- || /(webkit)[ \/]([\w.]+)/.exec( u )
- || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( u )
- || /(msie) ([\w.]+)/.exec( u )
- || u.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( u )
- || []
- , b = m[1] || ""
- , v = m[2] || 0
- , ie = b === "msie"
- , cm = document.compatMode
- , $s = $.support
- , bs = $s.boxSizing !== undefined ? $s.boxSizing : $s.boxSizingReliable
- , bm = !ie || !cm || cm === "CSS1Compat" || $s.boxModel || false
- , lb = $.layout.browser = {
- version: v
- , safari: b === "webkit" // webkit (NOT chrome) = safari
- , webkit: b === "chrome" // chrome = webkit
- , msie: ie
- , isIE6: ie && v == 6
- // ONLY IE reverts to old box-model - Note that compatMode was deprecated as of IE8
- , boxModel: bm
- , boxSizing: !!(typeof bs === "function" ? bs() : bs)
- };
- ;
- if (b) lb[b] = true; // set CURRENT browser
- /* OLD versions of jQuery only set $.support.boxModel after page is loaded
- * so if this is IE, use support.boxModel to test for quirks-mode (ONLY IE changes boxModel) */
- if (!bm && !cm) $(function(){ lb.boxModel = $s.boxModel; });
-})();
-
-
-// DEFAULT OPTIONS
-$.layout.defaults = {
-/*
- * LAYOUT & LAYOUT-CONTAINER OPTIONS
- * - none of these options are applicable to individual panes
- */
- name: "" // Not required, but useful for buttons and used for the state-cookie
-, containerClass: "ui-layout-container" // layout-container element
-, inset: null // custom container-inset values (override padding)
-, scrollToBookmarkOnLoad: true // after creating a layout, scroll to bookmark in URL (.../page.htm#myBookmark)
-, resizeWithWindow: true // bind thisLayout.resizeAll() to the window.resize event
-, resizeWithWindowDelay: 200 // delay calling resizeAll because makes window resizing very jerky
-, resizeWithWindowMaxDelay: 0 // 0 = none - force resize every XX ms while window is being resized
-, maskPanesEarly: false // true = create pane-masks on resizer.mouseDown instead of waiting for resizer.dragstart
-, onresizeall_start: null // CALLBACK when resizeAll() STARTS - NOT pane-specific
-, onresizeall_end: null // CALLBACK when resizeAll() ENDS - NOT pane-specific
-, onload_start: null // CALLBACK when Layout inits - after options initialized, but before elements
-, onload_end: null // CALLBACK when Layout inits - after EVERYTHING has been initialized
-, onunload_start: null // CALLBACK when Layout is destroyed OR onWindowUnload
-, onunload_end: null // CALLBACK when Layout is destroyed OR onWindowUnload
-, initPanes: true // false = DO NOT initialize the panes onLoad - will init later
-, showErrorMessages: true // enables fatal error messages to warn developers of common errors
-, showDebugMessages: false // display console-and-alert debug msgs - IF this Layout version _has_ debugging code!
-// Changing this zIndex value will cause other zIndex values to automatically change
-, zIndex: null // the PANE zIndex - resizers and masks will be +1
-// DO NOT CHANGE the zIndex values below unless you clearly understand their relationships
-, zIndexes: { // set _default_ z-index values here...
- pane_normal: 0 // normal z-index for panes
- , content_mask: 1 // applied to overlays used to mask content INSIDE panes during resizing
- , resizer_normal: 2 // normal z-index for resizer-bars
- , pane_sliding: 100 // applied to *BOTH* the pane and its resizer when a pane is 'slid open'
- , pane_animate: 1000 // applied to the pane when being animated - not applied to the resizer
- , resizer_drag: 10000 // applied to the CLONED resizer-bar when being 'dragged'
- }
-, errors: {
- pane: "pane" // description of "layout pane element" - used only in error messages
- , selector: "selector" // description of "jQuery-selector" - used only in error messages
- , addButtonError: "Error Adding Button\nInvalid "
- , containerMissing: "UI Layout Initialization Error\nThe specified layout-container does not exist."
- , centerPaneMissing: "UI Layout Initialization Error\nThe center-pane element does not exist.\nThe center-pane is a required element."
- , noContainerHeight: "UI Layout Initialization Warning\nThe layout-container \"CONTAINER\" has no height.\nTherefore the layout is 0-height and hence 'invisible'!"
- , callbackError: "UI Layout Callback Error\nThe EVENT callback is not a valid function."
- }
-/*
- * PANE DEFAULT SETTINGS
- * - settings under the 'panes' key become the default settings for *all panes*
- * - ALL pane-options can also be set specifically for each panes, which will override these 'default values'
- */
-, panes: { // default options for 'all panes' - will be overridden by 'per-pane settings'
- applyDemoStyles: false // NOTE: renamed from applyDefaultStyles for clarity
- , closable: true // pane can open & close
- , resizable: true // when open, pane can be resized
- , slidable: true // when closed, pane can 'slide open' over other panes - closes on mouse-out
- , initClosed: false // true = init pane as 'closed'
- , initHidden: false // true = init pane as 'hidden' - no resizer-bar/spacing
- // SELECTORS
- //, paneSelector: "" // MUST be pane-specific - jQuery selector for pane
- , contentSelector: ".ui-layout-content" // INNER div/element to auto-size so only it scrolls, not the entire pane!
- , contentIgnoreSelector: ".ui-layout-ignore" // element(s) to 'ignore' when measuring 'content'
- , findNestedContent: false // true = $P.find(contentSelector), false = $P.children(contentSelector)
- // GENERIC ROOT-CLASSES - for auto-generated classNames
- , paneClass: "ui-layout-pane" // Layout Pane
- , resizerClass: "ui-layout-resizer" // Resizer Bar
- , togglerClass: "ui-layout-toggler" // Toggler Button
- , buttonClass: "ui-layout-button" // CUSTOM Buttons - eg: '[ui-layout-button]-toggle/-open/-close/-pin'
- // ELEMENT SIZE & SPACING
- //, size: 100 // MUST be pane-specific -initial size of pane
- , minSize: 0 // when manually resizing a pane
- , maxSize: 0 // ditto, 0 = no limit
- , spacing_open: 6 // space between pane and adjacent panes - when pane is 'open'
- , spacing_closed: 6 // ditto - when pane is 'closed'
- , togglerLength_open: 50 // Length = WIDTH of toggler button on north/south sides - HEIGHT on east/west sides
- , togglerLength_closed: 50 // 100% OR -1 means 'full height/width of resizer bar' - 0 means 'hidden'
- , togglerAlign_open: "center" // top/left, bottom/right, center, OR...
- , togglerAlign_closed: "center" // 1 => nn = offset from top/left, -1 => -nn == offset from bottom/right
- , togglerContent_open: "" // text or HTML to put INSIDE the toggler
- , togglerContent_closed: "" // ditto
- // RESIZING OPTIONS
- , resizerDblClickToggle: true //
- , autoResize: true // IF size is 'auto' or a percentage, then recalc 'pixel size' whenever the layout resizes
- , autoReopen: true // IF a pane was auto-closed due to noRoom, reopen it when there is room? False = leave it closed
- , resizerDragOpacity: 1 // option for ui.draggable
- //, resizerCursor: "" // MUST be pane-specific - cursor when over resizer-bar
- , maskContents: false // true = add DIV-mask over-or-inside this pane so can 'drag' over IFRAMES
- , maskObjects: false // true = add IFRAME-mask over-or-inside this pane to cover objects/applets - content-mask will overlay this mask
- , maskZindex: null // will override zIndexes.content_mask if specified - not applicable to iframe-panes
- , resizingGrid: false // grid size that the resizers will snap-to during resizing, eg: [20,20]
- , livePaneResizing: false // true = LIVE Resizing as resizer is dragged
- , liveContentResizing: false // true = re-measure header/footer heights as resizer is dragged
- , liveResizingTolerance: 1 // how many px change before pane resizes, to control performance
- // SLIDING OPTIONS
- , sliderCursor: "pointer" // cursor when resizer-bar will trigger 'sliding'
- , slideTrigger_open: "click" // click, dblclick, mouseenter
- , slideTrigger_close: "mouseleave"// click, mouseleave
- , slideDelay_open: 300 // applies only for mouseenter event - 0 = instant open
- , slideDelay_close: 300 // applies only for mouseleave event (300ms is the minimum!)
- , hideTogglerOnSlide: false // when pane is slid-open, should the toggler show?
- , preventQuickSlideClose: $.layout.browser.webkit // Chrome triggers slideClosed as it is opening
- , preventPrematureSlideClose: false // handle incorrect mouseleave trigger, like when over a SELECT-list in IE
- // PANE-SPECIFIC TIPS & MESSAGES
- , tips: {
- Open: "Open" // eg: "Open Pane"
- , Close: "Close"
- , Resize: "Resize"
- , Slide: "Slide Open"
- , Pin: "Pin"
- , Unpin: "Un-Pin"
- , noRoomToOpen: "Not enough room to show this panel." // alert if user tries to open a pane that cannot
- , minSizeWarning: "Panel has reached its minimum size" // displays in browser statusbar
- , maxSizeWarning: "Panel has reached its maximum size" // ditto
- }
- // HOT-KEYS & MISC
- , showOverflowOnHover: false // will bind allowOverflow() utility to pane.onMouseOver
- , enableCursorHotkey: true // enabled 'cursor' hotkeys
- //, customHotkey: "" // MUST be pane-specific - EITHER a charCode OR a character
- , customHotkeyModifier: "SHIFT" // either 'SHIFT', 'CTRL' or 'CTRL+SHIFT' - NOT 'ALT'
- // PANE ANIMATION
- // NOTE: fxSss_open, fxSss_close & fxSss_size options (eg: fxName_open) are auto-generated if not passed
- , fxName: "slide" // ('none' or blank), slide, drop, scale -- only relevant to 'open' & 'close', NOT 'size'
- , fxSpeed: null // slow, normal, fast, 200, nnn - if passed, will OVERRIDE fxSettings.duration
- , fxSettings: {} // can be passed, eg: { easing: "easeOutBounce", duration: 1500 }
- , fxOpacityFix: true // tries to fix opacity in IE to restore anti-aliasing after animation
- , animatePaneSizing: false // true = animate resizing after dragging resizer-bar OR sizePane() is called
- /* NOTE: Action-specific FX options are auto-generated from the options above if not specifically set:
- fxName_open: "slide" // 'Open' pane animation
- fnName_close: "slide" // 'Close' pane animation
- fxName_size: "slide" // 'Size' pane animation - when animatePaneSizing = true
- fxSpeed_open: null
- fxSpeed_close: null
- fxSpeed_size: null
- fxSettings_open: {}
- fxSettings_close: {}
- fxSettings_size: {}
- */
- // CHILD/NESTED LAYOUTS
- , children: null // Layout-options for nested/child layout - even {} is valid as options
- , containerSelector: '' // if child is NOT 'directly nested', a selector to find it/them (can have more than one child layout!)
- , initChildren: true // true = child layout will be created as soon as _this_ layout completes initialization
- , destroyChildren: true // true = destroy child-layout if this pane is destroyed
- , resizeChildren: true // true = trigger child-layout.resizeAll() when this pane is resized
- // EVENT TRIGGERING
- , triggerEventsOnLoad: false // true = trigger onopen OR onclose callbacks when layout initializes
- , triggerEventsDuringLiveResize: true // true = trigger onresize callback REPEATEDLY if livePaneResizing==true
- // PANE CALLBACKS
- , onshow_start: null // CALLBACK when pane STARTS to Show - BEFORE onopen/onhide_start
- , onshow_end: null // CALLBACK when pane ENDS being Shown - AFTER onopen/onhide_end
- , onhide_start: null // CALLBACK when pane STARTS to Close - BEFORE onclose_start
- , onhide_end: null // CALLBACK when pane ENDS being Closed - AFTER onclose_end
- , onopen_start: null // CALLBACK when pane STARTS to Open
- , onopen_end: null // CALLBACK when pane ENDS being Opened
- , onclose_start: null // CALLBACK when pane STARTS to Close
- , onclose_end: null // CALLBACK when pane ENDS being Closed
- , onresize_start: null // CALLBACK when pane STARTS being Resized ***FOR ANY REASON***
- , onresize_end: null // CALLBACK when pane ENDS being Resized ***FOR ANY REASON***
- , onsizecontent_start: null // CALLBACK when sizing of content-element STARTS
- , onsizecontent_end: null // CALLBACK when sizing of content-element ENDS
- , onswap_start: null // CALLBACK when pane STARTS to Swap
- , onswap_end: null // CALLBACK when pane ENDS being Swapped
- , ondrag_start: null // CALLBACK when pane STARTS being ***MANUALLY*** Resized
- , ondrag_end: null // CALLBACK when pane ENDS being ***MANUALLY*** Resized
- }
-/*
- * PANE-SPECIFIC SETTINGS
- * - options listed below MUST be specified per-pane - they CANNOT be set under 'panes'
- * - all options under the 'panes' key can also be set specifically for any pane
- * - most options under the 'panes' key apply only to 'border-panes' - NOT the the center-pane
- */
-, north: {
- paneSelector: ".ui-layout-north"
- , size: "auto" // eg: "auto", "30%", .30, 200
- , resizerCursor: "n-resize" // custom = url(myCursor.cur)
- , customHotkey: "" // EITHER a charCode (43) OR a character ("o")
- }
-, south: {
- paneSelector: ".ui-layout-south"
- , size: "50%"//"auto"
- , resizerCursor: "s-resize"
- , customHotkey: ""
- , initClosed: true
- }
-, east: {
- paneSelector: ".ui-layout-east"
- , size: "5%"//200
- , resizerCursor: "e-resize"
- , customHotkey: ""
- }
-, west: {
- paneSelector: ".ui-layout-west"
- , size: "70%" //200
- , resizerCursor: "w-resize"
- , customHotkey: ""
- , initClosed: true
- }
-, center: {
- paneSelector: ".ui-layout-center"
- , size: "30%"//"auto"
- , minWidth: 0
- , minHeight: 0
- }
-};
-
-$.layout.optionsMap = {
- // layout/global options - NOT pane-options
- layout: ("name,instanceKey,stateManagement,effects,inset,zIndexes,errors,"
- + "zIndex,scrollToBookmarkOnLoad,showErrorMessages,maskPanesEarly,"
- + "outset,resizeWithWindow,resizeWithWindowDelay,resizeWithWindowMaxDelay,"
- + "onresizeall,onresizeall_start,onresizeall_end,onload,onload_start,onload_end,onunload,onunload_start,onunload_end").split(",")
-// borderPanes: [ ALL options that are NOT specified as 'layout' ]
- // default.panes options that apply to the center-pane (most options apply _only_ to border-panes)
-, center: ("paneClass,contentSelector,contentIgnoreSelector,findNestedContent,applyDemoStyles,triggerEventsOnLoad,"
- + "showOverflowOnHover,maskContents,maskObjects,liveContentResizing,"
- + "containerSelector,children,initChildren,resizeChildren,destroyChildren,"
- + "onresize,onresize_start,onresize_end,onsizecontent,onsizecontent_start,onsizecontent_end").split(",")
- // options that MUST be specifically set 'per-pane' - CANNOT set in the panes (defaults) key
-, noDefault: ("paneSelector,resizerCursor,customHotkey").split(",")
-};
-
-/**
- * Processes options passed in converts flat-format data into subkey (JSON) format
- * In flat-format, subkeys are _currently_ separated with 2 underscores, like north__optName
- * Plugins may also call this method so they can transform their own data
- *
- * @param {!Object} hash Data/options passed by user - may be a single level or nested levels
- * @param {boolean=} [addKeys=false] Should the primary layout.options keys be added if they do not exist?
- * @return {Object} Returns hash of minWidth & minHeight
- */
-$.layout.transformData = function (hash, addKeys) {
- var json = addKeys ? { panes: {}, center: {} } : {} // init return object
- , branch, optKey, keys, key, val, i, c;
-
- if (typeof hash !== "object") return json; // no options passed
-
- // convert all 'flat-keys' to 'sub-key' format
- for (optKey in hash) {
- branch = json;
- val = hash[ optKey ];
- keys = optKey.split("__"); // eg: west__size or north__fxSettings__duration
- c = keys.length - 1;
- // convert underscore-delimited to subkeys
- for (i=0; i <= c; i++) {
- key = keys[i];
- if (i === c) { // last key = value
- if ($.isPlainObject( val ))
- branch[key] = $.layout.transformData( val ); // RECURSE
- else
- branch[key] = val;
- }
- else {
- if (!branch[key])
- branch[key] = {}; // create the subkey
- // recurse to sub-key for next loop - if not done
- branch = branch[key];
- }
- }
- }
- return json;
-};
-
-// INTERNAL CONFIG DATA - DO NOT CHANGE THIS!
-$.layout.backwardCompatibility = {
- // data used by renameOldOptions()
- map: {
- // OLD Option Name: NEW Option Name
- applyDefaultStyles: "applyDemoStyles"
- // CHILD/NESTED LAYOUTS
- , childOptions: "children"
- , initChildLayout: "initChildren"
- , destroyChildLayout: "destroyChildren"
- , resizeChildLayout: "resizeChildren"
- , resizeNestedLayout: "resizeChildren"
- // MISC Options
- , resizeWhileDragging: "livePaneResizing"
- , resizeContentWhileDragging: "liveContentResizing"
- , triggerEventsWhileDragging: "triggerEventsDuringLiveResize"
- , maskIframesOnResize: "maskContents"
- // STATE MANAGEMENT
- , useStateCookie: "stateManagement.enabled"
- , "cookie.autoLoad": "stateManagement.autoLoad"
- , "cookie.autoSave": "stateManagement.autoSave"
- , "cookie.keys": "stateManagement.stateKeys"
- , "cookie.name": "stateManagement.cookie.name"
- , "cookie.domain": "stateManagement.cookie.domain"
- , "cookie.path": "stateManagement.cookie.path"
- , "cookie.expires": "stateManagement.cookie.expires"
- , "cookie.secure": "stateManagement.cookie.secure"
- // OLD Language options
- , noRoomToOpenTip: "tips.noRoomToOpen"
- , togglerTip_open: "tips.Close" // open = Close
- , togglerTip_closed: "tips.Open" // closed = Open
- , resizerTip: "tips.Resize"
- , sliderTip: "tips.Slide"
- }
-
-/**
-* @param {Object} opts
-*/
-, renameOptions: function (opts) {
- var map = $.layout.backwardCompatibility.map
- , oldData, newData, value
- ;
- for (var itemPath in map) {
- oldData = getBranch( itemPath );
- value = oldData.branch[ oldData.key ];
- if (value !== undefined) {
- newData = getBranch( map[itemPath], true );
- newData.branch[ newData.key ] = value;
- delete oldData.branch[ oldData.key ];
- }
- }
-
- /**
- * @param {string} path
- * @param {boolean=} [create=false] Create path if does not exist
- */
- function getBranch (path, create) {
- var a = path.split(".") // split keys into array
- , c = a.length - 1
- , D = { branch: opts, key: a[c] } // init branch at top & set key (last item)
- , i = 0, k, undef;
- for (; i<c; i++) { // skip the last key (data)
- k = a[i];
- if (D.branch[ k ] == undefined) { // child-key does not exist
- if (create) {
- D.branch = D.branch[ k ] = {}; // create child-branch
- }
- else // can't go any farther
- D.branch = {}; // branch is undefined
- }
- else
- D.branch = D.branch[ k ]; // get child-branch
- }
- return D;
- };
- }
-
-/**
-* @param {Object} opts
-*/
-, renameAllOptions: function (opts) {
- var ren = $.layout.backwardCompatibility.renameOptions;
- // rename root (layout) options
- ren( opts );
- // rename 'defaults' to 'panes'
- if (opts.defaults) {
- if (typeof opts.panes !== "object")
- opts.panes = {};
- $.extend(true, opts.panes, opts.defaults);
- delete opts.defaults;
- }
- // rename options in the the options.panes key
- if (opts.panes) ren( opts.panes );
- // rename options inside *each pane key*, eg: options.west
- $.each($.layout.config.allPanes, function (i, pane) {
- if (opts[pane]) ren( opts[pane] );
- });
- return opts;
- }
-};
-
-
-
-
-/* ============================================================
- * BEGIN WIDGET: $( selector ).layout( {options} );
- * ============================================================
- */
-$.fn.layout = function (opts) {
- var
-
- // local aliases to global data
- browser = $.layout.browser
-, _c = $.layout.config
-
- // local aliases to utlity methods
-, cssW = $.layout.cssWidth
-, cssH = $.layout.cssHeight
-, elDims = $.layout.getElementDimensions
-, styles = $.layout.getElementStyles
-, evtObj = $.layout.getEventObject
-, evtPane = $.layout.parsePaneName
-
-/**
- * options - populated by initOptions()
- */
-, options = $.extend(true, {}, $.layout.defaults)
-, effects = options.effects = $.extend(true, {}, $.layout.effects)
-
-/**
- * layout-state object
- */
-, state = {
- // generate unique ID to use for event.namespace so can unbind only events added by 'this layout'
- id: "layout"+ $.now() // code uses alias: sID
- , initialized: false
- , paneResizing: false
- , panesSliding: {}
- , container: { // list all keys referenced in code to avoid compiler error msgs
- innerWidth: 0
- , innerHeight: 0
- , outerWidth: 0
- , outerHeight: 0
- , layoutWidth: 0
- , layoutHeight: 0
- }
- , north: { childIdx: 0 }
- , south: { childIdx: 0 }
- , east: { childIdx: 0 }
- , west: { childIdx: 0 }
- , center: { childIdx: 0 }
- }
-
-/**
- * parent/child-layout pointers
- */
-//, hasParentLayout = false - exists ONLY inside Instance so can be set externally
-, children = {
- north: null
- , south: null
- , east: null
- , west: null
- , center: null
- }
-
-/*
- * ###########################
- * INTERNAL HELPER FUNCTIONS
- * ###########################
- */
-
- /**
- * Manages all internal timers
- */
-, timer = {
- data: {}
- , set: function (s, fn, ms) { timer.clear(s); timer.data[s] = setTimeout(fn, ms); }
- , clear: function (s) { var t=timer.data; if (t[s]) {clearTimeout(t[s]); delete t[s];} }
- }
-
- /**
- * Alert or console.log a message - IF option is enabled.
- *
- * @param {(string|!Object)} msg Message (or debug-data) to display
- * @param {boolean=} [popup=false] True by default, means 'alert', false means use console.log
- * @param {boolean=} [debug=false] True means is a widget debugging message
- */
-, _log = function (msg, popup, debug) {
- var o = options;
- if ((o.showErrorMessages && !debug) || (debug && o.showDebugMessages))
- $.layout.msg( o.name +' / '+ msg, (popup !== false) );
- return false;
- }
-
- /**
- * Executes a Callback function after a trigger event, like resize, open or close
- *
- * @param {string} evtName Name of the layout callback, eg "onresize_start"
- * @param {(string|boolean)=} [pane=""] This is passed only so we can pass the 'pane object' to the callback
- * @param {(string|boolean)=} [skipBoundEvents=false] True = do not run events bound to the elements - only the callbacks set in options
- */
-, _runCallbacks = function (evtName, pane, skipBoundEvents) {
- var hasPane = pane && isStr(pane)
- , s = hasPane ? state[pane] : state
- , o = hasPane ? options[pane] : options
- , lName = options.name
- // names like onopen and onopen_end separate are interchangeable in options...
- , lng = evtName + (evtName.match(/_/) ? "" : "_end")
- , shrt = lng.match(/_end$/) ? lng.substr(0, lng.length - 4) : ""
- , fn = o[lng] || o[shrt]
- , retVal = "NC" // NC = No Callback
- , args = []
- , $P = hasPane ? $Ps[pane] : 0
- ;
- if (hasPane && !$P) // a pane is specified, but does not exist!
- return retVal;
- if ( !hasPane && $.type(pane) === "boolean" ) {
- skipBoundEvents = pane; // allow pane param to be skipped for Layout callback
- pane = "";
- }
-
- // first trigger the callback set in the options
- if (fn) {
- try {
- // convert function name (string) to function object
- if (isStr( fn )) {
- if (fn.match(/,/)) {
- // function name cannot contain a comma,
- // so must be a function name AND a parameter to pass
- args = fn.split(",")
- , fn = eval(args[0]);
- }
- else // just the name of an external function?
- fn = eval(fn);
- }
- // execute the callback, if exists
- if ($.isFunction( fn )) {
- if (args.length)
- retVal = g(fn)(args[1]); // pass the argument parsed from 'list'
- else if ( hasPane )
- // pass data: pane-name, pane-element, pane-state, pane-options, and layout-name
- retVal = g(fn)( pane, $Ps[pane], s, o, lName );
- else // must be a layout/container callback - pass suitable info
- retVal = g(fn)( Instance, s, o, lName );
- }
- }
- catch (ex) {
- _log( options.errors.callbackError.replace(/EVENT/, $.trim((pane || "") +" "+ lng)), false );
- if ($.type(ex) === "string" && string.length)
- _log("Exception: "+ ex, false );
- }
- }
-
- // trigger additional events bound directly to the pane
- if (!skipBoundEvents && retVal !== false) {
- if ( hasPane ) { // PANE events can be bound to each pane-elements
- o = options[pane];
- s = state[pane];
- $P.triggerHandler("layoutpane"+ lng, [ pane, $P, s, o, lName ]);
- if (shrt)
- $P.triggerHandler("layoutpane"+ shrt, [ pane, $P, s, o, lName ]);
- }
- else { // LAYOUT events can be bound to the container-element
- $N.triggerHandler("layout"+ lng, [ Instance, s, o, lName ]);
- if (shrt)
- $N.triggerHandler("layout"+ shrt, [ Instance, s, o, lName ]);
- }
- }
-
- // ALWAYS resizeChildren after an onresize_end event - even during initialization
- // IGNORE onsizecontent_end event because causes child-layouts to resize TWICE
- if (hasPane && evtName === "onresize_end") // BAD: || evtName === "onsizecontent_end"
- resizeChildren(pane+"", true); // compiler hack -force string
-
- return retVal;
-
- function g (f) { return f; }; // compiler hack
- }
-
-
- /**
- * cure iframe display issues in IE & other browsers
- */
-, _fixIframe = function (pane) {
- if (browser.mozilla) return; // skip FireFox - it auto-refreshes iframes onShow
- var $P = $Ps[pane];
- // if the 'pane' is an iframe, do it
- if (state[pane].tagName === "IFRAME")
- $P.css(_c.hidden).css(_c.visible);
- else // ditto for any iframes INSIDE the pane
- $P.find('IFRAME').css(_c.hidden).css(_c.visible);
- }
-
- /**
- * @param {string} pane Can accept ONLY a 'pane' (east, west, etc)
- * @param {number=} outerSize (optional) Can pass a width, allowing calculations BEFORE element is resized
- * @return {number} Returns the innerHeight/Width of el by subtracting padding and borders
- */
-, cssSize = function (pane, outerSize) {
- var fn = _c[pane].dir=="horz" ? cssH : cssW;
- return fn($Ps[pane], outerSize);
- }
-
- /**
- * @param {string} pane Can accept ONLY a 'pane' (east, west, etc)
- * @return {Object} Returns hash of minWidth & minHeight
- */
-, cssMinDims = function (pane) {
- // minWidth/Height means CSS width/height = 1px
- var $P = $Ps[pane]
- , dir = _c[pane].dir
- , d = {
- minWidth: 1001 - cssW($P, 1000)
- , minHeight: 1001 - cssH($P, 1000)
- }
- ;
- if (dir === "horz") d.minSize = d.minHeight;
- if (dir === "vert") d.minSize = d.minWidth;
- return d;
- }
-
- // TODO: see if these methods can be made more useful...
- // TODO: *maybe* return cssW/H from these so caller can use this info
-
- /**
- * @param {(string|!Object)} el
- * @param {number=} outerWidth
- * @param {boolean=} [autoHide=false]
- */
-, setOuterWidth = function (el, outerWidth, autoHide) {
- var $E = el, w;
- if (isStr(el)) $E = $Ps[el]; // west
- else if (!el.jquery) $E = $(el);
- w = cssW($E, outerWidth);
- $E.css({ width: w });
- if (w > 0) {
- if (autoHide && $E.data('autoHidden') && $E.innerHeight() > 0) {
- $E.show().data('autoHidden', false);
- if (!browser.mozilla) // FireFox refreshes iframes - IE does not
- // make hidden, then visible to 'refresh' display after animation
- $E.css(_c.hidden).css(_c.visible);
- }
- }
- else if (autoHide && !$E.data('autoHidden'))
- $E.hide().data('autoHidden', true);
- }
-
- /**
- * @param {(string|!Object)} el
- * @param {number=} outerHeight
- * @param {boolean=} [autoHide=false]
- */
-, setOuterHeight = function (el, outerHeight, autoHide) {
- var $E = el, h;
- if (isStr(el)) $E = $Ps[el]; // west
- else if (!el.jquery) $E = $(el);
- h = cssH($E, outerHeight);
- $E.css({ height: h, visibility: "visible" }); // may have been 'hidden' by sizeContent
- if (h > 0 && $E.innerWidth() > 0) {
- if (autoHide && $E.data('autoHidden')) {
- $E.show().data('autoHidden', false);
- if (!browser.mozilla) // FireFox refreshes iframes - IE does not
- $E.css(_c.hidden).css(_c.visible);
- }
- }
- else if (autoHide && !$E.data('autoHidden'))
- $E.hide().data('autoHidden', true);
- }
-
-
- /**
- * Converts any 'size' params to a pixel/integer size, if not already
- * If 'auto' or a decimal/percentage is passed as 'size', a pixel-size is calculated
- *
- /**
- * @param {string} pane
- * @param {(string|number)=} size
- * @param {string=} [dir]
- * @return {number}
- */
-, _parseSize = function (pane, size, dir) {
- if (!dir) dir = _c[pane].dir;
-
- if (isStr(size) && size.match(/%/))
- size = (size === '100%') ? -1 : parseInt(size, 10) / 100; // convert % to decimal
-
- if (size === 0)
- return 0;
- else if (size >= 1)
- return parseInt(size, 10);
-
- var o = options, avail = 0;
- if (dir=="horz") // north or south or center.minHeight
- avail = sC.innerHeight - ($Ps.north ? o.north.spacing_open : 0) - ($Ps.south ? o.south.spacing_open : 0);
- else if (dir=="vert") // east or west or center.minWidth
- avail = sC.innerWidth - ($Ps.west ? o.west.spacing_open : 0) - ($Ps.east ? o.east.spacing_open : 0);
-
- if (size === -1) // -1 == 100%
- return avail;
- else if (size > 0) // percentage, eg: .25
- return round(avail * size);
- else if (pane=="center")
- return 0;
- else { // size < 0 || size=='auto' || size==Missing || size==Invalid
- // auto-size the pane
- var dim = (dir === "horz" ? "height" : "width")
- , $P = $Ps[pane]
- , $C = dim === 'height' ? $Cs[pane] : false
- , vis = $.layout.showInvisibly($P) // show pane invisibly if hidden
- , szP = $P.css(dim) // SAVE current pane size
- , szC = $C ? $C.css(dim) : 0 // SAVE current content size
- ;
- $P.css(dim, "auto");
- if ($C) $C.css(dim, "auto");
- size = (dim === "height") ? $P.outerHeight() : $P.outerWidth(); // MEASURE
- $P.css(dim, szP).css(vis); // RESET size & visibility
- if ($C) $C.css(dim, szC);
- return size;
- }
- }
-
- /**
- * Calculates current 'size' (outer-width or outer-height) of a border-pane - optionally with 'pane-spacing' added
- *
- * @param {(string|!Object)} pane
- * @param {boolean=} [inclSpace=false]
- * @return {number} Returns EITHER Width for east/west panes OR Height for north/south panes
- */
-, getPaneSize = function (pane, inclSpace) {
- var
- $P = $Ps[pane]
- , o = options[pane]
- , s = state[pane]
- , oSp = (inclSpace ? o.spacing_open : 0)
- , cSp = (inclSpace ? o.spacing_closed : 0)
- ;
- if (!$P || s.isHidden)
- return 0;
- else if (s.isClosed || (s.isSliding && inclSpace))
- return cSp;
- else if (_c[pane].dir === "horz")
- return $P.outerHeight() + oSp;
- else // dir === "vert"
- return $P.outerWidth() + oSp;
- }
-
- /**
- * Calculate min/max pane dimensions and limits for resizing
- *
- * @param {string} pane
- * @param {boolean=} [slide=false]
- */
-, setSizeLimits = function (pane, slide) {
- if (!isInitialized()) return;
- var
- o = options[pane]
- , s = state[pane]
- , c = _c[pane]
- , dir = c.dir
- , type = c.sizeType.toLowerCase()
- , isSliding = (slide != undefined ? slide : s.isSliding) // only open() passes 'slide' param
- , $P = $Ps[pane]
- , paneSpacing = o.spacing_open
- // measure the pane on the *opposite side* from this pane
- , altPane = _c.oppositeEdge[pane]
- , altS = state[altPane]
- , $altP = $Ps[altPane]
- , altPaneSize = (!$altP || altS.isVisible===false || altS.isSliding ? 0 : (dir=="horz" ? $altP.outerHeight() : $altP.outerWidth()))
- , altPaneSpacing = ((!$altP || altS.isHidden ? 0 : options[altPane][ altS.isClosed !== false ? "spacing_closed" : "spacing_open" ]) || 0)
- // limitSize prevents this pane from 'overlapping' opposite pane
- , containerSize = (dir=="horz" ? sC.innerHeight : sC.innerWidth)
- , minCenterDims = cssMinDims("center")
- , minCenterSize = dir=="horz" ? max(options.center.minHeight, minCenterDims.minHeight) : max(options.center.minWidth, minCenterDims.minWidth)
- // if pane is 'sliding', then ignore center and alt-pane sizes - because 'overlays' them
- , limitSize = (containerSize - paneSpacing - (isSliding ? 0 : (_parseSize("center", minCenterSize, dir) + altPaneSize + altPaneSpacing)))
- , minSize = s.minSize = max( _parseSize(pane, o.minSize), cssMinDims(pane).minSize )
- , maxSize = s.maxSize = min( (o.maxSize ? _parseSize(pane, o.maxSize) : 100000), limitSize )
- , r = s.resizerPosition = {} // used to set resizing limits
- , top = sC.inset.top
- , left = sC.inset.left
- , W = sC.innerWidth
- , H = sC.innerHeight
- , rW = o.spacing_open // subtract resizer-width to get top/left position for south/east
- ;
- switch (pane) {
- case "north": r.min = top + minSize;
- r.max = top + maxSize;
- break;
- case "west": r.min = left + minSize;
- r.max = left + maxSize;
- break;
- case "south": r.min = top + H - maxSize - rW;
- r.max = top + H - minSize - rW;
- break;
- case "east": r.min = left + W - maxSize - rW;
- r.max = left + W - minSize - rW;
- break;
- };
- }
-
- /**
- * Returns data for setting the size/position of center pane. Also used to set Height for east/west panes
- *
- * @return JSON Returns a hash of all dimensions: top, bottom, left, right, (outer) width and (outer) height
- */
-, calcNewCenterPaneDims = function () {
- var d = {
- top: getPaneSize("north", true) // true = include 'spacing' value for pane
- , bottom: getPaneSize("south", true)
- , left: getPaneSize("west", true)
- , right: getPaneSize("east", true)
- , width: 0
- , height: 0
- };
-
- // NOTE: sC = state.container
- // calc center-pane outer dimensions
- d.width = sC.innerWidth - d.left - d.right; // outerWidth
- d.height = sC.innerHeight - d.bottom - d.top; // outerHeight
- // add the 'container border/padding' to get final positions relative to the container
- d.top += sC.inset.top;
- d.bottom += sC.inset.bottom;
- d.left += sC.inset.left;
- d.right += sC.inset.right;
-
- return d;
- }
-
-
- /**
- * @param {!Object} el
- * @param {boolean=} [allStates=false]
- */
-, getHoverClasses = function (el, allStates) {
- var
- $El = $(el)
- , type = $El.data("layoutRole")
- , pane = $El.data("layoutEdge")
- , o = options[pane]
- , root = o[type +"Class"]
- , _pane = "-"+ pane // eg: "-west"
- , _open = "-open"
- , _closed = "-closed"
- , _slide = "-sliding"
- , _hover = "-hover " // NOTE the trailing space
- , _state = $El.hasClass(root+_closed) ? _closed : _open
- , _alt = _state === _closed ? _open : _closed
- , classes = (root+_hover) + (root+_pane+_hover) + (root+_state+_hover) + (root+_pane+_state+_hover)
- ;
- if (allStates) // when 'removing' classes, also remove alternate-state classes
- classes += (root+_alt+_hover) + (root+_pane+_alt+_hover);
-
- if (type=="resizer" && $El.hasClass(root+_slide))
- classes += (root+_slide+_hover) + (root+_pane+_slide+_hover);
-
- return $.trim(classes);
- }
-, addHover = function (evt, el) {
- var $E = $(el || this);
- if (evt && $E.data("layoutRole") === "toggler")
- evt.stopPropagation(); // prevent triggering 'slide' on Resizer-bar
- $E.addClass( getHoverClasses($E) );
- }
-, removeHover = function (evt, el) {
- var $E = $(el || this);
- $E.removeClass( getHoverClasses($E, true) );
- }
-
-, onResizerEnter = function (evt) { // ALSO called by toggler.mouseenter
- var pane = $(this).data("layoutEdge")
- , s = state[pane]
- , $d = $(document)
- ;
- // ignore closed-panes and mouse moving back & forth over resizer!
- // also ignore if ANY pane is currently resizing
- if ( s.isResizing || state.paneResizing ) return;
-
- if (options.maskPanesEarly)
- showMasks( pane, { resizing: true });
- }
-, onResizerLeave = function (evt, el) {
- var e = el || this // el is only passed when called by the timer
- , pane = $(e).data("layoutEdge")
- , name = pane +"ResizerLeave"
- , $d = $(document)
- ;
- timer.clear(pane+"_openSlider"); // cancel slideOpen timer, if set
- timer.clear(name); // cancel enableSelection timer - may re/set below
- // this method calls itself on a timer because it needs to allow
- // enough time for dragging to kick-in and set the isResizing flag
- // dragging has a 100ms delay set, so this delay must be >100
- if (!el) // 1st call - mouseleave event
- timer.set(name, function(){ onResizerLeave(evt, e); }, 200);
- // if user is resizing, dragStop will reset everything, so skip it here
- else if (options.maskPanesEarly && !state.paneResizing) // 2nd call - by timer
- hideMasks();
- }
-
-/*
- * ###########################
- * INITIALIZATION METHODS
- * ###########################
- */
-
- /**
- * Initialize the layout - called automatically whenever an instance of layout is created
- *
- * @see none - triggered onInit
- * @return mixed true = fully initialized | false = panes not initialized (yet) | 'cancel' = abort
- */
-, _create = function () {
- // initialize config/options
- initOptions();
- var o = options
- , s = state;
-
- // TEMP state so isInitialized returns true during init process
- s.creatingLayout = true;
-
- // init plugins for this layout, if there are any (eg: stateManagement)
- runPluginCallbacks( Instance, $.layout.onCreate );
-
- // options & state have been initialized, so now run beforeLoad callback
- // onload will CANCEL layout creation if it returns false
- if (false === _runCallbacks("onload_start"))
- return 'cancel';
-
- // initialize the container element
- _initContainer();
-
- // bind hotkey function - keyDown - if required
- initHotkeys();
-
- // bind window.onunload
- $(window).bind("unload."+ sID, unload);
-
- // init plugins for this layout, if there are any (eg: customButtons)
- runPluginCallbacks( Instance, $.layout.onLoad );
-
- // if layout elements are hidden, then layout WILL NOT complete initialization!
- // initLayoutElements will set initialized=true and run the onload callback IF successful
- if (o.initPanes) _initLayoutElements();
-
- delete s.creatingLayout;
-
- return state.initialized;
- }
-
- /**
- * Initialize the layout IF not already
- *
- * @see All methods in Instance run this test
- * @return boolean true = layoutElements have been initialized | false = panes are not initialized (yet)
- */
-, isInitialized = function () {
- if (state.initialized || state.creatingLayout) return true; // already initialized
- else return _initLayoutElements(); // try to init panes NOW
- }
-
- /**
- * Initialize the layout - called automatically whenever an instance of layout is created
- *
- * @see _create() & isInitialized
- * @param {boolean=} [retry=false] // indicates this is a 2nd try
- * @return An object pointer to the instance created
- */
-, _initLayoutElements = function (retry) {
- // initialize config/options
- var o = options;
- // CANNOT init panes inside a hidden container!
- if (!$N.is(":visible")) {
- // handle Chrome bug where popup window 'has no height'
- // if layout is BODY element, try again in 50ms
- // SEE: http://layout.jquery-dev.com/samples/test_popup_window.html
- if ( !retry && browser.webkit && $N[0].tagName === "BODY" )
- setTimeout(function(){ _initLayoutElements(true); }, 50);
- return false;
- }
-
- // a center pane is required, so make sure it exists
- if (!getPane("center").length) {
- return _log( o.errors.centerPaneMissing );
- }
-
- // TEMP state so isInitialized returns true during init process
- state.creatingLayout = true;
-
- // update Container dims
- $.extend(sC, elDims( $N, o.inset )); // passing inset means DO NOT include insetX values
-
- // initialize all layout elements
- initPanes(); // size & position panes - calls initHandles() - which calls initResizable()
-
- if (o.scrollToBookmarkOnLoad) {
- var l = self.location;
- if (l.hash) l.replace( l.hash ); // scrollTo Bookmark
- }
-
- // check to see if this layout 'nested' inside a pane
- if (Instance.hasParentLayout)
- o.resizeWithWindow = false;
- // bind resizeAll() for 'this layout instance' to window.resize event
- else if (o.resizeWithWindow)
- $(window).bind("resize."+ sID, windowResize);
-
- delete state.creatingLayout;
- state.initialized = true;
-
- // init plugins for this layout, if there are any
- runPluginCallbacks( Instance, $.layout.onReady );
-
- // now run the onload callback, if exists
- _runCallbacks("onload_end");
-
- return true; // elements initialized successfully
- }
-
- /**
- * Initialize nested layouts for a specific pane - can optionally pass layout-options
- *
- * @param {(string|Object)} evt_or_pane The pane being opened, ie: north, south, east, or west
- * @param {Object=} [opts] Layout-options - if passed, will OVERRRIDE options[pane].children
- * @return An object pointer to the layout instance created - or null
- */
-, createChildren = function (evt_or_pane, opts) {
- var pane = evtPane.call(this, evt_or_pane)
- , $P = $Ps[pane]
- ;
- if (!$P) return;
- var $C = $Cs[pane]
- , s = state[pane]
- , o = options[pane]
- , sm = options.stateManagement || {}
- , cos = opts ? (o.children = opts) : o.children
- ;
- if ( $.isPlainObject( cos ) )
- cos = [ cos ]; // convert a hash to a 1-elem array
- else if (!cos || !$.isArray( cos ))
- return;
-
- $.each( cos, function (idx, co) {
- if ( !$.isPlainObject( co ) ) return;
-
- // determine which element is supposed to be the 'child container'
- // if pane has a 'containerSelector' OR a 'content-div', use those instead of the pane
- var $containers = co.containerSelector ? $P.find( co.containerSelector ) : ($C || $P);
-
- $containers.each(function(){
- var $cont = $(this)
- , child = $cont.data("layout") // see if a child-layout ALREADY exists on this element
- ;
- // if no layout exists, but children are set, try to create the layout now
- if (!child) {
- // TODO: see about moving this to the stateManagement plugin, as a method
- // set a unique child-instance key for this layout, if not already set
- setInstanceKey({ container: $cont, options: co }, s );
- // If THIS layout has a hash in stateManagement.autoLoad,
- // then see if it also contains state-data for this child-layout
- // If so, copy the stateData to child.options.stateManagement.autoLoad
- if ( sm.includeChildren && state.stateData[pane] ) {
- // THIS layout's state was cached when its state was loaded
- var paneChildren = state.stateData[pane].children || {}
- , childState = paneChildren[ co.instanceKey ]
- , co_sm = co.stateManagement || (co.stateManagement = { autoLoad: true })
- ;
- // COPY the stateData into the autoLoad key
- if ( co_sm.autoLoad === true && childState ) {
- co_sm.autoSave = false; // disable autoSave because saving handled by parent-layout
- co_sm.includeChildren = true; // cascade option - FOR NOW
- co_sm.autoLoad = $.extend(true, {}, childState); // COPY the state-hash
- }
- }
-
- // create the layout
- child = $cont.layout( co );
-
- // if successful, update data
- if (child) {
- // add the child and update all layout-pointers
- // MAY have already been done by child-layout calling parent.refreshChildren()
- refreshChildren( pane, child );
- }
- }
- });
- });
- }
-
-, setInstanceKey = function (child, parentPaneState) {
- // create a named key for use in state and instance branches
- var $c = child.container
- , o = child.options
- , sm = o.stateManagement
- , key = o.instanceKey || $c.data("layoutInstanceKey")
- ;
- if (!key) key = (sm && sm.cookie ? sm.cookie.name : '') || o.name; // look for a name/key
- if (!key) key = "layout"+ (++parentPaneState.childIdx); // if no name/key found, generate one
- else key = key.replace(/[^\w-]/gi, '_').replace(/_{2,}/g, '_'); // ensure is valid as a hash key
- o.instanceKey = key;
- $c.data("layoutInstanceKey", key); // useful if layout is destroyed and then recreated
- return key;
- }
-
- /**
- * @param {string} pane The pane being opened, ie: north, south, east, or west
- * @param {Object=} newChild New child-layout Instance to add to this pane
- */
-, refreshChildren = function (pane, newChild) {
- var $P = $Ps[pane]
- , pC = children[pane]
- , s = state[pane]
- , o
- ;
- // check for destroy()ed layouts and update the child pointers & arrays
- if ($.isPlainObject( pC )) {
- $.each( pC, function (key, child) {
- if (child.destroyed) delete pC[key]
- });
- // if no more children, remove the children hash
- if ($.isEmptyObject( pC ))
- pC = children[pane] = null; // clear children hash
- }
-
- // see if there is a directly-nested layout inside this pane
- // if there is, then there can be only ONE child-layout, so check that...
- if (!newChild && !pC) {
- newChild = $P.data("layout");
- }
-
- // if a newChild instance was passed, add it to children[pane]
- if (newChild) {
- // update child.state
- newChild.hasParentLayout = true; // set parent-flag in child
- // instanceKey is a key-name used in both state and children
- o = newChild.options;
- // set a unique child-instance key for this layout, if not already set
- setInstanceKey( newChild, s );
- // add pointer to pane.children hash
- if (!pC) pC = children[pane] = {}; // create an empty children hash
- pC[ o.instanceKey ] = newChild.container.data("layout"); // add childLayout instance
- }
-
- // ALWAYS refresh the pane.children alias, even if null
- Instance[pane].children = children[pane];
-
- // if newChild was NOT passed - see if there is a child layout NOW
- if (!newChild) {
- createChildren(pane); // MAY create a child and re-call this method
- }
- }
-
-, windowResize = function () {
- var o = options
- , delay = Number(o.resizeWithWindowDelay);
- if (delay < 10) delay = 100; // MUST have a delay!
- // resizing uses a delay-loop because the resize event fires repeatly - except in FF, but delay anyway
- timer.clear("winResize"); // if already running
- timer.set("winResize", function(){
- timer.clear("winResize");
- timer.clear("winResizeRepeater");
- var dims = elDims( $N, o.inset );
- // only trigger resizeAll() if container has changed size
- if (dims.innerWidth !== sC.innerWidth || dims.innerHeight !== sC.innerHeight)
- resizeAll();
- }, delay);
- // ALSO set fixed-delay timer, if not already running
- if (!timer.data["winResizeRepeater"]) setWindowResizeRepeater();
- }
-
-, setWindowResizeRepeater = function () {
- var delay = Number(options.resizeWithWindowMaxDelay);
- if (delay > 0)
- timer.set("winResizeRepeater", function(){ setWindowResizeRepeater(); resizeAll(); }, delay);
- }
-
-, unload = function () {
- var o = options;
-
- _runCallbacks("onunload_start");
-
- // trigger plugin callabacks for this layout (eg: stateManagement)
- runPluginCallbacks( Instance, $.layout.onUnload );
-
- _runCallbacks("onunload_end");
- }
-
- /**
- * Validate and initialize container CSS and events
- *
- * @see _create()
- */
-, _initContainer = function () {
- var
- N = $N[0]
- , $H = $("html")
- , tag = sC.tagName = N.tagName
- , id = sC.id = N.id
- , cls = sC.className = N.className
- , o = options
- , name = o.name
- , props = "position,margin,padding,border"
- , css = "layoutCSS"
- , CSS = {}
- , hid = "hidden" // used A LOT!
- // see if this container is a 'pane' inside an outer-layout
- , parent = $N.data("parentLayout") // parent-layout Instance
- , pane = $N.data("layoutEdge") // pane-name in parent-layout
- , isChild = parent && pane
- , num = $.layout.cssNum
- , $parent, n
- ;
- // sC = state.container
- sC.selector = $N.selector.split(".slice")[0];
- sC.ref = (o.name ? o.name +' layout / ' : '') + tag + (id ? "#"+id : cls ? '.['+cls+']' : ''); // used in messages
- sC.isBody = (tag === "BODY");
-
- // try to find a parent-layout
- if (!isChild && !sC.isBody) {
- $parent = $N.closest("."+ $.layout.defaults.panes.paneClass);
- parent = $parent.data("parentLayout");
- pane = $parent.data("layoutEdge");
- isChild = parent && pane;
- }
-
- $N .data({
- layout: Instance
- , layoutContainer: sID // FLAG to indicate this is a layout-container - contains unique internal ID
- })
- .addClass(o.containerClass)
- ;
- var layoutMethods = {
- destroy: ''
- , initPanes: ''
- , resizeAll: 'resizeAll'
- , resize: 'resizeAll'
- };
- // loop hash and bind all methods - include layoutID namespacing
- for (name in layoutMethods) {
- $N.bind("layout"+ name.toLowerCase() +"."+ sID, Instance[ layoutMethods[name] || name ]);
- }
-
- // if this container is another layout's 'pane', then set child/parent pointers
- if (isChild) {
- // update parent flag
- Instance.hasParentLayout = true;
- // set pointers to THIS child-layout (Instance) in parent-layout
- parent.refreshChildren( pane, Instance );
- }
-
- // SAVE original container CSS for use in destroy()
- if (!$N.data(css)) {
- // handle props like overflow different for BODY & HTML - has 'system default' values
- if (sC.isBody) {
- // SAVE <BODY> CSS
- $N.data(css, $.extend( styles($N, props), {
- height: $N.css("height")
- , overflow: $N.css("overflow")
- , overflowX: $N.css("overflowX")
- , overflowY: $N.css("overflowY")
- }));
- // ALSO SAVE <HTML> CSS
- $H.data(css, $.extend( styles($H, 'padding'), {
- height: "auto" // FF would return a fixed px-size!
- , overflow: $H.css("overflow")
- , overflowX: $H.css("overflowX")
- , overflowY: $H.css("overflowY")
- }));
- }
- else // handle props normally for non-body elements
- $N.data(css, styles($N, props+",top,bottom,left,right,width,height,overflow,overflowX,overflowY") );
- }
-
- try {
- // common container CSS
- CSS = {
- overflow: hid
- , overflowX: hid
- , overflowY: hid
- };
- $N.css( CSS );
-
- if (o.inset && !$.isPlainObject(o.inset)) {
- // can specify a single number for equal outset all-around
- n = parseInt(o.inset, 10) || 0
- o.inset = {
- top: n
- , bottom: n
- , left: n
- , right: n
- };
- }
-
- // format html & body if this is a full page layout
- if (sC.isBody) {
- // if HTML has padding, use this as an outer-spacing around BODY
- if (!o.outset) {
- // use padding from parent-elem (HTML) as outset
- o.outset = {
- top: num($H, "paddingTop")
- , bottom: num($H, "paddingBottom")
- , left: num($H, "paddingLeft")
- , right: num($H, "paddingRight")
- };
- }
- else if (!$.isPlainObject(o.outset)) {
- // can specify a single number for equal outset all-around
- n = parseInt(o.outset, 10) || 0
- o.outset = {
- top: n
- , bottom: n
- , left: n
- , right: n
- };
- }
- // HTML
- $H.css( CSS ).css({
- height: "100%"
- , border: "none" // no border or padding allowed when using height = 100%
- , padding: 0 // ditto
- , margin: 0
- });
- // BODY
- if (browser.isIE6) {
- // IE6 CANNOT use the trick of setting absolute positioning on all 4 sides - must have 'height'
- $N.css({
- width: "100%"
- , height: "100%"
- , border: "none" // no border or padding allowed when using height = 100%
- , padding: 0 // ditto
- , margin: 0
- , position: "relative"
- });
- // convert body padding to an inset option - the border cannot be measured in IE6!
- if (!o.inset) o.inset = elDims( $N ).inset;
- }
- else { // use absolute positioning for BODY to allow borders & padding without overflow
- $N.css({
- width: "auto"
- , height: "auto"
- , margin: 0
- , position: "absolute" // allows for border and padding on BODY
- });
- // apply edge-positioning created above
- $N.css( o.outset );
- }
- // set current layout-container dimensions
- $.extend(sC, elDims( $N, o.inset )); // passing inset means DO NOT include insetX values
- }
- else {
- // container MUST have 'position'
- var p = $N.css("position");
- if (!p || !p.match(/(fixed|absolute|relative)/))
- $N.css("position","relative");
-
- // set current layout-container dimensions
- if ( $N.is(":visible") ) {
- $.extend(sC, elDims( $N, o.inset )); // passing inset means DO NOT change insetX (padding) values
- if (sC.innerHeight < 1) // container has no 'height' - warn developer
- _log( o.errors.noContainerHeight.replace(/CONTAINER/, sC.ref) );
- }
- }
-
- // if container has min-width/height, then enable scrollbar(s)
- if ( num($N, "minWidth") ) $N.parent().css("overflowX","auto");
- if ( num($N, "minHeight") ) $N.parent().css("overflowY","auto");
-
- } catch (ex) {}
- }
-
- /**
- * Bind layout hotkeys - if options enabled
- *
- * @see _create() and addPane()
- * @param {string=} [panes=""] The edge(s) to process
- */
-, initHotkeys = function (panes) {
- panes = panes ? panes.split(",") : _c.borderPanes;
- // bind keyDown to capture hotkeys, if option enabled for ANY pane
- $.each(panes, function (i, pane) {
- var o = options[pane];
- if (o.enableCursorHotkey || o.customHotkey) {
- $(document).bind("keydown."+ sID, keyDown); // only need to bind this ONCE
- return false; // BREAK - binding was done
- }
- });
- }
-
- /**
- * Build final OPTIONS data
- *
- * @see _create()
- */
-, initOptions = function () {
- var data, d, pane, key, val, i, c, o;
-
- // reprocess user's layout-options to have correct options sub-key structure
- opts = $.layout.transformData( opts, true ); // panes = default subkey
-
- // auto-rename old options for backward compatibility
- opts = $.layout.backwardCompatibility.renameAllOptions( opts );
-
- // if user-options has 'panes' key (pane-defaults), clean it...
- if (!$.isEmptyObject(opts.panes)) {
- // REMOVE any pane-defaults that MUST be set per-pane
- data = $.layout.optionsMap.noDefault;
- for (i=0, c=data.length; i<c; i++) {
- key = data[i];
- delete opts.panes[key]; // OK if does not exist
- }
- // REMOVE any layout-options specified under opts.panes
- data = $.layout.optionsMap.layout;
- for (i=0, c=data.length; i<c; i++) {
- key = data[i];
- delete opts.panes[key]; // OK if does not exist
- }
- }
-
- // MOVE any NON-layout-options from opts-root to opts.panes
- data = $.layout.optionsMap.layout;
- var rootKeys = $.layout.config.optionRootKeys;
- for (key in opts) {
- val = opts[key];
- if ($.inArray(key, rootKeys) < 0 && $.inArray(key, data) < 0) {
- if (!opts.panes[key])
- opts.panes[key] = $.isPlainObject(val) ? $.extend(true, {}, val) : val;
- delete opts[key]
- }
- }
-
- // START by updating ALL options from opts
- $.extend(true, options, opts);
-
- // CREATE final options (and config) for EACH pane
- $.each(_c.allPanes, function (i, pane) {
-
- // apply 'pane-defaults' to CONFIG.[PANE]
- _c[pane] = $.extend(true, {}, _c.panes, _c[pane]);
-
- d = options.panes;
- o = options[pane];
-
- // center-pane uses SOME keys in defaults.panes branch
- if (pane === 'center') {
- // ONLY copy keys from opts.panes listed in: $.layout.optionsMap.center
- data = $.layout.optionsMap.center; // list of 'center-pane keys'
- for (i=0, c=data.length; i<c; i++) { // loop the list...
- key = data[i];
- // only need to use pane-default if pane-specific value not set
- if (!opts.center[key] && (opts.panes[key] || !o[key]))
- o[key] = d[key]; // pane-default
- }
- }
- else {
- // border-panes use ALL keys in defaults.panes branch
- o = options[pane] = $.extend(true, {}, d, o); // re-apply pane-specific opts AFTER pane-defaults
- createFxOptions( pane );
- // ensure all border-pane-specific base-classes exist
- if (!o.resizerClass) o.resizerClass = "ui-layout-resizer";
- if (!o.togglerClass) o.togglerClass = "ui-layout-toggler";
- }
- // ensure we have base pane-class (ALL panes)
- if (!o.paneClass) o.paneClass = "ui-layout-pane";
- });
-
- // update options.zIndexes if a zIndex-option specified
- var zo = opts.zIndex
- , z = options.zIndexes;
- if (zo > 0) {
- z.pane_normal = zo;
- z.content_mask = max(zo+1, z.content_mask); // MIN = +1
- z.resizer_normal = max(zo+2, z.resizer_normal); // MIN = +2
- }
-
- // DELETE 'panes' key now that we are done - values were copied to EACH pane
- delete options.panes;
-
-
- function createFxOptions ( pane ) {
- var o = options[pane]
- , d = options.panes;
- // ensure fxSettings key to avoid errors
- if (!o.fxSettings) o.fxSettings = {};
- if (!d.fxSettings) d.fxSettings = {};
-
- $.each(["_open","_close","_size"], function (i,n) {
- var
- sName = "fxName"+ n
- , sSpeed = "fxSpeed"+ n
- , sSettings = "fxSettings"+ n
- // recalculate fxName according to specificity rules
- , fxName = o[sName] =
- o[sName] // options.west.fxName_open
- || d[sName] // options.panes.fxName_open
- || o.fxName // options.west.fxName
- || d.fxName // options.panes.fxName
- || "none" // MEANS $.layout.defaults.panes.fxName == "" || false || null || 0
- , fxExists = $.effects && ($.effects[fxName] || ($.effects.effect && $.effects.effect[fxName]))
- ;
- // validate fxName to ensure is valid effect - MUST have effect-config data in options.effects
- if (fxName === "none" || !options.effects[fxName] || !fxExists)
- fxName = o[sName] = "none"; // effect not loaded OR unrecognized fxName
-
- // set vars for effects subkeys to simplify logic
- var fx = options.effects[fxName] || {} // effects.slide
- , fx_all = fx.all || null // effects.slide.all
- , fx_pane = fx[pane] || null // effects.slide.west
- ;
- // create fxSpeed[_open|_close|_size]
- o[sSpeed] =
- o[sSpeed] // options.west.fxSpeed_open
- || d[sSpeed] // options.west.fxSpeed_open
- || o.fxSpeed // options.west.fxSpeed
- || d.fxSpeed // options.panes.fxSpeed
- || null // DEFAULT - let fxSetting.duration control speed
- ;
- // create fxSettings[_open|_close|_size]
- o[sSettings] = $.extend(
- true
- , {}
- , fx_all // effects.slide.all
- , fx_pane // effects.slide.west
- , d.fxSettings // options.panes.fxSettings
- , o.fxSettings // options.west.fxSettings
- , d[sSettings] // options.panes.fxSettings_open
- , o[sSettings] // options.west.fxSettings_open
- );
- });
-
- // DONE creating action-specific-settings for this pane,
- // so DELETE generic options - are no longer meaningful
- delete o.fxName;
- delete o.fxSpeed;
- delete o.fxSettings;
- }
- }
-
- /**
- * Initialize module objects, styling, size and position for all panes
- *
- * @see _initElements()
- * @param {string} pane The pane to process
- */
-, getPane = function (pane) {
- var sel = options[pane].paneSelector
- if (sel.substr(0,1)==="#") // ID selector
- // NOTE: elements selected 'by ID' DO NOT have to be 'children'
- return $N.find(sel).eq(0);
- else { // class or other selector
- var $P = $N.children(sel).eq(0);
- // look for the pane nested inside a 'form' element
- return $P.length ? $P : $N.children("form:first").children(sel).eq(0);
- }
- }
-
- /**
- * @param {Object=} evt
- */
-, initPanes = function (evt) {
- // stopPropagation if called by trigger("layoutinitpanes") - use evtPane utility
- evtPane(evt);
-
- // NOTE: do north & south FIRST so we can measure their height - do center LAST
- $.each(_c.allPanes, function (idx, pane) {
- addPane( pane, true );
- });
-
- // init the pane-handles NOW in case we have to hide or close the pane below
- initHandles();
-
- // now that all panes have been initialized and initially-sized,
- // make sure there is really enough space available for each pane
- $.each(_c.borderPanes, function (i, pane) {
- if ($Ps[pane] && state[pane].isVisible) { // pane is OPEN
- setSizeLimits(pane);
- makePaneFit(pane); // pane may be Closed, Hidden or Resized by makePaneFit()
- }
- });
- // size center-pane AGAIN in case we 'closed' a border-pane in loop above
- sizeMidPanes("center");
-
- // Chrome/Webkit sometimes fires callbacks BEFORE it completes resizing!
- // Before RC30.3, there was a 10ms delay here, but that caused layout
- // to load asynchrously, which is BAD, so try skipping delay for now
-
- // process pane contents and callbacks, and init/resize child-layout if exists
- $.each(_c.allPanes, function (idx, pane) {
- afterInitPane(pane);
- });
- }
-
- /**
- * Add a pane to the layout - subroutine of initPanes()
- *
- * @see initPanes()
- * @param {string} pane The pane to process
- * @param {boolean=} [force=false] Size content after init
- */
-, addPane = function (pane, force) {
- if ( !force && !isInitialized() ) return;
- var
- o = options[pane]
- , s = state[pane]
- , c = _c[pane]
- , dir = c.dir
- , fx = s.fx
- , spacing = o.spacing_open || 0
- , isCenter = (pane === "center")
- , CSS = {}
- , $P = $Ps[pane]
- , size, minSize, maxSize, child
- ;
- // if pane-pointer already exists, remove the old one first
- if ($P)
- removePane( pane, false, true, false );
- else
- $Cs[pane] = false; // init
-
- $P = $Ps[pane] = getPane(pane);
- if (!$P.length) {
- $Ps[pane] = false; // logic
- return;
- }
-
- // SAVE original Pane CSS
- if (!$P.data("layoutCSS")) {
- var props = "position,top,left,bottom,right,width,height,overflow,zIndex,display,backgroundColor,padding,margin,border";
- $P.data("layoutCSS", styles($P, props));
- }
-
- // create alias for pane data in Instance - initHandles will add more
- Instance[pane] = {
- name: pane
- , pane: $Ps[pane]
- , content: $Cs[pane]
- , options: options[pane]
- , state: state[pane]
- , children: children[pane]
- };
-
- // add classes, attributes & events
- $P .data({
- parentLayout: Instance // pointer to Layout Instance
- , layoutPane: Instance[pane] // NEW pointer to pane-alias-object
- , layoutEdge: pane
- , layoutRole: "pane"
- })
- .css(c.cssReq).css("zIndex", options.zIndexes.pane_normal)
- .css(o.applyDemoStyles ? c.cssDemo : {}) // demo styles
- .addClass( o.paneClass +" "+ o.paneClass+"-"+pane ) // default = "ui-layout-pane ui-layout-pane-west" - may be a dupe of 'paneSelector'
- .bind("mouseenter."+ sID, addHover )
- .bind("mouseleave."+ sID, removeHover )
- ;
- var paneMethods = {
- hide: ''
- , show: ''
- , toggle: ''
- , close: ''
- , open: ''
- , slideOpen: ''
- , slideClose: ''
- , slideToggle: ''
- , size: 'sizePane'
- , sizePane: 'sizePane'
- , sizeContent: ''
- , sizeHandles: ''
- , enableClosable: ''
- , disableClosable: ''
- , enableSlideable: ''
- , disableSlideable: ''
- , enableResizable: ''
- , disableResizable: ''
- , swapPanes: 'swapPanes'
- , swap: 'swapPanes'
- , move: 'swapPanes'
- , removePane: 'removePane'
- , remove: 'removePane'
- , createChildren: ''
- , resizeChildren: ''
- , resizeAll: 'resizeAll'
- , resizeLayout: 'resizeAll'
- }
- , name;
- // loop hash and bind all methods - include layoutID namespacing
- for (name in paneMethods) {
- $P.bind("layoutpane"+ name.toLowerCase() +"."+ sID, Instance[ paneMethods[name] || name ]);
- }
-
- // see if this pane has a 'scrolling-content element'
- initContent(pane, false); // false = do NOT sizeContent() - called later
-
- if (!isCenter) {
- // call _parseSize AFTER applying pane classes & styles - but before making visible (if hidden)
- // if o.size is auto or not valid, then MEASURE the pane and use that as its 'size'
- size = s.size = _parseSize(pane, o.size);
- minSize = _parseSize(pane,o.minSize) || 1;
- maxSize = _parseSize(pane,o.maxSize) || 100000;
- if (size > 0) size = max(min(size, maxSize), minSize);
- s.autoResize = o.autoResize; // used with percentage sizes
-
- // state for border-panes
- s.isClosed = false; // true = pane is closed
- s.isSliding = false; // true = pane is currently open by 'sliding' over adjacent panes
- s.isResizing= false; // true = pane is in process of being resized
- s.isHidden = false; // true = pane is hidden - no spacing, resizer or toggler is visible!
-
- // array for 'pin buttons' whose classNames are auto-updated on pane-open/-close
- if (!s.pins) s.pins = [];
- }
- // states common to ALL panes
- s.tagName = $P[0].tagName;
- s.edge = pane; // useful if pane is (or about to be) 'swapped' - easy find out where it is (or is going)
- s.noRoom = false; // true = pane 'automatically' hidden due to insufficient room - will unhide automatically
- s.isVisible = true; // false = pane is invisible - closed OR hidden - simplify logic
-
- // init pane positioning
- setPanePosition( pane );
-
- // if pane is not visible,
- if (dir === "horz") // north or south pane
- CSS.height = cssH($P, size);
- else if (dir === "vert") // east or west pane
- CSS.width = cssW($P, size);
- //else if (isCenter) {}
-
- $P.css(CSS); // apply size -- top, bottom & height will be set by sizeMidPanes
- if (dir != "horz") sizeMidPanes(pane, true); // true = skipCallback
-
- // if manually adding a pane AFTER layout initialization, then...
- if (state.initialized) {
- initHandles( pane );
- initHotkeys( pane );
- }
-
- // close or hide the pane if specified in settings
- if (o.initClosed && o.closable && !o.initHidden)
- close(pane, true, true); // true, true = force, noAnimation
- else if (o.initHidden || o.initClosed)
- hide(pane); // will be completely invisible - no resizer or spacing
- else if (!s.noRoom)
- // make the pane visible - in case was initially hidden
- $P.css("display","block");
- // ELSE setAsOpen() - called later by initHandles()
-
- // RESET visibility now - pane will appear IF display:block
- $P.css("visibility","visible");
-
- // check option for auto-handling of pop-ups & drop-downs
- if (o.showOverflowOnHover)
- $P.hover( allowOverflow, resetOverflow );
-
- // if manually adding a pane AFTER layout initialization, then...
- if (state.initialized) {
- afterInitPane( pane );
- }
- }
-
-, afterInitPane = function (pane) {
- var $P = $Ps[pane]
- , s = state[pane]
- , o = options[pane]
- ;
- if (!$P) return;
-
- // see if there is a directly-nested layout inside this pane
- if ($P.data("layout"))
- refreshChildren( pane, $P.data("layout") );
-
- // process pane contents and callbacks, and init/resize child-layout if exists
- if (s.isVisible) { // pane is OPEN
- if (state.initialized) // this pane was added AFTER layout was created
- resizeAll(); // will also sizeContent
- else
- sizeContent(pane);
-
- if (o.triggerEventsOnLoad)
- _runCallbacks("onresize_end", pane);
- else // automatic if onresize called, otherwise call it specifically
- // resize child - IF inner-layout already exists (created before this layout)
- resizeChildren(pane, true); // a previously existing childLayout
- }
-
- // init childLayouts - even if pane is not visible
- if (o.initChildren && o.children)
- createChildren(pane);
- }
-
- /**
- * @param {string=} panes The pane(s) to process
- */
-, setPanePosition = function (panes) {
- panes = panes ? panes.split(",") : _c.borderPanes;
-
- // create toggler DIVs for each pane, and set object pointers for them, eg: $R.north = north toggler DIV
- $.each(panes, function (i, pane) {
- var $P = $Ps[pane]
- , $R = $Rs[pane]
- , o = options[pane]
- , s = state[pane]
- , side = _c[pane].side
- , CSS = {}
- ;
- if (!$P) return; // pane does not exist - skip
-
- // set css-position to account for container borders & padding
- switch (pane) {
- case "north": CSS.top = sC.inset.top;
- CSS.left = sC.inset.left;
- CSS.right = sC.inset.right;
- break;
- case "south": CSS.bottom = sC.inset.bottom;
- CSS.left = sC.inset.left;
- CSS.right = sC.inset.right;
- break;
- case "west": CSS.left = sC.inset.left; // top, bottom & height set by sizeMidPanes()
- break;
- case "east": CSS.right = sC.inset.right; // ditto
- break;
- case "center": // top, left, width & height set by sizeMidPanes()
- }
- // apply position
- $P.css(CSS);
-
- // update resizer position
- if ($R && s.isClosed)
- $R.css(side, sC.inset[side]);
- else if ($R && !s.isHidden)
- $R.css(side, sC.inset[side] + getPaneSize(pane));
- });
- }
-
- /**
- * Initialize module objects, styling, size and position for all resize bars and toggler buttons
- *
- * @see _create()
- * @param {string=} [panes=""] The edge(s) to process
- */
-, initHandles = function (panes) {
- panes = panes ? panes.split(",") : _c.borderPanes;
-
- // create toggler DIVs for each pane, and set object pointers for them, eg: $R.north = north toggler DIV
- $.each(panes, function (i, pane) {
- var $P = $Ps[pane];
- $Rs[pane] = false; // INIT
- $Ts[pane] = false;
- if (!$P) return; // pane does not exist - skip
-
- var o = options[pane]
- , s = state[pane]
- , c = _c[pane]
- , paneId = o.paneSelector.substr(0,1) === "#" ? o.paneSelector.substr(1) : ""
- , rClass = o.resizerClass
- , tClass = o.togglerClass
- , spacing = (s.isVisible ? o.spacing_open : o.spacing_closed)
- , _pane = "-"+ pane // used for classNames
- , _state = (s.isVisible ? "-open" : "-closed") // used for classNames
- , I = Instance[pane]
- // INIT RESIZER BAR
- , $R = I.resizer = $Rs[pane] = $("<div></div>")
- // INIT TOGGLER BUTTON
- , $T = I.toggler = (o.closable ? $Ts[pane] = $("<div></div>") : false)
- ;
-
- //if (s.isVisible && o.resizable) ... handled by initResizable
- if (!s.isVisible && o.slidable)
- $R.attr("title", o.tips.Slide).css("cursor", o.sliderCursor);
-
- $R // if paneSelector is an ID, then create a matching ID for the resizer, eg: "#paneLeft" => "paneLeft-resizer"
- .attr("id", paneId ? paneId +"-resizer" : "" )
- .data({
- parentLayout: Instance
- , layoutPane: Instance[pane] // NEW pointer to pane-alias-object
- , layoutEdge: pane
- , layoutRole: "resizer"
- })
- .css(_c.resizers.cssReq).css("zIndex", options.zIndexes.resizer_normal)
- .css(o.applyDemoStyles ? _c.resizers.cssDemo : {}) // add demo styles
- .addClass(rClass +" "+ rClass+_pane)
- .hover(addHover, removeHover) // ALWAYS add hover-classes, even if resizing is not enabled - handle with CSS instead
- .hover(onResizerEnter, onResizerLeave) // ALWAYS NEED resizer.mouseleave to balance toggler.mouseenter
- .mousedown($.layout.disableTextSelection) // prevent text-selection OUTSIDE resizer
- .mouseup($.layout.enableTextSelection) // not really necessary, but just in case
- .appendTo($N) // append DIV to container
- ;
- if ($.fn.disableSelection)
- $R.disableSelection(); // prevent text-selection INSIDE resizer
- if (o.resizerDblClickToggle)
- $R.bind("dblclick."+ sID, toggle );
-
- if ($T) {
- $T // if paneSelector is an ID, then create a matching ID for the resizer, eg: "#paneLeft" => "#paneLeft-toggler"
- .attr("id", paneId ? paneId +"-toggler" : "" )
- .data({
- parentLayout: Instance
- , layoutPane: Instance[pane] // NEW pointer to pane-alias-object
- , layoutEdge: pane
- , layoutRole: "toggler"
- })
- .css(_c.togglers.cssReq) // add base/required styles
- .css(o.applyDemoStyles ? _c.togglers.cssDemo : {}) // add demo styles
- .addClass(tClass +" "+ tClass+_pane)
- .hover(addHover, removeHover) // ALWAYS add hover-classes, even if toggling is not enabled - handle with CSS instead
- .bind("mouseenter", onResizerEnter) // NEED toggler.mouseenter because mouseenter MAY NOT fire on resizer
- .appendTo($R) // append SPAN to resizer DIV
- ;
- // ADD INNER-SPANS TO TOGGLER
- if (o.togglerContent_open) // ui-layout-open
- $("<span>"+ o.togglerContent_open +"</span>")
- .data({
- layoutEdge: pane
- , layoutRole: "togglerContent"
- })
- .data("layoutRole", "togglerContent")
- .data("layoutEdge", pane)
- .addClass("content content-open")
- .css("display","none")
- .appendTo( $T )
- //.hover( addHover, removeHover ) // use ui-layout-toggler-west-hover .content-open instead!
- ;
- if (o.togglerContent_closed) // ui-layout-closed
- $("<span>"+ o.togglerContent_closed +"</span>")
- .data({
- layoutEdge: pane
- , layoutRole: "togglerContent"
- })
- .addClass("content content-closed")
- .css("display","none")
- .appendTo( $T )
- //.hover( addHover, removeHover ) // use ui-layout-toggler-west-hover .content-closed instead!
- ;
- // ADD TOGGLER.click/.hover
- enableClosable(pane);
- }
-
- // add Draggable events
- initResizable(pane);
-
- // ADD CLASSNAMES & SLIDE-BINDINGS - eg: class="resizer resizer-west resizer-open"
- if (s.isVisible)
- setAsOpen(pane); // onOpen will be called, but NOT onResize
- else {
- setAsClosed(pane); // onClose will be called
- bindStartSlidingEvents(pane, true); // will enable events IF option is set
- }
-
- });
-
- // SET ALL HANDLE DIMENSIONS
- sizeHandles();
- }
-
-
- /**
- * Initialize scrolling ui-layout-content div - if exists
- *
- * @see initPane() - or externally after an Ajax injection
- * @param {string} pane The pane to process
- * @param {boolean=} [resize=true] Size content after init
- */
-, initContent = function (pane, resize) {
- if (!isInitialized()) return;
- var
- o = options[pane]
- , sel = o.contentSelector
- , I = Instance[pane]
- , $P = $Ps[pane]
- , $C
- ;
- if (sel) $C = I.content = $Cs[pane] = (o.findNestedContent)
- ? $P.find(sel).eq(0) // match 1-element only
- : $P.children(sel).eq(0)
- ;
- if ($C && $C.length) {
- $C.data("layoutRole", "content");
- // SAVE original Content CSS
- if (!$C.data("layoutCSS"))
- $C.data("layoutCSS", styles($C, "height"));
- $C.css( _c.content.cssReq );
- if (o.applyDemoStyles) {
- $C.css( _c.content.cssDemo ); // add padding & overflow: auto to content-div
- $P.css( _c.content.cssDemoPane ); // REMOVE padding/scrolling from pane
- }
- // ensure no vertical scrollbar on pane - will mess up measurements
- if ($P.css("overflowX").match(/(scroll|auto)/)) {
- $P.css("overflow", "hidden");
- }
- state[pane].content = {}; // init content state
- if (resize !== false) sizeContent(pane);
- // sizeContent() is called AFTER init of all elements
- }
- else
- I.content = $Cs[pane] = false;
- }
-
-
- /**
- * Add resize-bars to all panes that specify it in options
- * -dependancy: $.fn.resizable - will skip if not found
- *
- * @see _create()
- * @param {string=} [panes=""] The edge(s) to process
- */
-, initResizable = function (panes) {
- var draggingAvailable = $.layout.plugins.draggable
- , side // set in start()
- ;
- panes = panes ? panes.split(",") : _c.borderPanes;
-
- $.each(panes, function (idx, pane) {
- var o = options[pane];
- if (!draggingAvailable || !$Ps[pane] || !o.resizable) {
- o.resizable = false;
- return true; // skip to next
- }
-
- var s = state[pane]
- , z = options.zIndexes
- , c = _c[pane]
- , side = c.dir=="horz" ? "top" : "left"
- , $P = $Ps[pane]
- , $R = $Rs[pane]
- , base = o.resizerClass
- , lastPos = 0 // used when live-resizing
- , r, live // set in start because may change
- // 'drag' classes are applied to the ORIGINAL resizer-bar while dragging is in process
- , resizerClass = base+"-drag" // resizer-drag
- , resizerPaneClass = base+"-"+pane+"-drag" // resizer-north-drag
- // 'helper' class is applied to the CLONED resizer-bar while it is being dragged
- , helperClass = base+"-dragging" // resizer-dragging
- , helperPaneClass = base+"-"+pane+"-dragging" // resizer-north-dragging
- , helperLimitClass = base+"-dragging-limit" // resizer-drag
- , helperPaneLimitClass = base+"-"+pane+"-dragging-limit" // resizer-north-drag
- , helperClassesSet = false // logic var
- ;
-
- if (!s.isClosed)
- $R.attr("title", o.tips.Resize)
- .css("cursor", o.resizerCursor); // n-resize, s-resize, etc
-
- $R.draggable({
- containment: $N[0] // limit resizing to layout container
- , axis: (c.dir=="horz" ? "y" : "x") // limit resizing to horz or vert axis
- , delay: 0
- , distance: 1
- , grid: o.resizingGrid
- // basic format for helper - style it using class: .ui-draggable-dragging
- , helper: "clone"
- , opacity: o.resizerDragOpacity
- , addClasses: false // avoid ui-state-disabled class when disabled
- //, iframeFix: o.draggableIframeFix // TODO: consider using when bug is fixed
- , zIndex: z.resizer_drag
-
- , start: function (e, ui) {
- // REFRESH options & state pointers in case we used swapPanes
- o = options[pane];
- s = state[pane];
- // re-read options
- live = o.livePaneResizing;
-
- // ondrag_start callback - will CANCEL hide if returns false
- // TODO: dragging CANNOT be cancelled like this, so see if there is a way?
- if (false === _runCallbacks("ondrag_start", pane)) return false;
-
- s.isResizing = true; // prevent pane from closing while resizing
- state.paneResizing = pane; // easy to see if ANY pane is resizing
- timer.clear(pane+"_closeSlider"); // just in case already triggered
-
- // SET RESIZER LIMITS - used in drag()
- setSizeLimits(pane); // update pane/resizer state
- r = s.resizerPosition;
- lastPos = ui.position[ side ]
-
- $R.addClass( resizerClass +" "+ resizerPaneClass ); // add drag classes
- helperClassesSet = false; // reset logic var - see drag()
-
- // MASK PANES CONTAINING IFRAMES, APPLETS OR OTHER TROUBLESOME ELEMENTS
- showMasks( pane, { resizing: true });
- }
-
- , drag: function (e, ui) {
- if (!helperClassesSet) { // can only add classes after clone has been added to the DOM
- //$(".ui-draggable-dragging")
- ui.helper
- .addClass( helperClass +" "+ helperPaneClass ) // add helper classes
- .css({ right: "auto", bottom: "auto" }) // fix dir="rtl" issue
- .children().css("visibility","hidden") // hide toggler inside dragged resizer-bar
- ;
- helperClassesSet = true;
- // draggable bug!? RE-SET zIndex to prevent E/W resize-bar showing through N/S pane!
- if (s.isSliding) $Ps[pane].css("zIndex", z.pane_sliding);
- }
- // CONTAIN RESIZER-BAR TO RESIZING LIMITS
- var limit = 0;
- if (ui.position[side] < r.min) {
- ui.position[side] = r.min;
- limit = -1;
- }
- else if (ui.position[side] > r.max) {
- ui.position[side] = r.max;
- limit = 1;
- }
- // ADD/REMOVE dragging-limit CLASS
- if (limit) {
- ui.helper.addClass( helperLimitClass +" "+ helperPaneLimitClass ); // at dragging-limit
- window.defaultStatus = (limit>0 && pane.match(/(north|west)/)) || (limit<0 && pane.match(/(south|east)/)) ? o.tips.maxSizeWarning : o.tips.minSizeWarning;
- }
- else {
- ui.helper.removeClass( helperLimitClass +" "+ helperPaneLimitClass ); // not at dragging-limit
- window.defaultStatus = "";
- }
- // DYNAMICALLY RESIZE PANES IF OPTION ENABLED
- // won't trigger unless resizer has actually moved!
- if (live && Math.abs(ui.position[side] - lastPos) >= o.liveResizingTolerance) {
- lastPos = ui.position[side];
- resizePanes(e, ui, pane)
- }
- }
-
- , stop: function (e, ui) {
- $('body').enableSelection(); // RE-ENABLE TEXT SELECTION
- window.defaultStatus = ""; // clear 'resizing limit' message from statusbar
- $R.removeClass( resizerClass +" "+ resizerPaneClass ); // remove drag classes from Resizer
- s.isResizing = false;
- state.paneResizing = false; // easy to see if ANY pane is resizing
- resizePanes(e, ui, pane, true); // true = resizingDone
- }
-
- });
- });
-
- /**
- * resizePanes
- *
- * Sub-routine called from stop() - and drag() if livePaneResizing
- *
- * @param {!Object} evt
- * @param {!Object} ui
- * @param {string} pane
- * @param {boolean=} [resizingDone=false]
- */
- var resizePanes = function (evt, ui, pane, resizingDone) {
- var dragPos = ui.position
- , c = _c[pane]
- , o = options[pane]
- , s = state[pane]
- , resizerPos
- ;
- switch (pane) {
- case "north": resizerPos = dragPos.top; break;
- case "west": resizerPos = dragPos.left; break;
- case "south": resizerPos = sC.layoutHeight - dragPos.top - o.spacing_open; break;
- case "east": resizerPos = sC.layoutWidth - dragPos.left - o.spacing_open; break;
- };
- // remove container margin from resizer position to get the pane size
- var newSize = resizerPos - sC.inset[c.side];
-
- // Disable OR Resize Mask(s) created in drag.start
- if (!resizingDone) {
- // ensure we meet liveResizingTolerance criteria
- if (Math.abs(newSize - s.size) < o.liveResizingTolerance)
- return; // SKIP resize this time
- // resize the pane
- manualSizePane(pane, newSize, false, true); // true = noAnimation
- sizeMasks(); // resize all visible masks
- }
- else { // resizingDone
- // ondrag_end callback
- if (false !== _runCallbacks("ondrag_end", pane))
- manualSizePane(pane, newSize, false, true); // true = noAnimation
- hideMasks(true); // true = force hiding all masks even if one is 'sliding'
- if (s.isSliding) // RE-SHOW 'object-masks' so objects won't show through sliding pane
- showMasks( pane, { resizing: true });
- }
- };
- }
-
- /**
- * sizeMask
- *
- * Needed to overlay a DIV over an IFRAME-pane because mask CANNOT be *inside* the pane
- * Called when mask created, and during livePaneResizing
- */
-, sizeMask = function () {
- var $M = $(this)
- , pane = $M.data("layoutMask") // eg: "west"
- , s = state[pane]
- ;
- // only masks over an IFRAME-pane need manual resizing
- if (s.tagName == "IFRAME" && s.isVisible) // no need to mask closed/hidden panes
- $M.css({
- top: s.offsetTop
- , left: s.offsetLeft
- , width: s.outerWidth
- , height: s.outerHeight
- });
- /* ALT Method...
- var $P = $Ps[pane];
- $M.css( $P.position() ).css({ width: $P[0].offsetWidth, height: $P[0].offsetHeight });
- */
- }
-, sizeMasks = function () {
- $Ms.each( sizeMask ); // resize all 'visible' masks
- }
-
- /**
- * @param {string} pane The pane being resized, animated or isSliding
- * @param {Object=} [args] (optional) Options: which masks to apply, and to which panes
- */
-, showMasks = function (pane, args) {
- var c = _c[pane]
- , panes = ["center"]
- , z = options.zIndexes
- , a = $.extend({
- objectsOnly: false
- , animation: false
- , resizing: true
- , sliding: state[pane].isSliding
- }, args )
- , o, s
- ;
- if (a.resizing)
- panes.push( pane );
- if (a.sliding)
- panes.push( _c.oppositeEdge[pane] ); // ADD the oppositeEdge-pane
-
- if (c.dir === "horz") {
- panes.push("west");
- panes.push("east");
- }
-
- $.each(panes, function(i,p){
- s = state[p];
- o = options[p];
- if (s.isVisible && ( o.maskObjects || (!a.objectsOnly && o.maskContents) )) {
- getMasks(p).each(function(){
- sizeMask.call(this);
- this.style.zIndex = s.isSliding ? z.pane_sliding+1 : z.pane_normal+1
- this.style.display = "block";
- });
- }
- });
- }
-
- /**
- * @param {boolean=} force Hide masks even if a pane is sliding
- */
-, hideMasks = function (force) {
- // ensure no pane is resizing - could be a timing issue
- if (force || !state.paneResizing) {
- $Ms.hide(); // hide ALL masks
- }
- // if ANY pane is sliding, then DO NOT remove masks from panes with maskObjects enabled
- else if (!force && !$.isEmptyObject( state.panesSliding )) {
- var i = $Ms.length - 1
- , p, $M;
- for (; i >= 0; i--) {
- $M = $Ms.eq(i);
- p = $M.data("layoutMask");
- if (!options[p].maskObjects) {
- $M.hide();
- }
- }
- }
- }
-
- /**
- * @param {string} pane
- */
-, getMasks = function (pane) {
- var $Masks = $([])
- , $M, i = 0, c = $Ms.length
- ;
- for (; i<c; i++) {
- $M = $Ms.eq(i);
- if ($M.data("layoutMask") === pane)
- $Masks = $Masks.add( $M );
- }
- if ($Masks.length)
- return $Masks;
- else
- return createMasks(pane);
- }
-
- /**
- * createMasks
- *
- * Generates both DIV (ALWAYS used) and IFRAME (optional) elements as masks
- * An IFRAME mask is created *under* the DIV when maskObjects=true, because a DIV cannot mask an applet
- *
- * @param {string} pane
- */
-, createMasks = function (pane) {
- var
- $P = $Ps[pane]
- , s = state[pane]
- , o = options[pane]
- , z = options.zIndexes
- , isIframe, el, $M, css, i
- ;
- if (!o.maskContents && !o.maskObjects) return $([]);
- // if o.maskObjects=true, then loop TWICE to create BOTH kinds of mask, else only create a DIV
- for (i=0; i < (o.maskObjects ? 2 : 1); i++) {
- isIframe = o.maskObjects && i==0;
- el = document.createElement( isIframe ? "iframe" : "div" );
- $M = $(el).data("layoutMask", pane); // add data to relate mask to pane
- el.className = "ui-layout-mask ui-layout-mask-"+ pane; // for user styling
- css = el.style;
- // Both DIVs and IFRAMES
- css.background = "#FFF";
- css.position = "absolute";
- css.display = "block";
- if (isIframe) { // IFRAME-only props
- el.src = "about:blank";
- el.frameborder = 0;
- css.border = 0;
- css.opacity = 0;
- css.filter = "Alpha(Opacity='0')";
- //el.allowTransparency = true; - for IE, but breaks masking ability!
- }
- else { // DIV-only props
- css.opacity = 0.001;
- css.filter = "Alpha(Opacity='1')";
- }
- // if pane IS an IFRAME, then must mask the pane itself
- if (s.tagName == "IFRAME") {
- // NOTE sizing done by a subroutine so can be called during live-resizing
- css.zIndex = z.pane_normal+1; // 1-higher than pane
- $N.append( el ); // append to LAYOUT CONTAINER
- }
- // otherwise put masks *inside the pane* to mask its contents
- else {
- $M.addClass("ui-layout-mask-inside-pane");
- css.zIndex = o.maskZindex || z.content_mask; // usually 1, but customizable
- css.top = 0;
- css.left = 0;
- css.width = "100%";
- css.height = "100%";
- $P.append( el ); // append INSIDE pane element
- }
- // add Mask to cached array so can be resized & reused
- $Ms = $Ms.add( el );
- }
- return $Ms;
- }
-
-
- /**
- * Destroy this layout and reset all elements
- *
- * @param {boolean=} [destroyChildren=false] Destory Child-Layouts first?
- */
-, destroy = function (evt_or_destroyChildren, destroyChildren) {
- // UNBIND layout events and remove global object
- $(window).unbind("."+ sID); // resize & unload
- $(document).unbind("."+ sID); // keyDown (hotkeys)
-
- if (typeof evt_or_destroyChildren === "object")
- // stopPropagation if called by trigger("layoutdestroy") - use evtPane utility
- evtPane(evt_or_destroyChildren);
- else // no event, so transfer 1st param to destroyChildren param
- destroyChildren = evt_or_destroyChildren;
-
- // need to look for parent layout BEFORE we remove the container data, else skips a level
- //var parentPane = Instance.hasParentLayout ? $.layout.getParentPaneInstance( $N ) : null;
-
- // reset layout-container
- $N .clearQueue()
- .removeData("layout")
- .removeData("layoutContainer")
- .removeClass(options.containerClass)
- .unbind("."+ sID) // remove ALL Layout events
- ;
-
- // remove all mask elements that have been created
- $Ms.remove();
-
- // loop all panes to remove layout classes, attributes and bindings
- $.each(_c.allPanes, function (i, pane) {
- removePane( pane, false, true, destroyChildren ); // true = skipResize
- });
-
- // do NOT reset container CSS if is a 'pane' (or 'content') in an outer-layout - ie, THIS layout is 'nested'
- var css = "layoutCSS";
- if ($N.data(css) && !$N.data("layoutRole")) // RESET CSS
- $N.css( $N.data(css) ).removeData(css);
-
- // for full-page layouts, also reset the <HTML> CSS
- if (sC.tagName === "BODY" && ($N = $("html")).data(css)) // RESET <HTML> CSS
- $N.css( $N.data(css) ).removeData(css);
-
- // trigger plugins for this layout, if there are any
- runPluginCallbacks( Instance, $.layout.onDestroy );
-
- // trigger state-management and onunload callback
- unload();
-
- // clear the Instance of everything except for container & options (so could recreate)
- // RE-CREATE: myLayout = myLayout.container.layout( myLayout.options );
- for (var n in Instance)
- if (!n.match(/^(container|options)$/)) delete Instance[ n ];
- // add a 'destroyed' flag to make it easy to check
- Instance.destroyed = true;
-
- // if this is a child layout, CLEAR the child-pointer in the parent
- /* for now the pointer REMAINS, but with only container, options and destroyed keys
- if (parentPane) {
- var layout = parentPane.pane.data("parentLayout")
- , key = layout.options.instanceKey || 'error';
- // THIS SYNTAX MAY BE WRONG!
- parentPane.children[key] = layout.children[ parentPane.name ].children[key] = null;
- }
- */
-
- return Instance; // for coding convenience
- }
-
- /**
- * Remove a pane from the layout - subroutine of destroy()
- *
- * @see destroy()
- * @param {(string|Object)} evt_or_pane The pane to process
- * @param {boolean=} [remove=false] Remove the DOM element?
- * @param {boolean=} [skipResize=false] Skip calling resizeAll()?
- * @param {boolean=} [destroyChild=true] Destroy Child-layouts? If not passed, obeys options setting
- */
-, removePane = function (evt_or_pane, remove, skipResize, destroyChild) {
- if (!isInitialized()) return;
- var pane = evtPane.call(this, evt_or_pane)
- , $P = $Ps[pane]
- , $C = $Cs[pane]
- , $R = $Rs[pane]
- , $T = $Ts[pane]
- ;
- // NOTE: elements can still exist even after remove()
- // so check for missing data(), which is cleared by removed()
- if ($P && $.isEmptyObject( $P.data() )) $P = false;
- if ($C && $.isEmptyObject( $C.data() )) $C = false;
- if ($R && $.isEmptyObject( $R.data() )) $R = false;
- if ($T && $.isEmptyObject( $T.data() )) $T = false;
-
- if ($P) $P.stop(true, true);
-
- var o = options[pane]
- , s = state[pane]
- , d = "layout"
- , css = "layoutCSS"
- , pC = children[pane]
- , hasChildren = $.isPlainObject( pC ) && !$.isEmptyObject( pC )
- , destroy = destroyChild !== undefined ? destroyChild : o.destroyChildren
- ;
- // FIRST destroy the child-layout(s)
- if (hasChildren && destroy) {
- $.each( pC, function (key, child) {
- if (!child.destroyed)
- child.destroy(true);// tell child-layout to destroy ALL its child-layouts too
- if (child.destroyed) // destroy was successful
- delete pC[key];
- });
- // if no more children, remove the children hash
- if ($.isEmptyObject( pC )) {
- pC = children[pane] = null; // clear children hash
- hasChildren = false;
- }
- }
-
- // Note: can't 'remove' a pane element with non-destroyed children
- if ($P && remove && !hasChildren)
- $P.remove(); // remove the pane-element and everything inside it
- else if ($P && $P[0]) {
- // create list of ALL pane-classes that need to be removed
- var root = o.paneClass // default="ui-layout-pane"
- , pRoot = root +"-"+ pane // eg: "ui-layout-pane-west"
- , _open = "-open"
- , _sliding= "-sliding"
- , _closed = "-closed"
- , classes = [ root, root+_open, root+_closed, root+_sliding, // generic classes
- pRoot, pRoot+_open, pRoot+_closed, pRoot+_sliding ] // pane-specific classes
- ;
- $.merge(classes, getHoverClasses($P, true)); // ADD hover-classes
- // remove all Layout classes from pane-element
- $P .removeClass( classes.join(" ") ) // remove ALL pane-classes
- .removeData("parentLayout")
- .removeData("layoutPane")
- .removeData("layoutRole")
- .removeData("layoutEdge")
- .removeData("autoHidden") // in case set
- .unbind("."+ sID) // remove ALL Layout events
- // TODO: remove these extra unbind commands when jQuery is fixed
- //.unbind("mouseenter"+ sID)
- //.unbind("mouseleave"+ sID)
- ;
- // do NOT reset CSS if this pane/content is STILL the container of a nested layout!
- // the nested layout will reset its 'container' CSS when/if it is destroyed
- if (hasChildren && $C) {
- // a content-div may not have a specific width, so give it one to contain the Layout
- $C.width( $C.width() );
- $.each( pC, function (key, child) {
- child.resizeAll(); // resize the Layout
- });
- }
- else if ($C)
- $C.css( $C.data(css) ).removeData(css).removeData("layoutRole");
- // remove pane AFTER content in case there was a nested layout
- if (!$P.data(d))
- $P.css( $P.data(css) ).removeData(css);
- }
-
- // REMOVE pane resizer and toggler elements
- if ($T) $T.remove();
- if ($R) $R.remove();
-
- // CLEAR all pointers and state data
- Instance[pane] = $Ps[pane] = $Cs[pane] = $Rs[pane] = $Ts[pane] = false;
- s = { removed: true };
-
- if (!skipResize)
- resizeAll();
- }
-
-
-/*
- * ###########################
- * ACTION METHODS
- * ###########################
- */
-
- /**
- * @param {string} pane
- */
-, _hidePane = function (pane) {
- var $P = $Ps[pane]
- , o = options[pane]
- , s = $P[0].style
- ;
- if (o.useOffscreenClose) {
- if (!$P.data(_c.offscreenReset))
- $P.data(_c.offscreenReset, { left: s.left, right: s.right });
- $P.css( _c.offscreenCSS );
- }
- else
- $P.hide().removeData(_c.offscreenReset);
- }
-
- /**
- * @param {string} pane
- */
-, _showPane = function (pane) {
- var $P = $Ps[pane]
- , o = options[pane]
- , off = _c.offscreenCSS
- , old = $P.data(_c.offscreenReset)
- , s = $P[0].style
- ;
- $P .show() // ALWAYS show, just in case
- .removeData(_c.offscreenReset);
- if (o.useOffscreenClose && old) {
- if (s.left == off.left)
- s.left = old.left;
- if (s.right == off.right)
- s.right = old.right;
- }
- }
-
-
- /**
- * Completely 'hides' a pane, including its spacing - as if it does not exist
- * The pane is not actually 'removed' from the source, so can use 'show' to un-hide it
- *
- * @param {(string|Object)} evt_or_pane The pane being hidden, ie: north, south, east, or west
- * @param {boolean=} [noAnimation=false]
- */
-, hide = function (evt_or_pane, noAnimation) {
- if (!isInitialized()) return;
- var pane = evtPane.call(this, evt_or_pane)
- , o = options[pane]
- , s = state[pane]
- , $P = $Ps[pane]
- , $R = $Rs[pane]
- ;
- if (pane === "center" || !$P || s.isHidden) return; // pane does not exist OR is already hidden
-
- // onhide_start callback - will CANCEL hide if returns false
- if (state.initialized && false === _runCallbacks("onhide_start", pane)) return;
-
- s.isSliding = false; // just in case
- delete state.panesSliding[pane];
-
- // now hide the elements
- if ($R) $R.hide(); // hide resizer-bar
- if (!state.initialized || s.isClosed) {
- s.isClosed = true; // to trigger open-animation on show()
- s.isHidden = true;
- s.isVisible = false;
- if (!state.initialized)
- _hidePane(pane); // no animation when loading page
- sizeMidPanes(_c[pane].dir === "horz" ? "" : "center");
- if (state.initialized || o.triggerEventsOnLoad)
- _runCallbacks("onhide_end", pane);
- }
- else {
- s.isHiding = true; // used by onclose
- close(pane, false, noAnimation); // adjust all panes to fit
- }
- }
-
- /**
- * Show a hidden pane - show as 'closed' by default unless openPane = true
- *
- * @param {(string|Object)} evt_or_pane The pane being opened, ie: north, south, east, or west
- * @param {boolean=} [openPane=false]
- * @param {boolean=} [noAnimation=false]
- * @param {boolean=} [noAlert=false]
- */
-, show = function (evt_or_pane, openPane, noAnimation, noAlert) {
- if (!isInitialized()) return;
- var pane = evtPane.call(this, evt_or_pane)
- , o = options[pane]
- , s = state[pane]
- , $P = $Ps[pane]
- , $R = $Rs[pane]
- ;
- if (pane === "center" || !$P || !s.isHidden) return; // pane does not exist OR is not hidden
-
- // onshow_start callback - will CANCEL show if returns false
- if (false === _runCallbacks("onshow_start", pane)) return;
-
- s.isShowing = true; // used by onopen/onclose
- //s.isHidden = false; - will be set by open/close - if not cancelled
- s.isSliding = false; // just in case
- delete state.panesSliding[pane];
-
- // now show the elements
- //if ($R) $R.show(); - will be shown by open/close
- if (openPane === false)
- close(pane, true); // true = force
- else
- open(pane, false, noAnimation, noAlert); // adjust all panes to fit
- }
-
-
- /**
- * Toggles a pane open/closed by calling either open or close
- *
- * @param {(string|Object)} evt_or_pane The pane being toggled, ie: north, south, east, or west
- * @param {boolean=} [slide=false]
- */
-, toggle = function (evt_or_pane, slide) {
- if (!isInitialized()) return;
- var evt = evtObj(evt_or_pane)
- , pane = evtPane.call(this, evt_or_pane)
- , s = state[pane]
- ;
- if (evt) // called from to $R.dblclick OR triggerPaneEvent
- evt.stopImmediatePropagation();
- if (s.isHidden)
- show(pane); // will call 'open' after unhiding it
- else if (s.isClosed)
- open(pane, !!slide);
- else
- close(pane);
- }
-
-
- /**
- * Utility method used during init or other auto-processes
- *
- * @param {string} pane The pane being closed
- * @param {boolean=} [setHandles=false]
- */
-, _closePane = function (pane, setHandles) {
- var
- $P = $Ps[pane]
- , s = state[pane]
- ;
- _hidePane(pane);
- s.isClosed = true;
- s.isVisible = false;
- if (setHandles) setAsClosed(pane);
- }
-
- /**
- * Close the specified pane (animation optional), and resize all other panes as needed
- *
- * @param {(string|Object)} evt_or_pane The pane being closed, ie: north, south, east, or west
- * @param {boolean=} [force=false]
- * @param {boolean=} [noAnimation=false]
- * @param {boolean=} [skipCallback=false]
- */
-, close = function (evt_or_pane, force, noAnimation, skipCallback) {
- var pane = evtPane.call(this, evt_or_pane);
- if (pane === "center") return; // validate
- // if pane has been initialized, but NOT the complete layout, close pane instantly
- if (!state.initialized && $Ps[pane]) {
- _closePane(pane, true); // INIT pane as closed
- return;
- }
- if (!isInitialized()) return;
-
- var
- $P = $Ps[pane]
- , $R = $Rs[pane]
- , $T = $Ts[pane]
- , o = options[pane]
- , s = state[pane]
- , c = _c[pane]
- , doFX, isShowing, isHiding, wasSliding;
-
- // QUEUE in case another action/animation is in progress
- $N.queue(function( queueNext ){
-
- if ( !$P
- || (!o.closable && !s.isShowing && !s.isHiding) // invalid request // (!o.resizable && !o.closable) ???
- || (!force && s.isClosed && !s.isShowing) // already closed
- ) return queueNext();
-
- // onclose_start callback - will CANCEL hide if returns false
- // SKIP if just 'showing' a hidden pane as 'closed'
- var abort = !s.isShowing && false === _runCallbacks("onclose_start", pane);
-
- // transfer logic vars to temp vars
- isShowing = s.isShowing;
- isHiding = s.isHiding;
- wasSliding = s.isSliding;
- // now clear the logic vars (REQUIRED before aborting)
- delete s.isShowing;
- delete s.isHiding;
-
- if (abort) return queueNext();
-
- doFX = !noAnimation && !s.isClosed && (o.fxName_close != "none");
- s.isMoving = true;
- s.isClosed = true;
- s.isVisible = false;
- // update isHidden BEFORE sizing panes
- if (isHiding) s.isHidden = true;
- else if (isShowing) s.isHidden = false;
-
- if (s.isSliding) // pane is being closed, so UNBIND trigger events
- bindStopSlidingEvents(pane, false); // will set isSliding=false
- else // resize panes adjacent to this one
- sizeMidPanes(_c[pane].dir === "horz" ? "" : "center", false); // false = NOT skipCallback
-
- // if this pane has a resizer bar, move it NOW - before animation
- setAsClosed(pane);
-
- // CLOSE THE PANE
- if (doFX) { // animate the close
- lockPaneForFX(pane, true); // need to set left/top so animation will work
- $P.hide( o.fxName_close, o.fxSettings_close, o.fxSpeed_close, function () {
- lockPaneForFX(pane, false); // undo
- if (s.isClosed) close_2();
- queueNext();
- });
- }
- else { // hide the pane without animation
- _hidePane(pane);
- close_2();
- queueNext();
- };
- });
-
- // SUBROUTINE
- function close_2 () {
- s.isMoving = false;
- bindStartSlidingEvents(pane, true); // will enable if o.slidable = true
-
- // if opposite-pane was autoClosed, see if it can be autoOpened now
- var altPane = _c.oppositeEdge[pane];
- if (state[ altPane ].noRoom) {
- setSizeLimits( altPane );
- makePaneFit( altPane );
- }
-
- if (!skipCallback && (state.initialized || o.triggerEventsOnLoad)) {
- // onclose callback - UNLESS just 'showing' a hidden pane as 'closed'
- if (!isShowing) _runCallbacks("onclose_end", pane);
- // onhide OR onshow callback
- if (isShowing) _runCallbacks("onshow_end", pane);
- if (isHiding) _runCallbacks("onhide_end", pane);
- }
- }
- }
-
- /**
- * @param {string} pane The pane just closed, ie: north, south, east, or west
- */
-, setAsClosed = function (pane) {
- if (!$Rs[pane]) return; // handles not initialized yet!
- var
- $P = $Ps[pane]
- , $R = $Rs[pane]
- , $T = $Ts[pane]
- , o = options[pane]
- , s = state[pane]
- , side = _c[pane].side
- , rClass = o.resizerClass
- , tClass = o.togglerClass
- , _pane = "-"+ pane // used for classNames
- , _open = "-open"
- , _sliding= "-sliding"
- , _closed = "-closed"
- ;
- $R
- .css(side, sC.inset[side]) // move the resizer
- .removeClass( rClass+_open +" "+ rClass+_pane+_open )
- .removeClass( rClass+_sliding +" "+ rClass+_pane+_sliding )
- .addClass( rClass+_closed +" "+ rClass+_pane+_closed )
- ;
- // handle already-hidden panes in case called by swap() or a similar method
- if (s.isHidden) $R.hide(); // hide resizer-bar
-
- // DISABLE 'resizing' when closed - do this BEFORE bindStartSlidingEvents?
- if (o.resizable && $.layout.plugins.draggable)
- $R
- .draggable("disable")
- .removeClass("ui-state-disabled") // do NOT apply disabled styling - not suitable here
- .css("cursor", "default")
- .attr("title","")
- ;
-
- // if pane has a toggler button, adjust that too
- if ($T) {
- $T
- .removeClass( tClass+_open +" "+ tClass+_pane+_open )
- .addClass( tClass+_closed +" "+ tClass+_pane+_closed )
- .attr("title", o.tips.Open) // may be blank
- ;
- // toggler-content - if exists
- $T.children(".content-open").hide();
- $T.children(".content-closed").css("display","block");
- }
-
- // sync any 'pin buttons'
- syncPinBtns(pane, false);
-
- if (state.initialized) {
- // resize 'length' and position togglers for adjacent panes
- sizeHandles();
- }
- }
-
- /**
- * Open the specified pane (animation optional), and resize all other panes as needed
- *
- * @param {(string|Object)} evt_or_pane The pane being opened, ie: north, south, east, or west
- * @param {boolean=} [slide=false]
- * @param {boolean=} [noAnimation=false]
- * @param {boolean=} [noAlert=false]
- */
-, open = function (evt_or_pane, slide, noAnimation, noAlert) {
- if (!isInitialized()) return;
- var pane = evtPane.call(this, evt_or_pane)
- , $P = $Ps[pane]
- , $R = $Rs[pane]
- , $T = $Ts[pane]
- , o = options[pane]
- , s = state[pane]
- , c = _c[pane]
- , doFX, isShowing
- ;
- if (pane === "center") return; // validate
- // QUEUE in case another action/animation is in progress
- $N.queue(function( queueNext ){
-
- if ( !$P
- || (!o.resizable && !o.closable && !s.isShowing) // invalid request
- || (s.isVisible && !s.isSliding) // already open
- ) return queueNext();
-
- // pane can ALSO be unhidden by just calling show(), so handle this scenario
- if (s.isHidden && !s.isShowing) {
- queueNext(); // call before show() because it needs the queue free
- show(pane, true);
- return;
- }
-
- if (s.autoResize && s.size != o.size) // resize pane to original size set in options
- sizePane(pane, o.size, true, true, true); // true=skipCallback/noAnimation/forceResize
- else
- // make sure there is enough space available to open the pane
- setSizeLimits(pane, slide);
-
- // onopen_start callback - will CANCEL open if returns false
- var cbReturn = _runCallbacks("onopen_start", pane);
-
- if (cbReturn === "abort")
- return queueNext();
-
- // update pane-state again in case options were changed in onopen_start
- if (cbReturn !== "NC") // NC = "No Callback"
- setSizeLimits(pane, slide);
-
- if (s.minSize > s.maxSize) { // INSUFFICIENT ROOM FOR PANE TO OPEN!
- syncPinBtns(pane, false); // make sure pin-buttons are reset
- if (!noAlert && o.tips.noRoomToOpen)
- alert(o.tips.noRoomToOpen);
- return queueNext(); // ABORT
- }
-
- if (slide) // START Sliding - will set isSliding=true
- bindStopSlidingEvents(pane, true); // BIND trigger events to close sliding-pane
- else if (s.isSliding) // PIN PANE (stop sliding) - open pane 'normally' instead
- bindStopSlidingEvents(pane, false); // UNBIND trigger events - will set isSliding=false
- else if (o.slidable)
- bindStartSlidingEvents(pane, false); // UNBIND trigger events
-
- s.noRoom = false; // will be reset by makePaneFit if 'noRoom'
- makePaneFit(pane);
-
- // transfer logic var to temp var
- isShowing = s.isShowing;
- // now clear the logic var
- delete s.isShowing;
-
- doFX = !noAnimation && s.isClosed && (o.fxName_open != "none");
- s.isMoving = true;
- s.isVisible = true;
- s.isClosed = false;
- // update isHidden BEFORE sizing panes - WHY??? Old?
- if (isShowing) s.isHidden = false;
-
- if (doFX) { // ANIMATE
- // mask adjacent panes with objects
- lockPaneForFX(pane, true); // need to set left/top so animation will work
- $P.show( o.fxName_open, o.fxSettings_open, o.fxSpeed_open, function() {
- lockPaneForFX(pane, false); // undo
- if (s.isVisible) open_2(); // continue
- queueNext();
- });
- }
- else { // no animation
- _showPane(pane);// just show pane and...
- open_2(); // continue
- queueNext();
- };
- });
-
- // SUBROUTINE
- function open_2 () {
- s.isMoving = false;
-
- // cure iframe display issues
- _fixIframe(pane);
-
- // NOTE: if isSliding, then other panes are NOT 'resized'
- if (!s.isSliding) { // resize all panes adjacent to this one
- sizeMidPanes(_c[pane].dir=="vert" ? "center" : "", false); // false = NOT skipCallback
- }
-
- // set classes, position handles and execute callbacks...
- setAsOpen(pane);
- };
-
- }
-
- /**
- * @param {string} pane The pane just opened, ie: north, south, east, or west
- * @param {boolean=} [skipCallback=false]
- */
-, setAsOpen = function (pane, skipCallback) {
- var
- $P = $Ps[pane]
- , $R = $Rs[pane]
- , $T = $Ts[pane]
- , o = options[pane]
- , s = state[pane]
- , side = _c[pane].side
- , rClass = o.resizerClass
- , tClass = o.togglerClass
- , _pane = "-"+ pane // used for classNames
- , _open = "-open"
- , _closed = "-closed"
- , _sliding= "-sliding"
- ;
- $R
- .css(side, sC.inset[side] + getPaneSize(pane)) // move the resizer
- .removeClass( rClass+_closed +" "+ rClass+_pane+_closed )
- .addClass( rClass+_open +" "+ rClass+_pane+_open )
- ;
- if (s.isSliding)
- $R.addClass( rClass+_sliding +" "+ rClass+_pane+_sliding )
- else // in case 'was sliding'
- $R.removeClass( rClass+_sliding +" "+ rClass+_pane+_sliding )
-
- removeHover( 0, $R ); // remove hover classes
- if (o.resizable && $.layout.plugins.draggable)
- $R .draggable("enable")
- .css("cursor", o.resizerCursor)
- .attr("title", o.tips.Resize);
- else if (!s.isSliding)
- $R.css("cursor", "default"); // n-resize, s-resize, etc
-
- // if pane also has a toggler button, adjust that too
- if ($T) {
- $T .removeClass( tClass+_closed +" "+ tClass+_pane+_closed )
- .addClass( tClass+_open +" "+ tClass+_pane+_open )
- .attr("title", o.tips.Close); // may be blank
- removeHover( 0, $T ); // remove hover classes
- // toggler-content - if exists
- $T.children(".content-closed").hide();
- $T.children(".content-open").css("display","block");
- }
-
- // sync any 'pin buttons'
- syncPinBtns(pane, !s.isSliding);
-
- // update pane-state dimensions - BEFORE resizing content
- $.extend(s, elDims($P));
-
- if (state.initialized) {
- // resize resizer & toggler sizes for all panes
- sizeHandles();
- // resize content every time pane opens - to be sure
- sizeContent(pane, true); // true = remeasure headers/footers, even if 'pane.isMoving'
- }
-
- if (!skipCallback && (state.initialized || o.triggerEventsOnLoad) && $P.is(":visible")) {
- // onopen callback
- _runCallbacks("onopen_end", pane);
- // onshow callback - TODO: should this be here?
- if (s.isShowing) _runCallbacks("onshow_end", pane);
-
- // ALSO call onresize because layout-size *may* have changed while pane was closed
- if (state.initialized)
- _runCallbacks("onresize_end", pane);
- }
-
- // TODO: Somehow sizePane("north") is being called after this point???
- }
-
-
- /**
- * slideOpen / slideClose / slideToggle
- *
- * Pass-though methods for sliding
- */
-, slideOpen = function (evt_or_pane) {
- if (!isInitialized()) return;
- var evt = evtObj(evt_or_pane)
- , pane = evtPane.call(this, evt_or_pane)
- , s = state[pane]
- , delay = options[pane].slideDelay_open
- ;
- if (pane === "center") return; // validate
- // prevent event from triggering on NEW resizer binding created below
- if (evt) evt.stopImmediatePropagation();
-
- if (s.isClosed && evt && evt.type === "mouseenter" && delay > 0)
- // trigger = mouseenter - use a delay
- timer.set(pane+"_openSlider", open_NOW, delay);
- else
- open_NOW(); // will unbind events if is already open
-
- /**
- * SUBROUTINE for timed open
- */
- function open_NOW () {
- if (!s.isClosed) // skip if no longer closed!
- bindStopSlidingEvents(pane, true); // BIND trigger events to close sliding-pane
- else if (!s.isMoving)
- open(pane, true); // true = slide - open() will handle binding
- };
- }
-
-, slideClose = function (evt_or_pane) {
- if (!isInitialized()) return;
- var evt = evtObj(evt_or_pane)
- , pane = evtPane.call(this, evt_or_pane)
- , o = options[pane]
- , s = state[pane]
- , delay = s.isMoving ? 1000 : 300 // MINIMUM delay - option may override
- ;
- if (pane === "center") return; // validate
- if (s.isClosed || s.isResizing)
- return; // skip if already closed OR in process of resizing
- else if (o.slideTrigger_close === "click")
- close_NOW(); // close immediately onClick
- else if (o.preventQuickSlideClose && s.isMoving)
- return; // handle Chrome quick-close on slide-open
- else if (o.preventPrematureSlideClose && evt && $.layout.isMouseOverElem(evt, $Ps[pane]))
- return; // handle incorrect mouseleave trigger, like when over a SELECT-list in IE
- else if (evt) // trigger = mouseleave - use a delay
- // 1 sec delay if 'opening', else .3 sec
- timer.set(pane+"_closeSlider", close_NOW, max(o.slideDelay_close, delay));
- else // called programically
- close_NOW();
-
- /**
- * SUBROUTINE for timed close
- */
- function close_NOW () {
- if (s.isClosed) // skip 'close' if already closed!
- bindStopSlidingEvents(pane, false); // UNBIND trigger events - TODO: is this needed here?
- else if (!s.isMoving)
- close(pane); // close will handle unbinding
- };
- }
-
- /**
- * @param {(string|Object)} evt_or_pane The pane being opened, ie: north, south, east, or west
- */
-, slideToggle = function (evt_or_pane) {
- var pane = evtPane.call(this, evt_or_pane);
- toggle(pane, true);
- }
-
-
- /**
- * Must set left/top on East/South panes so animation will work properly
- *
- * @param {string} pane The pane to lock, 'east' or 'south' - any other is ignored!
- * @param {boolean} doLock true = set left/top, false = remove
- */
-, lockPaneForFX = function (pane, doLock) {
- var $P = $Ps[pane]
- , s = state[pane]
- , o = options[pane]
- , z = options.zIndexes
- ;
- if (doLock) {
- showMasks( pane, { animation: true, objectsOnly: true });
- $P.css({ zIndex: z.pane_animate }); // overlay all elements during animation
- if (pane=="south")
- $P.css({ top: sC.inset.top + sC.innerHeight - $P.outerHeight() });
- else if (pane=="east")
- $P.css({ left: sC.inset.left + sC.innerWidth - $P.outerWidth() });
- }
- else { // animation DONE - RESET CSS
- hideMasks();
- $P.css({ zIndex: (s.isSliding ? z.pane_sliding : z.pane_normal) });
- if (pane=="south")
- $P.css({ top: "auto" });
- // if pane is positioned 'off-screen', then DO NOT screw with it!
- else if (pane=="east" && !$P.css("left").match(/\-99999/))
- $P.css({ left: "auto" });
- // fix anti-aliasing in IE - only needed for animations that change opacity
- if (browser.msie && o.fxOpacityFix && o.fxName_open != "slide" && $P.css("filter") && $P.css("opacity") == 1)
- $P[0].style.removeAttribute('filter');
- }
- }
-
-
- /**
- * Toggle sliding functionality of a specific pane on/off by adding removing 'slide open' trigger
- *
- * @see open(), close()
- * @param {string} pane The pane to enable/disable, 'north', 'south', etc.
- * @param {boolean} enable Enable or Disable sliding?
- */
-, bindStartSlidingEvents = function (pane, enable) {
- var o = options[pane]
- , $P = $Ps[pane]
- , $R = $Rs[pane]
- , evtName = o.slideTrigger_open.toLowerCase()
- ;
- if (!$R || (enable && !o.slidable)) return;
-
- // make sure we have a valid event
- if (evtName.match(/mouseover/))
- evtName = o.slideTrigger_open = "mouseenter";
- else if (!evtName.match(/(click|dblclick|mouseenter)/))
- evtName = o.slideTrigger_open = "click";
-
- // must remove double-click-toggle when using dblclick-slide
- if (o.resizerDblClickToggle && evtName.match(/click/)) {
- $R[enable ? "unbind" : "bind"]('dblclick.'+ sID, toggle)
- }
-
- $R
- // add or remove event
- [enable ? "bind" : "unbind"](evtName +'.'+ sID, slideOpen)
- // set the appropriate cursor & title/tip
- .css("cursor", enable ? o.sliderCursor : "default")
- .attr("title", enable ? o.tips.Slide : "")
- ;
- }
-
- /**
- * Add or remove 'mouseleave' events to 'slide close' when pane is 'sliding' open or closed
- * Also increases zIndex when pane is sliding open
- * See bindStartSlidingEvents for code to control 'slide open'
- *
- * @see slideOpen(), slideClose()
- * @param {string} pane The pane to process, 'north', 'south', etc.
- * @param {boolean} enable Enable or Disable events?
- */
-, bindStopSlidingEvents = function (pane, enable) {
- var o = options[pane]
- , s = state[pane]
- , c = _c[pane]
- , z = options.zIndexes
- , evtName = o.slideTrigger_close.toLowerCase()
- , action = (enable ? "bind" : "unbind")
- , $P = $Ps[pane]
- , $R = $Rs[pane]
- ;
- timer.clear(pane+"_closeSlider"); // just in case
-
- if (enable) {
- s.isSliding = true;
- state.panesSliding[pane] = true;
- // remove 'slideOpen' event from resizer
- // ALSO will raise the zIndex of the pane & resizer
- bindStartSlidingEvents(pane, false);
- }
- else {
- s.isSliding = false;
- delete state.panesSliding[pane];
- }
-
- // RE/SET zIndex - increases when pane is sliding-open, resets to normal when not
- $P.css("zIndex", enable ? z.pane_sliding : z.pane_normal);
- $R.css("zIndex", enable ? z.pane_sliding+2 : z.resizer_normal); // NOTE: mask = pane_sliding+1
-
- // make sure we have a valid event
- if (!evtName.match(/(click|mouseleave)/))
- evtName = o.slideTrigger_close = "mouseleave"; // also catches 'mouseout'
-
- // add/remove slide triggers
- $R[action](evtName, slideClose); // base event on resize
- // need extra events for mouseleave
- if (evtName === "mouseleave") {
- // also close on pane.mouseleave
- $P[action]("mouseleave."+ sID, slideClose);
- // cancel timer when mouse moves between 'pane' and 'resizer'
- $R[action]("mouseenter."+ sID, cancelMouseOut);
- $P[action]("mouseenter."+ sID, cancelMouseOut);
- }
-
- if (!enable)
- timer.clear(pane+"_closeSlider");
- else if (evtName === "click" && !o.resizable) {
- // IF pane is not resizable (which already has a cursor and tip)
- // then set the a cursor & title/tip on resizer when sliding
- $R.css("cursor", enable ? o.sliderCursor : "default");
- $R.attr("title", enable ? o.tips.Close : ""); // use Toggler-tip, eg: "Close Pane"
- }
-
- // SUBROUTINE for mouseleave timer clearing
- function cancelMouseOut (evt) {
- timer.clear(pane+"_closeSlider");
- evt.stopPropagation();
- }
- }
-
-
- /**
- * Hides/closes a pane if there is insufficient room - reverses this when there is room again
- * MUST have already called setSizeLimits() before calling this method
- *
- * @param {string} pane The pane being resized
- * @param {boolean=} [isOpening=false] Called from onOpen?
- * @param {boolean=} [skipCallback=false] Should the onresize callback be run?
- * @param {boolean=} [force=false]
- */
-, makePaneFit = function (pane, isOpening, skipCallback, force) {
- var o = options[pane]
- , s = state[pane]
- , c = _c[pane]
- , $P = $Ps[pane]
- , $R = $Rs[pane]
- , isSidePane = c.dir==="vert"
- , hasRoom = false
- ;
- // special handling for center & east/west panes
- if (pane === "center" || (isSidePane && s.noVerticalRoom)) {
- // see if there is enough room to display the pane
- // ERROR: hasRoom = s.minHeight <= s.maxHeight && (isSidePane || s.minWidth <= s.maxWidth);
- hasRoom = (s.maxHeight >= 0);
- if (hasRoom && s.noRoom) { // previously hidden due to noRoom, so show now
- _showPane(pane);
- if ($R) $R.show();
- s.isVisible = true;
- s.noRoom = false;
- if (isSidePane) s.noVerticalRoom = false;
- _fixIframe(pane);
- }
- else if (!hasRoom && !s.noRoom) { // not currently hidden, so hide now
- _hidePane(pane);
- if ($R) $R.hide();
- s.isVisible = false;
- s.noRoom = true;
- }
- }
-
- // see if there is enough room to fit the border-pane
- if (pane === "center") {
- // ignore center in this block
- }
- else if (s.minSize <= s.maxSize) { // pane CAN fit
- hasRoom = true;
- if (s.size > s.maxSize) // pane is too big - shrink it
- sizePane(pane, s.maxSize, skipCallback, true, force); // true = noAnimation
- else if (s.size < s.minSize) // pane is too small - enlarge it
- sizePane(pane, s.minSize, skipCallback, true, force); // true = noAnimation
- // need s.isVisible because new pseudoClose method keeps pane visible, but off-screen
- else if ($R && s.isVisible && $P.is(":visible")) {
- // make sure resizer-bar is positioned correctly
- // handles situation where nested layout was 'hidden' when initialized
- var pos = s.size + sC.inset[c.side];
- if ($.layout.cssNum( $R, c.side ) != pos) $R.css( c.side, pos );
- }
-
- // if was previously hidden due to noRoom, then RESET because NOW there is room
- if (s.noRoom) {
- // s.noRoom state will be set by open or show
- if (s.wasOpen && o.closable) {
- if (o.autoReopen)
- open(pane, false, true, true); // true = noAnimation, true = noAlert
- else // leave the pane closed, so just update state
- s.noRoom = false;
- }
- else
- show(pane, s.wasOpen, true, true); // true = noAnimation, true = noAlert
- }
- }
- else { // !hasRoom - pane CANNOT fit
- if (!s.noRoom) { // pane not set as noRoom yet, so hide or close it now...
- s.noRoom = true; // update state
- s.wasOpen = !s.isClosed && !s.isSliding;
- if (s.isClosed){} // SKIP
- else if (o.closable) // 'close' if possible
- close(pane, true, true); // true = force, true = noAnimation
- else // 'hide' pane if cannot just be closed
- hide(pane, true); // true = noAnimation
- }
- }
- }
-
-
- /**
- * manualSizePane is an exposed flow-through method allowing extra code when pane is 'manually resized'
- *
- * @param {(string|Object)} evt_or_pane The pane being resized
- * @param {number} size The *desired* new size for this pane - will be validated
- * @param {boolean=} [skipCallback=false] Should the onresize callback be run?
- * @param {boolean=} [noAnimation=false]
- * @param {boolean=} [force=false] Force resizing even if does not seem necessary
- */
-, manualSizePane = function (evt_or_pane, size, skipCallback, noAnimation, force) {
- if (!isInitialized()) return;
- var pane = evtPane.call(this, evt_or_pane)
- , o = options[pane]
- , s = state[pane]
- // if resizing callbacks have been delayed and resizing is now DONE, force resizing to complete...
- , forceResize = force || (o.livePaneResizing && !s.isResizing)
- ;
- if (pane === "center") return; // validate
- // ANY call to manualSizePane disables autoResize - ie, percentage sizing
- s.autoResize = false;
- // flow-through...
- sizePane(pane, size, skipCallback, noAnimation, forceResize); // will animate resize if option enabled
- }
-
- /**
- * sizePane is called only by internal methods whenever a pane needs to be resized
- *
- * @param {(string|Object)} evt_or_pane The pane being resized
- * @param {number} size The *desired* new size for this pane - will be validated
- * @param {boolean=} [skipCallback=false] Should the onresize callback be run?
- * @param {boolean=} [noAnimation=false]
- * @param {boolean=} [force=false] Force resizing even if does not seem necessary
- */
-, sizePane = function (evt_or_pane, size, skipCallback, noAnimation, force) {
- if (!isInitialized()) return;
- var pane = evtPane.call(this, evt_or_pane) // probably NEVER called from event?
- , o = options[pane]
- , s = state[pane]
- , $P = $Ps[pane]
- , $R = $Rs[pane]
- , side = _c[pane].side
- , dimName = _c[pane].sizeType.toLowerCase()
- , skipResizeWhileDragging = s.isResizing && !o.triggerEventsDuringLiveResize
- , doFX = noAnimation !== true && o.animatePaneSizing
- , oldSize, newSize
- ;
- if (pane === "center") return; // validate
- // QUEUE in case another action/animation is in progress
- $N.queue(function( queueNext ){
- // calculate 'current' min/max sizes
- setSizeLimits(pane); // update pane-state
- oldSize = s.size;
- size = _parseSize(pane, size); // handle percentages & auto
- size = max(size, _parseSize(pane, o.minSize));
- size = min(size, s.maxSize);
- if (size < s.minSize) { // not enough room for pane!
- queueNext(); // call before makePaneFit() because it needs the queue free
- makePaneFit(pane, false, skipCallback); // will hide or close pane
- return;
- }
-
- // IF newSize is same as oldSize, then nothing to do - abort
- if (!force && size === oldSize)
- return queueNext();
-
- s.newSize = size;
-
- // onresize_start callback CANNOT cancel resizing because this would break the layout!
- if (!skipCallback && state.initialized && s.isVisible)
- _runCallbacks("onresize_start", pane);
-
- // resize the pane, and make sure its visible
- newSize = cssSize(pane, size);
-
- if (doFX && $P.is(":visible")) { // ANIMATE
- var fx = $.layout.effects.size[pane] || $.layout.effects.size.all
- , easing = o.fxSettings_size.easing || fx.easing
- , z = options.zIndexes
- , props = {};
- props[ dimName ] = newSize +'px';
- s.isMoving = true;
- // overlay all elements during animation
- $P.css({ zIndex: z.pane_animate })
- .show().animate( props, o.fxSpeed_size, easing, function(){
- // reset zIndex after animation
- $P.css({ zIndex: (s.isSliding ? z.pane_sliding : z.pane_normal) });
- s.isMoving = false;
- delete s.newSize;
- sizePane_2(); // continue
- queueNext();
- });
- }
- else { // no animation
- $P.css( dimName, newSize ); // resize pane
- delete s.newSize;
- // if pane is visible, then
- if ($P.is(":visible"))
- sizePane_2(); // continue
- else {
- // pane is NOT VISIBLE, so just update state data...
- // when pane is *next opened*, it will have the new size
- s.size = size; // update state.size
- //$.extend(s, elDims($P)); // update state dimensions - CANNOT do this when not visible! }
- }
- queueNext();
- };
-
- });
-
- // SUBROUTINE
- function sizePane_2 () {
- /* Panes are sometimes not sized precisely in some browsers!?
- * This code will resize the pane up to 3 times to nudge the pane to the correct size
- */
- var actual = dimName==='width' ? $P.outerWidth() : $P.outerHeight()
- , tries = [{
- pane: pane
- , count: 1
- , target: size
- , actual: actual
- , correct: (size === actual)
- , attempt: size
- , cssSize: newSize
- }]
- , lastTry = tries[0]
- , thisTry = {}
- , msg = 'Inaccurate size after resizing the '+ pane +'-pane.'
- ;
- while ( !lastTry.correct ) {
- thisTry = { pane: pane, count: lastTry.count+1, target: size };
-
- if (lastTry.actual > size)
- thisTry.attempt = max(0, lastTry.attempt - (lastTry.actual - size));
- else // lastTry.actual < size
- thisTry.attempt = max(0, lastTry.attempt + (size - lastTry.actual));
-
- thisTry.cssSize = cssSize(pane, thisTry.attempt);
- $P.css( dimName, thisTry.cssSize );
-
- thisTry.actual = dimName=='width' ? $P.outerWidth() : $P.outerHeight();
- thisTry.correct = (size === thisTry.actual);
-
- // log attempts and alert the user of this *non-fatal error* (if showDebugMessages)
- if ( tries.length === 1) {
- _log(msg, false, true);
- _log(lastTry, false, true);
- }
- _log(thisTry, false, true);
- // after 4 tries, is as close as its gonna get!
- if (tries.length > 3) break;
-
- tries.push( thisTry );
- lastTry = tries[ tries.length - 1 ];
- }
- // END TESTING CODE
-
- // update pane-state dimensions
- s.size = size;
- $.extend(s, elDims($P));
-
- if (s.isVisible && $P.is(":visible")) {
- // reposition the resizer-bar
- if ($R) $R.css( side, size + sC.inset[side] );
- // resize the content-div
- sizeContent(pane);
- }
-
- if (!skipCallback && !skipResizeWhileDragging && state.initialized && s.isVisible)
- _runCallbacks("onresize_end", pane);
-
- // resize all the adjacent panes, and adjust their toggler buttons
- // when skipCallback passed, it means the controlling method will handle 'other panes'
- if (!skipCallback) {
- // also no callback if live-resize is in progress and NOT triggerEventsDuringLiveResize
- if (!s.isSliding) sizeMidPanes(_c[pane].dir=="horz" ? "" : "center", skipResizeWhileDragging, force);
- sizeHandles();
- }
-
- // if opposite-pane was autoClosed, see if it can be autoOpened now
- var altPane = _c.oppositeEdge[pane];
- if (size < oldSize && state[ altPane ].noRoom) {
- setSizeLimits( altPane );
- makePaneFit( altPane, false, skipCallback );
- }
-
- // DEBUG - ALERT user/developer so they know there was a sizing problem
- if (tries.length > 1)
- _log(msg +'\nSee the Error Console for details.', true, true);
- }
- }
-
- /**
- * @see initPanes(), sizePane(), resizeAll(), open(), close(), hide()
- * @param {(Array.<string>|string)} panes The pane(s) being resized, comma-delmited string
- * @param {boolean=} [skipCallback=false] Should the onresize callback be run?
- * @param {boolean=} [force=false]
- */
-, sizeMidPanes = function (panes, skipCallback, force) {
- panes = (panes ? panes : "east,west,center").split(",");
-
- $.each(panes, function (i, pane) {
- if (!$Ps[pane]) return; // NO PANE - skip
- var
- o = options[pane]
- , s = state[pane]
- , $P = $Ps[pane]
- , $R = $Rs[pane]
- , isCenter= (pane=="center")
- , hasRoom = true
- , CSS = {}
- // if pane is not visible, show it invisibly NOW rather than for *each call* in this script
- , visCSS = $.layout.showInvisibly($P)
-
- , newCenter = calcNewCenterPaneDims()
- ;
-
- // update pane-state dimensions
- $.extend(s, elDims($P));
-
- if (pane === "center") {
- if (!force && s.isVisible && newCenter.width === s.outerWidth && newCenter.height === s.outerHeight) {
- $P.css(visCSS);
- return true; // SKIP - pane already the correct size
- }
- // set state for makePaneFit() logic
- $.extend(s, cssMinDims(pane), {
- maxWidth: newCenter.width
- , maxHeight: newCenter.height
- });
- CSS = newCenter;
- s.newWidth = CSS.width;
- s.newHeight = CSS.height;
- // convert OUTER width/height to CSS width/height
- CSS.width = cssW($P, CSS.width);
- // NEW - allow pane to extend 'below' visible area rather than hide it
- CSS.height = cssH($P, CSS.height);
- hasRoom = CSS.width >= 0 && CSS.height >= 0; // height >= 0 = ALWAYS TRUE NOW
-
- // during layout init, try to shrink east/west panes to make room for center
- if (!state.initialized && o.minWidth > newCenter.width) {
- var
- reqPx = o.minWidth - s.outerWidth
- , minE = options.east.minSize || 0
- , minW = options.west.minSize || 0
- , sizeE = state.east.size
- , sizeW = state.west.size
- , newE = sizeE
- , newW = sizeW
- ;
- if (reqPx > 0 && state.east.isVisible && sizeE > minE) {
- newE = max( sizeE-minE, sizeE-reqPx );
- reqPx -= sizeE-newE;
- }
- if (reqPx > 0 && state.west.isVisible && sizeW > minW) {
- newW = max( sizeW-minW, sizeW-reqPx );
- reqPx -= sizeW-newW;
- }
- // IF we found enough extra space, then resize the border panes as calculated
- if (reqPx === 0) {
- if (sizeE && sizeE != minE)
- sizePane('east', newE, true, true, force); // true = skipCallback/noAnimation - initPanes will handle when done
- if (sizeW && sizeW != minW)
- sizePane('west', newW, true, true, force); // true = skipCallback/noAnimation
- // now start over!
- sizeMidPanes('center', skipCallback, force);
- $P.css(visCSS);
- return; // abort this loop
- }
- }
- }
- else { // for east and west, set only the height, which is same as center height
- // set state.min/maxWidth/Height for makePaneFit() logic
- if (s.isVisible && !s.noVerticalRoom)
- $.extend(s, elDims($P), cssMinDims(pane))
- if (!force && !s.noVerticalRoom && newCenter.height === s.outerHeight) {
- $P.css(visCSS);
- return true; // SKIP - pane already the correct size
- }
- // east/west have same top, bottom & height as center
- CSS.top = newCenter.top;
- CSS.bottom = newCenter.bottom;
- s.newSize = newCenter.height
- // NEW - allow pane to extend 'below' visible area rather than hide it
- CSS.height = cssH($P, newCenter.height);
- s.maxHeight = CSS.height;
- hasRoom = (s.maxHeight >= 0); // ALWAYS TRUE NOW
- if (!hasRoom) s.noVerticalRoom = true; // makePaneFit() logic
- }
-
- if (hasRoom) {
- // resizeAll passes skipCallback because it triggers callbacks after ALL panes are resized
- if (!skipCallback && state.initialized)
- _runCallbacks("onresize_start", pane);
-
- $P.css(CSS); // apply the CSS to pane
- if (pane !== "center")
- sizeHandles(pane); // also update resizer length
- if (s.noRoom && !s.isClosed && !s.isHidden)
- makePaneFit(pane); // will re-open/show auto-closed/hidden pane
- if (s.isVisible) {
- $.extend(s, elDims($P)); // update pane dimensions
- if (state.initialized) sizeContent(pane); // also resize the contents, if exists
- }
- }
- else if (!s.noRoom && s.isVisible) // no room for pane
- makePaneFit(pane); // will hide or close pane
-
- // reset visibility, if necessary
- $P.css(visCSS);
-
- delete s.newSize;
- delete s.newWidth;
- delete s.newHeight;
-
- if (!s.isVisible)
- return true; // DONE - next pane
-
- /*
- * Extra CSS for IE6 or IE7 in Quirks-mode - add 'width' to NORTH/SOUTH panes
- * Normally these panes have only 'left' & 'right' positions so pane auto-sizes
- * ALSO required when pane is an IFRAME because will NOT default to 'full width'
- * TODO: Can I use width:100% for a north/south iframe?
- * TODO: Sounds like a job for $P.outerWidth( sC.innerWidth ) SETTER METHOD
- */
- if (pane === "center") { // finished processing midPanes
- var fix = browser.isIE6 || !browser.boxModel;
- if ($Ps.north && (fix || state.north.tagName=="IFRAME"))
- $Ps.north.css("width", cssW($Ps.north, sC.innerWidth));
- if ($Ps.south && (fix || state.south.tagName=="IFRAME"))
- $Ps.south.css("width", cssW($Ps.south, sC.innerWidth));
- }
-
- // resizeAll passes skipCallback because it triggers callbacks after ALL panes are resized
- if (!skipCallback && state.initialized)
- _runCallbacks("onresize_end", pane);
- });
- }
-
-
- /**
- * @see window.onresize(), callbacks or custom code
- * @param {(Object|boolean)=} evt_or_refresh If 'true', then also reset pane-positioning
- */
-, resizeAll = function (evt_or_refresh) {
- var oldW = sC.innerWidth
- , oldH = sC.innerHeight
- ;
- // stopPropagation if called by trigger("layoutdestroy") - use evtPane utility
- evtPane(evt_or_refresh);
-
- // cannot size layout when 'container' is hidden or collapsed
- if (!$N.is(":visible")) return;
-
- if (!state.initialized) {
- _initLayoutElements();
- return; // no need to resize since we just initialized!
- }
-
- if (evt_or_refresh === true && $.isPlainObject(options.outset)) {
- // update container CSS in case outset option has changed
- $N.css( options.outset );
- }
- // UPDATE container dimensions
- $.extend(sC, elDims( $N, options.inset ));
- if (!sC.outerHeight) return;
-
- // if 'true' passed, refresh pane & handle positioning too
- if (evt_or_refresh === true) {
- setPanePosition();
- }
-
- // onresizeall_start will CANCEL resizing if returns false
- // state.container has already been set, so user can access this info for calcuations
- if (false === _runCallbacks("onresizeall_start")) return false;
-
- var // see if container is now 'smaller' than before
- shrunkH = (sC.innerHeight < oldH)
- , shrunkW = (sC.innerWidth < oldW)
- , $P, o, s
- ;
- // NOTE special order for sizing: S-N-E-W
- $.each(["south","north","east","west"], function (i, pane) {
- if (!$Ps[pane]) return; // no pane - SKIP
- o = options[pane];
- s = state[pane];
- if (s.autoResize && s.size != o.size) // resize pane to original size set in options
- sizePane(pane, o.size, true, true, true); // true=skipCallback/noAnimation/forceResize
- else {
- setSizeLimits(pane);
- makePaneFit(pane, false, true, true); // true=skipCallback/forceResize
- }
- });
-
- sizeMidPanes("", true, true); // true=skipCallback/forceResize
- sizeHandles(); // reposition the toggler elements
-
- // trigger all individual pane callbacks AFTER layout has finished resizing
- $.each(_c.allPanes, function (i, pane) {
- $P = $Ps[pane];
- if (!$P) return; // SKIP
- if (state[pane].isVisible) // undefined for non-existent panes
- _runCallbacks("onresize_end", pane); // callback - if exists
- });
-
- _runCallbacks("onresizeall_end");
- //_triggerLayoutEvent(pane, 'resizeall');
- }
-
- /**
- * Whenever a pane resizes or opens that has a nested layout, trigger resizeAll
- *
- * @param {(string|Object)} evt_or_pane The pane just resized or opened
- */
-, resizeChildren = function (evt_or_pane, skipRefresh) {
- var pane = evtPane.call(this, evt_or_pane);
-
- if (!options[pane].resizeChildren) return;
-
- // ensure the pane-children are up-to-date
- if (!skipRefresh) refreshChildren( pane );
- var pC = children[pane];
- if ($.isPlainObject( pC )) {
- // resize one or more children
- $.each( pC, function (key, child) {
- if (!child.destroyed) child.resizeAll();
- });
- }
- }
-
- /**
- * IF pane has a content-div, then resize all elements inside pane to fit pane-height
- *
- * @param {(string|Object)} evt_or_panes The pane(s) being resized
- * @param {boolean=} [remeasure=false] Should the content (header/footer) be remeasured?
- */
-, sizeContent = function (evt_or_panes, remeasure) {
- if (!isInitialized()) return;
-
- var panes = evtPane.call(this, evt_or_panes);
- panes = panes ? panes.split(",") : _c.allPanes;
-
- $.each(panes, function (idx, pane) {
- var
- $P = $Ps[pane]
- , $C = $Cs[pane]
- , o = options[pane]
- , s = state[pane]
- , m = s.content // m = measurements
- ;
- if (!$P || !$C || !$P.is(":visible")) return true; // NOT VISIBLE - skip
-
- // if content-element was REMOVED, update OR remove the pointer
- if (!$C.length) {
- initContent(pane, false); // false = do NOT sizeContent() - already there!
- if (!$C) return; // no replacement element found - pointer have been removed
- }
-
- // onsizecontent_start will CANCEL resizing if returns false
- if (false === _runCallbacks("onsizecontent_start", pane)) return;
-
- // skip re-measuring offsets if live-resizing
- if ((!s.isMoving && !s.isResizing) || o.liveContentResizing || remeasure || m.top == undefined) {
- _measure();
- // if any footers are below pane-bottom, they may not measure correctly,
- // so allow pane overflow and re-measure
- if (m.hiddenFooters > 0 && $P.css("overflow") === "hidden") {
- $P.css("overflow", "visible");
- _measure(); // remeasure while overflowing
- $P.css("overflow", "hidden");
- }
- }
- // NOTE: spaceAbove/Below *includes* the pane paddingTop/Bottom, but not pane.borders
- var newH = s.innerHeight - (m.spaceAbove - s.css.paddingTop) - (m.spaceBelow - s.css.paddingBottom);
-
- if (!$C.is(":visible") || m.height != newH) {
- // size the Content element to fit new pane-size - will autoHide if not enough room
- setOuterHeight($C, newH, true); // true=autoHide
- m.height = newH; // save new height
- };
-
- if (state.initialized)
- _runCallbacks("onsizecontent_end", pane);
-
- function _below ($E) {
- return max(s.css.paddingBottom, (parseInt($E.css("marginBottom"), 10) || 0));
- };
-
- function _measure () {
- var
- ignore = options[pane].contentIgnoreSelector
- , $Fs = $C.nextAll().not(".ui-layout-mask").not(ignore || ":lt(0)") // not :lt(0) = ALL
- , $Fs_vis = $Fs.filter(':visible')
- , $F = $Fs_vis.filter(':last')
- ;
- m = {
- top: $C[0].offsetTop
- , height: $C.outerHeight()
- , numFooters: $Fs.length
- , hiddenFooters: $Fs.length - $Fs_vis.length
- , spaceBelow: 0 // correct if no content footer ($E)
- }
- m.spaceAbove = m.top; // just for state - not used in calc
- m.bottom = m.top + m.height;
- if ($F.length)
- //spaceBelow = (LastFooter.top + LastFooter.height) [footerBottom] - Content.bottom + max(LastFooter.marginBottom, pane.paddingBotom)
- m.spaceBelow = ($F[0].offsetTop + $F.outerHeight()) - m.bottom + _below($F);
- else // no footer - check marginBottom on Content element itself
- m.spaceBelow = _below($C);
- };
- });
- }
-
-
- /**
- * Called every time a pane is opened, closed, or resized to slide the togglers to 'center' and adjust their length if necessary
- *
- * @see initHandles(), open(), close(), resizeAll()
- * @param {(string|Object)=} evt_or_panes The pane(s) being resized
- */
-, sizeHandles = function (evt_or_panes) {
- var panes = evtPane.call(this, evt_or_panes)
- panes = panes ? panes.split(",") : _c.borderPanes;
-
- $.each(panes, function (i, pane) {
- var
- o = options[pane]
- , s = state[pane]
- , $P = $Ps[pane]
- , $R = $Rs[pane]
- , $T = $Ts[pane]
- , $TC
- ;
- if (!$P || !$R) return;
-
- var
- dir = _c[pane].dir
- , _state = (s.isClosed ? "_closed" : "_open")
- , spacing = o["spacing"+ _state]
- , togAlign = o["togglerAlign"+ _state]
- , togLen = o["togglerLength"+ _state]
- , paneLen
- , left
- , offset
- , CSS = {}
- ;
-
- if (spacing === 0) {
- $R.hide();
- return;
- }
- else if (!s.noRoom && !s.isHidden) // skip if resizer was hidden for any reason
- $R.show(); // in case was previously hidden
-
- // Resizer Bar is ALWAYS same width/height of pane it is attached to
- if (dir === "horz") { // north/south
- //paneLen = $P.outerWidth(); // s.outerWidth ||
- paneLen = sC.innerWidth; // handle offscreen-panes
- s.resizerLength = paneLen;
- left = $.layout.cssNum($P, "left")
- $R.css({
- width: cssW($R, paneLen) // account for borders & padding
- , height: cssH($R, spacing) // ditto
- , left: left > -9999 ? left : sC.inset.left // handle offscreen-panes
- });
- }
- else { // east/west
- paneLen = $P.outerHeight(); // s.outerHeight ||
- s.resizerLength = paneLen;
- $R.css({
- height: cssH($R, paneLen) // account for borders & padding
- , width: cssW($R, spacing) // ditto
- , top: sC.inset.top + getPaneSize("north", true) // TODO: what if no North pane?
- //, top: $.layout.cssNum($Ps["center"], "top")
- });
- }
-
- // remove hover classes
- removeHover( o, $R );
-
- if ($T) {
- if (togLen === 0 || (s.isSliding && o.hideTogglerOnSlide)) {
- $T.hide(); // always HIDE the toggler when 'sliding'
- return;
- }
- else
- $T.show(); // in case was previously hidden
-
- if (!(togLen > 0) || togLen === "100%" || togLen > paneLen) {
- togLen = paneLen;
- offset = 0;
- }
- else { // calculate 'offset' based on options.PANE.togglerAlign_open/closed
- if (isStr(togAlign)) {
- switch (togAlign) {
- case "top":
- case "left": offset = 0;
- break;
- case "bottom":
- case "right": offset = paneLen - togLen;
- break;
- case "middle":
- case "center":
- default: offset = round((paneLen - togLen) / 2); // 'default' catches typos
- }
- }
- else { // togAlign = number
- var x = parseInt(togAlign, 10); //
- if (togAlign >= 0) offset = x;
- else offset = paneLen - togLen + x; // NOTE: x is negative!
- }
- }
-
- if (dir === "horz") { // north/south
- var width = cssW($T, togLen);
- $T.css({
- width: width // account for borders & padding
- , height: cssH($T, spacing) // ditto
- , left: offset // TODO: VERIFY that toggler positions correctly for ALL values
- , top: 0
- });
- // CENTER the toggler content SPAN
- $T.children(".content").each(function(){
- $TC = $(this);
- $TC.css("marginLeft", round((width-$TC.outerWidth())/2)); // could be negative
- });
- }
- else { // east/west
- var height = cssH($T, togLen);
- $T.css({
- height: height // account for borders & padding
- , width: cssW($T, spacing) // ditto
- , top: offset // POSITION the toggler
- , left: 0
- });
- // CENTER the toggler content SPAN
- $T.children(".content").each(function(){
- $TC = $(this);
- $TC.css("marginTop", round((height-$TC.outerHeight())/2)); // could be negative
- });
- }
-
- // remove ALL hover classes
- removeHover( 0, $T );
- }
-
- // DONE measuring and sizing this resizer/toggler, so can be 'hidden' now
- if (!state.initialized && (o.initHidden || s.isHidden)) {
- $R.hide();
- if ($T) $T.hide();
- }
- });
- }
-
-
- /**
- * @param {(string|Object)} evt_or_pane
- */
-, enableClosable = function (evt_or_pane) {
- if (!isInitialized()) return;
- var pane = evtPane.call(this, evt_or_pane)
- , $T = $Ts[pane]
- , o = options[pane]
- ;
- if (!$T) return;
- o.closable = true;
- $T .bind("click."+ sID, function(evt){ evt.stopPropagation(); toggle(pane); })
- .css("visibility", "visible")
- .css("cursor", "pointer")
- .attr("title", state[pane].isClosed ? o.tips.Open : o.tips.Close) // may be blank
- .show();
- }
- /**
- * @param {(string|Object)} evt_or_pane
- * @param {boolean=} [hide=false]
- */
-, disableClosable = function (evt_or_pane, hide) {
- if (!isInitialized()) return;
- var pane = evtPane.call(this, evt_or_pane)
- , $T = $Ts[pane]
- ;
- if (!$T) return;
- options[pane].closable = false;
- // is closable is disable, then pane MUST be open!
- if (state[pane].isClosed) open(pane, false, true);
- $T .unbind("."+ sID)
- .css("visibility", hide ? "hidden" : "visible") // instead of hide(), which creates logic issues
- .css("cursor", "default")
- .attr("title", "");
- }
-
-
- /**
- * @param {(string|Object)} evt_or_pane
- */
-, enableSlidable = function (evt_or_pane) {
- if (!isInitialized()) return;
- var pane = evtPane.call(this, evt_or_pane)
- , $R = $Rs[pane]
- ;
- if (!$R || !$R.data('draggable')) return;
- options[pane].slidable = true;
- if (state[pane].isClosed)
- bindStartSlidingEvents(pane, true);
- }
- /**
- * @param {(string|Object)} evt_or_pane
- */
-, disableSlidable = function (evt_or_pane) {
- if (!isInitialized()) return;
- var pane = evtPane.call(this, evt_or_pane)
- , $R = $Rs[pane]
- ;
- if (!$R) return;
- options[pane].slidable = false;
- if (state[pane].isSliding)
- close(pane, false, true);
- else {
- bindStartSlidingEvents(pane, false);
- $R .css("cursor", "default")
- .attr("title", "");
- removeHover(null, $R[0]); // in case currently hovered
- }
- }
-
-
- /**
- * @param {(string|Object)} evt_or_pane
- */
-, enableResizable = function (evt_or_pane) {
- if (!isInitialized()) return;
- var pane = evtPane.call(this, evt_or_pane)
- , $R = $Rs[pane]
- , o = options[pane]
- ;
- if (!$R || !$R.data('draggable')) return;
- o.resizable = true;
- $R.draggable("enable");
- if (!state[pane].isClosed)
- $R .css("cursor", o.resizerCursor)
- .attr("title", o.tips.Resize);
- }
- /**
- * @param {(string|Object)} evt_or_pane
- */
-, disableResizable = function (evt_or_pane) {
- if (!isInitialized()) return;
- var pane = evtPane.call(this, evt_or_pane)
- , $R = $Rs[pane]
- ;
- if (!$R || !$R.data('draggable')) return;
- options[pane].resizable = false;
- $R .draggable("disable")
- .css("cursor", "default")
- .attr("title", "");
- removeHover(null, $R[0]); // in case currently hovered
- }
-
-
- /**
- * Move a pane from source-side (eg, west) to target-side (eg, east)
- * If pane exists on target-side, move that to source-side, ie, 'swap' the panes
- *
- * @param {(string|Object)} evt_or_pane1 The pane/edge being swapped
- * @param {string} pane2 ditto
- */
-, swapPanes = function (evt_or_pane1, pane2) {
- if (!isInitialized()) return;
- var pane1 = evtPane.call(this, evt_or_pane1);
- // change state.edge NOW so callbacks can know where pane is headed...
- state[pane1].edge = pane2;
- state[pane2].edge = pane1;
- // run these even if NOT state.initialized
- if (false === _runCallbacks("onswap_start", pane1)
- || false === _runCallbacks("onswap_start", pane2)
- ) {
- state[pane1].edge = pane1; // reset
- state[pane2].edge = pane2;
- return;
- }
-
- var
- oPane1 = copy( pane1 )
- , oPane2 = copy( pane2 )
- , sizes = {}
- ;
- sizes[pane1] = oPane1 ? oPane1.state.size : 0;
- sizes[pane2] = oPane2 ? oPane2.state.size : 0;
-
- // clear pointers & state
- $Ps[pane1] = false;
- $Ps[pane2] = false;
- state[pane1] = {};
- state[pane2] = {};
-
- // ALWAYS remove the resizer & toggler elements
- if ($Ts[pane1]) $Ts[pane1].remove();
- if ($Ts[pane2]) $Ts[pane2].remove();
- if ($Rs[pane1]) $Rs[pane1].remove();
- if ($Rs[pane2]) $Rs[pane2].remove();
- $Rs[pane1] = $Rs[pane2] = $Ts[pane1] = $Ts[pane2] = false;
-
- // transfer element pointers and data to NEW Layout keys
- move( oPane1, pane2 );
- move( oPane2, pane1 );
-
- // cleanup objects
- oPane1 = oPane2 = sizes = null;
-
- // make panes 'visible' again
- if ($Ps[pane1]) $Ps[pane1].css(_c.visible);
- if ($Ps[pane2]) $Ps[pane2].css(_c.visible);
-
- // fix any size discrepancies caused by swap
- resizeAll();
-
- // run these even if NOT state.initialized
- _runCallbacks("onswap_end", pane1);
- _runCallbacks("onswap_end", pane2);
-
- return;
-
- function copy (n) { // n = pane
- var
- $P = $Ps[n]
- , $C = $Cs[n]
- ;
- return !$P ? false : {
- pane: n
- , P: $P ? $P[0] : false
- , C: $C ? $C[0] : false
- , state: $.extend(true, {}, state[n])
- , options: $.extend(true, {}, options[n])
- }
- };
-
- function move (oPane, pane) {
- if (!oPane) return;
- var
- P = oPane.P
- , C = oPane.C
- , oldPane = oPane.pane
- , c = _c[pane]
- // save pane-options that should be retained
- , s = $.extend(true, {}, state[pane])
- , o = options[pane]
- // RETAIN side-specific FX Settings - more below
- , fx = { resizerCursor: o.resizerCursor }
- , re, size, pos
- ;
- $.each("fxName,fxSpeed,fxSettings".split(","), function (i, k) {
- fx[k +"_open"] = o[k +"_open"];
- fx[k +"_close"] = o[k +"_close"];
- fx[k +"_size"] = o[k +"_size"];
- });
-
- // update object pointers and attributes
- $Ps[pane] = $(P)
- .data({
- layoutPane: Instance[pane] // NEW pointer to pane-alias-object
- , layoutEdge: pane
- })
- .css(_c.hidden)
- .css(c.cssReq)
- ;
- $Cs[pane] = C ? $(C) : false;
-
- // set options and state
- options[pane] = $.extend(true, {}, oPane.options, fx);
- state[pane] = $.extend(true, {}, oPane.state);
-
- // change classNames on the pane, eg: ui-layout-pane-east ==> ui-layout-pane-west
- re = new RegExp(o.paneClass +"-"+ oldPane, "g");
- P.className = P.className.replace(re, o.paneClass +"-"+ pane);
-
- // ALWAYS regenerate the resizer & toggler elements
- initHandles(pane); // create the required resizer & toggler
-
- // if moving to different orientation, then keep 'target' pane size
- if (c.dir != _c[oldPane].dir) {
- size = sizes[pane] || 0;
- setSizeLimits(pane); // update pane-state
- size = max(size, state[pane].minSize);
- // use manualSizePane to disable autoResize - not useful after panes are swapped
- manualSizePane(pane, size, true, true); // true/true = skipCallback/noAnimation
- }
- else // move the resizer here
- $Rs[pane].css(c.side, sC.inset[c.side] + (state[pane].isVisible ? getPaneSize(pane) : 0));
-
-
- // ADD CLASSNAMES & SLIDE-BINDINGS
- if (oPane.state.isVisible && !s.isVisible)
- setAsOpen(pane, true); // true = skipCallback
- else {
- setAsClosed(pane);
- bindStartSlidingEvents(pane, true); // will enable events IF option is set
- }
-
- // DESTROY the object
- oPane = null;
- };
- }
-
-
- /**
- * INTERNAL method to sync pin-buttons when pane is opened or closed
- * Unpinned means the pane is 'sliding' - ie, over-top of the adjacent panes
- *
- * @see open(), setAsOpen(), setAsClosed()
- * @param {string} pane These are the params returned to callbacks by layout()
- * @param {boolean} doPin True means set the pin 'down', False means 'up'
- */
-, syncPinBtns = function (pane, doPin) {
- if ($.layout.plugins.buttons)
- $.each(state[pane].pins, function (i, selector) {
- $.layout.buttons.setPinState(Instance, $(selector), pane, doPin);
- });
- }
-
-; // END var DECLARATIONS
-
- /**
- * Capture keys when enableCursorHotkey - toggle pane if hotkey pressed
- *
- * @see document.keydown()
- */
- function keyDown (evt) {
- if (!evt) return true;
- var code = evt.keyCode;
- if (code < 33) return true; // ignore special keys: ENTER, TAB, etc
-
- var
- PANE = {
- 38: "north" // Up Cursor - $.ui.keyCode.UP
- , 40: "south" // Down Cursor - $.ui.keyCode.DOWN
- , 37: "west" // Left Cursor - $.ui.keyCode.LEFT
- , 39: "east" // Right Cursor - $.ui.keyCode.RIGHT
- }
- , ALT = evt.altKey // no worky!
- , SHIFT = evt.shiftKey
- , CTRL = evt.ctrlKey
- , CURSOR = (CTRL && code >= 37 && code <= 40)
- , o, k, m, pane
- ;
-
- if (CURSOR && options[PANE[code]].enableCursorHotkey) // valid cursor-hotkey
- pane = PANE[code];
- else if (CTRL || SHIFT) // check to see if this matches a custom-hotkey
- $.each(_c.borderPanes, function (i, p) { // loop each pane to check its hotkey
- o = options[p];
- k = o.customHotkey;
- m = o.customHotkeyModifier; // if missing or invalid, treated as "CTRL+SHIFT"
- if ((SHIFT && m=="SHIFT") || (CTRL && m=="CTRL") || (CTRL && SHIFT)) { // Modifier matches
- if (k && code === (isNaN(k) || k <= 9 ? k.toUpperCase().charCodeAt(0) : k)) { // Key matches
- pane = p;
- return false; // BREAK
- }
- }
- });
-
- // validate pane
- if (!pane || !$Ps[pane] || !options[pane].closable || state[pane].isHidden)
- return true;
-
- toggle(pane);
-
- evt.stopPropagation();
- evt.returnValue = false; // CANCEL key
- return false;
- };
-
-
-/*
- * ######################################
- * UTILITY METHODS
- * called externally or by initButtons
- * ######################################
- */
-
- /**
- * Change/reset a pane overflow setting & zIndex to allow popups/drop-downs to work
- *
- * @param {Object=} [el] (optional) Can also be 'bound' to a click, mouseOver, or other event
- */
- function allowOverflow (el) {
- if (!isInitialized()) return;
- if (this && this.tagName) el = this; // BOUND to element
- var $P;
- if (isStr(el))
- $P = $Ps[el];
- else if ($(el).data("layoutRole"))
- $P = $(el);
- else
- $(el).parents().each(function(){
- if ($(this).data("layoutRole")) {
- $P = $(this);
- return false; // BREAK
- }
- });
- if (!$P || !$P.length) return; // INVALID
-
- var
- pane = $P.data("layoutEdge")
- , s = state[pane]
- ;
-
- // if pane is already raised, then reset it before doing it again!
- // this would happen if allowOverflow is attached to BOTH the pane and an element
- if (s.cssSaved)
- resetOverflow(pane); // reset previous CSS before continuing
-
- // if pane is raised by sliding or resizing, or its closed, then abort
- if (s.isSliding || s.isResizing || s.isClosed) {
- s.cssSaved = false;
- return;
- }
-
- var
- newCSS = { zIndex: (options.zIndexes.resizer_normal + 1) }
- , curCSS = {}
- , of = $P.css("overflow")
- , ofX = $P.css("overflowX")
- , ofY = $P.css("overflowY")
- ;
- // determine which, if any, overflow settings need to be changed
- if (of != "visible") {
- curCSS.overflow = of;
- newCSS.overflow = "visible";
- }
- if (ofX && !ofX.match(/(visible|auto)/)) {
- curCSS.overflowX = ofX;
- newCSS.overflowX = "visible";
- }
- if (ofY && !ofY.match(/(visible|auto)/)) {
- curCSS.overflowY = ofX;
- newCSS.overflowY = "visible";
- }
-
- // save the current overflow settings - even if blank!
- s.cssSaved = curCSS;
-
- // apply new CSS to raise zIndex and, if necessary, make overflow 'visible'
- $P.css( newCSS );
-
- // make sure the zIndex of all other panes is normal
- $.each(_c.allPanes, function(i, p) {
- if (p != pane) resetOverflow(p);
- });
-
- };
- /**
- * @param {Object=} [el] (optional) Can also be 'bound' to a click, mouseOver, or other event
- */
- function resetOverflow (el) {
- if (!isInitialized()) return;
- if (this && this.tagName) el = this; // BOUND to element
- var $P;
- if (isStr(el))
- $P = $Ps[el];
- else if ($(el).data("layoutRole"))
- $P = $(el);
- else
- $(el).parents().each(function(){
- if ($(this).data("layoutRole")) {
- $P = $(this);
- return false; // BREAK
- }
- });
- if (!$P || !$P.length) return; // INVALID
-
- var
- pane = $P.data("layoutEdge")
- , s = state[pane]
- , CSS = s.cssSaved || {}
- ;
- // reset the zIndex
- if (!s.isSliding && !s.isResizing)
- $P.css("zIndex", options.zIndexes.pane_normal);
-
- // reset Overflow - if necessary
- $P.css( CSS );
-
- // clear var
- s.cssSaved = false;
- };
-
-/*
- * #####################
- * CREATE/RETURN LAYOUT
- * #####################
- */
-
- // validate that container exists
- var $N = $(this).eq(0); // FIRST matching Container element
- if (!$N.length) {
- return _log( options.errors.containerMissing );
- };
-
- // Users retrieve Instance of a layout with: $N.layout() OR $N.data("layout")
- // return the Instance-pointer if layout has already been initialized
- if ($N.data("layoutContainer") && $N.data("layout"))
- return $N.data("layout"); // cached pointer
-
- // init global vars
- var
- $Ps = {} // Panes x5 - set in initPanes()
- , $Cs = {} // Content x5 - set in initPanes()
- , $Rs = {} // Resizers x4 - set in initHandles()
- , $Ts = {} // Togglers x4 - set in initHandles()
- , $Ms = $([]) // Masks - up to 2 masks per pane (IFRAME + DIV)
- // aliases for code brevity
- , sC = state.container // alias for easy access to 'container dimensions'
- , sID = state.id // alias for unique layout ID/namespace - eg: "layout435"
- ;
-
- // create Instance object to expose data & option Properties, and primary action Methods
- var Instance = {
- // layout data
- options: options // property - options hash
- , state: state // property - dimensions hash
- // object pointers
- , container: $N // property - object pointers for layout container
- , panes: $Ps // property - object pointers for ALL Panes: panes.north, panes.center
- , contents: $Cs // property - object pointers for ALL Content: contents.north, contents.center
- , resizers: $Rs // property - object pointers for ALL Resizers, eg: resizers.north
- , togglers: $Ts // property - object pointers for ALL Togglers, eg: togglers.north
- // border-pane open/close
- , hide: hide // method - ditto
- , show: show // method - ditto
- , toggle: toggle // method - pass a 'pane' ("north", "west", etc)
- , open: open // method - ditto
- , close: close // method - ditto
- , slideOpen: slideOpen // method - ditto
- , slideClose: slideClose // method - ditto
- , slideToggle: slideToggle // method - ditto
- // pane actions
- , setSizeLimits: setSizeLimits // method - pass a 'pane' - update state min/max data
- , _sizePane: sizePane // method -intended for user by plugins only!
- , sizePane: manualSizePane // method - pass a 'pane' AND an 'outer-size' in pixels or percent, or 'auto'
- , sizeContent: sizeContent // method - pass a 'pane'
- , swapPanes: swapPanes // method - pass TWO 'panes' - will swap them
- , showMasks: showMasks // method - pass a 'pane' OR list of panes - default = all panes with mask option set
- , hideMasks: hideMasks // method - ditto'
- // pane element methods
- , initContent: initContent // method - ditto
- , addPane: addPane // method - pass a 'pane'
- , removePane: removePane // method - pass a 'pane' to remove from layout, add 'true' to delete the pane-elem
- , createChildren: createChildren // method - pass a 'pane' and (optional) layout-options (OVERRIDES options[pane].children
- , refreshChildren: refreshChildren // method - pass a 'pane' and a layout-instance
- // special pane option setting
- , enableClosable: enableClosable // method - pass a 'pane'
- , disableClosable: disableClosable // method - ditto
- , enableSlidable: enableSlidable // method - ditto
- , disableSlidable: disableSlidable // method - ditto
- , enableResizable: enableResizable // method - ditto
- , disableResizable: disableResizable// method - ditto
- // utility methods for panes
- , allowOverflow: allowOverflow // utility - pass calling element (this)
- , resetOverflow: resetOverflow // utility - ditto
- // layout control
- , destroy: destroy // method - no parameters
- , initPanes: isInitialized // method - no parameters
- , resizeAll: resizeAll // method - no parameters
- // callback triggering
- , runCallbacks: _runCallbacks // method - pass evtName & pane (if a pane-event), eg: trigger("onopen", "west")
- // alias collections of options, state and children - created in addPane and extended elsewhere
- , hasParentLayout: false // set by initContainer()
- , children: children // pointers to child-layouts, eg: Instance.children.west.layoutName
- , north: false // alias group: { name: pane, pane: $Ps[pane], options: options[pane], state: state[pane], children: children[pane] }
- , south: false // ditto
- , west: false // ditto
- , east: false // ditto
- , center: false // ditto
- };
-
- // create the border layout NOW
- if (_create() === 'cancel') // onload_start callback returned false to CANCEL layout creation
- return null;
- else // true OR false -- if layout-elements did NOT init (hidden or do not exist), can auto-init later
- return Instance; // return the Instance object
-
-}
-
-
-})( jQuery );
-
-
-
-
-/**
- * jquery.layout.state 1.2
- * $Date: 2015/03/13 22:37:04 $
- *
- * Copyright (c) 2014
- * Kevin Dalman (http://allpro.net)
- *
- * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html)
- * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses.
- *
- * @requires: UI Layout 1.4.0 or higher
- * @requires: $.ui.cookie (above)
- *
- * @see: http://groups.google.com/group/jquery-ui-layout
- */
-;(function ($) {
-
-if (!$.layout) return;
-
-
-/**
- * UI COOKIE UTILITY
- *
- * A $.cookie OR $.ui.cookie namespace *should be standard*, but until then...
- * This creates $.ui.cookie so Layout does not need the cookie.jquery.js plugin
- * NOTE: This utility is REQUIRED by the layout.state plugin
- *
- * Cookie methods in Layout are created as part of State Management
- */
-if (!$.ui) $.ui = {};
-$.ui.cookie = {
-
- // cookieEnabled is not in DOM specs, but DOES works in all browsers,including IE6
- acceptsCookies: !!navigator.cookieEnabled
-
-, read: function (name) {
- var
- c = document.cookie
- , cs = c ? c.split(';') : []
- , pair, data, i
- ;
- for (i=0; pair=cs[i]; i++) {
- data = $.trim(pair).split('='); // name=value => [ name, value ]
- if (data[0] == name) // found the layout cookie
- return decodeURIComponent(data[1]);
- }
- return null;
- }
-
-, write: function (name, val, cookieOpts) {
- var params = ""
- , date = ""
- , clear = false
- , o = cookieOpts || {}
- , x = o.expires || null
- , t = $.type(x)
- ;
- if (t === "date")
- date = x;
- else if (t === "string" && x > 0) {
- x = parseInt(x,10);
- t = "number";
- }
- if (t === "number") {
- date = new Date();
- if (x > 0)
- date.setDate(date.getDate() + x);
- else {
- date.setFullYear(1970);
- clear = true;
- }
- }
- if (date) params += ";expires="+ date.toUTCString();
- if (o.path) params += ";path="+ o.path;
- if (o.domain) params += ";domain="+ o.domain;
- if (o.secure) params += ";secure";
- document.cookie = name +"="+ (clear ? "" : encodeURIComponent( val )) + params; // write or clear cookie
- }
-
-, clear: function (name) {
- $.ui.cookie.write(name, "", {expires: -1});
- }
-
-};
-// if cookie.jquery.js is not loaded, create an alias to replicate it
-// this may be useful to other plugins or code dependent on that plugin
-if (!$.cookie) $.cookie = function (k, v, o) {
- var C = $.ui.cookie;
- if (v === null)
- C.clear(k);
- else if (v === undefined)
- return C.read(k);
- else
- C.write(k, v, o);
-};
-
-
-
-/**
- * State-management options stored in options.stateManagement, which includes a .cookie hash
- * Default options saves ALL KEYS for ALL PANES, ie: pane.size, pane.isClosed, pane.isHidden
- *
- * // STATE/COOKIE OPTIONS
- * @example $(el).layout({
- stateManagement: {
- enabled: true
- , stateKeys: "east.size,west.size,east.isClosed,west.isClosed"
- , cookie: { name: "appLayout", path: "/" }
- }
- })
- * @example $(el).layout({ stateManagement__enabled: true }) // enable auto-state-management using cookies
- * @example $(el).layout({ stateManagement__cookie: { name: "appLayout", path: "/" } })
- * @example $(el).layout({ stateManagement__cookie__name: "appLayout", stateManagement__cookie__path: "/" })
- *
- * // STATE/COOKIE METHODS
- * @example myLayout.saveCookie( "west.isClosed,north.size,south.isHidden", {expires: 7} );
- * @example myLayout.loadCookie();
- * @example myLayout.deleteCookie();
- * @example var JSON = myLayout.readState(); // CURRENT Layout State
- * @example var JSON = myLayout.readCookie(); // SAVED Layout State (from cookie)
- * @example var JSON = myLayout.state.stateData; // LAST LOADED Layout State (cookie saved in layout.state hash)
- *
- * CUSTOM STATE-MANAGEMENT (eg, saved in a database)
- * @example var JSON = myLayout.readState( "west.isClosed,north.size,south.isHidden" );
- * @example myLayout.loadState( JSON );
- */
-
-// tell Layout that the state plugin is available
-$.layout.plugins.stateManagement = true;
-
-// Add State-Management options to layout.defaults
-$.layout.defaults.stateManagement = {
- enabled: false // true = enable state-management, even if not using cookies
-, autoSave: true // Save a state-cookie when page exits?
-, autoLoad: true // Load the state-cookie when Layout inits?
-, animateLoad: true // animate panes when loading state into an active layout
-, includeChildren: true // recurse into child layouts to include their state as well
- // List state-data to save - must be pane-specific
-, stateKeys: "north.size,south.size,east.size,west.size,"+
- "north.isClosed,south.isClosed,east.isClosed,west.isClosed,"+
- "north.isHidden,south.isHidden,east.isHidden,west.isHidden"
-, cookie: {
- name: "" // If not specified, will use Layout.name, else just "Layout"
- , domain: "" // blank = current domain
- , path: "" // blank = current page, "/" = entire website
- , expires: "" // 'days' to keep cookie - leave blank for 'session cookie'
- , secure: false
- }
-};
-
-// Set stateManagement as a 'layout-option', NOT a 'pane-option'
-$.layout.optionsMap.layout.push("stateManagement");
-// Update config so layout does not move options into the pane-default branch (panes)
-$.layout.config.optionRootKeys.push("stateManagement");
-
-/*
- * State Management methods
- */
-$.layout.state = {
-
- /**
- * Get the current layout state and save it to a cookie
- *
- * myLayout.saveCookie( keys, cookieOpts )
- *
- * @param {Object} inst
- * @param {(string|Array)=} keys
- * @param {Object=} cookieOpts
- */
- saveCookie: function (inst, keys, cookieOpts) {
- var o = inst.options
- , sm = o.stateManagement
- , oC = $.extend(true, {}, sm.cookie, cookieOpts || null)
- , data = inst.state.stateData = inst.readState( keys || sm.stateKeys ) // read current panes-state
- ;
- $.ui.cookie.write( oC.name || o.name || "Layout", $.layout.state.encodeJSON(data), oC );
- return $.extend(true, {}, data); // return COPY of state.stateData data
- }
-
- /**
- * Remove the state cookie
- *
- * @param {Object} inst
- */
-, deleteCookie: function (inst) {
- var o = inst.options;
- $.ui.cookie.clear( o.stateManagement.cookie.name || o.name || "Layout" );
- }
-
- /**
- * Read & return data from the cookie - as JSON
- *
- * @param {Object} inst
- */
-, readCookie: function (inst) {
- var o = inst.options;
- var c = $.ui.cookie.read( o.stateManagement.cookie.name || o.name || "Layout" );
- // convert cookie string back to a hash and return it
- return c ? $.layout.state.decodeJSON(c) : {};
- }
-
- /**
- * Get data from the cookie and USE IT to loadState
- *
- * @param {Object} inst
- */
-, loadCookie: function (inst) {
- var c = $.layout.state.readCookie(inst); // READ the cookie
- if (c && !$.isEmptyObject( c )) {
- inst.state.stateData = $.extend(true, {}, c); // SET state.stateData
- inst.loadState(c); // LOAD the retrieved state
- }
- return c;
- }
-
- /**
- * Update layout options from the cookie, if one exists
- *
- * @param {Object} inst
- * @param {Object=} stateData
- * @param {boolean=} animate
- */
-, loadState: function (inst, data, opts) {
- if (!$.isPlainObject( data ) || $.isEmptyObject( data )) return;
-
- // normalize data & cache in the state object
- data = inst.state.stateData = $.layout.transformData( data ); // panes = default subkey
-
- // add missing/default state-restore options
- var smo = inst.options.stateManagement;
- opts = $.extend({
- animateLoad: false //smo.animateLoad
- , includeChildren: smo.includeChildren
- }, opts );
-
- if (!inst.state.initialized) {
- /*
- * layout NOT initialized, so just update its options
- */
- // MUST remove pane.children keys before applying to options
- // use a copy so we don't remove keys from original data
- var o = $.extend(true, {}, data);
- //delete o.center; // center has no state-data - only children
- $.each($.layout.config.allPanes, function (idx, pane) {
- if (o[pane]) delete o[pane].children;
- });
- // update CURRENT layout-options with saved state data
- $.extend(true, inst.options, o);
- }
- else {
- /*
- * layout already initialized, so modify layout's configuration
- */
- var noAnimate = !opts.animateLoad
- , o, c, h, state, open
- ;
- $.each($.layout.config.borderPanes, function (idx, pane) {
- o = data[ pane ];
- if (!$.isPlainObject( o )) return; // no key, skip pane
-
- s = o.size;
- c = o.initClosed;
- h = o.initHidden;
- ar = o.autoResize
- state = inst.state[pane];
- open = state.isVisible;
-
- // reset autoResize
- if (ar)
- state.autoResize = ar;
- // resize BEFORE opening
- if (!open)
- inst._sizePane(pane, s, false, false, false); // false=skipCallback/noAnimation/forceResize
- // open/close as necessary - DO NOT CHANGE THIS ORDER!
- if (h === true) inst.hide(pane, noAnimate);
- else if (c === true) inst.close(pane, false, noAnimate);
- else if (c === false) inst.open (pane, false, noAnimate);
- else if (h === false) inst.show (pane, false, noAnimate);
- // resize AFTER any other actions
- if (open)
- inst._sizePane(pane, s, false, false, noAnimate); // animate resize if option passed
- });
-
- /*
- * RECURSE INTO CHILD-LAYOUTS
- */
- if (opts.includeChildren) {
- var paneStateChildren, childState;
- $.each(inst.children, function (pane, paneChildren) {
- paneStateChildren = data[pane] ? data[pane].children : 0;
- if (paneStateChildren && paneChildren) {
- $.each(paneChildren, function (stateKey, child) {
- childState = paneStateChildren[stateKey];
- if (child && childState)
- child.loadState( childState );
- });
- }
- });
- }
- }
- }
-
- /**
- * Get the *current layout state* and return it as a hash
- *
- * @param {Object=} inst // Layout instance to get state for
- * @param {object=} [opts] // State-Managements override options
- */
-, readState: function (inst, opts) {
- // backward compatility
- if ($.type(opts) === 'string') opts = { keys: opts };
- if (!opts) opts = {};
- var sm = inst.options.stateManagement
- , ic = opts.includeChildren
- , recurse = ic !== undefined ? ic : sm.includeChildren
- , keys = opts.stateKeys || sm.stateKeys
- , alt = { isClosed: 'initClosed', isHidden: 'initHidden' }
- , state = inst.state
- , panes = $.layout.config.allPanes
- , data = {}
- , pair, pane, key, val
- , ps, pC, child, array, count, branch
- ;
- if ($.isArray(keys)) keys = keys.join(",");
- // convert keys to an array and change delimiters from '__' to '.'
- keys = keys.replace(/__/g, ".").split(',');
- // loop keys and create a data hash
- for (var i=0, n=keys.length; i < n; i++) {
- pair = keys[i].split(".");
- pane = pair[0];
- key = pair[1];
- if ($.inArray(pane, panes) < 0) continue; // bad pane!
- val = state[ pane ][ key ];
- if (val == undefined) continue;
- if (key=="isClosed" && state[pane]["isSliding"])
- val = true; // if sliding, then *really* isClosed
- ( data[pane] || (data[pane]={}) )[ alt[key] ? alt[key] : key ] = val;
- }
-
- // recurse into the child-layouts for each pane
- if (recurse) {
- $.each(panes, function (idx, pane) {
- pC = inst.children[pane];
- ps = state.stateData[pane];
- if ($.isPlainObject( pC ) && !$.isEmptyObject( pC )) {
- // ensure a key exists for this 'pane', eg: branch = data.center
- branch = data[pane] || (data[pane] = {});
- if (!branch.children) branch.children = {};
- $.each( pC, function (key, child) {
- // ONLY read state from an initialize layout
- if ( child.state.initialized )
- branch.children[ key ] = $.layout.state.readState( child );
- // if we have PREVIOUS (onLoad) state for this child-layout, KEEP IT!
- else if ( ps && ps.children && ps.children[ key ] ) {
- branch.children[ key ] = $.extend(true, {}, ps.children[ key ] );
- }
- });
- }
- });
- }
-
- return data;
- }
-
- /**
- * Stringify a JSON hash so can save in a cookie or db-field
- */
-, encodeJSON: function (json) {
- var local = window.JSON || {};
- return (local.stringify || stringify)(json);
-
- function stringify (h) {
- var D=[], i=0, k, v, t // k = key, v = value
- , a = $.isArray(h)
- ;
- for (k in h) {
- v = h[k];
- t = typeof v;
- if (t == 'string') // STRING - add quotes
- v = '"'+ v +'"';
- else if (t == 'object') // SUB-KEY - recurse into it
- v = parse(v);
- D[i++] = (!a ? '"'+ k +'":' : '') + v;
- }
- return (a ? '[' : '{') + D.join(',') + (a ? ']' : '}');
- };
- }
-
- /**
- * Convert stringified JSON back to a hash object
- * @see $.parseJSON(), adding in jQuery 1.4.1
- */
-, decodeJSON: function (str) {
- try { return $.parseJSON ? $.parseJSON(str) : window["eval"]("("+ str +")") || {}; }
- catch (e) { return {}; }
- }
-
-
-, _create: function (inst) {
- var s = $.layout.state
- , o = inst.options
- , sm = o.stateManagement
- ;
- // ADD State-Management plugin methods to inst
- $.extend( inst, {
- // readCookie - update options from cookie - returns hash of cookie data
- readCookie: function () { return s.readCookie(inst); }
- // deleteCookie
- , deleteCookie: function () { s.deleteCookie(inst); }
- // saveCookie - optionally pass keys-list and cookie-options (hash)
- , saveCookie: function (keys, cookieOpts) { return s.saveCookie(inst, keys, cookieOpts); }
- // loadCookie - readCookie and use to loadState() - returns hash of cookie data
- , loadCookie: function () { return s.loadCookie(inst); }
- // loadState - pass a hash of state to use to update options
- , loadState: function (stateData, opts) { s.loadState(inst, stateData, opts); }
- // readState - returns hash of current layout-state
- , readState: function (keys) { return s.readState(inst, keys); }
- // add JSON utility methods too...
- , encodeJSON: s.encodeJSON
- , decodeJSON: s.decodeJSON
- });
-
- // init state.stateData key, even if plugin is initially disabled
- inst.state.stateData = {};
-
- // autoLoad MUST BE one of: data-array, data-hash, callback-function, or TRUE
- if ( !sm.autoLoad ) return;
-
- // When state-data exists in the autoLoad key USE IT,
- // even if stateManagement.enabled == false
- if ($.isPlainObject( sm.autoLoad )) {
- if (!$.isEmptyObject( sm.autoLoad )) {
- inst.loadState( sm.autoLoad );
- }
- }
- else if ( sm.enabled ) {
- // update the options from cookie or callback
- // if options is a function, call it to get stateData
- if ($.isFunction( sm.autoLoad )) {
- var d = {};
- try {
- d = sm.autoLoad( inst, inst.state, inst.options, inst.options.name || '' ); // try to get data from fn
- } catch (e) {}
- if (d && $.isPlainObject( d ) && !$.isEmptyObject( d ))
- inst.loadState(d);
- }
- else // any other truthy value will trigger loadCookie
- inst.loadCookie();
- }
- }
-
-, _unload: function (inst) {
- var sm = inst.options.stateManagement;
- if (sm.enabled && sm.autoSave) {
- // if options is a function, call it to save the stateData
- if ($.isFunction( sm.autoSave )) {
- try {
- sm.autoSave( inst, inst.state, inst.options, inst.options.name || '' ); // try to get data from fn
- } catch (e) {}
- }
- else // any truthy value will trigger saveCookie
- inst.saveCookie();
- }
- }
-
-};
-
-// add state initialization method to Layout's onCreate array of functions
-$.layout.onCreate.push( $.layout.state._create );
-$.layout.onUnload.push( $.layout.state._unload );
-
-})( jQuery );
-
-
-
-/**
- * @preserve jquery.layout.buttons 1.0
- * $Date: 2015/03/13 22:37:04 $
- *
- * Copyright (c) 2011
- * Kevin Dalman (http://allpro.net)
- *
- * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html)
- * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses.
- *
- * @dependancies: UI Layout 1.3.0.rc30.1 or higher
- *
- * @support: http://groups.google.com/group/jquery-ui-layout
- *
- * Docs: [ to come ]
- * Tips: [ to come ]
- */
-;(function ($) {
-
-if (!$.layout) return;
-
-
-// tell Layout that the state plugin is available
-$.layout.plugins.buttons = true;
-
-// Add State-Management options to layout.defaults
-$.layout.defaults.autoBindCustomButtons = false;
-// Set stateManagement as a layout-option, NOT a pane-option
-$.layout.optionsMap.layout.push("autoBindCustomButtons");
-
-var lang = $.layout.language;
-
-/*
- * Button methods
- */
-$.layout.buttons = {
- // set data used by multiple methods below
- config: {
- borderPanes: "north,south,west,east"
- }
-
- /**
- * Searches for .ui-layout-button-xxx elements and auto-binds them as layout-buttons
- *
- * @see _create()
- */
-, init: function (inst) {
- var pre = "ui-layout-button-"
- , layout = inst.options.name || ""
- , name;
- $.each("toggle,open,close,pin,toggle-slide,open-slide".split(","), function (i, action) {
- $.each($.layout.buttons.config.borderPanes.split(","), function (ii, pane) {
- $("."+pre+action+"-"+pane).each(function(){
- // if button was previously 'bound', data.layoutName was set, but is blank if layout has no 'name'
- name = $(this).data("layoutName") || $(this).attr("layoutName");
- if (name == undefined || name === layout)
- inst.bindButton(this, action, pane);
- });
- });
- });
- }
-
- /**
- * Helper function to validate params received by addButton utilities
- *
- * Two classes are added to the element, based on the buttonClass...
- * The type of button is appended to create the 2nd className:
- * - ui-layout-button-pin
- * - ui-layout-pane-button-toggle
- * - ui-layout-pane-button-open
- * - ui-layout-pane-button-close
- *
- * @param {(string|!Object)} selector jQuery selector (or element) for button, eg: ".ui-layout-north .toggle-button"
- * @param {string} pane Name of the pane the button is for: 'north', 'south', etc.
- * @return {Array.<Object>} If both params valid, the element matching 'selector' in a jQuery wrapper - otherwise returns null
- */
-, get: function (inst, selector, pane, action) {
- var $E = $(selector)
- , o = inst.options
- , err = o.showErrorMessages
- ;
- if (!$E.length) { // element not found
- if (err) alert(lang.errButton + lang.selector +": "+ selector);
- }
- else if ($.layout.buttons.config.borderPanes.indexOf(pane) === -1) { // invalid 'pane' sepecified
- if (err) alert(lang.errButton + lang.pane +": "+ pane);
- $E = $(""); // NO BUTTON
- }
- else { // VALID
- var btn = o[pane].buttonClass +"-"+ action;
- $E .addClass( btn +" "+ btn +"-"+ pane )
- .data("layoutName", o.name); // add layout identifier - even if blank!
- }
- return $E;
- }
-
-
- /**
- * NEW syntax for binding layout-buttons - will eventually replace addToggle, addOpen, etc.
- *
- * @param {(string|!Object)} sel jQuery selector (or element) for button, eg: ".ui-layout-north .toggle-button"
- * @param {string} action
- * @param {string} pane
- */
-, bind: function (inst, sel, action, pane) {
- var _ = $.layout.buttons;
- switch (action.toLowerCase()) {
- case "toggle": _.addToggle (inst, sel, pane); break;
- case "open": _.addOpen (inst, sel, pane); break;
- case "close": _.addClose (inst, sel, pane); break;
- case "pin": _.addPin (inst, sel, pane); break;
- case "toggle-slide": _.addToggle (inst, sel, pane, true); break;
- case "open-slide": _.addOpen (inst, sel, pane, true); break;
- }
- return inst;
- }
-
- /**
- * Add a custom Toggler button for a pane
- *
- * @param {(string|!Object)} selector jQuery selector (or element) for button, eg: ".ui-layout-north .toggle-button"
- * @param {string} pane Name of the pane the button is for: 'north', 'south', etc.
- * @param {boolean=} slide true = slide-open, false = pin-open
- */
-, addToggle: function (inst, selector, pane, slide) {
- $.layout.buttons.get(inst, selector, pane, "toggle")
- .click(function(evt){
- inst.toggle(pane, !!slide);
- evt.stopPropagation();
- });
- return inst;
- }
-
- /**
- * Add a custom Open button for a pane
- *
- * @param {(string|!Object)} selector jQuery selector (or element) for button, eg: ".ui-layout-north .toggle-button"
- * @param {string} pane Name of the pane the button is for: 'north', 'south', etc.
- * @param {boolean=} slide true = slide-open, false = pin-open
- */
-, addOpen: function (inst, selector, pane, slide) {
- $.layout.buttons.get(inst, selector, pane, "open")
- .attr("title", lang.Open)
- .click(function (evt) {
- inst.open(pane, !!slide);
- evt.stopPropagation();
- });
- return inst;
- }
-
- /**
- * Add a custom Close button for a pane
- *
- * @param {(string|!Object)} selector jQuery selector (or element) for button, eg: ".ui-layout-north .toggle-button"
- * @param {string} pane Name of the pane the button is for: 'north', 'south', etc.
- */
-, addClose: function (inst, selector, pane) {
- $.layout.buttons.get(inst, selector, pane, "close")
- .attr("title", lang.Close)
- .click(function (evt) {
- inst.close(pane);
- evt.stopPropagation();
- });
- return inst;
- }
-
- /**
- * Add a custom Pin button for a pane
- *
- * Four classes are added to the element, based on the paneClass for the associated pane...
- * Assuming the default paneClass and the pin is 'up', these classes are added for a west-pane pin:
- * - ui-layout-pane-pin
- * - ui-layout-pane-west-pin
- * - ui-layout-pane-pin-up
- * - ui-layout-pane-west-pin-up
- *
- * @param {(string|!Object)} selector jQuery selector (or element) for button, eg: ".ui-layout-north .toggle-button"
- * @param {string} pane Name of the pane the pin is for: 'north', 'south', etc.
- */
-, addPin: function (inst, selector, pane) {
- var $E = $.layout.buttons.get(inst, selector, pane, "pin");
- if ($E.length) {
- var s = inst.state[pane];
- $E.click(function (evt) {
- $.layout.buttons.setPinState(inst, $(this), pane, (s.isSliding || s.isClosed));
- if (s.isSliding || s.isClosed) inst.open( pane ); // change from sliding to open
- else inst.close( pane ); // slide-closed
- evt.stopPropagation();
- });
- // add up/down pin attributes and classes
- $.layout.buttons.setPinState(inst, $E, pane, (!s.isClosed && !s.isSliding));
- // add this pin to the pane data so we can 'sync it' automatically
- // PANE.pins key is an array so we can store multiple pins for each pane
- s.pins.push( selector ); // just save the selector string
- }
- return inst;
- }
-
- /**
- * Change the class of the pin button to make it look 'up' or 'down'
- *
- * @see addPin(), syncPins()
- * @param {Array.<Object>} $Pin The pin-span element in a jQuery wrapper
- * @param {string} pane These are the params returned to callbacks by layout()
- * @param {boolean} doPin true = set the pin 'down', false = set it 'up'
- */
-, setPinState: function (inst, $Pin, pane, doPin) {
- var updown = $Pin.attr("pin");
- if (updown && doPin === (updown=="down")) return; // already in correct state
- var
- pin = inst.options[pane].buttonClass +"-pin"
- , side = pin +"-"+ pane
- , UP = pin +"-up "+ side +"-up"
- , DN = pin +"-down "+side +"-down"
- ;
- $Pin
- .attr("pin", doPin ? "down" : "up") // logic
- .attr("title", doPin ? lang.Unpin : lang.Pin)
- .removeClass( doPin ? UP : DN )
- .addClass( doPin ? DN : UP )
- ;
- }
-
- /**
- * INTERNAL function to sync 'pin buttons' when pane is opened or closed
- * Unpinned means the pane is 'sliding' - ie, over-top of the adjacent panes
- *
- * @see open(), close()
- * @param {string} pane These are the params returned to callbacks by layout()
- * @param {boolean} doPin True means set the pin 'down', False means 'up'
- */
-, syncPinBtns: function (inst, pane, doPin) {
- // REAL METHOD IS _INSIDE_ LAYOUT - THIS IS HERE JUST FOR REFERENCE
- $.each(state[pane].pins, function (i, selector) {
- $.layout.buttons.setPinState(inst, $(selector), pane, doPin);
- });
- }
-
-
-, _load: function (inst) {
- // ADD Button methods to Layout Instance
- $.extend( inst, {
- bindButton: function (selector, action, pane) { return $.layout.buttons.bind(inst, selector, action, pane); }
- // DEPRECATED METHODS...
- , addToggleBtn: function (selector, pane, slide) { return $.layout.buttons.addToggle(inst, selector, pane, slide); }
- , addOpenBtn: function (selector, pane, slide) { return $.layout.buttons.addOpen(inst, selector, pane, slide); }
- , addCloseBtn: function (selector, pane) { return $.layout.buttons.addClose(inst, selector, pane); }
- , addPinBtn: function (selector, pane) { return $.layout.buttons.addPin(inst, selector, pane); }
- });
-
- // init state array to hold pin-buttons
- for (var i=0; i<4; i++) {
- var pane = $.layout.buttons.config.borderPanes[i];
- inst.state[pane].pins = [];
- }
-
- // auto-init buttons onLoad if option is enabled
- if ( inst.options.autoBindCustomButtons )
- $.layout.buttons.init(inst);
- }
-
-, _unload: function (inst) {
- // TODO: unbind all buttons???
- }
-
-};
-
-// add initialization method to Layout's onLoad array of functions
-$.layout.onLoad.push( $.layout.buttons._load );
-//$.layout.onUnload.push( $.layout.buttons._unload );
-
-})( jQuery );
-
-
-
-
-/**
- * jquery.layout.browserZoom 1.0
- * $Date: 2015/03/13 22:37:04 $
- *
- * Copyright (c) 2012
- * Kevin Dalman (http://allpro.net)
- *
- * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html)
- * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses.
- *
- * @requires: UI Layout 1.3.0.rc30.1 or higher
- *
- * @see: http://groups.google.com/group/jquery-ui-layout
- *
- * TODO: Extend logic to handle other problematic zooming in browsers
- * TODO: Add hotkey/mousewheel bindings to _instantly_ respond to these zoom event
- */
-(function ($) {
-
-// tell Layout that the plugin is available
-$.layout.plugins.browserZoom = true;
-
-$.layout.defaults.browserZoomCheckInterval = 1000;
-$.layout.optionsMap.layout.push("browserZoomCheckInterval");
-
-/*
- * browserZoom methods
- */
-$.layout.browserZoom = {
-
- _init: function (inst) {
- // abort if browser does not need this check
- if ($.layout.browserZoom.ratio() !== false)
- $.layout.browserZoom._setTimer(inst);
- }
-
-, _setTimer: function (inst) {
- // abort if layout destroyed or browser does not need this check
- if (inst.destroyed) return;
- var o = inst.options
- , s = inst.state
- // don't need check if inst has parentLayout, but check occassionally in case parent destroyed!
- // MINIMUM 100ms interval, for performance
- , ms = inst.hasParentLayout ? 5000 : Math.max( o.browserZoomCheckInterval, 100 )
- ;
- // set the timer
- setTimeout(function(){
- if (inst.destroyed || !o.resizeWithWindow) return;
- var d = $.layout.browserZoom.ratio();
- if (d !== s.browserZoom) {
- s.browserZoom = d;
- inst.resizeAll();
- }
- // set a NEW timeout
- $.layout.browserZoom._setTimer(inst);
- }
- , ms );
- }
-
-, ratio: function () {
- var w = window
- , s = screen
- , d = document
- , dE = d.documentElement || d.body
- , b = $.layout.browser
- , v = b.version
- , r, sW, cW
- ;
- // we can ignore all browsers that fire window.resize event onZoom
- if (!b.msie || v > 8)
- return false; // don't need to track zoom
- if (s.deviceXDPI && s.systemXDPI) // syntax compiler hack
- return calc(s.deviceXDPI, s.systemXDPI);
- // everything below is just for future reference!
- if (b.webkit && (r = d.body.getBoundingClientRect))
- return calc((r.left - r.right), d.body.offsetWidth);
- if (b.webkit && (sW = w.outerWidth))
- return calc(sW, w.innerWidth);
- if ((sW = s.width) && (cW = dE.clientWidth))
- return calc(sW, cW);
- return false; // no match, so cannot - or don't need to - track zoom
-
- function calc (x,y) { return (parseInt(x,10) / parseInt(y,10) * 100).toFixed(); }
- }
-
-};
-// add initialization method to Layout's onLoad array of functions
-$.layout.onReady.push( $.layout.browserZoom._init );
-
-
-})( jQuery );
-
-
-
-
-/**
- * UI Layout Plugin: Slide-Offscreen Animation
- *
- * Prevent panes from being 'hidden' so that an iframes/objects
- * does not reload/refresh when pane 'opens' again.
- * This plug-in adds a new animation called "slideOffscreen".
- * It is identical to the normal "slide" effect, but avoids hiding the element
- *
- * Requires Layout 1.3.0.RC30.1 or later for Close offscreen
- * Requires Layout 1.3.0.RC30.5 or later for Hide, initClosed & initHidden offscreen
- *
- * Version: 1.1 - 2012-11-18
- * Author: Kevin Dalman (kevin@jquery-dev.com)
- * @preserve jquery.layout.slideOffscreen-1.1.js
- */
-;(function ($) {
-
-// Add a new "slideOffscreen" effect
-if ($.effects) {
-
- // add an option so initClosed and initHidden will work
- $.layout.defaults.panes.useOffscreenClose = false; // user must enable when needed
- /* set the new animation as the default for all panes
- $.layout.defaults.panes.fxName = "slideOffscreen";
- */
-
- if ($.layout.plugins)
- $.layout.plugins.effects.slideOffscreen = true;
-
- // dupe 'slide' effect defaults as new effect defaults
- $.layout.effects.slideOffscreen = $.extend(true, {}, $.layout.effects.slide);
-
- // add new effect to jQuery UI
- $.effects.slideOffscreen = function(o) {
- return this.queue(function(){
-
- var fx = $.effects
- , opt = o.options
- , $el = $(this)
- , pane = $el.data('layoutEdge')
- , state = $el.data('parentLayout').state
- , dist = state[pane].size
- , s = this.style
- , props = ['top','bottom','left','right']
- // Set options
- , mode = fx.setMode($el, opt.mode || 'show') // Set Mode
- , show = (mode == 'show')
- , dir = opt.direction || 'left' // Default Direction
- , ref = (dir == 'up' || dir == 'down') ? 'top' : 'left'
- , pos = (dir == 'up' || dir == 'left')
- , offscrn = $.layout.config.offscreenCSS || {}
- , keyLR = $.layout.config.offscreenReset
- , keyTB = 'offscreenResetTop' // only used internally
- , animation = {}
- ;
- // Animation settings
- animation[ref] = (show ? (pos ? '+=' : '-=') : (pos ? '-=' : '+=')) + dist;
-
- if (show) { // show() animation, so save top/bottom but retain left/right set when 'hidden'
- $el.data(keyTB, { top: s.top, bottom: s.bottom });
-
- // set the top or left offset in preparation for animation
- // Note: ALL animations work by shifting the top or left edges
- if (pos) { // top (north) or left (west)
- $el.css(ref, isNaN(dist) ? "-" + dist : -dist); // Shift outside the left/top edge
- }
- else { // bottom (south) or right (east) - shift all the way across container
- if (dir === 'right')
- $el.css({ left: state.container.layoutWidth, right: 'auto' });
- else // dir === bottom
- $el.css({ top: state.container.layoutHeight, bottom: 'auto' });
- }
- // restore the left/right setting if is a top/bottom animation
- if (ref === 'top')
- $el.css( $el.data( keyLR ) || {} );
- }
- else { // hide() animation, so save ALL CSS
- $el.data(keyTB, { top: s.top, bottom: s.bottom });
- $el.data(keyLR, { left: s.left, right: s.right });
- }
-
- // Animate
- $el.show().animate(animation, { queue: false, duration: o.duration, easing: opt.easing, complete: function(){
- // Restore top/bottom
- if ($el.data( keyTB ))
- $el.css($el.data( keyTB )).removeData( keyTB );
- if (show) // Restore left/right too
- $el.css($el.data( keyLR ) || {}).removeData( keyLR );
- else // Move the pane off-screen (left: -99999, right: 'auto')
- $el.css( offscrn );
-
- if (o.callback) o.callback.apply(this, arguments); // Callback
- $el.dequeue();
- }});
-
- });
- };
-
-}
-
-})( jQuery ); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/modalService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/modalService.js
deleted file mode 100644
index 74c848e8..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/modalService.js
+++ /dev/null
@@ -1,185 +0,0 @@
-angular.module("modalServices",[]).service('modalService', ['$modal', function ($modal) {
-
-
- this.showSuccess = function(heading, messageBody){
- var modalInstance = $modal.open({
- templateUrl: 'modal_informative.html',
- controller: 'modalpopupController',
- resolve: {
- message: function () {
- $(".overlayed").css("display","none");
- $(".loadingId").css("display","none");
- var message = {
- title: heading,
- text: messageBody
- };
- return message;
- }
- }
- });
- };
- this.showFailure = function(heading, messageBody){
- var modalInstance = $modal.open({
- templateUrl: 'modal_warning.html',
- controller: 'modalpopupController',
- resolve: {
- message: function () {
- var message = {
- title: heading,
- text: messageBody
- };
- return message;
- }
- }
- });
- };
-
- this.showMessage = function(heading, messageBody){
- var modalInstance = $modal.open({
- templateUrl: 'modal_message.html',
- controller: 'modalpopupController',
- resolve: {
- message: function () {
- var message = {
- title: heading,
- text: messageBody
- };
- return message;
- }
- }
- });
- };
-
- this.showWarning = function(heading, messageBody){
- var modalInstance = $modal.open({
- templateUrl: 'modal_warning_message.html',
- controller: 'modalpopupController',
- resolve: {
- message: function () {
- var message = {
- title: heading,
- text: messageBody
- };
- return message;
- }
- }
- });
- };
-
- this.popupConfirmWin = function(title, msgBody, callback){
- var modalInstance = $modal.open({
- templateUrl: 'confirmation_informative.html',
- controller: 'modalpopupController',
- resolve: {
- message: function () {
- var message = {
- title: title,
- text: msgBody
- };
- return message;
- }
- }
- });
- var args = Array.prototype.slice.call( arguments, 0 );
- args.splice( 0, 3);
- modalInstance.result.then(function(){
- callback.apply(null, args);
- }, function() {
- })['finally'](function(){
- modalInstance = undefined;
- });
-
- };
- this.popupConfirmWinWithCancel = function(title, msgBody, callback,dismissCallback){
- var modalInstance = $modal.open({
- templateUrl: 'confirmation_informative.html',
- controller: 'modalpopupController',
- resolve: {
- message: function () {
- var message = {
- title: title,
- text: msgBody
- };
- return message;
- }
- }
- });
- var args = Array.prototype.slice.call( arguments, 0 );
- args.splice( 0, 3);
- modalInstance.result.then(function(){
- callback.apply(null, args);
- }, function() {
- dismissCallback();
- })['finally'](function(){
- modalInstance = undefined;
- });
-
- };
- this.popupDeleteConfirmWin = function(title, msgBody, callback, argForCallBack){
- var modalInstance = $modal.open({
- templateUrl: 'confirmation_for_delete.html',
- controller: 'modalpopupController',
- resolve: {
- message: function () {
- var message = {
- title: title,
- text: msgBody
- };
- return message;
- }
- }
- });
-
- modalInstance.result.then(function(){
- callback(argForCallBack);
- }, function() {
- })['finally'](function(){
- modalInstance = undefined;
- });
-
- };
-
- this.popupSuccessRedirectWin = function(title, msgBody, redirectUrl){
- var modalInstance = $modal.open({
- templateUrl: 'modal_informative.html',
- controller: 'modalpopupController',
- resolve: {
- message: function () {
- var message = {
- title: title,
- text: msgBody
- };
- return message;
- }
- }
- });
- modalInstance.result.then(function() {
- }, function() {
- window.location.href=redirectUrl;
- })['finally'](function(){
- modalInstance = undefined;
- });
- };
-
- this.popupWarningRedirectWin = function(title, msgBody, redirectUrl){
- var modalInstance = $modal.open({
- templateUrl: 'modal_warning_message.html',
- controller: 'modalpopupController',
- resolve: {
- message: function () {
- var message = {
- title: title,
- text: msgBody
- };
- return message;
- }
- }
- });
- modalInstance.result.then(function() {
- }, function() {
- window.location.href=redirectUrl;
- })['finally'](function(){
- modalInstance = undefined;
- });
- };
- }]); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/moment.min.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/moment.min.js
deleted file mode 100644
index 62b1697b..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/moment.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// moment.js
-// version : 2.1.0
-// author : Tim Wood
-// license : MIT
-// momentjs.com
-!function(t){function e(t,e){return function(n){return u(t.call(this,n),e)}}function n(t,e){return function(n){return this.lang().ordinal(t.call(this,n),e)}}function s(){}function i(t){a(this,t)}function r(t){var e=t.years||t.year||t.y||0,n=t.months||t.month||t.M||0,s=t.weeks||t.week||t.w||0,i=t.days||t.day||t.d||0,r=t.hours||t.hour||t.h||0,a=t.minutes||t.minute||t.m||0,o=t.seconds||t.second||t.s||0,u=t.milliseconds||t.millisecond||t.ms||0;this._input=t,this._milliseconds=u+1e3*o+6e4*a+36e5*r,this._days=i+7*s,this._months=n+12*e,this._data={},this._bubble()}function a(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function o(t){return 0>t?Math.ceil(t):Math.floor(t)}function u(t,e){for(var n=t+"";n.length<e;)n="0"+n;return n}function h(t,e,n,s){var i,r,a=e._milliseconds,o=e._days,u=e._months;a&&t._d.setTime(+t._d+a*n),(o||u)&&(i=t.minute(),r=t.hour()),o&&t.date(t.date()+o*n),u&&t.month(t.month()+u*n),a&&!s&&H.updateOffset(t),(o||u)&&(t.minute(i),t.hour(r))}function d(t){return"[object Array]"===Object.prototype.toString.call(t)}function c(t,e){var n,s=Math.min(t.length,e.length),i=Math.abs(t.length-e.length),r=0;for(n=0;s>n;n++)~~t[n]!==~~e[n]&&r++;return r+i}function f(t){return t?ie[t]||t.toLowerCase().replace(/(.)s$/,"$1"):t}function l(t,e){return e.abbr=t,x[t]||(x[t]=new s),x[t].set(e),x[t]}function _(t){if(!t)return H.fn._lang;if(!x[t]&&A)try{require("./lang/"+t)}catch(e){return H.fn._lang}return x[t]}function m(t){return t.match(/\[.*\]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function y(t){var e,n,s=t.match(E);for(e=0,n=s.length;n>e;e++)s[e]=ue[s[e]]?ue[s[e]]:m(s[e]);return function(i){var r="";for(e=0;n>e;e++)r+=s[e]instanceof Function?s[e].call(i,t):s[e];return r}}function M(t,e){function n(e){return t.lang().longDateFormat(e)||e}for(var s=5;s--&&N.test(e);)e=e.replace(N,n);return re[e]||(re[e]=y(e)),re[e](t)}function g(t,e){switch(t){case"DDDD":return V;case"YYYY":return X;case"YYYYY":return $;case"S":case"SS":case"SSS":case"DDD":return I;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return R;case"a":case"A":return _(e._l)._meridiemParse;case"X":return B;case"Z":case"ZZ":return j;case"T":return q;case"MM":case"DD":case"YY":case"HH":case"hh":case"mm":case"ss":case"M":case"D":case"d":case"H":case"h":case"m":case"s":return J;default:return new RegExp(t.replace("\\",""))}}function p(t){var e=(j.exec(t)||[])[0],n=(e+"").match(ee)||["-",0,0],s=+(60*n[1])+~~n[2];return"+"===n[0]?-s:s}function D(t,e,n){var s,i=n._a;switch(t){case"M":case"MM":i[1]=null==e?0:~~e-1;break;case"MMM":case"MMMM":s=_(n._l).monthsParse(e),null!=s?i[1]=s:n._isValid=!1;break;case"D":case"DD":case"DDD":case"DDDD":null!=e&&(i[2]=~~e);break;case"YY":i[0]=~~e+(~~e>68?1900:2e3);break;case"YYYY":case"YYYYY":i[0]=~~e;break;case"a":case"A":n._isPm=_(n._l).isPM(e);break;case"H":case"HH":case"h":case"hh":i[3]=~~e;break;case"m":case"mm":i[4]=~~e;break;case"s":case"ss":i[5]=~~e;break;case"S":case"SS":case"SSS":i[6]=~~(1e3*("0."+e));break;case"X":n._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":n._useUTC=!0,n._tzm=p(e)}null==e&&(n._isValid=!1)}function Y(t){var e,n,s=[];if(!t._d){for(e=0;7>e;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];s[3]+=~~((t._tzm||0)/60),s[4]+=~~((t._tzm||0)%60),n=new Date(0),t._useUTC?(n.setUTCFullYear(s[0],s[1],s[2]),n.setUTCHours(s[3],s[4],s[5],s[6])):(n.setFullYear(s[0],s[1],s[2]),n.setHours(s[3],s[4],s[5],s[6])),t._d=n}}function w(t){var e,n,s=t._f.match(E),i=t._i;for(t._a=[],e=0;e<s.length;e++)n=(g(s[e],t).exec(i)||[])[0],n&&(i=i.slice(i.indexOf(n)+n.length)),ue[s[e]]&&D(s[e],n,t);i&&(t._il=i),t._isPm&&t._a[3]<12&&(t._a[3]+=12),t._isPm===!1&&12===t._a[3]&&(t._a[3]=0),Y(t)}function k(t){var e,n,s,r,o,u=99;for(r=0;r<t._f.length;r++)e=a({},t),e._f=t._f[r],w(e),n=new i(e),o=c(e._a,n.toArray()),n._il&&(o+=n._il.length),u>o&&(u=o,s=n);a(t,s)}function v(t){var e,n=t._i,s=K.exec(n);if(s){for(t._f="YYYY-MM-DD"+(s[2]||" "),e=0;4>e;e++)if(te[e][1].exec(n)){t._f+=te[e][0];break}j.exec(n)&&(t._f+=" Z"),w(t)}else t._d=new Date(n)}function T(e){var n=e._i,s=G.exec(n);n===t?e._d=new Date:s?e._d=new Date(+s[1]):"string"==typeof n?v(e):d(n)?(e._a=n.slice(0),Y(e)):e._d=n instanceof Date?new Date(+n):new Date(n)}function b(t,e,n,s,i){return i.relativeTime(e||1,!!n,t,s)}function S(t,e,n){var s=W(Math.abs(t)/1e3),i=W(s/60),r=W(i/60),a=W(r/24),o=W(a/365),u=45>s&&["s",s]||1===i&&["m"]||45>i&&["mm",i]||1===r&&["h"]||22>r&&["hh",r]||1===a&&["d"]||25>=a&&["dd",a]||45>=a&&["M"]||345>a&&["MM",W(a/30)]||1===o&&["y"]||["yy",o];return u[2]=e,u[3]=t>0,u[4]=n,b.apply({},u)}function F(t,e,n){var s,i=n-e,r=n-t.day();return r>i&&(r-=7),i-7>r&&(r+=7),s=H(t).add("d",r),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function O(t){var e=t._i,n=t._f;return null===e||""===e?null:("string"==typeof e&&(t._i=e=_().preparse(e)),H.isMoment(e)?(t=a({},e),t._d=new Date(+e._d)):n?d(n)?k(t):w(t):T(t),new i(t))}function z(t,e){H.fn[t]=H.fn[t+"s"]=function(t){var n=this._isUTC?"UTC":"";return null!=t?(this._d["set"+n+e](t),H.updateOffset(this),this):this._d["get"+n+e]()}}function C(t){H.duration.fn[t]=function(){return this._data[t]}}function L(t,e){H.duration.fn["as"+t]=function(){return+this/e}}for(var H,P,U="2.1.0",W=Math.round,x={},A="undefined"!=typeof module&&module.exports,G=/^\/?Date\((\-?\d+)/i,Z=/(\-)?(\d*)?\.?(\d+)\:(\d+)\:(\d+)\.?(\d{3})?/,E=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g,N=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,J=/\d\d?/,I=/\d{1,3}/,V=/\d{3}/,X=/\d{1,4}/,$=/[+\-]?\d{1,6}/,R=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,j=/Z|[\+\-]\d\d:?\d\d/i,q=/T/i,B=/[\+\-]?\d+(\.\d{1,3})?/,K=/^\s*\d{4}-\d\d-\d\d((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/,Q="YYYY-MM-DDTHH:mm:ssZ",te=[["HH:mm:ss.S",/(T| )\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],ee=/([\+\-]|\d\d)/gi,ne="Date|Hours|Minutes|Seconds|Milliseconds".split("|"),se={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6},ie={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",w:"week",M:"month",y:"year"},re={},ae="DDD w W M D d".split(" "),oe="M D H h m s w W".split(" "),ue={M:function(){return this.month()+1},MMM:function(t){return this.lang().monthsShort(this,t)},MMMM:function(t){return this.lang().months(this,t)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(t){return this.lang().weekdaysMin(this,t)},ddd:function(t){return this.lang().weekdaysShort(this,t)},dddd:function(t){return this.lang().weekdays(this,t)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return u(this.year()%100,2)},YYYY:function(){return u(this.year(),4)},YYYYY:function(){return u(this.year(),5)},gg:function(){return u(this.weekYear()%100,2)},gggg:function(){return this.weekYear()},ggggg:function(){return u(this.weekYear(),5)},GG:function(){return u(this.isoWeekYear()%100,2)},GGGG:function(){return this.isoWeekYear()},GGGGG:function(){return u(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return~~(this.milliseconds()/100)},SS:function(){return u(~~(this.milliseconds()/10),2)},SSS:function(){return u(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+u(~~(t/60),2)+":"+u(~~t%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+u(~~(10*t/6),4)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()}};ae.length;)P=ae.pop(),ue[P+"o"]=n(ue[P],P);for(;oe.length;)P=oe.pop(),ue[P+P]=e(ue[P],2);for(ue.DDDD=e(ue.DDD,3),s.prototype={set:function(t){var e,n;for(n in t)e=t[n],"function"==typeof e?this[n]=e:this["_"+n]=e},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t){var e,n,s;for(this._monthsParse||(this._monthsParse=[]),e=0;12>e;e++)if(this._monthsParse[e]||(n=H([2e3,e]),s="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[e]=new RegExp(s.replace(".",""),"i")),this._monthsParse[e].test(t))return e},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,n,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(n=H([2e3,1]).day(e),s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase()[0]},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e){var n=this._calendar[t];return"function"==typeof n?n.apply(e):n},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,n,s){var i=this._relativeTime[n];return"function"==typeof i?i(t,e,n,s):i.replace(/%d/i,t)},pastFuture:function(t,e){var n=this._relativeTime[t>0?"future":"past"];return"function"==typeof n?n(e):n.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",preparse:function(t){return t},postformat:function(t){return t},week:function(t){return F(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6}},H=function(t,e,n){return O({_i:t,_f:e,_l:n,_isUTC:!1})},H.utc=function(t,e,n){return O({_useUTC:!0,_isUTC:!0,_l:n,_i:t,_f:e})},H.unix=function(t){return H(1e3*t)},H.duration=function(t,e){var n,s,i=H.isDuration(t),a="number"==typeof t,o=i?t._input:a?{}:t,u=Z.exec(t);return a?e?o[e]=t:o.milliseconds=t:u&&(n="-"===u[1]?-1:1,o={y:0,d:~~u[2]*n,h:~~u[3]*n,m:~~u[4]*n,s:~~u[5]*n,ms:~~u[6]*n}),s=new r(o),i&&t.hasOwnProperty("_lang")&&(s._lang=t._lang),s},H.version=U,H.defaultFormat=Q,H.updateOffset=function(){},H.lang=function(t,e){return t?(e?l(t,e):x[t]||_(t),H.duration.fn._lang=H.fn._lang=_(t),void 0):H.fn._lang._abbr},H.langData=function(t){return t&&t._lang&&t._lang._abbr&&(t=t._lang._abbr),_(t)},H.isMoment=function(t){return t instanceof i},H.isDuration=function(t){return t instanceof r},H.fn=i.prototype={clone:function(){return H(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){return M(H(this).utc(),"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var t=this;return[t.year(),t.month(),t.date(),t.hours(),t.minutes(),t.seconds(),t.milliseconds()]},isValid:function(){return null==this._isValid&&(this._isValid=this._a?!c(this._a,(this._isUTC?H.utc(this._a):H(this._a)).toArray()):!isNaN(this._d.getTime())),!!this._isValid},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(t){var e=M(this,t||H.defaultFormat);return this.lang().postformat(e)},add:function(t,e){var n;return n="string"==typeof t?H.duration(+e,t):H.duration(t,e),h(this,n,1),this},subtract:function(t,e){var n;return n="string"==typeof t?H.duration(+e,t):H.duration(t,e),h(this,n,-1),this},diff:function(t,e,n){var s,i,r=this._isUTC?H(t).zone(this._offset||0):H(t).local(),a=6e4*(this.zone()-r.zone());return e=f(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+r.daysInMonth()),i=12*(this.year()-r.year())+(this.month()-r.month()),i+=(this-H(this).startOf("month")-(r-H(r).startOf("month")))/s,i-=6e4*(this.zone()-H(this).startOf("month").zone()-(r.zone()-H(r).startOf("month").zone()))/s,"year"===e&&(i/=12)):(s=this-r,i="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-a)/864e5:"week"===e?(s-a)/6048e5:s),n?i:o(i)},from:function(t,e){return H.duration(this.diff(t)).lang(this.lang()._abbr).humanize(!e)},fromNow:function(t){return this.from(H(),t)},calendar:function(){var t=this.diff(H().startOf("day"),"days",!0),e=-6>t?"sameElse":-1>t?"lastWeek":0>t?"lastDay":1>t?"sameDay":2>t?"nextDay":7>t?"nextWeek":"sameElse";return this.format(this.lang().calendar(e,this))},isLeapYear:function(){var t=this.year();return 0===t%4&&0!==t%100||0===t%400},isDST:function(){return this.zone()<this.clone().month(0).zone()||this.zone()<this.clone().month(5).zone()},day:function(t){var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?"string"==typeof t&&(t=this.lang().weekdaysParse(t),"number"!=typeof t)?this:this.add({d:t-e}):e},month:function(t){var e,n=this._isUTC?"UTC":"";return null!=t?"string"==typeof t&&(t=this.lang().monthsParse(t),"number"!=typeof t)?this:(e=this.date(),this.date(1),this._d["set"+n+"Month"](t),this.date(Math.min(e,this.daysInMonth())),H.updateOffset(this),this):this._d["get"+n+"Month"]()},startOf:function(t){switch(t=f(t)){case"year":this.month(0);case"month":this.date(1);case"week":case"day":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),this},endOf:function(t){return this.startOf(t).add(t,1).subtract("ms",1)},isAfter:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)>+H(t).startOf(e)},isBefore:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)<+H(t).startOf(e)},isSame:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)===+H(t).startOf(e)},min:function(t){return t=H.apply(null,arguments),this>t?this:t},max:function(t){return t=H.apply(null,arguments),t>this?this:t},zone:function(t){var e=this._offset||0;return null==t?this._isUTC?e:this._d.getTimezoneOffset():("string"==typeof t&&(t=p(t)),Math.abs(t)<16&&(t=60*t),this._offset=t,this._isUTC=!0,e!==t&&h(this,H.duration(e-t,"m"),1,!0),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},daysInMonth:function(){return H.utc([this.year(),this.month()+1,0]).date()},dayOfYear:function(t){var e=W((H(this).startOf("day")-H(this).startOf("year"))/864e5)+1;return null==t?e:this.add("d",t-e)},weekYear:function(t){var e=F(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==t?e:this.add("y",t-e)},isoWeekYear:function(t){var e=F(this,1,4).year;return null==t?e:this.add("y",t-e)},week:function(t){var e=this.lang().week(this);return null==t?e:this.add("d",7*(t-e))},isoWeek:function(t){var e=F(this,1,4).week;return null==t?e:this.add("d",7*(t-e))},weekday:function(t){var e=(this._d.getDay()+7-this.lang()._week.dow)%7;return null==t?e:this.add("d",t-e)},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},lang:function(e){return e===t?this._lang:(this._lang=_(e),this)}},P=0;P<ne.length;P++)z(ne[P].toLowerCase().replace(/s$/,""),ne[P]);z("year","FullYear"),H.fn.days=H.fn.day,H.fn.months=H.fn.month,H.fn.weeks=H.fn.week,H.fn.isoWeeks=H.fn.isoWeek,H.fn.toJSON=H.fn.toISOString,H.duration.fn=r.prototype={_bubble:function(){var t,e,n,s,i=this._milliseconds,r=this._days,a=this._months,u=this._data;u.milliseconds=i%1e3,t=o(i/1e3),u.seconds=t%60,e=o(t/60),u.minutes=e%60,n=o(e/60),u.hours=n%24,r+=o(n/24),u.days=r%30,a+=o(r/30),u.months=a%12,s=o(a/12),u.years=s},weeks:function(){return o(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+2592e6*(this._months%12)+31536e6*~~(this._months/12)},humanize:function(t){var e=+this,n=S(e,!t,this.lang());return t&&(n=this.lang().pastFuture(e,n)),this.lang().postformat(n)},add:function(t,e){var n=H.duration(t,e);return this._milliseconds+=n._milliseconds,this._days+=n._days,this._months+=n._months,this._bubble(),this},subtract:function(t,e){var n=H.duration(t,e);return this._milliseconds-=n._milliseconds,this._days-=n._days,this._months-=n._months,this._bubble(),this},get:function(t){return t=f(t),this[t.toLowerCase()+"s"]()},as:function(t){return t=f(t),this["as"+t.charAt(0).toUpperCase()+t.slice(1)+"s"]()},lang:H.fn.lang};for(P in se)se.hasOwnProperty(P)&&(L(P,se[P]),C(P.toLowerCase()));L("Weeks",6048e5),H.duration.fn.asMonths=function(){return(+this-31536e6*this.years())/2592e6+12*this.years()},H.lang("en",{ordinal:function(t){var e=t%10,n=1===~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}}),A&&(module.exports=H),"undefined"==typeof ender&&(this.moment=H),"function"==typeof define&&define.amd&&define("moment",[],function(){return H})}.call(this); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/network/net_map.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/network/net_map.js
deleted file mode 100644
index 421e511f..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/network/net_map.js
+++ /dev/null
@@ -1,947 +0,0 @@
-var graph,paper;
-var zoomIndex = 1;
-var recentCallFlow;
-var recentCallFlowStep;
-var hash_map = new Object();
-var hashVertexDomainXMap = new Object();
-
-var globalCollapseDomanString = "";
-var changeIcon = false;
-var colorSet = ["#0000FF","#8A2BE2","#DEB887",
- "#5F9EA0","#7FFF00","#D2691E","#6495ED","#DC143C",
- "#000000","#A9A9A9","#BDB76B",
- "#FF1493","#48D1CC","#A52A2A","#FF7F50","#DAA520","#32CD32"];
-var colorIndex = 0;
-String.prototype.startsWith = function (str)
-{
- return this.indexOf(str) == 0;
-}
-
-String.prototype.replaceAt=function(index, character) {
- return this.substr(0, index) + character + this.substr(index+character.length);
-}
-function getColor(id1,id2) {
-
- var color = colorSet[colorIndex];
- colorIndex++;
- return color;
-}
-/////////////////////////////////////////////////////////////////////////////////////
- $('.legend-toggle').click(function (a) {
-
- $('.legend-toggle .toggle').hasClass("on")?($('.legend-toggle .toggle').removeClass("on"),$("#legend").fadeOut(350)):($('.legend-toggle .toggle').addClass("on"),$("#legend").fadeIn(350));
-
- });
-
- $('.symbols-toggle').click(function (a) {
-
- $('.symbols-toggle .toggle').hasClass("on")?($('.symbols-toggle .toggle').removeClass("on"),$("#symbols").fadeOut(350)):($('.symbols-toggle .toggle').addClass("on"),$("#symbols").fadeIn(350));
- });
-
-
-
-plotNodes = function(domain) {
-
- if(domain.containerList) {
-
- var containerList = domain.containerList;
-
- for(var i=0; i<containerList.length; i++) {
-
- var container = containerList[i];
- plotContainer(container, 'outContainer');
- }
-
- }
-
- if(domain.innerCList) {
-
- var containerList = domain.innerCList;
-
- for(var i=0; i<containerList.length; i++) {
-
- var container = containerList[i];
- plotContainer(container, 'insideContainer');
- }
-
- }
-
- if(domain.elementList) {
- var elementList = domain.elementList;
-
- for(var i=0; i<elementList.length; i++) {
-
- var element = elementList[i];
- plotElement(element);
- }
-
- }
-}
-
-plotNodesIcon = function(domain) {
-
- if(domain.containerList) {
-
- var containerList = domain.containerList;
-
- for(var i=0; i<containerList.length; i++) {
-
- var container = containerList[i];
- plotContainerIcon(container, 'outContainer');
- }
-
- }
-
- if(domain.innerCList) {
-
- var containerList = domain.innerCList;
-
- for(var i=0; i<containerList.length; i++) {
-
- var container = containerList[i];
- plotContainerIcon(container, 'insideContainer');
- }
-
- }
-
- if(domain.elementList) {
- var elementList = domain.elementList;
-
- for(var i=0; i<elementList.length; i++) {
-
- var element = elementList[i];
- plotElementIcon(element);
- }
-
- }
-
-}
-
-plotExpand = function(container) {
- attributes = container;
- $('#networkModelContainer').append('<div class="expandtri"' + 'id= "' + attributes.name + '"' + 'title= "'+ attributes.name + '"' + ' style="position:absolute;left:'+ (attributes.newXafterColl) +'px;top:' + (attributes.YafterColl) + 'px;width:' + 30 + 'px;height:' + 50 + 'px;z-index:200;">' + '<img src="static/img/map/expand-icon.png" height="42" width="42"></div>');
-
-
-}
-
-plotContainer = function(container, cssType) {
-
- attributes = container;
- //console.log(attributes);
- if(cssType === 'domain'){
- $('#networkModelContainer').append('<div class="container ' + cssType + '" style="position:absolute;left:'+ attributes.left +'px;top:' + attributes.top + 'px;width:' + attributes.width + 'px;height:' + attributes.height + 'px;z-index:-200;' + 'border:1px blue;"><p class="textconetent" style="text-align:center;margin-top:11px;color:white;font-weight:bold;font-size:24px;">' + attributes.name + '</p></div>');
- $('#networkModelContainer').append('<div class="contracttri"' + 'id= "' + attributes.name + '"' + ' style="position:absolute;left:'+ (attributes.left+attributes.width - 40) +'px;top:' + attributes.top + 'px;width:' + 20 + 'px;height:' + (attributes.height/3) + 'px;z-index:200;">' + '<img src="static/img/map/contract-icon.png" height="42" width="42"></div>');
-
-
- }else if(attributes.visibilityType==='invisible'){
-
- $('#networkModelContainer').append('<div ' + '" style="position:absolute;left:'+ (attributes.left+14) +'px;top:' + (attributes.top-5) + 'px;width:' + attributes.width + 'px;height:' + (attributes.height-35) + 'px;' + 'border:1px blue;"><p style="font-weight:bold;font-size:10px;">' + attributes.name + '</p></div>');
-
- }else{
-
- if(!recentCallFlow){
- $('#networkModelContainer').append('<div class="container borderContainer ' + cssType + '" style="position:absolute;left:'+ attributes.left +'px;top:' + attributes.top + 'px;width:' + attributes.width + 'px;height:' + attributes.height + 'px;z-index:-200;' + 'border:1px blue;">' + '</div>');
- //$('#networkModelContainer').append('<p class="speech"' + ' style="position:absolute;left:' + (attributes.left-20) + 'px;top:' + (attributes.top-30) + 'px;width:' + attributes.width + 'px"' + '>'+ attributes.name + '</p>');
- plotHeader(attributes,cssType);
- }else{
- $('#networkModelContainer').append('<div class="container ' + cssType + '" style="position:absolute;left:'+ attributes.left +'px;top:' + attributes.top + 'px;width:' + attributes.width + 'px;height:' + attributes.height + 'px;z-index:-200;' + 'border:1px blue;">' + '</div>');
- //$('#networkModelContainer').append('<p class="speech"' + ' style="position:absolute;left:' + (attributes.left-20) + 'px;top:' + (attributes.top-30) + 'px;width:' + attributes.width + 'px"' + '>'+ attributes.name + '</p>');
- plotHeader(attributes,cssType);
- }
-
- }
-
- plotNodes(container);
-
- }
-
-plotContainerIcon = function(container, cssType) {
- attributes = container;
- //console.log(attributes);
- if(cssType === 'domain'){
- $('#networkModelContainer').append('<div class="container ' + cssType + '" style="position:absolute;left:'+ attributes.left +'px;top:' + attributes.top + 'px;width:' + attributes.width + 'px;height:' + attributes.height + 'px;z-index:-200;' + 'border:1px blue;"><p class="textconetent" style="text-align:center;margin-top:11px;color:white;font-weight:bold;font-size:24px;">' + attributes.name + '</p></div>');
- $('#networkModelContainer').append('<div class="contracttri"' + 'id= "' + attributes.name + '"' + ' style="position:absolute;left:'+ (attributes.left+attributes.width - 40) +'px;top:' + attributes.top + 'px;width:' + 20 + 'px;height:' + (attributes.height/3) + 'px;z-index:200;">' + '<img src="static/img/map/contract-icon.png" height="42" width="42"></div>');
-
- }else if(attributes.visibilityType==='invisible'){
-
- $('#networkModelContainer').append('<div ' + '" style="position:absolute;left:'+ (attributes.left+14) +'px;top:' + (attributes.top-5) + 'px;width:' + attributes.width + 'px;height:' + (attributes.height-35) + 'px;' + 'border:1px blue;"><p style="font-weight:bold;font-size:10px;">' + attributes.name + '</p></div>');
- }
- else{
- if(!recentCallFlow){
- $('#networkModelContainer').append('<div class="container borderContainer ' + cssType + '" style="position:absolute;left:'+ attributes.left +'px;top:' + attributes.top + 'px;width:' + attributes.width + 'px;height:' + attributes.height + 'px;z-index:-200;' + 'border:1px blue;">' + '</div>');
- //$('#networkModelContainer').append('<p class="speech"' + ' style="position:absolute;left:' + (attributes.left-20) + 'px;top:' + (attributes.top-30) + 'px;width:' + attributes.width + 'px"' + '>'+ attributes.name + '</p>');
- plotHeader(attributes,cssType);
- }else{
- $('#networkModelContainer').append('<div class="container ' + cssType + '" style="position:absolute;left:'+ attributes.left +'px;top:' + attributes.top + 'px;width:' + attributes.width + 'px;height:' + attributes.height + 'px;z-index:-200;' + 'border:1px blue;">' + '</div>');
- //$('#networkModelContainer').append('<p class="speech"' + ' style="position:absolute;left:' + (attributes.left-20) + 'px;top:' + (attributes.top-30) + 'px;width:' + attributes.width + 'px"' + '>'+ attributes.name + '</p>');
- plotHeader(attributes,cssType);
- }
- }
-
- plotNodesIcon(container);
-
-}
-
-joint.shapes.basic.newRect = joint.shapes.basic.Generic.extend({
-
- markup: '<g class="rotatable"><g class="scalable"><rect/></g><text/></g>',
-
- defaults: joint.util.deepSupplement({
-
- type: 'basic.newRect',
- attrs: {
- 'rect': { fill: 'white', stroke: 'black', 'follow-scale': true, width: 80, height: 40},
- 'text': { 'font-size': 14, 'ref-x': .5, 'ref-y': .5, ref: 'rect', 'y-alignment': 'middle', 'x-alignment': 'middle'}
- },
- shortname: 'Transcoder',
- description: 'Reconciles mismatched CODECs',
- longname: 'ACME SBC device providing dedicated Transcoder function',
- vendor: 'ORACLE ACME',
- primary_function: 'Allows endpoints utilizing different CODECs to communicate',
- key_interface: 'SBC, MSC',
- network_domain: 'Universal Services Platform - Access Module Group - ISA Core Office',
-
-}, joint.shapes.basic.Generic.prototype.defaults)});
-
-plotHeader = function(attributes,cssType){
-
- var nameLength = attributes.name.length;
- var headName;
- if (nameLength>22){
- headName = attributes.name.substring(0,12) + "-\n" + attributes.name.substring(12);
-
- }else{
- headName = attributes.name;
- }
-
- var thisElement = new joint.shapes.basic.newRect({
- position: { x: attributes.left+10, y: attributes.top + 4 },
- size: { width: attributes.width-20, height: 15 },
- attrs: {
- rect: { fill: "gray" ,stroke: "gray",opacity:"0.8"},
- text: { text: headName, fill: 'black' ,'font-size':10, 'font-weight':'700','text-transform': 'capitalize'}
-
- }
- });
- if(cssType==="outContainer"){
-
- thisElement.attr({
- rect:{fill:"#e7e7e7", stroke: "#e7e7e7",opacity:"0.8"}
- });
-
- }else{
-
- thisElement.attr({
- rect:{fill:"ghostwhite", stroke: "ghostwhite",opacity:"0.8"}
- });
-
-
- }
- graph.addCells([thisElement]);
-
-}
-plotElement = function(element) {
-
- if(element.left){
- if(!element.id.startsWith("ue")){
- left = element.left ;
- var thisColor = element.bgColor;
- var thisElement = new joint.shapes.basic.newRect({
- id:element.id,
- position: { x: element.left, y: element.top },
- size: { width: element.width, height: element.height*2 },
-
- attrs: {
- rect: { fill: "lightgray" ,stroke: "gray"},
- text: { text: element.name.replace(" ","\n"), fill: 'black' ,'font-size': 9, 'font-weight': 'bold','font-variant': 'small-caps', 'text-transform': 'capitalize'}
-
- }
-
- });
- if(!recentCallFlow){
- thisElement.attr({
- rect:{fill:element.bgColor, stroke: thisColor}
- });
-
- }
- //thisElement.attr({rect:{style:{"pointer-events":"none"}}});
- thisElement.set('bg-color', (element.bgColor!= null?element.bgColor:"blue"));
- thisElement.set('icon_path', (element.imgFileName != null? element.imgFileName: "static/img/map/icons/sgw-icon.png"));
- thisElement.set('shortname', element.name);
- thisElement.set('description', element.details.description);
- thisElement.set('longname', element.details.display_longname);
- thisElement.set('vendor', element.details.vendor);
- thisElement.set('primary_function', element.details.primary_function);
- thisElement.set('key_interface', element.details.key_interfaces);
- thisElement.set('location', element.details.location);
- thisElement.set('network_function', (element.details.network_function=="V")? "Virtual" : "Physical" );
- if(element.borderType == 'dashed'){
-
- thisElement.attr({
- rect: {stroke: 'black','stroke-width':"2",'stroke-dasharray': "5,2" },
- });
-
- }
-
-
- hash_map[element.name+'']=thisElement.name;
- graph.addCells([thisElement]);
-
- }else{
- plotElementIcon(element);
- }
- }
-
-}
-
-joint.shapes.basic.DecoratedRect = joint.shapes.basic.Generic.extend({
-
- markup: '<g class="rotatable"><g class="scalable"><rect/></g><image/><text/></g>',
-
- defaults: joint.util.deepSupplement({
-
- type: 'basic.DecoratedRect',
- size: { width: 100, height: 60 },
- attrs: {
- 'rect': { fill: 'lightgray', width: 100, height: 60 },
- 'text': { 'font-size': 14, text: '', 'ref-x': .5, 'ref-y': .5, ref: 'rect', 'y-alignment': 'middle', 'x-alignment': 'middle', fill: 'black'},
- 'image': { ref: 'rect', width: 35, height: 25}
- },
- shortname: 'Transcoder',
- description: 'Reconciles mismatched CODECs',
- longname: 'ACME SBC device providing dedicated Transcoder function',
- vendor: 'ORACLE ACME',
- primary_function: 'Allows endpoints utilizing different CODECs to communicate',
- key_interface: 'SBC, MSC',
- network_domain: 'Universal Services Platform - Access Module Group - ISA Core Office',
-
- }, joint.shapes.basic.Generic.prototype.defaults)
-});
-
-plotElementIcon = function(element) {
-
-
- if(element.left){
-
- left = element.left ;
- uetop = element.top;
- if(element.id.startsWith("ue")) {
- uetop = element.top - 30;
- } else {
- uetop = element.top ;
- }
- var thisElement = new joint.shapes.basic.DecoratedRect({
- id:element.id,
- position: { x: element.left, y: uetop },
- size: { width:element.width, height: element.height*2 },
- // style:{'pointer-events':'none'},
- attrs: {
- //image: { 'xlink:href': 'static/img/map/icons/sgw-icon.png'
- image: { 'xlink:href': element.imgFileName}
- //rect:{style:{"pointer-events":"none"}}
- // style:{'pointer-events':'none'}
- // 'pointer-events':'none'
- }
- });
- // thisElement.attr({rect:{style:{"pointer-events":"none"}}});
- thisElement.set('bg-color', element.bgColor);
- thisElement.set('icon_path', element.imgFileName);
- thisElement.set('shortname', element.name);
- thisElement.set('description', element.details.description);
- thisElement.set('longname', element.details.display_longname);
- thisElement.set('vendor', element.details.vendor);
- thisElement.set('primary_function', element.details.primary_function);
- thisElement.set('key_interface', element.details.key_interfaces);
- thisElement.set('location', element.details.location);
- thisElement.set('network_function', (element.details.network_function=="V")? "Virtual" : "Physical");
-
- if(!recentCallFlow ){
- thisElement.attr({
- rect:{fill:element.bgColor }
- });
-
- }
- if(element.borderType == 'dashed'){
-
- thisElement.attr({
- rect: {stroke: 'lightskyblue','stroke-width':"2",'stroke-dasharray': "5,2" },
- });
-
- }
- if(element.id.startsWith("ue")){
- thisElement.attr({
- rect: {fill: 'white', style:{'pointer-events':'none'}},
- image: { style:{'pointer-events':'none'}}
- });
-
- //thisElement.css('pointer-events', 'none');
- // paper.thisElement.css('pointer-events', 'none');
- }
- hash_map[element.name+'']=thisElement.name;
- graph.addCells([thisElement]);
-
- }
-
-}
-
-
-plotNetMapCallFlow = function(callFlow, callFlowStep, collapsedDomainString, expandedDomainString, icon) {
-
- init();
-
- recentCallFlow = callFlow; //callFlow != null ? callFlow : recentCallFlow;
- recentCallFlowStep = callFlowStep; //callFlowStep != null ? callFlowStep : recentCallFlowStep;
-
- // $.get( "static/trisim_files/network_map.yml", function( data ) {
-
- if(callFlow != null &&callFlow.title != null) {
-
- $(".map-title").html(callFlow.title);
-
- }else{
- $(".map-title").html("Network Map");
-
- }
- $.post('network_model.htm?action=layout', {
- collapsedDomains : collapsedDomainString,
- expandedDomains : expandedDomainString
- }, function(data) {
- var yamlObject = jsyaml.load(data);
-
- var layout = yamlObject.domainList;
- for(var i=0; i<layout.length; i++) {
- domain = layout[i];
- if(icon)
- plotContainerIcon(domain,'domain');
- else
- plotContainer(domain,'domain');
-
- hashVertexDomainXMap[domain.name] = domain.left;
- }
-
- var collapseLayout = yamlObject.collapsedDomainList;
- globalCollapseDomanString = "";
- for(var i=0; i<collapseLayout.length; i++) {
- domain = collapseLayout[i];
- globalCollapseDomanString += (domain.name + ",");
- plotExpand(domain);
- addExpandEvents();
-
- // some hardcoded hack; need to revise; if any one if these are collapsed , then we should not display hard coded links in addLinkVertices method
- if((globalCollapseDomanString.indexOf("USP") > -1)|| (globalCollapseDomanString.indexOf("RAN") > -1)|| (globalCollapseDomanString.indexOf("EPC") > -1)) {
- hashVertexDomainXMap["USP"] = -999;
- hashVertexDomainXMap["RAN"] = -999;
- hashVertexDomainXMap["EPC"] = -999;
- }
-
- }
-
-
- addCollapseEvents(); //onclick="alert(\'hello\')"
- //console.log(yamlObject);
- //addLink('EATF','SDG');
- if(icon == false)
- $('.icons-toggle .toggle').removeClass("on");
-
-
- if(callFlow != null && callFlow.id != null) {
-
- // var callFlowLinkFile = callFlow + "_" + callFlowStep + ".yml";
-
- $.post('network_model.htm?action=callflow', {
- callFlowName : callFlow.id,
- callFlowStep : callFlowStep
- }, function( data ) {
-
- try{
- var yamlObject = jsyaml.load(data);
- //addLink("EATF","MRF");
- var layout = yamlObject.linkList;
-
- var hashLinkElements = new Object();
- for(var i=0; i<layout.length; i++) {
- domain = layout[i];
- try {
- if(hashLinkElements[domain.s] != undefined)
- hashLinkElements[domain.s] +=1;
- else hashLinkElements[domain.s] =1;
- if(hashLinkElements[domain.d] != undefined )
- hashLinkElements[domain.d] +=1;
- else hashLinkElements[domain.d] =1;
- } catch (exception) {}
- }
-
- for(var i=0; i<layout.length; i++) {
- domain = layout[i];
- try {
- addLink(domain.s,domain.d, hashLinkElements,'none');
- } catch (exception) {}
- }
-
- //console.log(yamlObject);
- }
- catch(err) {}
-
- $.post('network_model.htm?action=callflowAdditional', {
- callFlowName : callFlow.id,
- callFlowStep : callFlowStep
- }, function( data ) {
-
- try{
- var yamlObject = jsyaml.load(data);
- //addLink("EATF","MRF");
- var layout = yamlObject.linkList;
- if(layout != undefined)
- for(var i=0; i<layout.length; i++) {
- domain = layout[i];
- try {
- var source = domain.s.split(",");
- var destination = domain.d.split(",");
- addLinkVertices(source[0],source[1],source[2], source[3], destination[0], destination[1], destination[2],'none');
-
- } catch (exception) {}
- }
-
- //make cells active
- var activeIds = yamlObject.activeIds;
- if(activeIds != undefined)
- for(var i=0; i<activeIds.length; i++) {
-
- var chosenElement1 = graph.getCell(activeIds[i]);
- chosenElement1.attr({
- rect: { fill: chosenElement1.get('bg-color')}
- });
- }
-
- // disconnect some links
-
- var disconnectLinks = yamlObject.disconnectLinks;
- if(disconnectLinks != undefined)
- var availableLinks = graph.getLinks();
- //var availableLinks = paper.model.getLinks();
- for(var i=0; i<disconnectLinks.length; i++) {
-
- for(var j=0;j<availableLinks.length; j++) {
-
- if(availableLinks[j].attributes.source.id != undefined ) {
-
-
- if(disconnectLinks[i].s == availableLinks[j].attributes.source.id && disconnectLinks[i].d == availableLinks[j].attributes.target.id) {
-
- availableLinks[j].remove();
- break;
- }
-
- }
- }
- }
-
-
- //console.log(yamlObject);
- }
- catch(err) {}
- finally {
-
- makeLinksVisible();
- }
-
-
- });
-
-
- });
-
-
-
-
-
-
- }
-
-
- });
-
-
-
-
-
-
-};
-
-
-makeLinksVisible = function() {
-
- var linkElements = $(".link");
-
- for(var i= 0;i<linkElements.length;i++) {
- var pathElement = linkElements[i].childNodes[0];
- pathElement.attributes.display.value = 'inline';
- }
-
-
-};
-
-parseYaml = function(callFlow, callFlowStep, collapsedDomainString, expandedDomainString) {
- $('#containerScrollDiv').css("z-index",0);
- plotNetMapCallFlow(callFlow, callFlowStep, collapsedDomainString, expandedDomainString,false);
-
-};
-
-
-parseYamlIcon = function(callFlow, callFlowStep, collapsedDomainString, expandedDomainString){
- $('#containerScrollDiv').css("z-index",0);
- plotNetMapCallFlow(callFlow, callFlowStep, collapsedDomainString, expandedDomainString,true);
-
-};
-
-addLinkVertices = function(sourceX,sourceY, sourceDomain, sourceLabel, destinationX, destinationY, destinationDomain, display){
-
- if(Number(hashVertexDomainXMap[sourceDomain]) == -999)
- return ;
-
- var link = new joint.dia.Link({
- source: { x: Number(hashVertexDomainXMap[sourceDomain]) + Number(sourceX), y: Number(sourceY)},
- target: { x: Number(hashVertexDomainXMap[destinationDomain]) + Number(destinationX), y: Number(destinationY)},
- attrs: {
- '.connection': {
- stroke: '#b5af4c',
- //stroke:getColor(id1,id2),
- 'stroke-width': 2,
- 'display' : (display == undefined ? 'block' : display)
- }
- }
-
- });
-
- if(sourceLabel != "-" ) {
-
- link.label(0, {
- position: .5,
- attrs: {
- text: { fill: 'black', text: sourceLabel.replace(" ","\n") }
- }
- });
-
- }
-
- graph.addCells([link]);
- link.toBack();
-
-}
-
-addLink = function(id1,id2, hashLinkElements, display){
-
- var elementId1 = graph.getCell(id1);
- var elementId2 = graph.getCell(id2);
- var elementId1x = elementId1.attributes.position.x;
- var elementId1y = elementId1.attributes.position.y;
- var elementId2x = elementId2.attributes.position.x;
- var elementId2y = elementId1.attributes.position.y;
-
-
- var link = new joint.dia.Link({
- source: { id: elementId1.id},
- target: { id: elementId2.id},
- //source: { x: elementId1.attributes.position.x+10, y: elementId1.attributes.position.y+10},
- //target: { x: elementId2.attributes.position.x+10, y: elementId2.attributes.position.y+10},
- router: { name: 'manhattan' },
- connector: { name: 'normal' },
- attrs: {
- '.connection': {
- //stroke: '#333333',
- stroke:getColor(id1,id2),
- 'stroke-width': 2,
- 'z-index' :-300,
- 'display' : (display == undefined ? 'block' : display)
- },
-
- },
- });
-
- graph.addCells([link]);
- link.toBack();
- //link.set('vertices', [{ x: (elementId1x + elementId2x)/2 , y: (elementId1y + elementId2y)/2 }]);
- //link.translate(10, 10);
-
-
- var chosenElement1 = graph.getCell(id1);
- chosenElement1.attr({
- rect: { fill: chosenElement1.get('bg-color')}
- });
- var chosenElement2 = graph.getCell(id2);
- chosenElement2.attr({
- rect: { fill: chosenElement2.get('bg-color')}
- });
-
- // logic to avoid overlapping links ; create dummy hidden objects at the vertices so that smart routing will avoid these obstacle when plotting the link
- if(hashLinkElements[id1]> 0 || hashLinkElements[id2] >0) {
- var linkElement = $("[model-id^=" + link.id +"]");
- var pathElement = linkElement.children("path")[0];
- var pathCoordinates = pathElement.attributes.d.value.split(" ");
- for(var i = 1; i<pathCoordinates.length/2 ;i+=2) {
-
- try{
- // plot an element on the starting points
- plotHiddenDummyElement(link.id+"-"+i,Number(pathCoordinates[i]), Number(pathCoordinates[i+1]) );
- }catch(err){
- console.log(err);
- }
-
- try{
- // plot half way on the edge too
- plotHiddenDummyElement(link.id+"--"+i,(Number(pathCoordinates[i])+Number(pathCoordinates[i+2]))/2, (Number(pathCoordinates[i+1])+Number(pathCoordinates[i+3]))/2 );
- }catch(err){}
-
- }
- var newPathCoordinates = "M";
- // in IE every XandY coordinates pair is delimited with L; so two x coordinates are 2 elements apart. In firefox and chrome, they are one element apart. For more clarification,
- // check the pathCoordinates in debug window
- var nextIndex = Browser.isIE == true ? 3 : 2;
- for(var i = 1; i<pathCoordinates.length ;i++) {
- if( i == 1 ) {
- if(pathCoordinates[i] == pathCoordinates[i+nextIndex]) {// x coordinates are the same
- var originalI = Number(pathCoordinates[i]);
- var newI = originalI + (Number(hashLinkElements[id1])*2);
-
- // iteratively change the x coordinates for all the segments
- for(var j = i; j<pathCoordinates.length; j+=nextIndex) {
- if(pathCoordinates[j] == originalI)
- pathCoordinates[j] = newI;
- }
-
- }
- else if(pathCoordinates[i+1] == pathCoordinates[i+1+nextIndex]) {// y coordinates are the same
-
- var originalI = Number(pathCoordinates[i+1]);
- var newI = originalI - (Number(hashLinkElements[id1])*2);
-
- // iteratively change the y coordinates for all the segments
- for(var j = i+1; j<pathCoordinates.length; j+=nextIndex) {
- if(pathCoordinates[j] == originalI)
- pathCoordinates[j] = newI;
- }
-
- }
-
- hashLinkElements[id1]-=1;
- }
- newPathCoordinates += " "+ pathCoordinates[i];
- }
-
- pathElement.attributes.d.value = newPathCoordinates;
-
- }
- //
-
-};
-
-plotHiddenDummyElement = function(dummyId, left, top) {
-
- var thisElement = new joint.shapes.basic.newRect({
- id:dummyId,
- position: { x: left-5, y: top-5 },
- size: { width: 10, height: 10 }
- });
-
- thisElement.attr('./display', 'none');
- graph.addCells([thisElement]);
-
-};
-
-
-////////////////////////////////////////////////////////////////////////////////////////////
-init = function() {
-
- $('.close-btn').click(function (a) {
- $('#popup').fadeOut();
- });
-
-
- if ( window.name === tsWindow.detailWindow && tsWindow.newWindow !== null ) {
- $("#map-controls").fadeOut();
- } else {
- $("#map-controls").fadeIn();
- }
- colorIndex= 0;
-
- if(!changeIcon){
- //$('.legend-toggle .toggle').addClass("on");
- //$("#legend").fadeIn(350);
- }
-
- if(typeof graph!=='undefined'){
- graph.clear();
- $('#networkModelContainer').empty();
- }
- graph = new joint.dia.Graph;
-
- paper = new joint.dia.Paper({
- interactive: false,
- el: $('#networkModelContainer'),
- width: "1400",
- height: 1000,
- model: graph,
- gridSize: 1
- });
-
- //paper.setOrigin(100,100);
-
- // paper.$el.css('pointer-events', 'none');
- paper.on('cell:pointerdown',
- function(cellView, evt, x, y) {
-
- var clickedElement = graph.getCell(cellView.model.id);
- if(clickedElement.get('icon_path')!=null){
-
- // if (clickedElement.get('description') != '') {
-
- $('#popupImg').attr('src',clickedElement.get('icon_path'));
- $("#popupImg").css("background-color",clickedElement.get('bg-color'));
- $('#shortname').text(clickedElement.get('shortname'));
- $('#longname').text(clickedElement.get('longname'));
- $('#name').text(clickedElement.get('longname'));
- $('#description').text(clickedElement.get('description'));
- $('#vendor').text(clickedElement.get('vendor'));
- $('#primary_function').text(clickedElement.get('primary_function'));
- $('#key_interface').text(clickedElement.get('key_interface'));
- $('#location').text(clickedElement.get('location'));
- $('#network_function').text(clickedElement.get('network_function'));
- $('#popup').fadeIn();
- // }
- }
-
-
- }
-
-
- );
-
- /**
- * Zoom In/Out Button
- */
- var w = $("#networkModelContainer").css("width");
- var h = $("#networkModelContainer").css("height");
- $('#btn-zoom-in').unbind("click");
- $('#btn-zoom-in').click(function (a) {
- zoomIndex+=0.04;
- //$("#containerScrollDiv").css("transform",'scale('+ zoomIndex + ')');
- //$("#containerScrollDiv").css("transform-origin",'top left');
- $("#networkModelContainer").css("transform",'scale('+ zoomIndex + ')');
- $("#networkModelContainer").css("transform-origin",'top left');
- $("#networkModelContainer").css("width",w);
- $("#networkModelContainer").css("height",h);
- $("#containerScrollDiv").mCustomScrollbar('update');
- //$("#containerScrollDiv").mCustomScrollbar({
- // axis:"yx" //horizontal scrollbar
- // });
-
-
- });
- $('#btn-zoom-out').unbind("click");
-
- $('#btn-zoom-out').click(function (a) {
-
- if(zoomIndex > 0.9){
- zoomIndex-=0.04;
- //$("#containerScrollDiv").css("transform",'scale('+ zoomIndex + ')');
- //$("#containerScrollDiv").css("transform-origin",'top left');
- $("#networkModelContainer").css("transform",'scale('+ zoomIndex + ')');
- $("#networkModelContainer").css("transform-origin",'top left');
- $("#networkModelContainer").css("width",w);
- $("#networkModelContainer").css("height",h);
-
- //$("#containerScrollDiv").mCustomScrollbar('update');
- $("#containerScrollDiv").mCustomScrollbar('destroy');
- $("#containerScrollDiv").mCustomScrollbar({
- axis:"yx", //horizontal scrollbar
- theme:"3d-thick-dark",
- scrollButtons:{enable:true},
- alwaysShowScrollbar:2
- });
- }
-
- });
-
-
- $('.icons-toggle').unbind("click");
- $('.icons-toggle').click(function (a) {
-
- if($('.icons-toggle .toggle').hasClass("on")){
-
- changeIcon = true;
- $("#networkModelContainer").empty();
- parseYamlIcon(recentCallFlow, recentCallFlowStep, globalCollapseDomanString);
-
- }else{
-
- changeIcon = true;
- $("#networkModelContainer").empty();
- parseYaml(recentCallFlow, recentCallFlowStep, globalCollapseDomanString);
-
- }
-
- });
-
- paper.$el.addClass('connecting');
-
-
-};
-
-
-
- addCollapseEvents = function() {
-
- /*$(document).on("click",".contract",function() {
- alert("click bound to document listening for #test-element");
- });
- */
- var contractElement =$('.contracttri');
-
- contractElement.unbind("click");
- contractElement.css('cursor', 'pointer');
- contractElement.click(function() {
-
- if($('.icons-toggle .toggle').hasClass("on")){
-
- $("#networkModelContainer").empty();
- parseYamlIcon(recentCallFlow, recentCallFlowStep, (globalCollapseDomanString + this.id));
-
- }else{
-
- $("#networkModelContainer").empty();
- parseYaml(recentCallFlow, recentCallFlowStep, (globalCollapseDomanString + this.id));
-
- }
-
- });
-
- };
-
-
- addExpandEvents = function() {
-
- /*$(document).on("click",".contract",function() {
- alert("click bound to document listening for #test-element");
- });
- */
- var contractElement =$('.expandtri');
-
- contractElement.unbind("click");
- contractElement.css('cursor', 'pointer');
- contractElement.click(function() {
-
- if($('.icons-toggle .toggle').hasClass("on")){
-
- $("#networkModelContainer").empty();
- parseYamlIcon(recentCallFlow, recentCallFlowStep, globalCollapseDomanString, (this.id));
-
- }else{
-
- $("#networkModelContainer").empty();
- parseYaml(recentCallFlow, recentCallFlowStep, globalCollapseDomanString, (this.id));
-
- }
-
- });
-
-};
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/adminService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/adminService.js
deleted file mode 100644
index cb5fb80d..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/adminService.js
+++ /dev/null
@@ -1,141 +0,0 @@
-app.factory('AdminService', function ($http, $q) {
- return {
- getRoles: function() {
- return $http.get('get_roles')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getRoleFunctionList: function() {
- return $http.get('get_role_functions')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getFnMenuItems: function(){
-
- return $http.get('admin_fn_menu')
- .then(function(response) {
- if (typeof response.data === 'object') {
-
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getCacheRegions: function() {
- return $http.get('get_regions')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getUsageList: function() {
- return $http.get('get_usage_list')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getBroadcastList: function() {
- return $http.get('get_broadcast_list')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getBroadcast: function(messageLocationId, messageLocation, messageId) {
- return $http.get('get_broadcast?message_location_id='+messageLocationId + '&message_location=' + messageLocation + ((messageId != null) ? '&message_id=' + messageId : ''))
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getCollaborateList: function() {
- return $http.get('get_collaborate_list')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getRole: function(roleId) {
-
- return $http.get('get_role?role_id=' + roleId)
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }
- };
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/headerService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/headerService.js
deleted file mode 100644
index 4566c8fa..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/headerService.js
+++ /dev/null
@@ -1,70 +0,0 @@
-var menuStructureConvert = function(menuItems) {
- var megaMenuDataObjectTemp = [
- {
- text: "ECOMP",
- children:menuItems
- },
- {
- text: "Help",
- children: [{
- text:"Contact Us",
- url:"javascript:angular.element('[ng-controller=headerController]').scope().redirectLink('contact');"
- },
- {
- text:"Get Access",
- url:"javascript:angular.element('[ng-controller=headerController]').scope().redirectLink('access');"
- }]
- }
- ];
- return megaMenuDataObjectTemp;
-};
-var unflatten = function( array, parent, tree ){
- tree = typeof tree !== 'undefined' ? tree : [];
- parent = typeof parent !== 'undefined' ? parent : { menuId: null };
- var children = _.filter( array, function(child){ return child.parentMenuId == parent.menuId; });
-
- if( !_.isEmpty( children ) ){
- if( parent.menuId === null ){
- tree = children;
- }else{
- parent['children'] = children
- }
- _.each( children, function( child ){ unflatten( array, child ) } );
- }
-
- return tree;
- }
-app.service('HeaderService', function ($http,$log, $q,UserInfoService) {
- return{
-
- getUserNameFromSession : function(){
- UserInfoService.getFunctionalMenuStaticDetailSession()
- .then(function (res) {
- $scope.userName = res.userName;
- $scope.redirectUrl = res.portalUrl;
- });
- },
- getTopMenuStaticInfo:function() {
- var promise = UserInfoService.getFunctionalMenuStaticDetailShareContext();
- promise.then(
- function(res) {
- if(res==null || res==''){
- $log.info('failed getting static User information');
- this.getUserNameFromSession();
- }else{
- $log.info('Received static User information');
- var resData = res;
- $scope.inputUserInfo(resData);
- $scope.userProfile.fullName = $scope.userProfile.firstName+ ' '+ $scope.userProfile.lastName;
- return $scope.userProfile;
- }
- },
- function(err) {
- $log.info('failed getting static User information');
- }
- );
- }
- }
- }
-);
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/leftMenuService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/leftMenuService.js
deleted file mode 100644
index 12e19df2..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/leftMenuService.js
+++ /dev/null
@@ -1,35 +0,0 @@
-function isRealValue(obj){
- return obj && obj !== "null" && obj!== "undefined";
-}
-app.factory('LeftMenuService', function ($http,$log, $q) {
- return {
- getLeftMenu: function() {
- return $http.get('get_menu')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
- getAppName: function() {
- return $http.get('get_app_name')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }
-
- };
-});
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/profileService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/profileService.js
deleted file mode 100644
index ca4252df..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/profileService.js
+++ /dev/null
@@ -1,79 +0,0 @@
-
-app.factory('ProfileService', function ($http, $q) {
- return {
- getProfile: function() {
- return $http.get('get_user')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getProfilePagination: function(pageNum,viewPerPage) {
- return $http.get('get_user_pagination?pageNum=' + pageNum + '&viewPerPage=' + viewPerPage)
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getPostProfile: function() {
- return $http.get('post_search_sample')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getProfileDetail: function(profileId) {
- return $http.get('get_profile?profile_id='+profileId)
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- },
-
- getSelfProfileDetail: function() {
- return $http.get('get_self_profile')
- .then(function(response) {
- if (typeof response.data === 'object') {
- return response.data;
- } else {
- return $q.reject(response.data);
- }
-
- }, function(response) {
- // something went wrong
- return $q.reject(response.data);
- });
- }
- };
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/userInfoService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/userInfoService.js
deleted file mode 100644
index 66aa1c18..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/userInfoService.js
+++ /dev/null
@@ -1,32 +0,0 @@
-app.factory('UserInfoService', function ($http, $q,$log) {
- return {
- getFunctionalMenuStaticDetailShareContext: function(contextId,key) {
- var deferred = $q.defer();
- $http({
- method: "GET",
- url: "get_userinfo",
- }).success( function(res) {
- if(res==null || res=='')
- $log.info('Not be able to get User Info via shared context');
- deferred.resolve(res);
- }).error( function(status) {
- deferred.reject(status);
- });
- return deferred.promise;
- },
- getFunctionalMenuStaticDetailSession: function() {
- var deferred = $q.defer();
- $http({
- method: "GET",
- url: "get_topMenuInfo",
- }).success(function(res) {
- if(res==null || res=='')
- $log.info('Not be able to get User Info via shared context');
- deferred.resolve(res);
- }).error( function(status) {
- deferred.reject(status);
- });
- return deferred.promise;
- }
- };
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/socket/peerBroadcast.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/socket/peerBroadcast.js
deleted file mode 100644
index d056ce48..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/socket/peerBroadcast.js
+++ /dev/null
@@ -1,103 +0,0 @@
-
-var output = $('#peerBroadcastSection');
-var websocket = '';
-var currentUser = '';
-var remoteUser = '';
-var f = '';
-var popupService;
-
-function setPopupService(_popupService) {
- popupService = _popupService;
-}
-
-function socketSetup(initialPageVisit,_currentUser, _remoteUser, _f) {
-
-
-
- if( true) {
-
- var href = window.location.href;
- var hostPatt = new RegExp(window.location.host +"/[^/]*");
- var res = hostPatt.exec(href);
- var protocol = window.location.protocol.replace("http","ws");
-
- var signalingServerPath = protocol + "//" + res + "/contact";
- var wsUri = signalingServerPath;
- console.log("Connecting to " + wsUri);
- websocket = new WebSocket(wsUri);
- //localStorage.notifySocket = JSON.stringify(websocket);
- //window.top.notifySocket = websocket;
-
- currentUser = _currentUser;
- remoteUser = _remoteUser;
- f = socketSend;
-
-
- }
-
- //var websocket = JSON.parse(localStorage.notifySocket || "{}") ;
- if( websocket != null) {
- websocket.onopen = function(evt) { onOpen(evt); };
- websocket.onmessage = function(evt) { onMessage(evt); };
- websocket.onerror = function(evt) { onError(evt); };
-
- }
-
- //if(f != undefined)
- // f();
-
- //window.top.notifySocket.send("");
-}
-
-
-function socketSend(currentUser, remoteUser) {
-
-
-
- websocket.send(JSON.stringify({
- from: currentUser,
- to: remoteUser
- }));
-
- //window.top.notifySocket.send("");
-}
-
-
-
-
-function onOpen(evt) {
- console.log("onOpen");
- //writeToScreen("CONNECTED");
-
- if(f != undefined)
- f(currentUser, remoteUser);
-
-}
-
-function onMessage(evt) {
- if (typeof evt.data == "string") {
- writeToScreen("RECEIVED (text): " + evt.data);
-
- if(popupService != undefined) {
- popupService.showMessage("Call Request","You are being contacted by " + JSON.parse(evt.data).from + ". Please click on the online icon and then click view");
-
- }
- //if (confirm("You are being contacted by " + JSON.parse(evt.data).from )) {
-
- //}
-
- } else {
- writeToScreen("RECEIVED (binary): " + evt.data);
- }
-}
-
-function onError(evt) {
- writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
-}
-
-function writeToScreen(message) {
- var pre = document.createElement("p");
- pre.style.wordWrap = "break-word";
- pre.innerHTML = message;
- output.append(pre);
-}
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/utils/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/utils/dummy.txt
deleted file mode 100644
index e69de29b..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/utils/dummy.txt
+++ /dev/null
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/utils/sandbox-resources.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/utils/sandbox-resources.html
deleted file mode 100644
index d04eba9c..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/utils/sandbox-resources.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/demo.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/base.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/btn.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/dtpk.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/frms.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/sldr.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/style.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/tbs.css" >
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/dummy.txt
deleted file mode 100644
index e69de29b..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/dummy.txt
+++ /dev/null
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/admin_closed_loop.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/admin_closed_loop.html
deleted file mode 100644
index a3a5dfc1..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/admin_closed_loop.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<div style="margin-left:0px; margin-right:50px;" id="fnMenueContent">
- <div class="pageTitle" align="left">
-
- <h1 class="heading1" style="margin-top:20px;">Closed Loop</h1>
- <br/>
- <br>
- </div>
- <div style="margin-right: 20px;text-align: justify;text-align-last:auto;">
- Cloop Server
- </div>
- <br>
-
- <div id="hiddenCamundaDiv" style="width:500px;"></div>
- <br>
- <iframe id="camundaFrame"
- ng-src="{{camunda_cockpit_url}}"
- width="100%" height="500"
- ></iframe>
-</div>
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/broadcast.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/broadcast.html
deleted file mode 100644
index 9ffd9810..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/broadcast.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<div style="width:80%;margin-bottom:20px">
- <br/>
- <h1 class="heading1">Broadcast Message Edit</h1>
- <br/>
-
- <div ng-controller="broadcastController" >
- Please edit the broadcast message details below:&nbsp;<br><br>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Message Text:</label><BR>
- <textarea name="comment" ng-model="broadcastMessage.messageText" rows="5" cols="200" style="height:100px"></textarea>
- </div>
- <br>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Start Date:</label><BR>
- <input type="hidden" name="startDateHidden" ng-model="broadcastMessage.startDate">
- <input type="text" class="fn-ebz-text" id="startDatepicker" />
- </div>
-
- <div class="fn-ebz-container" style="margin-left:3em" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>End Date:</label><BR>
- <input type="hidden" name="endDateHidden" ng-model="broadcastMessage.endDate">
- <input type="text" class="fn-ebz-text" id="endDatepicker" />
- </div>
-
- <div class="fn-ebz-container" style="margin-left:3em" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Sort Order:</label><BR>
- <input type="text" class="fn-ebz-text" ng-model="broadcastMessage.sortOrder"
- maxlength="30" />
- </div>
-
- <div class="fn-ebz-container" style="margin-left:1em" >
- <label class="fn-ebz-text-label">Server:</label><BR>
- <div class="form-field" att-select="broadcastSites" ng-model="broadcastMessage.siteCd"></div>
- </div>
-
- <br>
- <div align="left" >
- <button type="submit" ng-click="save();" att-button btn-type="primary" size="small">Save</button>
- <button class="button button--information button--small" herf="javascript:void(0)" ng-click="close();">Cancel</button>
- </div>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/broadcast_list.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/broadcast_list.html
deleted file mode 100644
index 512ce7e8..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/broadcast_list.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<div style="width:80%;">
-
-<div ng-controller="broadcastListController" >
-
- <h1 class="heading1">Broadcast Messages</h1>
- <br>
- <div ng-repeat="location in messageLocations" >
- {{location.label}} Messages
- <div title="{{location.label}} Messages">
-
- <table att-table table-data="location.messages" current-page="1">
- <thead att-table-row type="header">
- <tr>
- <th att-table-header sortable="false" width="10%">No.</th>
- <th att-table-header sortable="false" width="30%">Message Text</th>
- <th att-table-header sortable="false" width="10%">Start Date</th>
- <th att-table-header sortable="false" width="10%">End Date</th>
- <th att-table-header sortable="false" width="10%">Sort Order</th>
- <th att-table-header sortable="false" width="10%">Server</th>
- <th att-table-header sortable="false" width="10%">Active?</th>
- <th att-table-header sortable="false" width="10%">Delete?</th>
- </tr>
- </thead>
- <tbody att-table-row type="body" row-repeat="message in location.messages" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody-->
- <tr>
- {{message.id}}
- <td width="10%"><a href="javascript:editMessage({{location.value}},'{{location.label}}',{{message.id}});">{{$index+1}}</a></td>
- <td width="30%">{{message.messageText}}</td>
- <td width="10%">
- {{message.displayStartDate}}
- </td>
- <td width="10%">{{message.displayEndDate}}</td>
- <td width="10%">{{message.sortOrder}}</td>
- <td width="10%">{{message.siteCd}}</td>
- <td width="10%">
- <div ng-click="toggleActive(message);">
- <input type="checkbox" ng-model="message.active" att-toggle-main>
- </div>
- </td>
- <td att-table-body width="10%">
- <div ng-click="remove(message);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-trash"></a></div>
- </td>
- </tr>
-
- </tbody>
- </table>
- </div>
- <input att-button btn-type="primary" size="small" class="button" type="button" value="Add" ng-click="editMessage(location);"/>
- <br/><br/><br/>
- </div>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal.html
deleted file mode 100644
index 433e0c3f..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal.html
+++ /dev/null
@@ -1,263 +0,0 @@
-<script type="text/ng-template" id="modal_informative.html">
- <div class="modal__informative font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Success!</h2>
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content" style="white-space: pre-wrap;">{{message.text}}</div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Dismiss</button>
- </div>
- </div>
- </script>
-
-
- <script type="text/ng-template" id="delete_informative.html">
- <div class="modal__warning font-showcase">
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Are you sure you want to delete the profile?</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- Deletions are not reversible.<br/> {{message.text}}
- </div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
- </div>
- </div>
- </script>
- <script type="text/ng-template" id="email_report_informative.html">
- <div class="modal__warning font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Mailing your report...</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- The report will be sent to your email soon!
- </div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Ok</button>
- </div>
- </div>
- </script>
- <script type="text/ng-template" id="delete_authCode.html">
- <div class="modal__warning font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Are you sure you want to delete the Authorization Code(s)?</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- Deletions are not reversible.<br/> {{message.text}}
- </div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
- </div>
- </div>
- </script>
- <script type="text/ng-template" id="delete_Schedule.html">
- <div class="modal__warning font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This Schedule(s) ?</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- Deletions are not reversible.<br/> {{message.text}}
- </div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
- </div>
- </div>
- </script>
- <script type="text/ng-template" id="alternate_number.html">
- <div class="modal__warning font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This Number ?</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- Deletions are not reversible.<br/> {{message.text}}
- </div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
- </div>
- </div>
- </script>
- <script type="text/ng-template" id="manage_device.html">
- <div class="modal__warning font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This Line Port ?</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- Deletions are not reversible.<br/> {{message.text}}
- </div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
- </div>
- </div>
- </script>
- <script type="text/ng-template" id="delete_virtualOnNet.html">
- <div class="modal__warning font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Are You Sure You Want to Delete this Virtual On-Net User?</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- Deletions are not reversible.<br/> {{message.text}}
- </div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
- </div>
- </div>
- </script>
- <script type="text/ng-template" id="delete_user_meet_me_conference.html">
- <div class="modal__warning font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Are You Sure You Want to Delete this Conference?</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- Deletions are not reversible.<br/> {{message.text}}
- </div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
- </div>
- </div>
- </script>
- <script type="text/ng-template" id="confirmation_informative.html">
- <div class="modal__warning font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name">{{message.title}}</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content" style="white-space: pre-wrap;">{{message.text}}<br/></div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
- </div>
- </div>
- </script>
-
- <script type="text/ng-template" id="confirmation_for_delete.html">
- <div class="modal__warning font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name"> <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This {{message.title}}?</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">Deletions are not reversible. {{message.text}}<br/></div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
- </div>
- </div>
- </script>
-
- <script type="text/ng-template" id="modal_warning.html">
- <div class="modal__warning font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Unable to process your request!</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content" style="white-space: pre-wrap;">Unable to process your request. <br/>{{message.text}}<br/>
- </div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Dismiss</button>
- </div>
- </div>
- </script>
-
- <script type="text/ng-template" id="modal_warning_message.html">
- <div class="modal__warning font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Warning</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content" style="white-space: pre-wrap;">{{message.text}}<br/>
- </div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Dismiss</button>
- </div>
- </div>
- </script>
-
-
-
- <script type="text/ng-template" id="modal_prompt.html">
- <div class="modal__warning font-showcase">
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Unable to process your request. </h2>
- <i class="icon-circle-action-close close-modal modal__header--close" ng-click="$dismiss()"></i>
-
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- Unable to process your request. <br/> {{message.text}}
- </div>
- </div>
- </script>
- <script type="text/ng-template" id="delete_device.html">
- <div class="modal__warning font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This Device?</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- Deletions are not reversible.<br/> {{message.text}}
- </div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
- </div>
- </div>
- </script>
- <script type="text/ng-template" id="delete_multiple_device.html">
- <div class="modal__warning font-showcase" >
- <div class="modal__header">
- <h2 class="font-showcase-font-name">Are You Sure You Want to Delete The Device(s)?</h2>
-
- <div class="modal__header--icon"></div>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- Deletions are not reversible.<br/> {{message.text}}
- </div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button>
- </div>
- </div>
- </script> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_add.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_add.html
deleted file mode 100644
index b1c9135a..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_add.html
+++ /dev/null
@@ -1,136 +0,0 @@
-<script type="text/ng-template" id="fn_menu_add_popup.html">
- <div class="modal__informative font-showcase" style="width:1100px;">
- <div class="modal__header">
- <h2 class="font-showcase-font-name" style="width: 500px;">{{label}}</h2>
- </div>
- <div class="divider-container"><hr> </div>
-
- <div class="modal__content" >
- <table>
- <tr>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Label:</label><br>
- <input id="popupAddMenuItemLabel" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.label" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" style = "display:none" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Parent:</label><br>
- <input id="popupAddMenuItemParentId" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.parentId" ng-disabled="disableParentId" maxlength="30" />
- </div>
- <div class="fn-ebz-container" ng-init="getParentData();">
- <form name="parentListForm">
- <label class="fn-ebz-text-label" for="parentSelect"><sup><b>*</b></sup>Parent:</label><br>
- <select name="select_projects" id="select_projects" ng-model="addFnMenuItem.parentId">
- <optgroup label="" ng-repeat="header in childListSelectData">
- <option label="{{header.label}}" value="{{header.menuId}}" style="color:black;font-weight:bold;">{{header.label}}</option>
- <option ng-repeat="child in header.children" value="{{child.menuId}}" "{{(addFnMenuItem.parentId===child.menuId) ? 'selected' : '' }}">{{child.label}}</option>
- </optgroup>
- </select>
- <!--
- <select class="form-field" name="parentSelect" id="parentSelect" ng-model="addFnMenuItem.parentId">
- <option>{{getParentLabel(addFnMenuItem.parentId, parentListSelectData)}}</option>
- <option ng-repeat="option in parentListSelectData" value="{{option[0]}}" "{{(addFnMenuItem.parentId===option[0]) ? 'selected' : '' }}">{{option[1]}}</option>
- </select>
- -->
- </form>
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Sort Order:</label><br>
- <input id="popupAddMenuItemSortOrder" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.sortOrder" ng-disabled="disableSortOrder" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Action:</label><br>
- <input id="popupAddMenuItemAction" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.action" ng-disabled="disableAction" maxlength="200" />
- </div>
- </td>
- </tr>
-
- <tr>
- <td>
- <div class="fn-ebz-container" ng-init="getFunctionCDselectData();">
- <form name="functionCDform">
- <label class="fn-ebz-text-label" for="repeatSelect"><sup><b>*</b></sup>Function:</label><br>
- <select class="form-field" name="repeatSelect" id="repeatSelect" ng-model="addFnMenuItem.functionCd">
- <option>{{addFnMenuItem.functionCd}}</option>
- <option ng-repeat="option in functionCDselectData" value="{{option}}" >{{option}}</option>
- </select>
- </form>
- </div>
- </td>
- <td>
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Active:</label><br>
- <select class="form-field" name="selectActive" ng-model="addFnMenuItem.active">
- <option ng-repeat="active in activeStatusOptions" value="{{active.value}}" ng-selected="{{active.value}}=={{addFnMenuItem.active}}" >{{active.title}}</option>
- </select>
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Servlet:</label><br>
- <input id="popupAddMenuItemServlet" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.servlet" ng-disabled="disableServlet" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Query String:</label><br>
- <input id="popupAddMenuItemQueryString" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.queryString" ng-disabled="disableQueryString" maxlength="30" />
- </div>
- </td>
- </tr>
-
- <tr>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>External URL:</label><br>
- <input id="popupAddMenuItemExternalUrl" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.externalUrl" ng-disabled="disableExternalUrl" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Target:</label><br>
- <input id="popupAddMenuItemTarget" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.target" ng-disabled="disableTarget" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Menu Set Code:</label><br>
- <input id="popupAddMenuItemMenuSetCode" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.menuSetCode" ng-disabled="disableMenuSetCode" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Separator:</label><br>
- <select class="form-field" name="select" ng-model="addFnMenuItem.separator">
- <option ng-repeat="separator in separatorStatusOptions" value="{{separator.value}}" ng-selected="{{separator.value}}=={{addFnMenuItem.separator}}" >{{separator.title}}</option>
- </select>
- </div>
- </td>
- </tr>
-
- <tr>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Image Source:</label><br>
- <input id="popupAddMenuItemImageSrc" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.imageSrc" ng-disabled="disableImageSrc" maxlength="30" />
- </div>
- </td>
- </tr>
- </table>
- </div>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="updateFnMenu(addFnMenuItem);">Save</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="close()">Close</button>
- <!--
- <div class="modal__footer">
- </div>
- -->
- </div>
-</script>
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_edit.html
deleted file mode 100644
index 2ccdf2af..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_edit.html
+++ /dev/null
@@ -1,129 +0,0 @@
-<script type="text/ng-template" id="edit_menu_item_popup.html">
-
- <div class="modal__informative font-showcase" style="width:1100px;">
- <div class="modal__header">
- <h2 class="font-showcase-font-name" style="width: 500px;">{{label}}</h2>
- </div>
- <div class="divider-container"><hr> </div>
-
- <div class="modal__content" >
- <table>
- <tr>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Label:</label><br>
- <input id="popupAddMenuItemLabel" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.label" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" style = "display:none" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Parent:</label><br>
- <input id="popupAddMenuItemParentId" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.parentId" ng-disabled="disableParentId" maxlength="30" />
- </div>
- <div class="fn-ebz-container" ng-init="getParentData();">
- <form name="parentListForm">
- <label class="fn-ebz-text-label" for="parentSelect"><sup><b>*</b></sup>Parent:</label><br>
- <select class="form-field" name="parentSelect" id="parentSelect" ng-model="addFnMenuItem.parentId">
- <option>{{getParentLabel(addFnMenuItem.parentId, parentListSelectData)}}</option>
- <option ng-repeat="option in parentListSelectData" value="{{option[0]}}" "{{(addFnMenuItem.parentId===option[0]) ? 'selected' : '' }}">{{option[1]}}</option>
- </select>
- </form>
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Sort Order:</label><br>
- <input id="popupAddMenuItemSortOrder" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.sortOrder" ng-disabled="disableSortOrder" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Action:</label><br>
- <input id="popupAddMenuItemAction" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.action" ng-disabled="disableAction" maxlength="30" />
- </div>
- </td>
- </tr>
-
- <tr>
- <td>
- <div class="fn-ebz-container" ng-init="getFunctionCDselectData();">
- <form name="functionCDform">
- <label class="fn-ebz-text-label" for="repeatSelect"><sup><b>*</b></sup>Function:</label><br>
- <select class="form-field" name="repeatSelect" id="repeatSelect" ng-model="addFnMenuItem.functionCd">
- <option>{{addFnMenuItem.functionCd}}</option>
- <option ng-repeat="option in functionCDselectData" value="{{option}}" >{{option}}</option>
- </select>
- </form>
- </div>
- </td>
- <td>
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Active:</label><br>
- <select class="form-field" name="selectActive" ng-model="addFnMenuItem.active">
- <option ng-repeat="active in activeStatusOptions" value="{{active.value}}" ng-selected="{{active.value}}=={{addFnMenuItem.active}}" >{{active.title}}</option>
- </select>
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Servlet:</label><br>
- <input id="popupAddMenuItemServlet" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.servlet" ng-disabled="disableServlet" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Query String:</label><br>
- <input id="popupAddMenuItemQueryString" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.queryString" ng-disabled="disableQueryString" maxlength="30" />
- </div>
- </td>
- </tr>
-
- <tr>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>External URL:</label><br>
- <input id="popupAddMenuItemExternalUrl" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.externalUrl" ng-disabled="disableExternalUrl" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Target:</label><br>
- <input id="popupAddMenuItemTarget" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.target" ng-disabled="disableTarget" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Menu Set Code:</label><br>
- <input id="popupAddMenuItemMenuSetCode" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.menuSetCode" ng-disabled="disableMenuSetCode" maxlength="30" />
- </div>
- </td>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Separator:</label><br>
- <select class="form-field" name="select" ng-model="addFnMenuItem.separator">
- <option ng-repeat="separator in separatorStatusOptions" value="{{separator.value}}" ng-selected="{{separator.value}}=={{addFnMenuItem.separator}}" >{{separator.title}}</option>
- </select>
- </div>
- </td>
- </tr>
-
- <tr>
- <td>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b></b></sup>Image Source:</label><br>
- <input id="popupAddMenuItemImageSrc" type="text" class="fn-ebz-text" ng-model="addFnMenuItem.imageSrc" ng-disabled="disableImageSrc" maxlength="30" />
- </div>
- </td>
- </tr>
- </table>
- </div>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="updateFnMenu(addFnMenuItem);">Save</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="close()">Close</button>
- <!--
- <div class="modal__footer">
- </div>
- -->
- </div>
-</script>
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_role.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_role.html
deleted file mode 100644
index cbfd6133..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_role.html
+++ /dev/null
@@ -1,75 +0,0 @@
-
-<script type="text/ng-template" id="role_functions_popup.html">
- <div class="modal__informative font-showcase" style="width:700px;height:500px;overflow:scroll">
- <div class="modal__header">
- <h2 class="font-showcase-font-name" style="width: 500px;">Select Role Functions</h2>
- </div>
- <button align="right" class="button button--primary button--small" herf="javascript:void(0)" ng-click="close()">Close</button>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- <table att-table
- table-data="availableRoleFunctions"
- view-per-page="viewPerPageIgnore"
- current-page="currentPageIgnore"
- search-category="searchCategoryIgnore"
- search-string="searchStringIgnore"
- total-page="totalPageIgnore">
- <thead att-table-row type="header">
- <tr>
- <th att-table-header sortable="false" width="10%"> </th>
- <th att-table-header sortable="false" width="90%">Role Function</th>
- </tr>
- </thead>
- <tbody att-table-row type="body" row-repeat="availableRoleFunction in availableRoleFunctions" style="max-height: 980px;" >
- <tr>
-
- <td width="10%">
- <div ng-click="toggleRoleFunction(availableRoleFunction.selected,availableRoleFunction);">
- <input type="checkbox" ng-model="availableRoleFunction.selected" att-toggle-main>
- </div>
- </td>
- <td width="90%">{{ availableRoleFunction.name }}</td>
-
- </tr>
- </tbody>
- </table>
- </div>
- </div>
-</script>
-
-
-<script type="text/ng-template" id="child_roles_popup.html">
- <div class="modal__informative font-showcase" style="width:700px;height:500px;overflow:scroll">
- <div class="modal__header">
- <h2 class="font-showcase-font-name" style="width: 500px;">Select Child Roles</h2>
- </div>
- <button align="right" class="button button--primary button--small" herf="javascript:void(0)" ng-click="close()">Close</button>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- <table att-table
- table-data="availableRoles"
- view-per-page="viewPerPageIgnore"
- current-page="currentPageIgnore"
- search-category="searchCategoryIgnore"
- search-string="searchStringIgnore"
- total-page="totalPageIgnore">
- <thead att-table-row type="header">
- <tr>
- <th att-table-header sortable="false" width="10%"> </th>
- <th att-table-header sortable="false" width="90%">Role</th>
- </tr>
- </thead>
- <tbody att-table-row type="body" row-repeat="availableRole in availableRoles" style="max-height: 980px;" >
- <tr>
- <td att-table-body width="10%">
- <div ng-click="toggleChildRole(availableRole.selected,availableRole);">
- <input type="checkbox" ng-model="availableRole.selected" att-toggle-main>
- </div>
- </td>
- <td att-table-body width="90%">{{ availableRole.name }}</td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
-</script> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_rolefunction.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_rolefunction.html
deleted file mode 100644
index b5fd76ad..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_rolefunction.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<script type="text/ng-template" id="edit_role_function_popup.html">
- <div class="modal__informative font-showcase" style="width:400px;">
- <div class="modal__header">
- <h2 class="font-showcase-font-name" style="width: 500px;">{{label}}</h2>
- </div>
- <div class="divider-container"><hr> </div>
- <div class="modal__content">
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Name:</label><br>
- <input type="text" class="fn-ebz-text" ng-model="editRoleFunction.name"
- maxlength="30" />
- </div>
- <br/>
- <div class="fn-ebz-container" >
- <label class="fn-ebz-text-label"><sup><b>*</b></sup>Code:</label><br>
- <input type="text" class="fn-ebz-text" ng-model="editRoleFunction.code" ng-disabled="disableCd"
- maxlength="30" />
- </div>
- </div>
- <div class="modal__footer">
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="saveRoleFunction(editRoleFunction);">Save</button>
- <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="close()">Close</button>
- </div>
- </div>
-</script>
-
-
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/customWidgetSettings.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/customWidgetSettings.js
deleted file mode 100644
index 6cabe9f2..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/customWidgetSettings.js
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-app
- .controller('CustomSettingsDemoCtrl', function($scope, $interval, $window, widgetDefinitions, defaultWidgets, RandomDataModel) {
-
-
- // Add an additional widget with setting overrides
- var definitions = [{
- name: 'congfigurable widget',
- directive: 'wt-scope-watch',
- dataAttrName: 'value',
- dataModelType: RandomDataModel,
- dataModelOptions: {
- limit: 10
- },
- settingsModalOptions: {
- partialTemplateUrl: 'template/configurableWidgetModalOptions.html'
- },
- onSettingsClose: function (result, widget) {
- if (widget.dataModel && widget.dataModel.updateLimit) {
- widget.dataModel.updateLimit(result.dataModelOptions.limit);
- }
- }
- }, {
- name: 'override modal widget',
- directive: 'wt-scope-watch',
- dataAttrName: 'value',
- dataModelType: RandomDataModel,
- settingsModalOptions: {
- templateUrl: 'template/WidgetSpecificSettings.html',
- controller: 'WidgetSpecificSettingsCtrl',
- backdrop: false
- },
- onSettingsClose: function(result, widget) {
- console.log('Widget-specific settings resolved!');
- jQuery.extend(true, widget, result);
- },
- onSettingsDismiss: function(reason, scope) {
- console.log('Settings have been dismissed: ', reason);
- console.log('Dashboard scope: ', scope);
- }
- }];
-
- var defaultWidgets = [
- { name: 'congfigurable widget' },
- { name: 'override modal widget' }
- ];
-
- $scope.dashboardOptions = {
- widgetButtons: true,
- widgetDefinitions: definitions,
- defaultWidgets: defaultWidgets,
- storage: $window.localStorage,
- storageId: 'custom-settings',
-
- /*
- // Overrides default $uibModal options.
- // This can also be set on individual
- // widget definition objects (see above).
- settingsModalOptions: {
- // This will completely override the modal template for all widgets.
- // You also have the option to add to the default modal template with settingsModalOptions.partialTemplateUrl (see "configurable widget" above)
- templateUrl: 'template/customSettingsTemplate.html'
- // We could pass a custom controller name here to be used
- // with the widget settings dialog, but for this demo we
- // will just keep the default.
- //
- // controller: 'CustomSettingsModalCtrl'
- //
- // Other options passed to $uibModal.open can be put here,
- // eg:
- //
- // backdrop: false,
- // keyboard: false
- //
- // @see http://angular-ui.github.io/bootstrap/#/modal <-- heads up: routing on their site was broken as of this writing
- },
- */
-
- // Called when a widget settings dialog is closed
- // by the "ok" method (i.e., the promise is resolved
- // and not rejected). This can also be set on individual
- // widgets (see above).
- onSettingsClose: function(result, widget, scope) {
- console.log('Settings result: ', result);
- console.log('Widget: ', widget);
- console.log('Dashboard scope: ', scope);
- jQuery.extend(true, widget, result);
- },
-
- // Called when a widget settings dialog is closed
- // by the "cancel" method (i.e., the promise is rejected
- // and not resolved). This can also be set on individual
- // widgets (see above).
- onSettingsDismiss: function(reason, scope) {
- console.log('Settings have been dismissed: ', reason);
- console.log('Dashboard scope: ', scope);
- }
- };
- })
- .controller('WidgetSpecificSettingsCtrl', function ($scope, $uibModalInstance, widget) {
- // add widget to scope
- $scope.widget = widget;
-
- // set up result object
- $scope.result = jQuery.extend(true, {}, widget);
-
- $scope.ok = function () {
- console.log('calling ok from widget-specific settings controller!');
- $uibModalInstance.close($scope.result);
- };
-
- $scope.cancel = function () {
- console.log('calling cancel from widget-specific settings controller!');
- $uibModalInstance.dismiss('cancel');
- };
- })
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/dataModel.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/dataModel.js
deleted file mode 100644
index d9be52ea..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/dataModel.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-app
- .factory('RandomDataModel', function ($interval, WidgetDataModel) {
- function RandomDataModel() {
- }
-
- RandomDataModel.prototype = Object.create(WidgetDataModel.prototype);
- RandomDataModel.prototype.constructor = WidgetDataModel;
-
- angular.extend(RandomDataModel.prototype, {
- init: function () {
- var dataModelOptions = this.dataModelOptions;
- this.limit = (dataModelOptions && dataModelOptions.limit) ? dataModelOptions.limit : 100;
-
- this.updateScope('-');
- this.startInterval();
- },
-
- startInterval: function () {
- $interval.cancel(this.intervalPromise);
-
- this.intervalPromise = $interval(function () {
- var value = Math.floor(Math.random() * this.limit);
- this.updateScope(value);
- }.bind(this), 500);
- },
-
- updateLimit: function (limit) {
- this.dataModelOptions = this.dataModelOptions ? this.dataModelOptions : {};
- this.dataModelOptions.limit = limit;
- this.limit = limit;
- },
-
- destroy: function () {
- WidgetDataModel.prototype.destroy.call(this);
- $interval.cancel(this.intervalPromise);
- }
- });
-
- return RandomDataModel;
- }); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.js
deleted file mode 100644
index d598f0d0..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.js
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-app
-.config(function ($routeProvider) {
- $routeProvider
- .when('/view', {
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html',
- controller: 'DemoCtrl',
- title: 'simple',
- description: 'This is the simplest demo.'
- })
- .when('/resize', {
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html',
- controller: 'ResizeDemoCtrl',
- title: 'resize',
- description: 'This demo showcases widget resizing.'
- })
- .when('/custom-settings', {
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html',
- controller: 'CustomSettingsDemoCtrl',
- title: 'custom widget settings',
- description: 'This demo showcases overriding the widget settings dialog/modal ' +
- 'for the entire dashboard and for a specific widget. Click on the cog of each ' +
- 'widget to see the custom modal. \n"configurable widget" has "limit" option in the modal ' +
- 'that controls RandomDataModel.'
- })
- .when('/explicit-saving', {
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html',
- controller: 'ExplicitSaveDemoCtrl',
- title: 'explicit saving',
- description: 'This demo showcases an option to only save the dashboard state '+
- 'explicitly, e.g. by user input. Notice the "all saved" button in the controls ' +
- 'updates as you make saveable changes.'
- })
- .when('/layouts', {
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/layouts.html',
- controller: 'LayoutsDemoCtrl',
- title: 'dashboard layouts',
- description: 'This demo showcases the ability to have "dashboard layouts", ' +
- 'meaning the ability to have multiple arbitrary configurations of widgets. For more ' +
- 'information, take a look at [issue #31](https://github.com/DataTorrent/malhar-angular-dashboard/issues/31)'
- })
- .when('/', {
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/layouts.html',
- controller: 'LayoutsDemoExplicitSaveCtrl',
- title: 'layouts explicit saving',
- description: 'This demo showcases dashboard layouts with explicit saving enabled.'
- })
- .otherwise({
- redirectTo: '/'
- });
- })
- .controller('NavBarCtrl', function($scope, $route) {
- $scope.$route = $route;
- })
- .factory('widgetDefinitions', function(RandomDataModel) {
- return [
- {
- name: 'random',
- directive: 'wt-scope-watch',
- attrs: {
- value: 'randomValue'
- }
- },
- {
- name: 'time',
- directive: 'wt-time'
- },
- {
- name: 'datamodel',
- directive: 'wt-scope-watch',
- dataAttrName: 'value',
- dataModelType: RandomDataModel
- },
- {
- name: 'resizable',
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/resizable.html',
- attrs: {
- class: 'demo-widget-resizable'
- }
- },
- {
- name: 'fluid',
- directive: 'wt-fluid',
- size: {
- width: '50%',
- height: '250px'
- }
- },
- {
- name: 'raptor-report-data',
- directive: 'raptor-report-data',
- size: {
- width: '50%',
- height: '300px'
- }
- },
- {
- name: 'raptor-report-chart',
- directive: 'raptor-report-chart',
- size: {
- width: '50%',
- height: '300px'
- }
- },
- {
- name: 'r-cloud',
- directive: 'r-cloud',
- size: {
- width: '50%',
- height: '300px'
- }
- }
- ];
-
- })
- .value('defaultWidgets', [
-// { name: 'random' },
-// { name: 'time' },
-// { name: 'datamodel' },
-// {
-// name: 'random',
-// style: {
-// width: '50%',
-// minWidth: '39%'
-// }
-// },
-// {
-// name: 'time',
-// style: {
-// width: '50%'
-// }
-// }
-// {"name":"raptor-report","title":"Spam Source Line Chart","style":{},"size":{"height":"450px","width":"40%"},"attrs":{"value":"randomValue"},"report_id":"3360"}
-
- ])
- .controller('DemoCtrl', function ($scope, $interval, $window, widgetDefinitions, defaultWidgets) {
-
- $scope.dashboardOptions = {
- widgetButtons: true,
- widgetDefinitions: widgetDefinitions,
- defaultWidgets: defaultWidgets,
- storage: $window.localStorage,
- storageId: 'demo_simple'
- };
- $scope.randomValue = Math.random();
- $interval(function () {
- $scope.randomValue = Math.random();
- }, 500);
-
- }); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.less b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.less
deleted file mode 100644
index 91f4cee9..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.less
+++ /dev/null
@@ -1,24 +0,0 @@
-body {
- margin: 15px;
- padding-top: 50px;
-}
-a {
- cursor: pointer;
-}
-.layout-tabs {
- margin-bottom: 10px;
-}
-
-.demo-widget-fluid {
- border: 1px solid blue;
- height: 100%;
-}
-
-.demo-widget-fluid > div {
- border: 1px solid red;
- position: relative;
- top: 50%;
- -webkit-transform: translateY(-50%);
- -ms-transform: translateY(-50%);
- transform: translateY(-50%);
-} \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/directives.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/directives.js
deleted file mode 100644
index fe3ee7f7..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/directives.js
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-app
- .directive('wtTime', function ($interval) {
- return {
- restrict: 'A',
- scope: true,
- replace: true,
- template: '<div>Time<div class="alert alert-success">{{time}}</div></div>',
- link: function (scope) {
- function update() {
- scope.time = new Date().toLocaleTimeString();
- }
-
- update();
-
- var promise = $interval(update, 500);
-
- scope.$on('$destroy', function () {
- $interval.cancel(promise);
- });
- }
- };
- })
- .directive('wtScopeWatch', function () {
- return {
- restrict: 'A',
- replace: true,
- template: '<div>Value<div class="alert alert-info">{{value}}</div></div>',
- scope: {
- value: '=value'
- }
- };
- })
- .directive('wtFluid', function () {
- return {
- restrict: 'A',
- replace: true,
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/fluid.html',
- scope: true,
- controller: function ($scope) {
- $scope.$on('widgetResized', function (event, size) {
- $scope.width = size.width || $scope.width;
- $scope.height = size.height || $scope.height;
- });
- }
- };
- })
- .directive('raptorReportChart', ['widgetDefinitions','defaultWidgets',function (widgetDefinitions, defaultWidgets) {
- return {
- restrict: 'A',
- replace: true,
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/raptor-report.html',
- scope: true,
- controller: function ($scope,$http, $rootScope) {
-// console.log('================= Raptor Report scope =================');
-// console.log($scope);
- $scope.showChart = false;
- $scope.url = "report_embedded#/report_run/c_master="+$scope.widget.report_id+ "&refresh=Y&hideGrid=Y&width="+Math.floor($scope.width*13)+"&height=300";
-// $scope.url = "report_embedded#/report_run/c_master="+$scope.widget.report_id+ "&refresh=Y&hideGrid="+$scope.hideGrid+"&width=550&height=300";
- $rootScope.showdataContainer = false;
- $rootScope.$watch('showdataContainer', function () {
- console.log('change showdataContainer');
- console.log($rootScope.showdataContainer);
- $scope.gridOptions = $rootScope.gridOptions;
- $scope.gridOptions = $rootScope.gridOptions;
- $scope.uiGridRefresh = function(){
- var columnDefsArray = [];
- var columnFreezeEndColumn = $scope.widget.reportData.colIdxTobeFreezed;
- var doColumnNeedToFreeze = false;
- if(columnFreezeEndColumn && columnFreezeEndColumn.length>0) {
- doColumnNeedToFreeze = true;
- }
- $scope.widget.reportData.reportDataColumns.forEach(function(entry) {
- var tempColumnDef = { displayName: entry.columnTitle, field: entry.colId, enableSorting: entry.sortable,
- sortingAlgorithm: function(a, b) {
- return rowSorter.sortAlpha(a.displayValue, b.displayValue);
- },
- cellTemplate: '<div class="ui-grid-cell-contents" style="text-align:{{COL_FIELD.alignment}};" title="TOOLTIP"> '+
- ' <div ng-if="!COL_FIELD.drillDownURL || COL_FIELD.drillDownURL==\'\'">{{COL_FIELD.displayValue}}</div>' +
- ' <a ng-if="COL_FIELD.drillDownURL && COL_FIELD.drillDownURL!=\'\'" ng-href="{{COL_FIELD.drillDownURL}}&parent___params==={{grid.appScope.currentReportUrlParams}}" >{{COL_FIELD.displayValue}}</a>' +
- '</div>'};
- if(entry.columnWidth && entry.columnWidth!='null' && entry.columnWidth!='pxpx' && entry.columnWidth!='nullpx' && entry.columnWidth!='nullpxpx'){
- tempColumnDef['minWidth'] = entry.columnWidth.substring(0, entry.columnWidth.length - 2);
- } else {
- tempColumnDef['minWidth'] = '100';
- }
- if(doColumnNeedToFreeze) {
- tempColumnDef['pinnedLeft']= true;
- if(columnFreezeEndColumn === entry.colId){
- doColumnNeedToFreeze = false;
- }
- }
- columnDefsArray.push(tempColumnDef);
- });
-
- $scope.gridOptions.paginationPageSizes= [$scope.widget.reportData.pageSize];
- $scope.gridOptions.paginationPageSize= $scope.widget.reportData.pageSize;
- if($scope.widget.reportData.totalRows<14){
- $scope.widget.gridHeight = (widget.reportData.totalRows+5)*30+'px';
- }else{
- $scope.gridHeight = '400px';
- }
- $scope.gridOptions.totalItems = $scope.widget.reportData.totalRows;
- $scope.gridOptions.columnDefs= columnDefsArray;
- $scope.gridOptions.data= $scope.widget.reportData.reportDataRows;
- $scope.gridOptions.exporterPdfHeader.text= $scope.widget.reportData.reportName;
- };
- $scope.uiGridRefresh();
-
-
- /*presence.setGlobal({
- u: $rootScope.currentUser,
- s: 'on'
- })*/
- })
- $scope.$on('widgetResized', function (event, size) {
- console.log("===$scope===");
- console.log($scope);
- $scope.width = size.width || $scope.width;
- $scope.height = size.height || $scope.height;
- $scope.url = "report_embedded#/report_run/c_master="+$scope.widget.report_id+ "&refresh=Y&hideGrid=Y&width="+Math.floor($scope.width*13)+"&height=300";
- });
- }
- };
- }])
- .directive('raptorReportData', ['widgetDefinitions','defaultWidgets',function (widgetDefinitions, defaultWidgets) {
- return {
- restrict: 'A',
- replace: true,
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/raptor-report.html',
- scope: true,
- controller: function ($scope,$http, $rootScope) {
-// console.log('================= Raptor Report scope =================');
-// console.log($scope);
- $scope.showChart = false;
- $scope.url = "report_embedded#/report_run/c_master="+$scope.widget.report_id+ "&refresh=Y&hideChart=Y&width="+Math.floor($scope.width*13)+"&height=300";
-// $scope.url = "report_embedded#/report_run/c_master="+$scope.widget.report_id+ "&refresh=Y&hideGrid="+$scope.hideGrid+"&width=550&height=300";
- $rootScope.showdataContainer = false;
- $rootScope.$watch('showdataContainer', function () {
- console.log('change showdataContainer');
- console.log($rootScope.showdataContainer);
- $scope.gridOptions = $rootScope.gridOptions;
- $scope.gridOptions = $rootScope.gridOptions;
- $scope.uiGridRefresh = function(){
- var columnDefsArray = [];
- var columnFreezeEndColumn = $scope.widget.reportData.colIdxTobeFreezed;
- var doColumnNeedToFreeze = false;
- if(columnFreezeEndColumn && columnFreezeEndColumn.length>0) {
- doColumnNeedToFreeze = true;
- }
- $scope.widget.reportData.reportDataColumns.forEach(function(entry) {
- var tempColumnDef = { displayName: entry.columnTitle, field: entry.colId, enableSorting: entry.sortable,
- sortingAlgorithm: function(a, b) {
- return rowSorter.sortAlpha(a.displayValue, b.displayValue);
- },
- cellTemplate: '<div class="ui-grid-cell-contents" style="text-align:{{COL_FIELD.alignment}};" title="TOOLTIP"> '+
- ' <div ng-if="!COL_FIELD.drillDownURL || COL_FIELD.drillDownURL==\'\'">{{COL_FIELD.displayValue}}</div>' +
- ' <a ng-if="COL_FIELD.drillDownURL && COL_FIELD.drillDownURL!=\'\'" ng-href="{{COL_FIELD.drillDownURL}}&parent___params==={{grid.appScope.currentReportUrlParams}}" >{{COL_FIELD.displayValue}}</a>' +
- '</div>'};
- if(entry.columnWidth && entry.columnWidth!='null' && entry.columnWidth!='pxpx' && entry.columnWidth!='nullpx' && entry.columnWidth!='nullpxpx'){
- tempColumnDef['minWidth'] = entry.columnWidth.substring(0, entry.columnWidth.length - 2);
- } else {
- tempColumnDef['minWidth'] = '100';
- }
- if(doColumnNeedToFreeze) {
- tempColumnDef['pinnedLeft']= true;
- if(columnFreezeEndColumn === entry.colId){
- doColumnNeedToFreeze = false;
- }
- }
- columnDefsArray.push(tempColumnDef);
- });
-
- $scope.gridOptions.paginationPageSizes= [$scope.widget.reportData.pageSize];
- $scope.gridOptions.paginationPageSize= $scope.widget.reportData.pageSize;
- if($scope.widget.reportData.totalRows<14){
- $scope.widget.gridHeight = (widget.reportData.totalRows+5)*30+'px';
- }else{
- $scope.gridHeight = '400px';
- }
- $scope.gridOptions.totalItems = $scope.widget.reportData.totalRows;
- $scope.gridOptions.columnDefs= columnDefsArray;
- $scope.gridOptions.data= $scope.widget.reportData.reportDataRows;
- $scope.gridOptions.exporterPdfHeader.text= $scope.widget.reportData.reportName;
- };
- $scope.uiGridRefresh();
-
-
- /*presence.setGlobal({
- u: $rootScope.currentUser,
- s: 'on'
- })*/
- })
- }
- };
- }])
- .directive('rCloud', function () {
- return {
- restrict: 'A',
- replace: true,
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/r-cloud.html',
- scope: true,
- controller: function ($scope,$http) {
- $scope.showChart = false;
- $scope.hideGrid = 'true';
- $scope.url = $scope.widget.rcloud_url;
- $scope.$on('widgetResized', function (event, size) {
- $scope.width = size.width || $scope.width;
- $scope.height = size.height || $scope.height;
- });
- }
- };
- }); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/explicitSave.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/explicitSave.js
deleted file mode 100644
index ad959b21..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/explicitSave.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-app
- .controller('ExplicitSaveDemoCtrl', function ($scope, $interval, $window, widgetDefinitions, defaultWidgets) {
- $scope.dashboardOptions = {
- widgetButtons: true,
- widgetDefinitions: widgetDefinitions,
- defaultWidgets: defaultWidgets,
- storage: $window.localStorage,
- storageId: 'explicitSave',
- explicitSave: true
- };
- $scope.randomValue = Math.random();
- $interval(function () {
- $scope.randomValue = Math.random();
- }, 500);
- }); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.css
deleted file mode 100644
index c05f70c1..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.css
+++ /dev/null
@@ -1,146 +0,0 @@
-/* #rightContentUiDashboard {
- display:inline-block;
-} */
-
-#rightContentUiDashboard .browsehappy {
- margin: 0.2em 0;
- background: #ccc;
- color: #000;
- padding: 0.2em 0;
-}
-#rightContentUiDashboard .thumbnail {
- height: 200px;
-}
-#rightContentUiDashboard .thumbnail img.pull-right {
- width: 50px;
-}
-#rightContentUiDashboard body {
- margin: 15px;
- padding-top: 50px;
-}
-#rightContentUiDashboard a {
- cursor: pointer;
-}
-#rightContentUiDashboard .layout-tabs {
- margin-bottom: 10px;
-}
-#rightContentUiDashboard .demo-widget-fluid {
- border: 1px solid blue;
- height: 100%;
-}
-#rightContentUiDashboard .demo-widget-fluid > div {
- border: 1px solid red;
- position: relative;
- top: 50%;
- -webkit-transform: translateY(-50%);
- transform: translateY(-50%);
-}
-#rightContentUiDashboard .dashboard-widget-area {
- margin: 10px 0 30px;
- min-height: 200px;
-}
-#rightContentUiDashboard .widget-container {
- float: left;
- display: inline-block;
- width: 33%;
- padding-bottom: 0em;
-}
-#rightContentUiDashboard .widget {
- margin: 0 1em 0 0;
- background-color: white;
- border-radius: 5px;
- position: relative;
- height: 100%;
-}
-#rightContentUiDashboard .widget-header {
- overflow: hidden;
- width:100%; /* for overlaying effect start*/
- position: absolute;
- z-index: 10;
- opacity: 0.8;
- top: 1px;
- filter: alpha(opacity=80); /* For IE8 and earlier */
- -webkit-transition: width 2s, height 4s; /* Safari */
- transition: width 2s, height 4s;
-}
-#rightContentUiDashboard .widget-header .label {
- display: inline-block;
- vertical-align: middle;
-}
-#rightContentUiDashboard .widget-header .glyphicon {
- cursor: pointer;
- float: right;
- opacity: 0.5;
- margin-left: 5px;
-}
-#rightContentUiDashboard .widget-header .glyphicon:hover {
- opacity: 1;
-}
-#rightContentUiDashboard .widget-header .widget-title {
- vertical-align: middle;
-}
-#rightContentUiDashboard .widget-header form.widget-title {
- display: inline;
-}
-#rightContentUiDashboard .widget-header form.widget-title input.form-control {
- width: auto;
- display: inline-block;
-}
-#rightContentUiDashboard .widget-content {
- padding:0px;
- overflow: hidden;
- position: relative; /* for overlaying effect */
-}
-#rightContentUiDashboard .widget .widget-ew-resizer {
- position: absolute;
- width: 5px;
- right: -2px;
- height: 100%;
- top: 0;
- cursor: ew-resize;
-}
-#rightContentUiDashboard .widget .widget-s-resizer {
- cursor: ns-resize;
- height: 5px;
- width: 100%;
- bottom: -7px;
- left: 0;
-}
-#rightContentUiDashboard .widget .widget-resizer-marquee {
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.5);
- position: absolute;
- top: 0;
- left: 0;
- z-index: 2;
-}
-#rightContentUiDashboard .remove-layout-icon {
- vertical-align: text-top;
- cursor: pointer;
- opacity: 0.3;
-}
-#rightContentUiDashboard .remove-layout-icon:hover {
- opacity: 1;
-}
-#rightContentUiDashboard .layout-title {
- display: inline-block;
-}
-
-/*
-#container {
- width: 100px;
- height: 100px;
- position: relative;
-}
-#navi,
-#infoi {
- width: 100%;
- height: 100%;
- position: absolute;
- top: 0;
- left: 0;
-}
-#infoi {
- z-index: 10;
-}
-
- */ \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.js
deleted file mode 100644
index b4cfb97d..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-'use strict';
-
-angular.module('dashboard', ['ui.bootstrap']);
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.less b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.less
deleted file mode 100644
index 87955cbe..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.less
+++ /dev/null
@@ -1,16 +0,0 @@
-.browsehappy {
- margin: 0.2em 0;
- background: #ccc;
- color: #000;
- padding: 0.2em 0;
-}
-
-.thumbnail {
- height: 200px;
-
- img.pull-right {
- width: 50px;
- }
-}
-// injector
-// endinjector
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index_original.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index_original.css
deleted file mode 100644
index d5cebfb0..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index_original.css
+++ /dev/null
@@ -1,113 +0,0 @@
-.browsehappy {
- margin: 0.2em 0;
- background: #ccc;
- color: #000;
- padding: 0.2em 0;
-}
-.thumbnail {
- height: 200px;
-}
-.thumbnail img.pull-right {
- width: 50px;
-}
-body {
- margin: 15px;
- padding-top: 50px;
-}
-a {
- cursor: pointer;
-}
-.layout-tabs {
- margin-bottom: 10px;
-}
-.demo-widget-fluid {
- border: 1px solid blue;
- height: 100%;
-}
-.demo-widget-fluid > div {
- border: 1px solid red;
- position: relative;
- top: 50%;
- -webkit-transform: translateY(-50%);
- transform: translateY(-50%);
-}
-.dashboard-widget-area {
- margin: 10px 0 30px;
- min-height: 200px;
-}
-.widget-container {
- float: left;
- display: inline-block;
- width: 33%;
- padding-bottom: 1em;
-}
-.widget {
- margin: 0 1em 0 0;
- background-color: white;
- border: 2px solid #444;
- border-radius: 5px;
- position: relative;
- height: 100%;
-}
-.widget-header {
- overflow: hidden;
-}
-.widget-header .label {
- display: inline-block;
- vertical-align: middle;
-}
-.widget-header .glyphicon {
- cursor: pointer;
- float: right;
- opacity: 0.5;
- margin-left: 5px;
-}
-.widget-header .glyphicon:hover {
- opacity: 1;
-}
-.widget-header .widget-title {
- vertical-align: middle;
-}
-.widget-header form.widget-title {
- display: inline;
-}
-.widget-header form.widget-title input.form-control {
- width: auto;
- display: inline-block;
-}
-.widget-content {
- overflow: hidden;
-}
-.widget .widget-ew-resizer {
- position: absolute;
- width: 5px;
- right: -2px;
- height: 100%;
- top: 0;
- cursor: ew-resize;
-}
-.widget .widget-s-resizer {
- cursor: ns-resize;
- height: 5px;
- width: 100%;
- bottom: -7px;
- left: 0;
-}
-.widget .widget-resizer-marquee {
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.5);
- position: absolute;
- top: 0;
- left: 0;
- z-index: 2;
-}
-.remove-layout-icon {
- vertical-align: text-top;
- cursor: pointer;
- opacity: 0.3;
-}
-.remove-layout-icon:hover {
- opacity: 1;
-}
-.layout-title {
- display: inline-block;
-}
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/layouts.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/layouts.js
deleted file mode 100644
index fda21ab0..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/layouts.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-app
- .controller('LayoutsDemoCtrl', function($scope, widgetDefinitions, defaultWidgets, LayoutStorage, $interval) {
- $scope.layoutOptions = {
- storageId: 'demo-layouts',
- storage: localStorage,
- storageHash: 'fs4df4d51',
- widgetDefinitions: widgetDefinitions,
- defaultWidgets: defaultWidgets,
- lockDefaultLayouts: true,
- defaultLayouts: [
- { title: 'Layout 1', active: true , defaultWidgets: defaultWidgets },
- { title: 'Layout 2', active: false, defaultWidgets: defaultWidgets },
- { title: 'Layout 3', active: false, defaultWidgets: defaultWidgets, locked: false }
- ]
- };
- $scope.randomValue = Math.random();
- $interval(function () {
- $scope.randomValue = Math.random();
- }, 500);
-
- })
- .controller('LayoutsDemoExplicitSaveCtrl', function($scope, widgetDefinitions, defaultWidgets, LayoutStorage, $interval, $http) {
- $http.get('raptor.htm?action=report.search.execute').then(
- function(result){
- var data = result.data;
- var report_id_name = [];
- for (var i in data.rows[0]) {
- report_id_name.push({index:i, value: data.rows[0][i][1].searchresultField.displayValue, title: data.rows[0][i][2].searchresultField.displayValue})
- }
- $scope.reports = report_id_name;
- console.log($scope.reports);
- $scope.report1 = $scope.reports[1];
- });
- // Can this be removed?
- $scope.rcloud_url= "https://tbd.onap.org/mini.html?notebook=c131ea997453e75303588699936d1896";
- $scope.layoutOptions = {
- storageId: 'demo-layouts-explicit-save',
- storage: localStorage,
- storageHash: 'fs4df4d51',
- widgetDefinitions: widgetDefinitions,
- defaultWidgets: defaultWidgets,
- explicitSave: true,
- defaultLayouts: [
- { title: 'Layout 1', active: true , defaultWidgets: defaultWidgets },
- { title: 'Layout 2', active: false, defaultWidgets: defaultWidgets },
- { title: 'Layout 3', active: false, defaultWidgets: defaultWidgets }
- ]
- };
- $scope.randomValue = Math.random();
- $interval(function () {
- $scope.randomValue = Math.random();
- }, 500);
-
- }); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/report_whitelist.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/report_whitelist.js
deleted file mode 100644
index f67d5e64..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/report_whitelist.js
+++ /dev/null
@@ -1,3 +0,0 @@
-app.config(function ($sceDelegateProvider) {
- $sceDelegateProvider.resourceUrlWhitelist(['self','https://tbd.onap.org/**']);
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/resize.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/resize.js
deleted file mode 100644
index db22e548..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/resize.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-app
- .controller('ResizeDemoCtrl', function ($scope, $interval, $window, widgetDefinitions, defaultWidgets) {
- defaultWidgets = [
- { name: 'fluid' },
- { name: 'resizable' },
- { name: 'random', style: { width: '50%' } },
- { name: 'time', style: { width: '50%' } }
- ];
-
- $scope.dashboardOptions = {
- widgetButtons: true,
- widgetDefinitions: widgetDefinitions,
- defaultWidgets: defaultWidgets,
- storage: $window.localStorage,
- storageId: 'demo_resize'
- };
- $scope.randomValue = Math.random();
- $interval(function () {
- $scope.randomValue = Math.random();
- }, 500);
- })
- .controller('ResizableCtrl', function ($scope) {
- $scope.$on('widgetResized', function (event, size) {
- $scope.width = size.width || $scope.width;
- $scope.height = size.height || $scope.height;
- });
- }); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/configurableWidgetModalOptions.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/configurableWidgetModalOptions.html
deleted file mode 100644
index b12c3ade..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/configurableWidgetModalOptions.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<div class="form-group">
- <label class="col-sm-2 control-label">Random Limit</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" name="widgetTitle" ng-model="result.dataModelOptions.limit">
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/fluid.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/fluid.html
deleted file mode 100644
index 4bb0c94a..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/fluid.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<div class="demo-widget-fluid">
- <div>
- <p>Widget takes 100% height (blue border).<p>
- <p>Resize the widget vertically to see that this text (red border) stays middle aligned.</p>
- <p>New width: {{width}}</p>
- <p>New height: {{height}}</p>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/layouts.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/layouts.html
deleted file mode 100644
index 8d6854f7..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/layouts.html
+++ /dev/null
@@ -1 +0,0 @@
-<div dashboard-layouts="layoutOptions"></div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/r-cloud.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/r-cloud.html
deleted file mode 100644
index 46cf7b8b..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/r-cloud.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<div class="demo-widget-rcloud">
- <div>
-<!-- <h1>R Cloud</h1> -->
-<!-- <p>{{url}}</p> -->
- <iframe src= {{url}} width="100%" height="500" style="border: none; background-color: #f2f2f2; opacity: 1;">
- </iframe>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/raptor-report.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/raptor-report.html
deleted file mode 100644
index fed32ada..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/raptor-report.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<div class="demo-widget-raptor">
- <div ng-show="true">
-<!-- <p>{{url}}</p> -->
- <div style="display:block; border: none; height:50px; background-color:#f2f2f2;"></div>
- <iframe src= {{url}}
- width="100%" height="500"
- style="border: none; background-color: #f2f2f2; opacity: 1;"></iframe>
- </div>
-
-<!-- <div ng-show="!showChart">
- <p>{{showChart}}</p>
- <iframe id="chartiframe" ng-show="showChart" width="100%" height="450px" style="border: none" scrolling="no"></iframe>
- </div> -->
-
- <div>
- <div>
- <div id="grid1" ui-grid="gridOptions" ui-grid-pagination ui-grid-pinning ui-grid-resize-columns class="grid" style="height: {{gridHeight}}">
- <div class="no-rows" ng-show="!gridOptions.data.length">
- <div class="msg">
- <span>{{reportData.message}}</span>
- </div>
- </div>
- </div>
- </div>
- </div>
-
-
-
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/resizable.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/resizable.html
deleted file mode 100644
index 6abaad81..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/resizable.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<div ng-controller="ResizableCtrl">
- <div>
- <div>New width: {{width}}</div>
- <div>New height: {{height}}</div>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html
deleted file mode 100644
index 23b72c28..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<div class="row">
- <div class="col-md-12">
- <div dashboard="dashboardOptions" class="dashboard-container"></div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/widgetSpecificSettings.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/widgetSpecificSettings.html
deleted file mode 100644
index 3b93a0a9..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/widgetSpecificSettings.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true" ng-click="cancel()">&times;</button>
- <h3>Custom Settings for a special widget</h3>
-</div>
-<div class="modal-body">
- <form name="form" novalidate class="form-horizontal">
- <p>I override the entire widget settings modal template. This can be used for maximum customization!</p>
- <div class="form-group">
- <label for="widgetTitle" class="col-sm-2 control-label">Title</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" name="widgetTitle" ng-model="result.title">
- </div>
- </div>
- </form>
-</div>
-<div class="modal-footer">
- <button type="button" class="btn btn-default" ng-click="cancel()">fuhget about it</button>
- <button type="button" class="btn btn-primary" ng-click="ok()">hell yea</button>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.css
deleted file mode 100644
index a7e815ed..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.css
+++ /dev/null
@@ -1,6658 +0,0 @@
-/*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
-html {
- font-family: sans-serif;
- -ms-text-size-adjust: 100%;
- -webkit-text-size-adjust: 100%;
-}
-body {
- margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
- display: block;
-}
-audio,
-canvas,
-progress,
-video {
- display: inline-block;
- vertical-align: baseline;
-}
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-[hidden],
-template {
- display: none;
-}
-a {
- background-color: transparent;
-}
-a:active,
-a:hover {
- outline: 0;
-}
-abbr[title] {
- border-bottom: 1px dotted;
-}
-b,
-strong {
- font-weight: bold;
-}
-dfn {
- font-style: italic;
-}
-h1 {
- font-size: 2em;
- margin: 0.67em 0;
-}
-mark {
- background: #ff0;
- color: #000;
-}
-small {
- font-size: 80%;
-}
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-sup {
- top: -0.5em;
-}
-sub {
- bottom: -0.25em;
-}
-img {
- border: 0;
-}
-svg:not(:root) {
- overflow: hidden;
-}
-figure {
- margin: 1em 40px;
-}
-hr {
- box-sizing: content-box;
- height: 0;
-}
-pre {
- overflow: auto;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
-}
-button,
-input,
-optgroup,
-select,
-textarea {
- color: inherit;
- font: inherit;
- margin: 0;
-}
-button {
- overflow: visible;
-}
-button,
-select {
- text-transform: none;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button;
- cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-input {
- line-height: normal;
-}
-input[type="checkbox"],
-input[type="radio"] {
- box-sizing: border-box;
- padding: 0;
-}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-input[type="search"] {
- -webkit-appearance: textfield;
- box-sizing: content-box;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: 0.35em 0.625em 0.75em;
-}
-legend {
- border: 0;
- padding: 0;
-}
-textarea {
- overflow: auto;
-}
-optgroup {
- font-weight: bold;
-}
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-td,
-th {
- padding: 0;
-}
-/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
-@media print {
- *,
- *:before,
- *:after {
- background: transparent !important;
- color: #000 !important;
- box-shadow: none !important;
- text-shadow: none !important;
- }
- a,
- a:visited {
- text-decoration: underline;
- }
- a[href]:after {
- content: " (" attr(href) ")";
- }
- abbr[title]:after {
- content: " (" attr(title) ")";
- }
- a[href^="#"]:after,
- a[href^="javascript:"]:after {
- content: "";
- }
- pre,
- blockquote {
- border: 1px solid #999;
- page-break-inside: avoid;
- }
- thead {
- display: table-header-group;
- }
- tr,
- img {
- page-break-inside: avoid;
- }
- img {
- max-width: 100% !important;
- }
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
- h2,
- h3 {
- page-break-after: avoid;
- }
- .navbar {
- display: none;
- }
- .btn > .caret,
- .dropup > .btn > .caret {
- border-top-color: #000 !important;
- }
- .label {
- border: 1px solid #000;
- }
- .table {
- border-collapse: collapse !important;
- }
- .table td,
- .table th {
- background-color: #fff !important;
- }
- .table-bordered th,
- .table-bordered td {
- border: 1px solid #ddd !important;
- }
-}
-@font-face {
- font-family: 'Glyphicons Halflings';
- src: url('../../bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot');
- src: url('../../bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../../bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../../bower_components/boostrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../../bower_components/boostrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
-.glyphicon {
- position: relative;
- top: 1px;
- display: inline-block;
- font-family: 'Glyphicons Halflings';
- font-style: normal;
- font-weight: normal;
- line-height: 1;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-.glyphicon-asterisk:before {
- content: "\002a";
-}
-.glyphicon-plus:before {
- content: "\002b";
-}
-.glyphicon-euro:before,
-.glyphicon-eur:before {
- content: "\20ac";
-}
-.glyphicon-minus:before {
- content: "\2212";
-}
-.glyphicon-cloud:before {
- content: "\2601";
-}
-.glyphicon-envelope:before {
- content: "\2709";
-}
-.glyphicon-pencil:before {
- content: "\270f";
-}
-.glyphicon-glass:before {
- content: "\e001";
-}
-.glyphicon-music:before {
- content: "\e002";
-}
-.glyphicon-search:before {
- content: "\e003";
-}
-.glyphicon-heart:before {
- content: "\e005";
-}
-.glyphicon-star:before {
- content: "\e006";
-}
-.glyphicon-star-empty:before {
- content: "\e007";
-}
-.glyphicon-user:before {
- content: "\e008";
-}
-.glyphicon-film:before {
- content: "\e009";
-}
-.glyphicon-th-large:before {
- content: "\e010";
-}
-.glyphicon-th:before {
- content: "\e011";
-}
-.glyphicon-th-list:before {
- content: "\e012";
-}
-.glyphicon-ok:before {
- content: "\e013";
-}
-.glyphicon-remove:before {
- content: "\e014";
-}
-.glyphicon-zoom-in:before {
- content: "\e015";
-}
-.glyphicon-zoom-out:before {
- content: "\e016";
-}
-.glyphicon-off:before {
- content: "\e017";
-}
-.glyphicon-signal:before {
- content: "\e018";
-}
-.glyphicon-cog:before {
- content: "\e019";
-}
-.glyphicon-trash:before {
- content: "\e020";
-}
-.glyphicon-home:before {
- content: "\e021";
-}
-.glyphicon-file:before {
- content: "\e022";
-}
-.glyphicon-time:before {
- content: "\e023";
-}
-.glyphicon-road:before {
- content: "\e024";
-}
-.glyphicon-download-alt:before {
- content: "\e025";
-}
-.glyphicon-download:before {
- content: "\e026";
-}
-.glyphicon-upload:before {
- content: "\e027";
-}
-.glyphicon-inbox:before {
- content: "\e028";
-}
-.glyphicon-play-circle:before {
- content: "\e029";
-}
-.glyphicon-repeat:before {
- content: "\e030";
-}
-.glyphicon-refresh:before {
- content: "\e031";
-}
-.glyphicon-list-alt:before {
- content: "\e032";
-}
-.glyphicon-lock:before {
- content: "\e033";
-}
-.glyphicon-flag:before {
- content: "\e034";
-}
-.glyphicon-headphones:before {
- content: "\e035";
-}
-.glyphicon-volume-off:before {
- content: "\e036";
-}
-.glyphicon-volume-down:before {
- content: "\e037";
-}
-.glyphicon-volume-up:before {
- content: "\e038";
-}
-.glyphicon-qrcode:before {
- content: "\e039";
-}
-.glyphicon-barcode:before {
- content: "\e040";
-}
-.glyphicon-tag:before {
- content: "\e041";
-}
-.glyphicon-tags:before {
- content: "\e042";
-}
-.glyphicon-book:before {
- content: "\e043";
-}
-.glyphicon-bookmark:before {
- content: "\e044";
-}
-.glyphicon-print:before {
- content: "\e045";
-}
-.glyphicon-camera:before {
- content: "\e046";
-}
-.glyphicon-font:before {
- content: "\e047";
-}
-.glyphicon-bold:before {
- content: "\e048";
-}
-.glyphicon-italic:before {
- content: "\e049";
-}
-.glyphicon-text-height:before {
- content: "\e050";
-}
-.glyphicon-text-width:before {
- content: "\e051";
-}
-.glyphicon-align-left:before {
- content: "\e052";
-}
-.glyphicon-align-center:before {
- content: "\e053";
-}
-.glyphicon-align-right:before {
- content: "\e054";
-}
-.glyphicon-align-justify:before {
- content: "\e055";
-}
-.glyphicon-list:before {
- content: "\e056";
-}
-.glyphicon-indent-left:before {
- content: "\e057";
-}
-.glyphicon-indent-right:before {
- content: "\e058";
-}
-.glyphicon-facetime-video:before {
- content: "\e059";
-}
-.glyphicon-picture:before {
- content: "\e060";
-}
-.glyphicon-map-marker:before {
- content: "\e062";
-}
-.glyphicon-adjust:before {
- content: "\e063";
-}
-.glyphicon-tint:before {
- content: "\e064";
-}
-.glyphicon-edit:before {
- content: "\e065";
-}
-.glyphicon-share:before {
- content: "\e066";
-}
-.glyphicon-check:before {
- content: "\e067";
-}
-.glyphicon-move:before {
- content: "\e068";
-}
-.glyphicon-step-backward:before {
- content: "\e069";
-}
-.glyphicon-fast-backward:before {
- content: "\e070";
-}
-.glyphicon-backward:before {
- content: "\e071";
-}
-.glyphicon-play:before {
- content: "\e072";
-}
-.glyphicon-pause:before {
- content: "\e073";
-}
-.glyphicon-stop:before {
- content: "\e074";
-}
-.glyphicon-forward:before {
- content: "\e075";
-}
-.glyphicon-fast-forward:before {
- content: "\e076";
-}
-.glyphicon-step-forward:before {
- content: "\e077";
-}
-.glyphicon-eject:before {
- content: "\e078";
-}
-.glyphicon-chevron-left:before {
- content: "\e079";
-}
-.glyphicon-chevron-right:before {
- content: "\e080";
-}
-.glyphicon-plus-sign:before {
- content: "\e081";
-}
-.glyphicon-minus-sign:before {
- content: "\e082";
-}
-.glyphicon-remove-sign:before {
- content: "\e083";
-}
-.glyphicon-ok-sign:before {
- content: "\e084";
-}
-.glyphicon-question-sign:before {
- content: "\e085";
-}
-.glyphicon-info-sign:before {
- content: "\e086";
-}
-.glyphicon-screenshot:before {
- content: "\e087";
-}
-.glyphicon-remove-circle:before {
- content: "\e088";
-}
-.glyphicon-ok-circle:before {
- content: "\e089";
-}
-.glyphicon-ban-circle:before {
- content: "\e090";
-}
-.glyphicon-arrow-left:before {
- content: "\e091";
-}
-.glyphicon-arrow-right:before {
- content: "\e092";
-}
-.glyphicon-arrow-up:before {
- content: "\e093";
-}
-.glyphicon-arrow-down:before {
- content: "\e094";
-}
-.glyphicon-share-alt:before {
- content: "\e095";
-}
-.glyphicon-resize-full:before {
- content: "\e096";
-}
-.glyphicon-resize-small:before {
- content: "\e097";
-}
-.glyphicon-exclamation-sign:before {
- content: "\e101";
-}
-.glyphicon-gift:before {
- content: "\e102";
-}
-.glyphicon-leaf:before {
- content: "\e103";
-}
-.glyphicon-fire:before {
- content: "\e104";
-}
-.glyphicon-eye-open:before {
- content: "\e105";
-}
-.glyphicon-eye-close:before {
- content: "\e106";
-}
-.glyphicon-warning-sign:before {
- content: "\e107";
-}
-.glyphicon-plane:before {
- content: "\e108";
-}
-.glyphicon-calendar:before {
- content: "\e109";
-}
-.glyphicon-random:before {
- content: "\e110";
-}
-.glyphicon-comment:before {
- content: "\e111";
-}
-.glyphicon-magnet:before {
- content: "\e112";
-}
-.glyphicon-chevron-up:before {
- content: "\e113";
-}
-.glyphicon-chevron-down:before {
- content: "\e114";
-}
-.glyphicon-retweet:before {
- content: "\e115";
-}
-.glyphicon-shopping-cart:before {
- content: "\e116";
-}
-.glyphicon-folder-close:before {
- content: "\e117";
-}
-.glyphicon-folder-open:before {
- content: "\e118";
-}
-.glyphicon-resize-vertical:before {
- content: "\e119";
-}
-.glyphicon-resize-horizontal:before {
- content: "\e120";
-}
-.glyphicon-hdd:before {
- content: "\e121";
-}
-.glyphicon-bullhorn:before {
- content: "\e122";
-}
-.glyphicon-bell:before {
- content: "\e123";
-}
-.glyphicon-certificate:before {
- content: "\e124";
-}
-.glyphicon-thumbs-up:before {
- content: "\e125";
-}
-.glyphicon-thumbs-down:before {
- content: "\e126";
-}
-.glyphicon-hand-right:before {
- content: "\e127";
-}
-.glyphicon-hand-left:before {
- content: "\e128";
-}
-.glyphicon-hand-up:before {
- content: "\e129";
-}
-.glyphicon-hand-down:before {
- content: "\e130";
-}
-.glyphicon-circle-arrow-right:before {
- content: "\e131";
-}
-.glyphicon-circle-arrow-left:before {
- content: "\e132";
-}
-.glyphicon-circle-arrow-up:before {
- content: "\e133";
-}
-.glyphicon-circle-arrow-down:before {
- content: "\e134";
-}
-.glyphicon-globe:before {
- content: "\e135";
-}
-.glyphicon-wrench:before {
- content: "\e136";
-}
-.glyphicon-tasks:before {
- content: "\e137";
-}
-.glyphicon-filter:before {
- content: "\e138";
-}
-.glyphicon-briefcase:before {
- content: "\e139";
-}
-.glyphicon-fullscreen:before {
- content: "\e140";
-}
-.glyphicon-dashboard:before {
- content: "\e141";
-}
-.glyphicon-paperclip:before {
- content: "\e142";
-}
-.glyphicon-heart-empty:before {
- content: "\e143";
-}
-.glyphicon-link:before {
- content: "\e144";
-}
-.glyphicon-phone:before {
- content: "\e145";
-}
-.glyphicon-pushpin:before {
- content: "\e146";
-}
-.glyphicon-usd:before {
- content: "\e148";
-}
-.glyphicon-gbp:before {
- content: "\e149";
-}
-.glyphicon-sort:before {
- content: "\e150";
-}
-.glyphicon-sort-by-alphabet:before {
- content: "\e151";
-}
-.glyphicon-sort-by-alphabet-alt:before {
- content: "\e152";
-}
-.glyphicon-sort-by-order:before {
- content: "\e153";
-}
-.glyphicon-sort-by-order-alt:before {
- content: "\e154";
-}
-.glyphicon-sort-by-attributes:before {
- content: "\e155";
-}
-.glyphicon-sort-by-attributes-alt:before {
- content: "\e156";
-}
-.glyphicon-unchecked:before {
- content: "\e157";
-}
-.glyphicon-expand:before {
- content: "\e158";
-}
-.glyphicon-collapse-down:before {
- content: "\e159";
-}
-.glyphicon-collapse-up:before {
- content: "\e160";
-}
-.glyphicon-log-in:before {
- content: "\e161";
-}
-.glyphicon-flash:before {
- content: "\e162";
-}
-.glyphicon-log-out:before {
- content: "\e163";
-}
-.glyphicon-new-window:before {
- content: "\e164";
-}
-.glyphicon-record:before {
- content: "\e165";
-}
-.glyphicon-save:before {
- content: "\e166";
-}
-.glyphicon-open:before {
- content: "\e167";
-}
-.glyphicon-saved:before {
- content: "\e168";
-}
-.glyphicon-import:before {
- content: "\e169";
-}
-.glyphicon-export:before {
- content: "\e170";
-}
-.glyphicon-send:before {
- content: "\e171";
-}
-.glyphicon-floppy-disk:before {
- content: "\e172";
-}
-.glyphicon-floppy-saved:before {
- content: "\e173";
-}
-.glyphicon-floppy-remove:before {
- content: "\e174";
-}
-.glyphicon-floppy-save:before {
- content: "\e175";
-}
-.glyphicon-floppy-open:before {
- content: "\e176";
-}
-.glyphicon-credit-card:before {
- content: "\e177";
-}
-.glyphicon-transfer:before {
- content: "\e178";
-}
-.glyphicon-cutlery:before {
- content: "\e179";
-}
-.glyphicon-header:before {
- content: "\e180";
-}
-.glyphicon-compressed:before {
- content: "\e181";
-}
-.glyphicon-earphone:before {
- content: "\e182";
-}
-.glyphicon-phone-alt:before {
- content: "\e183";
-}
-.glyphicon-tower:before {
- content: "\e184";
-}
-.glyphicon-stats:before {
- content: "\e185";
-}
-.glyphicon-sd-video:before {
- content: "\e186";
-}
-.glyphicon-hd-video:before {
- content: "\e187";
-}
-.glyphicon-subtitles:before {
- content: "\e188";
-}
-.glyphicon-sound-stereo:before {
- content: "\e189";
-}
-.glyphicon-sound-dolby:before {
- content: "\e190";
-}
-.glyphicon-sound-5-1:before {
- content: "\e191";
-}
-.glyphicon-sound-6-1:before {
- content: "\e192";
-}
-.glyphicon-sound-7-1:before {
- content: "\e193";
-}
-.glyphicon-copyright-mark:before {
- content: "\e194";
-}
-.glyphicon-registration-mark:before {
- content: "\e195";
-}
-.glyphicon-cloud-download:before {
- content: "\e197";
-}
-.glyphicon-cloud-upload:before {
- content: "\e198";
-}
-.glyphicon-tree-conifer:before {
- content: "\e199";
-}
-.glyphicon-tree-deciduous:before {
- content: "\e200";
-}
-.glyphicon-cd:before {
- content: "\e201";
-}
-.glyphicon-save-file:before {
- content: "\e202";
-}
-.glyphicon-open-file:before {
- content: "\e203";
-}
-.glyphicon-level-up:before {
- content: "\e204";
-}
-.glyphicon-copy:before {
- content: "\e205";
-}
-.glyphicon-paste:before {
- content: "\e206";
-}
-.glyphicon-alert:before {
- content: "\e209";
-}
-.glyphicon-equalizer:before {
- content: "\e210";
-}
-.glyphicon-king:before {
- content: "\e211";
-}
-.glyphicon-queen:before {
- content: "\e212";
-}
-.glyphicon-pawn:before {
- content: "\e213";
-}
-.glyphicon-bishop:before {
- content: "\e214";
-}
-.glyphicon-knight:before {
- content: "\e215";
-}
-.glyphicon-baby-formula:before {
- content: "\e216";
-}
-.glyphicon-tent:before {
- content: "\26fa";
-}
-.glyphicon-blackboard:before {
- content: "\e218";
-}
-.glyphicon-bed:before {
- content: "\e219";
-}
-.glyphicon-apple:before {
- content: "\f8ff";
-}
-.glyphicon-erase:before {
- content: "\e221";
-}
-.glyphicon-hourglass:before {
- content: "\231b";
-}
-.glyphicon-lamp:before {
- content: "\e223";
-}
-.glyphicon-duplicate:before {
- content: "\e224";
-}
-.glyphicon-piggy-bank:before {
- content: "\e225";
-}
-.glyphicon-scissors:before {
- content: "\e226";
-}
-.glyphicon-bitcoin:before {
- content: "\e227";
-}
-.glyphicon-btc:before {
- content: "\e227";
-}
-.glyphicon-xbt:before {
- content: "\e227";
-}
-.glyphicon-yen:before {
- content: "\00a5";
-}
-.glyphicon-jpy:before {
- content: "\00a5";
-}
-.glyphicon-ruble:before {
- content: "\20bd";
-}
-.glyphicon-rub:before {
- content: "\20bd";
-}
-.glyphicon-scale:before {
- content: "\e230";
-}
-.glyphicon-ice-lolly:before {
- content: "\e231";
-}
-.glyphicon-ice-lolly-tasted:before {
- content: "\e232";
-}
-.glyphicon-education:before {
- content: "\e233";
-}
-.glyphicon-option-horizontal:before {
- content: "\e234";
-}
-.glyphicon-option-vertical:before {
- content: "\e235";
-}
-.glyphicon-menu-hamburger:before {
- content: "\e236";
-}
-.glyphicon-modal-window:before {
- content: "\e237";
-}
-.glyphicon-oil:before {
- content: "\e238";
-}
-.glyphicon-grain:before {
- content: "\e239";
-}
-.glyphicon-sunglasses:before {
- content: "\e240";
-}
-.glyphicon-text-size:before {
- content: "\e241";
-}
-.glyphicon-text-color:before {
- content: "\e242";
-}
-.glyphicon-text-background:before {
- content: "\e243";
-}
-.glyphicon-object-align-top:before {
- content: "\e244";
-}
-.glyphicon-object-align-bottom:before {
- content: "\e245";
-}
-.glyphicon-object-align-horizontal:before {
- content: "\e246";
-}
-.glyphicon-object-align-left:before {
- content: "\e247";
-}
-.glyphicon-object-align-vertical:before {
- content: "\e248";
-}
-.glyphicon-object-align-right:before {
- content: "\e249";
-}
-.glyphicon-triangle-right:before {
- content: "\e250";
-}
-.glyphicon-triangle-left:before {
- content: "\e251";
-}
-.glyphicon-triangle-bottom:before {
- content: "\e252";
-}
-.glyphicon-triangle-top:before {
- content: "\e253";
-}
-.glyphicon-console:before {
- content: "\e254";
-}
-.glyphicon-superscript:before {
- content: "\e255";
-}
-.glyphicon-subscript:before {
- content: "\e256";
-}
-.glyphicon-menu-left:before {
- content: "\e257";
-}
-.glyphicon-menu-right:before {
- content: "\e258";
-}
-.glyphicon-menu-down:before {
- content: "\e259";
-}
-.glyphicon-menu-up:before {
- content: "\e260";
-}
-* {
- box-sizing: border-box;
-}
-*:before,
-*:after {
- box-sizing: border-box;
-}
-html {
- font-size: 10px;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-body {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 14px;
- line-height: 1.42857143;
- color: #333333;
- background-color: #ffffff;
-}
-input,
-button,
-select,
-textarea {
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-a {
- color: #337ab7;
- text-decoration: none;
-}
-a:hover,
-a:focus {
- color: #23527c;
- text-decoration: underline;
-}
-a:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-figure {
- margin: 0;
-}
-img {
- vertical-align: middle;
-}
-.img-responsive,
-.thumbnail > img,
-.thumbnail a > img,
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
- display: block;
- max-width: 100%;
- height: auto;
-}
-.img-rounded {
- border-radius: 6px;
-}
-.img-thumbnail {
- padding: 4px;
- line-height: 1.42857143;
- background-color: #ffffff;
- border: 1px solid #dddddd;
- border-radius: 4px;
- transition: all 0.2s ease-in-out;
- display: inline-block;
- max-width: 100%;
- height: auto;
-}
-.img-circle {
- border-radius: 50%;
-}
-hr {
- margin-top: 20px;
- margin-bottom: 20px;
- border: 0;
- border-top: 1px solid #eeeeee;
-}
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- margin: -1px;
- padding: 0;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- border: 0;
-}
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- clip: auto;
-}
-[role="button"] {
- cursor: pointer;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
- font-family: inherit;
- font-weight: 500;
- line-height: 1.1;
- color: inherit;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-h1 .small,
-h2 .small,
-h3 .small,
-h4 .small,
-h5 .small,
-h6 .small,
-.h1 .small,
-.h2 .small,
-.h3 .small,
-.h4 .small,
-.h5 .small,
-.h6 .small {
- font-weight: normal;
- line-height: 1;
- color: #777777;
-}
-h1,
-.h1,
-h2,
-.h2,
-h3,
-.h3 {
- margin-top: 20px;
- margin-bottom: 10px;
-}
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
- font-size: 65%;
-}
-h4,
-.h4,
-h5,
-.h5,
-h6,
-.h6 {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
- font-size: 75%;
-}
-h1,
-.h1 {
- font-size: 36px;
-}
-h2,
-.h2 {
- font-size: 30px;
-}
-h3,
-.h3 {
- font-size: 24px;
-}
-h4,
-.h4 {
- font-size: 18px;
-}
-h5,
-.h5 {
- font-size: 14px;
-}
-h6,
-.h6 {
- font-size: 12px;
-}
-p {
- margin: 0 0 10px;
-}
-.lead {
- margin-bottom: 20px;
- font-size: 16px;
- font-weight: 300;
- line-height: 1.4;
-}
-@media (min-width: 768px) {
- .lead {
- font-size: 21px;
- }
-}
-small,
-.small {
- font-size: 85%;
-}
-mark,
-.mark {
- background-color: #fcf8e3;
- padding: .2em;
-}
-.text-left {
- text-align: left;
-}
-.text-right {
- text-align: right;
-}
-.text-center {
- text-align: center;
-}
-.text-justify {
- text-align: justify;
-}
-.text-nowrap {
- white-space: nowrap;
-}
-.text-lowercase {
- text-transform: lowercase;
-}
-.text-uppercase {
- text-transform: uppercase;
-}
-.text-capitalize {
- text-transform: capitalize;
-}
-.text-muted {
- color: #777777;
-}
-.text-primary {
- color: #337ab7;
-}
-a.text-primary:hover,
-a.text-primary:focus {
- color: #286090;
-}
-.text-success {
- color: #3c763d;
-}
-a.text-success:hover,
-a.text-success:focus {
- color: #2b542c;
-}
-.text-info {
- color: #31708f;
-}
-a.text-info:hover,
-a.text-info:focus {
- color: #245269;
-}
-.text-warning {
- color: #8a6d3b;
-}
-a.text-warning:hover,
-a.text-warning:focus {
- color: #66512c;
-}
-.text-danger {
- color: #a94442;
-}
-a.text-danger:hover,
-a.text-danger:focus {
- color: #843534;
-}
-.bg-primary {
- color: #fff;
- background-color: #337ab7;
-}
-a.bg-primary:hover,
-a.bg-primary:focus {
- background-color: #286090;
-}
-.bg-success {
- background-color: #dff0d8;
-}
-a.bg-success:hover,
-a.bg-success:focus {
- background-color: #c1e2b3;
-}
-.bg-info {
- background-color: #d9edf7;
-}
-a.bg-info:hover,
-a.bg-info:focus {
- background-color: #afd9ee;
-}
-.bg-warning {
- background-color: #fcf8e3;
-}
-a.bg-warning:hover,
-a.bg-warning:focus {
- background-color: #f7ecb5;
-}
-.bg-danger {
- background-color: #f2dede;
-}
-a.bg-danger:hover,
-a.bg-danger:focus {
- background-color: #e4b9b9;
-}
-.page-header {
- padding-bottom: 9px;
- margin: 40px 0 20px;
- border-bottom: 1px solid #eeeeee;
-}
-ul,
-ol {
- margin-top: 0;
- margin-bottom: 10px;
-}
-ul ul,
-ol ul,
-ul ol,
-ol ol {
- margin-bottom: 0;
-}
-.list-unstyled {
- padding-left: 0;
- list-style: none;
-}
-.list-inline {
- padding-left: 0;
- list-style: none;
- margin-left: -5px;
-}
-.list-inline > li {
- display: inline-block;
- padding-left: 5px;
- padding-right: 5px;
-}
-dl {
- margin-top: 0;
- margin-bottom: 20px;
-}
-dt,
-dd {
- line-height: 1.42857143;
-}
-dt {
- font-weight: bold;
-}
-dd {
- margin-left: 0;
-}
-@media (min-width: 768px) {
- .dl-horizontal dt {
- float: left;
- width: 160px;
- clear: left;
- text-align: right;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .dl-horizontal dd {
- margin-left: 180px;
- }
-}
-abbr[title],
-abbr[data-original-title] {
- cursor: help;
- border-bottom: 1px dotted #777777;
-}
-.initialism {
- font-size: 90%;
- text-transform: uppercase;
-}
-blockquote {
- padding: 10px 20px;
- margin: 0 0 20px;
- font-size: 17.5px;
- border-left: 5px solid #eeeeee;
-}
-blockquote p:last-child,
-blockquote ul:last-child,
-blockquote ol:last-child {
- margin-bottom: 0;
-}
-blockquote footer,
-blockquote small,
-blockquote .small {
- display: block;
- font-size: 80%;
- line-height: 1.42857143;
- color: #777777;
-}
-blockquote footer:before,
-blockquote small:before,
-blockquote .small:before {
- content: '\2014 \00A0';
-}
-.blockquote-reverse,
-blockquote.pull-right {
- padding-right: 15px;
- padding-left: 0;
- border-right: 5px solid #eeeeee;
- border-left: 0;
- text-align: right;
-}
-.blockquote-reverse footer:before,
-blockquote.pull-right footer:before,
-.blockquote-reverse small:before,
-blockquote.pull-right small:before,
-.blockquote-reverse .small:before,
-blockquote.pull-right .small:before {
- content: '';
-}
-.blockquote-reverse footer:after,
-blockquote.pull-right footer:after,
-.blockquote-reverse small:after,
-blockquote.pull-right small:after,
-.blockquote-reverse .small:after,
-blockquote.pull-right .small:after {
- content: '\00A0 \2014';
-}
-address {
- margin-bottom: 20px;
- font-style: normal;
- line-height: 1.42857143;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
-}
-code {
- padding: 2px 4px;
- font-size: 90%;
- color: #c7254e;
- background-color: #f9f2f4;
- border-radius: 4px;
-}
-kbd {
- padding: 2px 4px;
- font-size: 90%;
- color: #ffffff;
- background-color: #333333;
- border-radius: 3px;
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: bold;
- box-shadow: none;
-}
-pre {
- display: block;
- padding: 9.5px;
- margin: 0 0 10px;
- font-size: 13px;
- line-height: 1.42857143;
- word-break: break-all;
- word-wrap: break-word;
- color: #333333;
- background-color: #f5f5f5;
- border: 1px solid #cccccc;
- border-radius: 4px;
-}
-pre code {
- padding: 0;
- font-size: inherit;
- color: inherit;
- white-space: pre-wrap;
- background-color: transparent;
- border-radius: 0;
-}
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
-}
-.container {
- margin-right: auto;
- margin-left: auto;
- padding-left: 15px;
- padding-right: 15px;
-}
-@media (min-width: 768px) {
- .container {
- width: 750px;
- }
-}
-@media (min-width: 992px) {
- .container {
- width: 970px;
- }
-}
-@media (min-width: 1200px) {
- .container {
- width: 1170px;
- }
-}
-.container-fluid {
- margin-right: auto;
- margin-left: auto;
- padding-left: 15px;
- padding-right: 15px;
-}
-.row {
- margin-left: -15px;
- margin-right: -15px;
-}
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
- position: relative;
- min-height: 1px;
- padding-left: 15px;
- padding-right: 15px;
-}
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
- float: left;
-}
-.col-xs-12 {
- width: 100%;
-}
-.col-xs-11 {
- width: 91.66666667%;
-}
-.col-xs-10 {
- width: 83.33333333%;
-}
-.col-xs-9 {
- width: 75%;
-}
-.col-xs-8 {
- width: 66.66666667%;
-}
-.col-xs-7 {
- width: 58.33333333%;
-}
-.col-xs-6 {
- width: 50%;
-}
-.col-xs-5 {
- width: 41.66666667%;
-}
-.col-xs-4 {
- width: 33.33333333%;
-}
-.col-xs-3 {
- width: 25%;
-}
-.col-xs-2 {
- width: 16.66666667%;
-}
-.col-xs-1 {
- width: 8.33333333%;
-}
-.col-xs-pull-12 {
- right: 100%;
-}
-.col-xs-pull-11 {
- right: 91.66666667%;
-}
-.col-xs-pull-10 {
- right: 83.33333333%;
-}
-.col-xs-pull-9 {
- right: 75%;
-}
-.col-xs-pull-8 {
- right: 66.66666667%;
-}
-.col-xs-pull-7 {
- right: 58.33333333%;
-}
-.col-xs-pull-6 {
- right: 50%;
-}
-.col-xs-pull-5 {
- right: 41.66666667%;
-}
-.col-xs-pull-4 {
- right: 33.33333333%;
-}
-.col-xs-pull-3 {
- right: 25%;
-}
-.col-xs-pull-2 {
- right: 16.66666667%;
-}
-.col-xs-pull-1 {
- right: 8.33333333%;
-}
-.col-xs-pull-0 {
- right: auto;
-}
-.col-xs-push-12 {
- left: 100%;
-}
-.col-xs-push-11 {
- left: 91.66666667%;
-}
-.col-xs-push-10 {
- left: 83.33333333%;
-}
-.col-xs-push-9 {
- left: 75%;
-}
-.col-xs-push-8 {
- left: 66.66666667%;
-}
-.col-xs-push-7 {
- left: 58.33333333%;
-}
-.col-xs-push-6 {
- left: 50%;
-}
-.col-xs-push-5 {
- left: 41.66666667%;
-}
-.col-xs-push-4 {
- left: 33.33333333%;
-}
-.col-xs-push-3 {
- left: 25%;
-}
-.col-xs-push-2 {
- left: 16.66666667%;
-}
-.col-xs-push-1 {
- left: 8.33333333%;
-}
-.col-xs-push-0 {
- left: auto;
-}
-.col-xs-offset-12 {
- margin-left: 100%;
-}
-.col-xs-offset-11 {
- margin-left: 91.66666667%;
-}
-.col-xs-offset-10 {
- margin-left: 83.33333333%;
-}
-.col-xs-offset-9 {
- margin-left: 75%;
-}
-.col-xs-offset-8 {
- margin-left: 66.66666667%;
-}
-.col-xs-offset-7 {
- margin-left: 58.33333333%;
-}
-.col-xs-offset-6 {
- margin-left: 50%;
-}
-.col-xs-offset-5 {
- margin-left: 41.66666667%;
-}
-.col-xs-offset-4 {
- margin-left: 33.33333333%;
-}
-.col-xs-offset-3 {
- margin-left: 25%;
-}
-.col-xs-offset-2 {
- margin-left: 16.66666667%;
-}
-.col-xs-offset-1 {
- margin-left: 8.33333333%;
-}
-.col-xs-offset-0 {
- margin-left: 0%;
-}
-@media (min-width: 768px) {
- .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
- float: left;
- }
- .col-sm-12 {
- width: 100%;
- }
- .col-sm-11 {
- width: 91.66666667%;
- }
- .col-sm-10 {
- width: 83.33333333%;
- }
- .col-sm-9 {
- width: 75%;
- }
- .col-sm-8 {
- width: 66.66666667%;
- }
- .col-sm-7 {
- width: 58.33333333%;
- }
- .col-sm-6 {
- width: 50%;
- }
- .col-sm-5 {
- width: 41.66666667%;
- }
- .col-sm-4 {
- width: 33.33333333%;
- }
- .col-sm-3 {
- width: 25%;
- }
- .col-sm-2 {
- width: 16.66666667%;
- }
- .col-sm-1 {
- width: 8.33333333%;
- }
- .col-sm-pull-12 {
- right: 100%;
- }
- .col-sm-pull-11 {
- right: 91.66666667%;
- }
- .col-sm-pull-10 {
- right: 83.33333333%;
- }
- .col-sm-pull-9 {
- right: 75%;
- }
- .col-sm-pull-8 {
- right: 66.66666667%;
- }
- .col-sm-pull-7 {
- right: 58.33333333%;
- }
- .col-sm-pull-6 {
- right: 50%;
- }
- .col-sm-pull-5 {
- right: 41.66666667%;
- }
- .col-sm-pull-4 {
- right: 33.33333333%;
- }
- .col-sm-pull-3 {
- right: 25%;
- }
- .col-sm-pull-2 {
- right: 16.66666667%;
- }
- .col-sm-pull-1 {
- right: 8.33333333%;
- }
- .col-sm-pull-0 {
- right: auto;
- }
- .col-sm-push-12 {
- left: 100%;
- }
- .col-sm-push-11 {
- left: 91.66666667%;
- }
- .col-sm-push-10 {
- left: 83.33333333%;
- }
- .col-sm-push-9 {
- left: 75%;
- }
- .col-sm-push-8 {
- left: 66.66666667%;
- }
- .col-sm-push-7 {
- left: 58.33333333%;
- }
- .col-sm-push-6 {
- left: 50%;
- }
- .col-sm-push-5 {
- left: 41.66666667%;
- }
- .col-sm-push-4 {
- left: 33.33333333%;
- }
- .col-sm-push-3 {
- left: 25%;
- }
- .col-sm-push-2 {
- left: 16.66666667%;
- }
- .col-sm-push-1 {
- left: 8.33333333%;
- }
- .col-sm-push-0 {
- left: auto;
- }
- .col-sm-offset-12 {
- margin-left: 100%;
- }
- .col-sm-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-sm-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-sm-offset-9 {
- margin-left: 75%;
- }
- .col-sm-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-sm-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-sm-offset-6 {
- margin-left: 50%;
- }
- .col-sm-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-sm-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-sm-offset-3 {
- margin-left: 25%;
- }
- .col-sm-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-sm-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-sm-offset-0 {
- margin-left: 0%;
- }
-}
-@media (min-width: 992px) {
- .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
- float: left;
- }
- .col-md-12 {
- width: 100%;
- }
- .col-md-11 {
- width: 91.66666667%;
- }
- .col-md-10 {
- width: 83.33333333%;
- }
- .col-md-9 {
- width: 75%;
- }
- .col-md-8 {
- width: 66.66666667%;
- }
- .col-md-7 {
- width: 58.33333333%;
- }
- .col-md-6 {
- width: 50%;
- }
- .col-md-5 {
- width: 41.66666667%;
- }
- .col-md-4 {
- width: 33.33333333%;
- }
- .col-md-3 {
- width: 25%;
- }
- .col-md-2 {
- width: 16.66666667%;
- }
- .col-md-1 {
- width: 8.33333333%;
- }
- .col-md-pull-12 {
- right: 100%;
- }
- .col-md-pull-11 {
- right: 91.66666667%;
- }
- .col-md-pull-10 {
- right: 83.33333333%;
- }
- .col-md-pull-9 {
- right: 75%;
- }
- .col-md-pull-8 {
- right: 66.66666667%;
- }
- .col-md-pull-7 {
- right: 58.33333333%;
- }
- .col-md-pull-6 {
- right: 50%;
- }
- .col-md-pull-5 {
- right: 41.66666667%;
- }
- .col-md-pull-4 {
- right: 33.33333333%;
- }
- .col-md-pull-3 {
- right: 25%;
- }
- .col-md-pull-2 {
- right: 16.66666667%;
- }
- .col-md-pull-1 {
- right: 8.33333333%;
- }
- .col-md-pull-0 {
- right: auto;
- }
- .col-md-push-12 {
- left: 100%;
- }
- .col-md-push-11 {
- left: 91.66666667%;
- }
- .col-md-push-10 {
- left: 83.33333333%;
- }
- .col-md-push-9 {
- left: 75%;
- }
- .col-md-push-8 {
- left: 66.66666667%;
- }
- .col-md-push-7 {
- left: 58.33333333%;
- }
- .col-md-push-6 {
- left: 50%;
- }
- .col-md-push-5 {
- left: 41.66666667%;
- }
- .col-md-push-4 {
- left: 33.33333333%;
- }
- .col-md-push-3 {
- left: 25%;
- }
- .col-md-push-2 {
- left: 16.66666667%;
- }
- .col-md-push-1 {
- left: 8.33333333%;
- }
- .col-md-push-0 {
- left: auto;
- }
- .col-md-offset-12 {
- margin-left: 100%;
- }
- .col-md-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-md-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-md-offset-9 {
- margin-left: 75%;
- }
- .col-md-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-md-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-md-offset-6 {
- margin-left: 50%;
- }
- .col-md-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-md-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-md-offset-3 {
- margin-left: 25%;
- }
- .col-md-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-md-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-md-offset-0 {
- margin-left: 0%;
- }
-}
-@media (min-width: 1200px) {
- .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
- float: left;
- }
- .col-lg-12 {
- width: 100%;
- }
- .col-lg-11 {
- width: 91.66666667%;
- }
- .col-lg-10 {
- width: 83.33333333%;
- }
- .col-lg-9 {
- width: 75%;
- }
- .col-lg-8 {
- width: 66.66666667%;
- }
- .col-lg-7 {
- width: 58.33333333%;
- }
- .col-lg-6 {
- width: 50%;
- }
- .col-lg-5 {
- width: 41.66666667%;
- }
- .col-lg-4 {
- width: 33.33333333%;
- }
- .col-lg-3 {
- width: 25%;
- }
- .col-lg-2 {
- width: 16.66666667%;
- }
- .col-lg-1 {
- width: 8.33333333%;
- }
- .col-lg-pull-12 {
- right: 100%;
- }
- .col-lg-pull-11 {
- right: 91.66666667%;
- }
- .col-lg-pull-10 {
- right: 83.33333333%;
- }
- .col-lg-pull-9 {
- right: 75%;
- }
- .col-lg-pull-8 {
- right: 66.66666667%;
- }
- .col-lg-pull-7 {
- right: 58.33333333%;
- }
- .col-lg-pull-6 {
- right: 50%;
- }
- .col-lg-pull-5 {
- right: 41.66666667%;
- }
- .col-lg-pull-4 {
- right: 33.33333333%;
- }
- .col-lg-pull-3 {
- right: 25%;
- }
- .col-lg-pull-2 {
- right: 16.66666667%;
- }
- .col-lg-pull-1 {
- right: 8.33333333%;
- }
- .col-lg-pull-0 {
- right: auto;
- }
- .col-lg-push-12 {
- left: 100%;
- }
- .col-lg-push-11 {
- left: 91.66666667%;
- }
- .col-lg-push-10 {
- left: 83.33333333%;
- }
- .col-lg-push-9 {
- left: 75%;
- }
- .col-lg-push-8 {
- left: 66.66666667%;
- }
- .col-lg-push-7 {
- left: 58.33333333%;
- }
- .col-lg-push-6 {
- left: 50%;
- }
- .col-lg-push-5 {
- left: 41.66666667%;
- }
- .col-lg-push-4 {
- left: 33.33333333%;
- }
- .col-lg-push-3 {
- left: 25%;
- }
- .col-lg-push-2 {
- left: 16.66666667%;
- }
- .col-lg-push-1 {
- left: 8.33333333%;
- }
- .col-lg-push-0 {
- left: auto;
- }
- .col-lg-offset-12 {
- margin-left: 100%;
- }
- .col-lg-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-lg-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-lg-offset-9 {
- margin-left: 75%;
- }
- .col-lg-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-lg-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-lg-offset-6 {
- margin-left: 50%;
- }
- .col-lg-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-lg-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-lg-offset-3 {
- margin-left: 25%;
- }
- .col-lg-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-lg-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-lg-offset-0 {
- margin-left: 0%;
- }
-}
-table {
- background-color: transparent;
-}
-caption {
- padding-top: 8px;
- padding-bottom: 8px;
- color: #777777;
- text-align: left;
-}
-th {
- text-align: left;
-}
-.table {
- width: 100%;
- max-width: 100%;
- margin-bottom: 20px;
-}
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td {
- padding: 8px;
- line-height: 1.42857143;
- vertical-align: top;
- border-top: 1px solid #dddddd;
-}
-.table > thead > tr > th {
- vertical-align: bottom;
- border-bottom: 2px solid #dddddd;
-}
-.table > caption + thead > tr:first-child > th,
-.table > colgroup + thead > tr:first-child > th,
-.table > thead:first-child > tr:first-child > th,
-.table > caption + thead > tr:first-child > td,
-.table > colgroup + thead > tr:first-child > td,
-.table > thead:first-child > tr:first-child > td {
- border-top: 0;
-}
-.table > tbody + tbody {
- border-top: 2px solid #dddddd;
-}
-.table .table {
- background-color: #ffffff;
-}
-.table-condensed > thead > tr > th,
-.table-condensed > tbody > tr > th,
-.table-condensed > tfoot > tr > th,
-.table-condensed > thead > tr > td,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > td {
- padding: 5px;
-}
-.table-bordered {
- border: 1px solid #dddddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
- border: 1px solid #dddddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > thead > tr > td {
- border-bottom-width: 2px;
-}
-.table-striped > tbody > tr:nth-of-type(odd) {
- background-color: #f9f9f9;
-}
-.table-hover > tbody > tr:hover {
- background-color: #f5f5f5;
-}
-table col[class*="col-"] {
- position: static;
- float: none;
- display: table-column;
-}
-table td[class*="col-"],
-table th[class*="col-"] {
- position: static;
- float: none;
- display: table-cell;
-}
-.table > thead > tr > td.active,
-.table > tbody > tr > td.active,
-.table > tfoot > tr > td.active,
-.table > thead > tr > th.active,
-.table > tbody > tr > th.active,
-.table > tfoot > tr > th.active,
-.table > thead > tr.active > td,
-.table > tbody > tr.active > td,
-.table > tfoot > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr.active > th,
-.table > tfoot > tr.active > th {
- background-color: #f5f5f5;
-}
-.table-hover > tbody > tr > td.active:hover,
-.table-hover > tbody > tr > th.active:hover,
-.table-hover > tbody > tr.active:hover > td,
-.table-hover > tbody > tr:hover > .active,
-.table-hover > tbody > tr.active:hover > th {
- background-color: #e8e8e8;
-}
-.table > thead > tr > td.success,
-.table > tbody > tr > td.success,
-.table > tfoot > tr > td.success,
-.table > thead > tr > th.success,
-.table > tbody > tr > th.success,
-.table > tfoot > tr > th.success,
-.table > thead > tr.success > td,
-.table > tbody > tr.success > td,
-.table > tfoot > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr.success > th,
-.table > tfoot > tr.success > th {
- background-color: #dff0d8;
-}
-.table-hover > tbody > tr > td.success:hover,
-.table-hover > tbody > tr > th.success:hover,
-.table-hover > tbody > tr.success:hover > td,
-.table-hover > tbody > tr:hover > .success,
-.table-hover > tbody > tr.success:hover > th {
- background-color: #d0e9c6;
-}
-.table > thead > tr > td.info,
-.table > tbody > tr > td.info,
-.table > tfoot > tr > td.info,
-.table > thead > tr > th.info,
-.table > tbody > tr > th.info,
-.table > tfoot > tr > th.info,
-.table > thead > tr.info > td,
-.table > tbody > tr.info > td,
-.table > tfoot > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr.info > th,
-.table > tfoot > tr.info > th {
- background-color: #d9edf7;
-}
-.table-hover > tbody > tr > td.info:hover,
-.table-hover > tbody > tr > th.info:hover,
-.table-hover > tbody > tr.info:hover > td,
-.table-hover > tbody > tr:hover > .info,
-.table-hover > tbody > tr.info:hover > th {
- background-color: #c4e3f3;
-}
-.table > thead > tr > td.warning,
-.table > tbody > tr > td.warning,
-.table > tfoot > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > tbody > tr > th.warning,
-.table > tfoot > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > tbody > tr.warning > td,
-.table > tfoot > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr.warning > th {
- background-color: #fcf8e3;
-}
-.table-hover > tbody > tr > td.warning:hover,
-.table-hover > tbody > tr > th.warning:hover,
-.table-hover > tbody > tr.warning:hover > td,
-.table-hover > tbody > tr:hover > .warning,
-.table-hover > tbody > tr.warning:hover > th {
- background-color: #faf2cc;
-}
-.table > thead > tr > td.danger,
-.table > tbody > tr > td.danger,
-.table > tfoot > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > tbody > tr > th.danger,
-.table > tfoot > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > tbody > tr.danger > td,
-.table > tfoot > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr.danger > th {
- background-color: #f2dede;
-}
-.table-hover > tbody > tr > td.danger:hover,
-.table-hover > tbody > tr > th.danger:hover,
-.table-hover > tbody > tr.danger:hover > td,
-.table-hover > tbody > tr:hover > .danger,
-.table-hover > tbody > tr.danger:hover > th {
- background-color: #ebcccc;
-}
-.table-responsive {
- overflow-x: auto;
- min-height: 0.01%;
-}
-@media screen and (max-width: 767px) {
- .table-responsive {
- width: 100%;
- margin-bottom: 15px;
- overflow-y: hidden;
- -ms-overflow-style: -ms-autohiding-scrollbar;
- border: 1px solid #dddddd;
- }
- .table-responsive > .table {
- margin-bottom: 0;
- }
- .table-responsive > .table > thead > tr > th,
- .table-responsive > .table > tbody > tr > th,
- .table-responsive > .table > tfoot > tr > th,
- .table-responsive > .table > thead > tr > td,
- .table-responsive > .table > tbody > tr > td,
- .table-responsive > .table > tfoot > tr > td {
- white-space: nowrap;
- }
- .table-responsive > .table-bordered {
- border: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:first-child,
- .table-responsive > .table-bordered > tbody > tr > th:first-child,
- .table-responsive > .table-bordered > tfoot > tr > th:first-child,
- .table-responsive > .table-bordered > thead > tr > td:first-child,
- .table-responsive > .table-bordered > tbody > tr > td:first-child,
- .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:last-child,
- .table-responsive > .table-bordered > tbody > tr > th:last-child,
- .table-responsive > .table-bordered > tfoot > tr > th:last-child,
- .table-responsive > .table-bordered > thead > tr > td:last-child,
- .table-responsive > .table-bordered > tbody > tr > td:last-child,
- .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
- }
- .table-responsive > .table-bordered > tbody > tr:last-child > th,
- .table-responsive > .table-bordered > tfoot > tr:last-child > th,
- .table-responsive > .table-bordered > tbody > tr:last-child > td,
- .table-responsive > .table-bordered > tfoot > tr:last-child > td {
- border-bottom: 0;
- }
-}
-fieldset {
- padding: 0;
- margin: 0;
- border: 0;
- min-width: 0;
-}
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 20px;
- font-size: 21px;
- line-height: inherit;
- color: #333333;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
-}
-label {
- display: inline-block;
- max-width: 100%;
- margin-bottom: 5px;
- font-weight: bold;
-}
-input[type="search"] {
- box-sizing: border-box;
-}
-input[type="radio"],
-input[type="checkbox"] {
- margin: 4px 0 0;
- margin-top: 1px \9;
- line-height: normal;
-}
-input[type="file"] {
- display: block;
-}
-input[type="range"] {
- display: block;
- width: 100%;
-}
-select[multiple],
-select[size] {
- height: auto;
-}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-output {
- display: block;
- padding-top: 7px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #555555;
-}
-.form-control {
- display: block;
- width: 100%;
- height: 34px;
- padding: 6px 12px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #555555;
- background-color: #ffffff;
- background-image: none;
- border: 1px solid #cccccc;
- border-radius: 4px;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-.form-control:focus {
- border-color: #66afe9;
- outline: 0;
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
-}
-.form-control::-moz-placeholder {
- color: #999999;
- opacity: 1;
-}
-.form-control:-ms-input-placeholder {
- color: #999999;
-}
-.form-control::-webkit-input-placeholder {
- color: #999999;
-}
-.form-control::-ms-expand {
- border: 0;
- background-color: transparent;
-}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
- background-color: #eeeeee;
- opacity: 1;
-}
-.form-control[disabled],
-fieldset[disabled] .form-control {
- cursor: not-allowed;
-}
-textarea.form-control {
- height: auto;
-}
-input[type="search"] {
- -webkit-appearance: none;
-}
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
- input[type="date"].form-control,
- input[type="time"].form-control,
- input[type="datetime-local"].form-control,
- input[type="month"].form-control {
- line-height: 34px;
- }
- input[type="date"].input-sm,
- input[type="time"].input-sm,
- input[type="datetime-local"].input-sm,
- input[type="month"].input-sm,
- .input-group-sm input[type="date"],
- .input-group-sm input[type="time"],
- .input-group-sm input[type="datetime-local"],
- .input-group-sm input[type="month"] {
- line-height: 30px;
- }
- input[type="date"].input-lg,
- input[type="time"].input-lg,
- input[type="datetime-local"].input-lg,
- input[type="month"].input-lg,
- .input-group-lg input[type="date"],
- .input-group-lg input[type="time"],
- .input-group-lg input[type="datetime-local"],
- .input-group-lg input[type="month"] {
- line-height: 46px;
- }
-}
-.form-group {
- margin-bottom: 15px;
-}
-.radio,
-.checkbox {
- position: relative;
- display: block;
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
- min-height: 20px;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
- position: absolute;
- margin-left: -20px;
- margin-top: 4px \9;
-}
-.radio + .radio,
-.checkbox + .checkbox {
- margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
- position: relative;
- display: inline-block;
- padding-left: 20px;
- margin-bottom: 0;
- vertical-align: middle;
- font-weight: normal;
- cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
- margin-top: 0;
- margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"].disabled,
-input[type="checkbox"].disabled,
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"] {
- cursor: not-allowed;
-}
-.radio-inline.disabled,
-.checkbox-inline.disabled,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox-inline {
- cursor: not-allowed;
-}
-.radio.disabled label,
-.checkbox.disabled label,
-fieldset[disabled] .radio label,
-fieldset[disabled] .checkbox label {
- cursor: not-allowed;
-}
-.form-control-static {
- padding-top: 7px;
- padding-bottom: 7px;
- margin-bottom: 0;
- min-height: 34px;
-}
-.form-control-static.input-lg,
-.form-control-static.input-sm {
- padding-left: 0;
- padding-right: 0;
-}
-.input-sm {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.input-sm {
- height: 30px;
- line-height: 30px;
-}
-textarea.input-sm,
-select[multiple].input-sm {
- height: auto;
-}
-.form-group-sm .form-control {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.form-group-sm select.form-control {
- height: 30px;
- line-height: 30px;
-}
-.form-group-sm textarea.form-control,
-.form-group-sm select[multiple].form-control {
- height: auto;
-}
-.form-group-sm .form-control-static {
- height: 30px;
- min-height: 32px;
- padding: 6px 10px;
- font-size: 12px;
- line-height: 1.5;
-}
-.input-lg {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-select.input-lg {
- height: 46px;
- line-height: 46px;
-}
-textarea.input-lg,
-select[multiple].input-lg {
- height: auto;
-}
-.form-group-lg .form-control {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-.form-group-lg select.form-control {
- height: 46px;
- line-height: 46px;
-}
-.form-group-lg textarea.form-control,
-.form-group-lg select[multiple].form-control {
- height: auto;
-}
-.form-group-lg .form-control-static {
- height: 46px;
- min-height: 38px;
- padding: 11px 16px;
- font-size: 18px;
- line-height: 1.3333333;
-}
-.has-feedback {
- position: relative;
-}
-.has-feedback .form-control {
- padding-right: 42.5px;
-}
-.form-control-feedback {
- position: absolute;
- top: 0;
- right: 0;
- z-index: 2;
- display: block;
- width: 34px;
- height: 34px;
- line-height: 34px;
- text-align: center;
- pointer-events: none;
-}
-.input-lg + .form-control-feedback,
-.input-group-lg + .form-control-feedback,
-.form-group-lg .form-control + .form-control-feedback {
- width: 46px;
- height: 46px;
- line-height: 46px;
-}
-.input-sm + .form-control-feedback,
-.input-group-sm + .form-control-feedback,
-.form-group-sm .form-control + .form-control-feedback {
- width: 30px;
- height: 30px;
- line-height: 30px;
-}
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline,
-.has-success.radio label,
-.has-success.checkbox label,
-.has-success.radio-inline label,
-.has-success.checkbox-inline label {
- color: #3c763d;
-}
-.has-success .form-control {
- border-color: #3c763d;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.has-success .form-control:focus {
- border-color: #2b542c;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
-}
-.has-success .input-group-addon {
- color: #3c763d;
- border-color: #3c763d;
- background-color: #dff0d8;
-}
-.has-success .form-control-feedback {
- color: #3c763d;
-}
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .radio,
-.has-warning .checkbox,
-.has-warning .radio-inline,
-.has-warning .checkbox-inline,
-.has-warning.radio label,
-.has-warning.checkbox label,
-.has-warning.radio-inline label,
-.has-warning.checkbox-inline label {
- color: #8a6d3b;
-}
-.has-warning .form-control {
- border-color: #8a6d3b;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.has-warning .form-control:focus {
- border-color: #66512c;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
-}
-.has-warning .input-group-addon {
- color: #8a6d3b;
- border-color: #8a6d3b;
- background-color: #fcf8e3;
-}
-.has-warning .form-control-feedback {
- color: #8a6d3b;
-}
-.has-error .help-block,
-.has-error .control-label,
-.has-error .radio,
-.has-error .checkbox,
-.has-error .radio-inline,
-.has-error .checkbox-inline,
-.has-error.radio label,
-.has-error.checkbox label,
-.has-error.radio-inline label,
-.has-error.checkbox-inline label {
- color: #a94442;
-}
-.has-error .form-control {
- border-color: #a94442;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.has-error .form-control:focus {
- border-color: #843534;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
-}
-.has-error .input-group-addon {
- color: #a94442;
- border-color: #a94442;
- background-color: #f2dede;
-}
-.has-error .form-control-feedback {
- color: #a94442;
-}
-.has-feedback label ~ .form-control-feedback {
- top: 25px;
-}
-.has-feedback label.sr-only ~ .form-control-feedback {
- top: 0;
-}
-.help-block {
- display: block;
- margin-top: 5px;
- margin-bottom: 10px;
- color: #737373;
-}
-@media (min-width: 768px) {
- .form-inline .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .form-inline .form-control-static {
- display: inline-block;
- }
- .form-inline .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .form-inline .input-group .input-group-addon,
- .form-inline .input-group .input-group-btn,
- .form-inline .input-group .form-control {
- width: auto;
- }
- .form-inline .input-group > .form-control {
- width: 100%;
- }
- .form-inline .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio,
- .form-inline .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio label,
- .form-inline .checkbox label {
- padding-left: 0;
- }
- .form-inline .radio input[type="radio"],
- .form-inline .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .form-inline .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
- margin-top: 0;
- margin-bottom: 0;
- padding-top: 7px;
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox {
- min-height: 27px;
-}
-.form-horizontal .form-group {
- margin-left: -15px;
- margin-right: -15px;
-}
-@media (min-width: 768px) {
- .form-horizontal .control-label {
- text-align: right;
- margin-bottom: 0;
- padding-top: 7px;
- }
-}
-.form-horizontal .has-feedback .form-control-feedback {
- right: 15px;
-}
-@media (min-width: 768px) {
- .form-horizontal .form-group-lg .control-label {
- padding-top: 11px;
- font-size: 18px;
- }
-}
-@media (min-width: 768px) {
- .form-horizontal .form-group-sm .control-label {
- padding-top: 6px;
- font-size: 12px;
- }
-}
-.btn {
- display: inline-block;
- margin-bottom: 0;
- font-weight: normal;
- text-align: center;
- vertical-align: middle;
- -ms-touch-action: manipulation;
- touch-action: manipulation;
- cursor: pointer;
- background-image: none;
- border: 1px solid transparent;
- white-space: nowrap;
- padding: 6px 12px;
- font-size: 14px;
- line-height: 1.42857143;
- border-radius: 4px;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus,
-.btn.focus,
-.btn:active.focus,
-.btn.active.focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-.btn:hover,
-.btn:focus,
-.btn.focus {
- color: #333333;
- text-decoration: none;
-}
-.btn:active,
-.btn.active {
- outline: 0;
- background-image: none;
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
- cursor: not-allowed;
- opacity: 0.65;
- filter: alpha(opacity=65);
- box-shadow: none;
-}
-a.btn.disabled,
-fieldset[disabled] a.btn {
- pointer-events: none;
-}
-.btn-default {
- color: #333333;
- background-color: #ffffff;
- border-color: #cccccc;
-}
-.btn-default:focus,
-.btn-default.focus {
- color: #333333;
- background-color: #e6e6e6;
- border-color: #8c8c8c;
-}
-.btn-default:hover {
- color: #333333;
- background-color: #e6e6e6;
- border-color: #adadad;
-}
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- color: #333333;
- background-color: #e6e6e6;
- border-color: #adadad;
-}
-.btn-default:active:hover,
-.btn-default.active:hover,
-.open > .dropdown-toggle.btn-default:hover,
-.btn-default:active:focus,
-.btn-default.active:focus,
-.open > .dropdown-toggle.btn-default:focus,
-.btn-default:active.focus,
-.btn-default.active.focus,
-.open > .dropdown-toggle.btn-default.focus {
- color: #333333;
- background-color: #d4d4d4;
- border-color: #8c8c8c;
-}
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- background-image: none;
-}
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled.focus,
-.btn-default[disabled].focus,
-fieldset[disabled] .btn-default.focus {
- background-color: #ffffff;
- border-color: #cccccc;
-}
-.btn-default .badge {
- color: #ffffff;
- background-color: #333333;
-}
-.btn-primary {
- color: #ffffff;
- background-color: #337ab7;
- border-color: #2e6da4;
-}
-.btn-primary:focus,
-.btn-primary.focus {
- color: #ffffff;
- background-color: #286090;
- border-color: #122b40;
-}
-.btn-primary:hover {
- color: #ffffff;
- background-color: #286090;
- border-color: #204d74;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- color: #ffffff;
- background-color: #286090;
- border-color: #204d74;
-}
-.btn-primary:active:hover,
-.btn-primary.active:hover,
-.open > .dropdown-toggle.btn-primary:hover,
-.btn-primary:active:focus,
-.btn-primary.active:focus,
-.open > .dropdown-toggle.btn-primary:focus,
-.btn-primary:active.focus,
-.btn-primary.active.focus,
-.open > .dropdown-toggle.btn-primary.focus {
- color: #ffffff;
- background-color: #204d74;
- border-color: #122b40;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- background-image: none;
-}
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled.focus,
-.btn-primary[disabled].focus,
-fieldset[disabled] .btn-primary.focus {
- background-color: #337ab7;
- border-color: #2e6da4;
-}
-.btn-primary .badge {
- color: #337ab7;
- background-color: #ffffff;
-}
-.btn-success {
- color: #ffffff;
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success:focus,
-.btn-success.focus {
- color: #ffffff;
- background-color: #449d44;
- border-color: #255625;
-}
-.btn-success:hover {
- color: #ffffff;
- background-color: #449d44;
- border-color: #398439;
-}
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- color: #ffffff;
- background-color: #449d44;
- border-color: #398439;
-}
-.btn-success:active:hover,
-.btn-success.active:hover,
-.open > .dropdown-toggle.btn-success:hover,
-.btn-success:active:focus,
-.btn-success.active:focus,
-.open > .dropdown-toggle.btn-success:focus,
-.btn-success:active.focus,
-.btn-success.active.focus,
-.open > .dropdown-toggle.btn-success.focus {
- color: #ffffff;
- background-color: #398439;
- border-color: #255625;
-}
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- background-image: none;
-}
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled.focus,
-.btn-success[disabled].focus,
-fieldset[disabled] .btn-success.focus {
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success .badge {
- color: #5cb85c;
- background-color: #ffffff;
-}
-.btn-info {
- color: #ffffff;
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info:focus,
-.btn-info.focus {
- color: #ffffff;
- background-color: #31b0d5;
- border-color: #1b6d85;
-}
-.btn-info:hover {
- color: #ffffff;
- background-color: #31b0d5;
- border-color: #269abc;
-}
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- color: #ffffff;
- background-color: #31b0d5;
- border-color: #269abc;
-}
-.btn-info:active:hover,
-.btn-info.active:hover,
-.open > .dropdown-toggle.btn-info:hover,
-.btn-info:active:focus,
-.btn-info.active:focus,
-.open > .dropdown-toggle.btn-info:focus,
-.btn-info:active.focus,
-.btn-info.active.focus,
-.open > .dropdown-toggle.btn-info.focus {
- color: #ffffff;
- background-color: #269abc;
- border-color: #1b6d85;
-}
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- background-image: none;
-}
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled.focus,
-.btn-info[disabled].focus,
-fieldset[disabled] .btn-info.focus {
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info .badge {
- color: #5bc0de;
- background-color: #ffffff;
-}
-.btn-warning {
- color: #ffffff;
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning:focus,
-.btn-warning.focus {
- color: #ffffff;
- background-color: #ec971f;
- border-color: #985f0d;
-}
-.btn-warning:hover {
- color: #ffffff;
- background-color: #ec971f;
- border-color: #d58512;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- color: #ffffff;
- background-color: #ec971f;
- border-color: #d58512;
-}
-.btn-warning:active:hover,
-.btn-warning.active:hover,
-.open > .dropdown-toggle.btn-warning:hover,
-.btn-warning:active:focus,
-.btn-warning.active:focus,
-.open > .dropdown-toggle.btn-warning:focus,
-.btn-warning:active.focus,
-.btn-warning.active.focus,
-.open > .dropdown-toggle.btn-warning.focus {
- color: #ffffff;
- background-color: #d58512;
- border-color: #985f0d;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- background-image: none;
-}
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled.focus,
-.btn-warning[disabled].focus,
-fieldset[disabled] .btn-warning.focus {
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning .badge {
- color: #f0ad4e;
- background-color: #ffffff;
-}
-.btn-danger {
- color: #ffffff;
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger:focus,
-.btn-danger.focus {
- color: #ffffff;
- background-color: #c9302c;
- border-color: #761c19;
-}
-.btn-danger:hover {
- color: #ffffff;
- background-color: #c9302c;
- border-color: #ac2925;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- color: #ffffff;
- background-color: #c9302c;
- border-color: #ac2925;
-}
-.btn-danger:active:hover,
-.btn-danger.active:hover,
-.open > .dropdown-toggle.btn-danger:hover,
-.btn-danger:active:focus,
-.btn-danger.active:focus,
-.open > .dropdown-toggle.btn-danger:focus,
-.btn-danger:active.focus,
-.btn-danger.active.focus,
-.open > .dropdown-toggle.btn-danger.focus {
- color: #ffffff;
- background-color: #ac2925;
- border-color: #761c19;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- background-image: none;
-}
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled.focus,
-.btn-danger[disabled].focus,
-fieldset[disabled] .btn-danger.focus {
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger .badge {
- color: #d9534f;
- background-color: #ffffff;
-}
-.btn-link {
- color: #337ab7;
- font-weight: normal;
- border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link.active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
- background-color: transparent;
- box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
- border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
- color: #23527c;
- text-decoration: underline;
- background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
- color: #777777;
- text-decoration: none;
-}
-.btn-lg,
-.btn-group-lg > .btn {
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-.btn-sm,
-.btn-group-sm > .btn {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-xs,
-.btn-group-xs > .btn {
- padding: 1px 5px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-block {
- display: block;
- width: 100%;
-}
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
- width: 100%;
-}
-.fade {
- opacity: 0;
- transition: opacity 0.15s linear;
-}
-.fade.in {
- opacity: 1;
-}
-.collapse {
- display: none;
-}
-.collapse.in {
- display: block;
-}
-tr.collapse.in {
- display: table-row;
-}
-tbody.collapse.in {
- display: table-row-group;
-}
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- transition-property: height, visibility;
- transition-duration: 0.35s;
- transition-timing-function: ease;
-}
-.caret {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 2px;
- vertical-align: middle;
- border-top: 4px dashed;
- border-top: 4px solid \9;
- border-right: 4px solid transparent;
- border-left: 4px solid transparent;
-}
-.dropup,
-.dropdown {
- position: relative;
-}
-.dropdown-toggle:focus {
- outline: 0;
-}
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 160px;
- padding: 5px 0;
- margin: 2px 0 0;
- list-style: none;
- font-size: 14px;
- text-align: left;
- background-color: #ffffff;
- border: 1px solid #cccccc;
- border: 1px solid rgba(0, 0, 0, 0.15);
- border-radius: 4px;
- box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
- background-clip: padding-box;
-}
-.dropdown-menu.pull-right {
- right: 0;
- left: auto;
-}
-.dropdown-menu .divider {
- height: 1px;
- margin: 9px 0;
- overflow: hidden;
- background-color: #e5e5e5;
-}
-.dropdown-menu > li > a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: 1.42857143;
- color: #333333;
- white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
- text-decoration: none;
- color: #262626;
- background-color: #f5f5f5;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
- color: #ffffff;
- text-decoration: none;
- outline: 0;
- background-color: #337ab7;
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- color: #777777;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- text-decoration: none;
- background-color: transparent;
- background-image: none;
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- cursor: not-allowed;
-}
-.open > .dropdown-menu {
- display: block;
-}
-.open > a {
- outline: 0;
-}
-.dropdown-menu-right {
- left: auto;
- right: 0;
-}
-.dropdown-menu-left {
- left: 0;
- right: auto;
-}
-.dropdown-header {
- display: block;
- padding: 3px 20px;
- font-size: 12px;
- line-height: 1.42857143;
- color: #777777;
- white-space: nowrap;
-}
-.dropdown-backdrop {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 0;
- top: 0;
- z-index: 990;
-}
-.pull-right > .dropdown-menu {
- right: 0;
- left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
- border-top: 0;
- border-bottom: 4px dashed;
- border-bottom: 4px solid \9;
- content: "";
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-bottom: 2px;
-}
-@media (min-width: 768px) {
- .navbar-right .dropdown-menu {
- left: auto;
- right: 0;
- }
- .navbar-right .dropdown-menu-left {
- left: 0;
- right: auto;
- }
-}
-.btn-group,
-.btn-group-vertical {
- position: relative;
- display: inline-block;
- vertical-align: middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn {
- position: relative;
- float: left;
-}
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
- z-index: 2;
-}
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
- margin-left: -1px;
-}
-.btn-toolbar {
- margin-left: -5px;
-}
-.btn-toolbar .btn,
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
- float: left;
-}
-.btn-toolbar > .btn,
-.btn-toolbar > .btn-group,
-.btn-toolbar > .input-group {
- margin-left: 5px;
-}
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
- border-radius: 0;
-}
-.btn-group > .btn:first-child {
- margin-left: 0;
-}
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
-}
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
-}
-.btn-group > .btn-group {
- float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
-}
-.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
- outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
- padding-left: 8px;
- padding-right: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
- padding-left: 12px;
- padding-right: 12px;
-}
-.btn-group.open .dropdown-toggle {
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-}
-.btn-group.open .dropdown-toggle.btn-link {
- box-shadow: none;
-}
-.btn .caret {
- margin-left: 0;
-}
-.btn-lg .caret {
- border-width: 5px 5px 0;
- border-bottom-width: 0;
-}
-.dropup .btn-lg .caret {
- border-width: 0 5px 5px;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group,
-.btn-group-vertical > .btn-group > .btn {
- display: block;
- float: none;
- width: 100%;
- max-width: 100%;
-}
-.btn-group-vertical > .btn-group > .btn {
- float: none;
-}
-.btn-group-vertical > .btn + .btn,
-.btn-group-vertical > .btn + .btn-group,
-.btn-group-vertical > .btn-group + .btn,
-.btn-group-vertical > .btn-group + .btn-group {
- margin-top: -1px;
- margin-left: 0;
-}
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
- border-radius: 0;
-}
-.btn-group-vertical > .btn:first-child:not(:last-child) {
- border-top-right-radius: 4px;
- border-top-left-radius: 4px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn:last-child:not(:first-child) {
- border-top-right-radius: 0;
- border-top-left-radius: 0;
- border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-top-right-radius: 0;
- border-top-left-radius: 0;
-}
-.btn-group-justified {
- display: table;
- width: 100%;
- table-layout: fixed;
- border-collapse: separate;
-}
-.btn-group-justified > .btn,
-.btn-group-justified > .btn-group {
- float: none;
- display: table-cell;
- width: 1%;
-}
-.btn-group-justified > .btn-group .btn {
- width: 100%;
-}
-.btn-group-justified > .btn-group .dropdown-menu {
- left: auto;
-}
-[data-toggle="buttons"] > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn input[type="checkbox"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
- position: absolute;
- clip: rect(0, 0, 0, 0);
- pointer-events: none;
-}
-.input-group {
- position: relative;
- display: table;
- border-collapse: separate;
-}
-.input-group[class*="col-"] {
- float: none;
- padding-left: 0;
- padding-right: 0;
-}
-.input-group .form-control {
- position: relative;
- z-index: 2;
- float: left;
- width: 100%;
- margin-bottom: 0;
-}
-.input-group .form-control:focus {
- z-index: 3;
-}
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-select.input-group-lg > .form-control,
-select.input-group-lg > .input-group-addon,
-select.input-group-lg > .input-group-btn > .btn {
- height: 46px;
- line-height: 46px;
-}
-textarea.input-group-lg > .form-control,
-textarea.input-group-lg > .input-group-addon,
-textarea.input-group-lg > .input-group-btn > .btn,
-select[multiple].input-group-lg > .form-control,
-select[multiple].input-group-lg > .input-group-addon,
-select[multiple].input-group-lg > .input-group-btn > .btn {
- height: auto;
-}
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.input-group-sm > .form-control,
-select.input-group-sm > .input-group-addon,
-select.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- line-height: 30px;
-}
-textarea.input-group-sm > .form-control,
-textarea.input-group-sm > .input-group-addon,
-textarea.input-group-sm > .input-group-btn > .btn,
-select[multiple].input-group-sm > .form-control,
-select[multiple].input-group-sm > .input-group-addon,
-select[multiple].input-group-sm > .input-group-btn > .btn {
- height: auto;
-}
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
- display: table-cell;
-}
-.input-group-addon:not(:first-child):not(:last-child),
-.input-group-btn:not(:first-child):not(:last-child),
-.input-group .form-control:not(:first-child):not(:last-child) {
- border-radius: 0;
-}
-.input-group-addon,
-.input-group-btn {
- width: 1%;
- white-space: nowrap;
- vertical-align: middle;
-}
-.input-group-addon {
- padding: 6px 12px;
- font-size: 14px;
- font-weight: normal;
- line-height: 1;
- color: #555555;
- text-align: center;
- background-color: #eeeeee;
- border: 1px solid #cccccc;
- border-radius: 4px;
-}
-.input-group-addon.input-sm {
- padding: 5px 10px;
- font-size: 12px;
- border-radius: 3px;
-}
-.input-group-addon.input-lg {
- padding: 10px 16px;
- font-size: 18px;
- border-radius: 6px;
-}
-.input-group-addon input[type="radio"],
-.input-group-addon input[type="checkbox"] {
- margin-top: 0;
-}
-.input-group .form-control:first-child,
-.input-group-addon:first-child,
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group > .btn,
-.input-group-btn:first-child > .dropdown-toggle,
-.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
-}
-.input-group-addon:first-child {
- border-right: 0;
-}
-.input-group .form-control:last-child,
-.input-group-addon:last-child,
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group > .btn,
-.input-group-btn:last-child > .dropdown-toggle,
-.input-group-btn:first-child > .btn:not(:first-child),
-.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
-}
-.input-group-addon:last-child {
- border-left: 0;
-}
-.input-group-btn {
- position: relative;
- font-size: 0;
- white-space: nowrap;
-}
-.input-group-btn > .btn {
- position: relative;
-}
-.input-group-btn > .btn + .btn {
- margin-left: -1px;
-}
-.input-group-btn > .btn:hover,
-.input-group-btn > .btn:focus,
-.input-group-btn > .btn:active {
- z-index: 2;
-}
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group {
- margin-right: -1px;
-}
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group {
- z-index: 2;
- margin-left: -1px;
-}
-.nav {
- margin-bottom: 0;
- padding-left: 0;
- list-style: none;
-}
-.nav > li {
- position: relative;
- display: block;
-}
-.nav > li > a {
- position: relative;
- display: block;
- padding: 10px 15px;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
- text-decoration: none;
- background-color: #eeeeee;
-}
-.nav > li.disabled > a {
- color: #777777;
-}
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
- color: #777777;
- text-decoration: none;
- background-color: transparent;
- cursor: not-allowed;
-}
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
- background-color: #eeeeee;
- border-color: #337ab7;
-}
-.nav .nav-divider {
- height: 1px;
- margin: 9px 0;
- overflow: hidden;
- background-color: #e5e5e5;
-}
-.nav > li > a > img {
- max-width: none;
-}
-.nav-tabs {
- border-bottom: 1px solid #dddddd;
-}
-.nav-tabs > li {
- float: left;
- margin-bottom: -1px;
-}
-.nav-tabs > li > a {
- margin-right: 2px;
- line-height: 1.42857143;
- border: 1px solid transparent;
- border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
- border-color: #eeeeee #eeeeee #dddddd;
-}
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
- color: #555555;
- background-color: #ffffff;
- border: 1px solid #dddddd;
- border-bottom-color: transparent;
- cursor: default;
-}
-.nav-tabs.nav-justified {
- width: 100%;
- border-bottom: 0;
-}
-.nav-tabs.nav-justified > li {
- float: none;
-}
-.nav-tabs.nav-justified > li > a {
- text-align: center;
- margin-bottom: 5px;
-}
-.nav-tabs.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-@media (min-width: 768px) {
- .nav-tabs.nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-tabs.nav-justified > li > a {
- margin-bottom: 0;
- }
-}
-.nav-tabs.nav-justified > li > a {
- margin-right: 0;
- border-radius: 4px;
-}
-.nav-tabs.nav-justified > .active > a,
-.nav-tabs.nav-justified > .active > a:hover,
-.nav-tabs.nav-justified > .active > a:focus {
- border: 1px solid #dddddd;
-}
-@media (min-width: 768px) {
- .nav-tabs.nav-justified > li > a {
- border-bottom: 1px solid #dddddd;
- border-radius: 4px 4px 0 0;
- }
- .nav-tabs.nav-justified > .active > a,
- .nav-tabs.nav-justified > .active > a:hover,
- .nav-tabs.nav-justified > .active > a:focus {
- border-bottom-color: #ffffff;
- }
-}
-.nav-pills > li {
- float: left;
-}
-.nav-pills > li > a {
- border-radius: 4px;
-}
-.nav-pills > li + li {
- margin-left: 2px;
-}
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
- color: #ffffff;
- background-color: #337ab7;
-}
-.nav-stacked > li {
- float: none;
-}
-.nav-stacked > li + li {
- margin-top: 2px;
- margin-left: 0;
-}
-.nav-justified {
- width: 100%;
-}
-.nav-justified > li {
- float: none;
-}
-.nav-justified > li > a {
- text-align: center;
- margin-bottom: 5px;
-}
-.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-@media (min-width: 768px) {
- .nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-justified > li > a {
- margin-bottom: 0;
- }
-}
-.nav-tabs-justified {
- border-bottom: 0;
-}
-.nav-tabs-justified > li > a {
- margin-right: 0;
- border-radius: 4px;
-}
-.nav-tabs-justified > .active > a,
-.nav-tabs-justified > .active > a:hover,
-.nav-tabs-justified > .active > a:focus {
- border: 1px solid #dddddd;
-}
-@media (min-width: 768px) {
- .nav-tabs-justified > li > a {
- border-bottom: 1px solid #dddddd;
- border-radius: 4px 4px 0 0;
- }
- .nav-tabs-justified > .active > a,
- .nav-tabs-justified > .active > a:hover,
- .nav-tabs-justified > .active > a:focus {
- border-bottom-color: #ffffff;
- }
-}
-.tab-content > .tab-pane {
- display: none;
-}
-.tab-content > .active {
- display: block;
-}
-.nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-right-radius: 0;
- border-top-left-radius: 0;
-}
-.navbar {
- position: relative;
- min-height: 50px;
- margin-bottom: 20px;
- border: 1px solid transparent;
-}
-@media (min-width: 768px) {
- .navbar {
- border-radius: 4px;
- }
-}
-@media (min-width: 768px) {
- .navbar-header {
- float: left;
- }
-}
-.navbar-collapse {
- overflow-x: visible;
- padding-right: 15px;
- padding-left: 15px;
- border-top: 1px solid transparent;
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
- -webkit-overflow-scrolling: touch;
-}
-.navbar-collapse.in {
- overflow-y: auto;
-}
-@media (min-width: 768px) {
- .navbar-collapse {
- width: auto;
- border-top: 0;
- box-shadow: none;
- }
- .navbar-collapse.collapse {
- display: block !important;
- height: auto !important;
- padding-bottom: 0;
- overflow: visible !important;
- }
- .navbar-collapse.in {
- overflow-y: visible;
- }
- .navbar-fixed-top .navbar-collapse,
- .navbar-static-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- padding-left: 0;
- padding-right: 0;
- }
-}
-.navbar-fixed-top .navbar-collapse,
-.navbar-fixed-bottom .navbar-collapse {
- max-height: 340px;
-}
-@media (max-device-width: 480px) and (orientation: landscape) {
- .navbar-fixed-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- max-height: 200px;
- }
-}
-.container > .navbar-header,
-.container-fluid > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-collapse {
- margin-right: -15px;
- margin-left: -15px;
-}
-@media (min-width: 768px) {
- .container > .navbar-header,
- .container-fluid > .navbar-header,
- .container > .navbar-collapse,
- .container-fluid > .navbar-collapse {
- margin-right: 0;
- margin-left: 0;
- }
-}
-.navbar-static-top {
- z-index: 1000;
- border-width: 0 0 1px;
-}
-@media (min-width: 768px) {
- .navbar-static-top {
- border-radius: 0;
- }
-}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- position: fixed;
- right: 0;
- left: 0;
- z-index: 1030;
-}
-@media (min-width: 768px) {
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- border-radius: 0;
- }
-}
-.navbar-fixed-top {
- top: 0;
- border-width: 0 0 1px;
-}
-.navbar-fixed-bottom {
- bottom: 0;
- margin-bottom: 0;
- border-width: 1px 0 0;
-}
-.navbar-brand {
- float: left;
- padding: 15px 15px;
- font-size: 18px;
- line-height: 20px;
- height: 50px;
-}
-.navbar-brand:hover,
-.navbar-brand:focus {
- text-decoration: none;
-}
-.navbar-brand > img {
- display: block;
-}
-@media (min-width: 768px) {
- .navbar > .container .navbar-brand,
- .navbar > .container-fluid .navbar-brand {
- margin-left: -15px;
- }
-}
-.navbar-toggle {
- position: relative;
- float: right;
- margin-right: 15px;
- padding: 9px 10px;
- margin-top: 8px;
- margin-bottom: 8px;
- background-color: transparent;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.navbar-toggle:focus {
- outline: 0;
-}
-.navbar-toggle .icon-bar {
- display: block;
- width: 22px;
- height: 2px;
- border-radius: 1px;
-}
-.navbar-toggle .icon-bar + .icon-bar {
- margin-top: 4px;
-}
-@media (min-width: 768px) {
- .navbar-toggle {
- display: none;
- }
-}
-.navbar-nav {
- margin: 7.5px -15px;
-}
-.navbar-nav > li > a {
- padding-top: 10px;
- padding-bottom: 10px;
- line-height: 20px;
-}
-@media (max-width: 767px) {
- .navbar-nav .open .dropdown-menu {
- position: static;
- float: none;
- width: auto;
- margin-top: 0;
- background-color: transparent;
- border: 0;
- box-shadow: none;
- }
- .navbar-nav .open .dropdown-menu > li > a,
- .navbar-nav .open .dropdown-menu .dropdown-header {
- padding: 5px 15px 5px 25px;
- }
- .navbar-nav .open .dropdown-menu > li > a {
- line-height: 20px;
- }
- .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-nav .open .dropdown-menu > li > a:focus {
- background-image: none;
- }
-}
-@media (min-width: 768px) {
- .navbar-nav {
- float: left;
- margin: 0;
- }
- .navbar-nav > li {
- float: left;
- }
- .navbar-nav > li > a {
- padding-top: 15px;
- padding-bottom: 15px;
- }
-}
-.navbar-form {
- margin-left: -15px;
- margin-right: -15px;
- padding: 10px 15px;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- margin-top: 8px;
- margin-bottom: 8px;
-}
-@media (min-width: 768px) {
- .navbar-form .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .navbar-form .form-control-static {
- display: inline-block;
- }
- .navbar-form .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .navbar-form .input-group .input-group-addon,
- .navbar-form .input-group .input-group-btn,
- .navbar-form .input-group .form-control {
- width: auto;
- }
- .navbar-form .input-group > .form-control {
- width: 100%;
- }
- .navbar-form .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio,
- .navbar-form .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio label,
- .navbar-form .checkbox label {
- padding-left: 0;
- }
- .navbar-form .radio input[type="radio"],
- .navbar-form .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .navbar-form .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-@media (max-width: 767px) {
- .navbar-form .form-group {
- margin-bottom: 5px;
- }
- .navbar-form .form-group:last-child {
- margin-bottom: 0;
- }
-}
-@media (min-width: 768px) {
- .navbar-form {
- width: auto;
- border: 0;
- margin-left: 0;
- margin-right: 0;
- padding-top: 0;
- padding-bottom: 0;
- box-shadow: none;
- }
-}
-.navbar-nav > li > .dropdown-menu {
- margin-top: 0;
- border-top-right-radius: 0;
- border-top-left-radius: 0;
-}
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
- margin-bottom: 0;
- border-top-right-radius: 4px;
- border-top-left-radius: 4px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.navbar-btn {
- margin-top: 8px;
- margin-bottom: 8px;
-}
-.navbar-btn.btn-sm {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.navbar-btn.btn-xs {
- margin-top: 14px;
- margin-bottom: 14px;
-}
-.navbar-text {
- margin-top: 15px;
- margin-bottom: 15px;
-}
-@media (min-width: 768px) {
- .navbar-text {
- float: left;
- margin-left: 15px;
- margin-right: 15px;
- }
-}
-@media (min-width: 768px) {
- .navbar-left {
- float: left !important;
- }
- .navbar-right {
- float: right !important;
- margin-right: -15px;
- }
- .navbar-right ~ .navbar-right {
- margin-right: 0;
- }
-}
-.navbar-default {
- background-color: #f8f8f8;
- border-color: #e7e7e7;
-}
-.navbar-default .navbar-brand {
- color: #777777;
-}
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
- color: #5e5e5e;
- background-color: transparent;
-}
-.navbar-default .navbar-text {
- color: #777777;
-}
-.navbar-default .navbar-nav > li > a {
- color: #777777;
-}
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
- color: #333333;
- background-color: transparent;
-}
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
- color: #555555;
- background-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
- color: #cccccc;
- background-color: transparent;
-}
-.navbar-default .navbar-toggle {
- border-color: #dddddd;
-}
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
- background-color: #dddddd;
-}
-.navbar-default .navbar-toggle .icon-bar {
- background-color: #888888;
-}
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
- border-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
- background-color: #e7e7e7;
- color: #555555;
-}
-@media (max-width: 767px) {
- .navbar-default .navbar-nav .open .dropdown-menu > li > a {
- color: #777777;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #333333;
- background-color: transparent;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #555555;
- background-color: #e7e7e7;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #cccccc;
- background-color: transparent;
- }
-}
-.navbar-default .navbar-link {
- color: #777777;
-}
-.navbar-default .navbar-link:hover {
- color: #333333;
-}
-.navbar-default .btn-link {
- color: #777777;
-}
-.navbar-default .btn-link:hover,
-.navbar-default .btn-link:focus {
- color: #333333;
-}
-.navbar-default .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-default .btn-link:hover,
-.navbar-default .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-default .btn-link:focus {
- color: #cccccc;
-}
-.navbar-inverse {
- background-color: #222222;
- border-color: #080808;
-}
-.navbar-inverse .navbar-brand {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
- color: #ffffff;
- background-color: transparent;
-}
-.navbar-inverse .navbar-text {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-nav > li > a {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
- color: #ffffff;
- background-color: transparent;
-}
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
- color: #ffffff;
- background-color: #080808;
-}
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
- color: #444444;
- background-color: transparent;
-}
-.navbar-inverse .navbar-toggle {
- border-color: #333333;
-}
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
- background-color: #333333;
-}
-.navbar-inverse .navbar-toggle .icon-bar {
- background-color: #ffffff;
-}
-.navbar-inverse .navbar-collapse,
-.navbar-inverse .navbar-form {
- border-color: #101010;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
- background-color: #080808;
- color: #ffffff;
-}
-@media (max-width: 767px) {
- .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
- border-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #ffffff;
- background-color: transparent;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #ffffff;
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #444444;
- background-color: transparent;
- }
-}
-.navbar-inverse .navbar-link {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-link:hover {
- color: #ffffff;
-}
-.navbar-inverse .btn-link {
- color: #9d9d9d;
-}
-.navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link:focus {
- color: #ffffff;
-}
-.navbar-inverse .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-inverse .btn-link:focus {
- color: #444444;
-}
-.breadcrumb {
- padding: 8px 15px;
- margin-bottom: 20px;
- list-style: none;
- background-color: #f5f5f5;
- border-radius: 4px;
-}
-.breadcrumb > li {
- display: inline-block;
-}
-.breadcrumb > li + li:before {
- content: "/\00a0";
- padding: 0 5px;
- color: #cccccc;
-}
-.breadcrumb > .active {
- color: #777777;
-}
-.pagination {
- display: inline-block;
- padding-left: 0;
- margin: 20px 0;
- border-radius: 4px;
-}
-.pagination > li {
- display: inline;
-}
-.pagination > li > a,
-.pagination > li > span {
- position: relative;
- float: left;
- padding: 6px 12px;
- line-height: 1.42857143;
- text-decoration: none;
- color: #337ab7;
- background-color: #ffffff;
- border: 1px solid #dddddd;
- margin-left: -1px;
-}
-.pagination > li:first-child > a,
-.pagination > li:first-child > span {
- margin-left: 0;
- border-bottom-left-radius: 4px;
- border-top-left-radius: 4px;
-}
-.pagination > li:last-child > a,
-.pagination > li:last-child > span {
- border-bottom-right-radius: 4px;
- border-top-right-radius: 4px;
-}
-.pagination > li > a:hover,
-.pagination > li > span:hover,
-.pagination > li > a:focus,
-.pagination > li > span:focus {
- z-index: 2;
- color: #23527c;
- background-color: #eeeeee;
- border-color: #dddddd;
-}
-.pagination > .active > a,
-.pagination > .active > span,
-.pagination > .active > a:hover,
-.pagination > .active > span:hover,
-.pagination > .active > a:focus,
-.pagination > .active > span:focus {
- z-index: 3;
- color: #ffffff;
- background-color: #337ab7;
- border-color: #337ab7;
- cursor: default;
-}
-.pagination > .disabled > span,
-.pagination > .disabled > span:hover,
-.pagination > .disabled > span:focus,
-.pagination > .disabled > a,
-.pagination > .disabled > a:hover,
-.pagination > .disabled > a:focus {
- color: #777777;
- background-color: #ffffff;
- border-color: #dddddd;
- cursor: not-allowed;
-}
-.pagination-lg > li > a,
-.pagination-lg > li > span {
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
-}
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
- border-bottom-left-radius: 6px;
- border-top-left-radius: 6px;
-}
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
- border-bottom-right-radius: 6px;
- border-top-right-radius: 6px;
-}
-.pagination-sm > li > a,
-.pagination-sm > li > span {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
-}
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
- border-bottom-left-radius: 3px;
- border-top-left-radius: 3px;
-}
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
- border-bottom-right-radius: 3px;
- border-top-right-radius: 3px;
-}
-.pager {
- padding-left: 0;
- margin: 20px 0;
- list-style: none;
- text-align: center;
-}
-.pager li {
- display: inline;
-}
-.pager li > a,
-.pager li > span {
- display: inline-block;
- padding: 5px 14px;
- background-color: #ffffff;
- border: 1px solid #dddddd;
- border-radius: 15px;
-}
-.pager li > a:hover,
-.pager li > a:focus {
- text-decoration: none;
- background-color: #eeeeee;
-}
-.pager .next > a,
-.pager .next > span {
- float: right;
-}
-.pager .previous > a,
-.pager .previous > span {
- float: left;
-}
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
- color: #777777;
- background-color: #ffffff;
- cursor: not-allowed;
-}
-.label {
- display: inline;
- padding: .2em .6em .3em;
- font-size: 75%;
- font-weight: bold;
- line-height: 1;
- color: #ffffff;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: .25em;
-}
-a.label:hover,
-a.label:focus {
- color: #ffffff;
- text-decoration: none;
- cursor: pointer;
-}
-.label:empty {
- display: none;
-}
-.btn .label {
- position: relative;
- top: -1px;
-}
-.label-default {
- background-color: #777777;
-}
-.label-default[href]:hover,
-.label-default[href]:focus {
- background-color: #5e5e5e;
-}
-.label-primary {
- background-color: #337ab7;
-}
-.label-primary[href]:hover,
-.label-primary[href]:focus {
- background-color: #286090;
-}
-.label-success {
- background-color: #5cb85c;
-}
-.label-success[href]:hover,
-.label-success[href]:focus {
- background-color: #449d44;
-}
-.label-info {
- background-color: #5bc0de;
-}
-.label-info[href]:hover,
-.label-info[href]:focus {
- background-color: #31b0d5;
-}
-.label-warning {
- background-color: #f0ad4e;
-}
-.label-warning[href]:hover,
-.label-warning[href]:focus {
- background-color: #ec971f;
-}
-.label-danger {
- background-color: #d9534f;
-}
-.label-danger[href]:hover,
-.label-danger[href]:focus {
- background-color: #c9302c;
-}
-.badge {
- display: inline-block;
- min-width: 10px;
- padding: 3px 7px;
- font-size: 12px;
- font-weight: bold;
- color: #ffffff;
- line-height: 1;
- vertical-align: middle;
- white-space: nowrap;
- text-align: center;
- background-color: #777777;
- border-radius: 10px;
-}
-.badge:empty {
- display: none;
-}
-.btn .badge {
- position: relative;
- top: -1px;
-}
-.btn-xs .badge,
-.btn-group-xs > .btn .badge {
- top: 0;
- padding: 1px 5px;
-}
-a.badge:hover,
-a.badge:focus {
- color: #ffffff;
- text-decoration: none;
- cursor: pointer;
-}
-.list-group-item.active > .badge,
-.nav-pills > .active > a > .badge {
- color: #337ab7;
- background-color: #ffffff;
-}
-.list-group-item > .badge {
- float: right;
-}
-.list-group-item > .badge + .badge {
- margin-right: 5px;
-}
-.nav-pills > li > a > .badge {
- margin-left: 3px;
-}
-.jumbotron {
- padding-top: 30px;
- padding-bottom: 30px;
- margin-bottom: 30px;
- color: inherit;
- background-color: #eeeeee;
-}
-.jumbotron h1,
-.jumbotron .h1 {
- color: inherit;
-}
-.jumbotron p {
- margin-bottom: 15px;
- font-size: 21px;
- font-weight: 200;
-}
-.jumbotron > hr {
- border-top-color: #d5d5d5;
-}
-.container .jumbotron,
-.container-fluid .jumbotron {
- border-radius: 6px;
- padding-left: 15px;
- padding-right: 15px;
-}
-.jumbotron .container {
- max-width: 100%;
-}
-@media screen and (min-width: 768px) {
- .jumbotron {
- padding-top: 48px;
- padding-bottom: 48px;
- }
- .container .jumbotron,
- .container-fluid .jumbotron {
- padding-left: 60px;
- padding-right: 60px;
- }
- .jumbotron h1,
- .jumbotron .h1 {
- font-size: 63px;
- }
-}
-.thumbnail {
- display: block;
- padding: 4px;
- margin-bottom: 20px;
- line-height: 1.42857143;
- background-color: #ffffff;
- border: 1px solid #dddddd;
- border-radius: 4px;
- transition: border 0.2s ease-in-out;
-}
-.thumbnail > img,
-.thumbnail a > img {
- margin-left: auto;
- margin-right: auto;
-}
-a.thumbnail:hover,
-a.thumbnail:focus,
-a.thumbnail.active {
- border-color: #337ab7;
-}
-.thumbnail .caption {
- padding: 9px;
- color: #333333;
-}
-.alert {
- padding: 15px;
- margin-bottom: 20px;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.alert h4 {
- margin-top: 0;
- color: inherit;
-}
-.alert .alert-link {
- font-weight: bold;
-}
-.alert > p,
-.alert > ul {
- margin-bottom: 0;
-}
-.alert > p + p {
- margin-top: 5px;
-}
-.alert-dismissable,
-.alert-dismissible {
- padding-right: 35px;
-}
-.alert-dismissable .close,
-.alert-dismissible .close {
- position: relative;
- top: -2px;
- right: -21px;
- color: inherit;
-}
-.alert-success {
- background-color: #dff0d8;
- border-color: #d6e9c6;
- color: #3c763d;
-}
-.alert-success hr {
- border-top-color: #c9e2b3;
-}
-.alert-success .alert-link {
- color: #2b542c;
-}
-.alert-info {
- background-color: #d9edf7;
- border-color: #bce8f1;
- color: #31708f;
-}
-.alert-info hr {
- border-top-color: #a6e1ec;
-}
-.alert-info .alert-link {
- color: #245269;
-}
-.alert-warning {
- background-color: #fcf8e3;
- border-color: #faebcc;
- color: #8a6d3b;
-}
-.alert-warning hr {
- border-top-color: #f7e1b5;
-}
-.alert-warning .alert-link {
- color: #66512c;
-}
-.alert-danger {
- background-color: #f2dede;
- border-color: #ebccd1;
- color: #a94442;
-}
-.alert-danger hr {
- border-top-color: #e4b9c0;
-}
-.alert-danger .alert-link {
- color: #843534;
-}
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-.progress {
- overflow: hidden;
- height: 20px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border-radius: 4px;
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-}
-.progress-bar {
- float: left;
- width: 0%;
- height: 100%;
- font-size: 12px;
- line-height: 20px;
- color: #ffffff;
- text-align: center;
- background-color: #337ab7;
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- transition: width 0.6s ease;
-}
-.progress-striped .progress-bar,
-.progress-bar-striped {
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-size: 40px 40px;
-}
-.progress.active .progress-bar,
-.progress-bar.active {
- -webkit-animation: progress-bar-stripes 2s linear infinite;
- animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-bar-success {
- background-color: #5cb85c;
-}
-.progress-striped .progress-bar-success {
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-bar-info {
- background-color: #5bc0de;
-}
-.progress-striped .progress-bar-info {
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-bar-warning {
- background-color: #f0ad4e;
-}
-.progress-striped .progress-bar-warning {
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-bar-danger {
- background-color: #d9534f;
-}
-.progress-striped .progress-bar-danger {
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.media {
- margin-top: 15px;
-}
-.media:first-child {
- margin-top: 0;
-}
-.media,
-.media-body {
- zoom: 1;
- overflow: hidden;
-}
-.media-body {
- width: 10000px;
-}
-.media-object {
- display: block;
-}
-.media-object.img-thumbnail {
- max-width: none;
-}
-.media-right,
-.media > .pull-right {
- padding-left: 10px;
-}
-.media-left,
-.media > .pull-left {
- padding-right: 10px;
-}
-.media-left,
-.media-right,
-.media-body {
- display: table-cell;
- vertical-align: top;
-}
-.media-middle {
- vertical-align: middle;
-}
-.media-bottom {
- vertical-align: bottom;
-}
-.media-heading {
- margin-top: 0;
- margin-bottom: 5px;
-}
-.media-list {
- padding-left: 0;
- list-style: none;
-}
-.list-group {
- margin-bottom: 20px;
- padding-left: 0;
-}
-.list-group-item {
- position: relative;
- display: block;
- padding: 10px 15px;
- margin-bottom: -1px;
- background-color: #ffffff;
- border: 1px solid #dddddd;
-}
-.list-group-item:first-child {
- border-top-right-radius: 4px;
- border-top-left-radius: 4px;
-}
-.list-group-item:last-child {
- margin-bottom: 0;
- border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
-}
-a.list-group-item,
-button.list-group-item {
- color: #555555;
-}
-a.list-group-item .list-group-item-heading,
-button.list-group-item .list-group-item-heading {
- color: #333333;
-}
-a.list-group-item:hover,
-button.list-group-item:hover,
-a.list-group-item:focus,
-button.list-group-item:focus {
- text-decoration: none;
- color: #555555;
- background-color: #f5f5f5;
-}
-button.list-group-item {
- width: 100%;
- text-align: left;
-}
-.list-group-item.disabled,
-.list-group-item.disabled:hover,
-.list-group-item.disabled:focus {
- background-color: #eeeeee;
- color: #777777;
- cursor: not-allowed;
-}
-.list-group-item.disabled .list-group-item-heading,
-.list-group-item.disabled:hover .list-group-item-heading,
-.list-group-item.disabled:focus .list-group-item-heading {
- color: inherit;
-}
-.list-group-item.disabled .list-group-item-text,
-.list-group-item.disabled:hover .list-group-item-text,
-.list-group-item.disabled:focus .list-group-item-text {
- color: #777777;
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
- z-index: 2;
- color: #ffffff;
- background-color: #337ab7;
- border-color: #337ab7;
-}
-.list-group-item.active .list-group-item-heading,
-.list-group-item.active:hover .list-group-item-heading,
-.list-group-item.active:focus .list-group-item-heading,
-.list-group-item.active .list-group-item-heading > small,
-.list-group-item.active:hover .list-group-item-heading > small,
-.list-group-item.active:focus .list-group-item-heading > small,
-.list-group-item.active .list-group-item-heading > .small,
-.list-group-item.active:hover .list-group-item-heading > .small,
-.list-group-item.active:focus .list-group-item-heading > .small {
- color: inherit;
-}
-.list-group-item.active .list-group-item-text,
-.list-group-item.active:hover .list-group-item-text,
-.list-group-item.active:focus .list-group-item-text {
- color: #c7ddef;
-}
-.list-group-item-success {
- color: #3c763d;
- background-color: #dff0d8;
-}
-a.list-group-item-success,
-button.list-group-item-success {
- color: #3c763d;
-}
-a.list-group-item-success .list-group-item-heading,
-button.list-group-item-success .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-success:hover,
-button.list-group-item-success:hover,
-a.list-group-item-success:focus,
-button.list-group-item-success:focus {
- color: #3c763d;
- background-color: #d0e9c6;
-}
-a.list-group-item-success.active,
-button.list-group-item-success.active,
-a.list-group-item-success.active:hover,
-button.list-group-item-success.active:hover,
-a.list-group-item-success.active:focus,
-button.list-group-item-success.active:focus {
- color: #fff;
- background-color: #3c763d;
- border-color: #3c763d;
-}
-.list-group-item-info {
- color: #31708f;
- background-color: #d9edf7;
-}
-a.list-group-item-info,
-button.list-group-item-info {
- color: #31708f;
-}
-a.list-group-item-info .list-group-item-heading,
-button.list-group-item-info .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-info:hover,
-button.list-group-item-info:hover,
-a.list-group-item-info:focus,
-button.list-group-item-info:focus {
- color: #31708f;
- background-color: #c4e3f3;
-}
-a.list-group-item-info.active,
-button.list-group-item-info.active,
-a.list-group-item-info.active:hover,
-button.list-group-item-info.active:hover,
-a.list-group-item-info.active:focus,
-button.list-group-item-info.active:focus {
- color: #fff;
- background-color: #31708f;
- border-color: #31708f;
-}
-.list-group-item-warning {
- color: #8a6d3b;
- background-color: #fcf8e3;
-}
-a.list-group-item-warning,
-button.list-group-item-warning {
- color: #8a6d3b;
-}
-a.list-group-item-warning .list-group-item-heading,
-button.list-group-item-warning .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-warning:hover,
-button.list-group-item-warning:hover,
-a.list-group-item-warning:focus,
-button.list-group-item-warning:focus {
- color: #8a6d3b;
- background-color: #faf2cc;
-}
-a.list-group-item-warning.active,
-button.list-group-item-warning.active,
-a.list-group-item-warning.active:hover,
-button.list-group-item-warning.active:hover,
-a.list-group-item-warning.active:focus,
-button.list-group-item-warning.active:focus {
- color: #fff;
- background-color: #8a6d3b;
- border-color: #8a6d3b;
-}
-.list-group-item-danger {
- color: #a94442;
- background-color: #f2dede;
-}
-a.list-group-item-danger,
-button.list-group-item-danger {
- color: #a94442;
-}
-a.list-group-item-danger .list-group-item-heading,
-button.list-group-item-danger .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-danger:hover,
-button.list-group-item-danger:hover,
-a.list-group-item-danger:focus,
-button.list-group-item-danger:focus {
- color: #a94442;
- background-color: #ebcccc;
-}
-a.list-group-item-danger.active,
-button.list-group-item-danger.active,
-a.list-group-item-danger.active:hover,
-button.list-group-item-danger.active:hover,
-a.list-group-item-danger.active:focus,
-button.list-group-item-danger.active:focus {
- color: #fff;
- background-color: #a94442;
- border-color: #a94442;
-}
-.list-group-item-heading {
- margin-top: 0;
- margin-bottom: 5px;
-}
-.list-group-item-text {
- margin-bottom: 0;
- line-height: 1.3;
-}
-.panel {
- margin-bottom: 20px;
- background-color: #ffffff;
- border: 1px solid transparent;
- border-radius: 4px;
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-.panel-body {
- padding: 15px;
-}
-.panel-heading {
- padding: 10px 15px;
- border-bottom: 1px solid transparent;
- border-top-right-radius: 3px;
- border-top-left-radius: 3px;
-}
-.panel-heading > .dropdown .dropdown-toggle {
- color: inherit;
-}
-.panel-title {
- margin-top: 0;
- margin-bottom: 0;
- font-size: 16px;
- color: inherit;
-}
-.panel-title > a,
-.panel-title > small,
-.panel-title > .small,
-.panel-title > small > a,
-.panel-title > .small > a {
- color: inherit;
-}
-.panel-footer {
- padding: 10px 15px;
- background-color: #f5f5f5;
- border-top: 1px solid #dddddd;
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .list-group,
-.panel > .panel-collapse > .list-group {
- margin-bottom: 0;
-}
-.panel > .list-group .list-group-item,
-.panel > .panel-collapse > .list-group .list-group-item {
- border-width: 1px 0;
- border-radius: 0;
-}
-.panel > .list-group:first-child .list-group-item:first-child,
-.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
- border-top: 0;
- border-top-right-radius: 3px;
- border-top-left-radius: 3px;
-}
-.panel > .list-group:last-child .list-group-item:last-child,
-.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
- border-bottom: 0;
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
- border-top-right-radius: 0;
- border-top-left-radius: 0;
-}
-.panel-heading + .list-group .list-group-item:first-child {
- border-top-width: 0;
-}
-.list-group + .panel-footer {
- border-top-width: 0;
-}
-.panel > .table,
-.panel > .table-responsive > .table,
-.panel > .panel-collapse > .table {
- margin-bottom: 0;
-}
-.panel > .table caption,
-.panel > .table-responsive > .table caption,
-.panel > .panel-collapse > .table caption {
- padding-left: 15px;
- padding-right: 15px;
-}
-.panel > .table:first-child,
-.panel > .table-responsive:first-child > .table:first-child {
- border-top-right-radius: 3px;
- border-top-left-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
- border-top-left-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
- border-top-right-radius: 3px;
-}
-.panel > .table:last-child,
-.panel > .table-responsive:last-child > .table:last-child {
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
- border-bottom-left-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
- border-bottom-right-radius: 3px;
-}
-.panel > .panel-body + .table,
-.panel > .panel-body + .table-responsive,
-.panel > .table + .panel-body,
-.panel > .table-responsive + .panel-body {
- border-top: 1px solid #dddddd;
-}
-.panel > .table > tbody:first-child > tr:first-child th,
-.panel > .table > tbody:first-child > tr:first-child td {
- border-top: 0;
-}
-.panel > .table-bordered,
-.panel > .table-responsive > .table-bordered {
- border: 0;
-}
-.panel > .table-bordered > thead > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
-.panel > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-bordered > thead > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
-.panel > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-bordered > tfoot > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
-}
-.panel > .table-bordered > thead > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
-.panel > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-bordered > thead > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
-.panel > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-bordered > tfoot > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
-}
-.panel > .table-bordered > thead > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
-.panel > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-bordered > thead > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
-.panel > .table-bordered > tbody > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
- border-bottom: 0;
-}
-.panel > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-bordered > tfoot > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
- border-bottom: 0;
-}
-.panel > .table-responsive {
- border: 0;
- margin-bottom: 0;
-}
-.panel-group {
- margin-bottom: 20px;
-}
-.panel-group .panel {
- margin-bottom: 0;
- border-radius: 4px;
-}
-.panel-group .panel + .panel {
- margin-top: 5px;
-}
-.panel-group .panel-heading {
- border-bottom: 0;
-}
-.panel-group .panel-heading + .panel-collapse > .panel-body,
-.panel-group .panel-heading + .panel-collapse > .list-group {
- border-top: 1px solid #dddddd;
-}
-.panel-group .panel-footer {
- border-top: 0;
-}
-.panel-group .panel-footer + .panel-collapse .panel-body {
- border-bottom: 1px solid #dddddd;
-}
-.panel-default {
- border-color: #dddddd;
-}
-.panel-default > .panel-heading {
- color: #333333;
- background-color: #f5f5f5;
- border-color: #dddddd;
-}
-.panel-default > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #dddddd;
-}
-.panel-default > .panel-heading .badge {
- color: #f5f5f5;
- background-color: #333333;
-}
-.panel-default > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #dddddd;
-}
-.panel-primary {
- border-color: #337ab7;
-}
-.panel-primary > .panel-heading {
- color: #ffffff;
- background-color: #337ab7;
- border-color: #337ab7;
-}
-.panel-primary > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #337ab7;
-}
-.panel-primary > .panel-heading .badge {
- color: #337ab7;
- background-color: #ffffff;
-}
-.panel-primary > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #337ab7;
-}
-.panel-success {
- border-color: #d6e9c6;
-}
-.panel-success > .panel-heading {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #d6e9c6;
-}
-.panel-success > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #d6e9c6;
-}
-.panel-success > .panel-heading .badge {
- color: #dff0d8;
- background-color: #3c763d;
-}
-.panel-success > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #d6e9c6;
-}
-.panel-info {
- border-color: #bce8f1;
-}
-.panel-info > .panel-heading {
- color: #31708f;
- background-color: #d9edf7;
- border-color: #bce8f1;
-}
-.panel-info > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #bce8f1;
-}
-.panel-info > .panel-heading .badge {
- color: #d9edf7;
- background-color: #31708f;
-}
-.panel-info > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #bce8f1;
-}
-.panel-warning {
- border-color: #faebcc;
-}
-.panel-warning > .panel-heading {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #faebcc;
-}
-.panel-warning > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #faebcc;
-}
-.panel-warning > .panel-heading .badge {
- color: #fcf8e3;
- background-color: #8a6d3b;
-}
-.panel-warning > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #faebcc;
-}
-.panel-danger {
- border-color: #ebccd1;
-}
-.panel-danger > .panel-heading {
- color: #a94442;
- background-color: #f2dede;
- border-color: #ebccd1;
-}
-.panel-danger > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ebccd1;
-}
-.panel-danger > .panel-heading .badge {
- color: #f2dede;
- background-color: #a94442;
-}
-.panel-danger > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ebccd1;
-}
-.embed-responsive {
- position: relative;
- display: block;
- height: 0;
- padding: 0;
- overflow: hidden;
-}
-.embed-responsive .embed-responsive-item,
-.embed-responsive iframe,
-.embed-responsive embed,
-.embed-responsive object,
-.embed-responsive video {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- height: 100%;
- width: 100%;
- border: 0;
-}
-.embed-responsive-16by9 {
- padding-bottom: 56.25%;
-}
-.embed-responsive-4by3 {
- padding-bottom: 75%;
-}
-.well {
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border: 1px solid #e3e3e3;
- border-radius: 4px;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-.well blockquote {
- border-color: #ddd;
- border-color: rgba(0, 0, 0, 0.15);
-}
-.well-lg {
- padding: 24px;
- border-radius: 6px;
-}
-.well-sm {
- padding: 9px;
- border-radius: 3px;
-}
-.close {
- float: right;
- font-size: 21px;
- font-weight: bold;
- line-height: 1;
- color: #000000;
- text-shadow: 0 1px 0 #ffffff;
- opacity: 0.2;
- filter: alpha(opacity=20);
-}
-.close:hover,
-.close:focus {
- color: #000000;
- text-decoration: none;
- cursor: pointer;
- opacity: 0.5;
- filter: alpha(opacity=50);
-}
-button.close {
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
- -webkit-appearance: none;
-}
-.modal-open {
- overflow: hidden;
-}
-.modal {
- display: none;
- overflow: hidden;
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1050;
- -webkit-overflow-scrolling: touch;
- outline: 0;
-}
-.modal.fade .modal-dialog {
- -webkit-transform: translate(0, -25%);
- transform: translate(0, -25%);
- transition: -webkit-transform 0.3s ease-out;
- transition: transform 0.3s ease-out;
-}
-.modal.in .modal-dialog {
- -webkit-transform: translate(0, 0);
- transform: translate(0, 0);
-}
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
-}
-.modal-dialog {
- position: relative;
- width: auto;
- margin: 10px;
-}
-.modal-content {
- position: relative;
- background-color: #ffffff;
- border: 1px solid #999999;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 6px;
- box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
- background-clip: padding-box;
- outline: 0;
-}
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000000;
-}
-.modal-backdrop.fade {
- opacity: 0;
- filter: alpha(opacity=0);
-}
-.modal-backdrop.in {
- opacity: 0.5;
- filter: alpha(opacity=50);
-}
-.modal-header {
- padding: 15px;
- border-bottom: 1px solid #e5e5e5;
-}
-.modal-header .close {
- margin-top: -2px;
-}
-.modal-title {
- margin: 0;
- line-height: 1.42857143;
-}
-.modal-body {
- position: relative;
- padding: 15px;
-}
-.modal-footer {
- padding: 15px;
- text-align: right;
- border-top: 1px solid #e5e5e5;
-}
-.modal-footer .btn + .btn {
- margin-left: 5px;
- margin-bottom: 0;
-}
-.modal-footer .btn-group .btn + .btn {
- margin-left: -1px;
-}
-.modal-footer .btn-block + .btn-block {
- margin-left: 0;
-}
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
-}
-@media (min-width: 768px) {
- .modal-dialog {
- width: 600px;
- margin: 30px auto;
- }
- .modal-content {
- box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
- }
- .modal-sm {
- width: 300px;
- }
-}
-@media (min-width: 992px) {
- .modal-lg {
- width: 900px;
- }
-}
-.tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-style: normal;
- font-weight: normal;
- letter-spacing: normal;
- line-break: auto;
- line-height: 1.42857143;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- white-space: normal;
- word-break: normal;
- word-spacing: normal;
- word-wrap: normal;
- font-size: 12px;
- opacity: 0;
- filter: alpha(opacity=0);
-}
-.tooltip.in {
- opacity: 0.9;
- filter: alpha(opacity=90);
-}
-.tooltip.top {
- margin-top: -3px;
- padding: 5px 0;
-}
-.tooltip.right {
- margin-left: 3px;
- padding: 0 5px;
-}
-.tooltip.bottom {
- margin-top: 3px;
- padding: 5px 0;
-}
-.tooltip.left {
- margin-left: -3px;
- padding: 0 5px;
-}
-.tooltip-inner {
- max-width: 200px;
- padding: 3px 8px;
- color: #ffffff;
- text-align: center;
- background-color: #000000;
- border-radius: 4px;
-}
-.tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000000;
-}
-.tooltip.top-left .tooltip-arrow {
- bottom: 0;
- right: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000000;
-}
-.tooltip.top-right .tooltip-arrow {
- bottom: 0;
- left: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000000;
-}
-.tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-width: 5px 5px 5px 0;
- border-right-color: #000000;
-}
-.tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-width: 5px 0 5px 5px;
- border-left-color: #000000;
-}
-.tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000000;
-}
-.tooltip.bottom-left .tooltip-arrow {
- top: 0;
- right: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000000;
-}
-.tooltip.bottom-right .tooltip-arrow {
- top: 0;
- left: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000000;
-}
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: none;
- max-width: 276px;
- padding: 1px;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-style: normal;
- font-weight: normal;
- letter-spacing: normal;
- line-break: auto;
- line-height: 1.42857143;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- white-space: normal;
- word-break: normal;
- word-spacing: normal;
- word-wrap: normal;
- font-size: 14px;
- background-color: #ffffff;
- background-clip: padding-box;
- border: 1px solid #cccccc;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 6px;
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-}
-.popover.top {
- margin-top: -10px;
-}
-.popover.right {
- margin-left: 10px;
-}
-.popover.bottom {
- margin-top: 10px;
-}
-.popover.left {
- margin-left: -10px;
-}
-.popover-title {
- margin: 0;
- padding: 8px 14px;
- font-size: 14px;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-radius: 5px 5px 0 0;
-}
-.popover-content {
- padding: 9px 14px;
-}
-.popover > .arrow,
-.popover > .arrow:after {
- position: absolute;
- display: block;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.popover > .arrow {
- border-width: 11px;
-}
-.popover > .arrow:after {
- border-width: 10px;
- content: "";
-}
-.popover.top > .arrow {
- left: 50%;
- margin-left: -11px;
- border-bottom-width: 0;
- border-top-color: #999999;
- border-top-color: rgba(0, 0, 0, 0.25);
- bottom: -11px;
-}
-.popover.top > .arrow:after {
- content: " ";
- bottom: 1px;
- margin-left: -10px;
- border-bottom-width: 0;
- border-top-color: #ffffff;
-}
-.popover.right > .arrow {
- top: 50%;
- left: -11px;
- margin-top: -11px;
- border-left-width: 0;
- border-right-color: #999999;
- border-right-color: rgba(0, 0, 0, 0.25);
-}
-.popover.right > .arrow:after {
- content: " ";
- left: 1px;
- bottom: -10px;
- border-left-width: 0;
- border-right-color: #ffffff;
-}
-.popover.bottom > .arrow {
- left: 50%;
- margin-left: -11px;
- border-top-width: 0;
- border-bottom-color: #999999;
- border-bottom-color: rgba(0, 0, 0, 0.25);
- top: -11px;
-}
-.popover.bottom > .arrow:after {
- content: " ";
- top: 1px;
- margin-left: -10px;
- border-top-width: 0;
- border-bottom-color: #ffffff;
-}
-.popover.left > .arrow {
- top: 50%;
- right: -11px;
- margin-top: -11px;
- border-right-width: 0;
- border-left-color: #999999;
- border-left-color: rgba(0, 0, 0, 0.25);
-}
-.popover.left > .arrow:after {
- content: " ";
- right: 1px;
- border-right-width: 0;
- border-left-color: #ffffff;
- bottom: -10px;
-}
-.carousel {
- position: relative;
-}
-.carousel-inner {
- position: relative;
- overflow: hidden;
- width: 100%;
-}
-.carousel-inner > .item {
- display: none;
- position: relative;
- transition: 0.6s ease-in-out left;
-}
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
- line-height: 1;
-}
-@media all and (transform-3d), (-webkit-transform-3d) {
- .carousel-inner > .item {
- transition: -webkit-transform 0.6s ease-in-out;
- transition: transform 0.6s ease-in-out;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-perspective: 1000px;
- perspective: 1000px;
- }
- .carousel-inner > .item.next,
- .carousel-inner > .item.active.right {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- left: 0;
- }
- .carousel-inner > .item.prev,
- .carousel-inner > .item.active.left {
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- left: 0;
- }
- .carousel-inner > .item.next.left,
- .carousel-inner > .item.prev.right,
- .carousel-inner > .item.active {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- left: 0;
- }
-}
-.carousel-inner > .active,
-.carousel-inner > .next,
-.carousel-inner > .prev {
- display: block;
-}
-.carousel-inner > .active {
- left: 0;
-}
-.carousel-inner > .next,
-.carousel-inner > .prev {
- position: absolute;
- top: 0;
- width: 100%;
-}
-.carousel-inner > .next {
- left: 100%;
-}
-.carousel-inner > .prev {
- left: -100%;
-}
-.carousel-inner > .next.left,
-.carousel-inner > .prev.right {
- left: 0;
-}
-.carousel-inner > .active.left {
- left: -100%;
-}
-.carousel-inner > .active.right {
- left: 100%;
-}
-.carousel-control {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- width: 15%;
- opacity: 0.5;
- filter: alpha(opacity=50);
- font-size: 20px;
- color: #ffffff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
- background-color: rgba(0, 0, 0, 0);
-}
-.carousel-control.left {
- background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
-}
-.carousel-control.right {
- left: auto;
- right: 0;
- background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
-}
-.carousel-control:hover,
-.carousel-control:focus {
- outline: 0;
- color: #ffffff;
- text-decoration: none;
- opacity: 0.9;
- filter: alpha(opacity=90);
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-left,
-.carousel-control .glyphicon-chevron-right {
- position: absolute;
- top: 50%;
- margin-top: -10px;
- z-index: 5;
- display: inline-block;
-}
-.carousel-control .icon-prev,
-.carousel-control .glyphicon-chevron-left {
- left: 50%;
- margin-left: -10px;
-}
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-right {
- right: 50%;
- margin-right: -10px;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next {
- width: 20px;
- height: 20px;
- line-height: 1;
- font-family: serif;
-}
-.carousel-control .icon-prev:before {
- content: '\2039';
-}
-.carousel-control .icon-next:before {
- content: '\203a';
-}
-.carousel-indicators {
- position: absolute;
- bottom: 10px;
- left: 50%;
- z-index: 15;
- width: 60%;
- margin-left: -30%;
- padding-left: 0;
- list-style: none;
- text-align: center;
-}
-.carousel-indicators li {
- display: inline-block;
- width: 10px;
- height: 10px;
- margin: 1px;
- text-indent: -999px;
- border: 1px solid #ffffff;
- border-radius: 10px;
- cursor: pointer;
- background-color: #000 \9;
- background-color: rgba(0, 0, 0, 0);
-}
-.carousel-indicators .active {
- margin: 0;
- width: 12px;
- height: 12px;
- background-color: #ffffff;
-}
-.carousel-caption {
- position: absolute;
- left: 15%;
- right: 15%;
- bottom: 20px;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: #ffffff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
-}
-.carousel-caption .btn {
- text-shadow: none;
-}
-@media screen and (min-width: 768px) {
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-prev,
- .carousel-control .icon-next {
- width: 30px;
- height: 30px;
- margin-top: -10px;
- font-size: 30px;
- }
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .icon-prev {
- margin-left: -10px;
- }
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-next {
- margin-right: -10px;
- }
- .carousel-caption {
- left: 20%;
- right: 20%;
- padding-bottom: 30px;
- }
- .carousel-indicators {
- bottom: 20px;
- }
-}
-.clearfix:before,
-.clearfix:after,
-.dl-horizontal dd:before,
-.dl-horizontal dd:after,
-.container:before,
-.container:after,
-.container-fluid:before,
-.container-fluid:after,
-.row:before,
-.row:after,
-.form-horizontal .form-group:before,
-.form-horizontal .form-group:after,
-.btn-toolbar:before,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:before,
-.btn-group-vertical > .btn-group:after,
-.nav:before,
-.nav:after,
-.navbar:before,
-.navbar:after,
-.navbar-header:before,
-.navbar-header:after,
-.navbar-collapse:before,
-.navbar-collapse:after,
-.pager:before,
-.pager:after,
-.panel-body:before,
-.panel-body:after,
-.modal-header:before,
-.modal-header:after,
-.modal-footer:before,
-.modal-footer:after {
- content: " ";
- display: table;
-}
-.clearfix:after,
-.dl-horizontal dd:after,
-.container:after,
-.container-fluid:after,
-.row:after,
-.form-horizontal .form-group:after,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:after,
-.nav:after,
-.navbar:after,
-.navbar-header:after,
-.navbar-collapse:after,
-.pager:after,
-.panel-body:after,
-.modal-header:after,
-.modal-footer:after {
- clear: both;
-}
-.center-block {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-.pull-right {
- float: right !important;
-}
-.pull-left {
- float: left !important;
-}
-.hide {
- display: none !important;
-}
-.show {
- display: block !important;
-}
-.invisible {
- visibility: hidden;
-}
-.text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-.hidden {
- display: none !important;
-}
-.affix {
- position: fixed;
-}
-@-ms-viewport {
- width: device-width;
-}
-.visible-xs,
-.visible-sm,
-.visible-md,
-.visible-lg {
- display: none !important;
-}
-.visible-xs-block,
-.visible-xs-inline,
-.visible-xs-inline-block,
-.visible-sm-block,
-.visible-sm-inline,
-.visible-sm-inline-block,
-.visible-md-block,
-.visible-md-inline,
-.visible-md-inline-block,
-.visible-lg-block,
-.visible-lg-inline,
-.visible-lg-inline-block {
- display: none !important;
-}
-@media (max-width: 767px) {
- .visible-xs {
- display: block !important;
- }
- table.visible-xs {
- display: table !important;
- }
- tr.visible-xs {
- display: table-row !important;
- }
- th.visible-xs,
- td.visible-xs {
- display: table-cell !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-block {
- display: block !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-inline {
- display: inline !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm {
- display: block !important;
- }
- table.visible-sm {
- display: table !important;
- }
- tr.visible-sm {
- display: table-row !important;
- }
- th.visible-sm,
- td.visible-sm {
- display: table-cell !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-block {
- display: block !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline {
- display: inline !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md {
- display: block !important;
- }
- table.visible-md {
- display: table !important;
- }
- tr.visible-md {
- display: table-row !important;
- }
- th.visible-md,
- td.visible-md {
- display: table-cell !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-block {
- display: block !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline {
- display: inline !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg {
- display: block !important;
- }
- table.visible-lg {
- display: table !important;
- }
- tr.visible-lg {
- display: table-row !important;
- }
- th.visible-lg,
- td.visible-lg {
- display: table-cell !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-block {
- display: block !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-inline {
- display: inline !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-inline-block {
- display: inline-block !important;
- }
-}
-@media (max-width: 767px) {
- .hidden-xs {
- display: none !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .hidden-sm {
- display: none !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .hidden-md {
- display: none !important;
- }
-}
-@media (min-width: 1200px) {
- .hidden-lg {
- display: none !important;
- }
-}
-.visible-print {
- display: none !important;
-}
-@media print {
- .visible-print {
- display: block !important;
- }
- table.visible-print {
- display: table !important;
- }
- tr.visible-print {
- display: table-row !important;
- }
- th.visible-print,
- td.visible-print {
- display: table-cell !important;
- }
-}
-.visible-print-block {
- display: none !important;
-}
-@media print {
- .visible-print-block {
- display: block !important;
- }
-}
-.visible-print-inline {
- display: none !important;
-}
-@media print {
- .visible-print-inline {
- display: inline !important;
- }
-}
-.visible-print-inline-block {
- display: none !important;
-}
-@media print {
- .visible-print-inline-block {
- display: inline-block !important;
- }
-}
-@media print {
- .hidden-print {
- display: none !important;
- }
-}
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.less b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.less
deleted file mode 100644
index 2d0f5cc6..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.less
+++ /dev/null
@@ -1,3 +0,0 @@
-@import '../../bower_components/bootstrap/less/bootstrap.less';
-
-@icon-font-path: '/fonts/';
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/angular-markdown-directive/markdown.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/angular-markdown-directive/markdown.js
deleted file mode 100644
index 989a6bec..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/angular-markdown-directive/markdown.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * angular-markdown-directive v0.3.1
- * (c) 2013-2014 Brian Ford http://briantford.com
- * License: MIT
- */
-
-'use strict';
-
-angular.module('btford.markdown', ['ngSanitize']).
- provider('markdownConverter', function () {
- var opts = {};
- return {
- config: function (newOpts) {
- opts = newOpts;
- },
- $get: function () {
- return new Showdown.converter(opts);
- }
- };
- }).
- directive('btfMarkdown', ['$sanitize', 'markdownConverter', function ($sanitize, markdownConverter) {
- return {
- restrict: 'AE',
- link: function (scope, element, attrs) {
- if (attrs.btfMarkdown) {
- scope.$watch(attrs.btfMarkdown, function (newVal) {
- var html = newVal ? $sanitize(markdownConverter.makeHtml(newVal)) : '';
- element.html(html);
- });
- } else {
- var html = $sanitize(markdownConverter.makeHtml(element.text()));
- element.html(html);
- }
- }
- };
- }]);
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsCtrl.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsCtrl.js
deleted file mode 100644
index 4b420a27..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsCtrl.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-angular.module('ui.dashboard')
- .controller('WidgetSettingsCtrl', ['$scope', '$uibModalInstance', 'widget', function ($scope, $uibModalInstance, widget) {
- // add widget to scope
- $scope.widget = widget;
-
- // set up result object
- $scope.result = jQuery.extend(true, {}, widget);
-
- $scope.ok = function () {
- $uibModalInstance.close($scope.result);
- };
-
- $scope.cancel = function () {
- $uibModalInstance.dismiss('cancel');
- };
- }]); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsRaptorReportCtrl.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsRaptorReportCtrl.js
deleted file mode 100644
index 02416a0c..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsRaptorReportCtrl.js
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-angular.module('ui.dashboard',['ngSanitize'])
- .controller('WidgetSettingsRaptorReportCtrl', ['$http','$scope','$rootScope','$uibModalInstance', 'widget', '$sanitize', function ($http,$scope,$rootScope,$uibModalInstance, widget, $sanitize) {
-
- // add watch function for widget here
- // leave ajax call to the dashboard.js
-
- console.log("============= WidgetSettingsRaptorReportCtrl scope =================");
- console.log($scope);
-
- var getFormFieldListUrl = "raptor.htm?action=report.run.container&c_master="+widget.report_id + "&refresh=Y"
- console.log("============= getFormFieldListUrl =============");
- console.log(getFormFieldListUrl);
- $http.get(getFormFieldListUrl).then(
- function(res){
- $scope.reportData = res.data;
- // add widget to scope
- $scope.showFormFieldIds = false;
- $scope.formFieldSelectedValues = {};
-});
-
- var parseQueryString = function( queryString ) {
- var params = {}, queries, temp, i, l;
- // Split into key/value pairs
- queries = queryString.split("&");
- // Convert the array of strings into an object
- for ( i = 0, l = queries.length; i < l; i++ ) {
- temp = queries[i].split('=');
- //console.log(temp[0]);
- //console.log(temp[0] != "refresh");
- if(temp[0] && temp[0] != "refresh")
- params[temp[0]] = temp[1];
- }
- return params;
- };
-
- var paginationOptions = {
- pageNumber: 1,
- pageSize: 5,
- sort: null
- };
-
- $scope.gridOptions = {
- paginationPageSizes: [5],
- paginationPageSize: 5,
- useExternalPagination: true,
- columnDefs: [],
- data: [],
- enableGridMenu: true,
- enableSelectAll: true,
- exporterMenuPdf: false,
- exporterMenuCsv: false,
- exporterCsvFilename: 'myFile.csv',
- exporterPdfDefaultStyle: {fontSize: 9},
- exporterPdfTableStyle: {margin: [30, 30, 30, 30]},
- exporterPdfTableHeaderStyle: {fontSize: 10, bol$rootScoped: true, italics: true, color: 'red'},
- exporterPdfHeader: { text: "My Header", style: 'headerStyle' },
- exporterPdfFooter: function ( currentPage, pageCount ) {
- return { text: currentPage.toString() + ' of ' + pageCount.toString(), style: 'footerStyle' };
- },
- exporterPdfCustomFormatter: function ( docDefinition ) {
- docDefinition.styles.headerStyle = { fontSize: 22, bold: true };
- docDefinition.styles.footerStyle = { fontSize: 10, bold: true };
- return docDefinition;
- },
- exporterPdfOrientation: 'portrait',
- exporterPdfPageSize: 'LETTER',
- exporterPdfMaxGridWidth: 500,
- exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")),
- onRegisterApi: function(gridApi) {
- $scope.gridApi = gridApi;
- gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {
- paginationOptions.pageNumber = newPage;
- paginationOptions.pageSize = pageSize;
- $scope.runReport();
- });
- }
- };
-
-
-
- $scope.getFormFieldSelectedValuesAsURL = function(){
- var formFieldsUrl = '';
- $scope.widget.reportData.formFieldList.forEach(function(formField) {
- if(formField.fieldType==='LIST_BOX') {
- if($scope.formFieldSelectedValues && $scope.formFieldSelectedValues[formField.fieldId] && $scope.formFieldSelectedValues[formField.fieldId].value != '') {
- formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId].value+'&';
- }
- } else if(formField.fieldType==='LIST_MULTI_SELECT') {
- if($scope.formFieldSelectedValues[formField.fieldId].length >0) {
- for (var i = 0; i < $scope.formFieldSelectedValues[formField.fieldId].length; i++) {
- if($scope.formFieldSelectedValues[formField.fieldId][i].defaultValue){
- formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId][i].value+'&';
- }
- }
- }
- } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'DATE'){
- formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.dateformat)+'&';
- } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'TIMESTAMP_MIN'){
- formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.datetimeformat)+'&';
- } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && $scope.formFieldSelectedValues[formField.fieldId] && $scope.formFieldSelectedValues[formField.fieldId] != ''){
- formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId]+'&';
- }
- });
- return formFieldsUrl;
-
- }
-
- $scope.triggerOtherFormFields = function(){
- console.log("report_run");
- var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL();
- $http.get('raptor.htm?action=report.formfields.run.container&c_master='+widget.report_id+'&'+formFieldsUrl).then(
- function(response){
- $scope.widget.reportData = response.data;
- });
- };
-
-
- $scope.runReport = function(pagination){
- var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL();
- console.log("pagination");
- if(!pagination) {
- console.log("refreshed ...");
- $scope.gridOptions.pageNumber = 1;
- $scope.gridOptions.paginationPageSizes= [widget.reportData.pageSize];
- $scope.gridOptions.paginationPageSize= widget.reportData.pageSize;
- if(widget.reportData.totalRows<14){
- $scope.gridHeight = (widget.reportData.totalRows+7)*30+'px';
- } else{
- $scope.gridHeight = '400px';
- }
- $scope.gridOptions.totalItems = widget.reportData.totalRows;
- $scope.gridOptions.data= widget.reportData.reportDataRows;
- $scope.gridOptions.exporterPdfHeader.text= widget.reportData.reportName;
- }
-/* $scope.currentReportUrlParams = 'c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'&display_content=Y&r_page='+(paginationOptions.pageNumber-1);
- console.log('raptor.htm?action=report.run.container&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1));
- $http.get('raptor.htm?action=report.run.container&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then(
- */
- $scope.currentReportUrlParams = 'c_master='+ widget.report_id+'&'+formFieldsUrl+'&display_content=Y&r_page='+(paginationOptions.pageNumber-1);
- $scope.urlParams = parseQueryString($scope.currentReportUrlParams);
-
- console.log('raptor.htm?action=report.run.container&c_master='+ widget.report_id +'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1));
- $http.get('raptor.htm?action=report.run.container&c_master='+widget.report_id+'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then(
- function(response){
- widget.reportData = response.data;
- if(widget.reportData.errormessage) {
- document.getElementById('errorDiv').innerHTML = $sanitize(widget.reportData.errormessage);
- console.log(document.getElementById('errorDiv').innerHtml);
- console.log(widget.reportData.errormessage);
- }
- if(!pagination) {
- if(!$scope.urlParams.hideChart && widget.reportData.chartAvailable && widget.reportData.totalRows>1){
- console.log('raptor.htm?action=chart.run&c_master='+widget.report_id+'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1));
- $http.get('raptor.htm?action=chart.run&c_master='+widget.report_id +'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then(
- function(response) {
- console.log(response.data);
- $scope.showChart = true;
- var chartiframe = document.getElementById('chartiframe');
- chartiframe.contentWindow.document.write($sanitize(response.data));
- chartiframe.contentWindow.document.close();
- });
- } else {
- $scope.showChart = false;
- }
- }
- if($scope.reportData.displayForm && $scope.reportData.formFieldList && $scope.reportData.formFieldList.length>0 && !$scope.urlParams.hideFormFields){
- $scope.showFormFields = true;
- } else {
- $scope.showFormFields = false;
- }
- });
- $rootScope.gridOptions = $scope.gridOptions;
- $rootScope.gridHeight = $scope.gridHeight;
- $rootScope.showdataContainer = true;
- };
-
-
-
-
-
- // set up result object
- $scope.result = jQuery.extend(true, {}, widget);
-
- $scope.ok = function () {
- $uibModalInstance.close($scope.result);
- };
-
- $scope.okay = function () {
- console.log("$scope.okay!")
- console.log($scope);
- $scope.runReport();
-/* $uibModalInstance.close($scope.result);*/
- };
-
- $scope.cancel = function () {
- $uibModalInstance.dismiss('cancel');
- };
- }]); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-raptor-report-template.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-raptor-report-template.html
deleted file mode 100644
index 00d6c41a..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-raptor-report-template.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<div>
- <div class="modal-header">
- <h3 class="modal-title"> Add a Raptor Report</h3>
- </div>
-
- <div >
- <form name="addRaptorReportForm" class="css-form" novalidate>
- <div style="width: 100%;">
- <div style="width: 20%; margin-left: 50px;margin-top:28px; float: left; font-size: 15px;">Report Name: </div>
- <div style="margin-top:20px;" class="form-field" att-select="raptorReportList" ng-model="selectedRaptorReport" placeholder="Select a Raptor Report" no-filter="true"></div>
-
- <form action="">
- <input name="radio" type="radio" ng-model="radioValue" att-radio="chart" title="chart" aria-label="chart radio"> chart
- <input name="radio" type="radio" ng-model="radioValue" att-radio="data" title="data" aria-label="data radio"> data
- </form>
- </div>
-
- <div class="modal-footer">
- <a att-button btn-type="primary" ng-click="ok()">OK</a>
- <a att-button btn-type="primary" ng-click="cancel()">Cancel</a>
- </div>
-
- </form>
- <br />
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-rcloud-notebook-template.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-rcloud-notebook-template.html
deleted file mode 100644
index 239497c9..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-rcloud-notebook-template.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<div>
- <div class="modal-header">
- <h3 class="modal-title"> Add a Raptor Report</h3>
- </div>
-
- <div >
- <form name="addRaptorReportForm" class="css-form" novalidate>
- <div style="width: 100%;">
- <div style="margin-left: 50px;margin-top:28px; font-size: 15px;">RCloud Notebook URL: </div>
-<!-- <div style="margin-top:20px;" class="form-field" att-select="raptorReportList" ng-model="selectedRaptorReport" placeholder="Select a Raptor Report" no-filter="true"></div> -->
- <textarea style="margin-left: 50px; width:450px; height: 150px;" ng-model="rcloud_url" name="content">
- </textarea>
- </div>
- <div class="modal-footer">
- <a att-button btn-type="primary" ng-click="ok()">OK</a>
- <a att-button btn-type="primary" ng-click="cancel()">Cancel</a>
- </div>
-
- </form>
- <br />
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/altDashboard.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/altDashboard.html
deleted file mode 100644
index 189bccea..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/altDashboard.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<div>
- <div class="btn-toolbar" ng-if="!options.hideToolbar">
- <div class="btn-group" ng-if="!options.widgetButtons">
- <span class="dropdown" on-toggle="toggled(open)">
- <button type="button" class="btn btn-primary dropdown-toggle" ng-disabled="disabled">
- Button dropdown <span class="caret"></span>
- </button>
- <ul class="dropdown-menu" role="menu">
- <li ng-repeat="widget in widgetDefs">
- <a href="#" ng-click="addWidgetInternal($event, widget);" class="dropdown-toggle">{{widget.name}}</a>
- </li>
- </ul>
- </span>
- </div>
-
- <div class="btn-group" ng-if="options.widgetButtons">
- <button ng-repeat="widget in widgetDefs"
- ng-click="addWidgetInternal($event, widget);" type="button" class="btn btn-primary">
- {{widget.name}}
- </button>
- </div>
-
- <button class="btn btn-warning" ng-click="resetWidgetsToDefault()">Default Widgets</button>
-
- <button ng-if="options.storage && options.explicitSave" ng-click="options.saveDashboard()" class="btn btn-success" ng-hide="!options.unsavedChangeCount">{{ !options.unsavedChangeCount ? "Alternative - No Changes" : "Save" }}</button>
-
- <button ng-click="clear();" ng-hide="!widgets.length" type="button" class="btn btn-info">Clear</button>
- </div>
-
- <div ui-sortable="sortableOptions" ng-model="widgets" class="dashboard-widget-area">
- <div ng-repeat="widget in widgets" ng-style="widget.style" class="widget-container" widget>
- <div class="widget panel panel-default">
- <div class="widget-header panel-heading">
- <h3 class="panel-title">
- <span class="widget-title" ng-dblclick="editTitle(widget)" ng-hide="widget.editingTitle">{{widget.title}}</span>
- <form action="" class="widget-title" ng-show="widget.editingTitle" ng-submit="saveTitleEdit(widget)">
- <input type="text" ng-model="widget.title" class="form-control">
- </form>
- <span class="label label-primary" ng-if="!options.hideWidgetName">{{widget.name}}</span>
- <span ng-click="removeWidget(widget);" class="glyphicon glyphicon-remove icon-erase" ng-if="!options.hideWidgetClose"></span>
- <span ng-click="openWidgetSettings(widget);" class="glyphicon glyphicon-cog icon-settings" ng-if="!options.hideWidgetSettings"></span>
- </h3>
- </div>
- <div class="panel-body widget-content"></div>
- <div class="widget-ew-resizer" ng-mousedown="grabResizer($event)"></div>
- </div>
- </div>
- </div>
-</div>
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.html
deleted file mode 100644
index e891b565..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.html
+++ /dev/null
@@ -1,74 +0,0 @@
-
-<div>
- <div class="btn-toolbar" ng-if="!options.hideToolbar">
- <div class="btn-group" ng-if="!options.widgetButtons">
-
- <span class="dropdown" on-toggle="toggled(open)">
- <!--<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
- Button dropdown<span class="caret"></span>
- </button>-->
- <ul class="dropdown-menu" role="menu">
- <li ng-repeat="widget in widgetDefs">
- <a href="#" ng-click="addWidgetInternal($event, widget);" class="dropdown-toggle"><span class="label label-primary">{{widget.name}}</span></a>
- </li>
- </ul>
- </span>
- </div>
-
- <div class="btn-group" ng-if="options.widgetButtons">
- <button ng-repeat="widget in widgetDefs"
- ng-click="addWidgetInternal($event, widget);" type="button" class="btn btn-primary">
- {{widget.name}}
- </button>
- </div>
-
-<!-- <div style="float: left" class="form-field" att-select="reports" ng-model="report1" placeholder="Select a Report"></div>
- <button class="btn btn-primary" ng-click="addReport(report1)">Add Raptor Report</button> -->
- <button class="btn btn-primary" ng-click="popupAddReport()">+ Raptor Report</button>
-
-<!-- <div style = "float:left"> <input ng-model = "rcloud_url"> </div>
- <button class="btn btn-primary" ng-click="addRCloudNotebook(rcloud_url)">Add R Cloud</button> -->
- <button class="btn btn-primary" ng-click="popupAddRCloudNotebook()">+ RCloud Notebook</button>
-
-<!-- <button class="btn btn-warning" ng-click="resetWidgetsToDefault()">Default Widgets</button> -->
-
- <button ng-if="options.storage && options.explicitSave" ng-click="options.saveDashboard()" class="btn btn-success" ng-disabled="!options.unsavedChangeCount">{{ !options.unsavedChangeCount ? "All Saved" : "Save Changes (" + options.unsavedChangeCount + ")" }}</button>
-
- <button ng-click="clear();" type="button" class="btn btn-info">Clear</button>
-
-<!-- <button style="float:right" ng-click="clear();" type="button" class="btn btn-info">Save to Database</button> -->
- </div>
-
-
-<!--
- <div id="container">
- <div id="navi">navi</div>
- <div id="infoi">
- <img src="https://appharbor.com/assets/images/stackoverflow-logo.png" height="20" width="32" />infoi
- </div>
-</div>
- -->
-
- <div ui-sortable="sortableOptions" ng-model="widgets" class="dashboard-widget-area">
- <div ng-mouseover="hoverIn()" ng-mouseleave="hoverOut()" ng-repeat="widget in widgets" ng-style="widget.containerStyle" class="widget-container" widget>
- <div class="widget panel panel-default">
- <div style="opacity: 0.8; background-color: #E5E5E5; border: #d3d3d3;" ng-show="hoverEdit" class="widget-header panel-heading">
- <img style="float:left; margin-right: 10px" src="static/fusion/images/att_angular_gridster/grips.png">
- <h3 class="panel-title">
- <span class="widget-title" ng-dblclick="editTitle(widget)" ng-hide="widget.editingTitle"></span>
- <form action="" class="widget-title" ng-show="widget.editingTitle" ng-submit="saveTitleEdit(widget)">
- <input type="text" ng-model="widget.title" class="form-control">
- </form>
- <span class="label label-primary" ng-if="!options.hideWidgetName">{{widget.name}}</span>
- <span ng-click="removeWidget(widget);" class="glyphicon glyphicon-remove icon-erase" ng-if="!options.hideWidgetClose"></span>
- <span ng-click="openWidgetSettings(widget);" class="glyphicon glyphicon-cog icon-settings" ng-if="!options.hideWidgetSettings"></span>
- <span ng-click="widget.contentStyle.display = widget.contentStyle.display === 'none' ? 'block' : 'none'" class="glyphicon" ng-class="{'glyphicon-plus': widget.contentStyle.display === 'none', 'glyphicon-minus': widget.contentStyle.display !== 'none' }"></span>
- </h3>
- </div>
- <div class="panel-body widget-content" ng-style="widget.contentStyle"></div>
- <div class="widget-ew-resizer" ng-mousedown="grabResizer($event)"></div>
- <div style="background-color:#f2f2f2" ng-if="widget.enableVerticalResize" class="widget-s-resizer" ng-mousedown="grabSouthResizer($event)"></div>
- </div>
- </div>
- </div>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.js
deleted file mode 100644
index 4062694e..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.js
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-'use strict';
-
-angular.module('ui.dashboard', ['ui.bootstrap', 'ui.sortable']);
-
-angular.module('ui.dashboard')
-
- .directive('dashboard', ['$http','WidgetModel', 'WidgetDefCollection', '$uibModal', 'DashboardState', '$log', function ($http, WidgetModel, WidgetDefCollection, $uibModal, DashboardState, $log) {
-
- return {
- restrict: 'A',
- templateUrl: function(element, attr) {
- return attr.templateUrl ? attr.templateUrl : 'app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.html';
- },
- scope: true,
-
- controller: ['$scope', '$attrs', function (scope, attrs) {
- // default options
- var defaults = {
- stringifyStorage: true,
- hideWidgetSettings: false,
- hideWidgetClose: false,
- settingsModalOptions: {
- // templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/widget-settings-template.html',
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/widget-settings-raptor-report-template.html',
- // controller: 'WidgetSettingsCtrl'
- controller: 'WidgetSettingsRaptorReportCtrl'
- },
- onSettingsClose: function(result, widget) { // NOTE: dashboard scope is also passed as 3rd argument
- jQuery.extend(true, widget, result);
- },
- onSettingsDismiss: function(reason) { // NOTE: dashboard scope is also passed as 2nd argument
- $log.info('widget settings were dismissed. Reason: ', reason);
- }
- };
-
- scope.hoverEdit = false;
-
- scope.hoverIn = function(){
- this.hoverEdit = true;
- };
-
- scope.hoverOut = function(){
- this.hoverEdit = false;
- };
-
- // from dashboard="options"
- scope.options = scope.$eval(attrs.dashboard);
-
- // Deep options
- scope.options.settingsModalOptions = scope.options.settingsModalOptions || {};
- _.each(['settingsModalOptions'], function(key) {
- // Ensure it exists on scope.options
- scope.options[key] = scope.options[key] || {};
- // Set defaults
- _.defaults(scope.options[key], defaults[key]);
- });
-
- // Shallow options
- _.defaults(scope.options, defaults);
-
- // sortable options
- var sortableDefaults = {
- stop: function () {
- scope.saveDashboard();
- },
- handle: '.widget-header',
- distance: 5
- };
- scope.sortableOptions = angular.extend({}, sortableDefaults, scope.options.sortableOptions || {});
-
- }],
- link: function (scope) {
-
- // Save default widget config for reset
- scope.defaultWidgets = scope.options.defaultWidgets;
-
- scope.widgetDefs = new WidgetDefCollection(scope.options.widgetDefinitions);
- var count = 1;
-
- // Instantiate new instance of dashboard state
- scope.dashboardState = new DashboardState(
- scope.options.storage,
- scope.options.storageId,
- scope.options.storageHash,
- scope.widgetDefs,
- scope.options.stringifyStorage
- );
-
- /**
- * Instantiates a new widget on the dashboard
- * @param {Object} widgetToInstantiate The definition object of the widget to be instantiated
- */
- scope.addWidget = function (widgetToInstantiate, doNotSave) {
-
- if (typeof widgetToInstantiate === 'string') {
- widgetToInstantiate = {
- name: widgetToInstantiate
- };
- }
-
- var defaultWidgetDefinition = scope.widgetDefs.getByName(widgetToInstantiate.name);
- if (!defaultWidgetDefinition) {
- throw 'Widget ' + widgetToInstantiate.name + ' is not found.';
- }
-
- // Determine the title for the new widget
- var title;
- if (!widgetToInstantiate.title && !defaultWidgetDefinition.title) {
- widgetToInstantiate.title = 'Widget ' + count++;
- }
-
- // Instantiation
- var widget = new WidgetModel(defaultWidgetDefinition, widgetToInstantiate);
-
- // Add to the widgets array
- scope.widgets.push(widget);
- if (!doNotSave) {
- scope.saveDashboard();
- }
-
- return widget;
- };
-
- /**
- * Removes a widget instance from the dashboard
- * @param {Object} widget The widget instance object (not a definition object)
- */
- scope.removeWidget = function (widget) {
- scope.widgets.splice(_.indexOf(scope.widgets, widget), 1);
- scope.saveDashboard();
- };
-
- /**
- * Opens a dialog for setting and changing widget properties
- * @param {Object} widget The widget instance object
- */
- scope.openWidgetSettings = function (widget) {
-/* console.log('======= widgets =======');
- console.log(widget);
- console.log('widget.report_id');
- console.log(widget.report_id);
-*/
- if (widget.directive.includes("raptor-report")) {
- var getFormFieldListUrl = "raptor.htm?action=report.run.container&c_master="+widget.report_id + "&refresh=Y";
- $http.get(getFormFieldListUrl).then(
- function(res){
- widget.reportData = res.data;
- });
-
- // Set up $uibModal options
- var options = _.defaults(
- { scope: scope },
- widget.settingsModalOptions,
- scope.options.settingsModalOptions);
-
-/* console.log('======= options =======');
- console.log(options);
-*/
- // Ensure widget is resolved
- options.resolve = {
- widget: function () {
- return widget;
- }
- };
-
- // Create the modal
- var modalInstance = $uibModal.open(options);
- var onClose = widget.onSettingsClose || scope.options.onSettingsClose;
- var onDismiss = widget.onSettingsDismiss || scope.options.onSettingsDismiss;
-
- // Set resolve and reject callbacks for the result promise
- modalInstance.result.then(
- function (result) {
-
- // Call the close callback
- onClose(result, widget, scope);
-
- //AW Persist title change from options editor
- scope.$emit('widgetChanged', widget);
- },
- function (reason) {
-
- // Call the dismiss callback
- onDismiss(reason, scope);
-
- }
- );
-
- }
-
- };
-
- /**
- * Remove all widget instances from dashboard
- */
- scope.clear = function (doNotSave) {
- scope.widgets = [];
- if (doNotSave === true) {
- return;
- }
- scope.saveDashboard();
- };
-
- /**
- * Used for preventing default on click event
- * @param {Object} event A click event
- * @param {Object} widgetDef A widget definition object
- */
- scope.addWidgetInternal = function (event, widgetDef) {
-// event.preventDefault();
- scope.addWidget(widgetDef);
- };
-
- /**
- * Add report to dashboard
- */
- scope.popupAddReport = function () {
- var modalInstance = $uibModal.open({
- animation: scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-raptor-report-template.html',
- size:'sm',
- controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) {
- $scope.radioValue="chart"
- $http.get('raptor.htm?action=report.search.execute').then(
- function(result){
- var data = result.data;
- var report_id_name = [];
- for (var i in data.rows[0]) {
- report_id_name.push({index:i, value: data.rows[0][i][1].searchresultField.displayValue, title: data.rows[0][i][2].searchresultField.displayValue})
- }
- $scope.raptorReportList = report_id_name;
- });
-
- $scope.ok = function() {
- scope.addReport($scope.selectedRaptorReport,$scope.radioValue);
- $uibModalInstance.close();
- };
- $scope.cancel = function() {
- $uibModalInstance.dismiss();
- };
- }]
- });
- modalInstance.result.then(function () {
- $scope.$emit('raptorReportWidgetAdded');
- }, function () {
- $log.info('Modal dismissed at: ' + new Date());
- });
- };
-
-
- scope.popupAddRCloudNotebook = function () {
- var modalInstance = $uibModal.open({
- animation: scope.animationsEnabled,
- templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-rcloud-notebook-template.html',
- size:'sm',
- controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) {
- $scope.rcloud_url = ""
-
- $scope.ok = function() {
- scope.addRCloudNotebook($scope.rcloud_url);
- $uibModalInstance.close();
- };
- $scope.cancel = function() {
- $uibModalInstance.dismiss();
- };
- }]
- });
- modalInstance.result.then(function () {
- $scope.$emit('raptorReportWidgetAdded');
- }, function () {
- $log.info('Modal dismissed at: ' + new Date());
- });
- };
-
-
- scope.addReport = function (report1,radioValue) {
- scope.report1 =report1
- var raptor_report_type = "raptor-report-chart"
- if (radioValue ==='data') {
- raptor_report_type = 'raptor-report-data'
- }
- console.log("report1")
- console.log(report1);
-// event.preventDefault();
- var newreport = {"title":report1.title,"name":raptor_report_type ,"style":{},"size":{"height":"350px","width":"40%"},"attrs":{"value":"randomValue"},"report_id":report1.value};
- scope.addWidget(newreport, true);
- console.log("widgets");
- console.log(scope.widgets);
- ++scope.options.unsavedChangeCount;
- return false;
- };
-
- /**
- * Add rcloud notebook to dashboard
- */
- scope.addRCloudNotebook = function (rcloud_url) {
- ++scope.options.unsavedChangeCount;
- /* open a new prompt window */
- //event.preventDefault();
- var newreport = {"title":"R-Cloud","name":"r-cloud","style":{},"size":{"height":"450px","width":"40%"},"attrs":{"value":"randomValue"},"rcloud_url":rcloud_url};
-// console.log("newport");
- console.log(newreport)
- scope.addWidget(newreport, true);
- /* scope.addWidget("raptor-report");*/
- return false;
- };
-
- /**
- * Uses dashboardState service to save state
- */
- scope.saveDashboard = function (force) {
- if (!scope.options.explicitSave) {
- scope.dashboardState.save(scope.widgets);
- } else {
- if (!angular.isNumber(scope.options.unsavedChangeCount)) {
- scope.options.unsavedChangeCount = 0;
- }
- if (force) {
- scope.options.unsavedChangeCount = 0;
- scope.dashboardState.save(scope.widgets);
-
- } else {
- ++scope.options.unsavedChangeCount;
- }
- }
- };
-
- /**
- * Wraps saveDashboard for external use.
- */
- scope.externalSaveDashboard = function(force) {
- if (angular.isDefined(force)) {
- scope.saveDashboard(force);
- } else {
- scope.saveDashboard(true);
- }
- };
-
- /**
- * Clears current dash and instantiates widget definitions
- * @param {Array} widgets Array of definition objects
- */
- scope.loadWidgets = function (widgets) {
- // AW dashboards are continuously saved today (no "save" button).
- console.log("widgets")
- scope.defaultWidgets = widgets;
- widgets =
- [
-// {"title":"DEMO Bar Chart","name":"raptor-report-chart","style":{},"size":{"height":"450px","width":"40%"},"attrs":{"value":"randomValue"},"report_id":"2"},
-// {"title":"Pie Chart","name":"raptor-report-data","style":{},"size":{"height":"450px","width":"40%"},"attrs":{"value":"randomValue"},"report_id":"5"},
-// {"title":"Pie Chart","name":"raptor-report-chart","style":{},"size":{"height":"450px","width":"40%"},"attrs":{"value":"randomValue"},"report_id":"5"}
- ];
- console.log('widgets: ');
- console.log(JSON.stringify(widgets));
-
- scope.savedWidgetDefs = widgets;
- scope.clear(true);
- _.each(widgets, function (widgetDef) {
- scope.addWidget(widgetDef, true);
- });
- };
-
- /**
- * Resets widget instances to default config
- * @return {[type]} [description]
- */
- scope.resetWidgetsToDefault = function () {
- scope.loadWidgets(scope.defaultWidgets);
- scope.saveDashboard();
- };
-
- // Set default widgets array
- var savedWidgetDefs = scope.dashboardState.load();
-
- // Success handler
- function handleStateLoad(saved) {
- scope.options.unsavedChangeCount = 0;
- if (saved && saved.length) {
- scope.loadWidgets(saved);
- } else if (scope.defaultWidgets) {
- scope.loadWidgets(scope.defaultWidgets);
- } else {
- scope.clear(true);
- }
- }
-
- if (angular.isArray(savedWidgetDefs)) {
- handleStateLoad(savedWidgetDefs);
- } else if (savedWidgetDefs && angular.isObject(savedWidgetDefs) && angular.isFunction(savedWidgetDefs.then)) {
- savedWidgetDefs.then(handleStateLoad, handleStateLoad);
- } else {
- handleStateLoad();
- }
-
- // expose functionality externally
- // functions are appended to the provided dashboard options
- scope.options.addWidget = scope.addWidget;
- scope.options.loadWidgets = scope.loadWidgets;
- scope.options.saveDashboard = scope.externalSaveDashboard;
- scope.options.removeWidget = scope.removeWidget;
- scope.options.openWidgetSettings = scope.openWidgetSettings;
- scope.options.clear = scope.clear;
- scope.options.resetWidgetsToDefault = scope.resetWidgetsToDefault
-
- // save state
- scope.$on('widgetChanged', function (event) {
- event.stopPropagation();
- scope.saveDashboard();
- });
- }
- };
- }]);
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.less b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.less
deleted file mode 100644
index 6b5b717f..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.less
+++ /dev/null
@@ -1,88 +0,0 @@
-.dashboard-widget-area {
- margin: 10px 0 30px;
- min-height: 200px;
-}
-
-.widget-container {
- float:left;
- display: inline-block;
- width: 33%;
- padding-bottom: 1em;
-}
-
-.widget {
- margin: 0 1em 0 0;
- background-color: white;
- border: 2px solid #444;
- border-radius: 5px;
- position: relative;
- height: 100%;
-}
-.widget-header {
- overflow: hidden;
-}
-.widget-header .label {
- display: inline-block;
- vertical-align: middle;
-}
-.widget-header .glyphicon {
- cursor: pointer;
- float: right;
- opacity: 0.5;
- margin-left: 5px;
-}
-.widget-header .glyphicon:hover {
- opacity: 1;
-}
-.widget-header .widget-title {
- vertical-align: middle;
-}
-.widget-header form.widget-title {
- display: inline;
-}
-
-.widget-header form.widget-title input.form-control {
- width: auto;
- display: inline-block;
-}
-
-.widget-content {
- overflow: hidden;
-}
-
-.widget .widget-ew-resizer {
- position: absolute;
- width: 5px;
- right: -2px;
- height:100%;
- top:0;
- cursor: ew-resize;
-}
-
-.widget .widget-s-resizer {
- cursor: ns-resize;
- height: 5px;
- width: 100%;
- bottom: -7px;
- left: 0;
-}
-
-.widget .widget-resizer-marquee {
- box-shadow: inset 0 0 0 1px rgba(0,0,0,0.5);
- position: absolute;
- top: 0;
- left: 0;
- z-index: 2;
-}
-
-.remove-layout-icon {
- vertical-align: text-top;
- cursor: pointer;
- opacity: 0.3;
-}
-.remove-layout-icon:hover {
- opacity: 1;
-}
-.layout-title {
- display: inline-block;
-} \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.spec.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.spec.js
deleted file mode 100644
index 453de431..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.spec.js
+++ /dev/null
@@ -1,878 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-describe('Directive: dashboard', function () {
-
- var scope, element, childScope, DashboardState, mockModal, modalOptions, $compile, $q, mockLog;
-
- // mock UI Sortable
- beforeEach(function () {
- angular.module('ui.sortable', []);
- });
-
- // load the directive's module
- beforeEach(module('ui.dashboard', function($provide) {
- mockModal = {
- open: function(options) {
- modalOptions = options;
- }
- };
- mockLog = {
- info: function() {
-
- }
- };
- $provide.value('$uibModal', mockModal);
- $provide.value('$log', mockLog);
- }));
-
- beforeEach(inject(function (_$compile_, $rootScope, _DashboardState_, _$q_) {
- // services
- scope = $rootScope.$new();
- $compile = _$compile_;
- DashboardState = _DashboardState_;
- $q = _$q_;
-
- // options
- var widgetDefinitions = [
- {
- name: 'wt-one',
- template: '<div class="wt-one-value">{{2 + 2}}</div>'
- },
- {
- name: 'wt-two',
- template: '<span class="wt-two-value">{{value}}</span>'
- }
- ];
- var defaultWidgets = _.clone(widgetDefinitions);
- scope.dashboardOptions = {
- widgetButtons: true,
- widgetDefinitions: widgetDefinitions,
- defaultWidgets: defaultWidgets,
- sortableOptions: {
- testProperty: 'foobar'
- }
- };
- scope.value = 10;
-
- // element setup
- element = $compile('<div dashboard="dashboardOptions"></div>')(scope);
- scope.$digest();
- childScope = element.scope();
- }));
-
- it('should have toolbar', function () {
- var toolbar = element.find('.btn-toolbar');
- expect(toolbar.length).toEqual(1);
- });
-
- it('should have UI.Sortable directive', function () {
- var widgetArea = element.find('.dashboard-widget-area');
- expect(widgetArea.attr('ui-sortable')).toBeDefined();
- });
-
- it('should render widgets', function () {
- var widgets = element.find('.widget');
- expect(widgets.length).toEqual(2);
- });
-
- it('should evaluate widget expressions', function () {
- var divWidget = element.find('.wt-one-value');
- expect(divWidget.html()).toEqual('4');
- });
-
- it('should evaluate scope expressions', function () {
- var spanWidget = element.find('.wt-two-value');
- expect(spanWidget.html()).toEqual('10');
- });
-
- it('should fill options with defaults', function() {
- expect(scope.dashboardOptions.stringifyStorage).toEqual(true);
- });
-
- it('should not overwrite specified options with defaults', inject(function($compile) {
- scope.dashboardOptions.stringifyStorage = false;
- element = $compile('<div dashboard="dashboardOptions"></div>')(scope);
- $compile(element)(scope);
- scope.$digest();
- expect(scope.dashboardOptions.stringifyStorage).toEqual(false);
- }));
-
- it('should be able to use a different dashboard template', inject(function($compile, $templateCache) {
- $templateCache.put(
- 'myCustomTemplate.html',
- '<div>' +
- '<div ui-sortable="sortableOptions" ng-model="widgets">' +
- '<div ng-repeat="widget in widgets" ng-style="widget.style" class="widget-container custom-widget" widget>' +
- '<h3 class="widget-header">' +
- '{{widget.title}}' +
- '<span ng-click="removeWidget(widget);" class="glyphicon glyphicon-remove icon-erase" ng-if="!options.hideWidgetClose"></span>' +
- '<span ng-click="openWidgetSettings(widget);" class="glyphicon glyphicon-cog icon-settings" ng-if="!options.hideWidgetSettings"></span>' +
- '</h3>' +
- '<div class="widget-content"></div>' +
- '<div class="widget-ew-resizer" ng-mousedown="grabResizer($event)"></div>' +
- '</div>' +
- '</div>' +
- '</div>'
- );
- var customElement = $compile('<div dashboard="dashboardOptions" template-url="myCustomTemplate.html"></div>')(scope);
- scope.$digest();
- expect(customElement.find('.custom-widget').length).toEqual(2);
- }));
-
- it('should set scope.widgets to an empty array if no defaultWidgets are specified', inject(function($compile) {
- delete scope.dashboardOptions.defaultWidgets;
- var element2 = $compile('<div dashboard="dashboardOptions"></div>')(scope);
- scope.$digest();
- var childScope2 = element2.scope();
- expect(childScope2.widgets instanceof Array).toEqual(true);
- }));
-
- it('should set options.unsavedChangeCount to 0 upon load', function() {
- expect(scope.dashboardOptions.unsavedChangeCount).toEqual(0);
- });
-
- it('should not call saveDashboard on load', inject(function($compile) {
- spyOn(DashboardState.prototype, 'save');
- var s = scope.$new();
- element = $compile('<div dashboard="dashboardOptions"></div>')(s);
- scope.$digest();
- expect(DashboardState.prototype.save).not.toHaveBeenCalled();
- }));
-
- describe('the sortableOptions', function() {
-
- it('should exist', function() {
- expect(typeof childScope.sortableOptions).toEqual('object');
- });
-
- it('should be possible to be extendable from the dashboardOptions', function() {
- expect(childScope.sortableOptions.testProperty).toEqual('foobar');
- })
-
- it('should have a stop function that calls $scope.saveDashboard', function() {
- expect(typeof childScope.sortableOptions.stop).toEqual('function');
- spyOn(childScope, 'saveDashboard');
- childScope.sortableOptions.stop();
- expect(childScope.saveDashboard).toHaveBeenCalled();
- });
- });
-
- describe('the addWidget function', function() {
-
- var widgetCreated, widgetPassed, widgetDefault;
-
- beforeEach(function() {
- childScope.widgets.push = function(w) {
- widgetCreated = w;
- }
- });
-
- it('should be a function', function() {
- expect(typeof childScope.addWidget).toEqual('function');
- });
-
- it('should throw if no default widgetDefinition was found', function() {
- spyOn(childScope.widgetDefs, 'getByName').and.returnValue(false);
- function fn () {
- childScope.addWidget({ name: 'notReal' });
- }
- expect(fn).toThrow();
- });
-
- it('should look to the passed widgetToInstantiate object for the title before anything else', function() {
- spyOn(childScope.widgetDefs, 'getByName').and.returnValue({ title: 'defaultTitle', name: 'A' });
- childScope.addWidget({ title: 'highestPrecedence', name: 'A' });
- expect(widgetCreated.title).toEqual('highestPrecedence');
- });
-
- it('should use the defaultWidget\'s title second', function() {
- spyOn(childScope.widgetDefs, 'getByName').and.returnValue({ title: 'defaultTitle', name: 'A' });
- childScope.addWidget({ name: 'A' });
- expect(widgetCreated.title).toEqual('defaultTitle');
- });
-
- it('should call the saveDashboard method (internal)', function() {
- spyOn(childScope.widgetDefs, 'getByName').and.returnValue({ title: 'defaultTitle', name: 'A' });
- spyOn(childScope, 'saveDashboard');
- childScope.addWidget({ name: 'A' });
- expect(childScope.saveDashboard).toHaveBeenCalled();
- });
-
- it('should support passing just the widget name as a string', function() {
- spyOn(childScope.widgetDefs, 'getByName').and.returnValue({ title: 'defaultTitle', name: 'A' });
- childScope.addWidget('A');
- expect(childScope.widgetDefs.getByName).toHaveBeenCalledWith('A');
- expect(widgetCreated.title).toEqual('defaultTitle');
- });
-
- describe('@awashbrook Test Case', function() {
- beforeEach(function() {
- spyOn(childScope.widgetDefs, 'getByName').and.returnValue(widgetDefault = {
- "name": "nvLineChartAlpha",
- "directive": "nvd3-line-chart",
- "dataAttrName": "data",
- "attrs": {
- "isArea": true,
- "height": 400,
- "showXAxis": true,
- "showYAxis": true,
- "xAxisTickFormat": "xAxisTickFormat()",
- "interactive": true,
- "useInteractiveGuideline": true,
- "tooltips": true,
- "showLegend": true,
- "noData": "No data for YOU!",
- "color": "colorFunction()",
- "forcey": "[0,2]"
- },
- "dataModelOptions": {
- "params": {
- "from": "-2h",
- "until": "now"
- }
- },
- "style": {
- "width": "400px"
- },
- });
- childScope.addWidget(widgetPassed = {
- "title": "Andy",
- "name": "nvLineChartAlpha",
- "style": {
- "width": "400px"
- },
- "dataModelOptions": {
- "params": {
- "from": "-1h",
- "target": [
- "randomWalk(\"random Andy 1\")",
- "randomWalk(\"random walk 2\")",
- "randomWalk(\"random walk 3\")"
- ]
- }
- },
- "attrs": {
- "height": 400,
- "showXAxis": true,
- "showYAxis": true,
- "xAxisTickFormat": "xAxisTickFormat()",
- "interactive": false,
- "useInteractiveGuideline": true,
- "tooltips": true,
- "showLegend": true,
- "noData": "No data for YOU!",
- "color": "colorFunction()",
- "forcey": "[0,2]",
- "data": "widgetData"
- }
- });
- });
-
- it('should keep overrides from widgetPassed', function() {
- expect(widgetCreated.attrs.interactive).toEqual(widgetPassed.attrs.interactive);
- });
-
- it('should fill in default attrs', function() {
- expect(widgetCreated.attrs.isArea).toEqual(widgetDefault.attrs.isArea);
- });
-
- it('should override deep options in dataModelOptions', function() {
- expect(widgetCreated.dataModelOptions.params.from).toEqual(widgetPassed.dataModelOptions.params.from);
- });
-
- it('should fill in deep default attrs', function() {
- expect(widgetCreated.dataModelOptions.params.until).toEqual(widgetDefault.dataModelOptions.params.until);
- });
- });
-
- describe('the doNotSave parameter', function() {
-
- it('should prevent save from being called if set to true', function() {
- spyOn(childScope.widgetDefs, 'getByName').and.returnValue({ title: 'defaultTitle', name: 'A' });
- spyOn(childScope, 'saveDashboard');
- childScope.addWidget({ name: 'A' }, true);
- expect(childScope.saveDashboard).not.toHaveBeenCalled();
- });
-
- });
-
- });
-
- describe('the removeWidget function', function() {
-
- it('should be a function', function() {
- expect(typeof childScope.removeWidget).toEqual('function');
- });
-
- it('should remove the provided widget from childScope.widgets array', function() {
- var startingLength = childScope.widgets.length;
- var expectedLength = startingLength - 1;
-
- var widgetToRemove = childScope.widgets[0];
- childScope.removeWidget(widgetToRemove);
-
- expect(childScope.widgets.length).toEqual(expectedLength);
- expect(childScope.widgets.indexOf(widgetToRemove)).toEqual(-1);
- });
-
- it('should call saveDashboard', function() {
- spyOn(childScope, 'saveDashboard');
- var widgetToRemove = childScope.widgets[0];
- childScope.removeWidget(widgetToRemove);
- expect(childScope.saveDashboard).toHaveBeenCalled();
- });
-
- });
-
- describe('the saveDashboard function', function() {
-
- it('should be attached to the options object after initialization', function() {
- expect(typeof scope.dashboardOptions.saveDashboard).toEqual('function');
- expect(scope.dashboardOptions.saveDashboard === childScope.externalSaveDashboard).toEqual(true);
- });
-
- it('should call scope.dashboardState.save when called internally if explicitSave is falsey', function() {
- spyOn(childScope.dashboardState, 'save').and.returnValue(true);
- childScope.saveDashboard();
- expect(childScope.dashboardState.save).toHaveBeenCalled();
- });
-
- it('should not call scope.dashboardState.save when called internally if explicitSave is truthy', function() {
- scope.dashboardOptions.explicitSave = true;
- spyOn(childScope.dashboardState, 'save').and.returnValue(true);
- childScope.saveDashboard();
- expect(childScope.dashboardState.save).not.toHaveBeenCalled();
- });
-
- it('should call scope.dashboardState.save when called externally, no matter what explicitSave value is', function() {
- spyOn(childScope.dashboardState, 'save').and.returnValue(true);
-
- scope.dashboardOptions.explicitSave = false;
- scope.dashboardOptions.saveDashboard();
- expect(childScope.dashboardState.save.calls.count()).toEqual(1);
-
- scope.dashboardOptions.explicitSave = true;
- scope.dashboardOptions.saveDashboard();
- expect(childScope.dashboardState.save.calls.count()).toEqual(2);
- });
-
- it('should keep a count of unsaved changes as unsavedChangeCount', function() {
- scope.dashboardOptions.explicitSave = true;
- spyOn(childScope.dashboardState, 'save').and.returnValue(true);
- childScope.saveDashboard();
- expect(scope.dashboardOptions.unsavedChangeCount).toEqual(1);
- childScope.saveDashboard();
- childScope.saveDashboard();
- expect(scope.dashboardOptions.unsavedChangeCount).toEqual(3);
- });
-
- it('should reset the cound of unsaved changes if a successful force save occurs', function() {
- scope.dashboardOptions.explicitSave = true;
- spyOn(childScope.dashboardState, 'save').and.returnValue(true);
-
- childScope.saveDashboard();
- childScope.saveDashboard();
- childScope.saveDashboard();
-
- childScope.saveDashboard(true);
-
- expect(scope.dashboardOptions.unsavedChangeCount).toEqual(0);
- });
-
- });
-
- describe('the loadWidgets function', function() {
-
- it('should be a function', function() {
- expect(typeof childScope.loadWidgets).toEqual('function');
- });
-
- it('should set savedWidgetDefs on scope as passed array', function() {
- var widgets = [];
- childScope.loadWidgets(widgets);
- expect(childScope.savedWidgetDefs === widgets).toEqual(true);
- });
-
- it('should call clear on the scope with true as the only argument', function() {
- spyOn(childScope, 'clear');
- childScope.loadWidgets([]);
- expect(childScope.clear).toHaveBeenCalled();
- expect(childScope.clear.calls.argsFor(0)).toEqual([true]);
- });
-
- it('should call addWidget for each widget in the array', function() {
- spyOn(childScope, 'addWidget').and.returnValue(null);
- var widgets = [{},{},{}];
- childScope.loadWidgets(widgets);
- expect(childScope.addWidget.calls.count()).toEqual(3);
- });
-
- it('should call addWidget for each widget with true as the second parameter (doNotSave)', function() {
- spyOn(childScope, 'addWidget').and.returnValue(null);
- var widgets = [{},{},{}];
- childScope.loadWidgets(widgets);
- expect(childScope.addWidget.calls.argsFor(0)).toEqual( [ widgets[0], true] );
- expect(childScope.addWidget.calls.argsFor(1)).toEqual( [ widgets[1], true] );
- expect(childScope.addWidget.calls.argsFor(2)).toEqual( [ widgets[2], true] );
- });
-
- });
-
- describe('the clear function', function() {
-
- it('should set the scope to an empty array', function() {
- childScope.clear();
- expect(childScope.widgets).toEqual([]);
- });
-
- it('should not call saveDashboard if first arg is true', function() {
- spyOn(childScope, 'saveDashboard');
- childScope.clear(true);
- expect(childScope.saveDashboard).not.toHaveBeenCalled();
- });
-
- it('should call saveDashboard if first arg is not true', function() {
- spyOn(childScope, 'saveDashboard');
- childScope.clear();
- expect(childScope.saveDashboard).toHaveBeenCalled();
- });
-
- });
-
- describe('the openWidgetSettings function', function() {
-
- it('should be a function', function() {
- expect(typeof childScope.openWidgetSettings).toEqual('function');
- });
-
- it('should call $uibModal.open with default options', function() {
- var widget = {};
- spyOn(mockModal, 'open').and.returnValue({
- result: { then: function(fn) {} }
- });
- childScope.openWidgetSettings(widget);
- expect(mockModal.open).toHaveBeenCalled();
- });
-
- it('should have widget in the resolve object', function() {
- var widget = {};
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- childScope.openWidgetSettings(widget);
- expect(modalOptions.resolve.widget() === widget).toEqual(true);
- });
-
- it('should set the templateUrl in modal options to the default ("app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/widget-settings-template.html")', function() {
- var widget = {};
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- childScope.openWidgetSettings(widget);
- expect(modalOptions.templateUrl).toEqual('app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/widget-settings-template.html');
- });
-
- it('should set the templateUrl in modal options to scope.options.settingsModalOptions.templateUrl', function() {
- var other;
- scope.dashboardOptions.settingsModalOptions = {
- templateUrl: other = 'some/other/url.html'
- };
- var widget = {};
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- childScope.openWidgetSettings(widget);
- expect(modalOptions.templateUrl).toEqual(other);
- });
-
- it('should set the templateUrl in modal options to widget.settingsModalOptions.templateUrl, if present', function() {
- var expected;
- var widget = {
- settingsModalOptions: {
- templateUrl: expected = 'specific/template.html'
- }
- };
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- childScope.openWidgetSettings(widget);
- expect(modalOptions.templateUrl).toEqual(expected);
- });
-
- it('should set the controller in modal options to the default ("WidgetSettingsCtrl")', function() {
- var widget = {};
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- childScope.openWidgetSettings(widget);
- expect(modalOptions.controller).toEqual('WidgetSettingsCtrl');
- });
-
- it('should set the controller in modal options to the default ("WidgetSettingsCtrl"), even when settingsModalOptions is supplied in options', inject(function($rootScope) {
-
- scope = $rootScope.$new();
-
- // options
- var widgetDefinitions = [
- {
- name: 'wt-one',
- template: '<div class="wt-one-value">{{2 + 2}}</div>'
- },
- {
- name: 'wt-two',
- template: '<span class="wt-two-value">{{value}}</span>'
- }
- ];
- var defaultWidgets = _.clone(widgetDefinitions);
- scope.dashboardOptions = {
- widgetButtons: true,
- widgetDefinitions: widgetDefinitions,
- defaultWidgets: defaultWidgets,
- sortableOptions: {
- testProperty: 'foobar'
- },
- settingsModalOptions: {
- backdrop: false
- }
- };
- scope.value = 10;
-
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
-
- // element setup
- element = $compile('<div dashboard="dashboardOptions"></div>')(scope);
- scope.$digest();
- childScope = element.scope();
-
- childScope.openWidgetSettings({});
- expect(modalOptions.controller).toEqual('WidgetSettingsCtrl');
-
- }));
-
- it('should set the controller in modal options to the default ("WidgetSettingsCtrl"), even when settingsModalOptions is supplied in widget', inject(function($rootScope) {
-
- scope = $rootScope.$new();
-
- // options
- var widgetDefinitions = [
- {
- name: 'wt-one',
- template: '<div class="wt-one-value">{{2 + 2}}</div>'
- },
- {
- name: 'wt-two',
- template: '<span class="wt-two-value">{{value}}</span>'
- }
- ];
- var defaultWidgets = _.clone(widgetDefinitions);
- scope.dashboardOptions = {
- widgetButtons: true,
- widgetDefinitions: widgetDefinitions,
- defaultWidgets: defaultWidgets,
- sortableOptions: {
- testProperty: 'foobar'
- },
- settingsModalOptions: {
- backdrop: false
- }
- };
- scope.value = 10;
-
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
-
- // element setup
- element = $compile('<div dashboard="dashboardOptions"></div>')(scope);
- scope.$digest();
- childScope = element.scope();
-
- childScope.openWidgetSettings({
- settingsModalOptions: {
- templateUrl: 'custom/widget/template.html'
- }
- });
- expect(modalOptions.controller).toEqual('WidgetSettingsCtrl');
- expect(modalOptions.backdrop).toEqual(false);
- expect(modalOptions.templateUrl).toEqual('custom/widget/template.html');
-
- }));
-
- it('should set the controller to scope.options.settingsModalOptions.controller if provided', function() {
- scope.dashboardOptions.settingsModalOptions = {};
- var expected = scope.dashboardOptions.settingsModalOptions.controller = 'MyCustomCtrl';
- var widget = {};
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- childScope.openWidgetSettings(widget);
- expect(modalOptions.controller).toEqual(expected);
- });
-
- it('should set the controller to widget.settingsModalOptions.controller if provided', function() {
- var expected;
- var widget = {
- settingsModalOptions: {
- controller: expected = 'MyWidgetCtrl'
- }
- };
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- childScope.openWidgetSettings(widget);
- expect(modalOptions.controller).toEqual(expected);
- });
-
- it('should pass in other modal options set in scope.options.settingsModalOptions', function() {
- scope.dashboardOptions.settingsModalOptions = {
- keyboard: false,
- windowClass: 'my-extra-class'
- };
- var widget = {};
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- childScope.openWidgetSettings(widget);
- expect(modalOptions.keyboard).toEqual(false);
- expect(modalOptions.windowClass).toEqual('my-extra-class');
- });
-
- it('should pass in other modal options set in widget.settingsModalOptions', function() {
- scope.dashboardOptions.settingsModalOptions = {
- keyboard: false,
- windowClass: 'my-extra-class'
- };
- var widget = {
- settingsModalOptions: {
- keyboard: true,
- size: 'sm'
- }
- };
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- childScope.openWidgetSettings(widget);
- expect(modalOptions.keyboard).toEqual(true);
- expect(modalOptions.size).toEqual('sm');
- expect(modalOptions.windowClass).toEqual('my-extra-class');
- });
-
- it('should emit a "widgetChanged" event on the childScope when the modal promise is called', function(done) {
- var widget = {};
- var result = {};
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- spyOn(childScope.options, 'onSettingsClose');
- childScope.openWidgetSettings(widget);
- childScope.$on('widgetChanged', done);
- dfr.resolve(result, widget);
- childScope.$digest();
- });
-
- it('should call scope.options.onSettingsClose when the modal promise is resolved by default', function() {
- var widget = {};
- var result = {};
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- spyOn(childScope.options, 'onSettingsClose');
- childScope.openWidgetSettings(widget);
- dfr.resolve(result);
- childScope.$digest();
- expect(scope.dashboardOptions.onSettingsClose).toHaveBeenCalledWith(result, widget, childScope);
- });
-
- it('should call scope.options.onSettingsDismiss when the modal promise is rejected by default', function() {
- var widget = {};
- var result = {};
- var dfr = $q.defer();
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- spyOn(childScope.options, 'onSettingsDismiss');
- childScope.openWidgetSettings(widget);
- dfr.reject('Testing failure');
- childScope.$digest();
- expect(scope.dashboardOptions.onSettingsDismiss).toHaveBeenCalledWith('Testing failure', childScope);
- });
-
- it('should call widget.onSettingsClose if provided when the modal promise is resolved', function() {
- var widget = {
- onSettingsClose: function(result, widget, scope) {
-
- }
- };
- var result = {};
- var dfr = $q.defer();
- spyOn(widget, 'onSettingsClose');
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- spyOn(childScope.options, 'onSettingsClose');
- childScope.openWidgetSettings(widget);
- dfr.resolve(result);
- childScope.$digest();
- expect(scope.dashboardOptions.onSettingsClose).not.toHaveBeenCalled();
- expect(widget.onSettingsClose).toHaveBeenCalledWith(result, widget, childScope);
- });
-
- it('should call widget.onSettingsDismiss if provided when the modal promise is rejected', function() {
- var widget = {
- onSettingsDismiss: function(result, widget, scope) {
-
- }
- };
- var result = {};
- var dfr = $q.defer();
- spyOn(widget, 'onSettingsDismiss');
- spyOn(mockModal, 'open').and.callFake(function(options) {
- modalOptions = options;
- return {
- result: dfr.promise
- };
- });
- spyOn(childScope.options, 'onSettingsDismiss');
- childScope.openWidgetSettings(widget);
- dfr.reject('Testing failure');
- childScope.$digest();
- expect(scope.dashboardOptions.onSettingsDismiss).not.toHaveBeenCalled();
- expect(widget.onSettingsDismiss).toHaveBeenCalledWith('Testing failure', childScope);
- });
-
- });
-
- describe('the default onSettingsClose callback', function() {
-
- var onSettingsClose;
-
- beforeEach(function() {
- onSettingsClose = childScope.options.onSettingsClose;
- });
-
- it('should exist', function() {
- expect(typeof onSettingsClose).toEqual('function');
- });
-
- it('should deep extend widget with result', function() {
- var result = {
- title: 'andy',
- style: {
- 'float': 'left'
- }
- };
- var widget = {
- title: 'scott',
- style: {
- width: '100px'
- }
- };
- onSettingsClose(result, widget, {});
- expect(widget).toEqual({
- title: 'andy',
- style: {
- width: '100px',
- 'float': 'left'
- }
- });
- });
-
- });
-
- describe('the default onSettingsDismiss callback', function() {
-
- var onSettingsDismiss;
-
- beforeEach(function() {
- onSettingsDismiss = childScope.options.onSettingsDismiss;
- });
-
- it('should exist', function() {
- expect(typeof onSettingsDismiss).toEqual('function');
- });
-
- it('should call $log.info with the reason', function() {
- spyOn(mockLog, 'info');
- onSettingsDismiss('dismiss reason');
- expect(mockLog.info).toHaveBeenCalled();
- });
-
- });
-
-});
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModal.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModal.html
deleted file mode 100644
index f9f6f361..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModal.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true" ng-click="cancel()">&times;</button>
- <h3>Unsaved Changes to "{{layout.title}}"</h3>
-</div>
-
-<div class="modal-body">
- <p>You have {{layout.dashboard.unsavedChangeCount}} unsaved changes on this dashboard. Would you like to save them?</p>
-</div>
-
-<div class="modal-footer">
- <button type="button" class="btn btn-default" ng-click="cancel()">Don't Save</button>
- <button type="button" class="btn btn-primary" ng-click="ok()">Save</button>
-</div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModalCtrl.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModalCtrl.js
deleted file mode 100644
index 252f9df4..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModalCtrl.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-angular.module('ui.dashboard')
- .controller('SaveChangesModalCtrl', ['$scope', '$uibModalInstance', 'layout', function ($scope, $uibModalInstance, layout) {
-
- // add layout to scope
- $scope.layout = layout;
-
- $scope.ok = function () {
- $uibModalInstance.close();
- };
-
- $scope.cancel = function () {
- $uibModalInstance.dismiss();
- };
- }]); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.html
deleted file mode 100644
index 54aef297..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<ul ui-sortable="sortableOptions" ng-model="layouts" class="nav nav-tabs layout-tabs">
- <li ng-repeat="layout in layouts" ng-class="{ active: layout.active }">
- <a ng-click="makeLayoutActive(layout)">
- <span ng-dblclick="editTitle(layout)" ng-show="!layout.editingTitle">{{layout.title}}</span>
- <form action="" class="layout-title" ng-show="layout.editingTitle" ng-submit="saveTitleEdit(layout)">
- <input type="text" ng-model="layout.title" class="form-control" data-layout="{{layout.id}}">
- </form>
- <span ng-if="!layout.locked" ng-click="removeLayout(layout)" class="glyphicon glyphicon-remove icon-erase remove-layout-icon"></span>
- <!-- <span class="glyphicon glyphicon-pencil"></span> -->
- <!-- <span class="glyphicon glyphicon-remove"></span> -->
- </a>
- </li>
- <li>
- <a ng-click="createNewLayout()">
- <span class="glyphicon glyphicon-plus"></span>
- </a>
- </li>
-</ul>
-<div ng-repeat="layout in layouts | filter:isActive" dashboard="layout.dashboard" template-url="app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.html"></div> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js
deleted file mode 100644
index bbf107a8..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-angular.module('ui.dashboard')
- .directive('dashboardLayouts', ['LayoutStorage', '$timeout', '$uibModal',
- function(LayoutStorage, $timeout, $uibModal) {
- return {
- scope: true,
- templateUrl: function(element, attr) {
- return attr.templateUrl ? attr.templateUrl : 'app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.html';
- },
- link: function(scope, element, attrs) {
-
- scope.options = scope.$eval(attrs.dashboardLayouts);
-
- var layoutStorage = new LayoutStorage(scope.options);
-
- scope.layouts = layoutStorage.layouts;
-
- scope.createNewLayout = function() {
- var newLayout = {
- title: 'Custom',
- defaultWidgets: scope.options.defaultWidgets || []
- };
- layoutStorage.add(newLayout);
- scope.makeLayoutActive(newLayout);
- layoutStorage.save();
- return newLayout;
- };
-
- scope.removeLayout = function(layout) {
- layoutStorage.remove(layout);
- layoutStorage.save();
- };
-
- scope.makeLayoutActive = function(layout) {
-
- var current = layoutStorage.getActiveLayout();
-
- if (current && current.dashboard.unsavedChangeCount) {
- var modalInstance = $uibModal.open({
- templateUrl: 'template/SaveChangesModal.html',
- resolve: {
- layout: function() {
- return layout;
- }
- },
- controller: 'SaveChangesModalCtrl'
- });
-
- // Set resolve and reject callbacks for the result promise
- modalInstance.result.then(
- function() {
- current.dashboard.saveDashboard();
- scope._makeLayoutActive(layout);
- },
- function() {
- scope._makeLayoutActive(layout);
- }
- );
- } else {
- scope._makeLayoutActive(layout);
- }
-
- };
-
- scope._makeLayoutActive = function(layout) {
- angular.forEach(scope.layouts, function(l) {
- if (l !== layout) {
- l.active = false;
- } else {
- l.active = true;
- }
- });
- layoutStorage.save();
- };
-
- scope.isActive = function(layout) {
- return !!layout.active;
- };
-
- scope.editTitle = function(layout) {
- if (layout.locked) {
- return;
- }
-
- var input = element.find('input[data-layout="' + layout.id + '"]');
- layout.editingTitle = true;
-
- $timeout(function() {
- input.focus()[0].setSelectionRange(0, 9999);
- });
- };
-
- // saves whatever is in the title input as the new title
- scope.saveTitleEdit = function(layout) {
- layout.editingTitle = false;
- layoutStorage.save();
- };
-
- scope.options.saveLayouts = function() {
- layoutStorage.save(true);
- };
- scope.options.addWidget = function() {
- var layout = layoutStorage.getActiveLayout();
- if (layout) {
- layout.dashboard.addWidget.apply(layout.dashboard, arguments);
- }
- };
- scope.options.loadWidgets = function() {
- var layout = layoutStorage.getActiveLayout();
- if (layout) {
- layout.dashboard.loadWidgets.apply(layout.dashboard, arguments);
- }
- };
- scope.options.saveDashboard = function() {
- console.log("================= saveDashboard called =================")
- var layout = layoutStorage.getActiveLayout();
- console.log("===================== layout ===========================");
- console.log(layout);
- if (layout) {
- layout.dashboard.saveDashboard.apply(layout.dashboard, arguments);
- }
- };
-
- var sortableDefaults = {
- stop: function() {
- scope.options.saveLayouts();
- },
- distance: 5
- };
- scope.sortableOptions = angular.extend({}, sortableDefaults, scope.options.sortableOptions || {});
- }
- };
- }
- ]); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.spec.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.spec.js
deleted file mode 100644
index 8533a211..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.spec.js
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-describe('Directive: dashboard-layouts', function () {
-
- var $rootScope, element, options, childScope, DashboardState, LayoutStorage, $mockModal, $mockTimeout, toFn;
-
- // mock UI Sortable
- beforeEach(function () {
- angular.module('ui.sortable', []);
- });
-
- // load the directive's module
- beforeEach(module('ui.dashboard', function($provide) {
- $mockModal = {
- open: function() {}
- };
- $mockTimeout = function(fn, delay) {
- toFn = fn;
- };
- $provide.value('$uibModal', $mockModal);
- $provide.value('$timeout', $mockTimeout);
- }));
-
- beforeEach(inject(function ($compile, _$rootScope_, _DashboardState_, _LayoutStorage_) {
- // services
- $rootScope = _$rootScope_;
- DashboardState = _DashboardState_;
- LayoutStorage = _LayoutStorage_;
-
- // options
- var widgetDefinitions = [
- {
- name: 'wt-one',
- template: '<div class="wt-one-value">{{2 + 2}}</div>'
- },
- {
- name: 'wt-two',
- template: '<span class="wt-two-value">{{value}}</span>'
- }
- ];
- var defaultWidgets = _.clone(widgetDefinitions);
- $rootScope.dashboardOptions = options = {
- widgetButtons: true,
- widgetDefinitions: widgetDefinitions,
- defaultLayouts: [
- {
- title: 'first',
- active: true,
- defaultWidgets: defaultWidgets
- },
- {
- title: 'second',
- active: false,
- defaultWidgets: defaultWidgets
- }
- ],
- defaultWidgets: defaultWidgets,
- storage: {
- setItem: function(key, val) {
-
- },
- getItem: function(key) {
-
- },
- removeItem: function(key) {
-
- }
- }
- };
- $rootScope.value = 10;
-
- // element setup
- element = $compile('<div dashboard-layouts="dashboardOptions"></div>')($rootScope);
- $rootScope.$digest();
- childScope = element.scope();
- }));
-
- it('should not require storage', inject(function($compile) {
- delete $rootScope.dashboardOptions.storage;
- expect(function() {
- var noStorageEl = $compile('<div dashboard-layouts="dashboardOptions"></div>')($rootScope);
- $rootScope.$digest();
- }).not.toThrow();
-
- }));
-
- it('should be able to use a different dashboard-layouts template', inject(function($compile, $templateCache) {
- $templateCache.put(
- 'myCustomTemplate.html',
- '<ul class="my-custom-tabs layout-tabs">' +
- '<li ng-repeat="layout in layouts" ng-class="{ active: layout.active }">' +
- '<a ng-click="makeLayoutActive(layout)">' +
- '<span ng-dblclick="editTitle(layout)" ng-show="!layout.editingTitle">{{layout.title}}</span>' +
- '<form action="" class="layout-title" ng-show="layout.editingTitle" ng-submit="saveTitleEdit(layout)">' +
- '<input type="text" ng-model="layout.title" class="form-control" data-layout="{{layout.id}}">' +
- '</form>' +
- '<span ng-click="removeLayout(layout)" class="glyphicon glyphicon-remove icon-erase"></span>' +
- '<!-- <span class="glyphicon glyphicon-pencil"></span> -->' +
- '<!-- <span class="glyphicon glyphicon-remove"></span> -->' +
- '</a>' +
- '</li>' +
- '<li>' +
- '<a ng-click="createNewLayout()">' +
- '<span class="glyphicon glyphicon-plus"></span>' +
- '</a>' +
- '</li>' +
- '</ul>' +
- '<div ng-repeat="layout in layouts | filter:isActive" dashboard="layout.dashboard" templateUrl="template/dashboard.html"></div>'
- );
- var customElement = $compile('<div dashboard-layouts="dashboardOptions" template-url="myCustomTemplate.html"></div>')($rootScope);
- $rootScope.$digest();
- expect(customElement.find('ul.my-custom-tabs').length).toEqual(1);
-
- }));
-
- it('should set the first dashboard to active if there is not one already active', inject(function($compile) {
- options.defaultLayouts[0].active = options.defaultLayouts[1].active = false;
- element = $compile('<div dashboard-layouts="dashboardOptions"></div>')($rootScope);
- $rootScope.$digest();
- childScope = element.scope();
-
- var layouts = childScope.layouts;
- var active;
- for (var i = 0; i < layouts.length; i++) {
- if (layouts[i].active) {
- active = layouts[i];
- break;
- }
- };
- expect(active).not.toBeUndefined();
- }));
-
- describe('the createNewLayout method', function() {
-
- it('should call the add and save methods of LayoutStorage', function() {
- spyOn(LayoutStorage.prototype, 'add');
- spyOn(LayoutStorage.prototype, 'save');
-
- childScope.createNewLayout();
- expect(LayoutStorage.prototype.add).toHaveBeenCalled();
- expect(LayoutStorage.prototype.save).toHaveBeenCalled();
- });
-
- it('should return the newly created layout object', function() {
- var result = childScope.createNewLayout();
- expect(typeof result).toEqual('object');
- });
-
- it('should set active=true on the newly created layout', function() {
- var result = childScope.createNewLayout();
- expect(result.active).toEqual(true);
- });
-
- it('should set defaultWidgets to dashboardOptions.defaultWidgets if it is present', function() {
- var result = childScope.createNewLayout();
- expect(result.defaultWidgets === options.defaultWidgets).toEqual(true);
- });
-
- it('should set defaultWidgets to an empty array if dashboardOptions.defaultWidgets is not present', inject(function($compile) {
- delete options.defaultWidgets;
- element = $compile('<div dashboard-layouts="dashboardOptions"></div>')($rootScope);
- $rootScope.$digest();
- childScope = element.scope();
- var result = childScope.createNewLayout();
- expect(result.defaultWidgets).toEqual([]);
- }));
-
- });
-
- describe('the removeLayout method', function() {
-
- it('should call the remove and save methods of LayoutStorage', function() {
- spyOn(LayoutStorage.prototype, 'remove');
- spyOn(LayoutStorage.prototype, 'save');
-
- childScope.removeLayout(childScope.layouts[0]);
- expect(LayoutStorage.prototype.remove).toHaveBeenCalled();
- expect(LayoutStorage.prototype.save).toHaveBeenCalled();
- });
-
- it('should call remove with the layout it was passed', function() {
- spyOn(LayoutStorage.prototype, 'remove');
- var layout = childScope.layouts[0];
- childScope.removeLayout(layout);
- expect(LayoutStorage.prototype.remove.calls.argsFor(0)[0]).toEqual(layout);
- });
-
- });
-
- describe('the makeLayoutActive method', function() {
-
- it('should call _makeLayoutActive if there is not a currently active dashboard with unsaved changes', function() {
- spyOn(childScope, '_makeLayoutActive');
- var layout = childScope.layouts[1];
- childScope.makeLayoutActive(layout);
- expect(childScope._makeLayoutActive).toHaveBeenCalled();
- });
-
- describe('when there are unsaved changes on the current dashboard', function() {
-
- var current, options, successCb, errorCb, layout;
-
- beforeEach(function() {
- current = childScope.layouts[0];
- current.dashboard.unsavedChangeCount = 1;
-
- spyOn($mockModal, 'open').and.callFake(function(arg) {
- options = arg;
- return {
- result: {
- then: function(success, error) {
- successCb = success;
- errorCb = error;
- }
- }
- }
- });
-
- layout = childScope.layouts[1];
- childScope.makeLayoutActive(layout);
- });
-
- it('should create a modal', function() {
- expect($mockModal.open).toHaveBeenCalled();
- });
-
- it('should resolve layout to the layout to be made active', function() {
- expect(options.resolve.layout()).toEqual(layout);
- });
-
- it('should provide a success callback that saves the current dashboard and then calls _makeLayoutActive', function() {
- spyOn(current.dashboard, 'saveDashboard');
- spyOn(childScope, '_makeLayoutActive');
- successCb();
- expect(current.dashboard.saveDashboard).toHaveBeenCalled();
- expect(childScope._makeLayoutActive).toHaveBeenCalled();
- expect(childScope._makeLayoutActive.calls.argsFor(0)[0]).toEqual(layout);
- });
-
- it('should provide an error callback that only calls _makeLayoutActive', function() {
- spyOn(current.dashboard, 'saveDashboard');
- spyOn(childScope, '_makeLayoutActive');
- errorCb();
- expect(current.dashboard.saveDashboard).not.toHaveBeenCalled();
- expect(childScope._makeLayoutActive).toHaveBeenCalled();
- expect(childScope._makeLayoutActive.calls.argsFor(0)[0]).toEqual(layout);
- });
-
- });
-
- });
-
- describe('the editTitle method', function() {
-
- it('should set the editingTitle attribute to true on the layout it is passed', function() {
- var layout = { id: '1' };
- childScope.editTitle(layout);
- $rootScope.$digest();
- expect(layout.editingTitle).toEqual(true);
- toFn();
- });
-
- });
-
- describe('the saveTitleEdit method', function() {
-
- it('should set editingTitle to false', function() {
- var layout = { id: '1' };
- childScope.saveTitleEdit(layout);
- expect(layout.editingTitle).toEqual(false);
- });
-
- it('should call layoutStorage.save', function() {
- var layout = { id: '1' };
- spyOn(LayoutStorage.prototype, 'save').and.callThrough();
- childScope.saveTitleEdit(layout);
- expect(LayoutStorage.prototype.save).toHaveBeenCalled();
- });
-
- });
-
- describe('the saveLayouts method', function() {
-
- it('should call LayoutStorage.save', function() {
- spyOn(LayoutStorage.prototype, 'save').and.callThrough();
- $rootScope.dashboardOptions.saveLayouts();
- expect(LayoutStorage.prototype.save).toHaveBeenCalled();
- });
-
- it('should call LayoutStorage.save with true as the first arg', function() {
- spyOn(LayoutStorage.prototype, 'save').and.callThrough();
- $rootScope.dashboardOptions.saveLayouts();
- expect(LayoutStorage.prototype.save.calls.argsFor(0)[0]).toEqual(true);
- });
-
- });
- describe('the proxy methods to active layout', function() {
-
- var mockDash, galSpy;
-
- beforeEach(function() {
- mockDash = {
- active: true,
- dashboard: {
- addWidget: function() {},
- loadWidgets: function() {},
- saveDashboard: function() {}
- }
- };
- spyOn(mockDash.dashboard, 'addWidget');
- spyOn(mockDash.dashboard, 'loadWidgets');
- spyOn(mockDash.dashboard, 'saveDashboard');
- galSpy = spyOn(LayoutStorage.prototype, 'getActiveLayout').and;
- galSpy.returnValue(mockDash);
- });
-
- describe('the addWidget method', function() {
-
- it('should call dashboard.addWidget method of the active layout', function() {
- options.addWidget(1,2,3);
- expect(mockDash.dashboard.addWidget).toHaveBeenCalled();
- var firstCall = mockDash.dashboard.addWidget.calls.first();
- expect(firstCall.object).toEqual(mockDash.dashboard);
- expect(firstCall.args).toEqual([1,2,3]);
- });
-
- it('should do nothing if there is no active layout', function() {
- galSpy.returnValue(null);
- expect(function() {
- options.addWidget();
- }).not.toThrow();
- });
-
- });
-
- describe('the loadWidgets method', function() {
-
- it('should call dashboard.loadWidgets of the current layout', function() {
- options.loadWidgets(1,2,3);
- expect(mockDash.dashboard.loadWidgets).toHaveBeenCalled();
- var firstCall = mockDash.dashboard.loadWidgets.calls.first();
- expect(firstCall.object).toEqual(mockDash.dashboard);
- expect(firstCall.args).toEqual([1,2,3]);
- });
-
- it('should do nothing if there is no active layout', function() {
- galSpy.returnValue(null);
- expect(function() {
- options.loadWidgets();
- }).not.toThrow();
- });
-
- });
-
- describe('the saveDashboard method', function() {
-
- it('should call dashboard.saveDashboard of the current layout', function() {
- options.saveDashboard(1,2,3);
- expect(mockDash.dashboard.saveDashboard).toHaveBeenCalled();
- var firstCall = mockDash.dashboard.saveDashboard.calls.first();
- expect(firstCall.object).toEqual(mockDash.dashboard);
- expect(firstCall.args).toEqual([1,2,3]);
- });
-
- it('should do nothing if there is no active layout', function() {
- galSpy.returnValue(null);
- expect(function() {
- options.saveDashboard();
- }).not.toThrow();
- });
-
- });
-
- });
-
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.js
deleted file mode 100644
index 9ac57b19..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.js
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-angular.module('ui.dashboard')
- .controller('DashboardWidgetCtrl', ['$scope', '$element', '$compile', '$window', '$timeout',
- function($scope, $element, $compile, $window, $timeout) {
-
- $scope.status = {
- isopen: false
- };
-
- // Fills "container" with compiled view
- $scope.makeTemplateString = function() {
-
- var widget = $scope.widget;
-
- // First, build template string
- var templateString = '';
-
- if (widget.templateUrl) {
-
- // Use ng-include for templateUrl
- templateString = '<div ng-include="\'' + widget.templateUrl + '\'"></div>';
-
- } else if (widget.template) {
-
- // Direct string template
- templateString = widget.template;
-
- } else {
-
- // Assume attribute directive
- templateString = '<div ' + widget.directive;
-
- // Check if data attribute was specified
- if (widget.dataAttrName) {
- widget.attrs = widget.attrs || {};
- widget.attrs[widget.dataAttrName] = 'widgetData';
- }
-
- // Check for specified attributes
- if (widget.attrs) {
-
- // First check directive name attr
- if (widget.attrs[widget.directive]) {
- templateString += '="' + widget.attrs[widget.directive] + '"';
- }
-
- // Add attributes
- _.each(widget.attrs, function(value, attr) {
-
- // make sure we aren't reusing directive attr
- if (attr !== widget.directive) {
- templateString += ' ' + attr + '="' + value + '"';
- }
-
- });
- }
- templateString += '></div>';
- }
- return templateString;
- };
-
- $scope.grabResizer = function(e) {
-
- var widget = $scope.widget;
- var widgetElm = $element.find('.widget');
-
- // ignore middle- and right-click
- if (e.which !== 1) {
- return;
- }
-
- e.stopPropagation();
- e.originalEvent.preventDefault();
-
- // get the starting horizontal position
- var initX = e.clientX;
- // console.log('initX', initX);
-
- // Get the current width of the widget and dashboard
- var pixelWidth = widgetElm.width();
- var pixelHeight = widgetElm.height();
- var widgetStyleWidth = widget.containerStyle.width;
- var widthUnits = widget.widthUnits;
- var unitWidth = parseFloat(widgetStyleWidth);
-
- // create marquee element for resize action
- var $marquee = angular.element('<div class="widget-resizer-marquee" style="height: ' + pixelHeight + 'px; width: ' + pixelWidth + 'px; z-index:'+ 200 +';"></div>');
- widgetElm.append($marquee);
- // create an overlaying div to block other widgets in order to stop their iframe events from being triggered
- var $marquee2 = angular.element('<div style=" position: absolute; top: 0; left: 0; height: ' + pixelHeight + 'px; width: ' + (pixelWidth+200) + 'px; z-index:'+ 100 +';"></div>');
- widgetElm.append($marquee2);
-
- // determine the unit/pixel ratio
- var transformMultiplier = unitWidth / pixelWidth;
-
- // updates marquee with preview of new width
- var mousemove = function(e) {
- var curX = e.clientX;
-// console.log(curX);
-// console.log(e);
- var pixelChange = curX - initX;
- var newWidth = pixelWidth + pixelChange;
- $marquee.css('width', newWidth + 'px');
- $marquee2.css('width', (newWidth + 200) + 'px');
-
- };
-
- // sets new widget width on mouseup
- var mouseup = function(e) {
- // remove listener and marquee
- jQuery($window).off('mousemove', mousemove);
- $marquee.remove();
- $marquee2.remove();
-
- // calculate change in units
- var curX = e.clientX;
- var pixelChange = curX - initX;
- var unitChange = Math.round(pixelChange * transformMultiplier * 100) / 100;
-
- // add to initial unit width
- var newWidth = unitWidth * 1 + unitChange;
- widget.setWidth(newWidth, widthUnits);
- $scope.$emit('widgetChanged', widget);
- $scope.$apply();
- $scope.$broadcast('widgetResized', {
- width: newWidth
- });
- };
-
-// jQuery($window).on('mousemove', mousemove).one('mouseup', mouseup);
- jQuery($window).on('mousemove', mousemove).one('mouseup', mouseup);
- };
-
- //TODO refactor
- $scope.grabSouthResizer = function(e) {
- var widgetElm = $element.find('.widget');
-
- // ignore middle- and right-click
- if (e.which !== 1) {
- return;
- }
-
- e.stopPropagation();
- e.originalEvent.preventDefault();
-
- // get the starting horizontal position
- var initY = e.clientY;
- // console.log('initX', initX);
-
- // Get the current width of the widget and dashboard
- var pixelWidth = widgetElm.width();
- var pixelHeight = widgetElm.height();
-
- // create marquee element for resize action
- var $marquee = angular.element('<div class="widget-resizer-marquee" style="height: ' + pixelHeight + 'px; width: ' + pixelWidth + 'px;"></div>');
- widgetElm.append($marquee);
-
- // updates marquee with preview of new height
- var mousemove = function(e) {
- var curY = e.clientY;
- var pixelChange = curY - initY;
- var newHeight = pixelHeight + pixelChange;
- $marquee.css('height', newHeight + 'px');
- };
-
- // sets new widget width on mouseup
- var mouseup = function(e) {
- // remove listener and marquee
- jQuery($window).off('mousemove', mousemove);
- $marquee.remove();
-
- // calculate height change
- var curY = e.clientY;
- var pixelChange = curY - initY;
-
- //var widgetContainer = widgetElm.parent(); // widget container responsible for holding widget width and height
- var widgetContainer = widgetElm.find('.widget-content');
-
- var diff = pixelChange;
- var height = parseInt(widgetContainer.css('height'), 10);
- var newHeight = (height + diff);
-
- //$scope.widget.style.height = newHeight + 'px';
-
- $scope.widget.setHeight(newHeight + 'px');
-
- $scope.$emit('widgetChanged', $scope.widget);
- $scope.$apply(); // make AngularJS to apply style changes
-
- $scope.$broadcast('widgetResized', {
- height: newHeight
- });
- };
-
- jQuery($window).on('mousemove', mousemove).one('mouseup', mouseup);
- };
-
- // replaces widget title with input
- $scope.editTitle = function(widget) {
- var widgetElm = $element.find('.widget');
- widget.editingTitle = true;
- // HACK: get the input to focus after being displayed.
- $timeout(function() {
- widgetElm.find('form.widget-title input:eq(0)').focus()[0].setSelectionRange(0, 9999);
- });
- };
-
- // saves whatever is in the title input as the new title
- $scope.saveTitleEdit = function(widget) {
- widget.editingTitle = false;
- $scope.$emit('widgetChanged', widget);
- };
-
- $scope.compileTemplate = function() {
- var container = $scope.findWidgetContainer($element);
- var templateString = $scope.makeTemplateString();
- var widgetElement = angular.element(templateString);
-
- container.empty();
- container.append(widgetElement);
- $compile(widgetElement)($scope);
- };
-
- $scope.findWidgetContainer = function(element) {
- // widget placeholder is the first (and only) child of .widget-content
- return element.find('.widget-content');
- };
- }
- ]); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.spec.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.spec.js
deleted file mode 100644
index 55604646..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.spec.js
+++ /dev/null
@@ -1,164 +0,0 @@
-'use strict';
-
-describe('Controller: DashboardWidgetCtrl', function() {
-
- var $scope, $element, $timeout, injections;
-
- beforeEach(module('ui.dashboard'));
-
- beforeEach(inject(function($rootScope, $controller){
- $scope = $rootScope.$new();
- $element = angular.element('<div><div class="widget"></div></div>');
- $timeout = function timeout(fn) {
- fn();
- };
- injections = {
- $scope: $scope,
- $element: $element,
- $timeout: $timeout
- };
- spyOn(injections, '$timeout');
- $controller('DashboardWidgetCtrl', injections);
- }));
-
- describe('the makeTemplateString method', function() {
-
- it('should return a string', function() {
- $scope.widget = {
- templateUrl: 'some/template.html'
- };
- expect(typeof $scope.makeTemplateString()).toEqual('string');
- });
-
- it('should use ng-include if templateUrl is specified on widget, despite any other options', function() {
- $scope.widget = {
- templateUrl: 'some/template.html',
- template: 'not this one',
- directive: 'or-this',
- attrs: {
- something: 'awesome',
- other: 'thing'
- }
- };
- expect($scope.makeTemplateString()).toMatch(/ng-include="'some\/template\.html'"/);
- });
-
- it('should return widget.template if specified, regardless of presence of directive or attrs', function() {
- $scope.widget = {
- template: '<div class="testing"></div>',
- directive: 'no-good'
- };
- expect($scope.makeTemplateString()).toEqual($scope.widget.template);
- });
-
- it('should use widget.directive as attribute directive', function() {
- $scope.widget = {
- directive: 'ng-awesome'
- };
- expect($scope.makeTemplateString()).toEqual('<div ng-awesome></div>');
- });
-
- it('should attach attributes if provided', function() {
- $scope.widget = {
- directive: 'ng-awesome',
- attrs: {
- 'ng-awesome': 'test1',
- other: 'attr',
- more: 'stuff'
- }
- };
- expect($scope.makeTemplateString()).toEqual('<div ng-awesome="test1" other="attr" more="stuff"></div>');
- });
-
- it('should place widgetData into dataAttrName attribute if specified', function() {
- $scope.widget = {
- directive: 'ng-awesome',
- attrs: {
- 'ng-awesome': 'test1',
- other: 'attr',
- more: 'stuff'
- },
- dataAttrName: 'data'
- };
- expect($scope.makeTemplateString()).toEqual('<div ng-awesome="test1" other="attr" more="stuff" data="widgetData"></div>');
- });
-
- it('should add attrs to the widget object if it does not exist and dataAttrName is specified', function() {
- $scope.widget = {
- directive: 'ng-awesome',
- dataAttrName: 'data'
- };
- expect($scope.makeTemplateString()).toEqual('<div ng-awesome data="widgetData"></div>');
- });
-
- });
-
- describe('the grabResizer method', function() {
-
- var evt, widget, WidgetModel;
-
- beforeEach(inject(function (_WidgetModel_) {
- WidgetModel = _WidgetModel_;
- }));
-
- beforeEach(function() {
- evt = {
- stopPropagation: jasmine.createSpy('stopPropagation'),
- originalEvent: {
- preventDefault: jasmine.createSpy('preventDefault')
- },
- clientX: 100,
- which: 1
- };
- $scope.widget = widget = new WidgetModel({
- style: {
- width: '30%'
- }
- });
- });
-
- it('should do nothing if event.which is not 1 (left click)', function() {
- evt.which = 2;
- $scope.grabResizer(evt);
- expect(evt.stopPropagation).not.toHaveBeenCalled();
- });
-
- it('should call stopPropagation and preventDefault', function() {
- $scope.grabResizer(evt);
- expect(evt.stopPropagation).toHaveBeenCalled();
- expect(evt.originalEvent.preventDefault).toHaveBeenCalled();
- });
-
- it('should add a .widget-resizer-marquee element to the .widget element', function() {
- $scope.grabResizer(evt);
- expect($element.find('.widget-resizer-marquee').length).toBeGreaterThan(0);
- });
-
- });
-
- describe('the editTitle method', function() {
-
- it('should set editingTitle=true on the widget object', function() {
- var widget = {};
- $scope.editTitle(widget);
- expect(widget.editingTitle).toEqual(true);
- });
-
- it('should call $timeout', function() {
- var widget = {};
- $scope.editTitle(widget);
- expect(injections.$timeout).toHaveBeenCalled();
- });
-
- });
-
- describe('the saveTitleEdit method', function() {
-
- it('should set editingTitle=false', function() {
- var widget = { editingTitle: true };
- $scope.saveTitleEdit(widget);
- expect(widget.editingTitle).toEqual(false);
- });
- });
-
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.js
deleted file mode 100644
index f5a6ebef..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-angular.module('ui.dashboard')
- .directive('widget', ['$injector', function ($injector) {
-
- return {
-
- controller: 'DashboardWidgetCtrl',
-
- link: function (scope) {
-
- var widget = scope.widget;
- var dataModelType = widget.dataModelType;
-
- // set up data source
- if (dataModelType) {
- var DataModelConstructor; // data model constructor function
-
- if (angular.isFunction(dataModelType)) {
- DataModelConstructor = dataModelType;
- } else if (angular.isString(dataModelType)) {
- $injector.invoke([dataModelType, function (DataModelType) {
- DataModelConstructor = DataModelType;
- }]);
- } else {
- throw new Error('widget dataModelType should be function or string');
- }
-
- var ds;
- if (widget.dataModelArgs) {
- ds = new DataModelConstructor(widget.dataModelArgs);
- } else {
- ds = new DataModelConstructor();
- }
- widget.dataModel = ds;
- ds.setup(widget, scope);
- ds.init();
- scope.$on('$destroy', _.bind(ds.destroy,ds));
- }
-
- // Compile the widget template, emit add event
- scope.compileTemplate();
- scope.$emit('widgetAdded', widget);
-
- }
-
- };
- }]);
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.spec.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.spec.js
deleted file mode 100644
index 0997e071..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.spec.js
+++ /dev/null
@@ -1,104 +0,0 @@
-// 'use strict';
-
-describe('Directive: widget', function () {
-
- var element, scope, rootScope, isoScope, compile, provide;
-
- function Type() {
- }
-
- Type.prototype = {
- setup: function () {
- },
- init: function () {
- },
- destroy: function () {
- }
- };
-
- beforeEach(function () {
- spyOn(Type.prototype, 'setup');
- spyOn(Type.prototype, 'init');
- spyOn(Type.prototype, 'destroy');
- // define mock objects here
- });
-
- // load the directive's module
- beforeEach(module('ui.dashboard', function ($provide, $controllerProvider) {
- provide = $provide;
- // Inject dependencies like this:
- $controllerProvider.register('DashboardWidgetCtrl', function ($scope) {
-
- });
-
- }));
-
- beforeEach(inject(function ($compile, $rootScope) {
- // Cache these for reuse
- rootScope = $rootScope;
- compile = $compile;
-
- // Other setup, e.g. helper functions, etc.
-
- // Set up the outer scope
- scope = $rootScope.$new();
- scope.widget = {
- dataModelType: Type
- };
-
- compileTemplate = jasmine.createSpy('compileTemplate');
- scope.compileTemplate = compileTemplate;
- }));
-
- function compileWidget() {
- // Define and compile the element
- element = angular.element('<div widget><div class="widget-content"></div></div>');
- element = compile(element)(scope);
- scope.$digest();
- isoScope = element.isolateScope();
- }
-
- it('should create a new instance of dataModelType if provided in scope.widget', function () {
- compileWidget();
- expect(scope.widget.dataModel instanceof Type).toBe(true);
- });
-
- it('should call setup and init on the new dataModel', function () {
- compileWidget();
- expect(Type.prototype.setup).toHaveBeenCalled();
- expect(Type.prototype.init).toHaveBeenCalled();
- });
-
- it('should call compile template', function () {
- compileWidget();
- expect(scope.compileTemplate).toHaveBeenCalled();
- });
-
- it('should create a new instance of dataModelType from string name', function () {
- // register data model with $injector
- provide.factory('StringNameDataModel', function () {
- return Type;
- });
-
- scope.widget = {
- dataModelType: 'StringNameDataModel'
- };
-
- compileWidget();
-
- expect(scope.widget.dataModel instanceof Type).toBe(true);
- expect(Type.prototype.setup).toHaveBeenCalled();
- expect(Type.prototype.init).toHaveBeenCalled();
- });
-
- it('should validate data model type', function () {
- scope.widget = {
- dataModelType: {}
- };
-
- expect(function () {
- compileWidget()
- }).toThrowError();
- });
-
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/DashboardState.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/DashboardState.js
deleted file mode 100644
index 67948ead..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/DashboardState.js
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-angular.module('ui.dashboard')
- .factory('DashboardState', ['$log', '$q', function ($log, $q) {
- function DashboardState(storage, id, hash, widgetDefinitions, stringify) {
- this.storage = storage;
- this.id = id;
- this.hash = hash;
- this.widgetDefinitions = widgetDefinitions;
- this.stringify = stringify;
- }
-
- DashboardState.prototype = {
- /**
- * Takes array of widget instance objects, serializes,
- * and saves state.
- *
- * @param {Array} widgets scope.widgets from dashboard directive
- * @return {Boolean} true on success, false on failure
- */
- save: function (widgets) {
-
- if (!this.storage) {
- return true;
- }
-
- var serialized = _.map(widgets, function (widget) {
- return widget.serialize();
- });
-
- var item = { widgets: serialized, hash: this.hash };
-
- if (this.stringify) {
- item = JSON.stringify(item);
- }
-
- this.storage.setItem(this.id, item);
- return true;
- },
-
- /**
- * Loads dashboard state from the storage object.
- * Can handle a synchronous response or a promise.
- *
- * @return {Array|Promise} Array of widget definitions or a promise
- */
- load: function () {
-
- if (!this.storage) {
- return null;
- }
-
- var serialized;
-
- // try loading storage item
- serialized = this.storage.getItem( this.id );
-
- if (serialized) {
- // check for promise
- if (angular.isObject(serialized) && angular.isFunction(serialized.then)) {
- return this._handleAsyncLoad(serialized);
- }
- // otherwise handle synchronous load
- return this._handleSyncLoad(serialized);
- } else {
- return null;
- }
- },
-
- _handleSyncLoad: function(serialized) {
-
- var deserialized, result = [];
-
- if (!serialized) {
- return null;
- }
-
- if (this.stringify) {
- try { // to deserialize the string
-
- deserialized = JSON.parse(serialized);
-
- } catch (e) {
-
- // bad JSON, log a warning and return
- $log.warn('Serialized dashboard state was malformed and could not be parsed: ', serialized);
- return null;
-
- }
- }
- else {
- deserialized = serialized;
- }
-
- // check hash against current hash
- if (deserialized.hash !== this.hash) {
-
- $log.info('Serialized dashboard from storage was stale (old hash: ' + deserialized.hash + ', new hash: ' + this.hash + ')');
- this.storage.removeItem(this.id);
- return null;
-
- }
-
- // Cache widgets
- var savedWidgetDefs = deserialized.widgets;
-
- // instantiate widgets from stored data
- for (var i = 0; i < savedWidgetDefs.length; i++) {
-
- // deserialized object
- var savedWidgetDef = savedWidgetDefs[i];
-
- // widget definition to use
- var widgetDefinition = this.widgetDefinitions.getByName(savedWidgetDef.name);
-
- // check for no widget
- if (!widgetDefinition) {
- // no widget definition found, remove and return false
- $log.warn('Widget with name "' + savedWidgetDef.name + '" was not found in given widget definition objects');
- continue;
- }
-
- // check widget-specific storageHash
- if (widgetDefinition.hasOwnProperty('storageHash') && widgetDefinition.storageHash !== savedWidgetDef.storageHash) {
- // widget definition was found, but storageHash was stale, removing storage
- $log.info('Widget Definition Object with name "' + savedWidgetDef.name + '" was found ' +
- 'but the storageHash property on the widget definition is different from that on the ' +
- 'serialized widget loaded from storage. hash from storage: "' + savedWidgetDef.storageHash + '"' +
- ', hash from WDO: "' + widgetDefinition.storageHash + '"');
- continue;
- }
-
- // push instantiated widget to result array
- result.push(savedWidgetDef);
- }
-
- return result;
- },
-
- _handleAsyncLoad: function(promise) {
- var self = this;
- var deferred = $q.defer();
- promise.then(
- // success
- function(res) {
- var result = self._handleSyncLoad(res);
- if (result) {
- deferred.resolve(result);
- } else {
- deferred.reject(result);
- }
- },
- // failure
- function(res) {
- deferred.reject(res);
- }
- );
-
- return deferred.promise;
- }
-
- };
- return DashboardState;
- }]); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.js
deleted file mode 100644
index 3685fd3f..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.js
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-angular.module('ui.dashboard')
- .factory('LayoutStorage', function() {
-
- var noopStorage = {
- setItem: function() {
-
- },
- getItem: function() {
-
- },
- removeItem: function() {
-
- }
- };
-
-
-
- function LayoutStorage(options) {
-
- var defaults = {
- storage: noopStorage,
- storageHash: '',
- stringifyStorage: true
- };
-
- angular.extend(defaults, options);
- angular.extend(options, defaults);
-
- this.id = options.storageId;
- this.storage = options.storage;
- this.storageHash = options.storageHash;
- this.stringifyStorage = options.stringifyStorage;
- this.widgetDefinitions = options.widgetDefinitions;
- this.defaultLayouts = options.defaultLayouts;
- this.lockDefaultLayouts = options.lockDefaultLayouts;
- this.widgetButtons = options.widgetButtons;
- this.explicitSave = options.explicitSave;
- this.defaultWidgets = options.defaultWidgets;
- this.settingsModalOptions = options.settingsModalOptions;
- this.onSettingsClose = options.onSettingsClose;
- this.onSettingsDismiss = options.onSettingsDismiss;
- this.options = options;
- this.options.unsavedChangeCount = 0;
-
- this.layouts = [];
- this.states = {};
- this.load();
- this._ensureActiveLayout();
- }
-
- LayoutStorage.prototype = {
-
- add: function(layouts) {
- if (!angular.isArray(layouts)) {
- layouts = [layouts];
- }
- var self = this;
- angular.forEach(layouts, function(layout) {
- layout.dashboard = layout.dashboard || {};
- layout.dashboard.storage = self;
- layout.dashboard.storageId = layout.id = self._getLayoutId.call(self,layout);
- layout.dashboard.widgetDefinitions = layout.widgetDefinitions || self.widgetDefinitions;
- layout.dashboard.stringifyStorage = false;
- layout.dashboard.defaultWidgets = layout.defaultWidgets || self.defaultWidgets;
- layout.dashboard.widgetButtons = self.widgetButtons;
- layout.dashboard.explicitSave = self.explicitSave;
- layout.dashboard.settingsModalOptions = self.settingsModalOptions;
- layout.dashboard.onSettingsClose = self.onSettingsClose;
- layout.dashboard.onSettingsDismiss = self.onSettingsDismiss;
- self.layouts.push(layout);
- });
- },
-
- remove: function(layout) {
- var index = this.layouts.indexOf(layout);
- if (index >= 0) {
- this.layouts.splice(index, 1);
- delete this.states[layout.id];
-
- // check for active
- if (layout.active && this.layouts.length) {
- var nextActive = index > 0 ? index - 1 : 0;
- this.layouts[nextActive].active = true;
- }
- }
- },
-
- save: function() {
-
- var state = {
- layouts: this._serializeLayouts(),
- states: this.states,
- storageHash: this.storageHash
- };
-
- if (this.stringifyStorage) {
- state = JSON.stringify(state);
- }
-
- this.storage.setItem(this.id, state);
- this.options.unsavedChangeCount = 0;
- },
-
- load: function() {
-
- var serialized = this.storage.getItem(this.id);
-
- this.clear();
-
- if (serialized) {
- // check for promise
- if (angular.isObject(serialized) && angular.isFunction(serialized.then)) {
- this._handleAsyncLoad(serialized);
- } else {
- this._handleSyncLoad(serialized);
- }
- } else {
- this._addDefaultLayouts();
- }
- },
-
- clear: function() {
- this.layouts = [];
- this.states = {};
- },
-
- setItem: function(id, value) {
- this.states[id] = value;
- this.save();
- },
-
- getItem: function(id) {
- return this.states[id];
- },
-
- removeItem: function(id) {
- delete this.states[id];
- this.save();
- },
-
- getActiveLayout: function() {
- var len = this.layouts.length;
- for (var i = 0; i < len; i++) {
- var layout = this.layouts[i];
- if (layout.active) {
- return layout;
- }
- }
- return false;
- },
-
- _addDefaultLayouts: function() {
- var self = this;
- var defaults = this.lockDefaultLayouts ? { locked: true } : {};
- angular.forEach(this.defaultLayouts, function(layout) {
- self.add(angular.extend(_.clone(defaults), layout));
- });
- },
-
- _serializeLayouts: function() {
- var result = [];
- angular.forEach(this.layouts, function(l) {
- result.push({
- title: l.title,
- id: l.id,
- active: l.active,
- locked: l.locked,
- defaultWidgets: l.dashboard.defaultWidgets
- });
- });
- return result;
- },
-
- _handleSyncLoad: function(serialized) {
-
- var deserialized;
-
- if (this.stringifyStorage) {
- try {
-
- deserialized = JSON.parse(serialized);
-
- } catch (e) {
- this._addDefaultLayouts();
- return;
- }
- } else {
-
- deserialized = serialized;
-
- }
-
- if (this.storageHash !== deserialized.storageHash) {
- this._addDefaultLayouts();
- return;
- }
- this.states = deserialized.states;
- this.add(deserialized.layouts);
- },
-
- _handleAsyncLoad: function(promise) {
- var self = this;
- promise.then(
- angular.bind(self, this._handleSyncLoad),
- angular.bind(self, this._addDefaultLayouts)
- );
- },
-
- _ensureActiveLayout: function() {
- for (var i = 0; i < this.layouts.length; i++) {
- var layout = this.layouts[i];
- if (layout.active) {
- return;
- }
- }
- if (this.layouts[0]) {
- this.layouts[0].active = true;
- }
- },
-
- _getLayoutId: function(layout) {
- if (layout.id) {
- return layout.id;
- }
- var max = 0;
- for (var i = 0; i < this.layouts.length; i++) {
- var id = this.layouts[i].id;
- max = Math.max(max, id * 1);
- }
- return max + 1;
- }
-
- };
- return LayoutStorage;
- }); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.spec.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.spec.js
deleted file mode 100644
index 3310cad9..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.spec.js
+++ /dev/null
@@ -1,692 +0,0 @@
-'use strict';
-
-describe('Factory: LayoutStorage', function () {
-
- // mock UI Sortable
- beforeEach(function () {
- angular.module('ui.sortable', []);
- });
-
- // load the service's module
- beforeEach(module('ui.dashboard'));
-
- // instantiate service
- var LayoutStorage;
- beforeEach(inject(function (_LayoutStorage_) {
- LayoutStorage = _LayoutStorage_;
- }));
-
- describe('the constructor', function() {
-
- var storage, options;
-
- beforeEach(function() {
- options = {
- storageId: 'testingStorage',
- storage: {
- setItem: function(key, value) {
-
- },
- getItem: function(key) {
-
- },
- removeItem: function(key) {
-
- }
- },
- storageHash: 'ds5f9d1f',
- stringifyStorage: true,
- widgetDefinitions: [
-
- ],
- defaultLayouts: [
- {title: 'something'},
- {title: 'something'},
- {title: 'something'}
- ],
- widgetButtons: false,
- explicitSave: false,
- settingsModalOptions: {},
- onSettingsClose: function() {
-
- },
- onSettingsDismiss: function() {
-
- }
- };
- storage = new LayoutStorage(options);
- });
-
- it('should provide an empty implementation of storage if it is not provided', function() {
- delete options.storage;
- var stateless = new LayoutStorage(options);
- var noop = stateless.storage;
- angular.forEach(['setItem', 'getItem', 'removeItem'], function(method) {
- expect(typeof noop[method]).toEqual('function');
- expect(noop[method]).not.toThrow();
- noop[method]();
- });
- });
-
- it('should set a subset of the options directly on the LayoutStorage instance itself', function() {
- var properties = {
- id: 'storageId',
- storage: 'storage',
- storageHash: 'storageHash',
- stringifyStorage: 'stringifyStorage',
- widgetDefinitions: 'widgetDefinitions',
- defaultLayouts: 'defaultLayouts',
- widgetButtons: 'widgetButtons',
- explicitSave: 'explicitSave',
- settingsModalOptions: 'settingsModalOptions',
- onSettingsClose: 'onSettingsClose',
- onSettingsDismiss: 'onSettingsDismiss'
- };
-
- angular.forEach(properties, function(val, key) {
- expect( storage[key] ).toEqual( options[val] );
- });
-
- });
-
- it('should set stringify as true by default', function() {
- delete options.stringifyStorage;
- storage = new LayoutStorage(options);
- expect(storage.stringifyStorage).toEqual(true);
- });
-
- it('should allow stringify to be overridden by option', function() {
- options.stringifyStorage = false;
- storage = new LayoutStorage(options);
- expect(storage.stringifyStorage).toEqual(false);
- });
-
- it('should create a layouts array and states object', function() {
- expect(storage.layouts instanceof Array).toEqual(true);
- expect(typeof storage.states).toEqual('object');
- });
-
- it('should call load', function() {
- spyOn(LayoutStorage.prototype, 'load');
- storage = new LayoutStorage(options);
- expect(LayoutStorage.prototype.load).toHaveBeenCalled();
- });
-
- });
-
- describe('the load method', function() {
-
- var options, storage;
-
- beforeEach(function() {
- options = {
- storageId: 'testingStorage',
- storage: {
- setItem: function(key, value) {
-
- },
- getItem: function(key) {
-
- },
- removeItem: function(key) {
-
- }
- },
- storageHash: 'ds5f9d1f',
- stringifyStorage: true,
- widgetDefinitions: [
-
- ],
- defaultLayouts: [
- {title: 'something'},
- {title: 'something'},
- {title: 'something'}
- ],
- widgetButtons: false,
- explicitSave: false
- }
- storage = new LayoutStorage(options);
- });
-
- it('should use the default layouts if no stored info was found', function() {
- expect(storage.layouts.length).toEqual(options.defaultLayouts.length);
- });
-
- it('should clone default layouts rather than use them directly', function() {
- expect(storage.layouts.indexOf(options.defaultLayouts[0])).toEqual(-1);
- });
-
- it('should use the result from getItem for layouts.', function() {
- spyOn(options.storage, 'getItem').and.returnValue(JSON.stringify({
- storageHash: 'ds5f9d1f',
- layouts: [
- { id: 0, title: 'title', defaultWidgets: [], active: true },
- { id: 1, title: 'title2', defaultWidgets: [], active: false },
- { id: 2, title: 'title3', defaultWidgets: [], active: false },
- { id: 3, title: 'custom', defaultWidgets: [], active: false }
- ],
- states: {
- 0: {},
- 1: {},
- 2: {}
- }
- }));
- storage.load();
- expect(storage.layouts.map(function(l) {return l.title})).toEqual(['title', 'title2', 'title3', 'custom']);
- });
-
- it('should NOT use result from getItem for layouts if the storageHash doesnt match', function() {
- spyOn(options.storage, 'getItem').and.returnValue(JSON.stringify({
- storageHash: 'alskdjf02iej',
- layouts: [
- { id: 0, title: 'title', defaultWidgets: [], active: true },
- { id: 1, title: 'title2', defaultWidgets: [], active: false },
- { id: 2, title: 'title3', defaultWidgets: [], active: false },
- { id: 3, title: 'custom', defaultWidgets: [], active: false }
- ],
- states: {
- 0: {},
- 1: {},
- 2: {}
- }
- }));
- storage.load();
- expect(storage.layouts.map(function(l) {return l.title})).toEqual(['something', 'something', 'something']);
- });
-
- it('should be able to handle async loading via promise', inject(function($rootScope,$q) {
- var deferred = $q.defer();
- spyOn(options.storage, 'getItem').and.returnValue(deferred.promise);
- storage.load();
- expect(storage.layouts).toEqual([]);
- deferred.resolve(JSON.stringify({
- storageHash: 'ds5f9d1f',
- layouts: [
- { id: 0, title: 'title', defaultWidgets: [], active: true },
- { id: 1, title: 'title2', defaultWidgets: [], active: false },
- { id: 2, title: 'title3', defaultWidgets: [], active: false },
- { id: 3, title: 'custom', defaultWidgets: [], active: false }
- ],
- states: {
- 0: {},
- 1: {},
- 2: {}
- }
- }));
- $rootScope.$apply();
- expect(storage.layouts.map(function(l) {return l.title})).toEqual(['title', 'title2', 'title3', 'custom']);
- }));
-
- it('should load defaults if the deferred is rejected', inject(function($rootScope,$q) {
- var deferred = $q.defer();
- spyOn(options.storage, 'getItem').and.returnValue(deferred.promise);
- storage.load();
- deferred.reject();
- $rootScope.$apply();
- expect(storage.layouts.map(function(l) {return l.title})).toEqual(['something', 'something', 'something']);
- }));
-
- it('should load defaults if the json is malformed', inject(function($rootScope,$q) {
- var deferred = $q.defer();
- spyOn(options.storage, 'getItem').and.returnValue(deferred.promise);
- storage.load();
- expect(storage.layouts).toEqual([]);
- deferred.resolve(JSON.stringify({
- storageHash: 'ds5f9d1f',
- layouts: [
- { id: 0, title: 'title', defaultWidgets: [], active: true },
- { id: 1, title: 'title2', defaultWidgets: [], active: false },
- { id: 2, title: 'title3', defaultWidgets: [], active: false },
- { id: 3, title: 'custom', defaultWidgets: [], active: false }
- ],
- states: {
- 0: {},
- 1: {},
- 2: {}
- }
- }).replace('{','{{'));
- $rootScope.$apply();
- expect(storage.layouts.map(function(l) {return l.title})).toEqual(['something', 'something', 'something']);
- }));
-
- it('should not try to JSON.parse the result if stringifyStorage is false.', function() {
- options.stringifyStorage = false;
- storage = new LayoutStorage(options);
- spyOn(options.storage, 'getItem').and.returnValue({
- storageHash: 'ds5f9d1f',
- layouts: [
- { id: 0, title: 'title', defaultWidgets: [], active: true },
- { id: 1, title: 'title2', defaultWidgets: [], active: false },
- { id: 2, title: 'title3', defaultWidgets: [], active: false },
- { id: 3, title: 'custom', defaultWidgets: [], active: false }
- ],
- states: {
- 0: {},
- 1: {},
- 2: {}
- }
- });
- storage.load();
- expect(storage.layouts.map(function(l) {return l.title})).toEqual(['title', 'title2', 'title3', 'custom']);
- });
-
- });
-
- describe('the add method', function() {
-
- var storage, options;
-
- beforeEach(function() {
- options = {
- storageId: 'testingStorage',
- storage: {
- setItem: function(key, value) {
-
- },
- getItem: function(key) {
-
- },
- removeItem: function(key) {
-
- }
- },
- storageHash: 'ds5f9d1f',
- stringifyStorage: true,
- widgetDefinitions: [
-
- ],
- defaultLayouts: [],
- widgetButtons: false,
- explicitSave: false
- }
-
- spyOn(LayoutStorage.prototype, 'load' );
-
- storage = new LayoutStorage(options);
-
- });
-
- it('should add to storage.layouts', function() {
- var newLayout = { title: 'my-layout' };
- storage.add(newLayout);
- expect(storage.layouts[0]).toEqual(newLayout);
- });
-
- it('should be able to take an array of new layouts', function() {
- var newLayouts = [ { title: 'my-layout' }, { title: 'my-layout-2' } ];
- storage.add(newLayouts);
- expect(storage.layouts.length).toEqual(2);
- expect(storage.layouts.indexOf(newLayouts[0])).not.toEqual(-1);
- expect(storage.layouts.indexOf(newLayouts[1])).not.toEqual(-1);
- });
-
- it('should look for defaultWidgets on storage options if not supplied on layout definition', function() {
- options.defaultWidgets = [{name: 'a'}, {name: 'b'}, {name: 'c'}];
- storage = new LayoutStorage(options);
-
- var newLayouts = [ { title: 'my-layout', defaultWidgets: [] }, { title: 'my-layout-2' } ];
- storage.add(newLayouts);
- expect(newLayouts[0].dashboard.defaultWidgets === newLayouts[0].defaultWidgets).toEqual(true);
- expect(newLayouts[1].dashboard.defaultWidgets === options.defaultWidgets).toEqual(true);
- });
-
- it('should use defaultWidgets if supplied in the layout definition', function() {
- options.defaultWidgets = [{name: 'a'}, {name: 'b'}, {name: 'c'}];
- storage = new LayoutStorage(options);
-
- var newLayouts = [ { title: 'my-layout', defaultWidgets: [] }, { title: 'my-layout-2' } ];
- storage.add(newLayouts);
- expect(newLayouts[0].dashboard.defaultWidgets).toEqual([]);
- expect(newLayouts[1].dashboard.defaultWidgets).toEqual(options.defaultWidgets);
- });
-
- it('should look for widgetDefinitions on storage options if not supplied on layout definition', function() {
- options.widgetDefinitions = [{name: 'a'}, {name: 'b'}, {name: 'c'}];
- storage = new LayoutStorage(options);
-
- var newLayouts = [ { title: 'my-layout', widgetDefinitions: [] }, { title: 'my-layout-2' } ];
- storage.add(newLayouts);
- expect(newLayouts[0].dashboard.widgetDefinitions === newLayouts[0].widgetDefinitions).toEqual(true);
- expect(newLayouts[1].dashboard.widgetDefinitions === options.widgetDefinitions).toEqual(true);
- });
-
- it('should use widgetDefinitions if supplied in the layout definition', function() {
- options.widgetDefinitions = [{name: 'a'}, {name: 'b'}, {name: 'c'}];
- storage = new LayoutStorage(options);
-
- var newLayouts = [ { title: 'my-layout', widgetDefinitions: [] }, { title: 'my-layout-2' } ];
- storage.add(newLayouts);
- expect(newLayouts[0].dashboard.widgetDefinitions).toEqual([]);
- expect(newLayouts[1].dashboard.widgetDefinitions).toEqual(options.widgetDefinitions);
- });
-
- });
-
- describe('the remove method', function() {
-
- var storage, options;
-
- beforeEach(function() {
- options = {
- storageId: 'testingStorage',
- storageHash: 'ds5f9d1f',
- stringifyStorage: true,
- widgetDefinitions: [
- { name: 'A' },
- { name: 'B' },
- { name: 'C' }
- ],
- defaultLayouts: [
- { title: '1' },
- { title: '2', active: true },
- { title: '3' }
- ],
- widgetButtons: false,
- explicitSave: false
- }
-
- storage = new LayoutStorage(options);
- });
-
- it('should remove the supplied layout', function() {
- var layout = storage.layouts[1];
- storage.remove(layout);
- expect(storage.layouts.indexOf(layout)).toEqual(-1);
- });
-
- it('should delete the state', function() {
- var layout = storage.layouts[1];
- storage.setItem(layout.id, {});
- storage.remove(layout);
- expect(storage.states[layout.id]).toBeUndefined();
- });
-
- it('should do nothing if layout is not in layouts', function() {
- var layout = {};
- var before = storage.layouts.length;
- storage.remove(layout);
- var after = storage.layouts.length;
- expect(before).toEqual(after);
- });
-
- it('should set another dashboard to active if the layout removed was active', function() {
- var layout = storage.layouts[1];
- storage.remove(layout);
- expect(storage.layouts[0].active || storage.layouts[1].active).toEqual(true);
- });
-
- it('should set the layout at index 0 to active if the removed layout was 0', function() {
- storage.layouts[1].active = false;
- storage.layouts[0].active = true;
- storage.remove(storage.layouts[0]);
- expect(storage.layouts[0].active).toEqual(true);
- });
-
- it('should not change the active layout if it was not the one that got removed', function() {
- var active = storage.layouts[1];
- var layout = storage.layouts[0];
- storage.remove(layout);
- expect(active.active).toEqual(true);
- });
-
- });
-
- describe('the save method', function() {
-
- var options, storage;
-
- beforeEach(function() {
- options = {
- storageId: 'testingStorage',
- storage: {
- setItem: function(key, value) {
-
- },
- getItem: function(key) {
-
- },
- removeItem: function(key) {
-
- }
- },
- storageHash: 'ds5f9d1f',
- stringifyStorage: true,
- widgetDefinitions: [
-
- ],
- defaultLayouts: [
- {title: 'something'},
- {title: 'something'},
- {title: 'something'}
- ],
- widgetButtons: false,
- explicitSave: false
- }
- storage = new LayoutStorage(options);
- });
-
- it('should call options.storage.setItem with a stringified object', function() {
- spyOn(options.storage, 'setItem' );
- storage.save();
- expect(options.storage.setItem).toHaveBeenCalled();
- expect(options.storage.setItem.calls.argsFor(0)[0]).toEqual(storage.id);
- expect(typeof options.storage.setItem.calls.argsFor(0)[1]).toEqual('string');
- expect(function(){
- JSON.parse(options.storage.setItem.calls.argsFor(0)[1]);
- }).not.toThrow();
- });
-
- it('should save an object that has layouts, states, and storageHash', function() {
- spyOn(options.storage, 'setItem' );
- storage.save();
- var obj = JSON.parse(options.storage.setItem.calls.argsFor(0)[1]);
- expect(obj.hasOwnProperty('layouts')).toEqual(true);
- expect(obj.layouts instanceof Array).toEqual(true);
- expect(obj.hasOwnProperty('states')).toEqual(true);
- expect(typeof obj.states).toEqual('object');
- expect(obj.hasOwnProperty('storageHash')).toEqual(true);
- expect(typeof obj.storageHash).toEqual('string');
- });
-
- it('should call options.storage.setItem with an object when stringifyStorage is false', function() {
- options.stringifyStorage = false;
- storage = new LayoutStorage(options);
- spyOn(options.storage, 'setItem' );
- storage.save();
- expect(options.storage.setItem).toHaveBeenCalled();
- expect(options.storage.setItem.calls.argsFor(0)[0]).toEqual(storage.id);
- expect(typeof options.storage.setItem.calls.argsFor(0)[1]).toEqual('object');
- });
-
- });
-
- describe('the setItem method', function() {
-
- var options, storage;
-
- beforeEach(function() {
- options = {
- storageId: 'testingStorage',
- storage: {
- setItem: function(key, value) {
-
- },
- getItem: function(key) {
-
- },
- removeItem: function(key) {
-
- }
- },
- storageHash: 'ds5f9d1f',
- stringifyStorage: true,
- widgetDefinitions: [
-
- ],
- defaultLayouts: [
- {title: 'something'},
- {title: 'something'},
- {title: 'something'}
- ],
- widgetButtons: false,
- explicitSave: false
- }
- storage = new LayoutStorage(options);
- });
-
- it('should set storage.states[id] to the second argument', function() {
- var state = { some: 'thing'};
- storage.setItem('id', state);
- expect(storage.states.id).toEqual(state);
- });
-
- it('should call save', function() {
- spyOn(storage, 'save');
- var state = { some: 'thing'};
- storage.setItem('id', state);
- expect(storage.save).toHaveBeenCalled();
- });
-
- });
-
- describe('the getItem method', function() {
-
- var options, storage;
-
- beforeEach(function() {
- options = {
- storageId: 'testingStorage',
- storage: {
- setItem: function(key, value) {
-
- },
- getItem: function(key) {
-
- },
- removeItem: function(key) {
-
- }
- },
- storageHash: 'ds5f9d1f',
- stringifyStorage: true,
- widgetDefinitions: [
-
- ],
- defaultLayouts: [
- {title: 'something'},
- {title: 'something'},
- {title: 'something'}
- ],
- widgetButtons: false,
- explicitSave: false
- }
- storage = new LayoutStorage(options);
- });
-
- it('should return states[id]', function() {
- storage.states['myId'] = {};
- var result = storage.getItem('myId');
- expect(result === storage.states['myId']).toEqual(true);
- });
-
- });
-
- describe('the getActiveLayout method', function() {
- var options, storage;
-
- beforeEach(function() {
- options = {
- storageId: 'testingStorage',
- storage: {
- setItem: function(key, value) {
-
- },
- getItem: function(key) {
-
- },
- removeItem: function(key) {
-
- }
- },
- storageHash: 'ds5f9d1f',
- stringifyStorage: true,
- widgetDefinitions: [
-
- ],
- defaultLayouts: [
- {title: 'i am active', active: true},
- {title: 'i am not'},
- {title: 'me neither'}
- ],
- widgetButtons: false,
- explicitSave: false
- }
- storage = new LayoutStorage(options);
- });
-
- it('should return the layout with active:true', function() {
- var layout = storage.getActiveLayout();
- expect(layout.title).toEqual('i am active');
- });
-
- it('should return false if no layout is active', function() {
- var layout = storage.getActiveLayout();
- layout.active = false;
- var result = storage.getActiveLayout();
- expect(result).toEqual(false);
- });
-
- });
-
- describe('the removeItem', function() {
-
- var options, storage;
-
- beforeEach(function() {
- options = {
- storageId: 'testingStorage',
- storage: {
- setItem: function(key, value) {
-
- },
- getItem: function(key) {
-
- },
- removeItem: function(key) {
-
- }
- },
- storageHash: 'ds5f9d1f',
- stringifyStorage: true,
- widgetDefinitions: [
-
- ],
- defaultLayouts: [
- {title: 'i am active', active: true},
- {title: 'i am not'},
- {title: 'me neither'}
- ],
- widgetButtons: false,
- explicitSave: false
- }
- storage = new LayoutStorage(options);
- });
-
- it('should remove states[id]', function() {
- var state = {};
- storage.setItem('1', state);
- storage.removeItem('1');
- expect(storage.states['1']).toBeUndefined();
- });
-
- it('should call save', function() {
- spyOn(storage, 'save');
- var state = {};
- storage.setItem('1', state);
- storage.removeItem('1');
- expect(storage.save).toHaveBeenCalled();
- });
-
- });
-
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDataModel.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDataModel.js
deleted file mode 100644
index 547f2e96..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDataModel.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-angular.module('ui.dashboard')
- .factory('WidgetDataModel', function () {
- function WidgetDataModel() {
- }
-
- WidgetDataModel.prototype = {
- setup: function (widget, scope) {
- this.dataAttrName = widget.dataAttrName;
- this.dataModelOptions = widget.dataModelOptions;
- this.widgetScope = scope;
- },
-
- updateScope: function (data) {
- this.widgetScope.widgetData = data;
- },
-
- init: function () {
- // to be overridden by subclasses
- },
-
- destroy: function () {
- // to be overridden by subclasses
- }
- };
-
- return WidgetDataModel;
- }); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDefCollection.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDefCollection.js
deleted file mode 100644
index 27765440..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDefCollection.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-angular.module('ui.dashboard')
- .factory('WidgetDefCollection', function () {
-
- function convertToDefinition(d) {
- if (typeof d === 'function') {
- return new d();
- }
- return d;
- }
-
- function WidgetDefCollection(widgetDefs) {
-
- widgetDefs = widgetDefs.map(convertToDefinition);
-
- this.push.apply(this, widgetDefs);
-
- // build (name -> widget definition) map for widget lookup by name
- var map = {};
- _.each(widgetDefs, function (widgetDef) {
- map[widgetDef.name] = widgetDef;
- });
- this.map = map;
- }
-
- WidgetDefCollection.prototype = Object.create(Array.prototype);
-
- WidgetDefCollection.prototype.getByName = function (name) {
- return this.map[name];
- };
-
- WidgetDefCollection.prototype.add = function(def) {
- def = convertToDefinition(def);
- this.push(def);
- this.map[def.name] = def;
- };
-
- return WidgetDefCollection;
- });
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.js
deleted file mode 100644
index c378d3b6..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.js
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-angular.module('ui.dashboard')
- .factory('WidgetModel', function ($log) {
-
- function defaults() {
- return {
- title: 'Widget',
- style: {},
- size: {},
- enableVerticalResize: true,
- containerStyle: { width: '33%' }, // default width
- contentStyle: {}
- };
- };
-
- // constructor for widget model instances
- function WidgetModel(widgetDefinition, overrides) {
-
- // Extend this with the widget definition object with overrides merged in (deep extended).
- angular.extend(this, defaults(), _.merge(angular.copy(widgetDefinition), overrides));
-
- this.updateContainerStyle(this.style);
-
- if (!this.templateUrl && !this.template && !this.directive) {
- this.directive = widgetDefinition.name;
- }
-
- if (this.size && _.has(this.size, 'height')) {
- this.setHeight(this.size.height);
- }
-
- if (this.style && _.has(this.style, 'width')) { //TODO deprecate style attribute
- this.setWidth(this.style.width);
- }
-
- if (this.size && _.has(this.size, 'width')) {
- this.setWidth(this.size.width);
- }
- }
-
- WidgetModel.prototype = {
- // sets the width (and widthUnits)
- setWidth: function (width, units) {
- width = width.toString();
- units = units || width.replace(/^[-\.\d]+/, '') || '%';
-
- this.widthUnits = units;
- width = parseFloat(width);
-
- // check with min width if set, unit refer to width's unit
- if (this.size && _.has(this.size, 'minWidth')) {
- width = _.max([parseFloat(this.size.minWidth), width]);
- }
-
- if (width < 0 || isNaN(width)) {
- $log.warn('malhar-angular-dashboard: setWidth was called when width was ' + width);
- return false;
- }
-
- if (units === '%') {
- width = Math.min(100, width);
- width = Math.max(0, width);
- }
-
- this.containerStyle.width = width + '' + units;
-
- this.updateSize(this.containerStyle);
-
- return true;
- },
-
- setHeight: function (height) {
- this.contentStyle.height = height;
- this.updateSize(this.contentStyle);
- },
-
- setStyle: function (style) {
- this.style = style;
- this.updateContainerStyle(style);
- },
-
- updateSize: function (size) {
- angular.extend(this.size, size);
- },
-
- updateContainerStyle: function (style) {
- angular.extend(this.containerStyle, style);
- },
- serialize: function() {
- return _.pick(this, ['title', 'name', 'report_id', 'hideGrid', 'showChart' ,'rcloud_url','reportData','style', 'size', 'dataModelOptions', 'attrs', 'storageHash']);
- }
- };
-
- return WidgetModel;
- }); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.spec.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.spec.js
deleted file mode 100644
index 151e560a..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.spec.js
+++ /dev/null
@@ -1,156 +0,0 @@
-'use strict';
-
-describe('Factory: WidgetModel', function () {
-
- // load the service's module
- beforeEach(module('ui.dashboard'));
-
- // instantiate service
- var WidgetModel;
- beforeEach(inject(function (_WidgetModel_) {
- WidgetModel = _WidgetModel_;
- }));
-
- it('should be a function', function() {
- expect(typeof WidgetModel).toEqual('function');
- });
-
- describe('the constructor', function() {
- var m, Class, Class2, overrides;
-
- beforeEach(function() {
- Class = {
- name: 'TestWidget',
- attrs: {},
- dataAttrName: 'attr-name',
- dataModelType: function TestType() {},
- dataModelOptions: {},
- style: { width: '10em' },
- settingsModalOptions: {},
- onSettingsClose: function() {},
- onSettingsDismiss: function() {},
- funkyChicken: {
- cool: false,
- fun: true
- }
- };
-
- Class2 = {
- name: 'TestWidget2',
- attrs: {},
- dataAttrName: 'attr-name',
- dataModelType: function TestType() {},
- dataModelOptions: {},
- style: { width: '10em' },
- templateUrl: 'my/url.html',
- template: '<div>some template</div>'
- };
-
- overrides = {
- style: {
- width: '15em'
- }
- };
- spyOn(WidgetModel.prototype, 'setWidth');
- m = new WidgetModel(Class, overrides);
- });
-
- it('should copy class defaults, so that changes on an instance do not change the Class', function() {
- m.style.width = '20em';
- expect(Class.style.width).toEqual('10em');
- });
-
- it('should call setWidth', function() {
- expect(WidgetModel.prototype.setWidth).toHaveBeenCalled();
- });
-
- it('should take overrides as precedent over Class defaults', function() {
- expect(m.style.width).toEqual('15em');
- });
-
- it('should copy arbitrary data from the widget definition', function() {
- expect(m.funkyChicken.cool).toEqual(false);
- expect(m.funkyChicken.fun).toEqual(true);
- expect(m.funkyChicken===Class.funkyChicken).toEqual(false);
- });
-
- it('should set templateUrl if and only if it is present on Class', function() {
- var m2 = new WidgetModel(Class2, overrides);
- expect(m2.templateUrl).toEqual('my/url.html');
- });
-
- it('should set template if and only if it is present on Class', function() {
- delete Class2.templateUrl;
- var m2 = new WidgetModel(Class2, overrides);
- expect(m2.template).toEqual('<div>some template</div>');
- });
-
- it('should look for directive if neither templateUrl nor template is found on Class', function() {
- delete Class2.templateUrl;
- delete Class2.template;
- Class2.directive = 'ng-bind';
- var m2 = new WidgetModel(Class2, overrides);
- expect(m2.directive).toEqual('ng-bind');
- });
-
- it('should set the name as directive if templateUrl, template, and directive are not defined', function() {
- delete Class2.templateUrl;
- delete Class2.template;
- var m2 = new WidgetModel(Class2, overrides);
- expect(m2.directive).toEqual('TestWidget2');
- });
-
- it('should not require overrides', function() {
- var fn = function() {
- var m2 = new WidgetModel(Class);
- }
- expect(fn).not.toThrow();
- });
-
- it('should copy references to settingsModalOptions, onSettingsClose, onSettingsDismiss', function() {
- var m = new WidgetModel(Class);
- expect(m.settingsModalOptions).toEqual(Class.settingsModalOptions);
- expect(m.onSettingsClose).toEqual(Class.onSettingsClose);
- expect(m.onSettingsDismiss).toEqual(Class.onSettingsDismiss);
- });
-
- });
-
- describe('setWidth method', function() {
-
- var context, setWidth;
-
- beforeEach(function() {
- context = new WidgetModel({});
- setWidth = WidgetModel.prototype.setWidth;
- });
-
- it('should take one argument as a string with units', function() {
- setWidth.call(context, '100px');
- expect(context.containerStyle.width).toEqual('100px');
- });
-
- it('should take two args as a number and string as units', function() {
- setWidth.call(context, 100, 'px');
- expect(context.containerStyle.width).toEqual('100px');
- });
-
- it('should return false and not set anything if width is less than 0', function() {
- var result = setWidth.call(context, -100, 'em');
- expect(result).toEqual(false);
- expect(context.containerStyle.width).not.toEqual('-100em');
- });
-
- it('should assume % if no unit is given', function() {
- setWidth.call(context, 50);
- expect(context.containerStyle.width).toEqual('50%');
- });
-
- it('should force greater than 0% and less than or equal 100%', function() {
- setWidth.call(context, '110%');
- expect(context.containerStyle.width).toEqual('100%');
- });
-
- });
-
-}); \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/report-dashboard.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/report-dashboard.html
deleted file mode 100644
index 408ceaa8..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/report-dashboard.html
+++ /dev/null
@@ -1,201 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
- <meta http-equiv="cache-control" content="max-age=0" />
- <meta http-equiv="cache-control" content="no-cache" />
- <meta http-equiv="expires" content="0" />
- <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
- <meta http-equiv="pragma" content="no-cache"/>
-
- <link rel="stylesheet" href="app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.css">
-<!-- <meta charset="utf-8">
- <title>Malhar Angular Dashboard</title>
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width"> -->
- <!-- CSS -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/fn-ebz.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/ebz_header/portal_ebz_header.css">
- <link rel="import" href="app/fusion/scripts/view-models/header.html">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/demo.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/base.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/btn.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/dtpk.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/frms.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/sldr.css" >
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/tbs.css" >
- <link rel="stylesheet" type="text/css" href="static/fusion/css/jquery-ui.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/style.css" >
- <!--
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/style.css" >
- -->
- <!-- Basic AngularJS -->
-
-
- <!-- build:css({.tmp/serve,src}) styles/vendor.css -->
-
-<!-- <link rel="stylesheet" href="app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.css"> -->
- <!-- bower:css -->
- <!-- endbower -->
- <!-- endbuild -->
-
- <!-- build:css({.tmp/serve,src}) styles/app.css -->
- <!-- inject:css -->
- <link rel="stylesheet" href="app/fusion/scripts/view-models/reportdashboard-page/src/app/index.css">
- <!-- endinject -->
- <!-- endbuild -->
-
- <!-- build:js(src) scripts/vendor.js -->
- <!-- bower:js -->
-<!-- <script src="app/fusion/scripts/view-models/reportdashboard-page/bower_components/jquery/dist/jquery.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/bower_components/angular/angular.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/bower_components/angular-bootstrap/ui-bootstrap-tpls.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/bower_components/jquery-ui/jquery-ui.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/bower_components/angular-ui-sortable/sortable.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/bower_components/bootstrap/dist/js/bootstrap.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/bower_components/lodash/lodash.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/bower_components/angular-cookies/angular-cookies.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/bower_components/angular-mocks/angular-mocks.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/bower_components/angular-route/angular-route.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/bower_components/angular-sanitize/angular-sanitize.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/bower_components/showdown/src/showdown.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/bower_components/angular-markdown-directive/markdown.js"></script>
- -->
- <script src="app/fusion/ase/scripts/dependencies/jquery-2.1.4.min.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-cookies.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-mocks.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-route.js"></script>
- <script src="app/fusion/external/angular-1.4.13/angular-sanitize.js"></script>
- <script src="app/fusion/external/angular-ui/ui-bootstrap-tpls-1.2.4.min.js"></script>
- <script src="app/fusion/ase/scripts/menus/jquery-ui.min.js"></script>
- <script src="app/fusion/ase/scripts/menus/bootstrap.min.js"></script>
- <script src="app/fusion/external/angular-ui/ui-sortable/v0.13.4/sortable.min.js"></script>
- <script src="app/fusion/external/lodash/4.5.1/lodash.js"></script>
- <script src="app/fusion/external/showdown/0.3.4/showdown.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/angular-markdown-directive/markdown.js"></script>
-
- <!-- endbower -->
- <!-- endbuild -->
-
-
-<!-- app/fusion/scripts/view-models/reportdashboard-page/ -->
- <script src= "app/fusion/external/ebz/angular_js/app.js"></script>
- <script src= "app/fusion/external/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script>
- <script src= "app/fusion/external/ebz/angular_js/gestures.js"></script>
- <script src="app/fusion/external/angular-ui/ui-bootstrap-tpls-1.1.2.min.js"></script>
-<!-- <script src= "app/fusion/external/ebz/angular_js/angular-cookies.js"></script> -->
-
-<!-- <script src= "app/fusion/external/ebz/angular_js/angular.js"></script>
- <script src= "app/fusion/external/ebz/angular_js/angular-sanitize.js"></script>
- <script src= "app/fusion/external/ebz/angular_js/angular-route.min.js"></script>
- <script src= "app/fusion/external/ebz/angular_js/angular-cookies.js"></script>
- <script src= "app/fusion/external/ebz/angular_js/gestures.js"></script>
- <script src= "app/fusion/external/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script>
- <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/0.10.0/lodash.min.js"></script>
- <script src="app/fusion/external/angular-ui/ui-bootstrap-tpls-1.1.2.min.js"></script> -->
-
- <!-- jQuery -->
-<!-- <script src="static/js/jquery-1.10.2.js"></script>
- <script src="static/js/jquery.mask.min.js" type="text/javascript"></script>
- <script src="static/js/jquery-ui.js" type="text/javascript"></script> -->
-
- <!-- AngularJS Gridster -->
- <script src="static/fusion/js/att_angular_gridster/ui-gridster-tpls.js"></script>
- <script src="static/fusion/js/att_angular_gridster/angular-gridster.js"></script>
- <!-- AngularJS Config -->
- <script src= "app/fusion/external/ebz/angular_js/checklist-model.js"></script>
- <!-- Utility -->
- <script src="app/fusion/scripts/modalService.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/app/report_whitelist.js"></script>
- <!-- Controller js -->
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/ebz_header/header.css">
- <link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/ebz_header/footer.css" >
- <script src="app/fusion/scripts/directives/footer.js"></script>
- <script src="app/fusion/external/ebz/js/footer.js"></script>
- <script src="app/fusion/scripts/directives/header.js"></script>
- <script src="app/fusion/scripts/directives/leftMenu.js"></script>
- <script src="app/fusion/scripts/services/leftMenuService.js"></script>
-
- <!-- Services -->
- <script src="app/fusion/scripts/services/profileService.js"></script>
- <script src="app/fusion/scripts/services/adminService.js"></script>
- <script src="app/fusion/scripts/services/userInfoService.js"></script>
- <!-- Controller -->
-<!-- <script src="app/fusion/scripts/controllers/adminController.js"></script> -->
- <!-- other js lib -->
- <script type="text/javascript" src="app/fusion/scripts/socket/peerBroadcast.js"></script>
- <script src="app/fusion/scripts/moment.min.js"></script>
-
- <!-- build:js({.tmp/serve,.tmp/partials,src}) scripts/app.js -->
- <!-- inject:js -->
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.js"></script>
-<!-- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/templateCacheHtml.js"></script> -->
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModalCtrl.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsCtrl.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsRaptorReportCtrl.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDefCollection.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDataModel.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/components/models/DashboardState.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/app/resize.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/app/layouts.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/app/index.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/app/explicitSave.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/app/directives.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/app/dataModel.js"></script>
- <script src="app/fusion/scripts/view-models/reportdashboard-page/src/app/customWidgetSettings.js"></script>
- <script src="static/fusion/raptor/ebz/dynamicform.js"></script>
- <script src="static/fusion/raptor/ebz/multiselect.js"></script>
- <script src="static/fusion/raptor/ebz/report_search.js"></script>
-<!-- <script src="static/fusion/raptor/ebz/report_run.js"></script> -->
- <script src="static/fusion/raptor/ebz/quick_links.js"></script>
-
- <script src="static/fusion/raptor/uigrid/vfs_fonts.js"></script>
- <script src="static/fusion/raptor/uigrid/ui-grid.js"></script>
-
- <script src="static/fusion/raptor/ebz/report_chart_wizard.js"></script>
-
-
- <script src="app/fusion/scripts/controllers/modelpopupController.js"></script>
-
- <script src="static/fusion/raptor/ebz/date_time_picker.js"></script>
- <script src="static/fusion/raptor/ebz/moment.js"></script>
- <link rel="stylesheet" href="static/fusion/raptor/ebz/date_time_picker.css"/>
- <link rel="stylesheet" href="static/fusion/raptor/uigrid/ui-grid.css" type="text/css">
-
-
- <script>
- app.requires.push('ui.dashboard');
- </script>
- <script>
- angular.module('abs').requires.push('quantum', 'ngRoute', 'ui.grid',
- 'ui.grid.pagination','ui.grid.resizeColumns',
- 'ui.grid.pinning');
- </script>
-
- <!-- endinject -->
-
- <!-- inject:partials -->
- <!-- angular templates will be automatically converted in js and inserted here -->
- <!-- endinject -->
- <!-- endbuild -->
-
-
-
-
-
- </head>
- <body class="appBody" ng-app="abs">
- <div q-header></div>
- <div q-menu class="appLeftMenu"></div>
- <div ng-view id="rightContentUiDashboard" style="position:relative; min-height: 1500px; top:-40px; margin-left:210px;"></div>
- <div q-footer class="appFooter"></div>
- </body>
-
-</html> \ No newline at end of file
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/webrtc/getSourceId.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/webrtc/getSourceId.html
deleted file mode 100644
index 6f660025..00000000
--- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/webrtc/getSourceId.html
+++ /dev/null
@@ -1,78 +0,0 @@
-
-<script>
-
-var DetectRTC = {};
-
-var screenCallback;
-
-DetectRTC.screen = {
- chromeMediaSource: 'screen',
- getSourceId: function (callback) {
- screenCallback = callback;
- window.postMessage('get-sourceId', '*');
- },
- onMessageCallback: function (data) {
- // "cancel" button is clicked
- if (data == 'PermissionDeniedError') {
- DetectRTC.screen.chromeMediaSource = 'PermissionDeniedError';
- if (screenCallback) return screenCallback('PermissionDeniedError');
- else throw new Error('PermissionDeniedError');
- }
-
- // extension notified his presence
- if (data == 'rtcmulticonnection-extension-loaded') {
- DetectRTC.screen.chromeMediaSource = 'desktop';
- }
-
- // extension shared temp sourceId
- if (data.sourceId) {
- DetectRTC.screen.sourceId = data.sourceId;
- if (screenCallback) screenCallback(DetectRTC.screen.sourceId);
- }
- },
- getChromeExtensionStatus: function (callback) {
- // https://chrome.google.com/webstore/detail/screen-capturing-private/icgmlogfeajbfdffajhoebcfbibfhaen
- var extensionid = 'icgmlogfeajbfdffajhoebcfbibfhaen';
-
- var image = document.createElement('img');
- image.src = 'chrome-extension://' + extensionid + '/icon.png';
- image.onload = function () {
- DetectRTC.screen.chromeMediaSource = 'screen';
- window.postMessage('are-you-there', '*');
- setTimeout(function () {
- if (DetectRTC.screen.chromeMediaSource == 'screen') {
- callback('installed-disabled');
- } else callback('installed-enabled');
- }, 2000);
- };
- image.onerror = function () {
- callback('not-installed');
- };
- }
-};
-
-window.addEventListener('message', function (event) {
- if (!event.data || !(typeof event.data == 'string' || event.data.sourceId || event.data.captureSourceId)) return;
- if (event.data.captureSourceId) captureSourceId();
-
- DetectRTC.screen.onMessageCallback(event.data);
-});
-
-function captureSourceId() {
- // check if desktop-capture extension installed.
- DetectRTC.screen.getChromeExtensionStatus(function (status) {
- if (status != 'installed-enabled') {
- window.parent.postMessage({
- chromeExtensionStatus: status
- }, '*');
- return;
- }
-
- DetectRTC.screen.getSourceId(function (sourceId) {
- window.parent.postMessage({
- chromeMediaSourceId: sourceId
- }, '*');
- });
- });
-}
-</script>