From 0262f4690c6d71bde83ce307d0521f148ac4d369 Mon Sep 17 00:00:00 2001 From: "argiro.kokogiannaki" Date: Fri, 13 Jul 2018 10:53:04 +0000 Subject: [PATCH] Removing older portal versions git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-services-portal/trunk@52742 d315682c-612b-4755-9ff5-7f18f6832af3 --- portal-2/.editorconfig | 15 - portal-2/.gitignore | 18 - portal-2/README.md | 147 - portal-2/app.json | 12 - portal-2/empty.js | 7 - portal-2/minifyScript | 36 - portal-2/nodemon.json | 7 - portal-2/npm-shrinkwrap.json.stable | 2131 -- portal-2/package.json | 110 - portal-2/package.json_ | 81 - portal-2/src/__workaround.browser.ts | 21 - portal-2/src/__workaround.node.ts | 44 - portal-2/src/angular2-meta.ts | 216 - portal-2/src/app/app-routing.module.ts | 213 - portal-2/src/app/app.component.ts | 56 - portal-2/src/app/app.module.ts | 38 - portal-2/src/app/claims/claim-utils/claim.ts | 15 - .../claimContextSearchForm.component.ts | 343 - .../claimContextSearchForm.module.ts | 20 - .../claims/claim-utils/claimEntities.class.ts | 100 - .../claimProjectSearchForm.component.ts | 194 - .../claimProjectSearchForm.module.ts | 27 - .../claimResultSearchForm.component.html | 188 - .../claimResultSearchForm.component.ts | 587 - .../claimResultSearchForm.module.ts | 29 - .../displayClaims.component.html | 110 - .../displayClaims/displayClaims.component.ts | 486 - .../displayClaims/displayClaims.module.ts | 26 - .../claimEntityFormatter.component.ts | 39 - .../claimEntityFormatter.module.ts | 24 - .../projectTitleFormatter.component.ts | 25 - .../publicationTitleFormatter.component.ts | 26 - .../claim-utils/service/claims.service.ts | 154 - .../service/claimsService.module.ts | 23 - .../claim-utils/service/contexts.service.ts | 100 - .../service/contextsService.module.ts | 20 - .../service/customOptions.class.ts | 19 - .../service/searchCrossref.service.ts | 84 - .../service/searchCrossrefService.module.ts | 20 - .../service/searchDatacite.service.ts | 60 - .../service/searchDataciteService.module.ts | 20 - .../service/searchOrcid.service.ts | 141 - .../claims/claim-utils/startOver.component.ts | 65 - .../claims/claim-utils/startOver.module.ts | 16 - portal-2/src/app/claims/claim.module.ts | 68 - .../src/app/claims/claim/claim.component.html | 10 - .../src/app/claims/claim/claim.component.ts | 43 - .../claimsAdmin/claimsAdmin-routing.module.ts | 16 - .../claimsAdmin/claimsAdmin.component.ts | 38 - .../claims/claimsAdmin/claimsAdmin.module.ts | 25 - .../claimsByToken-routing.module.ts | 15 - .../claimsByToken/claimsByToken.component.ts | 433 - .../claimsByToken/claimsByToken.module.ts | 49 - .../claimsByToken/claimsByToken.service.ts | 81 - .../directLinking-routing.module.ts | 19 - .../directLinking.component.html | 118 - .../directLinking/directLinking.component.ts | 188 - .../directLinking/directLinking.module.ts | 39 - .../linking/bulkClaim/bulkClaim.component.ts | 256 - .../linking/bulkClaim/bulkClaim.module.ts | 17 - .../claims/linking/bulkLinking.component.ts | 16 - .../app/claims/linking/bulkLinking.module.ts | 20 - .../insertClaim/insertClaim.component.ts | 369 - .../linking/insertClaim/insertClaim.module.ts | 16 - .../claims/linking/linking-routing.module.ts | 19 - .../app/claims/linking/linking.component.ts | 16 - .../linking/linkingGeneric.component.html | 144 - .../linking/linkingGeneric.component.ts | 117 - .../claims/linking/linkingGeneric.module.ts | 37 - .../selected/selectedContexts.component.ts | 90 - .../selected/selectedContexts.module.ts | 16 - .../selected/selectedProjects.component.ts | 88 - .../selected/selectedProjects.module.ts | 18 - .../selected/selectedResults.component.ts | 224 - .../selected/selectedResults.module.ts | 21 - .../myClaims/myClaims-routing.module.ts | 16 - .../app/claims/myClaims/myClaims.component.ts | 36 - .../app/claims/myClaims/myClaims.module.ts | 25 - .../src/app/claims/myClaimsDemo.component.ts | 51 - .../datasets/depositBySubject.component.ts | 34 - .../depositBySubjectResult-routing.module.ts | 19 - .../depositBySubjectResult.component.html | 79 - .../depositBySubjectResult.component.ts | 127 - .../depositBySubjectResults.module.ts | 34 - .../depositDatasets-routing.module.ts | 20 - .../datasets/depositDatasets.component.ts | 21 - .../datasets/depositDatasets.module.ts | 29 - .../depositDatasetsResult.component.ts | 14 - .../depositDatasetsResults-routing.module.ts | 18 - .../datasets/depositDatasetsResults.module.ts | 29 - .../src/app/deposit/deposit.component.html | 56 - portal-2/src/app/deposit/deposit.component.ts | 91 - portal-2/src/app/deposit/deposit.module.ts | 45 - .../app/deposit/depositResult.component.ts | 284 - .../depositPublications-routing.module.ts | 18 - .../depositPublications.component.ts | 21 - .../depositPublications.module.ts | 27 - ...epositPublicationsResult-routing.module.ts | 18 - .../depositPublicationsResult.component.ts | 12 - .../depositPublicationsResults.module.ts | 27 - .../src/app/error/error-routing.module.ts | 16 - portal-2/src/app/error/error.module.ts | 14 - portal-2/src/app/error/errorPage.component.ts | 55 - .../src/app/error/isRouteEnabled.guard.ts | 23 - portal-2/src/app/home/home-routing.module.ts | 16 - portal-2/src/app/home/home.component.html | 65 - portal-2/src/app/home/home.component.ts | 182 - portal-2/src/app/home/home.module.ts | 45 - .../dataProvider-routing.module.ts | 18 - .../dataProvider/dataProvider.component.html | 232 - .../dataProvider/dataProvider.component.ts | 385 - .../dataProvider/dataProvider.module.ts | 51 - .../dataProvider/dataProvider.service.ts | 166 - .../dataProvider/datasetsTab.component.ts | 48 - .../dataProvider/datasourcesTab.component.ts | 50 - .../organizationsTab.component.ts | 54 - .../dataProvider/projectsTab.component.ts | 49 - .../dataProvider/publicationsTab.component.ts | 50 - .../relatedDatasourcesTab.component.ts | 122 - .../dataProvider/statisticsTab.component.ts | 78 - .../dataProvider/tabs.component.ts | 389 - .../dataset/dataset-routing.module.ts | 18 - .../dataset/dataset.component.html | 327 - .../landingPages/dataset/dataset.component.ts | 169 - .../landingPages/dataset/dataset.module.ts | 37 - .../landingPages/dataset/dataset.service.ts | 225 - .../htmlProjectReport-routing.module.ts | 15 - .../htmlProjectReport.component.ts | 223 - .../htmlProjectReport.module.ts | 28 - .../htmlProjectReport.service.ts | 30 - .../landing-utils/addThis.component.ts | 40 - .../landing-utils/citeThis/citation.class.ts | 110 - .../citeThis/citeThis.component.ts | 102 - .../landing-utils/citeThis/citeThis.module.ts | 23 - .../landing-utils/fundedBy.component.ts | 131 - .../landing-utils/landing.module.ts | 28 - .../landing-utils/metrics.component.ts | 224 - .../landing-utils/metrics.module.ts | 26 - .../landing-utils/parsingFunctions.class.ts | 454 - .../landing-utils/publishedIn.component.ts | 68 - .../landing-utils/resultLanding.module.ts | 28 - .../searchingProjectsInTab.component.ts | 122 - .../searchingProjectsInTab.module.ts | 31 - .../landing-utils/showAuthors.component.ts | 65 - .../showIdentifiers.component.ts | 91 - .../landing-utils/showSubjects.component.ts | 54 - .../landing-utils/showTitle.component.ts | 66 - .../landing-utils/tabPaging.component.ts | 24 - .../landing-utils/tabTable.component.ts | 99 - .../organization-routing.module.ts | 18 - .../organization/organization.component.html | 195 - .../organization/organization.component.ts | 489 - .../organization/organization.module.ts | 52 - .../project/project-routing.module.ts | 18 - .../project/project.component.html | 382 - .../landingPages/project/project.component.ts | 360 - .../landingPages/project/project.module.ts | 45 - .../landingPages/project/project.service.ts | 228 - .../project/projectService.module.ts | 20 - .../publication/publication-routing.module.ts | 18 - .../publication/publication.component.html | 547 - .../publication/publication.component.ts | 309 - .../publication/publication.module.ts | 30 - .../publication/publication.service.ts | 362 - .../software/software-routing.module.ts | 15 - .../software/software.component.html | 305 - .../software/software.component.ts | 169 - .../landingPages/software/software.module.ts | 36 - .../landingPages/software/software.service.ts | 225 - .../src/app/login/adminLoginGuard.guard.ts | 45 - portal-2/src/app/login/freeGuard.guard.ts | 36 - portal-2/src/app/login/loginGuard.guard.ts | 33 - portal-2/src/app/login/user-routing.module.ts | 15 - portal-2/src/app/login/user.component.html | 54 - portal-2/src/app/login/user.component.ts | 119 - portal-2/src/app/login/user.module.ts | 22 - portal-2/src/app/login/userMini.component.ts | 140 - .../src/app/login/utils/guardHelper.class.ts | 19 - portal-2/src/app/login/utils/helper.class.ts | 253 - .../src/app/reload/reload-routing.module.ts | 16 - portal-2/src/app/reload/reload.component.ts | 53 - portal-2/src/app/reload/reload.module.ts | 29 - ...ancedSearchDataProviders-routing.module.ts | 18 - .../advancedSearchDataProviders.component.ts | 153 - .../advancedSearchDataProviders.module.ts | 29 - .../advancedSearchDatasets-routing.module.ts | 19 - .../advancedSearchDatasets.component.ts | 161 - .../advanced/advancedSearchDatasets.module.ts | 29 - ...ancedSearchOrganizations-routing.module.ts | 19 - .../advancedSearchOrganizations.component.ts | 161 - .../advancedSearchOrganizations.module.ts | 29 - .../advancedSearchProjects-routing.module.ts | 19 - .../advancedSearchProjects.component.ts | 162 - .../advanced/advancedSearchProjects.module.ts | 29 - ...vancedSearchPublications-routing.module.ts | 19 - .../advancedSearchPublications.component.ts | 160 - .../advancedSearchPublications.module.ts | 29 - .../advancedSearchSoftware-routing.module.ts | 16 - .../advancedSearchSoftware.component.ts | 161 - .../advanced/advancedSearchSoftware.module.ts | 29 - .../compatibleDataProviders-routing.module.ts | 19 - .../compatibleDataProviders.component.ts | 186 - .../compatibleDataProviders.module.ts | 32 - ...atibleDataProvidersTable-routing.module.ts | 19 - .../compatibleDataProvidersTable.component.ts | 196 - .../compatibleDataProvidersTable.module.ts | 32 - .../entityRegistries-routing.module.ts | 19 - .../entityRegistries.component.ts | 178 - .../dataProviders/entityRegistries.module.ts | 32 - .../entityRegistriesTable-routing.module.ts | 19 - .../entityRegistriesTable.component.ts | 206 - .../entityRegistriesTable.module.ts | 32 - .../dataProviders/journals-routing.module.ts | 19 - .../dataProviders/journals.component.ts | 181 - .../dataProviders/journals.module.ts | 32 - .../journalsTable-routing.module.ts | 19 - .../dataProviders/journalsTable.component.ts | 191 - .../dataProviders/journalsTable.module.ts | 32 - .../find/mainSearch-routing.module.ts | 16 - .../app/searchPages/find/mainSearch.module.ts | 41 - .../searchPages/find/search.component.html | 241 - .../app/searchPages/find/search.component.ts | 400 - .../advancedSearchForm.component.html | 56 - .../advancedSearchForm.component.ts | 95 - .../searchUtils/advancedSearchForm.module.ts | 26 - .../advancedSearchPage.component.html | 61 - .../advancedSearchPage.component.ts | 254 - .../searchUtils/advancedSearchPage.module.ts | 33 - .../searchUtils/browseEntities.component.ts | 96 - .../searchUtils/browseEntities.module.ts | 31 - .../browseStatistic.component.html | 50 - .../searchUtils/browseStatistic.component.ts | 42 - .../searchUtils/dateFilter.component.ts | 73 - .../searchUtils/dateFilter.module.ts | 20 - .../searchUtils/searchDownload.component.ts | 112 - .../searchUtils/searchDownload.module.ts | 24 - .../searchUtils/searchFilter.component.html | 67 - .../searchUtils/searchFilter.component.ts | 144 - .../searchUtils/searchFilter.module.ts | 24 - .../searchFilterModal.component.ts | 104 - .../searchUtils/searchForm.component.ts | 52 - .../searchUtils/searchForm.module.ts | 23 - .../searchUtils/searchHelperClasses.class.ts | 89 - .../searchUtils/searchPage.component.html | 126 - .../searchUtils/searchPage.component.ts | 515 - .../searchUtils/searchPage.module.ts | 40 - .../searchPageTableView.component.html | 197 - .../searchPageTableView.component.ts | 272 - .../searchUtils/searchPageTableView.module.ts | 53 - .../searchUtils/searchPaging.component.ts | 58 - .../searchUtils/searchPaging.module.ts | 23 - .../searchUtils/searchResult.component.html | 124 - .../searchUtils/searchResult.component.ts | 52 - .../searchUtils/searchResults.module.ts | 29 - .../searchUtils/searchUtils.class.ts | 10 - .../searchUtils/tabResult.component.html | 122 - .../searchUtils/tabResult.component.ts | 31 - .../searchUtils/tabResult.module.ts | 23 - .../searchDataProviders-routing.module.ts | 19 - .../simple/searchDataProviders.module.ts | 33 - .../simple/searchDataproviders.component.ts | 360 - .../simple/searchDatasets-routing.module.ts | 19 - .../simple/searchDatasets.component.ts | 275 - .../simple/searchDatasets.module.ts | 33 - .../searchOrganizations-routing.module.ts | 19 - .../simple/searchOrganizations.component.ts | 175 - .../simple/searchOrganizations.module.ts | 32 - .../simple/searchProjects-routing.module.ts | 19 - .../simple/searchProjects.component.ts | 213 - .../simple/searchProjects.module.ts | 33 - .../searchPublications-routing.module.ts | 19 - .../simple/searchPublications.component.ts | 308 - .../simple/searchPublications.module.ts | 33 - .../simple/searchSoftware-routing.module.ts | 15 - .../simple/searchSoftware.component.ts | 275 - .../simple/searchSoftware.module.ts | 33 - .../services/dataProvidersService.module.ts | 20 - .../app/services/datasetsService.module.ts | 20 - portal-2/src/app/services/metrics.service.ts | 90 - .../src/app/services/organization.service.ts | 192 - .../services/organizationService.module.ts | 20 - .../services/organizationsService.module.ts | 20 - portal-2/src/app/services/project.service.ts | 200 - .../app/services/projectsService.module.ts | 20 - .../services/publicationsService.module.ts | 20 - .../services/refineFieldResults.service.ts | 77 - .../refineFieldResultsService.module.ts | 20 - portal-2/src/app/services/reports.service.ts | 56 - .../src/app/services/reportsService.module.ts | 20 - .../services/searchDataproviders.service.ts | 528 - .../app/services/searchDatasets.service.ts | 364 - .../services/searchOrganizations.service.ts | 207 - .../app/services/searchProjects.service.ts | 282 - .../services/searchPublications.service.ts | 487 - .../app/services/searchSoftware.service.ts | 364 - .../servicesUtils/refineResults.class.ts | 62 - .../app/services/softwareService.module.ts | 20 - portal-2/src/app/shared/api.service.ts | 29 - portal-2/src/app/shared/cache.service.ts | 89 - .../src/app/shared/model/model.service.ts | 55 - portal-2/src/app/shared/shared.module.ts | 52 - .../sharedComponents/bottom.component.html | 79 - .../app/sharedComponents/bottom.component.ts | 10 - .../cookie-law/cookie-law.component.ts | 148 - .../cookie-law/cookie-law.css | 77 - .../cookie-law/cookie-law.html | 23 - .../cookie-law/cookie-law.module.ts | 25 - .../cookie-law/cookie-law.service.ts | 57 - .../app/sharedComponents/cookie-law/icons.ts | 13 - .../feedback/feedback.component.ts | 51 - .../navigationBar.component.html | 202 - .../navigationBar.component.ts | 70 - .../sharedComponents.module.ts | 29 - portal-2/src/app/test/test-routing.module.ts | 14 - portal-2/src/app/test/test.component.ts | 61 - portal-2/src/app/test/test.module.ts | 19 - .../src/app/utils/altmetrics.component.ts | 43 - portal-2/src/app/utils/altmetrics.js | 8 - portal-2/src/app/utils/altmetrics.module.ts | 20 - .../src/app/utils/autoComplete.component.css | 35 - .../configuration/configuration.service.ts | 56 - .../app/utils/entities/dataProviderInfo.ts | 124 - .../src/app/utils/entities/datasetInfo.ts | 44 - .../src/app/utils/entities/entities.module.ts | 24 - portal-2/src/app/utils/entities/metrics.ts | 8 - .../app/utils/entities/organizationInfo.ts | 12 - .../src/app/utils/entities/projectInfo.ts | 23 - .../src/app/utils/entities/publication.ts | 7 - .../src/app/utils/entities/publicationInfo.ts | 58 - .../src/app/utils/entities/searchResult.ts | 30 - .../src/app/utils/entities/softwareInfo.ts | 44 - .../entitiesAutoComplete.component.ts | 280 - .../entitiesAutoComplete.module.ts | 21 - .../entitySearch.service.ts | 238 - .../entitySearchService.module.ts | 18 - .../src/app/utils/errorMessages.component.ts | 51 - .../src/app/utils/errorMessages.module.ts | 19 - portal-2/src/app/utils/exportCSV.class.ts | 131 - .../fetchDataproviders.class.ts | 291 - .../fetchDatasets.class.ts | 253 - .../fetchOrganizations.class.ts | 76 - .../fetchProjects.class.ts | 209 - .../fetchPublications.class.ts | 233 - .../fetchSoftware.class.ts | 253 - .../src/app/utils/helper/helper.component.ts | 47 - .../src/app/utils/helper/helper.module.ts | 25 - .../src/app/utils/helper/helper.service.ts | 32 - .../app/utils/helper/helperService.module.ts | 20 - portal-2/src/app/utils/iframe.component.ts | 21 - portal-2/src/app/utils/iframe.module.ts | 19 - .../utils/metaTags/openaireMetaTags.class.ts | 21 - portal-2/src/app/utils/modal/alert.ts | 111 - .../src/app/utils/modal/alertModal.module.ts | 17 - .../src/app/utils/modal/loading.component.ts | 56 - .../app/utils/modal/loadingModal.module.ts | 19 - portal-2/src/app/utils/modal/modal.module.ts | 13 - .../src/app/utils/modal/open.component.ts | 57 - .../app/utils/modal/selectModal.component.ts | 79 - .../src/app/utils/modal/selectModal.module.ts | 19 - .../my-date-picker.focus.directive.ts | 26 - ...y-date-picker.input.auto.fill.directive.ts | 69 - .../src/app/utils/my-date-picker/index.ts | 7 - .../utils/my-date-picker/interfaces/index.ts | 15 - .../interfaces/my-calendar-day.interface.ts | 9 - .../my-calendar-view-changed.interface.ts | 8 - .../interfaces/my-date-model.interface.ts | 8 - .../interfaces/my-date-range.interface.ts | 6 - .../interfaces/my-date.interface.ts | 5 - .../interfaces/my-day-labels.interface.ts | 3 - .../my-input-auto-fill.interface.ts | 5 - .../my-input-field-changed.interface.ts | 5 - .../my-input-focus-blur.interface.ts | 4 - .../interfaces/my-locale.interface.ts | 5 - .../interfaces/my-month-labels.interface.ts | 3 - .../interfaces/my-month.interface.ts | 5 - .../interfaces/my-options.interface.ts | 48 - .../interfaces/my-week.interface.ts | 6 - .../interfaces/my-weekday.interface.ts | 4 - .../my-date-picker.component.css | 461 - .../my-date-picker.component.html | 61 - .../my-date-picker.component.spec.ts | 2214 -- .../my-date-picker.component.ts | 677 - .../my-date-picker/my-date-picker.module.ts | 14 - .../services/my-date-picker.locale.service.ts | 232 - .../services/my-date-picker.util.service.ts | 169 - portal-2/src/app/utils/number-utils.class.ts | 31 - portal-2/src/app/utils/paging.module.ts | 28 - .../app/utils/pagingFormatter.component.ts | 64 - .../utils/pagingFormatterNoLoad.component.ts | 76 - .../app/utils/pipes/claimsDatatable.pipe.ts | 48 - .../pipes/contentProvidersDatatable.pipe.ts | 113 - portal-2/src/app/utils/pipes/safeHTML.pipe.ts | 13 - portal-2/src/app/utils/piwik/piwik.service.ts | 70 - .../app/utils/piwik/piwikService.module.ts | 21 - .../piwik/previousRouteRecorder.guard.ts | 17 - .../utils/properties/openaireProperties.ts | 389 - .../src/app/utils/properties/searchFields.ts | 159 - .../app/utils/properties/searchFields_new.ts | 164 - .../app/utils/properties/searchFields_old.ts | 164 - portal-2/src/app/utils/routerHelper.class.ts | 34 - .../app/utils/showDataProviders.component.ts | 61 - .../ISVocabularies.service.ts | 116 - .../staticAutoComplete.component.ts | 300 - .../staticAutoComplete.module.ts | 22 - portal-2/src/app/utils/string-utils.class.ts | 129 - portal-2/src/assets/Home_24white.svg | 1 - portal-2/src/assets/OA DISCOVER_A.png | Bin 24028 -> 0 bytes portal-2/src/assets/OA DISCOVER_B.png | Bin 39239 -> 0 bytes portal-2/src/assets/closedAccess.png | Bin 3607 -> 0 bytes portal-2/src/assets/common/80x15.png | Bin 410 -> 0 bytes portal-2/src/assets/common/Home-icon.png | Bin 3119 -> 0 bytes .../src/assets/common/Logo_Horizontal.png | Bin 12549 -> 0 bytes .../common/Logo_Horizontal_white_small.png | Bin 4630 -> 0 bytes portal-2/src/assets/common/Symbol.png | Bin 8018 -> 0 bytes portal-2/src/assets/common/custom.css | 1111 - .../src/assets/common/ec_logo_inv_small.png | Bin 4060 -> 0 bytes portal-2/src/assets/common/jquery.js | 5 - portal-2/src/assets/common/theme.css | 9 - portal-2/src/assets/common/uikit-icons-max.js | 4 - portal-2/src/assets/common/uikit.js | 5 - portal-2/src/assets/dataset.png | Bin 4229 -> 0 bytes portal-2/src/assets/datasource.png | Bin 4186 -> 0 bytes portal-2/src/assets/discover-custom.css | 515 - portal-2/src/assets/external-link.svg | 1 - portal-2/src/assets/favicon.ico | Bin 32988 -> 0 bytes portal-2/src/assets/formImage.jpg | Bin 112058 -> 0 bytes portal-2/src/assets/globe_tech.jpg | Bin 270491 -> 0 bytes portal-2/src/assets/home.jpeg | Bin 373503 -> 0 bytes portal-2/src/assets/home2.jpeg | Bin 267070 -> 0 bytes portal-2/src/assets/icon_external.png | Bin 193 -> 0 bytes portal-2/src/assets/jquery/jquery.min.js | 5 - portal-2/src/assets/loading.gif | Bin 18691 -> 0 bytes portal-2/src/assets/lock.svg | 1 - .../src/assets/logo/android-icon-144x144.png | Bin 9912 -> 0 bytes .../src/assets/logo/android-icon-192x192.png | Bin 13470 -> 0 bytes .../src/assets/logo/android-icon-36x36.png | Bin 2597 -> 0 bytes .../src/assets/logo/android-icon-48x48.png | Bin 3202 -> 0 bytes .../src/assets/logo/android-icon-72x72.png | Bin 4587 -> 0 bytes .../src/assets/logo/android-icon-96x96.png | Bin 6040 -> 0 bytes .../src/assets/logo/apple-icon-114x114.png | Bin 7100 -> 0 bytes .../src/assets/logo/apple-icon-120x120.png | Bin 7612 -> 0 bytes .../src/assets/logo/apple-icon-144x144.png | Bin 9912 -> 0 bytes .../src/assets/logo/apple-icon-152x152.png | Bin 10778 -> 0 bytes .../src/assets/logo/apple-icon-180x180.png | Bin 13742 -> 0 bytes portal-2/src/assets/logo/apple-icon-57x57.png | Bin 3762 -> 0 bytes portal-2/src/assets/logo/apple-icon-60x60.png | Bin 3955 -> 0 bytes portal-2/src/assets/logo/apple-icon-72x72.png | Bin 4587 -> 0 bytes portal-2/src/assets/logo/apple-icon-76x76.png | Bin 4817 -> 0 bytes .../assets/logo/apple-icon-precomposed.png | Bin 13959 -> 0 bytes portal-2/src/assets/logo/apple-icon.png | Bin 13959 -> 0 bytes portal-2/src/assets/logo/browserconfig.xml | 2 - portal-2/src/assets/logo/favicon-16x16.png | Bin 1276 -> 0 bytes portal-2/src/assets/logo/favicon-32x32.png | Bin 1952 -> 0 bytes portal-2/src/assets/logo/favicon-96x96.png | Bin 6040 -> 0 bytes portal-2/src/assets/logo/favicon.ico | Bin 1150 -> 0 bytes portal-2/src/assets/logo/manifest.json | 41 - portal-2/src/assets/logo/ms-icon-144x144.png | Bin 9912 -> 0 bytes portal-2/src/assets/logo/ms-icon-150x150.png | Bin 10516 -> 0 bytes portal-2/src/assets/logo/ms-icon-310x310.png | Bin 31751 -> 0 bytes portal-2/src/assets/logo/ms-icon-70x70.png | Bin 4461 -> 0 bytes portal-2/src/assets/newlogo.png | Bin 18584 -> 0 bytes portal-2/src/assets/openAccess.png | Bin 3638 -> 0 bytes portal-2/src/assets/organization.png | Bin 4613 -> 0 bytes portal-2/src/assets/project.png | Bin 3963 -> 0 bytes portal-2/src/assets/projects_search.jpg | Bin 577088 -> 0 bytes portal-2/src/assets/providers_search.jpg | Bin 352337 -> 0 bytes portal-2/src/assets/publication.png | Bin 5412 -> 0 bytes portal-2/src/assets/sc39.png | Bin 3076 -> 0 bytes portal-2/src/assets/search_data.jpg | Bin 365638 -> 0 bytes portal-2/src/assets/search_general.jpg | Bin 494855 -> 0 bytes portal-2/src/assets/search_general_2.jpg | Bin 2430434 -> 0 bytes portal-2/src/assets/search_general_3.jpg | Bin 314407 -> 0 bytes portal-2/src/assets/search_journals.jpg | Bin 405553 -> 0 bytes portal-2/src/assets/search_organizations.jpg | Bin 456265 -> 0 bytes portal-2/src/assets/search_pubs_1.jpg | Bin 514279 -> 0 bytes portal-2/src/assets/search_registries.jpg | Bin 629939 -> 0 bytes portal-2/src/assets/sitemap.xml | 103 - portal-2/src/assets/unlock.svg | 1 - portal-2/src/backend/api.ts | 106 - portal-2/src/backend/cache.ts | 17 - portal-2/src/backend/db.ts | 7 - portal-2/src/browser.module.ts | 94 - portal-2/src/client.aot.ts | 36 - portal-2/src/client.ts | 34 - portal-2/src/index.html | 134 - portal-2/src/node.module.ts | 74 - portal-2/src/server.aot.ts | 111 - portal-2/src/server.routes.ts | 23 - portal-2/src/server.ts | 103 - portal-2/src/typings.d.ts | 73 - portal-2/tsconfig.aot.json | 28 - portal-2/tsconfig.json | 27 - portal-2/webpack.config.ts | 133 - portal-2/webpack.prod.config.ts | 178 - portal-4cli/.angular-cli.json | 106 - portal-4cli/README.md | 54 - portal-4cli/package.json | 57 - portal-4cli/prerender.ts | 45 - portal-4cli/server.ts | 58 - portal-4cli/src/angular2-meta.ts | 220 - portal-4cli/src/app/app.component.ts | 56 - portal-4cli/src/app/app.module.ts | 79 - portal-4cli/src/app/app.server.module.ts | 20 - .../src/app/claims/claim-utils/claim.ts | 15 - .../claimContextSearchForm.component.ts | 367 - .../claimContextSearchForm.module.ts | 20 - .../claims/claim-utils/claimEntities.class.ts | 100 - .../claimProjectSearchForm.component.ts | 192 - .../claimProjectSearchForm.module.ts | 27 - .../claimResultSearchForm.component.html | 222 - .../claimResultSearchForm.component.ts | 643 - .../claimResultSearchForm.module.ts | 29 - .../displayClaims.component.html | 115 - .../displayClaims/displayClaims.component.ts | 495 - .../displayClaims/displayClaims.module.ts | 26 - .../claimEntityFormatter.component.ts | 48 - .../claimEntityFormatter.module.ts | 24 - .../projectTitleFormatter.component.ts | 25 - .../publicationTitleFormatter.component.ts | 26 - .../claim-utils/service/claims.service.ts | 149 - .../service/claimsService.module.ts | 23 - .../claim-utils/service/contexts.service.ts | 85 - .../service/contextsService.module.ts | 20 - .../service/customOptions.class.ts | 19 - .../service/searchCrossref.service.ts | 67 - .../service/searchCrossrefService.module.ts | 20 - .../service/searchDatacite.service.ts | 50 - .../service/searchDataciteService.module.ts | 20 - .../service/searchOrcid.service.ts | 126 - .../claims/claim-utils/startOver.component.ts | 65 - .../claims/claim-utils/startOver.module.ts | 16 - portal-4cli/src/app/claims/claim.module.ts | 68 - .../claimsAdmin/claimsAdmin-routing.module.ts | 16 - .../claimsAdmin/claimsAdmin.component.ts | 38 - .../claims/claimsAdmin/claimsAdmin.module.ts | 25 - .../claimsByToken-routing.module.ts | 15 - .../claimsByToken/claimsByToken.component.ts | 433 - .../claimsByToken/claimsByToken.module.ts | 49 - .../claimsByToken/claimsByToken.service.ts | 77 - .../directLinking-routing.module.ts | 19 - .../directLinking.component.html | 135 - .../directLinking/directLinking.component.ts | 208 - .../directLinking/directLinking.module.ts | 40 - .../linking/bulkClaim/bulkClaim.component.ts | 256 - .../linking/bulkClaim/bulkClaim.module.ts | 17 - .../claims/linking/bulkLinking.component.ts | 16 - .../app/claims/linking/bulkLinking.module.ts | 20 - .../insertClaim/insertClaim.component.ts | 371 - .../linking/insertClaim/insertClaim.module.ts | 16 - .../claims/linking/linking-routing.module.ts | 19 - .../app/claims/linking/linking.component.ts | 16 - .../linking/linkingGeneric.component.html | 118 - .../linking/linkingGeneric.component.ts | 117 - .../claims/linking/linkingGeneric.module.ts | 37 - .../selected/selectedContexts.component.ts | 91 - .../selected/selectedContexts.module.ts | 16 - .../selected/selectedProjects.component.ts | 88 - .../selected/selectedProjects.module.ts | 18 - .../selected/selectedResults.component.ts | 225 - .../selected/selectedResults.module.ts | 21 - .../myClaims/myClaims-routing.module.ts | 16 - .../app/claims/myClaims/myClaims.component.ts | 36 - .../app/claims/myClaims/myClaims.module.ts | 25 - .../src/app/claims/myClaimsDemo.component.ts | 51 - .../datasets/depositBySubject.component.ts | 34 - .../depositBySubjectResult-routing.module.ts | 19 - .../depositBySubjectResult.component.html | 79 - .../depositBySubjectResult.component.ts | 127 - .../depositBySubjectResults.module.ts | 34 - .../depositDatasets-routing.module.ts | 20 - .../datasets/depositDatasets.component.ts | 21 - .../datasets/depositDatasets.module.ts | 29 - .../depositDatasetsResult.component.ts | 14 - .../depositDatasetsResults-routing.module.ts | 18 - .../datasets/depositDatasetsResults.module.ts | 29 - .../src/app/deposit/deposit.component.html | 56 - .../src/app/deposit/deposit.component.ts | 91 - portal-4cli/src/app/deposit/deposit.module.ts | 45 - .../app/deposit/depositResult.component.ts | 283 - .../depositPublications-routing.module.ts | 18 - .../depositPublications.component.ts | 21 - .../depositPublications.module.ts | 27 - ...epositPublicationsResult-routing.module.ts | 18 - .../depositPublicationsResult.component.ts | 12 - .../depositPublicationsResults.module.ts | 27 - .../src/app/error/error-routing.module.ts | 16 - .../src/app/error/errorPage.component.ts | 55 - .../src/app/error/isRouteEnabled.guard.ts | 23 - .../src/app/home/home-routing.module.ts | 16 - portal-4cli/src/app/home/home.component.html | 343 - portal-4cli/src/app/home/home.component.ts | 182 - portal-4cli/src/app/home/home.module.ts | 45 - .../dataProvider-routing.module.ts | 18 - .../dataProvider/dataProvider.component.html | 234 - .../dataProvider/dataProvider.component.ts | 385 - .../dataProvider/dataProvider.module.ts | 51 - .../dataProvider/dataProvider.service.ts | 162 - .../dataProvider/datasetsTab.component.ts | 48 - .../dataProvider/datasourcesTab.component.ts | 50 - .../organizationsTab.component.ts | 54 - .../dataProvider/projectsTab.component.ts | 49 - .../dataProvider/publicationsTab.component.ts | 50 - .../relatedDatasourcesTab.component.ts | 122 - .../dataProvider/statisticsTab.component.ts | 78 - .../dataset/dataset-routing.module.ts | 18 - .../dataset/dataset.component.html | 292 - .../landingPages/dataset/dataset.component.ts | 172 - .../landingPages/dataset/dataset.module.ts | 37 - .../landingPages/dataset/dataset.service.ts | 195 - .../htmlProjectReport-routing.module.ts | 15 - .../htmlProjectReport.component.ts | 246 - .../htmlProjectReport.module.ts | 28 - .../htmlProjectReport.service.ts | 38 - .../landing-utils/addThis.component.ts | 43 - .../landing-utils/availableOn.component.ts | 73 - .../landing-utils/citeThis/citation.class.ts | 31 - .../citeThis/citeThis.component.ts | 127 - .../landing-utils/citeThis/citeThis.module.ts | 23 - .../landing-utils/fundedBy.component.ts | 131 - .../landing-utils/landing.module.ts | 28 - .../landing-utils/metrics.component.ts | 224 - .../landing-utils/metrics.module.ts | 26 - .../landing-utils/parsingFunctions.class.ts | 529 - .../landing-utils/publishedIn.component.ts | 71 - .../landing-utils/resultLanding.module.ts | 31 - .../searchingProjectsInTab.component.ts | 122 - .../searchingProjectsInTab.module.ts | 31 - .../landing-utils/showAuthors.component.ts | 65 - .../showIdentifiers.component.ts | 94 - .../landing-utils/showSubjects.component.ts | 57 - .../landing-utils/showTitle.component.ts | 66 - .../landing-utils/tabPaging.component.ts | 24 - .../landing-utils/tabTable.component.ts | 99 - .../organization-routing.module.ts | 18 - .../organization/organization.component.html | 199 - .../organization/organization.component.ts | 492 - .../organization/organization.module.ts | 52 - .../project/project-routing.module.ts | 18 - .../project/project.component.html | 400 - .../landingPages/project/project.component.ts | 374 - .../landingPages/project/project.module.ts | 45 - .../landingPages/project/project.service.ts | 207 - .../project/projectService.module.ts | 20 - .../publication/publication-routing.module.ts | 18 - .../publication/publication.component.html | 585 - .../publication/publication.component.ts | 312 - .../publication/publication.module.ts | 30 - .../publication/publication.service.ts | 338 - .../software/software-routing.module.ts | 15 - .../software/software.component.html | 270 - .../software/software.component.ts | 172 - .../landingPages/software/software.module.ts | 36 - .../landingPages/software/software.service.ts | 196 - .../src/app/login/adminLoginGuard.guard.ts | 45 - portal-4cli/src/app/login/freeGuard.guard.ts | 36 - portal-4cli/src/app/login/loginGuard.guard.ts | 33 - .../src/app/login/user-routing.module.ts | 15 - portal-4cli/src/app/login/user.component.html | 54 - portal-4cli/src/app/login/user.component.ts | 144 - portal-4cli/src/app/login/user.module.ts | 21 - .../src/app/login/userMini.component.ts | 147 - .../src/app/login/utils/guardHelper.class.ts | 19 - .../src/app/login/utils/helper.class.ts | 276 - .../app/login/utils/logoutOpenaire.service.ts | 19 - .../src/app/reload/reload-routing.module.ts | 16 - .../src/app/reload/reload.component.ts | 55 - portal-4cli/src/app/reload/reload.module.ts | 29 - ...ancedSearchDataProviders-routing.module.ts | 18 - .../advancedSearchDataProviders.component.ts | 158 - .../advancedSearchDataProviders.module.ts | 29 - .../advancedSearchDatasets-routing.module.ts | 19 - .../advancedSearchDatasets.component.ts | 166 - .../advanced/advancedSearchDatasets.module.ts | 29 - ...ancedSearchOrganizations-routing.module.ts | 19 - .../advancedSearchOrganizations.component.ts | 166 - .../advancedSearchOrganizations.module.ts | 29 - .../advancedSearchProjects-routing.module.ts | 19 - .../advancedSearchProjects.component.ts | 167 - .../advanced/advancedSearchProjects.module.ts | 29 - ...vancedSearchPublications-routing.module.ts | 19 - .../advancedSearchPublications.component.ts | 165 - .../advancedSearchPublications.module.ts | 29 - .../advancedSearchSoftware-routing.module.ts | 16 - .../advancedSearchSoftware.component.ts | 166 - .../advanced/advancedSearchSoftware.module.ts | 29 - .../compatibleDataProviders-routing.module.ts | 19 - .../compatibleDataProviders.component.ts | 186 - .../compatibleDataProviders.module.ts | 32 - ...atibleDataProvidersTable-routing.module.ts | 19 - .../compatibleDataProvidersTable.component.ts | 196 - .../compatibleDataProvidersTable.module.ts | 32 - .../entityRegistries-routing.module.ts | 19 - .../entityRegistries.component.ts | 178 - .../dataProviders/entityRegistries.module.ts | 32 - .../entityRegistriesTable-routing.module.ts | 19 - .../entityRegistriesTable.component.ts | 206 - .../entityRegistriesTable.module.ts | 32 - .../dataProviders/journals-routing.module.ts | 19 - .../dataProviders/journals.component.ts | 181 - .../dataProviders/journals.module.ts | 32 - .../journalsTable-routing.module.ts | 19 - .../dataProviders/journalsTable.component.ts | 191 - .../dataProviders/journalsTable.module.ts | 32 - .../find/mainSearch-routing.module.ts | 16 - .../app/searchPages/find/mainSearch.module.ts | 41 - .../searchPages/find/search.component.html | 241 - .../app/searchPages/find/search.component.ts | 400 - .../advancedSearchForm.component.html | 56 - .../advancedSearchForm.component.ts | 95 - .../searchUtils/advancedSearchForm.module.ts | 26 - .../advancedSearchPage.component.html | 66 - .../advancedSearchPage.component.ts | 262 - .../searchUtils/advancedSearchPage.module.ts | 33 - .../searchUtils/browseEntities.component.ts | 96 - .../searchUtils/browseEntities.module.ts | 31 - .../browseStatistic.component.html | 50 - .../searchUtils/browseStatistic.component.ts | 42 - .../searchUtils/dateFilter.component.ts | 73 - .../searchUtils/dateFilter.module.ts | 20 - .../searchUtils/searchDownload.component.ts | 116 - .../searchUtils/searchDownload.module.ts | 24 - .../searchUtils/searchFilter.component.html | 67 - .../searchUtils/searchFilter.component.ts | 144 - .../searchUtils/searchFilter.module.ts | 24 - .../searchFilterModal.component.ts | 104 - .../searchUtils/searchForm.component.ts | 52 - .../searchUtils/searchForm.module.ts | 23 - .../searchUtils/searchHelperClasses.class.ts | 89 - .../searchUtils/searchPage.component.html | 130 - .../searchUtils/searchPage.component.ts | 558 - .../searchUtils/searchPage.module.ts | 40 - .../searchPageTableView.component.html | 197 - .../searchPageTableView.component.ts | 272 - .../searchUtils/searchPageTableView.module.ts | 53 - .../searchUtils/searchPaging.component.ts | 58 - .../searchUtils/searchPaging.module.ts | 23 - .../searchUtils/searchResult.component.html | 139 - .../searchUtils/searchResult.component.ts | 53 - .../searchUtils/searchResults.module.ts | 29 - .../searchUtils/searchUtils.class.ts | 10 - .../searchUtils/tabResult.component.html | 122 - .../searchUtils/tabResult.component.ts | 31 - .../searchUtils/tabResult.module.ts | 23 - .../searchDataProviders-routing.module.ts | 19 - .../simple/searchDataProviders.module.ts | 33 - .../simple/searchDataproviders.component.ts | 361 - .../simple/searchDatasets-routing.module.ts | 19 - .../simple/searchDatasets.component.ts | 276 - .../simple/searchDatasets.module.ts | 33 - .../searchOrganizations-routing.module.ts | 19 - .../simple/searchOrganizations.component.ts | 176 - .../simple/searchOrganizations.module.ts | 32 - .../simple/searchProjects-routing.module.ts | 19 - .../simple/searchProjects.component.ts | 213 - .../simple/searchProjects.module.ts | 33 - .../searchPublications-routing.module.ts | 19 - .../simple/searchPublications.component.ts | 308 - .../simple/searchPublications.module.ts | 33 - .../simple/searchSoftware-routing.module.ts | 15 - .../simple/searchSoftware.component.ts | 276 - .../simple/searchSoftware.module.ts | 33 - .../services/dataProvidersService.module.ts | 20 - .../app/services/datasetsService.module.ts | 20 - .../src/app/services/metrics.service.ts | 82 - .../src/app/services/organization.service.ts | 180 - .../services/organizationService.module.ts | 20 - .../services/organizationsService.module.ts | 20 - .../app/services/projectsService.module.ts | 20 - .../services/publicationsService.module.ts | 20 - .../services/refineFieldResults.service.ts | 66 - .../refineFieldResultsService.module.ts | 20 - .../src/app/services/reports.service.ts | 56 - .../src/app/services/reportsService.module.ts | 20 - .../services/searchDataproviders.service.ts | 453 - .../app/services/searchDatasets.service.ts | 343 - .../services/searchOrganizations.service.ts | 191 - .../app/services/searchProjects.service.ts | 242 - .../services/searchPublications.service.ts | 461 - .../app/services/searchSoftware.service.ts | 343 - .../servicesUtils/refineResults.class.ts | 62 - .../app/services/softwareService.module.ts | 20 - portal-4cli/src/app/shared/shared.module.ts | 45 - .../sharedComponents/bottom.component.html | 79 - .../app/sharedComponents/bottom.component.ts | 10 - .../cookie-law/cookie-law.component.ts | 148 - .../cookie-law/cookie-law.css | 77 - .../cookie-law/cookie-law.html | 23 - .../cookie-law/cookie-law.module.ts | 25 - .../cookie-law/cookie-law.service.ts | 57 - .../app/sharedComponents/cookie-law/icons.ts | 13 - .../feedback/feedback.component.ts | 51 - .../navigationBar.component.html | 205 - .../navigationBar.component.ts | 70 - .../sharedComponents.module.ts | 30 - .../src/app/test/test-routing.module.ts | 14 - portal-4cli/src/app/test/test.component.ts | 61 - portal-4cli/src/app/test/test.module.ts | 19 - .../src/app/utils/altmetrics.component.ts | 43 - portal-4cli/src/app/utils/altmetrics.js | 8 - .../src/app/utils/altmetrics.module.ts | 20 - .../src/app/utils/autoComplete.component.css | 35 - .../configuration/configuration.service.ts | 50 - .../app/utils/entities/dataProviderInfo.ts | 124 - .../src/app/utils/entities/datasetInfo.ts | 44 - .../src/app/utils/entities/entities.module.ts | 24 - portal-4cli/src/app/utils/entities/metrics.ts | 8 - .../app/utils/entities/organizationInfo.ts | 12 - .../src/app/utils/entities/projectInfo.ts | 23 - .../src/app/utils/entities/publication.ts | 7 - .../src/app/utils/entities/publicationInfo.ts | 58 - .../src/app/utils/entities/searchResult.ts | 34 - .../src/app/utils/entities/softwareInfo.ts | 44 - .../entitiesAutoComplete.component.ts | 281 - .../entitiesAutoComplete.module.ts | 21 - .../entitySearch.service.ts | 249 - .../entitySearchService.module.ts | 18 - .../src/app/utils/errorMessages.component.ts | 51 - .../src/app/utils/errorMessages.module.ts | 19 - portal-4cli/src/app/utils/exportCSV.class.ts | 131 - .../fetchDataproviders.class.ts | 291 - .../fetchDatasets.class.ts | 253 - .../fetchOrganizations.class.ts | 76 - .../fetchProjects.class.ts | 209 - .../fetchPublications.class.ts | 233 - .../fetchSoftware.class.ts | 253 - .../src/app/utils/helper/helper.component.ts | 47 - .../src/app/utils/helper/helper.module.ts | 25 - .../src/app/utils/helper/helper.service.ts | 26 - .../app/utils/helper/helperService.module.ts | 20 - portal-4cli/src/app/utils/iframe.component.ts | 21 - portal-4cli/src/app/utils/iframe.module.ts | 19 - .../utils/metaTags/openaireMetaTags.class.ts | 21 - portal-4cli/src/app/utils/modal/alert.ts | 111 - .../src/app/utils/modal/alertModal.module.ts | 17 - .../src/app/utils/modal/loading.component.ts | 56 - .../app/utils/modal/loadingModal.module.ts | 19 - .../src/app/utils/modal/modal.module.ts | 13 - .../src/app/utils/modal/open.component.ts | 57 - .../app/utils/modal/selectModal.component.ts | 79 - .../src/app/utils/modal/selectModal.module.ts | 19 - .../my-date-picker.focus.directive.ts | 26 - ...y-date-picker.input.auto.fill.directive.ts | 69 - .../src/app/utils/my-date-picker/index.ts | 7 - .../utils/my-date-picker/interfaces/index.ts | 15 - .../interfaces/my-calendar-day.interface.ts | 9 - .../my-calendar-view-changed.interface.ts | 8 - .../interfaces/my-date-model.interface.ts | 8 - .../interfaces/my-date-range.interface.ts | 6 - .../interfaces/my-date.interface.ts | 5 - .../interfaces/my-day-labels.interface.ts | 3 - .../my-input-auto-fill.interface.ts | 5 - .../my-input-field-changed.interface.ts | 5 - .../my-input-focus-blur.interface.ts | 4 - .../interfaces/my-locale.interface.ts | 5 - .../interfaces/my-month-labels.interface.ts | 3 - .../interfaces/my-month.interface.ts | 5 - .../interfaces/my-options.interface.ts | 48 - .../interfaces/my-week.interface.ts | 6 - .../interfaces/my-weekday.interface.ts | 4 - .../my-date-picker.component.css | 461 - .../my-date-picker.component.html | 61 - .../my-date-picker.component.spec.ts | 2209 -- .../my-date-picker.component.ts | 677 - .../my-date-picker/my-date-picker.module.ts | 14 - .../services/my-date-picker.locale.service.ts | 232 - .../services/my-date-picker.util.service.ts | 169 - .../src/app/utils/number-utils.class.ts | 31 - portal-4cli/src/app/utils/paging.module.ts | 28 - .../app/utils/pagingFormatter.component.ts | 76 - .../utils/pagingFormatterNoLoad.component.ts | 76 - .../app/utils/pipes/claimsDatatable.pipe.ts | 48 - .../pipes/contentProvidersDatatable.pipe.ts | 113 - .../src/app/utils/pipes/safeHTML.pipe.ts | 13 - .../src/app/utils/piwik/piwik.service.ts | 70 - .../app/utils/piwik/piwikService.module.ts | 21 - .../piwik/previousRouteRecorder.guard.ts | 17 - .../utils/properties/openaireProperties.ts | 438 - .../src/app/utils/properties/searchFields.ts | 159 - .../app/utils/properties/searchFields_new.ts | 164 - .../app/utils/properties/searchFields_old.ts | 164 - .../src/app/utils/routerHelper.class.ts | 34 - .../ISVocabularies.service.ts | 110 - .../staticAutoComplete.component.ts | 300 - .../staticAutoComplete.module.ts | 22 - .../src/app/utils/string-utils.class.ts | 129 - portal-4cli/src/assets/Home_24white.svg | 1 - portal-4cli/src/assets/OA DISCOVER_A.png | Bin 24028 -> 0 bytes portal-4cli/src/assets/OA DISCOVER_B.png | Bin 39239 -> 0 bytes portal-4cli/src/assets/OA EXPLORE_B.png | Bin 83324 -> 0 bytes portal-4cli/src/assets/OA EXPLORE_a.png | Bin 105063 -> 0 bytes portal-4cli/src/assets/citeproc.js | 16840 ---------------- portal-4cli/src/assets/clipboard.min.js | 7 - portal-4cli/src/assets/closedAccess.png | Bin 3607 -> 0 bytes portal-4cli/src/assets/common/80x15.png | Bin 410 -> 0 bytes portal-4cli/src/assets/common/Home-icon.png | Bin 3119 -> 0 bytes .../src/assets/common/Logo_Horizontal.png | Bin 12549 -> 0 bytes .../common/Logo_Horizontal_white_small.png | Bin 4630 -> 0 bytes portal-4cli/src/assets/common/Symbol.png | Bin 8018 -> 0 bytes portal-4cli/src/assets/common/custom.css | 1418 -- portal-4cli/src/assets/common/custom_old.css | 1111 - .../src/assets/common/ec_logo_inv_small.png | Bin 4060 -> 0 bytes portal-4cli/src/assets/common/jquery.js | 5 - portal-4cli/src/assets/common/theme.css | 9 - .../src/assets/common/uikit-icons-max.js | 4 - portal-4cli/src/assets/common/uikit.js | 5 - portal-4cli/src/assets/dataset.png | Bin 4229 -> 0 bytes portal-4cli/src/assets/datasource.png | Bin 4186 -> 0 bytes portal-4cli/src/assets/discover-custom.css | 612 - portal-4cli/src/assets/explore_1.jpg | Bin 456834 -> 0 bytes portal-4cli/src/assets/explrore.jpg | Bin 14165 -> 0 bytes portal-4cli/src/assets/external-link.svg | 1 - portal-4cli/src/assets/favicon-16x16.png | Bin 735 -> 0 bytes portal-4cli/src/assets/favicon-32x32.png | Bin 1568 -> 0 bytes portal-4cli/src/assets/favicon.ico | Bin 5430 -> 0 bytes portal-4cli/src/assets/home.jpg | Bin 281247 -> 0 bytes portal-4cli/src/assets/icon_external.png | Bin 193 -> 0 bytes portal-4cli/src/assets/jquery/jquery.min.js | 5 - portal-4cli/src/assets/link.jpg | Bin 19507 -> 0 bytes portal-4cli/src/assets/loading.gif | Bin 18691 -> 0 bytes portal-4cli/src/assets/lock.svg | 1 - .../src/assets/logo/android-icon-144x144.png | Bin 9912 -> 0 bytes .../src/assets/logo/android-icon-192x192.png | Bin 13470 -> 0 bytes .../src/assets/logo/android-icon-36x36.png | Bin 2597 -> 0 bytes .../src/assets/logo/android-icon-48x48.png | Bin 3202 -> 0 bytes .../src/assets/logo/android-icon-72x72.png | Bin 4587 -> 0 bytes .../src/assets/logo/android-icon-96x96.png | Bin 6040 -> 0 bytes .../src/assets/logo/apple-icon-114x114.png | Bin 7100 -> 0 bytes .../src/assets/logo/apple-icon-120x120.png | Bin 7612 -> 0 bytes .../src/assets/logo/apple-icon-144x144.png | Bin 9912 -> 0 bytes .../src/assets/logo/apple-icon-152x152.png | Bin 10778 -> 0 bytes .../src/assets/logo/apple-icon-180x180.png | Bin 13742 -> 0 bytes .../src/assets/logo/apple-icon-57x57.png | Bin 3762 -> 0 bytes .../src/assets/logo/apple-icon-60x60.png | Bin 3955 -> 0 bytes .../src/assets/logo/apple-icon-72x72.png | Bin 4587 -> 0 bytes .../src/assets/logo/apple-icon-76x76.png | Bin 4817 -> 0 bytes .../assets/logo/apple-icon-precomposed.png | Bin 13959 -> 0 bytes portal-4cli/src/assets/logo/apple-icon.png | Bin 13959 -> 0 bytes portal-4cli/src/assets/logo/browserconfig.xml | 2 - portal-4cli/src/assets/logo/favicon-16x16.png | Bin 735 -> 0 bytes portal-4cli/src/assets/logo/favicon-32x32.png | Bin 1568 -> 0 bytes portal-4cli/src/assets/logo/favicon-96x96.png | Bin 6040 -> 0 bytes portal-4cli/src/assets/logo/favicon.ico | Bin 5430 -> 0 bytes portal-4cli/src/assets/logo/manifest.json | 41 - .../src/assets/logo/ms-icon-144x144.png | Bin 9912 -> 0 bytes .../src/assets/logo/ms-icon-150x150.png | Bin 10516 -> 0 bytes .../src/assets/logo/ms-icon-310x310.png | Bin 31751 -> 0 bytes portal-4cli/src/assets/logo/ms-icon-70x70.png | Bin 4461 -> 0 bytes portal-4cli/src/assets/newlogo.png | Bin 18584 -> 0 bytes portal-4cli/src/assets/open.jpg | Bin 68957 -> 0 bytes portal-4cli/src/assets/openAccess.png | Bin 3638 -> 0 bytes portal-4cli/src/assets/organization.png | Bin 4613 -> 0 bytes portal-4cli/src/assets/project.png | Bin 3963 -> 0 bytes portal-4cli/src/assets/projects_search.jpg | Bin 577088 -> 0 bytes portal-4cli/src/assets/providers_search.jpg | Bin 352337 -> 0 bytes portal-4cli/src/assets/publication.png | Bin 5412 -> 0 bytes portal-4cli/src/assets/sc39.png | Bin 3076 -> 0 bytes portal-4cli/src/assets/search_data.jpg | Bin 365638 -> 0 bytes portal-4cli/src/assets/search_general.jpg | Bin 494855 -> 0 bytes portal-4cli/src/assets/search_general_2.jpg | Bin 2430434 -> 0 bytes portal-4cli/src/assets/search_general_3.jpg | Bin 314407 -> 0 bytes portal-4cli/src/assets/search_journals.jpg | Bin 405553 -> 0 bytes .../src/assets/search_organizations.jpg | Bin 456265 -> 0 bytes portal-4cli/src/assets/search_pubs_1.jpg | Bin 514279 -> 0 bytes portal-4cli/src/assets/search_registries.jpg | Bin 629939 -> 0 bytes portal-4cli/src/assets/sitemap.xml | 103 - portal-4cli/src/assets/sky_bw3.png | Bin 339293 -> 0 bytes portal-4cli/src/assets/unlock.svg | 1 - .../src/environments/environment.prod.ts | 3 - portal-4cli/src/environments/environment.ts | 8 - portal-4cli/src/index.html | 152 - portal-4cli/src/main.server.ts | 1 - portal-4cli/src/main.ts | 13 - portal-4cli/src/polyfills.ts | 72 - portal-4cli/src/styles.css | 1 - portal-4cli/src/tsconfig.app.json | 15 - portal-4cli/src/tsconfig.server.json | 21 - portal-4cli/static.paths.ts | 15 - portal-4cli/tsconfig.json | 19 - portal-4cli/webpack.server.config.js | 42 - 979 files changed, 103397 deletions(-) delete mode 100644 portal-2/.editorconfig delete mode 100644 portal-2/.gitignore delete mode 100644 portal-2/README.md delete mode 100644 portal-2/app.json delete mode 100644 portal-2/empty.js delete mode 100755 portal-2/minifyScript delete mode 100644 portal-2/nodemon.json delete mode 100644 portal-2/npm-shrinkwrap.json.stable delete mode 100644 portal-2/package.json delete mode 100644 portal-2/package.json_ delete mode 100644 portal-2/src/__workaround.browser.ts delete mode 100644 portal-2/src/__workaround.node.ts delete mode 100644 portal-2/src/angular2-meta.ts delete mode 100644 portal-2/src/app/app-routing.module.ts delete mode 100644 portal-2/src/app/app.component.ts delete mode 100755 portal-2/src/app/app.module.ts delete mode 100644 portal-2/src/app/claims/claim-utils/claim.ts delete mode 100644 portal-2/src/app/claims/claim-utils/claimContextSearchForm.component.ts delete mode 100644 portal-2/src/app/claims/claim-utils/claimContextSearchForm.module.ts delete mode 100644 portal-2/src/app/claims/claim-utils/claimEntities.class.ts delete mode 100644 portal-2/src/app/claims/claim-utils/claimProjectSearchForm.component.ts delete mode 100644 portal-2/src/app/claims/claim-utils/claimProjectSearchForm.module.ts delete mode 100644 portal-2/src/app/claims/claim-utils/claimResultSearchForm.component.html delete mode 100644 portal-2/src/app/claims/claim-utils/claimResultSearchForm.component.ts delete mode 100644 portal-2/src/app/claims/claim-utils/claimResultSearchForm.module.ts delete mode 100644 portal-2/src/app/claims/claim-utils/displayClaims/displayClaims.component.html delete mode 100644 portal-2/src/app/claims/claim-utils/displayClaims/displayClaims.component.ts delete mode 100644 portal-2/src/app/claims/claim-utils/displayClaims/displayClaims.module.ts delete mode 100644 portal-2/src/app/claims/claim-utils/entityFormatter/claimEntityFormatter.component.ts delete mode 100644 portal-2/src/app/claims/claim-utils/entityFormatter/claimEntityFormatter.module.ts delete mode 100644 portal-2/src/app/claims/claim-utils/entityFormatter/projectTitleFormatter.component.ts delete mode 100644 portal-2/src/app/claims/claim-utils/entityFormatter/publicationTitleFormatter.component.ts delete mode 100644 portal-2/src/app/claims/claim-utils/service/claims.service.ts delete mode 100644 portal-2/src/app/claims/claim-utils/service/claimsService.module.ts delete mode 100644 portal-2/src/app/claims/claim-utils/service/contexts.service.ts delete mode 100644 portal-2/src/app/claims/claim-utils/service/contextsService.module.ts delete mode 100644 portal-2/src/app/claims/claim-utils/service/customOptions.class.ts delete mode 100644 portal-2/src/app/claims/claim-utils/service/searchCrossref.service.ts delete mode 100644 portal-2/src/app/claims/claim-utils/service/searchCrossrefService.module.ts delete mode 100644 portal-2/src/app/claims/claim-utils/service/searchDatacite.service.ts delete mode 100644 portal-2/src/app/claims/claim-utils/service/searchDataciteService.module.ts delete mode 100644 portal-2/src/app/claims/claim-utils/service/searchOrcid.service.ts delete mode 100644 portal-2/src/app/claims/claim-utils/startOver.component.ts delete mode 100644 portal-2/src/app/claims/claim-utils/startOver.module.ts delete mode 100644 portal-2/src/app/claims/claim.module.ts delete mode 100644 portal-2/src/app/claims/claim/claim.component.html delete mode 100644 portal-2/src/app/claims/claim/claim.component.ts delete mode 100644 portal-2/src/app/claims/claimsAdmin/claimsAdmin-routing.module.ts delete mode 100644 portal-2/src/app/claims/claimsAdmin/claimsAdmin.component.ts delete mode 100644 portal-2/src/app/claims/claimsAdmin/claimsAdmin.module.ts delete mode 100644 portal-2/src/app/claims/claimsByToken/claimsByToken-routing.module.ts delete mode 100644 portal-2/src/app/claims/claimsByToken/claimsByToken.component.ts delete mode 100644 portal-2/src/app/claims/claimsByToken/claimsByToken.module.ts delete mode 100644 portal-2/src/app/claims/claimsByToken/claimsByToken.service.ts delete mode 100644 portal-2/src/app/claims/directLinking/directLinking-routing.module.ts delete mode 100644 portal-2/src/app/claims/directLinking/directLinking.component.html delete mode 100644 portal-2/src/app/claims/directLinking/directLinking.component.ts delete mode 100644 portal-2/src/app/claims/directLinking/directLinking.module.ts delete mode 100644 portal-2/src/app/claims/linking/bulkClaim/bulkClaim.component.ts delete mode 100644 portal-2/src/app/claims/linking/bulkClaim/bulkClaim.module.ts delete mode 100644 portal-2/src/app/claims/linking/bulkLinking.component.ts delete mode 100644 portal-2/src/app/claims/linking/bulkLinking.module.ts delete mode 100644 portal-2/src/app/claims/linking/insertClaim/insertClaim.component.ts delete mode 100644 portal-2/src/app/claims/linking/insertClaim/insertClaim.module.ts delete mode 100644 portal-2/src/app/claims/linking/linking-routing.module.ts delete mode 100644 portal-2/src/app/claims/linking/linking.component.ts delete mode 100644 portal-2/src/app/claims/linking/linkingGeneric.component.html delete mode 100644 portal-2/src/app/claims/linking/linkingGeneric.component.ts delete mode 100644 portal-2/src/app/claims/linking/linkingGeneric.module.ts delete mode 100644 portal-2/src/app/claims/linking/selected/selectedContexts.component.ts delete mode 100644 portal-2/src/app/claims/linking/selected/selectedContexts.module.ts delete mode 100644 portal-2/src/app/claims/linking/selected/selectedProjects.component.ts delete mode 100644 portal-2/src/app/claims/linking/selected/selectedProjects.module.ts delete mode 100644 portal-2/src/app/claims/linking/selected/selectedResults.component.ts delete mode 100644 portal-2/src/app/claims/linking/selected/selectedResults.module.ts delete mode 100644 portal-2/src/app/claims/myClaims/myClaims-routing.module.ts delete mode 100644 portal-2/src/app/claims/myClaims/myClaims.component.ts delete mode 100644 portal-2/src/app/claims/myClaims/myClaims.module.ts delete mode 100644 portal-2/src/app/claims/myClaimsDemo.component.ts delete mode 100644 portal-2/src/app/deposit/datasets/depositBySubject.component.ts delete mode 100644 portal-2/src/app/deposit/datasets/depositBySubjectResult-routing.module.ts delete mode 100644 portal-2/src/app/deposit/datasets/depositBySubjectResult.component.html delete mode 100644 portal-2/src/app/deposit/datasets/depositBySubjectResult.component.ts delete mode 100644 portal-2/src/app/deposit/datasets/depositBySubjectResults.module.ts delete mode 100644 portal-2/src/app/deposit/datasets/depositDatasets-routing.module.ts delete mode 100644 portal-2/src/app/deposit/datasets/depositDatasets.component.ts delete mode 100644 portal-2/src/app/deposit/datasets/depositDatasets.module.ts delete mode 100644 portal-2/src/app/deposit/datasets/depositDatasetsResult.component.ts delete mode 100644 portal-2/src/app/deposit/datasets/depositDatasetsResults-routing.module.ts delete mode 100644 portal-2/src/app/deposit/datasets/depositDatasetsResults.module.ts delete mode 100644 portal-2/src/app/deposit/deposit.component.html delete mode 100644 portal-2/src/app/deposit/deposit.component.ts delete mode 100644 portal-2/src/app/deposit/deposit.module.ts delete mode 100644 portal-2/src/app/deposit/depositResult.component.ts delete mode 100644 portal-2/src/app/deposit/publications/depositPublications-routing.module.ts delete mode 100644 portal-2/src/app/deposit/publications/depositPublications.component.ts delete mode 100644 portal-2/src/app/deposit/publications/depositPublications.module.ts delete mode 100644 portal-2/src/app/deposit/publications/depositPublicationsResult-routing.module.ts delete mode 100644 portal-2/src/app/deposit/publications/depositPublicationsResult.component.ts delete mode 100644 portal-2/src/app/deposit/publications/depositPublicationsResults.module.ts delete mode 100644 portal-2/src/app/error/error-routing.module.ts delete mode 100644 portal-2/src/app/error/error.module.ts delete mode 100644 portal-2/src/app/error/errorPage.component.ts delete mode 100644 portal-2/src/app/error/isRouteEnabled.guard.ts delete mode 100644 portal-2/src/app/home/home-routing.module.ts delete mode 100644 portal-2/src/app/home/home.component.html delete mode 100644 portal-2/src/app/home/home.component.ts delete mode 100644 portal-2/src/app/home/home.module.ts delete mode 100644 portal-2/src/app/landingPages/dataProvider/dataProvider-routing.module.ts delete mode 100644 portal-2/src/app/landingPages/dataProvider/dataProvider.component.html delete mode 100644 portal-2/src/app/landingPages/dataProvider/dataProvider.component.ts delete mode 100644 portal-2/src/app/landingPages/dataProvider/dataProvider.module.ts delete mode 100644 portal-2/src/app/landingPages/dataProvider/dataProvider.service.ts delete mode 100644 portal-2/src/app/landingPages/dataProvider/datasetsTab.component.ts delete mode 100644 portal-2/src/app/landingPages/dataProvider/datasourcesTab.component.ts delete mode 100644 portal-2/src/app/landingPages/dataProvider/organizationsTab.component.ts delete mode 100644 portal-2/src/app/landingPages/dataProvider/projectsTab.component.ts delete mode 100644 portal-2/src/app/landingPages/dataProvider/publicationsTab.component.ts delete mode 100644 portal-2/src/app/landingPages/dataProvider/relatedDatasourcesTab.component.ts delete mode 100644 portal-2/src/app/landingPages/dataProvider/statisticsTab.component.ts delete mode 100644 portal-2/src/app/landingPages/dataProvider/tabs.component.ts delete mode 100644 portal-2/src/app/landingPages/dataset/dataset-routing.module.ts delete mode 100644 portal-2/src/app/landingPages/dataset/dataset.component.html delete mode 100644 portal-2/src/app/landingPages/dataset/dataset.component.ts delete mode 100644 portal-2/src/app/landingPages/dataset/dataset.module.ts delete mode 100644 portal-2/src/app/landingPages/dataset/dataset.service.ts delete mode 100644 portal-2/src/app/landingPages/htmlProjectReport/htmlProjectReport-routing.module.ts delete mode 100644 portal-2/src/app/landingPages/htmlProjectReport/htmlProjectReport.component.ts delete mode 100644 portal-2/src/app/landingPages/htmlProjectReport/htmlProjectReport.module.ts delete mode 100644 portal-2/src/app/landingPages/htmlProjectReport/htmlProjectReport.service.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/addThis.component.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/citeThis/citation.class.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/citeThis/citeThis.component.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/citeThis/citeThis.module.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/fundedBy.component.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/landing.module.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/metrics.component.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/metrics.module.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/parsingFunctions.class.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/publishedIn.component.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/resultLanding.module.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/searchingProjectsInTab.component.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/searchingProjectsInTab.module.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/showAuthors.component.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/showIdentifiers.component.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/showSubjects.component.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/showTitle.component.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/tabPaging.component.ts delete mode 100644 portal-2/src/app/landingPages/landing-utils/tabTable.component.ts delete mode 100644 portal-2/src/app/landingPages/organization/organization-routing.module.ts delete mode 100644 portal-2/src/app/landingPages/organization/organization.component.html delete mode 100644 portal-2/src/app/landingPages/organization/organization.component.ts delete mode 100644 portal-2/src/app/landingPages/organization/organization.module.ts delete mode 100644 portal-2/src/app/landingPages/project/project-routing.module.ts delete mode 100644 portal-2/src/app/landingPages/project/project.component.html delete mode 100644 portal-2/src/app/landingPages/project/project.component.ts delete mode 100644 portal-2/src/app/landingPages/project/project.module.ts delete mode 100644 portal-2/src/app/landingPages/project/project.service.ts delete mode 100644 portal-2/src/app/landingPages/project/projectService.module.ts delete mode 100644 portal-2/src/app/landingPages/publication/publication-routing.module.ts delete mode 100644 portal-2/src/app/landingPages/publication/publication.component.html delete mode 100644 portal-2/src/app/landingPages/publication/publication.component.ts delete mode 100644 portal-2/src/app/landingPages/publication/publication.module.ts delete mode 100644 portal-2/src/app/landingPages/publication/publication.service.ts delete mode 100644 portal-2/src/app/landingPages/software/software-routing.module.ts delete mode 100644 portal-2/src/app/landingPages/software/software.component.html delete mode 100644 portal-2/src/app/landingPages/software/software.component.ts delete mode 100644 portal-2/src/app/landingPages/software/software.module.ts delete mode 100644 portal-2/src/app/landingPages/software/software.service.ts delete mode 100644 portal-2/src/app/login/adminLoginGuard.guard.ts delete mode 100644 portal-2/src/app/login/freeGuard.guard.ts delete mode 100644 portal-2/src/app/login/loginGuard.guard.ts delete mode 100644 portal-2/src/app/login/user-routing.module.ts delete mode 100644 portal-2/src/app/login/user.component.html delete mode 100644 portal-2/src/app/login/user.component.ts delete mode 100644 portal-2/src/app/login/user.module.ts delete mode 100644 portal-2/src/app/login/userMini.component.ts delete mode 100644 portal-2/src/app/login/utils/guardHelper.class.ts delete mode 100644 portal-2/src/app/login/utils/helper.class.ts delete mode 100644 portal-2/src/app/reload/reload-routing.module.ts delete mode 100644 portal-2/src/app/reload/reload.component.ts delete mode 100644 portal-2/src/app/reload/reload.module.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchDataProviders-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchDataProviders.component.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchDataProviders.module.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchDatasets-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchDatasets.component.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchDatasets.module.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchOrganizations-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchOrganizations.component.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchOrganizations.module.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchProjects-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchProjects.component.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchProjects.module.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchPublications-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchPublications.component.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchPublications.module.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchSoftware-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchSoftware.component.ts delete mode 100644 portal-2/src/app/searchPages/advanced/advancedSearchSoftware.module.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/compatibleDataProviders-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/compatibleDataProviders.component.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/compatibleDataProviders.module.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/compatibleDataProvidersTable-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/compatibleDataProvidersTable.component.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/compatibleDataProvidersTable.module.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/entityRegistries-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/entityRegistries.component.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/entityRegistries.module.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/entityRegistriesTable-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/entityRegistriesTable.component.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/entityRegistriesTable.module.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/journals-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/journals.component.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/journals.module.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/journalsTable-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/journalsTable.component.ts delete mode 100644 portal-2/src/app/searchPages/dataProviders/journalsTable.module.ts delete mode 100644 portal-2/src/app/searchPages/find/mainSearch-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/find/mainSearch.module.ts delete mode 100644 portal-2/src/app/searchPages/find/search.component.html delete mode 100644 portal-2/src/app/searchPages/find/search.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/advancedSearchForm.component.html delete mode 100644 portal-2/src/app/searchPages/searchUtils/advancedSearchForm.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/advancedSearchForm.module.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/advancedSearchPage.component.html delete mode 100644 portal-2/src/app/searchPages/searchUtils/advancedSearchPage.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/advancedSearchPage.module.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/browseEntities.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/browseEntities.module.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/browseStatistic.component.html delete mode 100644 portal-2/src/app/searchPages/searchUtils/browseStatistic.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/dateFilter.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/dateFilter.module.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchDownload.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchDownload.module.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchFilter.component.html delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchFilter.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchFilter.module.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchFilterModal.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchForm.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchForm.module.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchHelperClasses.class.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchPage.component.html delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchPage.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchPage.module.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchPageTableView.component.html delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchPageTableView.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchPageTableView.module.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchPaging.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchPaging.module.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchResult.component.html delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchResult.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchResults.module.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/searchUtils.class.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/tabResult.component.html delete mode 100644 portal-2/src/app/searchPages/searchUtils/tabResult.component.ts delete mode 100644 portal-2/src/app/searchPages/searchUtils/tabResult.module.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchDataProviders-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchDataProviders.module.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchDataproviders.component.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchDatasets-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchDatasets.component.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchDatasets.module.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchOrganizations-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchOrganizations.component.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchOrganizations.module.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchProjects-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchProjects.component.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchProjects.module.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchPublications-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchPublications.component.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchPublications.module.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchSoftware-routing.module.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchSoftware.component.ts delete mode 100644 portal-2/src/app/searchPages/simple/searchSoftware.module.ts delete mode 100644 portal-2/src/app/services/dataProvidersService.module.ts delete mode 100644 portal-2/src/app/services/datasetsService.module.ts delete mode 100644 portal-2/src/app/services/metrics.service.ts delete mode 100644 portal-2/src/app/services/organization.service.ts delete mode 100644 portal-2/src/app/services/organizationService.module.ts delete mode 100644 portal-2/src/app/services/organizationsService.module.ts delete mode 100644 portal-2/src/app/services/project.service.ts delete mode 100644 portal-2/src/app/services/projectsService.module.ts delete mode 100644 portal-2/src/app/services/publicationsService.module.ts delete mode 100644 portal-2/src/app/services/refineFieldResults.service.ts delete mode 100644 portal-2/src/app/services/refineFieldResultsService.module.ts delete mode 100644 portal-2/src/app/services/reports.service.ts delete mode 100644 portal-2/src/app/services/reportsService.module.ts delete mode 100644 portal-2/src/app/services/searchDataproviders.service.ts delete mode 100644 portal-2/src/app/services/searchDatasets.service.ts delete mode 100644 portal-2/src/app/services/searchOrganizations.service.ts delete mode 100644 portal-2/src/app/services/searchProjects.service.ts delete mode 100644 portal-2/src/app/services/searchPublications.service.ts delete mode 100644 portal-2/src/app/services/searchSoftware.service.ts delete mode 100644 portal-2/src/app/services/servicesUtils/refineResults.class.ts delete mode 100644 portal-2/src/app/services/softwareService.module.ts delete mode 100644 portal-2/src/app/shared/api.service.ts delete mode 100644 portal-2/src/app/shared/cache.service.ts delete mode 100644 portal-2/src/app/shared/model/model.service.ts delete mode 100644 portal-2/src/app/shared/shared.module.ts delete mode 100644 portal-2/src/app/sharedComponents/bottom.component.html delete mode 100644 portal-2/src/app/sharedComponents/bottom.component.ts delete mode 100644 portal-2/src/app/sharedComponents/cookie-law/cookie-law.component.ts delete mode 100644 portal-2/src/app/sharedComponents/cookie-law/cookie-law.css delete mode 100644 portal-2/src/app/sharedComponents/cookie-law/cookie-law.html delete mode 100644 portal-2/src/app/sharedComponents/cookie-law/cookie-law.module.ts delete mode 100644 portal-2/src/app/sharedComponents/cookie-law/cookie-law.service.ts delete mode 100644 portal-2/src/app/sharedComponents/cookie-law/icons.ts delete mode 100644 portal-2/src/app/sharedComponents/feedback/feedback.component.ts delete mode 100644 portal-2/src/app/sharedComponents/navigationBar.component.html delete mode 100644 portal-2/src/app/sharedComponents/navigationBar.component.ts delete mode 100644 portal-2/src/app/sharedComponents/sharedComponents.module.ts delete mode 100644 portal-2/src/app/test/test-routing.module.ts delete mode 100644 portal-2/src/app/test/test.component.ts delete mode 100644 portal-2/src/app/test/test.module.ts delete mode 100644 portal-2/src/app/utils/altmetrics.component.ts delete mode 100644 portal-2/src/app/utils/altmetrics.js delete mode 100644 portal-2/src/app/utils/altmetrics.module.ts delete mode 100644 portal-2/src/app/utils/autoComplete.component.css delete mode 100644 portal-2/src/app/utils/configuration/configuration.service.ts delete mode 100644 portal-2/src/app/utils/entities/dataProviderInfo.ts delete mode 100644 portal-2/src/app/utils/entities/datasetInfo.ts delete mode 100644 portal-2/src/app/utils/entities/entities.module.ts delete mode 100644 portal-2/src/app/utils/entities/metrics.ts delete mode 100644 portal-2/src/app/utils/entities/organizationInfo.ts delete mode 100644 portal-2/src/app/utils/entities/projectInfo.ts delete mode 100644 portal-2/src/app/utils/entities/publication.ts delete mode 100644 portal-2/src/app/utils/entities/publicationInfo.ts delete mode 100644 portal-2/src/app/utils/entities/searchResult.ts delete mode 100644 portal-2/src/app/utils/entities/softwareInfo.ts delete mode 100644 portal-2/src/app/utils/entitiesAutoComplete/entitiesAutoComplete.component.ts delete mode 100644 portal-2/src/app/utils/entitiesAutoComplete/entitiesAutoComplete.module.ts delete mode 100644 portal-2/src/app/utils/entitiesAutoComplete/entitySearch.service.ts delete mode 100644 portal-2/src/app/utils/entitiesAutoComplete/entitySearchService.module.ts delete mode 100644 portal-2/src/app/utils/errorMessages.component.ts delete mode 100644 portal-2/src/app/utils/errorMessages.module.ts delete mode 100644 portal-2/src/app/utils/exportCSV.class.ts delete mode 100644 portal-2/src/app/utils/fetchEntitiesClasses/fetchDataproviders.class.ts delete mode 100644 portal-2/src/app/utils/fetchEntitiesClasses/fetchDatasets.class.ts delete mode 100644 portal-2/src/app/utils/fetchEntitiesClasses/fetchOrganizations.class.ts delete mode 100644 portal-2/src/app/utils/fetchEntitiesClasses/fetchProjects.class.ts delete mode 100644 portal-2/src/app/utils/fetchEntitiesClasses/fetchPublications.class.ts delete mode 100644 portal-2/src/app/utils/fetchEntitiesClasses/fetchSoftware.class.ts delete mode 100644 portal-2/src/app/utils/helper/helper.component.ts delete mode 100644 portal-2/src/app/utils/helper/helper.module.ts delete mode 100644 portal-2/src/app/utils/helper/helper.service.ts delete mode 100644 portal-2/src/app/utils/helper/helperService.module.ts delete mode 100644 portal-2/src/app/utils/iframe.component.ts delete mode 100644 portal-2/src/app/utils/iframe.module.ts delete mode 100644 portal-2/src/app/utils/metaTags/openaireMetaTags.class.ts delete mode 100644 portal-2/src/app/utils/modal/alert.ts delete mode 100644 portal-2/src/app/utils/modal/alertModal.module.ts delete mode 100644 portal-2/src/app/utils/modal/loading.component.ts delete mode 100644 portal-2/src/app/utils/modal/loadingModal.module.ts delete mode 100644 portal-2/src/app/utils/modal/modal.module.ts delete mode 100644 portal-2/src/app/utils/modal/open.component.ts delete mode 100644 portal-2/src/app/utils/modal/selectModal.component.ts delete mode 100644 portal-2/src/app/utils/modal/selectModal.module.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/directives/my-date-picker.focus.directive.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/directives/my-date-picker.input.auto.fill.directive.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/index.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/index.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-calendar-day.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-calendar-view-changed.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-date-model.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-date-range.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-date.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-day-labels.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-input-auto-fill.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-input-field-changed.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-input-focus-blur.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-locale.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-month-labels.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-month.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-options.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-week.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/interfaces/my-weekday.interface.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/my-date-picker.component.css delete mode 100644 portal-2/src/app/utils/my-date-picker/my-date-picker.component.html delete mode 100644 portal-2/src/app/utils/my-date-picker/my-date-picker.component.spec.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/my-date-picker.component.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/my-date-picker.module.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/services/my-date-picker.locale.service.ts delete mode 100644 portal-2/src/app/utils/my-date-picker/services/my-date-picker.util.service.ts delete mode 100644 portal-2/src/app/utils/number-utils.class.ts delete mode 100644 portal-2/src/app/utils/paging.module.ts delete mode 100644 portal-2/src/app/utils/pagingFormatter.component.ts delete mode 100644 portal-2/src/app/utils/pagingFormatterNoLoad.component.ts delete mode 100644 portal-2/src/app/utils/pipes/claimsDatatable.pipe.ts delete mode 100644 portal-2/src/app/utils/pipes/contentProvidersDatatable.pipe.ts delete mode 100644 portal-2/src/app/utils/pipes/safeHTML.pipe.ts delete mode 100644 portal-2/src/app/utils/piwik/piwik.service.ts delete mode 100644 portal-2/src/app/utils/piwik/piwikService.module.ts delete mode 100644 portal-2/src/app/utils/piwik/previousRouteRecorder.guard.ts delete mode 100644 portal-2/src/app/utils/properties/openaireProperties.ts delete mode 100644 portal-2/src/app/utils/properties/searchFields.ts delete mode 100644 portal-2/src/app/utils/properties/searchFields_new.ts delete mode 100644 portal-2/src/app/utils/properties/searchFields_old.ts delete mode 100644 portal-2/src/app/utils/routerHelper.class.ts delete mode 100644 portal-2/src/app/utils/showDataProviders.component.ts delete mode 100644 portal-2/src/app/utils/staticAutoComplete/ISVocabularies.service.ts delete mode 100644 portal-2/src/app/utils/staticAutoComplete/staticAutoComplete.component.ts delete mode 100644 portal-2/src/app/utils/staticAutoComplete/staticAutoComplete.module.ts delete mode 100644 portal-2/src/app/utils/string-utils.class.ts delete mode 100644 portal-2/src/assets/Home_24white.svg delete mode 100644 portal-2/src/assets/OA DISCOVER_A.png delete mode 100644 portal-2/src/assets/OA DISCOVER_B.png delete mode 100644 portal-2/src/assets/closedAccess.png delete mode 100644 portal-2/src/assets/common/80x15.png delete mode 100644 portal-2/src/assets/common/Home-icon.png delete mode 100644 portal-2/src/assets/common/Logo_Horizontal.png delete mode 100644 portal-2/src/assets/common/Logo_Horizontal_white_small.png delete mode 100644 portal-2/src/assets/common/Symbol.png delete mode 100644 portal-2/src/assets/common/custom.css delete mode 100644 portal-2/src/assets/common/ec_logo_inv_small.png delete mode 100644 portal-2/src/assets/common/jquery.js delete mode 100644 portal-2/src/assets/common/theme.css delete mode 100644 portal-2/src/assets/common/uikit-icons-max.js delete mode 100644 portal-2/src/assets/common/uikit.js delete mode 100644 portal-2/src/assets/dataset.png delete mode 100644 portal-2/src/assets/datasource.png delete mode 100644 portal-2/src/assets/discover-custom.css delete mode 100644 portal-2/src/assets/external-link.svg delete mode 100644 portal-2/src/assets/favicon.ico delete mode 100644 portal-2/src/assets/formImage.jpg delete mode 100644 portal-2/src/assets/globe_tech.jpg delete mode 100644 portal-2/src/assets/home.jpeg delete mode 100644 portal-2/src/assets/home2.jpeg delete mode 100644 portal-2/src/assets/icon_external.png delete mode 100644 portal-2/src/assets/jquery/jquery.min.js delete mode 100644 portal-2/src/assets/loading.gif delete mode 100644 portal-2/src/assets/lock.svg delete mode 100644 portal-2/src/assets/logo/android-icon-144x144.png delete mode 100644 portal-2/src/assets/logo/android-icon-192x192.png delete mode 100644 portal-2/src/assets/logo/android-icon-36x36.png delete mode 100644 portal-2/src/assets/logo/android-icon-48x48.png delete mode 100644 portal-2/src/assets/logo/android-icon-72x72.png delete mode 100644 portal-2/src/assets/logo/android-icon-96x96.png delete mode 100644 portal-2/src/assets/logo/apple-icon-114x114.png delete mode 100644 portal-2/src/assets/logo/apple-icon-120x120.png delete mode 100644 portal-2/src/assets/logo/apple-icon-144x144.png delete mode 100644 portal-2/src/assets/logo/apple-icon-152x152.png delete mode 100644 portal-2/src/assets/logo/apple-icon-180x180.png delete mode 100644 portal-2/src/assets/logo/apple-icon-57x57.png delete mode 100644 portal-2/src/assets/logo/apple-icon-60x60.png delete mode 100644 portal-2/src/assets/logo/apple-icon-72x72.png delete mode 100644 portal-2/src/assets/logo/apple-icon-76x76.png delete mode 100644 portal-2/src/assets/logo/apple-icon-precomposed.png delete mode 100644 portal-2/src/assets/logo/apple-icon.png delete mode 100644 portal-2/src/assets/logo/browserconfig.xml delete mode 100644 portal-2/src/assets/logo/favicon-16x16.png delete mode 100644 portal-2/src/assets/logo/favicon-32x32.png delete mode 100644 portal-2/src/assets/logo/favicon-96x96.png delete mode 100644 portal-2/src/assets/logo/favicon.ico delete mode 100644 portal-2/src/assets/logo/manifest.json delete mode 100644 portal-2/src/assets/logo/ms-icon-144x144.png delete mode 100644 portal-2/src/assets/logo/ms-icon-150x150.png delete mode 100644 portal-2/src/assets/logo/ms-icon-310x310.png delete mode 100644 portal-2/src/assets/logo/ms-icon-70x70.png delete mode 100644 portal-2/src/assets/newlogo.png delete mode 100644 portal-2/src/assets/openAccess.png delete mode 100644 portal-2/src/assets/organization.png delete mode 100644 portal-2/src/assets/project.png delete mode 100644 portal-2/src/assets/projects_search.jpg delete mode 100644 portal-2/src/assets/providers_search.jpg delete mode 100644 portal-2/src/assets/publication.png delete mode 100644 portal-2/src/assets/sc39.png delete mode 100644 portal-2/src/assets/search_data.jpg delete mode 100644 portal-2/src/assets/search_general.jpg delete mode 100644 portal-2/src/assets/search_general_2.jpg delete mode 100644 portal-2/src/assets/search_general_3.jpg delete mode 100644 portal-2/src/assets/search_journals.jpg delete mode 100644 portal-2/src/assets/search_organizations.jpg delete mode 100644 portal-2/src/assets/search_pubs_1.jpg delete mode 100644 portal-2/src/assets/search_registries.jpg delete mode 100644 portal-2/src/assets/sitemap.xml delete mode 100644 portal-2/src/assets/unlock.svg delete mode 100644 portal-2/src/backend/api.ts delete mode 100644 portal-2/src/backend/cache.ts delete mode 100644 portal-2/src/backend/db.ts delete mode 100755 portal-2/src/browser.module.ts delete mode 100644 portal-2/src/client.aot.ts delete mode 100644 portal-2/src/client.ts delete mode 100644 portal-2/src/index.html delete mode 100755 portal-2/src/node.module.ts delete mode 100644 portal-2/src/server.aot.ts delete mode 100644 portal-2/src/server.routes.ts delete mode 100644 portal-2/src/server.ts delete mode 100644 portal-2/src/typings.d.ts delete mode 100644 portal-2/tsconfig.aot.json delete mode 100644 portal-2/tsconfig.json delete mode 100644 portal-2/webpack.config.ts delete mode 100644 portal-2/webpack.prod.config.ts delete mode 100644 portal-4cli/.angular-cli.json delete mode 100644 portal-4cli/README.md delete mode 100644 portal-4cli/package.json delete mode 100644 portal-4cli/prerender.ts delete mode 100644 portal-4cli/server.ts delete mode 100644 portal-4cli/src/angular2-meta.ts delete mode 100644 portal-4cli/src/app/app.component.ts delete mode 100755 portal-4cli/src/app/app.module.ts delete mode 100644 portal-4cli/src/app/app.server.module.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/claim.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/claimContextSearchForm.component.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/claimContextSearchForm.module.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/claimEntities.class.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/claimProjectSearchForm.component.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/claimProjectSearchForm.module.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/claimResultSearchForm.component.html delete mode 100644 portal-4cli/src/app/claims/claim-utils/claimResultSearchForm.component.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/claimResultSearchForm.module.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/displayClaims/displayClaims.component.html delete mode 100644 portal-4cli/src/app/claims/claim-utils/displayClaims/displayClaims.component.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/displayClaims/displayClaims.module.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/entityFormatter/claimEntityFormatter.component.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/entityFormatter/claimEntityFormatter.module.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/entityFormatter/projectTitleFormatter.component.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/entityFormatter/publicationTitleFormatter.component.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/service/claims.service.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/service/claimsService.module.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/service/contexts.service.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/service/contextsService.module.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/service/customOptions.class.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/service/searchCrossref.service.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/service/searchCrossrefService.module.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/service/searchDatacite.service.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/service/searchDataciteService.module.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/service/searchOrcid.service.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/startOver.component.ts delete mode 100644 portal-4cli/src/app/claims/claim-utils/startOver.module.ts delete mode 100644 portal-4cli/src/app/claims/claim.module.ts delete mode 100644 portal-4cli/src/app/claims/claimsAdmin/claimsAdmin-routing.module.ts delete mode 100644 portal-4cli/src/app/claims/claimsAdmin/claimsAdmin.component.ts delete mode 100644 portal-4cli/src/app/claims/claimsAdmin/claimsAdmin.module.ts delete mode 100644 portal-4cli/src/app/claims/claimsByToken/claimsByToken-routing.module.ts delete mode 100644 portal-4cli/src/app/claims/claimsByToken/claimsByToken.component.ts delete mode 100644 portal-4cli/src/app/claims/claimsByToken/claimsByToken.module.ts delete mode 100644 portal-4cli/src/app/claims/claimsByToken/claimsByToken.service.ts delete mode 100644 portal-4cli/src/app/claims/directLinking/directLinking-routing.module.ts delete mode 100644 portal-4cli/src/app/claims/directLinking/directLinking.component.html delete mode 100644 portal-4cli/src/app/claims/directLinking/directLinking.component.ts delete mode 100644 portal-4cli/src/app/claims/directLinking/directLinking.module.ts delete mode 100644 portal-4cli/src/app/claims/linking/bulkClaim/bulkClaim.component.ts delete mode 100644 portal-4cli/src/app/claims/linking/bulkClaim/bulkClaim.module.ts delete mode 100644 portal-4cli/src/app/claims/linking/bulkLinking.component.ts delete mode 100644 portal-4cli/src/app/claims/linking/bulkLinking.module.ts delete mode 100644 portal-4cli/src/app/claims/linking/insertClaim/insertClaim.component.ts delete mode 100644 portal-4cli/src/app/claims/linking/insertClaim/insertClaim.module.ts delete mode 100644 portal-4cli/src/app/claims/linking/linking-routing.module.ts delete mode 100644 portal-4cli/src/app/claims/linking/linking.component.ts delete mode 100644 portal-4cli/src/app/claims/linking/linkingGeneric.component.html delete mode 100644 portal-4cli/src/app/claims/linking/linkingGeneric.component.ts delete mode 100644 portal-4cli/src/app/claims/linking/linkingGeneric.module.ts delete mode 100644 portal-4cli/src/app/claims/linking/selected/selectedContexts.component.ts delete mode 100644 portal-4cli/src/app/claims/linking/selected/selectedContexts.module.ts delete mode 100644 portal-4cli/src/app/claims/linking/selected/selectedProjects.component.ts delete mode 100644 portal-4cli/src/app/claims/linking/selected/selectedProjects.module.ts delete mode 100644 portal-4cli/src/app/claims/linking/selected/selectedResults.component.ts delete mode 100644 portal-4cli/src/app/claims/linking/selected/selectedResults.module.ts delete mode 100644 portal-4cli/src/app/claims/myClaims/myClaims-routing.module.ts delete mode 100644 portal-4cli/src/app/claims/myClaims/myClaims.component.ts delete mode 100644 portal-4cli/src/app/claims/myClaims/myClaims.module.ts delete mode 100644 portal-4cli/src/app/claims/myClaimsDemo.component.ts delete mode 100644 portal-4cli/src/app/deposit/datasets/depositBySubject.component.ts delete mode 100644 portal-4cli/src/app/deposit/datasets/depositBySubjectResult-routing.module.ts delete mode 100644 portal-4cli/src/app/deposit/datasets/depositBySubjectResult.component.html delete mode 100644 portal-4cli/src/app/deposit/datasets/depositBySubjectResult.component.ts delete mode 100644 portal-4cli/src/app/deposit/datasets/depositBySubjectResults.module.ts delete mode 100644 portal-4cli/src/app/deposit/datasets/depositDatasets-routing.module.ts delete mode 100644 portal-4cli/src/app/deposit/datasets/depositDatasets.component.ts delete mode 100644 portal-4cli/src/app/deposit/datasets/depositDatasets.module.ts delete mode 100644 portal-4cli/src/app/deposit/datasets/depositDatasetsResult.component.ts delete mode 100644 portal-4cli/src/app/deposit/datasets/depositDatasetsResults-routing.module.ts delete mode 100644 portal-4cli/src/app/deposit/datasets/depositDatasetsResults.module.ts delete mode 100644 portal-4cli/src/app/deposit/deposit.component.html delete mode 100644 portal-4cli/src/app/deposit/deposit.component.ts delete mode 100644 portal-4cli/src/app/deposit/deposit.module.ts delete mode 100644 portal-4cli/src/app/deposit/depositResult.component.ts delete mode 100644 portal-4cli/src/app/deposit/publications/depositPublications-routing.module.ts delete mode 100644 portal-4cli/src/app/deposit/publications/depositPublications.component.ts delete mode 100644 portal-4cli/src/app/deposit/publications/depositPublications.module.ts delete mode 100644 portal-4cli/src/app/deposit/publications/depositPublicationsResult-routing.module.ts delete mode 100644 portal-4cli/src/app/deposit/publications/depositPublicationsResult.component.ts delete mode 100644 portal-4cli/src/app/deposit/publications/depositPublicationsResults.module.ts delete mode 100644 portal-4cli/src/app/error/error-routing.module.ts delete mode 100644 portal-4cli/src/app/error/errorPage.component.ts delete mode 100644 portal-4cli/src/app/error/isRouteEnabled.guard.ts delete mode 100644 portal-4cli/src/app/home/home-routing.module.ts delete mode 100644 portal-4cli/src/app/home/home.component.html delete mode 100644 portal-4cli/src/app/home/home.component.ts delete mode 100644 portal-4cli/src/app/home/home.module.ts delete mode 100644 portal-4cli/src/app/landingPages/dataProvider/dataProvider-routing.module.ts delete mode 100644 portal-4cli/src/app/landingPages/dataProvider/dataProvider.component.html delete mode 100644 portal-4cli/src/app/landingPages/dataProvider/dataProvider.component.ts delete mode 100644 portal-4cli/src/app/landingPages/dataProvider/dataProvider.module.ts delete mode 100644 portal-4cli/src/app/landingPages/dataProvider/dataProvider.service.ts delete mode 100644 portal-4cli/src/app/landingPages/dataProvider/datasetsTab.component.ts delete mode 100644 portal-4cli/src/app/landingPages/dataProvider/datasourcesTab.component.ts delete mode 100644 portal-4cli/src/app/landingPages/dataProvider/organizationsTab.component.ts delete mode 100644 portal-4cli/src/app/landingPages/dataProvider/projectsTab.component.ts delete mode 100644 portal-4cli/src/app/landingPages/dataProvider/publicationsTab.component.ts delete mode 100644 portal-4cli/src/app/landingPages/dataProvider/relatedDatasourcesTab.component.ts delete mode 100644 portal-4cli/src/app/landingPages/dataProvider/statisticsTab.component.ts delete mode 100644 portal-4cli/src/app/landingPages/dataset/dataset-routing.module.ts delete mode 100644 portal-4cli/src/app/landingPages/dataset/dataset.component.html delete mode 100644 portal-4cli/src/app/landingPages/dataset/dataset.component.ts delete mode 100644 portal-4cli/src/app/landingPages/dataset/dataset.module.ts delete mode 100644 portal-4cli/src/app/landingPages/dataset/dataset.service.ts delete mode 100644 portal-4cli/src/app/landingPages/htmlProjectReport/htmlProjectReport-routing.module.ts delete mode 100644 portal-4cli/src/app/landingPages/htmlProjectReport/htmlProjectReport.component.ts delete mode 100644 portal-4cli/src/app/landingPages/htmlProjectReport/htmlProjectReport.module.ts delete mode 100644 portal-4cli/src/app/landingPages/htmlProjectReport/htmlProjectReport.service.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/addThis.component.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/availableOn.component.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/citeThis/citation.class.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/citeThis/citeThis.component.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/citeThis/citeThis.module.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/fundedBy.component.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/landing.module.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/metrics.component.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/metrics.module.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/parsingFunctions.class.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/publishedIn.component.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/resultLanding.module.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/searchingProjectsInTab.component.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/searchingProjectsInTab.module.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/showAuthors.component.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/showIdentifiers.component.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/showSubjects.component.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/showTitle.component.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/tabPaging.component.ts delete mode 100644 portal-4cli/src/app/landingPages/landing-utils/tabTable.component.ts delete mode 100644 portal-4cli/src/app/landingPages/organization/organization-routing.module.ts delete mode 100644 portal-4cli/src/app/landingPages/organization/organization.component.html delete mode 100644 portal-4cli/src/app/landingPages/organization/organization.component.ts delete mode 100644 portal-4cli/src/app/landingPages/organization/organization.module.ts delete mode 100644 portal-4cli/src/app/landingPages/project/project-routing.module.ts delete mode 100644 portal-4cli/src/app/landingPages/project/project.component.html delete mode 100644 portal-4cli/src/app/landingPages/project/project.component.ts delete mode 100644 portal-4cli/src/app/landingPages/project/project.module.ts delete mode 100644 portal-4cli/src/app/landingPages/project/project.service.ts delete mode 100644 portal-4cli/src/app/landingPages/project/projectService.module.ts delete mode 100644 portal-4cli/src/app/landingPages/publication/publication-routing.module.ts delete mode 100644 portal-4cli/src/app/landingPages/publication/publication.component.html delete mode 100644 portal-4cli/src/app/landingPages/publication/publication.component.ts delete mode 100644 portal-4cli/src/app/landingPages/publication/publication.module.ts delete mode 100644 portal-4cli/src/app/landingPages/publication/publication.service.ts delete mode 100644 portal-4cli/src/app/landingPages/software/software-routing.module.ts delete mode 100644 portal-4cli/src/app/landingPages/software/software.component.html delete mode 100644 portal-4cli/src/app/landingPages/software/software.component.ts delete mode 100644 portal-4cli/src/app/landingPages/software/software.module.ts delete mode 100644 portal-4cli/src/app/landingPages/software/software.service.ts delete mode 100644 portal-4cli/src/app/login/adminLoginGuard.guard.ts delete mode 100644 portal-4cli/src/app/login/freeGuard.guard.ts delete mode 100644 portal-4cli/src/app/login/loginGuard.guard.ts delete mode 100644 portal-4cli/src/app/login/user-routing.module.ts delete mode 100644 portal-4cli/src/app/login/user.component.html delete mode 100644 portal-4cli/src/app/login/user.component.ts delete mode 100644 portal-4cli/src/app/login/user.module.ts delete mode 100644 portal-4cli/src/app/login/userMini.component.ts delete mode 100644 portal-4cli/src/app/login/utils/guardHelper.class.ts delete mode 100644 portal-4cli/src/app/login/utils/helper.class.ts delete mode 100644 portal-4cli/src/app/login/utils/logoutOpenaire.service.ts delete mode 100644 portal-4cli/src/app/reload/reload-routing.module.ts delete mode 100644 portal-4cli/src/app/reload/reload.component.ts delete mode 100644 portal-4cli/src/app/reload/reload.module.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchDataProviders-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchDataProviders.component.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchDataProviders.module.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchDatasets-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchDatasets.component.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchDatasets.module.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchOrganizations-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchOrganizations.component.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchOrganizations.module.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchProjects-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchProjects.component.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchProjects.module.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchPublications-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchPublications.component.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchPublications.module.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchSoftware-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchSoftware.component.ts delete mode 100644 portal-4cli/src/app/searchPages/advanced/advancedSearchSoftware.module.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/compatibleDataProviders-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/compatibleDataProviders.component.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/compatibleDataProviders.module.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/compatibleDataProvidersTable-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/compatibleDataProvidersTable.component.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/compatibleDataProvidersTable.module.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/entityRegistries-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/entityRegistries.component.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/entityRegistries.module.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/entityRegistriesTable-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/entityRegistriesTable.component.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/entityRegistriesTable.module.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/journals-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/journals.component.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/journals.module.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/journalsTable-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/journalsTable.component.ts delete mode 100644 portal-4cli/src/app/searchPages/dataProviders/journalsTable.module.ts delete mode 100644 portal-4cli/src/app/searchPages/find/mainSearch-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/find/mainSearch.module.ts delete mode 100644 portal-4cli/src/app/searchPages/find/search.component.html delete mode 100644 portal-4cli/src/app/searchPages/find/search.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/advancedSearchForm.component.html delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/advancedSearchForm.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/advancedSearchForm.module.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/advancedSearchPage.component.html delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/advancedSearchPage.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/advancedSearchPage.module.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/browseEntities.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/browseEntities.module.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/browseStatistic.component.html delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/browseStatistic.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/dateFilter.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/dateFilter.module.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchDownload.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchDownload.module.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchFilter.component.html delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchFilter.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchFilter.module.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchFilterModal.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchForm.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchForm.module.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchHelperClasses.class.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchPage.component.html delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchPage.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchPage.module.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchPageTableView.component.html delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchPageTableView.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchPageTableView.module.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchPaging.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchPaging.module.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchResult.component.html delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchResult.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchResults.module.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/searchUtils.class.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/tabResult.component.html delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/tabResult.component.ts delete mode 100644 portal-4cli/src/app/searchPages/searchUtils/tabResult.module.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchDataProviders-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchDataProviders.module.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchDataproviders.component.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchDatasets-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchDatasets.component.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchDatasets.module.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchOrganizations-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchOrganizations.component.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchOrganizations.module.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchProjects-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchProjects.component.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchProjects.module.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchPublications-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchPublications.component.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchPublications.module.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchSoftware-routing.module.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchSoftware.component.ts delete mode 100644 portal-4cli/src/app/searchPages/simple/searchSoftware.module.ts delete mode 100644 portal-4cli/src/app/services/dataProvidersService.module.ts delete mode 100644 portal-4cli/src/app/services/datasetsService.module.ts delete mode 100644 portal-4cli/src/app/services/metrics.service.ts delete mode 100644 portal-4cli/src/app/services/organization.service.ts delete mode 100644 portal-4cli/src/app/services/organizationService.module.ts delete mode 100644 portal-4cli/src/app/services/organizationsService.module.ts delete mode 100644 portal-4cli/src/app/services/projectsService.module.ts delete mode 100644 portal-4cli/src/app/services/publicationsService.module.ts delete mode 100644 portal-4cli/src/app/services/refineFieldResults.service.ts delete mode 100644 portal-4cli/src/app/services/refineFieldResultsService.module.ts delete mode 100644 portal-4cli/src/app/services/reports.service.ts delete mode 100644 portal-4cli/src/app/services/reportsService.module.ts delete mode 100644 portal-4cli/src/app/services/searchDataproviders.service.ts delete mode 100644 portal-4cli/src/app/services/searchDatasets.service.ts delete mode 100644 portal-4cli/src/app/services/searchOrganizations.service.ts delete mode 100644 portal-4cli/src/app/services/searchProjects.service.ts delete mode 100644 portal-4cli/src/app/services/searchPublications.service.ts delete mode 100644 portal-4cli/src/app/services/searchSoftware.service.ts delete mode 100644 portal-4cli/src/app/services/servicesUtils/refineResults.class.ts delete mode 100644 portal-4cli/src/app/services/softwareService.module.ts delete mode 100644 portal-4cli/src/app/shared/shared.module.ts delete mode 100644 portal-4cli/src/app/sharedComponents/bottom.component.html delete mode 100644 portal-4cli/src/app/sharedComponents/bottom.component.ts delete mode 100644 portal-4cli/src/app/sharedComponents/cookie-law/cookie-law.component.ts delete mode 100644 portal-4cli/src/app/sharedComponents/cookie-law/cookie-law.css delete mode 100644 portal-4cli/src/app/sharedComponents/cookie-law/cookie-law.html delete mode 100644 portal-4cli/src/app/sharedComponents/cookie-law/cookie-law.module.ts delete mode 100644 portal-4cli/src/app/sharedComponents/cookie-law/cookie-law.service.ts delete mode 100644 portal-4cli/src/app/sharedComponents/cookie-law/icons.ts delete mode 100644 portal-4cli/src/app/sharedComponents/feedback/feedback.component.ts delete mode 100644 portal-4cli/src/app/sharedComponents/navigationBar.component.html delete mode 100644 portal-4cli/src/app/sharedComponents/navigationBar.component.ts delete mode 100644 portal-4cli/src/app/sharedComponents/sharedComponents.module.ts delete mode 100644 portal-4cli/src/app/test/test-routing.module.ts delete mode 100644 portal-4cli/src/app/test/test.component.ts delete mode 100644 portal-4cli/src/app/test/test.module.ts delete mode 100644 portal-4cli/src/app/utils/altmetrics.component.ts delete mode 100644 portal-4cli/src/app/utils/altmetrics.js delete mode 100644 portal-4cli/src/app/utils/altmetrics.module.ts delete mode 100644 portal-4cli/src/app/utils/autoComplete.component.css delete mode 100644 portal-4cli/src/app/utils/configuration/configuration.service.ts delete mode 100644 portal-4cli/src/app/utils/entities/dataProviderInfo.ts delete mode 100644 portal-4cli/src/app/utils/entities/datasetInfo.ts delete mode 100644 portal-4cli/src/app/utils/entities/entities.module.ts delete mode 100644 portal-4cli/src/app/utils/entities/metrics.ts delete mode 100644 portal-4cli/src/app/utils/entities/organizationInfo.ts delete mode 100644 portal-4cli/src/app/utils/entities/projectInfo.ts delete mode 100644 portal-4cli/src/app/utils/entities/publication.ts delete mode 100644 portal-4cli/src/app/utils/entities/publicationInfo.ts delete mode 100644 portal-4cli/src/app/utils/entities/searchResult.ts delete mode 100644 portal-4cli/src/app/utils/entities/softwareInfo.ts delete mode 100644 portal-4cli/src/app/utils/entitiesAutoComplete/entitiesAutoComplete.component.ts delete mode 100644 portal-4cli/src/app/utils/entitiesAutoComplete/entitiesAutoComplete.module.ts delete mode 100644 portal-4cli/src/app/utils/entitiesAutoComplete/entitySearch.service.ts delete mode 100644 portal-4cli/src/app/utils/entitiesAutoComplete/entitySearchService.module.ts delete mode 100644 portal-4cli/src/app/utils/errorMessages.component.ts delete mode 100644 portal-4cli/src/app/utils/errorMessages.module.ts delete mode 100644 portal-4cli/src/app/utils/exportCSV.class.ts delete mode 100644 portal-4cli/src/app/utils/fetchEntitiesClasses/fetchDataproviders.class.ts delete mode 100644 portal-4cli/src/app/utils/fetchEntitiesClasses/fetchDatasets.class.ts delete mode 100644 portal-4cli/src/app/utils/fetchEntitiesClasses/fetchOrganizations.class.ts delete mode 100644 portal-4cli/src/app/utils/fetchEntitiesClasses/fetchProjects.class.ts delete mode 100644 portal-4cli/src/app/utils/fetchEntitiesClasses/fetchPublications.class.ts delete mode 100644 portal-4cli/src/app/utils/fetchEntitiesClasses/fetchSoftware.class.ts delete mode 100644 portal-4cli/src/app/utils/helper/helper.component.ts delete mode 100644 portal-4cli/src/app/utils/helper/helper.module.ts delete mode 100644 portal-4cli/src/app/utils/helper/helper.service.ts delete mode 100644 portal-4cli/src/app/utils/helper/helperService.module.ts delete mode 100644 portal-4cli/src/app/utils/iframe.component.ts delete mode 100644 portal-4cli/src/app/utils/iframe.module.ts delete mode 100644 portal-4cli/src/app/utils/metaTags/openaireMetaTags.class.ts delete mode 100644 portal-4cli/src/app/utils/modal/alert.ts delete mode 100644 portal-4cli/src/app/utils/modal/alertModal.module.ts delete mode 100644 portal-4cli/src/app/utils/modal/loading.component.ts delete mode 100644 portal-4cli/src/app/utils/modal/loadingModal.module.ts delete mode 100644 portal-4cli/src/app/utils/modal/modal.module.ts delete mode 100644 portal-4cli/src/app/utils/modal/open.component.ts delete mode 100644 portal-4cli/src/app/utils/modal/selectModal.component.ts delete mode 100644 portal-4cli/src/app/utils/modal/selectModal.module.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/directives/my-date-picker.focus.directive.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/directives/my-date-picker.input.auto.fill.directive.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/index.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/index.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-calendar-day.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-calendar-view-changed.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-date-model.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-date-range.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-date.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-day-labels.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-input-auto-fill.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-input-field-changed.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-input-focus-blur.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-locale.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-month-labels.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-month.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-options.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-week.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/interfaces/my-weekday.interface.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.css delete mode 100644 portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.html delete mode 100644 portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.spec.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/my-date-picker.module.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/services/my-date-picker.locale.service.ts delete mode 100644 portal-4cli/src/app/utils/my-date-picker/services/my-date-picker.util.service.ts delete mode 100644 portal-4cli/src/app/utils/number-utils.class.ts delete mode 100644 portal-4cli/src/app/utils/paging.module.ts delete mode 100644 portal-4cli/src/app/utils/pagingFormatter.component.ts delete mode 100644 portal-4cli/src/app/utils/pagingFormatterNoLoad.component.ts delete mode 100644 portal-4cli/src/app/utils/pipes/claimsDatatable.pipe.ts delete mode 100644 portal-4cli/src/app/utils/pipes/contentProvidersDatatable.pipe.ts delete mode 100644 portal-4cli/src/app/utils/pipes/safeHTML.pipe.ts delete mode 100644 portal-4cli/src/app/utils/piwik/piwik.service.ts delete mode 100644 portal-4cli/src/app/utils/piwik/piwikService.module.ts delete mode 100644 portal-4cli/src/app/utils/piwik/previousRouteRecorder.guard.ts delete mode 100644 portal-4cli/src/app/utils/properties/openaireProperties.ts delete mode 100644 portal-4cli/src/app/utils/properties/searchFields.ts delete mode 100644 portal-4cli/src/app/utils/properties/searchFields_new.ts delete mode 100644 portal-4cli/src/app/utils/properties/searchFields_old.ts delete mode 100644 portal-4cli/src/app/utils/routerHelper.class.ts delete mode 100644 portal-4cli/src/app/utils/staticAutoComplete/ISVocabularies.service.ts delete mode 100644 portal-4cli/src/app/utils/staticAutoComplete/staticAutoComplete.component.ts delete mode 100644 portal-4cli/src/app/utils/staticAutoComplete/staticAutoComplete.module.ts delete mode 100644 portal-4cli/src/app/utils/string-utils.class.ts delete mode 100644 portal-4cli/src/assets/Home_24white.svg delete mode 100644 portal-4cli/src/assets/OA DISCOVER_A.png delete mode 100644 portal-4cli/src/assets/OA DISCOVER_B.png delete mode 100644 portal-4cli/src/assets/OA EXPLORE_B.png delete mode 100644 portal-4cli/src/assets/OA EXPLORE_a.png delete mode 100644 portal-4cli/src/assets/citeproc.js delete mode 100644 portal-4cli/src/assets/clipboard.min.js delete mode 100644 portal-4cli/src/assets/closedAccess.png delete mode 100644 portal-4cli/src/assets/common/80x15.png delete mode 100644 portal-4cli/src/assets/common/Home-icon.png delete mode 100644 portal-4cli/src/assets/common/Logo_Horizontal.png delete mode 100644 portal-4cli/src/assets/common/Logo_Horizontal_white_small.png delete mode 100644 portal-4cli/src/assets/common/Symbol.png delete mode 100644 portal-4cli/src/assets/common/custom.css delete mode 100644 portal-4cli/src/assets/common/custom_old.css delete mode 100644 portal-4cli/src/assets/common/ec_logo_inv_small.png delete mode 100644 portal-4cli/src/assets/common/jquery.js delete mode 100644 portal-4cli/src/assets/common/theme.css delete mode 100644 portal-4cli/src/assets/common/uikit-icons-max.js delete mode 100644 portal-4cli/src/assets/common/uikit.js delete mode 100644 portal-4cli/src/assets/dataset.png delete mode 100644 portal-4cli/src/assets/datasource.png delete mode 100644 portal-4cli/src/assets/discover-custom.css delete mode 100644 portal-4cli/src/assets/explore_1.jpg delete mode 100644 portal-4cli/src/assets/explrore.jpg delete mode 100644 portal-4cli/src/assets/external-link.svg delete mode 100644 portal-4cli/src/assets/favicon-16x16.png delete mode 100644 portal-4cli/src/assets/favicon-32x32.png delete mode 100644 portal-4cli/src/assets/favicon.ico delete mode 100644 portal-4cli/src/assets/home.jpg delete mode 100644 portal-4cli/src/assets/icon_external.png delete mode 100644 portal-4cli/src/assets/jquery/jquery.min.js delete mode 100644 portal-4cli/src/assets/link.jpg delete mode 100644 portal-4cli/src/assets/loading.gif delete mode 100644 portal-4cli/src/assets/lock.svg delete mode 100644 portal-4cli/src/assets/logo/android-icon-144x144.png delete mode 100644 portal-4cli/src/assets/logo/android-icon-192x192.png delete mode 100644 portal-4cli/src/assets/logo/android-icon-36x36.png delete mode 100644 portal-4cli/src/assets/logo/android-icon-48x48.png delete mode 100644 portal-4cli/src/assets/logo/android-icon-72x72.png delete mode 100644 portal-4cli/src/assets/logo/android-icon-96x96.png delete mode 100644 portal-4cli/src/assets/logo/apple-icon-114x114.png delete mode 100644 portal-4cli/src/assets/logo/apple-icon-120x120.png delete mode 100644 portal-4cli/src/assets/logo/apple-icon-144x144.png delete mode 100644 portal-4cli/src/assets/logo/apple-icon-152x152.png delete mode 100644 portal-4cli/src/assets/logo/apple-icon-180x180.png delete mode 100644 portal-4cli/src/assets/logo/apple-icon-57x57.png delete mode 100644 portal-4cli/src/assets/logo/apple-icon-60x60.png delete mode 100644 portal-4cli/src/assets/logo/apple-icon-72x72.png delete mode 100644 portal-4cli/src/assets/logo/apple-icon-76x76.png delete mode 100644 portal-4cli/src/assets/logo/apple-icon-precomposed.png delete mode 100644 portal-4cli/src/assets/logo/apple-icon.png delete mode 100644 portal-4cli/src/assets/logo/browserconfig.xml delete mode 100644 portal-4cli/src/assets/logo/favicon-16x16.png delete mode 100644 portal-4cli/src/assets/logo/favicon-32x32.png delete mode 100644 portal-4cli/src/assets/logo/favicon-96x96.png delete mode 100644 portal-4cli/src/assets/logo/favicon.ico delete mode 100644 portal-4cli/src/assets/logo/manifest.json delete mode 100644 portal-4cli/src/assets/logo/ms-icon-144x144.png delete mode 100644 portal-4cli/src/assets/logo/ms-icon-150x150.png delete mode 100644 portal-4cli/src/assets/logo/ms-icon-310x310.png delete mode 100644 portal-4cli/src/assets/logo/ms-icon-70x70.png delete mode 100644 portal-4cli/src/assets/newlogo.png delete mode 100644 portal-4cli/src/assets/open.jpg delete mode 100644 portal-4cli/src/assets/openAccess.png delete mode 100644 portal-4cli/src/assets/organization.png delete mode 100644 portal-4cli/src/assets/project.png delete mode 100644 portal-4cli/src/assets/projects_search.jpg delete mode 100644 portal-4cli/src/assets/providers_search.jpg delete mode 100644 portal-4cli/src/assets/publication.png delete mode 100644 portal-4cli/src/assets/sc39.png delete mode 100644 portal-4cli/src/assets/search_data.jpg delete mode 100644 portal-4cli/src/assets/search_general.jpg delete mode 100644 portal-4cli/src/assets/search_general_2.jpg delete mode 100644 portal-4cli/src/assets/search_general_3.jpg delete mode 100644 portal-4cli/src/assets/search_journals.jpg delete mode 100644 portal-4cli/src/assets/search_organizations.jpg delete mode 100644 portal-4cli/src/assets/search_pubs_1.jpg delete mode 100644 portal-4cli/src/assets/search_registries.jpg delete mode 100644 portal-4cli/src/assets/sitemap.xml delete mode 100644 portal-4cli/src/assets/sky_bw3.png delete mode 100644 portal-4cli/src/assets/unlock.svg delete mode 100644 portal-4cli/src/environments/environment.prod.ts delete mode 100644 portal-4cli/src/environments/environment.ts delete mode 100644 portal-4cli/src/index.html delete mode 100644 portal-4cli/src/main.server.ts delete mode 100644 portal-4cli/src/main.ts delete mode 100644 portal-4cli/src/polyfills.ts delete mode 100644 portal-4cli/src/styles.css delete mode 100644 portal-4cli/src/tsconfig.app.json delete mode 100644 portal-4cli/src/tsconfig.server.json delete mode 100644 portal-4cli/static.paths.ts delete mode 100644 portal-4cli/tsconfig.json delete mode 100644 portal-4cli/webpack.server.config.js diff --git a/portal-2/.editorconfig b/portal-2/.editorconfig deleted file mode 100644 index f1cc3ad3..00000000 --- a/portal-2/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -# http://editorconfig.org - -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true - -[*.md] -insert_final_newline = false -trim_trailing_whitespace = false diff --git a/portal-2/.gitignore b/portal-2/.gitignore deleted file mode 100644 index 8d2371f3..00000000 --- a/portal-2/.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -/__build__ -/__server_build__ -/node_modules -/typings -/tsd_typings/ -npm-debug.log - -/dist/ - -.idea -*.ngfactory.ts -*.css.shim.ts - -.DS_Store - -webpack.records.json - -/npm-debug.log.* diff --git a/portal-2/README.md b/portal-2/README.md deleted file mode 100644 index e0546bbf..00000000 --- a/portal-2/README.md +++ /dev/null @@ -1,147 +0,0 @@ - -

- - Universal Angular 2 - -

- -# Angular 2 Universal Starter [![Universal Angular 2](https://img.shields.io/badge/universal-angular2-brightgreen.svg?style=flat)](https://github.com/angular/universal) -> Server-Side Rendering for Angular 2 - -A minimal Angular 2 starter for Universal JavaScript using TypeScript 2 and Webpack 2 - -> If you're looking for the Angular Universal repo go to [**angular/universal**](https://github.com/angular/universal) - -[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy) - - -## Installation - -* `npm install` - -## Serve - -* `npm start` to build your client app and start a web server -* `npm run build` to prepare a distributable bundle - -## Development -* run `npm start` and `npm run watch` in two separate terminals to build your client app, start a web server, and allow file changes to update in realtime - -## Watch files -* `npm run watch` to build your client app and start a web server - -## AoT and Prod -* `npm run build:prod:ngc` to compile the ngfactory files and build prod - -###### -npm run build:prod:ngc -PORT = XXXX npm run server - -## Universal "Gotchas" - -> When building Universal components in Angular 2 there are a few things to keep in mind. - - - To use `templateUrl` or `styleUrls` you must use **`angular2-template-loader`** in your TS loaders. - - This is already setup within this starter repo. Look at the webpack.config file [here](https://github.com/angular/universal-starter/blob/master/webpack.config.ts) for details & implementation. - - **`window`**, **`document`**, **`navigator`**, and other browser types - _do not exist on the server_ - so using them, or any library that uses them (jQuery for example) will not work. You do have some options, if you truly need some of this functionality: - - If you need to use them, consider limiting them to only your main.client and wrapping them situationally with the imported *isBrowser / isNode* features from Universal. `import { isBrowser, isNode } from 'angular2-universal'`; - - Another option is using `DOM` from ["@angular/platform-browser"](https://github.com/angular/angular/blob/e3687706c71beb7c9dbdae1bbb5fbbcea588c476/modules/%40angular/platform-browser/src/dom/dom_adapter.ts#L34) - - **Don't manipulate the nativeElement directly**. Use the _Renderer_. We do this to ensure that in any environment we're able to change our view. -``` -constructor(element: ElementRef, renderer: Renderer) { - renderer.setElementStyle(element.nativeElement, 'font-size', 'x-large'); -} -``` - - The application runs XHR requests on the server & once again on the Client-side (when the application bootstraps) - - Use a [UniversalCache](https://github.com/angular/universal-starter/blob/master/src/%2Bapp/shared/model/model.service.ts#L34-L50) instead of regular Http, to save certain requests so they aren't re-ran again on the Client. ([Example useage here](https://github.com/angular/universal-starter/blob/cc71e2d5b2d783f2bb52eebd1b5c6fa0ba23f08a/src/%2Bapp/%2Bhome/home.component.ts#L22-L24)) - - Know the difference between attributes and properties in relation to the DOM. - - Keep your directives stateless as much as possible. For stateful directives, you may need to provide an attribute that reflects the corresponding property with an initial string value such as url in img tag. For our native `` element the src attribute is reflected as the src property of the element type HTMLImageElement. - -### Brotli Compression Support - -To enable Brotli compression for server response with fallback for gzip. Install the following packages -``` -npm install --save-dev iltorb accepts @types/accepts express-interceptor memory-cache @types/memory-cache -``` -and replace the following code from src/server.aot.ts. -``` - import * as compression from 'compression'; - - app.use(compression()); -``` -with -``` -import * as mcache from 'memory-cache'; -const { gzipSync } = require('zlib'); -const accepts = require('accepts'); -const { compressSync } = require('iltorb'); -const interceptor = require('express-interceptor'); - -app.use(interceptor((req, res)=>({ - // don't compress responses with this request header - isInterceptable: () => (!req.headers['x-no-compression']), - intercept: ( body, send ) => { - const encodings = new Set(accepts(req).encodings()); - const bodyBuffer = new Buffer(body); - // url specific key for response cache - const key = '__response__' + req.originalUrl || req.url; - let output = bodyBuffer; - // check if cache exists - if (mcache.get(key) === null) { - // check for encoding support - if (encodings.has('br')) { - // brotli - res.setHeader('Content-Encoding', 'br'); - output = compressSync(bodyBuffer); - mcache.put(key, {output, encoding: 'br'}); - } else if (encodings.has('gzip')) { - // gzip - res.setHeader('Content-Encoding', 'gzip'); - output = gzipSync(bodyBuffer); - mcache.put(key, {output, encoding: 'gzip'}); - } - } else { - const { output, encoding } = mcache.get(key); - res.setHeader('Content-Encoding', encoding); - send(output); - } - send(output); - } -}))); -``` -this will check the support, compress and cache the response. - -## Edge case of server compatibility with Promise polyfills - -If you have node modules with promise polyfill dependency on server - there is chance to get the following exception: -``` -Error: Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten. -``` -It occurs because [Zone.js](https://github.com/angular/zone.js/) Promise implementation is not -detected as Promise by some polyfills (e.g. [es6-promise](https://github.com/stefanpenner/es6-promise) before 4.x). - -To sort it out, you need such polyfills initialized before zone.js. Zone.js is initialized in 'angular2-universal-polyfills' -import of [server.ts](https://github.com/angular/universal-starter/blob/master/src/server.ts#L4). So import problematic -modules before this line. - -### Documentation -[Design Doc](https://docs.google.com/document/d/1q6g9UlmEZDXgrkY88AJZ6MUrUxcnwhBGS0EXbVlYicY) - -### Videos -Angular 2 Universal Patterns - ng-conf, May 2016 -[![Angular 2 Universal Patterns](http://img.youtube.com/vi/TCj_oC3m6_U/0.jpg)](https://www.youtube.com/watch?v=TCj_oC3m6_U) - -Angular Universal Source Code - ReadTheSource, January 2016 -[![Angular Universal Source Code](http://img.youtube.com/vi/qOjtFjXoebY/0.jpg)](https://www.youtube.com/watch?v=qOjtFjXoebY) - -Full Stack Angular 2 - AngularConnect, Oct 2015 -[![Full Stack Angular 2](https://img.youtube.com/vi/MtoHFDfi8FM/0.jpg)](https://www.youtube.com/watch?v=MtoHFDfi8FM) - -Angular 2 Server Rendering - Angular U, July 2015 -[![Angular 2 Server Rendering](http://img.youtube.com/vi/0wvZ7gakqV4/0.jpg)](http://www.youtube.com/watch?v=0wvZ7gakqV4) - -## [preboot.js](https://github.com/angular/preboot) -> Control server-rendered page and transfer state before client-side web app loads to the client-side-app. - -# License -[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](/LICENSE) diff --git a/portal-2/app.json b/portal-2/app.json deleted file mode 100644 index 1762bb6b..00000000 --- a/portal-2/app.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "Angular 2 Universal Starter", - "description": "Angular 2 Universal starter kit by @AngularClass", - "repository": "https://github.com/angular/universal-starter", - "logo": "https://cloud.githubusercontent.com/assets/1016365/10639063/138338bc-7806-11e5-8057-d34c75f3cafc.png", - "env": { - "NPM_CONFIG_PRODUCTION": { - "description": "Install `webpack` and other development modules when deploying to allow full builds.", - "value": "false" - } - } -} diff --git a/portal-2/empty.js b/portal-2/empty.js deleted file mode 100644 index b8ab065d..00000000 --- a/portal-2/empty.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - NgProbeToken: {}, - _createConditionalRootRenderer: function(rootRenderer, extraTokens, coreTokens) { - return rootRenderer; - }, - __platform_browser_private__: {} -}; diff --git a/portal-2/minifyScript b/portal-2/minifyScript deleted file mode 100755 index ea74c003..00000000 --- a/portal-2/minifyScript +++ /dev/null @@ -1,36 +0,0 @@ -if [ "$1" != "" ]; then - - echo "Find html files in $1"; - find $1 -name "*.html" -type f - echo " "; - echo " "; - echo " "; - files=( $(find $1 -name "*.html" -type f) ) - - echo " Minifying..."; - echo " "; - total = 0; - for entry in $(find $1 -name "*.html" -type f) - do - echo - s=$(stat -c%s "$entry"); - echo "Size of $entry = $s bytes."; - cat $entry | sed -e :a -re 's///g;/ -
-
- - -
-
- - - - OpenAIRE uses cookies in order to function properly.
- Cookies are small pieces of data that websites store in your browser to allow us to give you the best browsing experience possible. - By using the OpenAIRE portal you accept our use of cookies. Read more - - -
- - -` - -}) -export class AppComponent { - isClient:boolean = false; - constructor(private config: ConfigurationService) {} - - ngOnInit() { - - if (typeof document !== 'undefined') { - try{ - this.isClient = true; - }catch (e) { - } - } - } -} diff --git a/portal-2/src/app/app.module.ts b/portal-2/src/app/app.module.ts deleted file mode 100755 index f35b9e4b..00000000 --- a/portal-2/src/app/app.module.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { NgModule } from '@angular/core'; -import { FormsModule } from '@angular/forms'; -import { SharedModule } from './shared/shared.module'; -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; -import {SharedComponentsModule} from './sharedComponents/sharedComponents.module'; //navbar -import { ErrorModule } from './error/error.module'; -import { CacheService } from './shared/cache.service'; -import { ConfigurationService } from './utils/configuration/configuration.service'; -import { CookieLawModule } from './sharedComponents/cookie-law/cookie-law.module'; -// import { XSRFStrategy, CookieXSRFStrategy, RequestOptions } from '@angular/http'; - -@NgModule({ - declarations: [ AppComponent ], - imports: [ - SharedModule, - - SharedComponentsModule, - AppRoutingModule, - ErrorModule, - CookieLawModule - ], exports:[], - providers:[CacheService, ConfigurationService - // { provide: XSRFStrategy, useFactory: cookieStrategy }, - // { provide: RequestOptions, useClass: ExRequestOptions} - - -] - -}) -export class AppModule { -} - -export { AppComponent } from './app.component'; -export function cookieStrategy() { - // return new CookieXSRFStrategy('X-Csrf-Token','X-XSRF-TOKEN'); - // return new CookieXSRFStrategy('lalala','lalala'); -} diff --git a/portal-2/src/app/claims/claim-utils/claim.ts b/portal-2/src/app/claims/claim-utils/claim.ts deleted file mode 100644 index b5378c5f..00000000 --- a/portal-2/src/app/claims/claim-utils/claim.ts +++ /dev/null @@ -1,15 +0,0 @@ -export class Claim { - id: string; - sourceType: string; - targetType: string; - sourceId: string; - targetId: string; - date: string; - DOI: string; - project: Project - userMail: string; - -} -export class Project{ - -} diff --git a/portal-2/src/app/claims/claim-utils/claimContextSearchForm.component.ts b/portal-2/src/app/claims/claim-utils/claimContextSearchForm.component.ts deleted file mode 100644 index 8d1a8740..00000000 --- a/portal-2/src/app/claims/claim-utils/claimContextSearchForm.component.ts +++ /dev/null @@ -1,343 +0,0 @@ -import {Component, Input,Output, EventEmitter, ViewChild} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import { Router} from '@angular/router'; -import {ContextsService} from './service/contexts.service'; -import {ClaimContext} from './claimEntities.class'; -import { StaticAutoCompleteComponent } from '../../utils/staticAutoComplete/staticAutoComplete.component'; -declare var UIkit:any; -import {Session} from '../../login/utils/helper.class'; -import {ErrorCodes} from '../../login/utils/guardHelper.class'; - -@Component({ - // moduleId: module.id, - selector: 'claim-contexts-search-form', - template: ` - -
-
Search for Communities
- - - - - -
- - - - - -
- - -
Or Browse through categories
- - - -
- - ` - -}) -export class ClaimContextSearchFormComponent { -// @Input() public inline:boolean = false ; // for claimed started from landing pages -public showComponent:boolean = true ; // for claimed started from landing pages -@Input() public selectedList; -//The following need to be kept in case we have to save the current state -@Input() public projects; -@Input() public results; -@Input() public inlineEntity; -public selectedCommunityId:string = "0"; -public selectedCategoryId:string ="0"; -// @Output() contextSelected = new EventEmitter(); - -@ViewChild (StaticAutoCompleteComponent) autocomplete : StaticAutoCompleteComponent ; - -public query = ''; -public filteredList = []; -public communities:any; -public selectedCommunityLabel:string = "Community:"; - -public categories:any; -public selectedCategoryLabel:string ="Category:"; -public concepts = []; -public conceptsClass = []; -public conceptsClassDisplay = []; -public conceptsCategoryLoading = []; -public warningMessage = ""; -public infoMessage = ""; -public loading:boolean = false; -public error:boolean = false; - -ngOnInit() { - this.getCommunities(); -} -constructor(private _contextService: ContextsService,private router: Router) { - -} - -select($event){ - var item = $event.value; - this.addNewContext( this.selectedCommunityLabel, this.selectedCategoryLabel, item); - } -isSelected(id):boolean{ - for (var _i = 0; _i < this.selectedList.length; _i++) { - let item = this.selectedList[_i]; - if(item.concept.id == id){ - return true; - // this.warningMessage = "Concept already in selected list"; - } - } - return false; -} - addNewContext(community,category,concept){ - var context: ClaimContext= { community: community, category: category, concept: concept }; - var found:boolean = false; - this.warningMessage = ""; - if (!this.isSelected(context.concept.id)) { - - this.selectedList.push(context); - UIkit.notification({ - message : 'A new concept is selected.', - status : 'info', - timeout : 1000, - pos : 'top-center' - }); - - }else{ - UIkit.notification({ - message : 'The concept is already on your list.', - status : 'warning', - timeout : 1000, - pos : 'top-center' - }); - } -} - -getCommunities () { - if(!Session.isValidAndRemove()){ - this.saveStateAndRedirectLogin(); - - }else{ - this.loading = true; - var token=Session.getUserJwt(); - this._contextService.getCommunities().subscribe( - data => { - this.communities = data.communities; - this.loading = false; - }, - err => { - console.log(err); - this.loading = false; - this.error = true; - } - ); - } - } - getCategories () { - this.loading = true; - this.categories=[]; - if(this.selectedCommunityId != '0'){ - if(!Session.isValidAndRemove()){ - this.saveStateAndRedirectLogin(); - - }else{ - var token=Session.getUserJwt(); - this._contextService.getCategories(this.selectedCommunityId).subscribe( - data => { - - this.categories = (Array.isArray(data.category))? data.category:[data.category]; - this.concepts = []; - this.addCommunityInConcepts(); - this.filteredList = []; - if (this.query !== ""){ - var event = {value: ""}; - event.value = this.query; - } - this.loading = false; - }, - err => { - console.log(err); - this.loading = false; - } - ); - } - } - } - getConcepts () { - this.loading = true; - if(this.selectedCategoryId != '0'){ - if(!Session.isValidAndRemove()){ - this.saveStateAndRedirectLogin(); - }else{ - this.concepts = []; - var token=Session.getUserJwt(); - this._contextService.getConcepts(this.selectedCategoryId, "",true).subscribe( - data => { - - this.concepts =data; - this.addCommunityInConcepts(); - if (this.query !== ""){ - var event = {value: ""}; - event.value = this.query; - // this.filter(event); - } - this.loading = false; - }, - err => { - console.log(err); - this.loading = false; - } - ); - } - }else{ - this.concepts=[]; - this.loading = false; - } - } - displaySubcategory(id) { - if(this.conceptsClassDisplay[id] != null){ - this.conceptsClassDisplay[id] = !this.conceptsClassDisplay[id]; - - }else{ - this.conceptsClassDisplay[id] = true; - } - } - browseConcepts (categoryId) { - if(!Session.isValidAndRemove()){ - this.saveStateAndRedirectLogin(); - }else{ - if(this.conceptsClass[categoryId] != null){ - this.conceptsClassDisplay[categoryId] = !this.conceptsClassDisplay[categoryId]; - return; - }else{ - this.conceptsClassDisplay[categoryId] = true; - } - this.conceptsClass[categoryId] = []; - var token=Session.getUserJwt(); - this.conceptsCategoryLoading[categoryId] = true; - this._contextService.getConcepts(categoryId, "",false).subscribe( - data => { - var concepts = (Array.isArray(data))? data:[data]; - for(var i=0;i { - console.log(err); - this.conceptsCategoryLoading[categoryId] = false; - } - ); - } - - } - communityChanged(){ - console.log(this.selectedCommunityId +" "); - this.warningMessage = ""; - this.infoMessage = ""; - for(var i = 0; i< this.communities.length; i++){ - if(this.communities[i].id==this.selectedCommunityId){ - this.selectedCommunityLabel = this.communities[i].label; - break; - } - } - this.selectedCategoryId = "0"; - this.selectedCategoryLabel="Select Category:"; - this.getCategories(); - } - categoryChanged(){ - this.warningMessage = ""; - this.infoMessage = ""; - for(var i = 0; i< this.categories.length; i++){ - if(this.categories[i].id==this.selectedCategoryId){ - this.selectedCategoryLabel = this.categories[i].label; - break; - } - } - this.getConcepts(); - } -addCommunityInConcepts(){ - this.concepts.push({"id":this.selectedCommunityId, "label":this.selectedCommunityLabel}); - this.autocomplete.updateList(this.concepts); -} -saveStateAndRedirectLogin(){ - if(this.projects != null){ - localStorage.setItem("projects", JSON.stringify(this.projects)); - } - localStorage.setItem("contexts", JSON.stringify(this.selectedList)); - if(this.results != null){ - localStorage.setItem("results", JSON.stringify(this.results)); - } - if(this.inlineEntity != null){ - localStorage.setItem("inlineEntity", JSON.stringify(this.inlineEntity)); - } - - this.router.navigate(['/user-info'], { queryParams: { "errorCode": ErrorCodes.NOT_VALID, "redirectUrl": this.router.url } }); -} -} diff --git a/portal-2/src/app/claims/claim-utils/claimContextSearchForm.module.ts b/portal-2/src/app/claims/claim-utils/claimContextSearchForm.module.ts deleted file mode 100644 index 345d2c93..00000000 --- a/portal-2/src/app/claims/claim-utils/claimContextSearchForm.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core'; - -import { SharedModule } from '../../shared/shared.module'; -import { ClaimContextSearchFormComponent } from './claimContextSearchForm.component'; - import{ContextsServiceModule} from './service/contextsService.module'; - import {StaticAutocompleteModule} from '../../utils/staticAutoComplete/staticAutoComplete.module'; - import { RouterModule } from '@angular/router'; - -@NgModule({ - imports: [ - SharedModule,RouterModule, - ContextsServiceModule, - StaticAutocompleteModule - - ], - declarations: [ - ClaimContextSearchFormComponent - ], exports: [ClaimContextSearchFormComponent ] -}) -export class ClaimContextSearchFormModule { } diff --git a/portal-2/src/app/claims/claim-utils/claimEntities.class.ts b/portal-2/src/app/claims/claim-utils/claimEntities.class.ts deleted file mode 100644 index 7d866cea..00000000 --- a/portal-2/src/app/claims/claim-utils/claimEntities.class.ts +++ /dev/null @@ -1,100 +0,0 @@ -//Classes used in linking / inlinelinking when selecting an entity -export class ClaimResult{ - public id: string; - public type: string; - public source: string; - public title: string; - public url: string; - public result: any; - public accessRights: string = "OPEN"; - public embargoEndDate: string; - public date: string; - public authors: string[] =[]; - public publisher: string; - public description: string; - public resourceType:string; - - public static generateResult(item, itemId,itemSource,itemType, itemUrl, itemTitle, date, accessmode){ - - var result: ClaimResult = new ClaimResult(); - result.id = itemId; - result.type = itemType; - result.source = itemSource; - - result.title = (Array.isArray(itemTitle) && itemTitle.length > 0 )?itemTitle[0]:itemTitle; - result.url = itemUrl; - result.accessRights = 'OPEN'; - result.date = date; - result.result = item; - if(item.publisher){ - result.publisher = item.publisher; - } - - if(itemSource == 'datacite'){ - - result.publisher = item.attributes['container-title']; - if(item.attributes.author){ - result.authors =[] - for(var i=0; i< item.attributes.author.length; i++){ - result.authors.push((item.attributes.author[i].family)?item.attributes.author[i].family+', '+item.attributes.author[i].given:item.attributes.author[i].literal); - } - } - - // result = {id: itemId, type :itemType, source : itemSource, title: itemTitle,url: itemUrl, result: item, accessRights: 'OPEN', embargoEndDate: this.nextDate, date : date}; - }else if (itemSource == 'openaire'){ - //TODO put right access rights - // result = {id:itemId, type :itemType, source : itemSource, title: itemTitle,url: itemUrl, result: item, accessRights: accessMode, embargoEndDate: this.nextDate, date: date}; - // result = {id:itemId, type :itemType, source : itemSource, title: itemTitle,url: itemUrl, result: item, accessRights: accessmode, embargoEndDate: this.nextDate, date : date}; - result.embargoEndDate = accessmode; - - }else if(itemSource == 'crossref'){ - date = (date == null) ? null : date.substring(0,10); - result.date = date; - result.resourceType = item.type; - result.description = item.abstract; - if(item.author){ - result.authors =[] - for(var i=0; i< item.author.length; i++){ - result.authors.push(item.author[i].family +" "+ item.author[i].given ); - } - } - // result = {id: itemId, type :itemType, source : itemSource, title: itemTitle,url: itemUrl, result: item, accessRights: 'OPEN', embargoEndDate: this.nextDate, date: date}; - }else if (itemSource == 'orcid'){ - date = (date == null) ? null : date + "-01.-01" - result.date = date; - if(item['work-type']){ - result.resourceType = item.type; - - } - if(item.contributors){ - result.authors =[] - for(var i=0; i< item.contributors.length; i++){ - result.authors.push(item.contributors[i]); - } - } - - } - return result; - } -} -export class ClaimProject{ - public funderId: string; - public funderName: string; - public projectId: string; - public projectName: string; - public projectAcronym: string; - public startDate: string; - public endDate: string; - public code: string; - public jurisdiction: string; - public fundingLevel0: string; - - -} - -export class ClaimContext{ - public community: string; - public category: string; - public concept:any; - -} diff --git a/portal-2/src/app/claims/claim-utils/claimProjectSearchForm.component.ts b/portal-2/src/app/claims/claim-utils/claimProjectSearchForm.component.ts deleted file mode 100644 index d6a7c1fb..00000000 --- a/portal-2/src/app/claims/claim-utils/claimProjectSearchForm.component.ts +++ /dev/null @@ -1,194 +0,0 @@ -import {Component, Input,Output, ElementRef, EventEmitter, ViewChild} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {SearchProjectsService} from '../../services/searchProjects.service'; -import {ProjectService} from '../../landingPages/project/project.service'; -// import {ModalLoading} from '../../utils/modal/loading.component'; -import { Subject } from 'rxjs/Subject'; -import {ClaimProject} from './claimEntities.class'; -declare var UIkit:any; -@Component({ - selector: 'claim-projects-search-form', - // styleUrls: ['/autoComplete.component.css'], - - template: ` -
-
- - -
- Search for projects -
- - -
-
- - - -
- ` - -}) -export class ClaimProjectsSearchFormComponent { - ngOnInit() { - this.getFunders(); - } - // @ViewChild (ModalLoading) loading : ModalLoading ; - - // @Input() public inline: boolean = false ; // for claimed started from landing pages - public query = ''; - @Input() public selectedProjects=[] ; - public elementRef; - - public funders:string[]; - public selectedFunderId:string ="0"; - selectedFunderName:string ="Select funder:"; - @Output() projectSelected = new EventEmitter(); - - public projects:string[]; - public warningMessage = ""; - public infoMessage = ""; - - // public searchTermStream = new Subject(); - // filtered: Observable<{}> = this.searchTermStream - // .debounceTime(300).distinctUntilChanged() - // .switchMap((term: string) => this._projectService.searchForProjectsObs(term, this.selectedFunderId)); - public tries:number = 0 ; - public keywordlimit = 3; - -constructor(private _service: ProjectService, private _projectService: SearchProjectsService, myElement: ElementRef) { - this.elementRef = myElement; -} - - -// search() { -// console.info("heeere "+this.query ); -// this.infoMessage = ""; -// // this.filtered = []; -// if(this.query == ""){ -// this.tries = 0; -// this.warningMessage = ""; -// } else if(this.query && this.query.length < this.keywordlimit){ -// this.tries++; -// if(this.tries == this.keywordlimit -1 ){ -// this.warningMessage = "Type at least " + this.keywordlimit + " characters"; -// this.tries = 0; -// } -// }else{ -// console.info("doo the search "+this.query ); -// -// this.tries = 0; -// this.warningMessage = ""; -// this.searchTermStream.next(this.query); -// -// } -// -// } -select(item){ - this.query = ""; - // this.searchTermStream.next(this.query); //clear - item = item.value; - var project: ClaimProject = new ClaimProject(); - project.funderId = (this.selectedFunderId=="0")?item.funderId:this.selectedFunderId; - project.funderName = (this.selectedFunderId=="0")?item.funderName:this.selectedFunderName; - project.projectId = item.id; - project.projectName = item.projectName; - project.projectAcronym = item.projectAcronym; - project.startDate = item.startDate; - project.endDate = item.endDate; - project.code = item.code; - project.jurisdiction = item.jurisdiction; - project.fundingLevel0 = item.fundingLevel0; - - console.log(item); - - - // this._service.getProjectDates(project.projectId).subscribe( - // data => { - // project.startDate = data.startDate; - // project.endDate = data.endDate; - // }, - // err => console.log(err) - // ); - var index:number =this.selectedProjects.indexOf(project); - var found:boolean = false; - this.warningMessage = ""; - - for (var _i = 0; _i < this.selectedProjects.length; _i++) { - let item = this.selectedProjects[_i]; - if(item.projectId == project.projectId){ - found=true; - this.warningMessage = "Project already in selected list"; - } - } - - if (!found) { - this.selectedProjects.push(project); - this.projectSelected.emit({ - value: true - }); - UIkit.notification({ - message : 'A new project is selected.', - status : 'info', - timeout : 1000, - pos : 'top-center' - }); - }else{ - UIkit.notification({ - message : 'The project is already on your list.', - status : 'warning', - timeout : 1000, - pos : 'top-center' - }); - } - -} -showItem(item):string{ - return ((item.field[1]['@value'])?item.field[1]['@value']+" - ":"" ) + item.field[3]['@value']; -} -remove(item){ - var index:number =this.selectedProjects.indexOf(item); - if (index > -1) { - this.selectedProjects.splice(index, 1); - } - -} -handleClick(event){ - var clickedComponent = event.target; - var inside = false; - do { - if (clickedComponent === this.elementRef.nativeElement) { - inside = true; - } - clickedComponent = clickedComponent.parentNode; - } while (clickedComponent); - -} -getFunders () { - console.info("Getting Funders...."); - this._projectService.getFunders().subscribe( - data => { - this.funders = data[1]; - console.log("this.funders"); - }, - err => console.log(err) - ); - } - - getProjects () { - if(this.selectedFunderId != '0'){ - - } - } -funderChanged(funderId:string, funderName:string){ - this.selectedFunderId = funderId; - this.selectedFunderName = funderName; - console.info("Selected funder:"+this.selectedFunderId+ ' name:'+funderName ); - -} - -} diff --git a/portal-2/src/app/claims/claim-utils/claimProjectSearchForm.module.ts b/portal-2/src/app/claims/claim-utils/claimProjectSearchForm.module.ts deleted file mode 100644 index 660cb500..00000000 --- a/portal-2/src/app/claims/claim-utils/claimProjectSearchForm.module.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { NgModule } from '@angular/core'; - -import { SharedModule } from '../../shared/shared.module'; -import { CommonModule } from '@angular/common'; - -import {ClaimProjectsSearchFormComponent} from './claimProjectSearchForm.component'; -// import {LoadingModalModule} from '../../utils/modal/loadingModal.module'; - -import {ProjectServiceModule} from '../../landingPages/project/projectService.module'; -import {ProjectsServiceModule} from '../../services/projectsService.module'; -import {EntitiesAutocompleteModule} from '../../utils/entitiesAutoComplete/entitiesAutoComplete.module'; - - @NgModule({ - imports: [ - SharedModule, CommonModule, - // LoadingModalModule, - ProjectServiceModule, ProjectsServiceModule, EntitiesAutocompleteModule - ], - providers:[ - ], - declarations: [ - ClaimProjectsSearchFormComponent - - ], - exports: [ClaimProjectsSearchFormComponent ] -}) -export class ClaimProjectsSearchFormModule { } diff --git a/portal-2/src/app/claims/claim-utils/claimResultSearchForm.component.html b/portal-2/src/app/claims/claim-utils/claimResultSearchForm.component.html deleted file mode 100644 index 218ea6f3..00000000 --- a/portal-2/src/app/claims/claim-utils/claimResultSearchForm.component.html +++ /dev/null @@ -1,188 +0,0 @@ -
-
Search for research results
- - - - - -
-
- - -
-
- - - - -
-
- -
-
-
-
    -
  • -
    - {{item.title}} - {{item.title}} - -
    - - - -
  • -
-
-
-
-
-
- - - - -
-
- -
-
-
-
    -
  • -
    - {{result['title'].name}} - {{result['title'].name}} - -
    - - - - -
  • -
-
-
-
-
-
- - - -
No results found
- -
- Results for - {{authorGivenName}} {{authorFamilyName}} - {{authorId}} : - -
Not the author you are looking for? - - - - - - - -
- - -
-
- -
- -
-
-
    -
  • -
    - {{item['work-title']['title'].value}} - -
    - - - -
  • -
-
No results found
-
-
-
-
-
- - - - -
-
-
- -
-
-
-
    -
  • -
    - {{item.attributes.title}} - {{item.attributes.title}} - - -
    - - - -
  • -
- -
-
-
-
- - - - -
-
-
- -
-
-
-
    -
  • -
    - {{result['title'].name}} - {{result['title'].name}} - - - -
    - - - - -
  • -
-
-
-
-
diff --git a/portal-2/src/app/claims/claim-utils/claimResultSearchForm.component.ts b/portal-2/src/app/claims/claim-utils/claimResultSearchForm.component.ts deleted file mode 100644 index 26b6cd4d..00000000 --- a/portal-2/src/app/claims/claim-utils/claimResultSearchForm.component.ts +++ /dev/null @@ -1,587 +0,0 @@ -import {Component, Input, Output, EventEmitter} from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import {SearchCrossrefService} from '../claim-utils/service/searchCrossref.service'; -import {SearchOrcidService} from '../claim-utils/service/searchOrcid.service'; -import {SearchPublicationsService} from '../../services/searchPublications.service'; -import { SearchDataciteService } from '../claim-utils/service/searchDatacite.service'; -import {SearchDatasetsService} from '../../services/searchDatasets.service'; - -import { ErrorCodes} from '../../utils/properties/openaireProperties'; -import {ClaimResult} from '../claim-utils/claimEntities.class'; -import{DOI} from '../../utils/string-utils.class'; -declare var UIkit:any; - -@Component({ - selector: 'claim-result-search-form', - templateUrl: 'claimResultSearchForm.component.html', - -}) -export class ClaimResultSearchFormComponent { - constructor (private _searchDataciteService: SearchDataciteService, private _searchDatasetsService:SearchDatasetsService, - private _searchCrossrefService: SearchCrossrefService,private _searchOrcidService: SearchOrcidService, private _searchPublicationsService: SearchPublicationsService, - private route: ActivatedRoute) { - var myDate = new Date(); - this.todayDate = myDate.getFullYear()+ "-" +(myDate.getMonth() + 1) + "-" + myDate.getDate() ; - this.nextDate = (myDate.getFullYear()+100)+ "-" +(myDate.getMonth() + 1) + "-" + myDate.getDate() ; - - } - ngOnInit() { - if(this.keyword !=null && this.keyword.length > 0){ - this.search(false); - } -} - - - page : number = 1; - size:number = 5; - navigateTo: string = "Search"; - source: string = "datacite"; - type : string = "dataset"; - showSearchResults:boolean=false; - // searchType ="publication"; - @Input() public select:boolean = true ; - @Input() public keyword:string = ''; - @Input() public selectedResults:ClaimResult[]; - // @Output() datasetsChange = new EventEmitter(); - // @Output() publicationsChange = new EventEmitter(); - - // @Output() resultsChange = new EventEmitter(); - - public errorCodes:ErrorCodes = new ErrorCodes(); - - dataciteResults=[]; - dataciteResultsNum:number = null; - // dataciteResultsNum : Observable = null; - dataciteStatus = this.errorCodes.NONE; - datacitePage : number = 1; - - openaireData=[]; - openaireDataNum:number = 0 ; - openaireDataStatus = this.errorCodes.NONE; - openaireDataPage : number = 1; - - public warningMessage = ""; - public infoMessage = ""; - - public todayDate = ''; - public nextDate = ''; - public DOIs:string[] = []; - sub: any; - public searchSource:string = "openaire" - public activeTab:string = "openairePub" - - - crossrefResults=[]; - crossrefResultsNum : number = null; - crossrefPage : number = 1; - crossrefStatus:number = this.errorCodes.NONE; - - openairePubs = []; - openairePubsNum: number ; - openairePubsPage : number = 1; - openairePubsStatus:number = this.errorCodes.NONE; - - orcidResults: string[]; - orcidResultsNum: number ; - totalPages: number; - orcidResultsToShow: string[]; - orcidPage : number = 1; - orcidStatus:number = this.errorCodes.NONE; - authorId: string; - selectAuthorId: string = "0"; - authorGivenName: string; - authorFamilyName: string; - - authorIds: string[]; - authorGivenNames: string[]; - authorFamilyNames: string[]; - - authorsNum : number ; - - reloadOpenaire:boolean = true; - reloadCrossref:boolean = false; - reloadDatacite:boolean = false; - reloadOrcid:boolean = false; - - - - - search(sourceChanged){ - this.warningMessage = ""; - this.infoMessage = ""; - if(!sourceChanged){ - this.DOIs = DOI.getDOIsFromString(this.keyword); - this.reloadOpenaire = true; - this.reloadCrossref = true; - this.reloadDatacite = true; - this.reloadOrcid = true; - } - if((this.searchSource == "all" || this.searchSource == "openaire") && this.reloadOpenaire){ - this.searchOpenairePubs(this.keyword, this.size, 1); - this.searchOpenaireData(this.keyword,this.size,1); - this.reloadOpenaire = false; - } - if((this.searchSource == "all" || this.searchSource == "crossref")&&this.reloadCrossref){ - this.getCrossrefResults(this.keyword, this.size,1); - this.reloadCrossref = false; - } - if((this.searchSource == "all" || this.searchSource == "datacite")&& this.reloadDatacite){ - this.searchDatacite(this.keyword,this.size,1); - this.reloadDatacite = false; - } - if((this.searchSource == "all" || this.searchSource == "orcid")&& this.reloadOrcid){ - this.searchOrcid(this.keyword); - this.reloadOrcid = false; - } - this.showSearchResults = true; - - } - -private getCrossrefResults (term: string, size : number, page : number) { - this.crossrefStatus = this.errorCodes.LOADING; - if( this.DOIs.length > 0 ){ - this._searchCrossrefService.searchCrossrefByDOIs(this.DOIs).subscribe( - data => { - if(data != null) { - this.crossrefResults = data.items; - this.crossrefPage=page; - this.crossrefResultsNum = data['total-results']; - if(data.items == 0){ - this._searchCrossrefService.searchCrossrefResults(term, size, page).subscribe( - data => { - if(data != null) { - this.crossrefResults = data.items; - this.crossrefPage=page; - this.crossrefResultsNum = data['total-results']; - this.crossrefStatus = this.errorCodes.DONE; - - }else{ - this.crossrefStatus = this.errorCodes.ERROR; - } - }, - err =>{ - console.log(err.status); - this.crossrefStatus = this.errorCodes.ERROR; - } - - ); - }else{ - this.crossrefStatus = this.errorCodes.DONE; - } - } - }, - err => { - //console.log(err); - this._searchCrossrefService.searchCrossrefResults(term, size, page).subscribe( - data => { - this.crossrefResults = data.items; - this.crossrefPage=page; - this.crossrefResultsNum = data['total-results']; - this.crossrefStatus = this.errorCodes.DONE; - - }, - err => { - console.log(err.status); - this.crossrefStatus = this.errorCodes.ERROR; - } - - ); - } - ); - - }else{ - - - this._searchCrossrefService.searchCrossrefResults(term, size, page).subscribe( - data => { - if(data != null) { - this.crossrefResults = data.items; - this.crossrefPage=page; - this.crossrefResultsNum = data['total-results']; - this.crossrefStatus = this.errorCodes.DONE; - - }else{ - this.crossrefStatus = this.errorCodes.ERROR; - } - - }, - err => { - console.log(err.status); - this.crossrefStatus = this.errorCodes.ERROR; - } - ); - } - } - private searchOpenairePubs(term: string, size : number, page : number) { - - if(this.DOIs.length > 0 ){ - this.openairePubsStatus = this.errorCodes.LOADING; - this._searchPublicationsService.searchPublicationsByDois(this.DOIs, null, page, size, []).subscribe( - data => { - if(data != null) { - this.openairePubsPage=page; - this.openairePubsNum = data[0]; - this.openairePubs = data[1]; - this.openairePubsStatus = this.errorCodes.DONE; - if(this.openairePubsNum == 0){ - this.openairePubsStatus = this.errorCodes.NONE; - } - }else { - this.openairePubsStatus = this.errorCodes.ERROR; - } - }, - err => { - this.openairePubsStatus = this.errorCodes.ERROR; - console.log(err.status); - } - ); - }else{ - this.openairePubsStatus = this.errorCodes.LOADING; - this._searchPublicationsService.searchPublications('q='+term, null, page, size, []).subscribe( - data => { - if(data != null) { - this.openairePubsPage=page; - this.openairePubsNum = data[0]; - this.openairePubs = data[1]; - this.openairePubsStatus = this.errorCodes.DONE; - if(this.openairePubsNum == 0){ - this.openairePubsStatus = this.errorCodes.NONE; - } - }else { - this.openairePubsStatus = this.errorCodes.ERROR; - } - }, - err => { - this.openairePubsStatus = this.errorCodes.ERROR; - console.log(err.status); - } - ); - } - } - - private searchOrcid (term: string) { - if(this.DOIs.length > 0){ - this.orcidStatus = this.errorCodes.NONE; - return; - } - this.orcidStatus = this.errorCodes.LOADING; - this.authorIds = new Array(); - this.authorGivenNames = new Array(); - this.authorFamilyNames = new Array(); - - this.getOrcidAuthor(term); - - console.info('searchOrcid in searchOrcid file'); - } - - private readData(data: any) { - this.authorIds.push(data[2].path); - - if(data[0] != null) { - this.authorGivenNames.push(data[0].value); - } else { - this.authorGivenNames.push(""); - } - if(data[1] != null) { - this.authorFamilyNames.push(data[1].value); - } else { - this.authorFamilyNames.push(""); - } - } - - private getOrcidAuthor (term: string) { - this.orcidResultsNum = null; - - //passing structures in order to fill them in service - this._searchOrcidService.searchOrcidAuthor(term, this.authorIds, - this.authorGivenNames, this.authorFamilyNames).subscribe( - data => { - if(data != null && data == true) { - this.getOrcidResultsByIndex(0); - } - - this.orcidStatus = this.errorCodes.NONE; - - }, - err => this.errorHandler(err, term) - - ); - } - - private errorHandler(err: any, term: string) { - if(err.status == 404){ - this.getOrcidAuthors(term); - } else { - this.orcidStatus = this.errorCodes.ERROR; - console.log(err.status); - - } - } - - private getOrcidAuthors (term: string) { - this.orcidResultsNum = null; - this.selectAuthorId = "0"; - this.orcidStatus = this.errorCodes.LOADING; - //passing structures in order to fill them in service - this._searchOrcidService.searchOrcidAuthors(term, this.authorIds, - this.authorGivenNames, this.authorFamilyNames).subscribe( - data => { - if(data != null && data == true) { - this.getOrcidResultsByIndex(0); - }else{ - this.orcidStatus = this.errorCodes.ERROR; - } - - }, - err => { - this.orcidStatus = this.errorCodes.ERROR; - console.log(err.status); - } - ); - } - - - private getOrcidResultsByIndex (index:number) { - if(this.authorIds.length > index) { - this.orcidStatus = this.errorCodes.LOADING; - let id = this.authorIds[index]; - this.authorGivenName = this.authorGivenNames[index]; - this.authorFamilyName = this.authorFamilyNames[index]; - this.getOrcidResultsById(id); - } - } - private getOrcidResultsById (id:string) { - if(id=="0"){ - return; - } - var index = this.authorIds.indexOf(id); - this.authorGivenName = this.authorGivenNames[index]; - this.authorFamilyName = this.authorFamilyNames[index]; - this.authorId = id; - console.info("getOrcidResultsById: "+id); - this.orcidStatus = this.errorCodes.LOADING; - this._searchOrcidService.searchOrcidPublications(id).subscribe( - data => { - if(data != null) { - this.orcidResults=data['orcid-work']; - this.orcidResultsNum = data['orcid-work'].length; - this.orcidPage = 1; - if((this.orcidResultsNum % this.size) == 0){ - this.totalPages=parseInt(''+(this.orcidResultsNum/this.size)); - } else{ - this.totalPages=parseInt(''+(this.orcidResultsNum/this.size+1)); - } - - this.orcidResultsToShow = this.orcidResults.slice(0,10); - - this.orcidStatus = this.errorCodes.DONE; - if(this.orcidResultsNum == 0){ - this.orcidStatus = this.errorCodes.NONE; - } - } else { - this.orcidResultsNum = 0; - this.totalPages=0; - this.orcidStatus = this.errorCodes.NONE; - } - - }, - err => { - console.log(err.status); - this.orcidStatus = this.errorCodes.ERROR; - } - ); - - - } - -/* -Is it USED??? -private remove(item){ - this.warningMessage = ""; - this.infoMessage = ""; - var index:number =this.selectedResults.indexOf(item); - item.selected=false; - if (index > -1) { - this.selectedResults.splice(index, 1); - // this.publicationsChange.emit({ - // value: this.selectedResults - // }); - } - - }*/ -private crossrefPageChange($event) { - this.crossrefPage=$event.value; - this.crossrefResults=[]; - console.log("Crossref chaenged "+this.crossrefPage); - this.getCrossrefResults(this.keyword,this.size,this.crossrefPage); -} -private orcidPageChange($event) { - this.orcidPage=$event.value; - this.orcidResultsToShow=[]; - this.orcidResultsToShow = this.orcidResults.slice(($event.value-1)*this.size, $event.value*this.size); -} -private openairePubsPageChange($event) { - this.openairePubsPage=$event.value; - this.searchOpenairePubs(this.keyword,this.size,this.openairePubsPage); -} -datacitePageChange($event) { - this.datacitePage=$event.value; - this.dataciteResults=[]; - this.searchDatacite(this.keyword,10,this.datacitePage); - this.warningMessage = ""; - this.infoMessage = ""; - -} -openaireDataPageChange($event) { - this.openaireDataPage=$event.value; - this.openaireData=[]; - this.searchOpenaireData(this.keyword,10,this.openaireDataPage); - this.warningMessage = ""; - this.infoMessage = ""; - -} - - - private isSelected(id:string){ - - var found:boolean = false; - this.warningMessage = ""; - for (var _i = 0; _i < this.selectedResults.length; _i++) { - let item = this.selectedResults[_i]; - if(item.id == id){ - found=true; - this.warningMessage = "Publication already in selected list"; - } - } - return found; - - - } - // isSelected(id:string){ - // - // var found:boolean = false; - // this.warningMessage = ""; - // for (var _i = 0; _i < this.selectedResults.length; _i++) { - // let item = this.selectedResults[_i]; - // if(item.id == id){ - // found=true; - // break; - // } - // } - // return found; - // } - private searchDatacite (term: string, size : number, page : number) { - this.getDataciteResults(term,size,page); - this.warningMessage = ""; - this.infoMessage = ""; - - } - private searchOpenaireData (term: string, size : number, page : number) { - if(this.DOIs.length > 0 ){ - this.openaireDataStatus = this.errorCodes.LOADING; - this._searchDatasetsService.searchDatasetsByDois(this.DOIs, null, page, size, []).subscribe( - data => { - if(data != null) { - this.openaireDataPage=page; - this.openaireDataNum = data[0]; - this.openaireData = data[1]; - this.openaireDataStatus = this.errorCodes.DONE; - if(this.openaireDataNum == 0){ - this.openaireDataStatus = this.errorCodes.NONE; - } - } - }, - err => { - this.openaireDataStatus = this.errorCodes.ERROR; - console.log(err.status); - } - ); - }else{ - this._searchDatasetsService.searchDatasets('q='+term+'', null, page, size, []).subscribe( - data => { - if(data != null) { - this.openaireDataPage=page; - this.openaireDataNum = data[0]; - this.openaireData = data[1]; - this.openaireDataStatus = this.errorCodes.DONE; - if(this.openaireDataNum == 0){ - this.openaireDataStatus = this.errorCodes.NONE; - } - } - }, - err => { - this.openaireDataStatus = this.errorCodes.ERROR; - console.log(err.status); - } - ); - } - this.warningMessage = ""; - this.infoMessage = ""; - - } - private getDataciteResults (term: string, size : number, page : number) { - this._searchDataciteService.searchDataciteResults(term, size, page).subscribe( - data => { - this.dataciteResults = data.data; - this.datacitePage=page; - this.dataciteResultsNum = data.meta.total; - this.dataciteStatus = this.errorCodes.DONE; - - - }, - err => { - this.dataciteStatus = this.errorCodes.ERROR; - console.log(err); - } - - ); - } - - add(item, itemId,itemSource,itemType, itemUrl, itemTitle, date, accessmode){ - - console.log(' adding ' + itemType + " From " + itemSource+" "+ itemTitle); - var result: ClaimResult = ClaimResult.generateResult(item, itemId,itemSource,itemType, itemUrl, itemTitle, date, accessmode); - - - if (itemSource == 'orcid'){ - if(result.authors.length ==0 ){ - result.authors.push(this.authorGivenName + ', '+ this.authorFamilyName); - } - } - var found:boolean = this.isSelected( result.id); - - this.warningMessage = ""; - if (!found) { - this.selectedResults.push(result); - - UIkit.notification({ - message : 'A new research result is selected.', - status : 'info', - timeout : 1000, - pos : 'top-center' - }); - - - }else{ - this.warningMessage = "Research Data already in selected list"; - UIkit.notification({ - message : 'The research result is already on your list.', - status : 'warning', - timeout : 1000, - pos : 'top-center' - }); - } - - } - - public searchSourceChanged(source){ - this.searchSource = source; - this.activeTab = (source == "openaire" || source == "all")?"openairePub":source; - if(this.keyword && this.keyword.length > 0){ - this.search(true); - } - } - public clickTab(tab){ - this.activeTab = tab; - } -} diff --git a/portal-2/src/app/claims/claim-utils/claimResultSearchForm.module.ts b/portal-2/src/app/claims/claim-utils/claimResultSearchForm.module.ts deleted file mode 100644 index 201c91b2..00000000 --- a/portal-2/src/app/claims/claim-utils/claimResultSearchForm.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NgModule } from '@angular/core'; - -import { SharedModule } from '../../shared/shared.module'; -import { CommonModule } from '@angular/common'; -import {ClaimResultSearchFormComponent} from './claimResultSearchForm.component'; - -import {SearchDataciteServiceModule} from './service/searchDataciteService.module'; - -import {SearchCrossrefServiceModule} from './service/searchCrossrefService.module'; -import {SearchOrcidService} from './service/searchOrcid.service'; - -import {PublicationsServiceModule} from '../../services/publicationsService.module'; -import {DatasetsServiceModule} from '../../services/datasetsService.module'; -import {PagingModule } from '../../utils/paging.module'; - - @NgModule({ - imports: [ - SharedModule, CommonModule, PublicationsServiceModule, DatasetsServiceModule, PagingModule, SearchCrossrefServiceModule, SearchDataciteServiceModule - ], - providers:[ - SearchOrcidService - ], - declarations: [ - ClaimResultSearchFormComponent - - ], - exports: [ClaimResultSearchFormComponent ] -}) -export class ClaimResultSearchFormModule { } diff --git a/portal-2/src/app/claims/claim-utils/displayClaims/displayClaims.component.html b/portal-2/src/app/claims/claim-utils/displayClaims/displayClaims.component.html deleted file mode 100644 index 7a64cc39..00000000 --- a/portal-2/src/app/claims/claim-utils/displayClaims/displayClaims.component.html +++ /dev/null @@ -1,110 +0,0 @@ - -
- -
-
- -
-
- - -
- Filter By: -
-
- - - - -
- -
-
- -
- -
- -
- Show - - - Showing {{(size*page - size +1)}} to {{(size*page>resultsNum)?resultsNum:(size*page)}} of {{resultsNum}} claims - -
-
- - -
- An Error occured. -
-
- You are not allowed to access this page. -
-
- User session is not valid. Please login again. -
- - - -
-
-
- You have selected {{selected.length}} claim(s) -
-
-
- -
- -
-
- - -
-
No entries found.
-
- -
- - - - - - - - - - - - - - - - - - - - - - - -
Research Result Link to Claimed by Claimed Date
{{claim.userMail}}{{claim.date}}
-
- -
- - - - diff --git a/portal-2/src/app/claims/claim-utils/displayClaims/displayClaims.component.ts b/portal-2/src/app/claims/claim-utils/displayClaims/displayClaims.component.ts deleted file mode 100644 index 26cacfb7..00000000 --- a/portal-2/src/app/claims/claim-utils/displayClaims/displayClaims.component.ts +++ /dev/null @@ -1,486 +0,0 @@ -import {Component, ViewChild, Input} from '@angular/core'; -import {Location} from '@angular/common'; -import {Observable} from 'rxjs/Observable'; -import {ActivatedRoute, Router} from '@angular/router'; -import {ClaimsService} from '../service/claims.service'; -import {ModalLoading} from '../../../utils/modal/loading.component'; -import {AlertModal} from '../../../utils/modal/alert'; -import {Session} from '../../../login/utils/helper.class'; - - -@Component({ - selector: 'displayClaims', - templateUrl: 'displayClaims.component.html', - providers:[ ClaimsService] - -}) -export class DisplayClaimsComponent { - constructor (private _claimService: ClaimsService, private route: ActivatedRoute, private _router:Router, private location: Location) { - } - - ngOnInit() { - this.sub = this.route.queryParams.subscribe(params => { - if( this.myClaims){ - this.fetchBy = "User"; - this.fetchId = Session.getUserEmail(); - }else{ - - this.fetchBy = params['fetchBy']; - this.fetchBy = (this.types.indexOf(this.fetchBy) != -1)? this.fetchBy:'All'; - this.fetchId = params['fetchId']; - this.fetchId = this.fetchId?this.fetchId:''; - - } - - let page = (params['page']=== undefined)?1:+params['page']; - let size = (params['size']=== undefined)?10:+params['size']; - - this.keyword = (params['keyword']?params['keyword']:""); - this.inputkeyword = this.keyword; - this.page = ( page <= 0 ) ? 1 : page; - this.size = ( size <= 0 ) ? 10 : size; - this.entityTypes = []//(params['types']?params['types']:[]); - this.setTypes(params['types']); // check the appropriate checkboxes - this.setSortby(params['sort']); - this.getClaims(); - - }); - - } - ngOnDestroy() { - this.sub.unsubscribe(); - } - sub: any; - //string because comes as input from component directive - @Input() enableDelete: boolean = false; - @Input() showUserEmail: boolean = true; - @Input() myClaims: boolean= false ; - @Input() isAdmin:boolean = false; - page : number; - size:number; - sizes = [10,20,30,50]; - keyword:string; // the keyword string to give to the request as parameter - inputkeyword:string; // the string written in the input field (keyword=inputkeyword when its length is bigger than 3 and the user stops typing) - lengths = [10,20,30,50]; - types = ["All","Project","Context","Result","User"]; - @Input() fetchBy:string; - @Input() fetchId:string; - - navigateTo: string = "Claims"; - resultsNum: number ; - claims: string[]; - - @ViewChild (ModalLoading) loading : ModalLoading ; - - //checkboxes: - publicationCB = false; - datasetCB = false; - contextCB = false; - projectCB = false; - entityTypes : string[] =[] ; - - descending = true; - sortby = "date"; - - selected=[]; - deleteMessage:string = ""; - showErrorMessage:boolean = false; - showForbiddenMessage:boolean = false; - userValidMessage:string = ""; - - //params for pagingFormatter to use when navigate to page - params; - @ViewChild(AlertModal) alert; - - claimsDeleted:number = 0; - - getClaims () { - if(!Session.isValidAndRemove()){ - this.userValidMessage = "User session has expired. Please login again."; - - }else{ - var token=Session.getUserJwt(); - this.selected=[]; - var types = ''; - this.showErrorMessage = false; - this.showForbiddenMessage = false; - for (var type of this.entityTypes){ - types+=(types.length>0?'&':'')+"types="+type; - } - if(this.fetchBy =="Project" ){ - this._claimService.getClaimsByProject(this.size,this.page,this.fetchId,this.keyword,this.sortby,this.descending, types).subscribe( - data => { - this.claims = data.data; - this.resultsNum= data.total; - }, - err => { - this.handleErrors(err); - } - ); - }else if(this.fetchBy =="User"){ - this._claimService.getClaimsByUser(this.size,this.page,this.fetchId,this.keyword,this.sortby,this.descending, types).subscribe( - data => { - this.claims = data.data; - this.resultsNum= data.total; - }, - err => { - this.handleErrors(err); - } - ); - }else if(this.fetchBy =="Result"){ - this._claimService.getClaimsByResult(this.size,this.page,this.fetchId,this.keyword,this.sortby,this.descending, types).subscribe( - data => { - this.claims = data.data; - this.resultsNum= data.total; - }, - err => { - this.handleErrors(err); - } - ); - }else if(this.fetchBy =="Context"){ - this._claimService.getClaimsBycontext(this.size,this.page,this.fetchId,this.keyword,this.sortby,this.descending, types).subscribe( - data => { - this.claims = data.data; - this.resultsNum= null; - this.resultsNum= data.total;//data.length; //TODO get the total results num - }, - err => { - this.handleErrors(err); - } - ); - }else{ - this._claimService.getClaims(this.size,this.page,this.keyword,this.sortby,this.descending, types).subscribe( - data => { - this.claims = data.data; - this.resultsNum = null; - this.resultsNum= data.total;//data.length; //TODO get the total results num - }, - err => { - this.handleErrors(err); - } - ); - } - } -} -handleErrors(err){ - - this.showErrorMessage = true; - try{ - var error = err.json() - var code = error.code; - if(code == 403){ - this.showErrorMessage = false; - this.showForbiddenMessage = true; - } - }catch (e) { - console.log("Couldn't parse answer as json") - this.showErrorMessage = true; - } - -} - - goTo(page:number = 1){ - - this.page = page; - - this.location.go(location.pathname,this.getParametersString()); - this.getClaims(); - } - getParameters(){ - var params = {} - if(this.myClaims){ - params={ page: this.page, size: this.size, types: this.entityTypes, keyword : this.keyword, sort: this.getSortby() }; - }else{ - params={ page: this.page, size: this.size, types: this.entityTypes, fetchBy: this.fetchBy, fetchId:this.fetchId, keyword : this.keyword, sort: this.getSortby() }; - } - return params; - } - - getParametersString(){ - var params=''; - params+=(this.page==1?"":(params.length>0?'&':'')+"page="+this.page); - params+=(this.size==10?"":(params.length>0?'&':'')+"size="+this.size); - // params+=(this.entityTypes==''?"":(params.length>0?'&':'')+"types="+this.entityTypes); - var types=""; - for (var type of this.entityTypes){ - types+=(types.length>0?',':'')+type; - } - params+=(types.length>0)?"types="+types:""; - - if(this.isAdmin ){ - params+=(this.fetchBy=='All'?"":(params.length>0?'&':'')+"fetchBy="+this.fetchBy); - params+=(this.fetchId==''?"":(params.length>0?'&':'')+"fetchId="+this.fetchId); - } - params+=(this. getSortby()=='datedesc'?"":(params.length>0?'&':'')+"sort="+this. getSortby()); - params+=(this.keyword==''?"":(params.length>0?'&':'')+"keyword="+this.keyword); - return params; - } - changeSize(size: number ){ - this.goTo(); - } - - clearFilters(){ - this.keyword = ''; - this.inputkeyword = ''; - this.publicationCB = false; - this.projectCB = false; - this.datasetCB = false; - this.contextCB = false; - this.entityTypes = []; - this.goTo(); - } - - changeOrderby(sortby:string){ - if(sortby==this.sortby){ - this.descending = !this.descending; - }else{ - this.sortby = sortby; - this.descending = false; - } - this.goTo(); - } - setSortby(sortby:string){ - if(!sortby|| sortby == "datedesc"){ - this.descending = true; - this.sortby = "date"; - }else if(sortby == "dateasc"){ - this.descending = false; - this.sortby = "date"; - }else if(sortby == "userasc"){ - this.descending = false; - this.sortby = "user"; - }else if(sortby == "userdesc"){ - this.descending = true; - this.sortby = "user"; - }if(sortby =="sourceasc"){ - this.descending = false; - this.sortby = "source"; - }else if(sortby == "sourcedesc"){ - this.descending = true; - this.sortby = "source"; - }else if(sortby == "targetasc"){ - this.descending = false; - this.sortby = "target"; - }else if(sortby == "targetdesc"){ - this.descending = true; - this.sortby = "target"; - } - } - getSortby():string{ - if(this.descending){ - return this.sortby+"desc"; - }else{ - return this.sortby+"asc"; - } - - } - changeType(){ - this.entityTypes = []; - if(this.publicationCB){ - this.entityTypes.push('publication'); - } - if(this.datasetCB){ - this.entityTypes.push('dataset'); - } - if(this.projectCB){ - this.entityTypes.push('project'); - } - if(this.contextCB){ - this.entityTypes.push('context'); - } - - this.goTo(); - } - setTypes(types:string){ - if(!types){ - return; - } - if(types.length > 0){ - this.entityTypes = []; - if(types.indexOf("publication")!=-1){ - this.publicationCB = true; - this.entityTypes.push("publication"); - } - if(types.indexOf("dataset")!=-1){ - this.datasetCB = true; - this.entityTypes.push("dataset"); - } - if(types.indexOf("project")!=-1){ - this.projectCB = true; - this.entityTypes.push("project"); - } - if(types.indexOf("context")!=-1){ - this.contextCB = true; - this.entityTypes.push("context"); - } - } - if(this.publicationCB && this.datasetCB && this.contextCB && this.projectCB){ - this.entityTypes=[]; - } - } - changekeyword(){ - - if(this.inputkeyword.length >= 3 || this.inputkeyword.length == 0 ){ - this.keyword = this.inputkeyword; - this.page = 1; - this.goTo(); - } - - } - select(item:any,event){ - this.deleteMessage=""; - var value = event.currentTarget.checked; - if(value){ - this.selected.push(item); - }else{ - for (var _i = 0; _i < this.selected.length; _i++) { - let claim = this.selected[_i]; - if(claim['id'] == item.id){ - this.selected.splice(_i, 1); - } - } - - - } - } - selectAll(event){ - var value = event.currentTarget.checked; - if(value){ - this.selected = []; - for (var _i = 0; _i < this.claims.length; _i++) { - let claim = this.claims[_i]; - this.selected.push(claim); - } - this.deleteMessage = ""; - }else{ - this.selected = []; - this.deleteMessage=""; - } - } - - isSelected(id:string){ - for (var _i = 0; _i < this.selected.length; _i++) { - let claim = this.selected[_i]; - if(claim['id'] == id){ - return true; - } - } - return false; - } - - - confirmOpen(){ - if(this.selected.length <= 0){ - - }else{ - this.alert.cancelButton = true; - this.alert.okButton = true; - this.alert.alertTitle = "Delete "+this.selected.length+" claim(s)"; - this.alert.message = this.selected.length+" claims will be deleted. Do you want to proceed? "; - this.alert.okButtonText = "Yes"; - this.alert.cancelButtonText = "No"; - this.alert.open(); - } - } - confirmClose(data){ - this.delete(); - } - delete(){ - this.deleteMessage=""; - this.loading.open(); - this.claimsDeleted = 0; - var ids = []; - for (var i = 0; i < this.selected.length; i++){ - var id =this.selected[i].id; - ids.push(id); - // var selected =this.selected[i].id; - // console.warn("Deleting claim with id:"+id); - // this.deleteById(id); - //TODO for multiple concurrent - } - this.batchDeleteById(ids); - } - - deleteById(id:string){ - if(!Session.isValidAndRemove()){ - this.userValidMessage = "User session has expired. Please login again."; - - }else{ - var token=Session.getUserJwt(); - console.log("Deleting claim with id:"+id); - // this._claimService.deleteClaimById(id); - this._claimService.deleteClaimById(id).subscribe( - res => { - console.log('Delete response'+res.code ); - console.log("Deleted claim with id:"+ id); - //remove this claim from the - let newClaims=this.claims; - for (var _i = 0; _i < this.claims.length; _i++) { - let claim = this.claims[_i]; - if(claim['id'] == id){ - newClaims.splice(_i, 1); - } - } - //TODO should call getClaims??? - this.claimsDeleted++; - this.claims = newClaims; - if(this.claimsDeleted == this.selected.length){ - this.resultsNum = this.resultsNum - this.selected.length; - this.loading.close(); - this.selected = []; - } - - - }); - } - } - batchDeleteById(ids:string[]){ - if(!Session.isValidAndRemove()){ - this.userValidMessage = "User session has expired. Please login again."; - - }else{ - var token=Session.getUserJwt(); - console.warn("Deleting claim with ids:"+ids); - this._claimService.deleteBulk(ids).subscribe( - res => { - console.info('Delete response'+res.code ); - console.warn("Deleted ids:"+ res.deletedIds); - console.warn("Not found ids:"+ res.notFoundIds); - //remove this claim from the - let newClaims=this.claims; - for(var id of res.deletedIds){ - for (var _i = 0; _i < this.claims.length; _i++) { - let claim = this.claims[_i]; - if(claim['id'] == id){ - newClaims.splice(_i, 1); - } - } - for (var _i = 0; _i < this.selected.length; _i++) { - let claim = this.selected[_i]; - if(claim['id'] == id){ - this.selected.splice(_i, 1); - } - } - } - this.claims = newClaims; - this.resultsNum = this.resultsNum - res.deletedIds.length; - this.loading.close(); - if(res.deletedIds.length>0){ - this.deleteMessage=this.deleteMessage+'
'+res.deletedIds.length+' claim(s) successfully deleted.
'; - } - if(res.notFoundIds.length>0){ - this.deleteMessage=this.deleteMessage+'
'+res.notFoundIds.length+' claim(s) couldn\'t be deleted.
'; - } - }, err => { - console.log(err); - this.showErrorMessage = true; - this.loading.close(); - - }); - } - } - pageChange($event) { - var page:number = +$event.value - this.goTo(page); - } -} diff --git a/portal-2/src/app/claims/claim-utils/displayClaims/displayClaims.module.ts b/portal-2/src/app/claims/claim-utils/displayClaims/displayClaims.module.ts deleted file mode 100644 index 4c8e0bb0..00000000 --- a/portal-2/src/app/claims/claim-utils/displayClaims/displayClaims.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import {ClaimServiceModule} from '../service/claimsService.module'; -import {DisplayClaimsComponent} from './displayClaims.component'; -import {LoadingModalModule} from '../../../utils/modal/loadingModal.module'; -import {AlertModalModule} from '../../../utils/modal/alertModal.module'; -import {ClaimEntityFormatterModule} from '../entityFormatter/claimEntityFormatter.module'; -import {PagingModule } from '../../../utils/paging.module'; -import {HelperModule} from '../../../utils/helper/helper.module'; - - @NgModule({ - imports: [ - CommonModule, FormsModule, ClaimServiceModule, LoadingModalModule, AlertModalModule, -ClaimEntityFormatterModule, PagingModule, HelperModule - - ], - declarations: [ - DisplayClaimsComponent - - ], - exports: [ - DisplayClaimsComponent - ] -}) -export class DisplayClaimsModule { } diff --git a/portal-2/src/app/claims/claim-utils/entityFormatter/claimEntityFormatter.component.ts b/portal-2/src/app/claims/claim-utils/entityFormatter/claimEntityFormatter.component.ts deleted file mode 100644 index 5055b32f..00000000 --- a/portal-2/src/app/claims/claim-utils/entityFormatter/claimEntityFormatter.component.ts +++ /dev/null @@ -1,39 +0,0 @@ -import {Component, Input} from '@angular/core'; - -//Usage Example " " - -//externalUrl -@Component({ - selector: 'claim-entity', - template: ` -
- - -
-
- - -
-
- - -
-
- - {{entity.title}} -
- ` -}) - -export class ClaimEntityFormatter { - @Input() entity: string[]; - @Input() type: string; - - constructor () {} - - ngOnInit() { - - } - - -} diff --git a/portal-2/src/app/claims/claim-utils/entityFormatter/claimEntityFormatter.module.ts b/portal-2/src/app/claims/claim-utils/entityFormatter/claimEntityFormatter.module.ts deleted file mode 100644 index 01a1d0ac..00000000 --- a/portal-2/src/app/claims/claim-utils/entityFormatter/claimEntityFormatter.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import {ProjectTitleFormatter} from './projectTitleFormatter.component'; -import {PublicationTitleFormatter} from './publicationTitleFormatter.component'; -import {ClaimEntityFormatter} from './claimEntityFormatter.component'; - - @NgModule({ - imports: [ - CommonModule, RouterModule - ], - declarations: [ - ProjectTitleFormatter, PublicationTitleFormatter, ClaimEntityFormatter - - ], - providers: [ ], - exports: [ - ProjectTitleFormatter, PublicationTitleFormatter, ClaimEntityFormatter - - ] -}) -export class ClaimEntityFormatterModule { } diff --git a/portal-2/src/app/claims/claim-utils/entityFormatter/projectTitleFormatter.component.ts b/portal-2/src/app/claims/claim-utils/entityFormatter/projectTitleFormatter.component.ts deleted file mode 100644 index b1b95aa1..00000000 --- a/portal-2/src/app/claims/claim-utils/entityFormatter/projectTitleFormatter.component.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {OpenaireProperties} from '../../../utils/properties/openaireProperties'; -import {RouterHelper} from '../../../utils/routerHelper.class'; - -//Usage Example " " - -@Component({ - selector: 'project-title', - template: ` - - {{project['name']}} ({{project['funderName']}}) - - ` -}) - -export class ProjectTitleFormatter { - @Input() project: string[]; - public url:string; - public routerHelper:RouterHelper = new RouterHelper(); - constructor () {} - - ngOnInit() { - this.url = OpenaireProperties.getsearchLinkToProject() + "?projectId=" + this.project["openaireId"]; - } -} diff --git a/portal-2/src/app/claims/claim-utils/entityFormatter/publicationTitleFormatter.component.ts b/portal-2/src/app/claims/claim-utils/entityFormatter/publicationTitleFormatter.component.ts deleted file mode 100644 index 321e440d..00000000 --- a/portal-2/src/app/claims/claim-utils/entityFormatter/publicationTitleFormatter.component.ts +++ /dev/null @@ -1,26 +0,0 @@ -import {Component, Input} from '@angular/core'; - -//Usage Example " " - -@Component({ - selector: 'publication-title', - template: ` - - {{title}} - {{title}} - - ` -}) - -export class PublicationTitleFormatter { - @Input() title: string[]; - @Input() url: string[]; - - constructor () {} - - ngOnInit() { - - } - - -} diff --git a/portal-2/src/app/claims/claim-utils/service/claims.service.ts b/portal-2/src/app/claims/claim-utils/service/claims.service.ts deleted file mode 100644 index 3ed8c31c..00000000 --- a/portal-2/src/app/claims/claim-utils/service/claims.service.ts +++ /dev/null @@ -1,154 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Jsonp, URLSearchParams } from '@angular/http'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -// import {Claim} from '../claim'; -import {OpenaireProperties} from '../../../utils/properties/openaireProperties'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../../../shared/cache.service'; -import { CustomOptions } from './customOptions.class'; -@Injectable() -export class ClaimsService { - private baseUrl; - constructor(private jsonp: Jsonp, private http: Http, public _cache: CacheService) { - this.baseUrl = OpenaireProperties.getClaimsAPIURL(); - } - - private getClaimRequest(size : number, page : number, url :string, fromCache:boolean):any { - console.info('ClaimsService: Claims request: '+url); - let key = url; - if (fromCache && this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - return this.http.get( url, CustomOptions.getAuthOptions()) - .map(request => request.json()) - .do(request => console.info("Get claims: offset = "+(size*(page-1)) + " limit ="+size )) - .catch(this.handleError) - .do(res => { - this._cache.set(key, res); - }); - } - getClaims( size : number, page : number, keyword:string, sortby: string, descending: boolean, types: string):any { - console.info('ClaimsService: getClaims ' ); - console.info('ClaimsService: Types : '+types ); - let url = this.baseUrl +"claims"+"?offset="+(size*(page-1) + "&limit="+size)+"&keyword="+keyword+"&sortby="+sortby+"&descending="+descending+"&"+types; - return this.getClaimRequest(size,page,url,true); - - } - getClaimsByUser( size : number, page : number, user:string, keyword:string, sortby: string, descending: boolean, types: string):any { - console.info('ClaimsService: getClaims for user : '+user); - let url = this.baseUrl +"users/claims"+"?offset="+(size*(page-1) + "&limit="+size)+"&keyword="+keyword+"&sortby="+sortby+"&descending="+descending+"&"+types; - return this.getClaimRequest(size,page,url,false); - - } - getClaimsBycontext( size : number, page : number, contextId:string, keyword:string, sortby: string, descending: boolean, types: string ):any { - console.info('ClaimsService: getClaims for context : '+contextId); - let url = this.baseUrl +"contexts/"+contextId+"/claims"+"?offset="+(size*(page-1) + "&limit="+size)+"&keyword="+keyword+"&sortby="+sortby+"&descending="+descending+"&"+types; - return this.getClaimRequest(size,page,url,true); - - } - getClaimsByResult( size : number, page : number, resultId:string, keyword:string, sortby: string, descending: boolean, types: string ):any { - console.info('ClaimsService: getClaims for result : '+resultId); - let url = this.baseUrl +"results/"+resultId+"/claims"+"?offset="+(size*(page-1) + "&limit="+size)+"&keyword="+keyword+"&sortby="+sortby+"&descending="+descending+"&"+types; - return this.getClaimRequest(size,page,url,true); - - } - getClaimsByProject( size : number, page : number, projectId:string, keyword:string, sortby: string, descending: boolean, types: string ):any { - console.info('ClaimsService: getClaims for project : '+projectId); - let url = this.baseUrl +"projects/"+projectId+"/claims"+"?offset="+(size*(page-1) + "&limit="+size)+"&keyword="+keyword+"&sortby="+sortby+"&descending="+descending+"&"+types; - return this.getClaimRequest(size,page,url,true); - } - - deleteClaimById(claimId:string ):any{ - console.warn('Trying to delete claim with id : '+claimId); - let url = this.baseUrl +"claims/"+claimId; - // let headers = new Headers({ 'Content-Type': 'application/json' }); - // let options = new RequestOptions({ headers: headers }); - return this.http.delete( url, CustomOptions.getAuthOptionsWithBody()).map(request => request.json()) - // .do(request => console.info("After delete" )) - .catch(this.handleError); - - } - deleteBulk(claimIds:string[]):any{ - - console.warn('Trying to delete claims with ids : '+claimIds); - var url = ""; - - for(var claimId of claimIds){ - url=url+(url.length >0 ?"&":"")+"claimId="+claimId; - } - url= this.baseUrl +"claims/bulk?"+url; - - // let headers = new Headers({ 'Content-Type': 'application/json' }); - // let options = new RequestOptions({ headers: headers }); - return this.http.delete( url, CustomOptions.getAuthOptions()).map(request => request.json()) - // .do(request => console.info("After delete" )) - .catch(this.handleError); - - } - insertBulkClaims(claims):any{ - console.warn('Trying toinsert claims : '+claims); - let url = this.baseUrl +"claims/bulk"; - let body = JSON.stringify( claims ); - console.warn('Json body: : '+body); - // let headers = new Headers({ 'Content-Type': 'application/json' }); - // let options = new RequestOptions({ headers: headers }); - return this.http.post(url, body, CustomOptions.getAuthOptionsWithBody()) - .map(res => res.json()) - .do(request => console.info("Insert Response:"+request.status) ) - .catch(this.handleError); - - } - insertClaim(claim):any{ - console.warn('Trying toinsert claim : '+claim); - let url = this.baseUrl +"claims"; - let body = JSON.stringify( claim ); - // let headers = new Headers({ 'Content-Type': 'application/json' }); - // let options = new RequestOptions({ headers: headers }); - return this.http.post(url, body, CustomOptions.getAuthOptionsWithBody()) - .map(res => res.json()) - .do(request => console.info("Insert Response:"+request.status) ) - .catch(this.handleError); - - } - insertDirectRecords(records):any{ - console.warn('Trying to feedrecords : '+records); - let url = this.baseUrl +"feed/bulk"; - let body = JSON.stringify( records ); - console.warn('Json body: : '+body); - // let headers = new Headers({ 'Content-Type': 'application/json' }); - // let options = new RequestOptions({ headers: headers }); - return this.http.post(url, body, CustomOptions.getAuthOptionsWithBody()) - .map(res => res.json()) - .do(request => console.info("Insert Response:"+request) ) - .catch(this.handleError); - - } - private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } - - getClaim(id:string):any { - let url = this.baseUrl+"claims/"+id; - return new Promise((resolve, reject) => { - this.http.get(url) - .map(res => res.json()) - .subscribe( - data => { - resolve(data.data); - }, - err => { - reject(err); - } - ) - ; - }); - } - - -} diff --git a/portal-2/src/app/claims/claim-utils/service/claimsService.module.ts b/portal-2/src/app/claims/claim-utils/service/claimsService.module.ts deleted file mode 100644 index d38d0f8d..00000000 --- a/portal-2/src/app/claims/claim-utils/service/claimsService.module.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {ClaimsService} from './claims.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule - ], - declarations: [ - ], - providers:[ - ClaimsService, - -], - exports: [ - ] -}) - - -export class ClaimServiceModule { } diff --git a/portal-2/src/app/claims/claim-utils/service/contexts.service.ts b/portal-2/src/app/claims/claim-utils/service/contexts.service.ts deleted file mode 100644 index 29d15540..00000000 --- a/portal-2/src/app/claims/claim-utils/service/contexts.service.ts +++ /dev/null @@ -1,100 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Jsonp, URLSearchParams, RequestOptions, Headers} from '@angular/http'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {Claim} from '../claim'; -import {OpenaireProperties} from '../../../utils/properties/openaireProperties'; -import {AutoCompleteValue} from '../../../searchPages/searchUtils/searchHelperClasses.class'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../../../shared/cache.service'; -import { COOKIE } from '../../../login/utils/helper.class'; -@Injectable() -export class ContextsService { - private baseUrl; - constructor(private http: Http, public _cache: CacheService) { - this.baseUrl = OpenaireProperties.getClaimsAPIURL(); - } - - public getCommunities():any { - let url = this.baseUrl + 'communities'; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - - console.info('ContextsService: request communities '+url); - return this.http.get( url, this.getAuthOptions()) - .map(request => request.json().data) - // .do(request => console.info("Get claims: offset = ")) - .catch(this.handleError) - .do(res => { - this._cache.set(key, res); - }); - } - public getCategories(communityId :string):any { - console.info('ContextsService: request categories for community with id '+communityId); - let url= this.baseUrl + 'communities/' + communityId + '/categories'; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - - return this.http.get( url, this.getAuthOptions()) - .map(request => request.json().data) - // .do(request => console.info("Get claims: offset = " )) - .catch(this.handleError) - .do(res => { - this._cache.set(key, res); - }); - } - public getConcepts(categoryId :string, keyword: string, parsing:boolean):any { - console.info('ContextsService: request concept for category with id '+categoryId + ' and keyword '+ keyword); - let url= this.baseUrl + 'categories/' + categoryId+ "/concepts"; - let key = url+"_parsing="+parsing; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => (parsing)?this.parse(res.concept):res.concept); - //.do(res => console.info("Result is "+ res.length)); - } - - return this.http.get( url, this.getAuthOptions()) - .map(request => request.json().data) - .catch(this.handleError) - .do(res => { - this._cache.set(key, res); - }).map(res => (parsing)?this.parse(res.concept):res.concept); - // .do(res => console.info("Result is "+ res.length )); - } - parse (data: any):AutoCompleteValue[] { - var array:AutoCompleteValue[] =[] - if(!Array.isArray(data) && data.id && data.label){ - var value:AutoCompleteValue = new AutoCompleteValue(); - value.id = data.id; - value.label = data.label; - array.push(value); - } - for(var i = 0; i < data.length; i++){ - var value:AutoCompleteValue = new AutoCompleteValue(); - value.id = data[i].id; - value.label = data[i].label; - array.push(value); - } - - return array; - - } - - private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } - private getAuthOptions():RequestOptions{ - let headers = new Headers(); - headers.append('X-XSRF-TOKEN', COOKIE.getCookie(COOKIE.cookieName_id)); - let options = new RequestOptions({ headers: headers, withCredentials:true }); - return options; - } -} diff --git a/portal-2/src/app/claims/claim-utils/service/contextsService.module.ts b/portal-2/src/app/claims/claim-utils/service/contextsService.module.ts deleted file mode 100644 index 6bd55ced..00000000 --- a/portal-2/src/app/claims/claim-utils/service/contextsService.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {ContextsService} from './contexts.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule - ], - declarations: [ - ], - providers:[ - ContextsService -], - exports: [ - ] -}) -export class ContextsServiceModule { } diff --git a/portal-2/src/app/claims/claim-utils/service/customOptions.class.ts b/portal-2/src/app/claims/claim-utils/service/customOptions.class.ts deleted file mode 100644 index 7796c45e..00000000 --- a/portal-2/src/app/claims/claim-utils/service/customOptions.class.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { RequestOptions, Headers} from '@angular/http'; -import { COOKIE } from '../../../login/utils/helper.class'; - - -export class CustomOptions{ - public static getAuthOptionsWithBody():RequestOptions{ - let headers = new Headers(); - headers.append('Content-Type', 'application/json'); - headers.append('X-XSRF-TOKEN', COOKIE.getCookie(COOKIE.cookieName_id)); - let options = new RequestOptions({ headers: headers, withCredentials:true }); - return options; - } - public static getAuthOptions():RequestOptions{ - let headers = new Headers(); - headers.append('X-XSRF-TOKEN', COOKIE.getCookie(COOKIE.cookieName_id)); - let options = new RequestOptions({ headers: headers, withCredentials:true }); - return options; - } -} diff --git a/portal-2/src/app/claims/claim-utils/service/searchCrossref.service.ts b/portal-2/src/app/claims/claim-utils/service/searchCrossref.service.ts deleted file mode 100644 index 7b39af69..00000000 --- a/portal-2/src/app/claims/claim-utils/service/searchCrossref.service.ts +++ /dev/null @@ -1,84 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {OpenaireProperties} from '../../../utils/properties/openaireProperties'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../../../shared/cache.service'; -@Injectable() -export class SearchCrossrefService { - constructor( private http: Http, public _cache: CacheService) {} - - - searchCrossrefResults (term: string, size : number, page : number):any { - let url = OpenaireProperties.getSearchCrossrefAPIURL()+'?query='+term+'&rows='+size+'&offset='+(size*(page-1)); - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - - return this.http.get( url) - .map(request => request.json().message) - .do(items => console.log("Crossref Results: total results = "+items['total-results']+" keyword = "+term)) - .do(res => { - this._cache.set(key, res); - }); - //.catch(this.handleError); - - } - searchCrossrefByDOIs(DOIs: string[]):any { - /* - $request ="http://api.crossref.org/works"."?filter="; - foreach($dois as $doi){ - $request.="doi:".urlencode( trim($doi)).","; - } - */ - var doisParams = ""; - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?",":"")+'doi:'+DOIs[i]; - } - let url = OpenaireProperties.getSearchCrossrefAPIURL()+'?filter='+doisParams; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - - return this.http.get( url) - .map(request => request.json().message) - .do(items => console.log("Crossref Results: total results = "+items['total-results']+" for doi = "+doisParams)) - .do(res => { - this._cache.set(key, res); - }); - //.catch(this.handleError); - - } - searchCrossrefByMultipleDOIs(dois: string[]):any { - let url = OpenaireProperties.getSearchCrossrefAPIURL()+'?filter=doi:'; - for(var i=0; i request.json().message) - .do(items => console.log("Crossref Results: total results = "+items['total-results'])). - do(res => { - this._cache.set(key, res); - }); - //.catch(this.handleError); - - } - - private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } - -} diff --git a/portal-2/src/app/claims/claim-utils/service/searchCrossrefService.module.ts b/portal-2/src/app/claims/claim-utils/service/searchCrossrefService.module.ts deleted file mode 100644 index 798acdb3..00000000 --- a/portal-2/src/app/claims/claim-utils/service/searchCrossrefService.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {SearchCrossrefService} from './searchCrossref.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule - ], - declarations: [ - ], - providers:[ - SearchCrossrefService -], - exports: [ - ] -}) -export class SearchCrossrefServiceModule { } diff --git a/portal-2/src/app/claims/claim-utils/service/searchDatacite.service.ts b/portal-2/src/app/claims/claim-utils/service/searchDatacite.service.ts deleted file mode 100644 index 5ad77b34..00000000 --- a/portal-2/src/app/claims/claim-utils/service/searchDatacite.service.ts +++ /dev/null @@ -1,60 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {OpenaireProperties} from '../../../utils/properties/openaireProperties'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../../../shared/cache.service'; -@Injectable() -export class SearchDataciteService { - constructor(private http: Http, public _cache: CacheService) {} - - searchDataciteResults (term: string, size : number, page : number):any { - console.info("In search datacite results "+term); - let url = OpenaireProperties.getSearchDataciteAPIURL()+'?query='+term+'&rows='+size+'&start='+(size*(page-1)); - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - return this.http.get( url) - .map(request => request.json()) - .do(items => console.info(items)) - .do(items => console.log("Datacite Results: total results = "+items.meta.total+" keyword = "+term)) - .do(res => { - this._cache.set(key, res); - }); - //.catch(this.handleError); - } - getDataciteResultByDOI (doi: string):any { - console.info("Fetch datacite resultt by DOI: "+doi); - let url = OpenaireProperties.getSearchDataciteAPIURL()+'/'+doi; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - return this.http.get( url) - .map(request => request.json()) - .do(items => console.info(items)) - // .do(items => console.log("Datacite Results: total results = "+items.meta.total+" doi = "+doi)) - .do(res => { - this._cache.set(key, res); - }); - //.catch(this.handleError); - } - - - private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } - private extractData(res: Response) { - if (res.status < 200 || res.status >= 300) { - throw new Error('Bad response status: ' + res.status); - } - let body = res.json(); - return body.data || { }; - } -} diff --git a/portal-2/src/app/claims/claim-utils/service/searchDataciteService.module.ts b/portal-2/src/app/claims/claim-utils/service/searchDataciteService.module.ts deleted file mode 100644 index 659ca2e3..00000000 --- a/portal-2/src/app/claims/claim-utils/service/searchDataciteService.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {SearchDataciteService} from './searchDatacite.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule - ], - declarations: [ - ], - providers:[ - SearchDataciteService -], - exports: [ - ] -}) -export class SearchDataciteServiceModule { } diff --git a/portal-2/src/app/claims/claim-utils/service/searchOrcid.service.ts b/portal-2/src/app/claims/claim-utils/service/searchOrcid.service.ts deleted file mode 100644 index 1d710a50..00000000 --- a/portal-2/src/app/claims/claim-utils/service/searchOrcid.service.ts +++ /dev/null @@ -1,141 +0,0 @@ -import {Injectable} from '@angular/core'; -import {URLSearchParams} from '@angular/http'; -import {Http, Response} from '@angular/http'; -import { Headers, RequestOptions } from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {OpenaireProperties} from '../../../utils/properties/openaireProperties'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../../../shared/cache.service'; -@Injectable() -export class SearchOrcidService { - constructor( private http: Http, public _cache: CacheService) {} - - - searchOrcidAuthor (term: string, authorIds: string[], - authorGivenNames: string[], authorFamilyNames: string[]):any { - console.info("In searchOrcidAuthor: "+term); - - var headers = new Headers(); - headers.append('Accept', 'application/orcid+json'); - - let url = OpenaireProperties.getSearchOrcidURL()+term+'/orcid-bio'; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseOrcidAuthor(res, authorIds, authorGivenNames, authorFamilyNames)); - } - return this.http.get(url, { headers: headers }) - .map(res => res.json()['orcid-profile']) - .map(res => [res['orcid-bio']['personal-details']['given-names'], - res['orcid-bio']['personal-details']['family-name'], - res['orcid-identifier']]) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseOrcidAuthor(res, authorIds, authorGivenNames, authorFamilyNames)); - } - - searchOrcidAuthors (term: string, authorIds: string[], - authorGivenNames: string[], authorFamilyNames: string[]):any { - console.info("In search Orcid authors for keyword: "+term); - - var headers = new Headers(); - headers.append('Accept', 'application/orcid+json'); - - let url = OpenaireProperties.getSearchOrcidURL()+'search/orcid-bio?defType=edismax&q='+term+'&qf=given-name^1.0+family-name^2.0+other-names^1.0+credit-name^1.0&start=0&rows=10'; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseOrcidAuthors(res, authorIds, authorGivenNames, authorFamilyNames)); - } - return this.http.get(url, { headers: headers }) - .map(res => res.json()['orcid-search-results']['orcid-search-result']) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseOrcidAuthors(res, authorIds, authorGivenNames, authorFamilyNames)); - - } - - searchOrcidPublications (id: string):any { - console.info("In search Orcid publications for author: "+id); - - var headers = new Headers(); - headers.append('Accept', 'application/orcid+json'); - - let url = OpenaireProperties.getSearchOrcidURL()+id+'/orcid-works'; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - return this.http.get(url, { headers: headers }) - .map(res => res.json()['orcid-profile']['orcid-activities']['orcid-works']) - .do(res => { - this._cache.set(key, res); - }); - //.map(res => res['orcid-work']); - } - - - parseOrcidAuthor (data: any, authorIds: string[], - authorGivenNames: string[], authorFamilyNames: string[]):any { - - if(data[2] != null) { - authorIds.push(data[2].path); - - if(data[0] != null) { - authorGivenNames.push(data[0].value); - } else { - authorGivenNames.push(""); - } - if(data[1] != null) { - authorFamilyNames.push(data[1].value); - } else { - authorFamilyNames.push(""); - } - - return true; - } - - return false; - } - - parseOrcidAuthors (data: any, authorIds: string[], - authorGivenNames: string[], authorFamilyNames: string[]):any { - let ret: boolean = false; - let mydata: any; - let length: number; - - if(data != null) { - length = data.length!=undefined ? data.length : 1; - - for(let i=0; i Clear All - - - `, - -}) -export class StartOverComponent { - constructor () { - - - } - ngOnInit() { - -} - - - // @Input() public inlineEntity = null; - @Input() public type:string; - @Input() public linkTo:string; - @Input() public results; - @Input() public projects; - @Input() public contexts; - - @ViewChild(AlertModal) alertApplyAll; - - confirmOpen(){ - this.alertApplyAll.cancelButton = true; - this.alertApplyAll.okButton = true; - this.alertApplyAll.alertTitle = "Remove selected"; - this.alertApplyAll.message = "This action will delete every selected entity (projects, communities, research results). Do you wish to continue?"; - this.alertApplyAll.okButtonText = "Yes"; - this.alertApplyAll.cancelButtonText = "No"; - this.alertApplyAll.open(); - } - confirmClose(data){ - this.startOver(); - } - startOver(){ - if(this.type != null && this.linkTo != null){ - console.log("inline"); - if(this.linkTo == "project"){ - this.projects.splice(0, this.projects.length); - }else if(this.linkTo == "context"){ - this.contexts.splice(0, this.contexts.length); - }else if(this.linkTo == "result"){ - this.results.splice(0, this.results.length); - } - }else{ - console.log("generic"); - this.results.splice(0, this.results.length); - this.projects.splice(0, this.projects.length); - this.contexts.splice(0, this.contexts.length); - } - console.log("projects:"+this.projects.length +" contexts:"+this.contexts.length + " results:"+this.results.length ); - } - -} diff --git a/portal-2/src/app/claims/claim-utils/startOver.module.ts b/portal-2/src/app/claims/claim-utils/startOver.module.ts deleted file mode 100644 index bde3d0a2..00000000 --- a/portal-2/src/app/claims/claim-utils/startOver.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { SharedModule } from '../../shared/shared.module'; -import { CommonModule } from '@angular/common'; -import {StartOverComponent} from './startOver.component'; -import {AlertModalModule} from '../../utils/modal/alertModal.module'; - - @NgModule({ - imports: [ - SharedModule, CommonModule, AlertModalModule - ], - declarations: [ - StartOverComponent - ], - exports: [StartOverComponent ] -}) -export class StartOverModule { } diff --git a/portal-2/src/app/claims/claim.module.ts b/portal-2/src/app/claims/claim.module.ts deleted file mode 100644 index 113e8597..00000000 --- a/portal-2/src/app/claims/claim.module.ts +++ /dev/null @@ -1,68 +0,0 @@ -// import { NgModule} from '@angular/core'; -// import { CommonModule } from '@angular/common'; -// import { FormsModule } from '@angular/forms'; -// // -// import {UtilsModule} from '../utils/utils.module'; -// import {ServicesModule} from '../services/services.module'; -// -// import { ClaimsService} from '../services/claims.service'; -// //main -// import {ClaimComponent} from './claim/claim.component'; -// import {ClaimsAdminComponent} from './claims/claimsAdmin.component'; -// import {MyClaimsComponent} from './myClaims/myClaims.component'; -// import {LinkingHomeComponent} from './linking/linkingHome.component'; -// import {LinkingComponent} from './linking/linking.component'; -// import { BulkLinkingComponent } from './linking/bulkLinking.component'; -// -// import {BulkClaimComponent} from './linking/bulkClaim/bulkClaim.component'; -// import {ClaimsComponent} from './claim-utils/claims.component'; -// -// import {ClaimContextComponent} from './claim-utils/claimContext.component'; -// import {ClaimProjectsComponent} from './claim-utils/claimProject.component'; -// import {ClaimResultComponent} from './claim-utils/claimResult.component'; -// import {ClaimPublicationComponent} from './claim-utils/claimPublication.component'; -// import {ClaimDatasetComponent} from './claim-utils/claimDataset.component'; -// -// import {ClaimInsertComponent} from './linking/insertClaim/insertClaim.component'; -// -// import {ClaimSelectedContextsComponent} from './linking/selected/selectedContexts.component'; -// import {ClaimSelectedComponent} from './linking/selected/selected.component'; -// import {ClaimSelectedDatasetsComponent} from './linking/selected/selectedDatasets.component'; -// import {ClaimSelectedResultsComponent} from './linking/selected/selectedResults.component'; -// import {ClaimSelectedProjectsComponent} from './linking/selected/selectedProjects.component'; -// import {ClaimSelectedPublicationsComponent} from './linking/selected/selectedPublications.component'; -// -// import {LinkingGenericComponent} from './linking/linkingGeneric.component'; -// -// import {InlineClaimContextComponent} from './inlineClaims/inlineClaimContext.component'; -// import {InlineClaimProjectComponent} from './inlineClaims/inlineClaimProject.component'; -// import {InlineClaimResultComponent} from './inlineClaims/inlineClaimResult.component'; -// import {ClaimEntityFormatter} from '../utils/claimEntityFormatter.component'; -// -// import { Claim } from '../utils/entities/claim'; -// //helpers -// -// import { ClaimRoutingModule } from './claim-routing.module'; -// @NgModule({ -// imports: [ -// CommonModule, FormsModule, -// UtilsModule, -// ServicesModule, -// ClaimRoutingModule -// -// ], -// declarations: [ -// ClaimsAdminComponent, MyClaimsComponent, ClaimComponent, ClaimsComponent, -// BulkLinkingComponent, LinkingComponent, LinkingHomeComponent, LinkingGenericComponent, -// InlineClaimContextComponent, InlineClaimProjectComponent, InlineClaimResultComponent, ClaimSelectedComponent, -// ClaimContextComponent, ClaimSelectedContextsComponent, ClaimInsertComponent, ClaimProjectsComponent, ClaimSelectedProjectsComponent, -// ClaimResultComponent, ClaimSelectedPublicationsComponent, ClaimSelectedDatasetsComponent, ClaimSelectedResultsComponent, ClaimPublicationComponent, -// ClaimDatasetComponent, BulkClaimComponent, -// ClaimEntityFormatter -// ], -// providers: [ ClaimsService ], -// exports: [ -// InlineClaimContextComponent, InlineClaimProjectComponent, InlineClaimResultComponent -// ] -// }) -// export class ClaimModule { } diff --git a/portal-2/src/app/claims/claim/claim.component.html b/portal-2/src/app/claims/claim/claim.component.html deleted file mode 100644 index 41ecc151..00000000 --- a/portal-2/src/app/claims/claim/claim.component.html +++ /dev/null @@ -1,10 +0,0 @@ -
-

Here is the claim with id : {{id}}

-
- {{claim.id }} || {{claim.userMail }} || - {{claim | json}} {{claim | json}} -
-
-
-

No proper id...

-
diff --git a/portal-2/src/app/claims/claim/claim.component.ts b/portal-2/src/app/claims/claim/claim.component.ts deleted file mode 100644 index 786270cd..00000000 --- a/portal-2/src/app/claims/claim/claim.component.ts +++ /dev/null @@ -1,43 +0,0 @@ -import {Component} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {ActivatedRoute, Router} from '@angular/router'; - -import {ClaimsService} from '../../services/claims.service'; -// import {Claim} from '../../utils/entities/claim'; - -@Component({ - selector: 'claim', - templateUrl: 'claim.component.html', - -}) -export class ClaimComponent { - constructor (private _claimService: ClaimsService, - private route: ActivatedRoute, private _router:Router) {} - ngOnInit() { - this.sub = this.route.queryParams.subscribe(params => { - - this.id = params['id']; - console.info("Claim id:"+this.id +" " +params['id']); - if(this.id!=null){ - this.getClaim(this.id); - } - }); - - -} -ngOnDestroy() { - this.sub.unsubscribe(); -} - sub: any; - id : string; - claim : any; - getClaim (id: string) { - this._claimService.getClaim(id) - .then(data => { - this.claim = data; - console.log(data); - }) ; - } - - -} diff --git a/portal-2/src/app/claims/claimsAdmin/claimsAdmin-routing.module.ts b/portal-2/src/app/claims/claimsAdmin/claimsAdmin-routing.module.ts deleted file mode 100644 index f915d2e9..00000000 --- a/portal-2/src/app/claims/claimsAdmin/claimsAdmin-routing.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { AdminLoginGuard} from'../../login/adminLoginGuard.guard'; - -import { ClaimsAdminComponent } from './claimsAdmin.component'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: ClaimsAdminComponent, canActivate: [IsRouteEnabled, AdminLoginGuard], - data: {redirect: '/error'}, canDeactivate: [PreviousRouteRecorder]}]) - ] -}) -export class ClaimsAdminRoutingModule { } diff --git a/portal-2/src/app/claims/claimsAdmin/claimsAdmin.component.ts b/portal-2/src/app/claims/claimsAdmin/claimsAdmin.component.ts deleted file mode 100644 index 08b3dc11..00000000 --- a/portal-2/src/app/claims/claimsAdmin/claimsAdmin.component.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {Component, ViewChild, Input} from '@angular/core'; -import {Location} from '@angular/common'; -import {Observable} from 'rxjs/Observable'; -import { Meta} from '../../../angular2-meta'; - -@Component({ - selector: 'claims-admin', - template: ` -
-
-
- -
-
-
-
-
- Claims Administrator -
- -
-
-
-
- - `, - -}) -export class ClaimsAdminComponent { - constructor ( private _meta: Meta ) { - this._meta.setTitle("OpenAIRE | Claims Administrator"); - } - ngOnInit() { - } -} diff --git a/portal-2/src/app/claims/claimsAdmin/claimsAdmin.module.ts b/portal-2/src/app/claims/claimsAdmin/claimsAdmin.module.ts deleted file mode 100644 index 947bc901..00000000 --- a/portal-2/src/app/claims/claimsAdmin/claimsAdmin.module.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { NgModule } from '@angular/core'; - -import { SharedModule } from '../../shared/shared.module'; -import { ClaimsAdminComponent } from './claimsAdmin.component'; -import { ClaimsAdminRoutingModule } from './claimsAdmin-routing.module'; -// import{ClaimServiceModule} from '../claim-utils/service/claimsService.module'; -import {DisplayClaimsModule} from '../claim-utils/displayClaims/displayClaims.module'; -import { AdminLoginGuard} from'../../login/adminLoginGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - SharedModule, - ClaimsAdminRoutingModule, - // ClaimServiceModule, - DisplayClaimsModule - - ], - providers:[AdminLoginGuard, PreviousRouteRecorder,IsRouteEnabled], - declarations: [ - ClaimsAdminComponent - ] -}) -export class ClaimsAdminModule { } diff --git a/portal-2/src/app/claims/claimsByToken/claimsByToken-routing.module.ts b/portal-2/src/app/claims/claimsByToken/claimsByToken-routing.module.ts deleted file mode 100644 index 3d50376a..00000000 --- a/portal-2/src/app/claims/claimsByToken/claimsByToken-routing.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { LoginGuard} from'../../login/loginGuard.guard'; -import { ClaimsByTokenComponent } from './claimsByToken.component'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: ClaimsByTokenComponent, canActivate: [IsRouteEnabled, LoginGuard], - data: {redirect: '/error'}, canDeactivate: [PreviousRouteRecorder]}]) - ] -}) -export class ClaimsByTokenRoutingModule { } diff --git a/portal-2/src/app/claims/claimsByToken/claimsByToken.component.ts b/portal-2/src/app/claims/claimsByToken/claimsByToken.component.ts deleted file mode 100644 index 955210d4..00000000 --- a/portal-2/src/app/claims/claimsByToken/claimsByToken.component.ts +++ /dev/null @@ -1,433 +0,0 @@ -import {Component, ViewChild, Input} from '@angular/core'; -import {Location} from '@angular/common'; -import {Observable} from 'rxjs/Observable'; -import {ActivatedRoute, Params} from '@angular/router'; -import {ClaimsByTokenService} from './claimsByToken.service'; - -import {ModalSelect} from '../../utils/modal/selectModal.component'; -import {ModalLoading} from '../../utils/modal/loading.component'; - -import {Session} from '../../login/utils/helper.class'; - -import {RouterHelper} from '../../utils/routerHelper.class'; -import { Meta} from '../../../angular2-meta'; -import {ClaimsDatatablePipe} from '../../utils/pipes/claimsDatatable.pipe'; - -//import {DataTable} from "angular2-datatable"; - -@Component({ - selector: 'claims-project-manager', - template: ` -
-
-
-
- - -
-
- - -

Oops! Your email does not give you the authority to view claims for the selected project. Please contact the administrators.

-
-
- -
-
- Claims Administrator - - {{project['name']}} ({{project['funderName']}}) - - -
-

Pending Claims

- -
-
No pending claims found.
-
- -
- -
-
- -
-
- - - {{totalPendingResults.count}} pending claims, page {{activePendingPage.page}} of {{totalPages(totalPendingResults.count)}} - - - - - - - - - - - - - - - - - - - - - -
Research ResultClaimed ByClaimed DateApprove
{{claim1.userMail}}{{claim1.date}} - - - -
-
- -
*Note that claims you did not approved or disapproved are considered as right (but not curated)
- - -

Already Curated Claims

- -
-
No curated claims found.
-
- -
- -
-
- -
-
- - - {{totalCuratedResults.count}} curated claims, page {{activeCuratedPage.page}} of {{totalPages(totalCuratedResults.count)}} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Research ResultClaimed byClaimed DateCurated byCuration DateApproved
{{claim.userMail}}{{claim.date}}{{claim.curatedBy}}{{claim.curationDate}} - - - - - -
-
- - - -
- -
-
-
-
- `, - -}) -export class ClaimsByTokenComponent { - public token: string = ""; - public sub: any; - public project: any; - private claims:any = []; - public pending_claims: any = []; - public curated_claims: any = []; - public selectedRight: Set; - public selectedWrong: Set; - public editable: Set; - public contact_person: string[] = ["Konstantina", "Argiro", "Katerina"]; - - // when 'valid' show proper claims, when 'invalid' show no matched entry-wanna retry - public accessStatus: string;// = "empty"; - - public rowsOnPage = 5; - public sortOrder = "asc"; - public filterQuery:string = ""; - public filterQuery2:string = ""; - - public activePendingPage:any = {page: 1}; - public totalPendingResults:any = {count: 0}; - public activeCuratedPage:any = {page: 1}; - public totalCuratedResults:any = {count: 0}; - - - @ViewChild('mf1') table1: any;//DataTable; - @ViewChild('mf2') table2: any;//DataTable; - @ViewChild('filtered1') filteredItems1; - - - @ViewChild (ModalSelect) selectModal : ModalSelect; - @ViewChild (ModalLoading) loading : ModalLoading ; - - public routerHelper:RouterHelper = new RouterHelper(); - - constructor ( private route: ActivatedRoute, private claimsByTokenService: ClaimsByTokenService, private _meta: Meta) { - - } - ngOnInit() { - this.sub = this.route.queryParams.subscribe(params => { - this.token = params['token']; - this.selectedRight = new Set(); - this.selectedWrong = new Set(); - this.editable = new Set(); - //this.openSelect(); - //this.setMessageSelect("Please select your identity:"); - //this.setOptionsSelect(this.contact_person); - this.validateJWTandToken(); - this.updateTitle("Claims For Project Managers"); - } - ); - } - -refreshTable(table:any, $event:any, whichTable: string) { - if(whichTable == "pending") { - this.activePendingPage.page = $event.value; - } else if(whichTable == 'curated') { - this.activeCuratedPage.page = $event.value; - } - table.mfActivePage=$event.value; - table.setPage(table.mfActivePage, this.rowsOnPage); -} - -public sortByClaimDate1 = (claim: any) => { - return new Date(claim.date); -} - -public sortByCurationDate1 = (claim: any) => { - return new Date(claim.curationDate); -} - -public sortByTitle1 = (claim: any) => { - if(claim.targetType != 'project') { - return claim.target.title; - } else { - return claim.source.title; - } -} - -public sortByClaimDate2 = (claim: any) => { - return new Date(claim.date); -} - -public sortByCurationDate2 = (claim: any) => { - console.info(new Date(claim.curationDate)); - return new Date(claim.curationDate); -} - -public sortByTitle2= (claim: any) => { - if(claim.targetType != 'project') { - return claim.target.title; - } else { - return claim.source.title; - } -} - - - validateJWTandToken() { - var jwtToken=Session.getUserJwt(); - if(this.token) { - this.claimsByTokenService.getClaims(this.token, jwtToken).subscribe( - data => { - this.closeLoading(); - this.accessStatus = "valid"; - //console.info(data); - this.claims = data.data; - for(let claim of this.claims) { - if(claim.targetType == "project") { - this.project = claim.target; - } else { - this.project = claim.source; - } - if(claim.curatedBy) { - this.curated_claims.push(claim); - } else { - this.pending_claims.push(claim); - } - } - - this.totalPendingResults.count = this.pending_claims.length; - this.totalCuratedResults.count = this.curated_claims.length; - - this.updateTitle("Claims For Project Managers - "+this.project.name); - }, - err => { - this.accessStatus = "invalid"; - console.log(err); - } - ); - } else { - this.accessStatus = "invalid"; - } - } - - selectApprove(id:string, event) { - var value = event.currentTarget.checked; - if(value){ - this.selectedRight.add(id); - this.selectedWrong.delete(id); - console.info(this.selectedRight); - }else{ - this.selectedRight.delete(id); - console.info(this.selectedRight); - } - } - - selectDisapprove(id:string,event) { - var value = event.currentTarget.checked; - if(value){ - this.selectedWrong.add(id); - this.selectedRight.delete(id); - }else{ - this.selectedWrong.delete(id); - } - } - - isSelectedRight(id:string) { - return this.selectedRight.has(id); - } - - isSelectedWrong(id:string) { - return this.selectedWrong.has(id); - } - - isRight(claim: any) { - //claim.approved = true; - if(this.isSelectedRight(claim.id)) { - return true; - } else if(claim.approved == true && !this.isSelectedWrong(claim.id)) { - return true; - } - - return false; - } - - isWrong(claim: any) { - if(this.isSelectedWrong(claim.id)) { - return true; - } else if(claim.approved == false && !this.isSelectedRight(claim.id)) { - return true; - } - - return false; - } - - saveChanges() { - console.info("Changes Saved!"); - var jwtToken=Session.getUserJwt(); - - this.claimsByTokenService.updateClaimsCuration(this.selectedRight, this.selectedWrong).subscribe( - data => { - console.info(data); - }, - err => { - console.log(err); - } - ); - - } - - public closeLoading(){ - if(this.loading){ - this.loading.close(); - } - } - - curatorSelected(selected: string) { - console.info("selected curator: "+selected); - } - - public openSelect(){ - if(this.selectModal){ - this.selectModal.open(); - } - } - - public setMessageSelect(message: string){ - if(this.selectModal){ - this.selectModal.message = message; - } - } - - public setOptionsSelect(options: string[]){ - if(this.selectModal){ - this.selectModal.options = options; - } - } - - totalPages(totalResults: number): number { - let totalPages:any = totalResults/(this.rowsOnPage); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - return totalPages; - } - - updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - } - -} diff --git a/portal-2/src/app/claims/claimsByToken/claimsByToken.module.ts b/portal-2/src/app/claims/claimsByToken/claimsByToken.module.ts deleted file mode 100644 index 9f5827b5..00000000 --- a/portal-2/src/app/claims/claimsByToken/claimsByToken.module.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import {DataTableModule} from "angular2-datatable"; - -import { SharedModule } from '../../shared/shared.module'; -import { ClaimsByTokenComponent } from './claimsByToken.component'; -import { ClaimsByTokenService } from './claimsByToken.service'; -import { ClaimsByTokenRoutingModule } from './claimsByToken-routing.module'; -import {ClaimEntityFormatterModule} from '../claim-utils/entityFormatter/claimEntityFormatter.module'; -// import{ClaimServiceModule} from '../claim-utils/service/claimsService.module'; -//import {DisplayClaimsModule} from '../claim-utils/displayClaims/displayClaims.module'; -import {SelectModalModule} from '../../utils/modal/selectModal.module'; -import {LoadingModalModule} from '../../utils/modal/loadingModal.module'; - -import {LoginGuard} from'../../login/loginGuard.guard'; - -import {PagingModule} from '../../utils/paging.module'; -import {ClaimsDatatablePipe} from '../../utils/pipes/claimsDatatable.pipe'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - - -@NgModule({ - imports: [ - RouterModule, - DataTableModule, - SharedModule, - ClaimsByTokenRoutingModule, - ClaimEntityFormatterModule, - SelectModalModule, - LoadingModalModule, - PagingModule - // ClaimServiceModule, - //DisplayClaimsModule - - ], - providers:[ - ClaimsByTokenService, - LoginGuard, PreviousRouteRecorder, IsRouteEnabled - ], - declarations: [ - ClaimsByTokenComponent, ClaimsDatatablePipe - ], - exports: [ - ClaimsByTokenComponent, ClaimsDatatablePipe - ] -}) -export class ClaimsByTokenModule { } diff --git a/portal-2/src/app/claims/claimsByToken/claimsByToken.service.ts b/portal-2/src/app/claims/claimsByToken/claimsByToken.service.ts deleted file mode 100644 index d32370b9..00000000 --- a/portal-2/src/app/claims/claimsByToken/claimsByToken.service.ts +++ /dev/null @@ -1,81 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Jsonp, URLSearchParams,ResponseOptions, RequestOptions, Headers} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import 'rxjs/add/operator/do'; -import { CacheService } from '../../shared/cache.service'; -import { CustomOptions } from '../claim-utils/service/customOptions.class'; - -@Injectable() -export class ClaimsByTokenService { - - constructor(private http: Http, public _cache: CacheService) {} - - getClaims(token: string, jwtToken: string):any { - console.info("getClaims in service"); - - let url = OpenaireProperties.getClaimsAPIURL()+"project/claims?projectToken="+token; - - let key = url; - //if (this._cache.has(key)) { - // return Observable.of(this._cache.get(key)); - //} - return this.http.get(url, CustomOptions.getAuthOptions()) - //.map(res => res.text()) - .map(request => request.json()); - //.do(res => { - // this._cache.set(key, res); - //}); - } - - -/* - getClaims(email: string, token: string, user_token: string):any { - let url = OpenaireProperties.getClaimsAPIURL(); // What else? - let body = JSON.stringify( {"email": email, "token": token} ); - console.warn('Json body: : '+body); - let headers = new Headers({ 'Content-Type': 'application/json' }); - let options = new RequestOptions({ headers: headers }); - return this.http.post(url, body, options) - .map(res => res.json()) - .do(request => console.info("Insert Response:"+request.status) ) - .catch(this.handleError); - } -*/ - - updateClaimsCuration( selectedRight: Set, selectedWrong: Set) { - let url = OpenaireProperties.getClaimsAPIURL() + "curate/bulk"; - let claimsCurationInfo: any = []; //e.g.: [{"id":"2","approved":true},{"id":"1","approved":true}] - - selectedRight.forEach(function(selected) { - console.info(selected); - let claimCurationInfo: {"id": string, "approved": boolean} = {"id": selected, "approved": true}; - claimsCurationInfo.push(claimCurationInfo); - }); - - selectedWrong.forEach(function(selected) { - let claimCurationInfo: any = {"id": selected, "approved": false}; - claimsCurationInfo.push(claimCurationInfo); - }); - - console.info("\n\n"+claimsCurationInfo); - - - let body = JSON.stringify( claimsCurationInfo ); - console.warn('Json body: : '+body); - let headers = new Headers({ 'Content-Type': 'application/json' }); - let options = new RequestOptions({ headers: headers }); - return this.http.post(url, body, CustomOptions.getAuthOptionsWithBody()) - .map(res => res.json()) - .do(request => console.info("Insert Response:"+request.status) ) - .catch(this.handleError); - } - - private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } -} diff --git a/portal-2/src/app/claims/directLinking/directLinking-routing.module.ts b/portal-2/src/app/claims/directLinking/directLinking-routing.module.ts deleted file mode 100644 index e9ed1f35..00000000 --- a/portal-2/src/app/claims/directLinking/directLinking-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { LoginGuard} from'../../login/loginGuard.guard'; - -import { DirectLinkingComponent } from './directLinking.component'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: DirectLinkingComponent, canActivate: [IsRouteEnabled, LoginGuard], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder]}, - - ]) - ] -}) -export class DirectLinkingRoutingModule { } diff --git a/portal-2/src/app/claims/directLinking/directLinking.component.html b/portal-2/src/app/claims/directLinking/directLinking.component.html deleted file mode 100644 index c997eb3d..00000000 --- a/portal-2/src/app/claims/directLinking/directLinking.component.html +++ /dev/null @@ -1,118 +0,0 @@ -
-
-
- -
-
- Link -
-
- -
-
- -
- -
- -
- - -
-
- Link {{(type=="project")?'Project':' Research result'}}: -
-
- -
- -
-
-
- {{displayedResult.title}} - {{displayedResult.title}} -
- - -
- -
- -
- {{projects[0].funderName}} | {{projects[0].projectName}} {{(projects[0].projectAcronym)?'('+projects[0].projectAcronym+')':''}} - -
- - - -
- - - - - - - -
-
- - -
- -
-
- - - -
-
- -
- -
-
-
-
diff --git a/portal-2/src/app/claims/directLinking/directLinking.component.ts b/portal-2/src/app/claims/directLinking/directLinking.component.ts deleted file mode 100644 index 567909a3..00000000 --- a/portal-2/src/app/claims/directLinking/directLinking.component.ts +++ /dev/null @@ -1,188 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {ActivatedRoute, Router} from '@angular/router'; -import {EntitiesSearchService} from '../../utils/entitiesAutoComplete/entitySearch.service'; -import {ClaimProject, ClaimResult} from '../claim-utils/claimEntities.class'; -import {SearchPublicationsService} from '../../services/searchPublications.service'; -import {SearchDatasetsService} from '../../services/searchDatasets.service'; -import { Meta} from '../../../angular2-meta'; - -@Component({ - selector: 'directLinking', - templateUrl: 'directLinking.component.html' -}) -export class DirectLinkingComponent { - contexts=[]; - projects=[]; - - results = []; - - linkType:string ="project"; // link type (selected in home page) : project, context, software, etc - /* url Parameters for inline linking */ - id:string = null; //entity id - type:string = null; // entity type (publication or dataset) - linkTo:string = null; // entity type (project or context or result) - - entityTypes=["dataset", "publication", "project","context"]; - inlineResult:ClaimResult =null; - displayedResult:ClaimResult =null; - sub:any =null; - show:string="claim"; //{claim,result} - validInput:boolean = null;//'true; - constructor ( private _router: Router, private route: ActivatedRoute, private entitySearch:EntitiesSearchService, - private publicationsSearch:SearchPublicationsService, private datasetsSearch:SearchDatasetsService, private _meta: Meta) { - this._meta.setTitle("OpenAIRE | Direct Linking"); - } - ngOnInit() { - if(localStorage.getItem("projects")){ - this.projects = JSON.parse(localStorage.getItem("projects")); - } - if(localStorage.getItem("contexts")){ - this.contexts = JSON.parse(localStorage.getItem("contexts")); - } - if(localStorage.getItem("results")){ - this.results = JSON.parse(localStorage.getItem("results")); - } - if(localStorage.getItem("results")){ - this.results = JSON.parse(localStorage.getItem("results")); - } - if(localStorage.getItem("inlineEntity")){ - this.inlineResult = JSON.parse(localStorage.getItem("inlineEntity")); - } - - localStorage.removeItem("projects"); - localStorage.removeItem("contexts"); - localStorage.removeItem("results"); - localStorage.removeItem("inlineEntity"); - - this.sub = this.route.queryParams.subscribe(params => { - this.id = params['id']; - this.type = params['type']; - this.linkTo = params['linkTo']; - if(this.type!=null && this.linkTo!=null){ - this.type = (this.entityTypes.indexOf(this.type) != -1)? this.type:'publication'; - this.linkTo = (this.entityTypes.indexOf(this.linkTo) != -1 || this.linkTo == "result")? this.linkTo:'project'; - this.show = (this.linkTo != "result")?"claim":"result"; - this.linkType = this.linkTo; - var isInlineResult:boolean = false; // is a link result - result - if((this.type == "publication" || this.type == "dataset") && ((this.linkTo == "publication" || this.linkTo == "dataset") || this.linkTo == "result" )){ - isInlineResult = true; - } - if(this.type == "project"){ - this.linkType = "project"; - this.getProjectById(this.id); - }else if(this.type == "publication"){ - this.getPublicationById(this.id,isInlineResult); - }else if(this.type == "dataset"){ - this.getDatasetById(this.id,isInlineResult); - }else{ - this.validInput = this.isValidInput(null); - } - - }else{ - this.validInput = this.isValidInput(null); - - } - - }); - } - isValidInput(result){ - if(result == null){ - return false; - }else if(this.type == "project" && this.linkTo != "result"){ - return false; - }else if(["dataset","publication"].indexOf(this.type) != -1 && (["project","context","result"].indexOf(this.linkTo) == -1)){ - return false; - }else if(["project","dataset","publication"].indexOf(this.type) == -1){ - return false; - }else{ - return true; - } - } - getProjectById(id:string){ - this.sub = this.entitySearch.fetchByType(id,"project").subscribe( - data => { - console.log(data); - var item =data[0]; - var project: ClaimProject = new ClaimProject(); - project.funderId = item.funderId; - project.funderName = item.funderName; - project.projectId = id; - project.projectName = item.projectName; - project.projectAcronym = item.projectAcronym; - project.startDate = item.startDate; - project.endDate = item.endDate; - project.code = item.code; - project.jurisdiction = item.jurisdiction; - project.fundingLevel0 = item.fundingLevel0; - - this.projects.push( project); - this.validInput = this.isValidInput(project); - - }, - err => { - this.validInput = this.isValidInput(null); - console.log("An error occured") - }); - } - getPublicationById(id:string, isInlineResult:boolean){ - - this.sub = this.publicationsSearch.searchPublicationById(id).subscribe( - data => { - var item =data[0]; - var result: ClaimResult = new ClaimResult(); - result.id=id; - result.type="publication"; - result.source="openaire"; - result.title = item['title'].name; - result.url= item['title'].url; - result.result = item; - result.accessRights = item['title'].accessMode; - result.date = item.year; - this.displayedResult = result; - if(isInlineResult){ - this.inlineResult = result; - }else{ - this.results.push( result); - } - this.validInput = this.isValidInput(result); - }, - err => { - this.validInput = this.isValidInput(null); - console.log("An error occured") - }); - } - getDatasetById(id:string, isInlineResult:boolean){ - this.sub = this.datasetsSearch.searchDatasetById(id).subscribe( - data => { - var item =data[0]; - var result: ClaimResult = new ClaimResult(); - result.id=id; - result.type="dataset"; - result.source="openaire"; - result.title = item['title'].name; - result.url= item['title'].url; - result.result = item; - result.accessRights = item['title'].accessMode; - result.date = item.year; this.displayedResult = result; - if(isInlineResult){ - this.inlineResult = result; - }else{ - this.results.push( result); - } - this.validInput = this.isValidInput(result); - }, - err => { - this.validInput = this.isValidInput(null); - console.log("An error occured") - }); - - } - - - - - - - -} diff --git a/portal-2/src/app/claims/directLinking/directLinking.module.ts b/portal-2/src/app/claims/directLinking/directLinking.module.ts deleted file mode 100644 index aa5ab421..00000000 --- a/portal-2/src/app/claims/directLinking/directLinking.module.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { NgModule } from '@angular/core'; - -import { SharedModule } from '../../shared/shared.module'; -import { DirectLinkingComponent } from './directLinking.component'; -import { DirectLinkingRoutingModule } from './directLinking-routing.module'; - -import {SelectedProjectsModule} from '../linking/selected/selectedProjects.module'; -import {SelectedContextsModule} from '../linking/selected/selectedContexts.module'; -import {SelectedPublicationsModule} from '../linking/selected/selectedResults.module'; -import {InsertClaimsModule} from '../linking/insertClaim/insertClaim.module'; -import {StartOverModule} from '../claim-utils/startOver.module'; - -import {EntitySearchServiceModule} from '../../utils/entitiesAutoComplete/entitySearchService.module'; -import {PublicationsServiceModule} from '../../services/publicationsService.module'; -import {DatasetsServiceModule} from '../../services/datasetsService.module'; -import {LoginGuard} from'../../login/loginGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {HelperModule} from '../../utils/helper/helper.module'; -import {ClaimContextSearchFormModule} from '../claim-utils/claimContextSearchForm.module'; -import {ClaimProjectsSearchFormModule} from '../claim-utils/claimProjectSearchForm.module'; -import {ClaimResultSearchFormModule} from '../claim-utils/claimResultSearchForm.module'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - - -@NgModule({ - imports: [ - SharedModule, - DirectLinkingRoutingModule,SelectedProjectsModule, SelectedContextsModule, SelectedPublicationsModule, InsertClaimsModule, - EntitySearchServiceModule, PublicationsServiceModule, DatasetsServiceModule, StartOverModule, HelperModule, - ClaimContextSearchFormModule, ClaimProjectsSearchFormModule, ClaimResultSearchFormModule - - - ], - providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled], - declarations: [ - DirectLinkingComponent - ], exports:[DirectLinkingComponent] -}) -export class DirectLinkingModule { } diff --git a/portal-2/src/app/claims/linking/bulkClaim/bulkClaim.component.ts b/portal-2/src/app/claims/linking/bulkClaim/bulkClaim.component.ts deleted file mode 100644 index bc9ea125..00000000 --- a/portal-2/src/app/claims/linking/bulkClaim/bulkClaim.component.ts +++ /dev/null @@ -1,256 +0,0 @@ -import {Component, Input, Output, EventEmitter,ViewChild} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {SearchCrossrefService} from '../../claim-utils/service/searchCrossref.service'; -import {SearchDataciteService} from '../../claim-utils/service/searchDatacite.service'; - -import {ModalLoading} from '../../../utils/modal/loading.component'; -import {Dates, DOI} from '../../../utils/string-utils.class'; -import {OpenaireProperties} from '../../../utils/properties/openaireProperties'; -import {ClaimResult} from '../../claim-utils/claimEntities.class'; - - -@Component({ - selector: 'bulk-claim', - template: ` -
-
- - - - - - - -
Upload a DOI csv file:
- - - - - - - -
- - - -
- ` - -}) -//[(ngModel)]="date" -export class BulkClaimComponent { - filesToUpload: Array; - navigateTo: string = "Search"; - source: string = "crossref"; - type : string = "publication"; - resultsFromSearch:number; - @Input() public select:boolean = true ; - @Input() public results; - - allIds:string[] = []; - foundIds:string[] = []; - duplicateIds:string[] = []; - notFoundIds:string[] = []; - noValidIds:string[] = []; - showReport:boolean = false; - showInfo :boolean = false; - @ViewChild (ModalLoading) loading : ModalLoading ; - errorMessage = ""; - infoMEssage = ""; - enableUpload:boolean = true; - constructor(private _searchCrossrefService: SearchCrossrefService, private _searchDataciteService: SearchDataciteService) { - this.filesToUpload = []; - } - ngOnInit() {} - - upload() { - this.enableUpload = false; - this.showReport = false; - this.errorMessage = ""; - if(this.filesToUpload.length == 0){ - this.errorMessage = "There is no selected file to upload."; - return ; - } - this.loading.open(); - - this.makeFileRequest(OpenaireProperties.getUploadServiceUrl(), [], this.filesToUpload).then((result) => { - var rows = (result as any).split('\n'); // I have used space, you can use any thing. - var i = 0; - this.duplicateIds = []; - this.allIds = []; - this.foundIds = []; - this.noValidIds = []; - this.results.slice(0,this.results.length); - this.notFoundIds = []; - - for(i=0;i-1){ - this.duplicateIds.push(id); - }else{ - this.allIds.push(id); - this.fetchResult(id,accessMode,embargoDate); - } - }else{ - this.noValidIds.push(id); - } - } - - } - - }, (error) => { - this.enableUpload = true; - console.log(error); - this.loading.close(); - this.errorMessage = "An error occured while uploading..."; - }); - } - private removeDoubleQuotes(value){ - if(value.indexOf('"')== 0){ - value = value.substring(1,value.length); - } - var index =+value.indexOf('"'); - if(index == (value.length - 1) || index == (value.length - 2) ){ - value = value.substring(0,index); - } - return value; - } - private validateAccessMode(value){ - var accessModes = ["OPEN", "CLOSED", "EMBARGO"]; - if(accessModes.indexOf(value) > -1){ - return true; - } - - return false; - } - - fileChangeEvent(fileInput: any){ - this.filesToUpload = > fileInput.target.files; - } - - makeFileRequest(url: string, params: Array, files: Array) { - return new Promise((resolve, reject) => { - var formData: any = new FormData(); - var xhr = new XMLHttpRequest(); - for(var i = 0; i < files.length; i++) { - formData.append("uploads[]", files[i], files[i].name); - } - xhr.onreadystatechange = function () { - if (xhr.readyState == 4) { - if (xhr.status == 200) { - resolve(xhr.response); - } else { - reject(xhr.response); - } - } - } - xhr.open("POST", url, true); - xhr.send(formData); - }); - } - - fetchResult(id:string,accessMode:string,date:string){ - this._searchCrossrefService.searchCrossrefByDOIs([id]).subscribe( - data => { - - var crossrefResult = data.items[0]; - if(data.items.length > 0){ - this.foundIds.push(id); - var result: ClaimResult = ClaimResult.generateResult(crossrefResult, id,"crossref","publication", crossrefResult.URL, crossrefResult.title, crossrefResult.created['date-time'], accessMode); - result.embargoEndDate = date; - this.results.push(result); - this.endOfFetching(); - }else{ - this.searchInDatacite(id,accessMode,date); - // this.notFoundIds.push(id); - } - }, - err => { - console.log(err); - this.notFoundIds.push(id); - this.endOfFetching(); - } - ); - } - searchInDatacite(id:string,accessMode:string,date:string){ - this._searchDataciteService.getDataciteResultByDOI(id).subscribe( - item => { - var dataciteResult = item.data; - - if(dataciteResult != null && dataciteResult.attributes!= null ){ - - this.foundIds.push(id); - var result: ClaimResult = ClaimResult.generateResult(dataciteResult, id,"datacite","dataset", 'http://dx.doi.org/'+dataciteResult.attributes.doi, dataciteResult.attributes.title, dataciteResult.attributes.published, accessMode); - result.embargoEndDate = date; - this.results.push(result); - }else{ - this.notFoundIds.push(id); - } - this.endOfFetching(); - }, - err => { - console.log(err); - this.notFoundIds.push(id); - this.endOfFetching(); - } - ); - } - endOfFetching(){ - if(this.allIds.length == this.foundIds.length+this.notFoundIds.length+ this.duplicateIds.length ){ - this.showReport = true; - this.enableUpload = true; - this.loading.close(); - - } - - } -} diff --git a/portal-2/src/app/claims/linking/bulkClaim/bulkClaim.module.ts b/portal-2/src/app/claims/linking/bulkClaim/bulkClaim.module.ts deleted file mode 100644 index 7f35a46f..00000000 --- a/portal-2/src/app/claims/linking/bulkClaim/bulkClaim.module.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { NgModule } from '@angular/core'; - -import { SharedModule } from '../../../shared/shared.module'; -import {LoadingModalModule} from '../../../utils/modal/loadingModal.module'; -import {BulkClaimComponent} from './bulkClaim.component'; -import {SearchCrossrefServiceModule} from '../../claim-utils/service/searchCrossrefService.module'; -import {SearchDataciteServiceModule} from '../../claim-utils/service/searchDataciteService.module'; - -@NgModule({ - imports: [ - SharedModule, LoadingModalModule, SearchCrossrefServiceModule - ], - declarations: [ -BulkClaimComponent - ], exports:[ BulkClaimComponent] -}) -export class BulkClaimModule { } diff --git a/portal-2/src/app/claims/linking/bulkLinking.component.ts b/portal-2/src/app/claims/linking/bulkLinking.component.ts deleted file mode 100644 index 96e32dcf..00000000 --- a/portal-2/src/app/claims/linking/bulkLinking.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -// import {Component, Input} from '@angular/core'; -// import {Observable} from 'rxjs/Observable'; -// -// @Component({ -// selector: 'bulk-linking', -// //providers: [MdRadioDispatcher], -// template: ` -// -// ` -// -// }) -// //[(ngModel)]="date" -// export class BulkLinkingComponent { -// constructor () { -// } -// } diff --git a/portal-2/src/app/claims/linking/bulkLinking.module.ts b/portal-2/src/app/claims/linking/bulkLinking.module.ts deleted file mode 100644 index 55c71221..00000000 --- a/portal-2/src/app/claims/linking/bulkLinking.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -// import { NgModule } from '@angular/core'; -// -// import { SharedModule } from '../../shared/shared.module'; -// import { BulkLinkingComponent } from './bulkLinking.component'; -// import { BulkLinkingRoutingModule } from './bulkLinking-routing.module'; -// import {LinkingGenericModule} from './linkingGeneric.module'; -// import {BulkClaimModule} from './bulkClaim/bulkClaim.module'; -// @NgModule({ -// imports: [ -// SharedModule, -// BulkLinkingRoutingModule, -// LinkingGenericModule, -// BulkClaimModule -// -// ], -// declarations: [ -// BulkLinkingComponent -// ], exports:[BulkLinkingComponent] -// }) -// export class BulkLinkingModule { } diff --git a/portal-2/src/app/claims/linking/insertClaim/insertClaim.component.ts b/portal-2/src/app/claims/linking/insertClaim/insertClaim.component.ts deleted file mode 100644 index a916c757..00000000 --- a/portal-2/src/app/claims/linking/insertClaim/insertClaim.component.ts +++ /dev/null @@ -1,369 +0,0 @@ -import {Component, Input, Output, EventEmitter, ViewChild} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {Router} from '@angular/router'; -import {ClaimsService} from '../../claim-utils/service/claims.service'; - -import {ModalLoading} from '../../../utils/modal/loading.component'; -import {AlertModal} from '../../../utils/modal/alert'; -import {Md5} from 'ts-md5/dist/md5'; -import {Session} from '../../../login/utils/helper.class'; -import {ErrorCodes} from '../../../login/utils/guardHelper.class'; - -@Component({ - selector: 'claim-insert', - template: ` -
- -
There are {{insertedClaims.length}} claims, follow the link to manage your claims
-
-
- -
- - - - - - - ` -}) -export class ClaimInsertComponent { - constructor (private claimService: ClaimsService, private _router:Router) {} - ngOnInit() { - // console.info("Inlineentity:" +(this.inlineEntity)?this.inlineEntity+(this.inlineEntity.id)?this.inlineEntity.id:"no id":"null"+ + " show "+ (!this.claiming && this.showButton) ); - } - - - @Input() public contexts; - @Input() public projects; - @Input() public results; - @Input() public showButton:boolean = true; - @Input() show='claim'; - @Input() inlineEntity = null; // the entity from the landing page - @Output() showChange = new EventEmitter(); - - @ViewChild (ModalLoading) loading : ModalLoading ; - @ViewChild(AlertModal) alert; - - public claiming =false; - public error = false; - public errorMessage = ""; - public warningMessage = ""; - public claimsTODO:number = 0; - public claims:number = 0; - - private servicesRespond:number = 0; - private insertedClaims=[]; - private errorInClaims=[]; - private insertedRecords=[]; - private errorInRecords=[]; -public validateInsertions(){ - // console.info("Inlineentity:" +(this.inlineEntity)?this.inlineEntity+(this.inlineEntity.id)?this.inlineEntity.id:"no id":"null"+ + " show "+ (!this.claiming && this.showButton) ); - if(this.validate()){ - if(this.validateDates()){ - this.insertActions(); - return true; - } - } - return -} -private insertActions(){ - this.servicesRespond = 0; - this.insertedClaims=[]; - this.errorInClaims=[]; - this.insertedRecords=[]; - this.errorInRecords=[]; - if(!Session.isValidAndRemove()){ - this.showButton = false; - localStorage.setItem("projects", JSON.stringify(this.projects)); - localStorage.setItem("contexts", JSON.stringify(this.contexts)); - localStorage.setItem("results", JSON.stringify(this.results)); - if(this.inlineEntity != null){ - localStorage.setItem("inlineEntity", JSON.stringify(this.inlineEntity)); - } - - this._router.navigate(['/user-info'], { queryParams: { "errorCode": ErrorCodes.NOT_VALID, "redirectUrl": this._router.url} }); - - }else{ - this.claiming = true; - var user=Session.getUserEmail(); - this.loading.open(); - var claims = []; - var directclaims = []; - if(this.results){ - console.info("results: "+this.results.length); - - for (var i = 0; i < this.results.length; i++) { - var result=this.results[i]; - if(["crossref","datacite","orcid"].indexOf(result.source) != -1){ - directclaims.push({"id":result.id, "record":this.createDirectClaim(result,this.projects,this.contexts)}); - } - if(this.contexts){ - for (var j = 0; j < this.contexts.length; j++) { - var context = this.contexts[j]; - var claim = this.createContextClaim(result, context, user); - claims.push(claim); - } - } - if(this.projects){ - for (var k = 0; k < this.projects.length; k++) { - var project = this.projects[k]; - var projectClaim = this.createProjectClaim(result, project, user); - claims.push(projectClaim); - } - } - if(this.inlineEntity != null){ - var resultClaim = this.createResultClaim(this.inlineEntity, result, user); - claims.push(resultClaim); - } - - } - } - //first call direct index service - when call is done (success or error) call isertBulkClaims method to insert claims in DB - console.info("\n\ndirectclaims: "+directclaims.length+"\n\n"); - this.claimService.insertDirectRecords(directclaims).subscribe( - data => { - this.insertedRecords = data.insertedIds; - - this.errorInRecords = data.errorInClaims; - this.isertBulkClaims(claims); - }, - err => { - err=err.json(); - if(err.insertedIds && err.insertedIds.length >0){ - this.insertedRecords = err.insertedIds; - } - if(err.errorInClaims && err.errorInClaims.length >0){ - this.errorInRecords = err.errorInClaims; - } - this.isertBulkClaims(claims); - } - ); - - } - -} - -private isertBulkClaims(claims){ - console.info("try to insert "+claims.length+" claims"); - this.claimService.insertBulkClaims(claims).subscribe( - data => { - this.insertedClaims = data.insertedIds; - this.errorInClaims = data.errorInClaims; - this.afterclaimsInsertion(); - }, - err => { - err=err.json(); - if(err.insertedIds && err.insertedIds.length >0){ - this.insertedClaims = err.insertedIds; - } - if(err.errorInClaims && err.errorInClaims.length >0){ - this.errorInClaims = err.errorInClaims; - } - this.afterclaimsInsertion(); - } - ); -} -private validate(){ - this.warningMessage = ""; - this.errorMessage = ""; - if( this.results && this.results.length == 0){ - this.warningMessage = "There are no research results selected."; - }else if((!this.contexts|| this.contexts.length==0 )&&(!this.projects|| this.projects.length==0 )&& ( this.inlineEntity == null)){ - this.warningMessage = "There are no projects or communities to link."; - // }else if (this.inline && !this.inlineEntity){ - // this.errorMessage = "No inline entity"; - // console.log(this.inline + " "+ this.inlineEntity); - }else{ - return true; - } - return false; -} -private validateDates(){ - if(this.projects){ - for (var k = 0; k < this.projects.length; k++) { - var project = this.projects[k]; - console.info(project.startDate+" "+project.endDate + " "+project.projectAcronym); - if(this.results){ - for (var i = 0; i < this.results.length; i++) { - var result = this.results[i]; - if(result.date && result.date != null){ - console.info("Date :"+ result.date + " & embargoEndDate :" +result.embargoEndDate ); - if((project.startDate && result.date < project.startDate) || ( project.endDate && result.date > (project.endDate+5)) ){ - this.confirmOpen(); - return false; - } - } - } - } - - - } - } - if(this.results){ - for (var i = 0; i < this.results.length; i++) { - var result = this.results[i]; - if(result.date && result.date != null){ - console.info("Date :"+ result.date + " & embargoEndDate :" +result.embargoEndDate ); - if((result.embargoEndDate && result.embargoEndDate != null) && result.date >result.embargoEndDate ){ - this.confirmOpen(); - return false; - } - } - } - } - - return true; -} -private afterclaimsInsertion(){ - - // this.servicesRespond++; - // if(this.servicesRespond == 2){ - this.loading.close(); - this.claiming = false; - - if(this.errorInClaims.length == 0 && this.insertedClaims.length > 0 && this.errorInRecords.length == 0){ - - this._router.navigate( ['/myclaims'] ); - this.showChange.emit({ - value: this.show - }); - }else{ - this.errorsInClaimsInsertion(); - } - // } -} -private errorsInClaimsInsertion(){ - this.errorMessage = ""; - this.loading.close(); - this.error = true; - this.claiming = false; - this.showButton = false; - var text ="" - console.log("Errors: this.errorInRecords.length: "+this.errorInRecords.length+" - this.errorInClaims.length: "+this.errorInClaims.length); - if(this.errorInRecords.length>0){ - text+="
The following records couldn't automatically inserted to the Openaire Info space:
    "; - for(var i=0; i< this.errorInRecords.length ; i++){ - for(var k=0; k< this.results.length ; k++){ - if(this.results[k].id == this.errorInRecords[i]){ - text+="
  • "+this.results[i].title+" from "+this.results[i].source+"
  • "; - } - } - } - text+="
"; - - } - if(this.errorInClaims.length > 0){ - text+="
The following links couldn't be saved:
    "; - for(var i=0; i< this.errorInClaims.length ; i++){ - // var claim = { claimedBy : user, sourceId : context.concept.id, sourceType : "context", sourceCollectedFrom:"openaire", sourceAccessRights:"OPEN", sourceEmbargoEndDate:"no", targetId : result.id , targetType : result.type, targetCollectedFrom: result.source, targetAccessRights:result.accessRights, targetEmbargoEndDate: (result.embargoEndDate == null?"":result.embargoEndDate)}; - - text+="
  • "+this.errorInClaims[i].sourceType+": "+this.errorInClaims[i].sourceId +"(from "+this.errorInClaims[i].sourceCollectedFrom+") link to "+this.errorInClaims[i].targetType+": "+this.errorInClaims[i].targetId +"(from "+this.errorInClaims[i].targetCollectedFrom+")
  • "; - - } - text+="
"; - } - this.errorMessage+="
An error occured:
"+text; - console.log(text); - // if(this.inline){ - // this.show = "error"; - // this.showChange.emit({ - // value: this.show - // }); - // } - -} - - - - private createContextClaim(result:any, context:any, user:any){ - var claim = { claimedBy : user, sourceId : context.concept.id, sourceType : "context", sourceCollectedFrom:"openaire", sourceAccessRights:"OPEN", sourceEmbargoEndDate:"no", targetId : result.id , targetType : result.type, targetCollectedFrom: result.source, targetAccessRights:result.accessRights, targetEmbargoEndDate: (result.embargoEndDate == null?"":result.embargoEndDate)}; - return claim; - } - private createProjectClaim(result:any, project:any, user:any){ - //project.projectId - // var dummyID = "dummyID"; - var claim = { claimedBy : user, sourceId : project.projectId, sourceType : "project", sourceCollectedFrom:"openaire", sourceAccessRights:"OPEN", sourceEmbargoEndDate:"", targetId : result.id , targetType : result.type, targetCollectedFrom: result.source, targetAccessRights:result.accessRights, targetEmbargoEndDate: (result.embargoEndDate == null?"":result.embargoEndDate)}; - return claim; - } - private createResultClaim(inlineResult:any, result:any, user:any){ - var claim = { claimedBy : user, sourceId : result.id, sourceType : result.type, sourceCollectedFrom: result.source, sourceAccessRights: result.accessRights, sourceEmbargoEndDate: result.embargoEndDate, targetId : inlineResult.id , targetType : inlineResult.type, targetCollectedFrom: inlineResult.source, targetAccessRights: inlineResult.accessRights, targetEmbargoEndDate: (inlineResult.embargoEndDate == null?"":inlineResult.embargoEndDate)}; - return claim; - } -createDirectClaim(result, projects, contexts){ - var entity = {}; - var md5_id = Md5.hashStr(result.id); - entity["originalId"]="userclaim___::"+md5_id; - entity["openaireId"]="userclaim___::"+md5_id; - entity["title"]=result.title; - entity["title"] =(Array.isArray(result.title) && result.title.length > 0 )?result.title[0]:result.title; - - if(result.authors && result.authors.length > 0){ - entity["authors"]=result.authors; - } - if(result.publisher){ - entity["publisher"]=result.publisher; - } - if(result.description){ - entity["description"]=result.description; - } - // entity["language"]=""; no info - entity["type"]=result.type; - if(result.source == "crossref" || result.source == "datacite"){ - entity["pids"]= [];//{type:string, value:string}[]; - entity["pids"].push({type:"doi",value:result.id}) - } - entity["licenseCode"]=result.accessRights; - if(result.accessRights == "EMBARGO"){ - entity["embargoEndDate"]=result.embargoEndDate; - } - if(result.type =="publication"){ - entity["resourceType"]="0001"; - }else{ - entity["resourceType"]="0021"; - } - entity["url"]=result.url; - entity["hostedById"]="openaire____::1256f046-bf1f-4afc-8b47-d0b147148b18"; - if(result.source == "crossref"){ - entity["collectedFromId"]="openaire____::crossref"; - }else if(result.source == "datacite"){ - entity["collectedFromId"]="openaire____::datacite"; - }else if(result.source == "orcid"){ - entity["collectedFromId"]="openaire____::orcid"; - }else if(result.source == "orpenaire"){ - entity["collectedFromId"]="openaire____::driver"; - } - - if(projects.length>0){ - entity["linksToProjects"]=[]; - for(var i =0; i < projects.length; i++){ - // "info:eu-repo/grantAgreement/EC/FP7/283595/EU//OpenAIREplus", - entity["linksToProjects"].push("info:eu-repo/grantAgreement/"+projects[i].funderName+"/"+projects[i].fundingLevel0+"/"+projects[i].code+"/"+projects[i].jurisdiction+"/"+projects[i].projectName+"/"+projects[i].projectAcronym); - } - } - if(contexts.length > 0){ - entity["contexts"]=[]; - for(var i =0; i < contexts.length; i++){ - entity["contexts"].push(contexts[i].concept.id); - } - } - var json = JSON.stringify(entity); - console.log("\nJSON:\n"+json); - return entity; - - - -} - confirmOpen(){ - this.alert.cancelButton = true; - this.alert.okButton = true; - this.alert.alertTitle = "Invalid dates"; - this.alert.message = "There is a research result whose publication date is after project end date or before project start date. Or embargo end date of a research result is before research result's publication date."; - this.alert.okButtonText = "Proceed anyway"; - this.alert.cancelButtonText = "Cancel"; - this.alert.open(); - } - confirmClose(data){ - this.insertActions(); - } -} diff --git a/portal-2/src/app/claims/linking/insertClaim/insertClaim.module.ts b/portal-2/src/app/claims/linking/insertClaim/insertClaim.module.ts deleted file mode 100644 index 6b2c4bb0..00000000 --- a/portal-2/src/app/claims/linking/insertClaim/insertClaim.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; - -import { SharedModule } from '../../../shared/shared.module'; -import {AlertModalModule} from '../../../utils/modal/alertModal.module'; -import {LoadingModalModule} from '../../../utils/modal/loadingModal.module'; -import {ClaimInsertComponent} from './insertClaim.component'; -import {ClaimServiceModule} from '../../claim-utils/service/claimsService.module'; - -@NgModule({ - imports: [ - SharedModule, AlertModalModule, LoadingModalModule, ClaimServiceModule - ], - declarations: [ClaimInsertComponent], - exports:[ ClaimInsertComponent] -}) -export class InsertClaimsModule { } diff --git a/portal-2/src/app/claims/linking/linking-routing.module.ts b/portal-2/src/app/claims/linking/linking-routing.module.ts deleted file mode 100644 index 2660b77f..00000000 --- a/portal-2/src/app/claims/linking/linking-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { LoginGuard} from'../../login/loginGuard.guard'; - -import { LinkingGenericComponent } from './linkingGeneric.component'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: LinkingGenericComponent, canActivate: [IsRouteEnabled, LoginGuard], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder]}, - - ]) - ] -}) -export class LinkingRoutingModule { } diff --git a/portal-2/src/app/claims/linking/linking.component.ts b/portal-2/src/app/claims/linking/linking.component.ts deleted file mode 100644 index dbf7a23f..00000000 --- a/portal-2/src/app/claims/linking/linking.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -// import {Component, Input} from '@angular/core'; -// import {Observable} from 'rxjs/Observable'; -// import {LinkingGenericComponent} from './linkingGeneric.component'; -// -// @Component({ -// selector: 'linking', -// template: ` -// -// ` -// -// }) -// export class LinkingComponent { -// constructor () { -// } -// -// } diff --git a/portal-2/src/app/claims/linking/linkingGeneric.component.html b/portal-2/src/app/claims/linking/linkingGeneric.component.html deleted file mode 100644 index 218b2a68..00000000 --- a/portal-2/src/app/claims/linking/linkingGeneric.component.html +++ /dev/null @@ -1,144 +0,0 @@ -
-
-
- -
-
- Link -
- -
- -
-
- -
- - - - - - - - - - - - -
- -
    -
  • - - -
  • -
  • - - -
  • - - -
-
- - - - - -
-
-
- - - - - - - - - - - - -
- - -
-
-
- - -
- - - - -
- -
- - - - -
- -
-
-
diff --git a/portal-2/src/app/claims/linking/linkingGeneric.component.ts b/portal-2/src/app/claims/linking/linkingGeneric.component.ts deleted file mode 100644 index 379b8677..00000000 --- a/portal-2/src/app/claims/linking/linkingGeneric.component.ts +++ /dev/null @@ -1,117 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {ActivatedRoute, Router} from '@angular/router'; -import {EntitiesSearchService} from '../../utils/entitiesAutoComplete/entitySearch.service'; -import {ClaimProject, ClaimResult} from '../claim-utils/claimEntities.class'; -import {SearchPublicationsService} from '../../services/searchPublications.service'; -import {SearchDatasetsService} from '../../services/searchDatasets.service'; -import { Meta} from '../../../angular2-meta'; -declare var UIkit:any; - -@Component({ - selector: 'linking-generic', - templateUrl: 'linkingGeneric.component.html' - -}) -export class LinkingGenericComponent { - - @Input() bulkMode: boolean = false; - sourceType:string; - targetType:string; - step:number = 1; - contexts=[]; - projects=[]; - results = []; - show = "project"; - date='8-6-2016'; - keyword: string = ""; - linkType:string ="project"; // link type (selected in home page) : project, context, software, etc - /* url Parameters for inline linking */ - id:string = null; //entity id - type:string = null; // entity type (publication or research data) - linkTo:string = null; // entity type (project or context or result) - - entityTypes=["dataset", "publication", "project","context"]; - inlineResult:ClaimResult =null; - sub:any =null; - constructor ( private _router: Router, private route: ActivatedRoute, private entitySearch:EntitiesSearchService, - private publicationsSearch:SearchPublicationsService, private datasetsSearch:SearchDatasetsService, private _meta: Meta) { - this._meta.setTitle("OpenAIRE | Linking"); - } - ngOnInit() { - if( typeof localStorage !== 'undefined') { - if(localStorage.getItem("projects")){ - this.projects = JSON.parse(localStorage.getItem("projects")); - - } - if(localStorage.getItem("contexts")){ - this.contexts = JSON.parse(localStorage.getItem("contexts")); - } - if(localStorage.getItem("results")){ - this.results = JSON.parse(localStorage.getItem("results")); - - } - localStorage.removeItem("projects"); - localStorage.removeItem("contexts"); - localStorage.removeItem("results"); - } - } - - next(){ - - if((this.show == 'result' && this.keyword == '')||(this.show == 'dataset' || this.show == 'publication')){ - this.show='claim'; - - } - } - prev(){ - if(this.show == 'claim'){ - this.show='result'; - } - } - - - resultsChange($event) { - this.results=$event.value; - } - - projectsChange($event) { - this.projects=$event.value; - } - - linkTypeChange($event) { - - this.linkType =$event.value; - this.show="result"; - if(this.bulkMode){ - this.show="claim"; - } - } - - showChange($event) { - this.show=$event.value; - this.showChangedType($event.value); - } - - showChangedType(type:string) { - this.show=type; - if(this.show == 'project' || this.show == 'context' || this.show == 'software'){ - this.linkType = this.show; - } - } - - canProceedToMetadata(){ - if(this.results.length == 0){ - - UIkit.notification({ - message : 'No research results selected!
Please select research results to link with projects and/ or ommunities.', - status : 'warning', - timeout : 1000, - pos : 'top-center' - }); - }else{ - this.show = 'claim'; - this.step = 3; - } - } -} diff --git a/portal-2/src/app/claims/linking/linkingGeneric.module.ts b/portal-2/src/app/claims/linking/linkingGeneric.module.ts deleted file mode 100644 index d9627a23..00000000 --- a/portal-2/src/app/claims/linking/linkingGeneric.module.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { NgModule } from '@angular/core'; - -import { SharedModule } from '../../shared/shared.module'; -import {SelectedProjectsModule} from './selected/selectedProjects.module'; -import {SelectedContextsModule} from './selected/selectedContexts.module'; -import {SelectedPublicationsModule} from './selected/selectedResults.module'; -import {InsertClaimsModule} from './insertClaim/insertClaim.module'; -import {LinkingGenericComponent} from './linkingGeneric.component'; -import {EntitySearchServiceModule} from '../../utils/entitiesAutoComplete/entitySearchService.module'; -import {PublicationsServiceModule} from '../../services/publicationsService.module'; -import {DatasetsServiceModule} from '../../services/datasetsService.module'; -import { LinkingRoutingModule } from './linking-routing.module'; -import {StartOverModule} from '../claim-utils/startOver.module'; -import {LoginGuard} from'../../login/loginGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {ClaimContextSearchFormModule} from '../claim-utils/claimContextSearchForm.module'; -import {ClaimProjectsSearchFormModule} from '../claim-utils/claimProjectSearchForm.module'; -import {BulkClaimModule} from './bulkClaim/bulkClaim.module'; -import {ClaimResultSearchFormModule} from '../claim-utils/claimResultSearchForm.module'; -import {HelperModule} from '../../utils/helper/helper.module'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - SharedModule, SelectedProjectsModule, SelectedContextsModule, - SelectedPublicationsModule, - InsertClaimsModule, - EntitySearchServiceModule, PublicationsServiceModule, DatasetsServiceModule, LinkingRoutingModule, StartOverModule, - ClaimContextSearchFormModule, ClaimProjectsSearchFormModule, BulkClaimModule, ClaimResultSearchFormModule, HelperModule - ], - providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled], - declarations: [ - LinkingGenericComponent - ], exports:[ - LinkingGenericComponent ] -}) -export class LinkingGenericModule { } diff --git a/portal-2/src/app/claims/linking/selected/selectedContexts.component.ts b/portal-2/src/app/claims/linking/selected/selectedContexts.component.ts deleted file mode 100644 index c45f571e..00000000 --- a/portal-2/src/app/claims/linking/selected/selectedContexts.component.ts +++ /dev/null @@ -1,90 +0,0 @@ -import {Component, Input,Output, EventEmitter} from '@angular/core'; -import {ClaimContext} from '../../claim-utils/claimEntities.class'; - -@Component({ - selector: 'claim-selected-contexts', - template: ` - - - -
- - -
-

Selected Communities ({{contexts.length}})

-
    -
  • - {{context.community }} > {{context.category}} > {{context.concept.label}} - - -
  • -
-
-
There are no selected communities
-
- - - - ` -}) -export class ClaimSelectedContextsComponent { - ngOnInit() { - var myDate = new Date(); - this.todayDate=( myDate.getFullYear()+ "-" +myDate.getMonth() + 1) + "-" + myDate.getDate() ; - this.nextDate= ( (myDate.getFullYear()+100)+ "-" +myDate.getMonth() + 1) + "-" + myDate.getDate() ; - //2015-05-01 - // if(this.linkType == "context"){ - this.showsearch = true - // }else{ - // this.showsearch = false; - // } -} - - - @Input() contexts:ClaimContext[]; - //The following need to be kept in case we have to save the current state - @Input() public projects; - @Input() public results; - @Input() public inlineEntity; - @Input() componentClass:string = ""; //"" or "col-sm-6" for horizontal display (besides projects) - @Input() show='home'; - @Input() title='Communities'; - @Input() linkType:string = "project"; - - @Input() hideType; - @Input() bulkMode:boolean = false; - @Output() showChange = new EventEmitter(); - - showsearch:boolean = false; - - todayDate = ''; - nextDate = ''; - - showType(type){ - if(type != this.show){ - this.show = type; - this.showChange.emit({ - value: this.show - }); - } - } - - - removeContext(item:any){ - var index:number =this.contexts.indexOf(item); - if (index > -1) { - this.contexts.splice(index, 1); - } - - } - contextSelected($event) { - // this.showsearch = false; - } - -} diff --git a/portal-2/src/app/claims/linking/selected/selectedContexts.module.ts b/portal-2/src/app/claims/linking/selected/selectedContexts.module.ts deleted file mode 100644 index 08d3d059..00000000 --- a/portal-2/src/app/claims/linking/selected/selectedContexts.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; - -import { SharedModule } from '../../../shared/shared.module'; -import {ClaimSelectedContextsComponent} from './selectedContexts.component'; -// import {ClaimContextSearchFormModule} from '../../claim-utils/claimContextSearchForm.module'; - - @NgModule({ - imports: [ - SharedModule, - // ClaimContextSearchFormModule - ], - declarations: [ - ClaimSelectedContextsComponent - ], exports:[ClaimSelectedContextsComponent] -}) -export class SelectedContextsModule { } diff --git a/portal-2/src/app/claims/linking/selected/selectedProjects.component.ts b/portal-2/src/app/claims/linking/selected/selectedProjects.component.ts deleted file mode 100644 index 5850f11b..00000000 --- a/portal-2/src/app/claims/linking/selected/selectedProjects.component.ts +++ /dev/null @@ -1,88 +0,0 @@ -import {Component, Input,Output, EventEmitter} from '@angular/core'; -import {ClaimProject} from '../../claim-utils/claimEntities.class'; -import {RouterHelper} from '../../../utils/routerHelper.class'; - -@Component({ - selector: 'claim-selected-projects', - template: ` - - -
- - - -
There are no selected projects
-
- - - - ` -}) -export class ClaimSelectedProjectsComponent { - - -ngOnInit() { - var myDate = new Date(); - this.todayDate=( myDate.getFullYear()+ "-" +myDate.getMonth() + 1) + "-" + myDate.getDate() ; - this.nextDate= ( (myDate.getFullYear()+100)+ "-" +myDate.getMonth() + 1) + "-" + myDate.getDate() ; - // if(this.linkType == "project"){ - this.showsearch = true - // }else{ - // this.showsearch = false; - // } - //2015-05-01 -} - - -@Input() projects: ClaimProject[]; -@Input() show='home'; -@Input() title='Projects'; -@Input() linkType:string = "project"; -@Input() hideType; -@Input() bulkMode:boolean = false; -@Input() linkToResults:boolean = true; -@Output() projectsChange = new EventEmitter(); -@Output() showChange = new EventEmitter(); -showsearch:boolean = false; - -todayDate = ''; -nextDate = ''; -public routerHelper:RouterHelper = new RouterHelper(); - -removeProject(item:any){ - var index:number =this.projects.indexOf(item); - if (index > -1) { - this.projects.splice(index, 1); - } - this.projectsChange.emit({ - value: this.projects - }); -} -showType(type){ -if(type != this.show){ - this.show = type; - this.showChange.emit({ - value: this.show - }); -} -} -projectSelected($event) { - // this.showsearch = false; -} - - -} diff --git a/portal-2/src/app/claims/linking/selected/selectedProjects.module.ts b/portal-2/src/app/claims/linking/selected/selectedProjects.module.ts deleted file mode 100644 index e3d96ef7..00000000 --- a/portal-2/src/app/claims/linking/selected/selectedProjects.module.ts +++ /dev/null @@ -1,18 +0,0 @@ - -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { SharedModule } from '../../../shared/shared.module'; -import {ClaimSelectedProjectsComponent} from './selectedProjects.component'; -// import {ClaimProjectsSearchFormModule} from '../../claim-utils/claimProjectSearchForm.module'; - - @NgModule({ - imports: [ - SharedModule, RouterModule, - // ClaimProjectsSearchFormModule - ], - declarations: [ - ClaimSelectedProjectsComponent - ], exports:[ClaimSelectedProjectsComponent] -}) -export class SelectedProjectsModule { } diff --git a/portal-2/src/app/claims/linking/selected/selectedResults.component.ts b/portal-2/src/app/claims/linking/selected/selectedResults.component.ts deleted file mode 100644 index a33abc1f..00000000 --- a/portal-2/src/app/claims/linking/selected/selectedResults.component.ts +++ /dev/null @@ -1,224 +0,0 @@ -import {Component, Input,Output, EventEmitter, ViewChild} from '@angular/core'; -import {AlertModal} from '../../../utils/modal/alert'; -import {ClaimResult} from '../../claim-utils/claimEntities.class'; -import {IMyOptions, IMyDateModel} from '../../../utils/my-date-picker/interfaces/index'; -import {Dates} from '../../../utils/string-utils.class'; - -@Component({ - selector: 'claim-selected-results', - template: ` - - - - - -
-
There are no selected research results
-
-

{{title}} ({{results.length}})

- - - - - - - - - - - - - - - - - - -
Research Result Change type and access mode
-
- - {{pub.title}} - {{pub.title}} - -
- - Publisher: {{pub.publisher}} - Journal: {{pub.result['journal-title'].value}} - ({{pub.date.substring(0,4)}}) - -
Authors: {{author}}{{(i < (pub.authors.slice(0,10).length-1))?"; ":""}}{{(i == pub.authors.slice(0,10).length-1 && pub.authors.length > 10)?"...":""}}
- - - -
Editors: {{author.family}} {{author.given}}{{(i < (pub.result.editor.slice(0,10).length-1))?"; ":""}}{{(i == pub.result.editor.slice(0,10).length-1 && pub.result.editor.length > 10)?"...":""}}
- - -
Authors: {{author}}{{(i < (pub.result.authors.slice(0,10).length-1))?"; ":""}}{{(i == pub.result.authors.slice(0,10).length-1 && pub.result.authors.length > 10)?"...":""}}
- - - - - - -
{{pub.source}} - {{pub.accessRights}} - {{pub.type}} -
-
- - - - - - - - Currently you cannot change metadata from OpenAIRE - -
-
- - -
-
-
- - - ` - -}) -export class ClaimSelectedResultsComponent { - ngOnInit() { - var myDate = new Date(); - this.nextDate = { date: { year: myDate.getFullYear()+10, month: (myDate.getMonth()+1), day: myDate.getDate() } }; - //2015-05-01 - -} - - @Input() results: ClaimResult[]; - @Input() title:string = "Research Results"; - @Input() showAccessRights:boolean = false; - @Input() bulkMode:boolean = false; - // @Output()resultsChange = new EventEmitter(); - @Input() showSearch:boolean = false; - nextDate = {}; - @ViewChild(AlertModal) alertApplyAll; - -public commonAccessRights = "OPEN"; // for access rights- changes when user apply a change to every result -public commonEmbargoEndDate; // for access rights: embargoEndDate - changes when user apply a change to every result -public commonType; // for research result type - changes when user apply a change to every result -public typeChanged:boolean = true; // -accessTypes = ["OPEN","CLOSED","EMBARGO","RESTRICTED"]; -private myDatePickerOptions: IMyOptions = { - // other options... - dateFormat: 'yyyy-mm-dd', - selectionTxtFontSize: '15px', - height:'28px', - width: '100%', - editableDateField: false, - showClearDateBtn: false - }; - - - removePublication(item:any){ - var index:number =this.results.indexOf(item); - if (index > -1) { - this.results.splice(index, 1); - } - // this.resultsChange.emit({ - // value: this.results - // }); - } - - - onDateChanged (event:any, item:any) { - item.embargoEndDate = Dates.getDateFromString(event.formatted); - if(this.results.length > 1 ){ - this.commonAccessRights = "EMBARGO"; - this.commonEmbargoEndDate = item.embargoEndDate; - this.confirmOpen(false,"Do you wish to apply the change to every result?"); - } - - } - onTypeChanged (event:any, item:any) { - item.type =(event); - if(this.results.length > 1 ){ - this.commonType = item.type; - this.confirmOpen(true, "Do you wish to apply the change to every result?"); - } - - } - // resultsChanged($event) { - // this.results=$event.value; - // this.resultsChange.emit({ - // value: this.results - // }); - // } - /* The following methods: - *typeChanged - *confirmOpen - *confirmClose - implement the functionality: change accessRights of a publication - apply to all if asked */ - accessRightsTypeChanged (type:any, item:any) { - item.accessRights = type; - if(this.results.length > 1 ){ - this.commonAccessRights = type; - if(this.commonAccessRights != "EMBARGO"){ - this.commonEmbargoEndDate = item.embargoEndDate; - this.confirmOpen(false, "Do you wish to apply the change to every result?"); - } - } - - } - confirmOpen(type: boolean, message: string){ - this.typeChanged = type; - this.alertApplyAll.cancelButton = true; - this.alertApplyAll.okButton = true; - this.alertApplyAll.alertTitle = "Change metadata"; - this.alertApplyAll.message = "Do you wish to apply the change to every result?"; - this.alertApplyAll.okButtonText = "Yes"; - this.alertApplyAll.cancelButtonText = "No"; - this.alertApplyAll.open(); - } - confirmClose(data){ - if(this.typeChanged){ - - for (var i = 0; i < this.results.length; i++) { - if(this.results[i].source != 'openaire' ){ - this.results[i].type = this.commonType; - } - } - - }else{ - for (var i = 0; i < this.results.length; i++) { - if(this.results[i].source != 'openaire' ){ - this.results[i].accessRights = this.commonAccessRights; - if(this.commonAccessRights == "EMBARGO"){ - this.results[i].embargoEndDate = this.commonEmbargoEndDate; - } - } - } - } - } -} diff --git a/portal-2/src/app/claims/linking/selected/selectedResults.module.ts b/portal-2/src/app/claims/linking/selected/selectedResults.module.ts deleted file mode 100644 index 0b12fb2d..00000000 --- a/portal-2/src/app/claims/linking/selected/selectedResults.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { NgModule } from '@angular/core'; - -import { SharedModule } from '../../../shared/shared.module'; -import {ClaimSelectedResultsComponent} from './selectedResults.component'; -import {AlertModalModule} from '../../../utils/modal/alertModal.module'; -import { MyDatePickerModule } from '../../../utils/my-date-picker/my-date-picker.module'; -// import {BulkClaimModule} from '../bulkClaim/bulkClaim.module'; -// import {ClaimResultSearchFormModule} from '../../claim-utils/claimResultSearchForm.module'; - -@NgModule({ - imports: [ - SharedModule, - AlertModalModule, - MyDatePickerModule, - // BulkClaimModule, ClaimResultSearchFormModule, - ], - declarations: [ - ClaimSelectedResultsComponent - ], exports:[ClaimSelectedResultsComponent] -}) -export class SelectedPublicationsModule { } diff --git a/portal-2/src/app/claims/myClaims/myClaims-routing.module.ts b/portal-2/src/app/claims/myClaims/myClaims-routing.module.ts deleted file mode 100644 index a5f99f5f..00000000 --- a/portal-2/src/app/claims/myClaims/myClaims-routing.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { LoginGuard} from'../../login/loginGuard.guard'; - -import { MyClaimsComponent } from './myClaims.component'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: MyClaimsComponent, canActivate: [IsRouteEnabled, LoginGuard], - data: {redirect: '/error'}, canDeactivate: [PreviousRouteRecorder]}]) - ] -}) -export class MyClaimsRoutingModule { } diff --git a/portal-2/src/app/claims/myClaims/myClaims.component.ts b/portal-2/src/app/claims/myClaims/myClaims.component.ts deleted file mode 100644 index f3d5adc3..00000000 --- a/portal-2/src/app/claims/myClaims/myClaims.component.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import { Meta} from '../../../angular2-meta'; - - -@Component({ - selector: 'my-claims', - template: ` -
-
-
- -
-
- My Claims -
- -
-
-
-
-` - -}) - export class MyClaimsComponent { - constructor ( private _meta: Meta ) { - this._meta.setTitle("OpenAIRE | My Claims"); - } - ngOnInit() { - - } - -} diff --git a/portal-2/src/app/claims/myClaims/myClaims.module.ts b/portal-2/src/app/claims/myClaims/myClaims.module.ts deleted file mode 100644 index e7f0199b..00000000 --- a/portal-2/src/app/claims/myClaims/myClaims.module.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { NgModule } from '@angular/core'; - -import { SharedModule } from '../../shared/shared.module'; -import { MyClaimsComponent } from './myClaims.component'; -import { MyClaimsRoutingModule } from './myClaims-routing.module'; -// import{ClaimServiceModule} from '../claim-utils/service/claimsService.module'; -import {DisplayClaimsModule} from '../claim-utils/displayClaims/displayClaims.module'; -import {LoginGuard} from'../../login/loginGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - SharedModule, - MyClaimsRoutingModule, - // ClaimServiceModule, - DisplayClaimsModule - - ], - providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled], - declarations: [ - MyClaimsComponent - ] -}) -export class MyClaimsModule { } diff --git a/portal-2/src/app/claims/myClaimsDemo.component.ts b/portal-2/src/app/claims/myClaimsDemo.component.ts deleted file mode 100644 index 6490a59c..00000000 --- a/portal-2/src/app/claims/myClaimsDemo.component.ts +++ /dev/null @@ -1,51 +0,0 @@ -// import {Component, Input} from '@angular/core'; -// import {Observable} from 'rxjs/Observable'; -// import { Router } from '@angular/router'; -// -// -// -// @Component({ -// selector: 'my-claims-demo', -// template: ` -//
-// -//
-// -// -// -//

Extra parameters for claims admin

-// -// -// -// -// -// -// -//
-//
-// -// -// -// ` -// //(click)="changeOrderby('target')" -// //od_______908::3a5b2885656a91307156325644e73b92 -// -// }) -// export class MyClaimsDemoComponent { -// constructor ( private _router: Router ) { -// } -// user:string="argirok@di.uoa.gr"; -// ngOnInit() { -// -// } -// goToPub(id: number){ -// this._router.navigate( ['Publication', { articleId: id}] ); -// } -// } diff --git a/portal-2/src/app/deposit/datasets/depositBySubject.component.ts b/portal-2/src/app/deposit/datasets/depositBySubject.component.ts deleted file mode 100644 index 17a17268..00000000 --- a/portal-2/src/app/deposit/datasets/depositBySubject.component.ts +++ /dev/null @@ -1,34 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import { Router } from '@angular/router'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; - - - -@Component({ - selector: 'deposit-by-subject', - template: ` -
- -

Or search for domain specific repositories

- -
- - - -
-
- ` -}) - -export class DepositBySubjectComponent { - @Input() subjectKeyword: string=''; - - constructor (private _router: Router) { } - - public search() { - this._router.navigate( ['participate/deposit-subject-result'], { queryParams: { "q": this.subjectKeyword } } ); - } -} diff --git a/portal-2/src/app/deposit/datasets/depositBySubjectResult-routing.module.ts b/portal-2/src/app/deposit/datasets/depositBySubjectResult-routing.module.ts deleted file mode 100644 index e336d37b..00000000 --- a/portal-2/src/app/deposit/datasets/depositBySubjectResult-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { DepositBySubjectResultComponent } from './depositBySubjectResult.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: DepositBySubjectResultComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - },canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class DepositBySubjectResultsRoutingModule { } diff --git a/portal-2/src/app/deposit/datasets/depositBySubjectResult.component.html b/portal-2/src/app/deposit/datasets/depositBySubjectResult.component.html deleted file mode 100644 index 940b4b58..00000000 --- a/portal-2/src/app/deposit/datasets/depositBySubjectResult.component.html +++ /dev/null @@ -1,79 +0,0 @@ - -
-
-
- -
-
- Deposit {{requestFor}} -
- -
-
- - - -
-
- Keywords: {{subject}} - -
-
-
- -
-
- -
- - - - -
-

Please use the information/contacts shown below to deposit your {{requestFor}}.

- -
- -
-
- {{fetchDataproviders.searchUtils.totalResults}} content providers, page {{fetchDataproviders.searchUtils.page}} of {{(totalPages())}} -
- - - -
- -
- No content providers found with classification "{{subject}}". -
-
- An error occured. -
- -
- - You can still deposit your {{requestFor}} in - OpenAIRE's Zenodo catch-all repository () - hosted by CERN. -
-
- -
- - - -
-
-
-
diff --git a/portal-2/src/app/deposit/datasets/depositBySubjectResult.component.ts b/portal-2/src/app/deposit/datasets/depositBySubjectResult.component.ts deleted file mode 100644 index 438db3c1..00000000 --- a/portal-2/src/app/deposit/datasets/depositBySubjectResult.component.ts +++ /dev/null @@ -1,127 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import { Router } from '@angular/router'; -import { ActivatedRoute } from '@angular/router'; -import { FetchDataproviders } from '../../utils/fetchEntitiesClasses/fetchDataproviders.class'; -import { SearchDataprovidersService } from '../../services/searchDataproviders.service'; - -import {OrganizationService} from '../../services/organization.service'; -import { Meta} from '../../../angular2-meta'; - -import {RouterHelper} from '../../utils/routerHelper.class'; -import {PiwikService} from '../../utils/piwik/piwik.service'; - -@Component({ - selector: 'deposit-by-subject-result', - templateUrl: 'depositBySubjectResult.component.html' -}) - -export class DepositBySubjectResultComponent { - @Input() compatibility: string = ''; - - // Type of entity: Publication or Research Data - @Input() requestFor: string = "Research Data"; - @Input() subject: string = ""; - - public newSubject: string= ""; - - public fetchDataproviders : FetchDataproviders; - public linkToSearchDataproviders = ""; - - // url of Zenodo - public zenodo: string; - - public page: number = 1; - - public status: number; - - public routerHelper:RouterHelper = new RouterHelper(); - public errorCodes:ErrorCodes = new ErrorCodes(); - - sub: any; - piwiksub: any; - - constructor ( private _router: Router, - private route: ActivatedRoute, - private _searchDataprovidersService: SearchDataprovidersService, - private _meta: Meta, private _piwikService:PiwikService) { - - this.zenodo = OpenaireProperties.getZenodoURL(); - this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService); - - this.status = this.errorCodes.LOADING; - this.updateTitle("Deposit "+this.requestFor); - this.updateDescription("Openaire, repositories, open access, content provider, compatibility, organization, deposit "+ this.requestFor); - this.updateUrl(OpenaireProperties.getBaseLink()+this._router.url); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView("Deposit "+this.requestFor).subscribe(); - } - } - - - - ngOnInit() { - console.info('depositResult init'); - - this.sub = this.route.queryParams.subscribe(params => { - this.subject = params['q']; - this.newSubject = this.subject; - this.searchDataproviders(); - }); - } - - // ngDoCheck() { - // if(this.organizationId == "" || this.organizationId == undefined) { - // this.organizationId = ""; - // this.status = this.errorCodes.ERROR; - // } - // } - - ngOnDestroy() { - this.sub.unsubscribe(); - if(this.piwiksub){ - this.piwiksub.unsubscribe(); - } - } - - public totalPages(): number { - let totalPages:any = this.fetchDataproviders.searchUtils.totalResults/(this.fetchDataproviders.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - return totalPages; - } - - public searchDataproviders() { - this.subject = this.newSubject; - this.fetchDataproviders.getResultsBySubjectsForDeposit( (this.subject =="")?"*":this.subject, this.requestFor, this.page, 10); - this.linkToSearchDataproviders = OpenaireProperties.getLinkToSearchDataProviders(); - } - - public goToDeposit() { - if(this.requestFor == "Publications") { - this._router.navigate( ['participate/deposit-publications'] ); - } else if(this.requestFor == "Research Data") { - this._router.navigate( ['participate/deposit-datasets'] ); - } - } - public pageChange($event) { - this.page = +$event.value; - this.searchDataproviders(); - } - - private updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - private updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - private updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } -} diff --git a/portal-2/src/app/deposit/datasets/depositBySubjectResults.module.ts b/portal-2/src/app/deposit/datasets/depositBySubjectResults.module.ts deleted file mode 100644 index 3a27275c..00000000 --- a/portal-2/src/app/deposit/datasets/depositBySubjectResults.module.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import { DepositBySubjectResultComponent } from './depositBySubjectResult.component'; - -import {DepositBySubjectResultsRoutingModule} from './depositBySubjectResult-routing.module'; -import {DepoditModule} from '../deposit.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {PagingModule } from '../../utils/paging.module'; -import {DataProvidersServiceModule} from '../../services/dataProvidersService.module'; -import {SearchResultsModule } from '../../searchPages/searchUtils/searchResults.module'; -import {HelperModule} from '../../utils/helper/helper.module'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - DepoditModule, - DepositBySubjectResultsRoutingModule, SearchResultsModule, DataProvidersServiceModule, PagingModule, - HelperModule - ], - declarations: [ - - DepositBySubjectResultComponent - - ], - exports: [ - DepositBySubjectResultComponent - ], - providers: [FreeGuard,PreviousRouteRecorder, IsRouteEnabled] -}) -export class DepositBySubjectResultsModule { } diff --git a/portal-2/src/app/deposit/datasets/depositDatasets-routing.module.ts b/portal-2/src/app/deposit/datasets/depositDatasets-routing.module.ts deleted file mode 100644 index 0fd8260b..00000000 --- a/portal-2/src/app/deposit/datasets/depositDatasets-routing.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { DepositDatasetsComponent } from './depositDatasets.component'; -import { DepositDatasetsResultComponent } from './depositDatasetsResult.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: DepositDatasetsComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - },canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class DepositDatasetsRoutingModule { } diff --git a/portal-2/src/app/deposit/datasets/depositDatasets.component.ts b/portal-2/src/app/deposit/datasets/depositDatasets.component.ts deleted file mode 100644 index 4c468aeb..00000000 --- a/portal-2/src/app/deposit/datasets/depositDatasets.component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'deposit-datasets', - template: ` -
-
-
- -
- -
-
-
-
- ` -}) - -export class DepositDatasetsComponent { - -} diff --git a/portal-2/src/app/deposit/datasets/depositDatasets.module.ts b/portal-2/src/app/deposit/datasets/depositDatasets.module.ts deleted file mode 100644 index 3612863c..00000000 --- a/portal-2/src/app/deposit/datasets/depositDatasets.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import { DepositDatasetsComponent } from './depositDatasets.component'; -import { DepositDatasetsResultComponent } from './depositDatasetsResult.component'; -import {DepositDatasetsRoutingModule} from './depositDatasets-routing.module'; -import {DepoditModule} from '../deposit.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - DepoditModule, - DepositDatasetsRoutingModule - ], - declarations: [ - - DepositDatasetsComponent - - ], - exports: [ - DepositDatasetsComponent - ], - providers: [FreeGuard,PreviousRouteRecorder, IsRouteEnabled] -}) -export class DepositDatasetsModule { } diff --git a/portal-2/src/app/deposit/datasets/depositDatasetsResult.component.ts b/portal-2/src/app/deposit/datasets/depositDatasetsResult.component.ts deleted file mode 100644 index edbe92db..00000000 --- a/portal-2/src/app/deposit/datasets/depositDatasetsResult.component.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'deposit-datasets-result', - template: ` - - - - ` -}) - -export class DepositDatasetsResultComponent { - -} diff --git a/portal-2/src/app/deposit/datasets/depositDatasetsResults-routing.module.ts b/portal-2/src/app/deposit/datasets/depositDatasetsResults-routing.module.ts deleted file mode 100644 index fb59803e..00000000 --- a/portal-2/src/app/deposit/datasets/depositDatasetsResults-routing.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; -import { DepositDatasetsResultComponent } from './depositDatasetsResult.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: DepositDatasetsResultComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - },canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class DepositDatasetsResultsRoutingModule { } diff --git a/portal-2/src/app/deposit/datasets/depositDatasetsResults.module.ts b/portal-2/src/app/deposit/datasets/depositDatasetsResults.module.ts deleted file mode 100644 index 6fc3d2e8..00000000 --- a/portal-2/src/app/deposit/datasets/depositDatasetsResults.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import { DepositDatasetsResultComponent } from './depositDatasetsResult.component'; - -import {DepositDatasetsResultsRoutingModule} from './depositDatasetsResults-routing.module'; -import {DepoditModule} from '../deposit.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - DepoditModule, - DepositDatasetsResultsRoutingModule - ], - declarations: [ - - DepositDatasetsResultComponent, - - ], - exports: [ - DepositDatasetsResultComponent, - ], - providers: [FreeGuard,PreviousRouteRecorder, IsRouteEnabled] -}) -export class DepositDatasetsResultsModule { } diff --git a/portal-2/src/app/deposit/deposit.component.html b/portal-2/src/app/deposit/deposit.component.html deleted file mode 100644 index 8415b1e8..00000000 --- a/portal-2/src/app/deposit/deposit.component.html +++ /dev/null @@ -1,56 +0,0 @@ -
-
- Deposit {{requestFor}} -
-
- -
-
- -
-
-

- - Are you a grant recipient from the following: H2020; FP7 with SC39; or ERC? - - Then you are required to publish in - open access (). - One way to do this is to deposit your {{requestFor}} into an - open access repository (). -

-

- Click the following to find more information: - FP7 guidelines (), - H2020 guidelines (), - ERC guidelines () OR - ask a question () to OpenAIRE’s national representative. -

-
-

Locate repository via your institution

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

Or locate repository in map

-
- -
-
-
- -
- -
diff --git a/portal-2/src/app/deposit/deposit.component.ts b/portal-2/src/app/deposit/deposit.component.ts deleted file mode 100644 index 04565a11..00000000 --- a/portal-2/src/app/deposit/deposit.component.ts +++ /dev/null @@ -1,91 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import { Router } from '@angular/router'; -import {OpenaireProperties} from '../utils/properties/openaireProperties'; -import { Meta} from '../../angular2-meta'; -import {PiwikService} from '../utils/piwik/piwik.service'; - - -@Component({ - selector: 'deposit', - templateUrl: 'deposit.component.html' -}) - -export class DepositComponent { - @Input() compatibility: string = ''; - @Input() mapUrl: string = null; // optional in case i-frame is needed - @Input() searchBySubjects: boolean = false; // optional: in case search by subjects is needed - - - public status: number; - - // Type of entity: Publication or Research Data - @Input() requestFor: string = "Publications"; - - // url's needed for information text - public openAccess: string; - public openAccessRepo: string; - public fp7Guidlines: string; - public h2020Guidlines: string; - public ercGuidlines: string; - public helpdesk: string; - - // Id of the new selected organization to be searched - public selectedId: string = ""; - - public warningMessage: string = ""; - - piwiksub:any; - - constructor (private _router: Router, private _meta: Meta, private _piwikService:PiwikService) { - - this.openAccess = OpenaireProperties.getOpenAccess(); - this.openAccessRepo = OpenaireProperties.getOpenAccessRepo(); - this.fp7Guidlines = OpenaireProperties.getFP7Guidlines(); - this.h2020Guidlines = OpenaireProperties.getH2020Guidlines(); - this.ercGuidlines = OpenaireProperties.getERCGuidlines(); - this.helpdesk = OpenaireProperties.getHelpdesk(); - this.updateTitle("Deposit "+this.requestFor); - this.updateDescription("Openaire, repositories, open access, content provider, compatibility, organization, deposit "+ this.requestFor); - this.updateUrl(OpenaireProperties.getBaseLink()+this._router.url); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView("Deposit "+this.requestFor).subscribe(); - } - } - ngOnDestroy() { - if(this.piwiksub){ - this.piwiksub.unsubscribe(); - } - } - - public organizationSelected(id: string) { - console.info("organization selected"); - if(id && id.length > 0){ - if(this.requestFor == "Publications") { - this._router.navigate( ['participate/deposit-publications-result'], { queryParams: { "organizationId": id } } ); - } else if(this.requestFor == "Research Data") { - this._router.navigate( ['participate/deposit-datasets-result'], { queryParams: { "organizationId": id } } ); - } - } else { - this.warningMessage = "No organization selected"; - } - } - - public valueChanged($event){ - this.selectedId = $event.value; - } - - private updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - private updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - private updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } -} diff --git a/portal-2/src/app/deposit/deposit.module.ts b/portal-2/src/app/deposit/deposit.module.ts deleted file mode 100644 index 6fa8149c..00000000 --- a/portal-2/src/app/deposit/deposit.module.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* Common Component of deposit for both research data & ppublications*/ - -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import { DepositComponent } from './deposit.component'; -import { DepositResultComponent } from './depositResult.component'; -import {EntitiesAutocompleteModule} from '../utils/entitiesAutoComplete/entitiesAutoComplete.module'; -import {DataProvidersServiceModule} from '../services/dataProvidersService.module'; -import {OrganizationServiceModule} from '../services/organizationService.module'; -import {SearchResultsModule } from '../searchPages/searchUtils/searchResults.module'; -import {PiwikServiceModule} from '../utils/piwik/piwikService.module'; -import {HelperModule} from '../utils/helper/helper.module'; -import { DepositBySubjectComponent } from './datasets/depositBySubject.component'; -import {IFrameModule} from '../utils/iframe.module'; - - - - @NgModule({ - imports: [ - CommonModule, FormsModule, - RouterModule, - EntitiesAutocompleteModule, - DataProvidersServiceModule, - OrganizationServiceModule, - SearchResultsModule, - PiwikServiceModule, - HelperModule, - IFrameModule - ], - declarations: [ - DepositComponent, - DepositResultComponent, - DepositBySubjectComponent - ], - exports: [ - DepositComponent, - DepositResultComponent - ], - providers: [ - ] -}) -export class DepoditModule { } diff --git a/portal-2/src/app/deposit/depositResult.component.ts b/portal-2/src/app/deposit/depositResult.component.ts deleted file mode 100644 index be15f886..00000000 --- a/portal-2/src/app/deposit/depositResult.component.ts +++ /dev/null @@ -1,284 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {OpenaireProperties, ErrorCodes} from '../utils/properties/openaireProperties'; -import { Router } from '@angular/router'; -import { ActivatedRoute } from '@angular/router'; -import { FetchDataproviders } from '../utils/fetchEntitiesClasses/fetchDataproviders.class'; -import { SearchDataprovidersService } from '../services/searchDataproviders.service'; - -import {OrganizationService} from '../services/organization.service'; -import { Meta} from '../../angular2-meta'; - -import {RouterHelper} from '../utils/routerHelper.class'; -import {PiwikService} from '../utils/piwik/piwik.service'; - -@Component({ - selector: 'deposit-result', - template: ` -
-
-
- -
-
- Deposit {{requestFor}} -
- -
- -
- - - -
-

Locate repository via your institution

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

- content providers for institution: - - {{organization['name']}} () - - {{organization['name']}} -

- - -
- -
-

Please use the information/contacts shown below to deposit your {{requestFor}}.

- - - - -
- - -
-
- - An error occured. - - No content providers found for institution: - - {{organization['name']}} () - - {{organization['name']}} - . -
-
- No organization with ID: {{organizationId}} found. -
-
- An error occured. -
- - Service temprorarily unavailable. Please try again later. - -
- No ID for organization. -
- - You can still deposit your {{requestFor}} in - OpenAIRE's Zenodo catch-all repository () - hosted by CERN. -
-
- -
- - -
-
-
-
- - ` -}) - -export class DepositResultComponent { - @Input() compatibility: string = ''; - - // Type of entity: Publication or Research Data - @Input() requestFor: string = "Publications"; - - public organization: {"name": string, "url": string}; - public organizationId: string = ""; - - // Id of the new selected organization to be searched - public selectedId: string = ""; - - public status: number; - public warningMessage: string = ""; - - public fetchDataproviders : FetchDataproviders; - public linkToSearchDataproviders: string = ""; - - // url of Zenodo - public zenodo: string; - - public routerHelper:RouterHelper = new RouterHelper(); - public errorCodes:ErrorCodes = new ErrorCodes(); - - sub: any; piwiksub: any; - - constructor ( private _router: Router, - private route: ActivatedRoute, - private _searchDataprovidersService: SearchDataprovidersService, - private _organizationService: OrganizationService, - private _meta: Meta, private _piwikService:PiwikService) { - - this.zenodo = OpenaireProperties.getZenodoURL(); - this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService); - - this.status = this.errorCodes.LOADING; - this.updateTitle("Deposit "+this.requestFor); - this.updateDescription("Openaire, repositories, open access, content provider, compatibility, organization, deposit "+ this.requestFor); - this.updateUrl(OpenaireProperties.getBaseLink()+this._router.url); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView("Deposit "+this.requestFor).subscribe(); - } - } - - ngOnInit() { - console.info('depositResult init'); - - this.sub = this.route.queryParams.subscribe(params => { - this.organizationId = params['organizationId']; - console.info("Id is :"+this.organizationId); - if(this.organizationId){ - this.getOrganizationInfo(); - } - this.selectedId = ""; - }); - } - - ngDoCheck() { - if(this.organizationId == "" || this.organizationId == undefined) { - this.organizationId = ""; - this.status = this.errorCodes.ERROR; - } - } - - ngOnDestroy() { - this.sub.unsubscribe(); - if(this.piwiksub){ - this.piwiksub.unsubscribe(); - } - } - - private searchDataproviders() { - // if(this.organization != undefined) { - // this.fetchDataproviders.getResults(this.organization.name, false, 1, 10); - // } else if(this.organizationId != undefined) { - this.fetchDataproviders.getResultsForDeposit( this.organizationId,this.requestFor, 1, 10); - //} - this.linkToSearchDataproviders = OpenaireProperties.getLinkToSearchDataProviders(); - } - - private getOrganizationInfo () { - console.info("inside getOrganizationInfo of component"); - - this._organizationService.getOrganizationInfo(this.organizationId).subscribe( - data => { - if(data == null) { - this.status = this.errorCodes.NOT_FOUND; - } else { - this.organization = data.title; - this.status = this.errorCodes.DONE; - this.searchDataproviders(); - } - }, - err => { - //console.log(err) - - if(err.status == '404') { - this.status = this.errorCodes.NOT_FOUND; - console.info("not found"); - } else if(err.status == '500') { - this.status = this.errorCodes.ERROR; - console.info("error"); - } else { - this.status = this.errorCodes.NOT_AVAILABLE; - console.info("not available"); - } - } - ); - } - - public goToDeposit() { - if(this.requestFor == "Publications") { - this._router.navigate( ['participate/deposit-publications'] ); - } else if(this.requestFor == "Research Data") { - this._router.navigate( ['participate/deposit-datasets'] ); - } - } - - public valueChanged($event){ - this.selectedId = $event.value; - } - - public organizationSelected(id: string) { - console.info("organization selected"); - if(id && id.length > 0 && id != this.organizationId){ - this.organization = null; - this.status = this.errorCodes.LOADING; - - if(this.requestFor == "Publications") { - this._router.navigate( ['participate/deposit-publications-result'], { queryParams: { "organizationId": id } } ); - } else if(this.requestFor == "Research Data") { - this._router.navigate( ['participate/deposit-datasets-result'], { queryParams: { "organizationId": id } } ); - } - } else { - this.warningMessage = "No new organization selected"; - } - } - - private updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - private updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - private updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } -} diff --git a/portal-2/src/app/deposit/publications/depositPublications-routing.module.ts b/portal-2/src/app/deposit/publications/depositPublications-routing.module.ts deleted file mode 100644 index bead0e18..00000000 --- a/portal-2/src/app/deposit/publications/depositPublications-routing.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; -import { DepositPublicationsComponent } from './depositPublications.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: DepositPublicationsComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class DepositPublicationsRoutingModule { } diff --git a/portal-2/src/app/deposit/publications/depositPublications.component.ts b/portal-2/src/app/deposit/publications/depositPublications.component.ts deleted file mode 100644 index 77ff9a23..00000000 --- a/portal-2/src/app/deposit/publications/depositPublications.component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'deposit-publications', - template: ` -
-
-
- -
- -
-
-
-
- ` -}) - -export class DepositPublicationsComponent { - public mapUrl ="https://beta.openaire.eu/stats/markers-demo.html"; -} diff --git a/portal-2/src/app/deposit/publications/depositPublications.module.ts b/portal-2/src/app/deposit/publications/depositPublications.module.ts deleted file mode 100644 index ebe668c6..00000000 --- a/portal-2/src/app/deposit/publications/depositPublications.module.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import { DepositPublicationsComponent } from './depositPublications.component'; - -import {DepositPublicationsRoutingModule} from './depositPublications-routing.module'; -import {DepoditModule} from '../deposit.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - DepoditModule, - DepositPublicationsRoutingModule - ], - declarations: [ - DepositPublicationsComponent - ], - exports: [ - DepositPublicationsComponent, - ], - providers: [FreeGuard,PreviousRouteRecorder, IsRouteEnabled] -}) -export class DepositPublicationsModule { } diff --git a/portal-2/src/app/deposit/publications/depositPublicationsResult-routing.module.ts b/portal-2/src/app/deposit/publications/depositPublicationsResult-routing.module.ts deleted file mode 100644 index 0d5dd77a..00000000 --- a/portal-2/src/app/deposit/publications/depositPublicationsResult-routing.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; -import { DepositPublicationsResultComponent } from './depositPublicationsResult.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: DepositPublicationsResultComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class DepositPublicationsResultRoutingModule { } diff --git a/portal-2/src/app/deposit/publications/depositPublicationsResult.component.ts b/portal-2/src/app/deposit/publications/depositPublicationsResult.component.ts deleted file mode 100644 index c7da81eb..00000000 --- a/portal-2/src/app/deposit/publications/depositPublicationsResult.component.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'deposit-publications-result', - template: ` - - ` -}) - -export class DepositPublicationsResultComponent { - -} diff --git a/portal-2/src/app/deposit/publications/depositPublicationsResults.module.ts b/portal-2/src/app/deposit/publications/depositPublicationsResults.module.ts deleted file mode 100644 index 1b5c45fc..00000000 --- a/portal-2/src/app/deposit/publications/depositPublicationsResults.module.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import { DepositPublicationsResultComponent } from './depositPublicationsResult.component'; - -import {DepositPublicationsResultRoutingModule} from './depositPublicationsResult-routing.module'; -import {DepoditModule} from '../deposit.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - DepoditModule, - DepositPublicationsResultRoutingModule - ], - declarations: [ - DepositPublicationsResultComponent - ], - exports: [ - DepositPublicationsResultComponent - ], - providers: [FreeGuard,PreviousRouteRecorder, IsRouteEnabled] -}) -export class DepositPublicationsResultsModule { } diff --git a/portal-2/src/app/error/error-routing.module.ts b/portal-2/src/app/error/error-routing.module.ts deleted file mode 100644 index 1dca0f73..00000000 --- a/portal-2/src/app/error/error-routing.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { ErrorPageComponent } from './errorPage.component'; -import {PreviousRouteRecorder} from'../utils/piwik/previousRouteRecorder.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: 'error', component: ErrorPageComponent,canDeactivate: [PreviousRouteRecorder] }, - { path: '**', component: ErrorPageComponent,canDeactivate: [PreviousRouteRecorder] }, - - ]) - ] -}) -export class ErrorRoutingModule { } diff --git a/portal-2/src/app/error/error.module.ts b/portal-2/src/app/error/error.module.ts deleted file mode 100644 index 2bc2e6bc..00000000 --- a/portal-2/src/app/error/error.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import { ErrorPageComponent } from './errorPage.component'; -import { ErrorRoutingModule } from './error-routing.module'; -import {PreviousRouteRecorder} from '../utils/piwik/previousRouteRecorder.guard'; - -@NgModule({ - imports: [CommonModule, FormsModule, ErrorRoutingModule], - providers:[PreviousRouteRecorder], - declarations: [ErrorPageComponent] -}) -export class ErrorModule { } diff --git a/portal-2/src/app/error/errorPage.component.ts b/portal-2/src/app/error/errorPage.component.ts deleted file mode 100644 index 30029577..00000000 --- a/portal-2/src/app/error/errorPage.component.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Component, Input } from '@angular/core'; -import { Location } from '@angular/common'; -import { Meta} from '../../angular2-meta'; -import {ActivatedRoute} from '@angular/router'; - -@Component({ - selector: 'error', - template: ` -
-
-
- -
-

- Bad karma: we can't find that page! -

-
- -

- You asked for {{page}}, but despite our computers looking very hard, we could not find it. What happened ? -

- -
    -
  • the link you clicked to arrive here has a typo in it
  • -
  • or somehow we removed that page, or gave it another name
  • -
  • or, quite unlikely for sure, maybe you typed it yourself and there was a little mistake ?
  • -
- -
-
-
-
- ` -}) - -export class ErrorPageComponent { - public page: string; - - constructor (private _location: Location, private _meta: Meta,private route: ActivatedRoute) { - this._meta.setTitle("OpenAIRE | Error page"); - this.page = _location.path(true); - //this.page = _router.url; - //this.page = location.href; - } - ngOnInit() { - this.route.queryParams.subscribe(data => { - - - this.page = data['page']; - if(!this.page){ - this.page = this._location.path(true); - } - }); - } -} diff --git a/portal-2/src/app/error/isRouteEnabled.guard.ts b/portal-2/src/app/error/isRouteEnabled.guard.ts deleted file mode 100644 index c8566a5b..00000000 --- a/portal-2/src/app/error/isRouteEnabled.guard.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Router,CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router'; -import {Observable} from 'rxjs/Observable'; - -import { ConfigurationService } from '../utils/configuration/configuration.service'; - -@Injectable() -export class IsRouteEnabled implements CanActivate { - - constructor(private router: Router, private config: ConfigurationService) {} - - canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | boolean { - let customRedirect = route.data['redirect']; - console.log("In IsRouteEnabled"); - console.log(state.url.split("?")[0].substring(1)); - let isEnabled = this.config.isPageEnabled(state.url.split("?")[0].substring(1)); - let redirect = !!customRedirect ? customRedirect : '/error'; - isEnabled.filter(enabled => !enabled) - .subscribe(() => this.router.navigate([redirect], { queryParams: { "page": state.url } })); - - return isEnabled; - } -} diff --git a/portal-2/src/app/home/home-routing.module.ts b/portal-2/src/app/home/home-routing.module.ts deleted file mode 100644 index 6ba740bd..00000000 --- a/portal-2/src/app/home/home-routing.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{HomeComponent} from './home.component'; -import {FreeGuard} from'../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../utils/piwik/previousRouteRecorder.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: HomeComponent, canActivate: [FreeGuard], canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class HomeRoutingModule { } diff --git a/portal-2/src/app/home/home.component.html b/portal-2/src/app/home/home.component.html deleted file mode 100644 index a1b1e1c4..00000000 --- a/portal-2/src/app/home/home.component.html +++ /dev/null @@ -1,65 +0,0 @@ - - - -
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-

- {{publicationsSize.number}} {{publicationsSize.size}} publications -

-
-
-
-
-

- {{datasetsSize.number}} {{datasetsSize.size}} research data -

-
-
-
-
-

- {{datasourcesSize.number}} {{datasourcesSize.size}} data sources -

-
-
-
-
-

- {{fundersSize.number}} {{fundersSize.size}} funders -

-
-
-
-
- all linked together -
-
-
-
-
-
-
-
- -
- -
diff --git a/portal-2/src/app/home/home.component.ts b/portal-2/src/app/home/home.component.ts deleted file mode 100644 index 217b6bdc..00000000 --- a/portal-2/src/app/home/home.component.ts +++ /dev/null @@ -1,182 +0,0 @@ -import {Component, Input, Output, EventEmitter, ViewChild, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {ActivatedRoute, Router} from '@angular/router'; -import {Location} from '@angular/common'; - -import { Meta, MetaDefinition} from '../../angular2-meta'; -import {SearchPublicationsService} from '../services/searchPublications.service'; -import {SearchDataprovidersService} from '../services/searchDataproviders.service'; -import {SearchProjectsService} from '../services/searchProjects.service'; -import {SearchDatasetsService} from '../services/searchDatasets.service'; -import {SearchOrganizationsService} from '../services/searchOrganizations.service'; - -import {OpenaireProperties} from '../utils/properties/openaireProperties'; -import {SearchFields} from '../utils/properties/searchFields'; -import {ErrorCodes} from '../utils/properties/openaireProperties'; -import {RouterHelper} from '../utils/routerHelper.class'; -import {NumberUtils} from '../utils/number-utils.class'; -import {RefineFieldResultsService} from '../services/refineFieldResults.service'; -import {PiwikService} from '../utils/piwik/piwik.service'; -import { ConfigurationService } from '../utils/configuration/configuration.service'; - -@Component({ - selector: 'home', - templateUrl: 'home.component.html', -}) -export class HomeComponent { - public piwiksub: any; - public subfunders: any; - - public pageTitle = "OpenAIRE" - public keyword:string = ""; - - public searchFields:SearchFields = new SearchFields(); - public errorCodes:ErrorCodes = new ErrorCodes(); - public routerHelper:RouterHelper = new RouterHelper(); - - public publicationsSize:any = null; - public datasetsSize:any = null; - public fundersSize:any = null; - public projectsSize:any = null; - public datasourcesSize:any = null; - - showPublications:boolean= false; - showDatasets:boolean= false; - showProjects:boolean= false; - showDataProviders:boolean= false; - -public subPub;public subData;public subProjects;public subOrg; public subDataPr; - - constructor ( - private route: ActivatedRoute, - private _router: Router, - private _searchPublicationsService: SearchPublicationsService, - private _searchDataprovidersService: SearchDataprovidersService, - private _searchProjectsService: SearchProjectsService, - private _searchDatasetsService: SearchDatasetsService, - private _searchOrganizationsService: SearchOrganizationsService, - private _refineFieldResultsService:RefineFieldResultsService, - private location: Location, private _meta: Meta,private _piwikService:PiwikService, - private config: ConfigurationService) { - - var description = "open access, research, scientific publication, European Commission, EC, FP7, ERC, Horizon 2020, H2020, search, projects "; - - var title = "OpenAIRE"; - - var url = OpenaireProperties.getBaseLink()+this._router.url; - this._meta.setTitle(title); - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - this._meta.updateProperty("og:title", title); - this._meta.updateProperty("og:url", url); - - const entityOne = this.config.isEntityEnabled("publication"); - const entityTwo = this.config.isEntityEnabled("dataset"); - const entityThree = this.config.isEntityEnabled("project"); - const entityFour = this.config.isEntityEnabled("datasource"); - const example = Observable.zip(entityOne,entityTwo,entityThree,entityFour); - - //wait until all observables have emitted a value then emit all as an array - example.subscribe(data => { - this.showPublications = data[0]; - this.showDatasets = data[1]; - this.showProjects = data[2]; - this.showDataProviders = data[3]; - this.getNumbers(); - }); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView("OpenAIRE").subscribe(); - } - - } - - public ngOnInit() { - } - public ngOnDestroy() { - if(this.piwiksub){ - this.piwiksub.unsubscribe(); - } - if(this.subfunders){ - this.subfunders.unsubscribe(); - } - if(this.subPub){ - this.subPub.unsubscribe(); - } - if(this.subData){ - this.subData.unsubscribe(); - } - // if(this.subProjects){ - // this.subProjects.unsubscribe(); - // } - // if(this.subOrg){ - // this.subOrg.unsubscribe(); - // } - if(this.subDataPr){ - this.subDataPr.unsubscribe(); - } - - } - - private getNumbers() { - if(this.showPublications){ - this.subPub = this._searchPublicationsService.numOfSearchPublications("").subscribe( - data => { - console.log("Count results: "+data); - if(data && data != null && data > 0 ){ - this.publicationsSize = NumberUtils.roundNumber(data); - console.log("After round"); - - } - }, - err => { - console.log(err); - } - ); - } - if(this.showDatasets){ - this.subData = this._searchDatasetsService.numOfSearchDatasets("").subscribe( - data => { - if(data && data != null && data > 0 ){ - this.datasetsSize = NumberUtils.roundNumber(data); - } - }, - err => { - console.log(err); - } - ); - } - if(this.showProjects){ - this.subfunders = this._refineFieldResultsService.getRefineFieldsResultsByEntityName(["funder"],"project").subscribe( - data => { - - console.info("Funders: "+data[1][0].title+ " values "+data[1][0].values.length+"]"); - console.info("Projects: "+data[0]); - - if(data[0] && data[0] > 0 ){ - this.projectsSize = NumberUtils.roundNumber(data[0]); - } - if(data[1].length > 0 && data[1][0].filterId == "funder" && data[1][0].values ){ - this.fundersSize = NumberUtils.roundNumber(data[1][0].values.length); - } - - }, - err => { - console.log(err); - }); - } - if(this.showDataProviders){ - this.subDataPr = this._searchDataprovidersService.numOfSearchDataproviders("").subscribe( - data => { - if(data && data != null && data > 0 ){ - this.datasourcesSize = NumberUtils.roundNumber(data); - } - - }, - err => { - console.log(err); - - } - ); - } - } -} diff --git a/portal-2/src/app/home/home.module.ts b/portal-2/src/app/home/home.module.ts deleted file mode 100644 index 61bbdc21..00000000 --- a/portal-2/src/app/home/home.module.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import{HomeRoutingModule} from './home-routing.module'; -import{HomeComponent} from './home.component'; - - -import {DataProvidersServiceModule} from '../services/dataProvidersService.module'; -import {DatasetsServiceModule} from '../services/datasetsService.module'; -import {ProjectsServiceModule} from '../services/projectsService.module'; -import {PublicationsServiceModule} from '../services/publicationsService.module'; -import {OrganizationsServiceModule} from '../services/organizationsService.module'; -import {SearchFormModule} from '../searchPages/searchUtils/searchForm.module'; -import {FreeGuard} from'../login/freeGuard.guard'; -import {PiwikServiceModule} from '../utils/piwik/piwikService.module'; -import {PreviousRouteRecorder} from '../utils/piwik/previousRouteRecorder.guard'; -import {RefineFieldResultsServiceModule} from '../services/refineFieldResultsService.module'; -import {HelperModule} from '../utils/helper/helper.module'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, RouterModule, - RefineFieldResultsServiceModule, - DataProvidersServiceModule, DatasetsServiceModule, ProjectsServiceModule, - PublicationsServiceModule, - OrganizationsServiceModule, - SearchFormModule, - PiwikServiceModule, - HomeRoutingModule, - HelperModule - - ], - declarations: [ - HomeComponent - ], - providers:[ - FreeGuard, PreviousRouteRecorder - ], - exports: [ - HomeComponent - ] -}) -export class HomeModule { } diff --git a/portal-2/src/app/landingPages/dataProvider/dataProvider-routing.module.ts b/portal-2/src/app/landingPages/dataProvider/dataProvider-routing.module.ts deleted file mode 100644 index 7aaf631c..00000000 --- a/portal-2/src/app/landingPages/dataProvider/dataProvider-routing.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { DataProviderComponent } from './dataProvider.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: DataProviderComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - },canDeactivate: [PreviousRouteRecorder] } - ]) -] -}) -export class DataProviderRoutingModule { } diff --git a/portal-2/src/app/landingPages/dataProvider/dataProvider.component.html b/portal-2/src/app/landingPages/dataProvider/dataProvider.component.html deleted file mode 100644 index e26008aa..00000000 --- a/portal-2/src/app/landingPages/dataProvider/dataProvider.component.html +++ /dev/null @@ -1,232 +0,0 @@ -
-
-
- -
- - - - -
- -
- - -
{{dataProviderInfo.officialName}}
- - {{dataProviderInfo.type}} - {{dataProviderInfo.compatibility}} - - - - -
- - - - - - - -
- - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - -
-

Latest Research Result Timeline

- -

Research Result Types

- -
- - -
- -

Funders in Research Results of content provider

- - -
-
-

Projects with most Publications

- -
-
-
-

Projects with most Research Data

- -
-
-
-
- - - - - - - - - -
- -
- -
-
-
- Share - Bookmark -
-
-
-
-
-
-
diff --git a/portal-2/src/app/landingPages/dataProvider/dataProvider.component.ts b/portal-2/src/app/landingPages/dataProvider/dataProvider.component.ts deleted file mode 100644 index 155960ee..00000000 --- a/portal-2/src/app/landingPages/dataProvider/dataProvider.component.ts +++ /dev/null @@ -1,385 +0,0 @@ -import {Component, ViewChild, ElementRef} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {DataProviderService} from './dataProvider.service'; -import {DataProviderInfo} from '../../utils/entities/dataProviderInfo'; -import {ActivatedRoute, Router} from '@angular/router'; -import { Meta} from '../../../angular2-meta'; -import { FetchPublications } from '../../utils/fetchEntitiesClasses/fetchPublications.class'; -import { SearchPublicationsService } from '../../services/searchPublications.service'; -import { FetchDatasets } from '../../utils/fetchEntitiesClasses/fetchDatasets.class'; -import { SearchDatasetsService } from '../../services/searchDatasets.service'; -import { FetchProjects } from '../../utils/fetchEntitiesClasses/fetchProjects.class'; -import { SearchProjectsService } from '../../services/searchProjects.service'; -import { FetchDataproviders } from '../../utils/fetchEntitiesClasses/fetchDataproviders.class'; -import { SearchDataprovidersService } from '../../services/searchDataproviders.service'; -import { RelatedDatasourcesTabComponent } from './relatedDatasourcesTab.component'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {RouterHelper} from '../../utils/routerHelper.class'; -import {PiwikService} from '../../utils/piwik/piwik.service'; - -import 'rxjs/add/operator/switch'; -import 'rxjs/add/operator/switchMap'; - -@Component({ - selector: 'dataprovider', - templateUrl: 'dataProvider.component.html', - }) - -export class DataProviderComponent { - public dataProviderInfo: DataProviderInfo; - public datasourceId: string; - - // Message variables - public warningMessage = ""; - public errorMessage = ""; - public showLoading: boolean = true; - - // Variable to specify requests with either collectedFrom or hostedBy - public paramsForSearchLink = {}; - - // Metrics tab variables - public metricsClicked: boolean; - public viewsFrameUrl: string; - public downloadsFrameUrl: string; - public totalViews: number; - public totalDownloads: number; - public pageViews: number; - - // Statistics tab variables - public statsClicked: boolean = false; - public docsTimelineUrl: string; - public docsTypesUrl:string; - public docsFunderUrl:string; - public dataProjectsUrl:string ; - public pubsProjectsUrl:string; - - // Variables for publications, research data, projects, content providers, related content providers tabs - public fetchPublications : FetchPublications; - public fetchDatasets: FetchDatasets; - public fetchProjects: FetchProjects; - public fetchDataproviders: FetchDataproviders; - public fetchAggregatorsPublications: FetchPublications; - public fetchAggregatorsDatasets: FetchDatasets; - - public loadingRelatedDatasources: boolean = true; - - // Active tab variable for responsiveness - show tabs only if main request is completed - public activeTab: string = ""; - public showTabs:boolean = false; - - public routerHelper:RouterHelper = new RouterHelper(); - public errorCodes:ErrorCodes = new ErrorCodes(); - - // Request results of each tab only the one time (first time tab is clicked) - private reloadPublications: boolean = true; - private reloadDatasets: boolean = true; - private reloadProjects: boolean = true; - private reloadDataproviders: boolean = true; - private reloadRelatedDatasources: boolean = true; - - private nativeElement : Node; - - sub: any; - piwiksub: any; - subInfo: any; - relatedDatasourcesSub: any; - - constructor (private element: ElementRef, - private _dataproviderService: DataProviderService, - private _piwikService:PiwikService, - private route: ActivatedRoute, - private _meta: Meta, - private _router: Router, - private _searchPublicationsService: SearchPublicationsService, - private _searchDatasetsService: SearchDatasetsService, - private _searchProjectsService: SearchProjectsService, - private _searchDataprovidersService: SearchDataprovidersService) { - this.fetchPublications = new FetchPublications(this._searchPublicationsService); - this.fetchDatasets = new FetchDatasets(this._searchDatasetsService); - this.fetchProjects = new FetchProjects(this._searchProjectsService); - this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService); - - this.updateUrl(OpenaireProperties.getBaseLink()+this._router.url); - } - - ngOnInit() { - this.sub = this.route.queryParams.subscribe(data => { - this.updateTitle("Content provider"); - this.updateDescription("Content provider, search, repositories, open access"); - this.datasourceId = data['datasourceId']; - if(this.datasourceId){ - this.getDataProviderInfo(this.datasourceId); - }else{ - // console.info("Content Provider id not found"); - } - - if (typeof document !== 'undefined') { - this.element.nativeElement.scrollIntoView(); - } - }); - } - - ngOnDestroy() { - this.sub.unsubscribe(); - if(this.piwiksub){ - this.piwiksub.unsubscribe(); - } - if(this.subInfo) { - this.subInfo.unsubscribe(); - } - - if(this.relatedDatasourcesSub) { - this.relatedDatasourcesSub.unsubscribe(); - } - } - private getDataProviderInfo(id:string) { - this.warningMessage = ''; - this.errorMessage="" - this.showLoading = true; - - this.showTabs = false ; - if(this.datasourceId==null || this.datasourceId==''){ - this.showLoading = false; - this.warningMessage="No valid datasource id"; - }else{ - this.subInfo = this._dataproviderService.getDataproviderInfo(this.datasourceId).subscribe( - data => { - this.dataProviderInfo = data; - this.initTabs(); - this.showTabs = true ; - this.updateTitle(this.dataProviderInfo.title.name); - this.updateDescription("Content provider, search, repositories, open access,"+this.dataProviderInfo.title.name); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView(this.dataProviderInfo.title.name).subscribe(); - } - - this.showLoading = false; - - if(this.dataProviderInfo.tabs != undefined && this.dataProviderInfo.tabs.length > 0) { - this.activeTab = this.dataProviderInfo.tabs[0].name; - } - }, - err => { - console.log(err); - // console.info("error"); - this.errorMessage = 'No dataProvider found'; - this.showLoading = false; - } - ); - } - } - - private updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - private updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - private updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } - - private initTabs(){ - - if(this.dataProviderInfo.tabs != undefined && this.dataProviderInfo.tabs.length > 0) { - this.reloadPublications = true; - this.reloadDatasets = true; - this.reloadProjects = true; - this.reloadDataproviders = true; - this.reloadRelatedDatasources = true; - this.statsClicked = false; - - this.search(this.dataProviderInfo.tabs[0].content, 1, 10); - this.count(1, 0); - - this.metricsClicked = false; - - this.viewsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"dtsrcRepoViews","dtsrcName":"'+this.datasourceId+'","table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"","yaxisheaders":["Monthly views"],"generalxaxis":"","theme":0,"in":[]}]&info_types=["column"]&stacking=&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(124, 181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false'; - /*this.viewsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"dtsrcOpenAIRETimeline", "dtsrcName":"'+this.datasourceId+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"OpenAIRE","yaxisheaders":["Monthly views"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]},{"query":"dtsrcRepoTimeline", "dtsrcName":"'+this.datasourceId+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":[""],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column","column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(124, 181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true'; - */ - - this.downloadsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"dtsrcRepoDownloads","dtsrcName":"'+this.datasourceId+'","table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"","yaxisheaders":["Monthly downloads"],"generalxaxis":"","theme":0,"in":[]}]&info_types=["column"]&stacking=&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(124, 181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false'; - /* - this.downloadsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"dtsrcDownloadsTimeline","dtsrcName":"'+this.datasourceId+'","table":"","fields":[{"fld":"sum","agg":"sum","type":"chart","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"","yaxisheaders":["Monthly downloads"],"generalxaxis":"","theme":0,"in":[]}]&info_types=["spline"]&stacking=&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(124, 181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true'; - */ - - this.docsTimelineUrl ='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcYear","dtsrcName":"'+this.datasourceId+'","table": "result", "fields": [{"fld": "number", "agg": "count", "type": "line", "yaxis":1, "c":true}], "xaxis":{"name": "year", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": -30, "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Research Results"], "in": [{"f":0, "text": "Yearly"}], "filters": [{"name":"year","max":"2016","min":"1997"},{"name": "result_datasources-datasource-name", "values":[""], "to": "-1"}],"having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": "Year"}&w=600&h=250'; - this.docsTypesUrl = 'https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcPubs","dtsrcName":"'+this.datasourceId+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "pie", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Research Results"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - this.docsFunderUrl =' https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcPubsFund","dtsrcName":"'+this.datasourceId+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "pie", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Research Results"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - this.dataProjectsUrl ='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcProjData","dtsrcName":"'+this.datasourceId+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "bar", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Research Data"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - this.pubsProjectsUrl ='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcProjPubs","dtsrcName":"'+this.datasourceId+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "bar", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Publications"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - - //if({"name": "Publications", "content": "publicationsTab"} in this.dataProviderInfo.tabs) { - //if(this.dataProviderInfo.tabs.some(function (tab) { - // return tab.name === 'Publications'; - //})) { - // this.relatedDataprovidersResultsType = 'publications'; - this.fetchAggregatorsPublications = new FetchPublications(this._searchPublicationsService); - //} else { - // this.relatedDataprovidersResultsType = 'datasets'; - this.fetchAggregatorsDatasets = new FetchDatasets(this._searchDatasetsService); - //} - } - if(this.dataProviderInfo.resultsBy == "collectedFrom") { - //this.paramsForSearchLink = "?collectedFrom="+this.datasourceId+"&co=and"; - this.paramsForSearchLink = this.routerHelper.createQueryParams(['collectedFrom', 'co'], [this.datasourceId, 'and']); - } else if (this.dataProviderInfo.resultsBy == "hostedBy") { - //this.paramsForSearchLink = "?hostedBy="+this.datasourceId+"&ho=and"; - this.paramsForSearchLink = this.routerHelper.createQueryParams(['hostedBy', 'ho'], [this.datasourceId, 'and']); - } - - } - - private count(page: number, size: number) { - for(let i=1; i {}, - err => {}, - () => { this.preprocessRelatedDatasources(); } - ) - - this.fetchAggregatorsPublications.getAggregatorResults(this.datasourceId, page, size); - this.fetchAggregatorsDatasets.getAggregatorResults(this.datasourceId, page, size); - } else { - this.loadingRelatedDatasources = false; - } - - - this.reloadRelatedDatasources = false; - } - - private countRelatedDatasources(page: number, size: number) { - this.fetchAggregatorsPublications.getAggregatorResults(this.datasourceId, page, size); - this.fetchAggregatorsDatasets.getAggregatorResults(this.datasourceId, page, size); - } - - - private preprocessRelatedDatasources() { - if( this.fetchAggregatorsPublications.searchUtils.status == this.errorCodes.DONE || - this.fetchAggregatorsDatasets.searchUtils.status == this.errorCodes.DONE ) { - this.dataProviderInfo.relatedDatasources = new Map(); - } - for(let result of this.fetchAggregatorsPublications.results) { - if(!this.dataProviderInfo.relatedDatasources.has(result.id)) { - this.dataProviderInfo.relatedDatasources.set(result.id, {"name": result.name, "countPublications": result.count, "countDatasets": "0"}); - } else { - this.dataProviderInfo.relatedDatasources.get(result.id).countPublications = parseInt(this.dataProviderInfo.relatedDatasources.get(result.id).countPublications + result.count)+""; - } - } - - for(let result of this.fetchAggregatorsDatasets.results) { - if(!this.dataProviderInfo.relatedDatasources.has(result.id)) { - this.dataProviderInfo.relatedDatasources.set(result.id, {"name": result.name, "countPublications": "0", "countDatasets": result.count}); - } else { - this.dataProviderInfo.relatedDatasources.get(result.id).countDatasets = parseInt(this.dataProviderInfo.relatedDatasources.get(result.id).countDatasets + result.count)+""; - } - } - this.loadingRelatedDatasources = false; - } - - public metricsResults($event) { - this.totalViews = $event.totalViews; - this.totalDownloads = $event.totalDownloads; - this.pageViews = $event.pageViews; - } -} diff --git a/portal-2/src/app/landingPages/dataProvider/dataProvider.module.ts b/portal-2/src/app/landingPages/dataProvider/dataProvider.module.ts deleted file mode 100644 index d1f7abba..00000000 --- a/portal-2/src/app/landingPages/dataProvider/dataProvider.module.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import {IFrameModule} from '../../utils/iframe.module'; -import {ErrorMessagesModule} from '../../utils/errorMessages.module'; -// import { ResultLandingModule } from '../resultLanding.module'; -import {TabResultModule } from '../../searchPages/searchUtils/tabResult.module'; -import {MetricsModule} from '../landing-utils/metrics.module'; -import {LandingModule} from '../landing-utils/landing.module'; -import {PagingModule} from '../../utils/paging.module'; - -import {PublicationsTabComponent} from './publicationsTab.component'; -import {DatasetsTabComponent} from './datasetsTab.component'; -import {StatisticsTabComponent} from './statisticsTab.component'; -import {ProjectsTabComponent} from './projectsTab.component'; -import {DatasourcesTabComponent} from './datasourcesTab.component'; -import {OrganizationsTabComponent} from './organizationsTab.component'; -import {RelatedDatasourcesTabComponent} from './relatedDatasourcesTab.component'; -// import {TabsComponent} from './tabs.component'; - -import {DataProviderComponent} from './dataProvider.component'; -import {DataProviderService} from './dataProvider.service'; -import {DataProvidersServiceModule} from '../../services/dataProvidersService.module'; -import {DatasetsServiceModule} from '../../services/datasetsService.module'; -import {ProjectsServiceModule} from '../../services/projectsService.module'; -import {PublicationsServiceModule} from '../../services/publicationsService.module'; - -import { DataProviderRoutingModule } from './dataProvider-routing.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: - [CommonModule, FormsModule, RouterModule,DataProviderRoutingModule, - TabResultModule, IFrameModule, ErrorMessagesModule, MetricsModule, LandingModule, - DataProvidersServiceModule, DatasetsServiceModule, ProjectsServiceModule, PublicationsServiceModule, - PagingModule], - declarations: - [PublicationsTabComponent, DatasetsTabComponent, StatisticsTabComponent, ProjectsTabComponent, DatasourcesTabComponent, OrganizationsTabComponent, - RelatedDatasourcesTabComponent, DataProviderComponent - ], - providers:[ - DataProviderService, FreeGuard, IsRouteEnabled], - exports: [ - DataProviderComponent - ] - -}) -export class DataProviderModule { } diff --git a/portal-2/src/app/landingPages/dataProvider/dataProvider.service.ts b/portal-2/src/app/landingPages/dataProvider/dataProvider.service.ts deleted file mode 100644 index 4c1fcc22..00000000 --- a/portal-2/src/app/landingPages/dataProvider/dataProvider.service.ts +++ /dev/null @@ -1,166 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {DataProviderInfo} from '../../utils/entities/dataProviderInfo'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../../shared/cache.service'; - -@Injectable() -export class DataProviderService { - - constructor(private http: Http, public _cache: CacheService) {} - - dataProviderInfo: DataProviderInfo; - - getDataproviderInfo (id: string):any { - console.info("getDataProviderInfo in service"); - let url = OpenaireProperties.getSearchAPIURLLast() + 'datasources/' +id +"?format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseDataProviderInfo(res)); - } - return this.http.get(url) - .map(res => res.json()) - .map(res => res['result']['metadata']['oaf:entity']) - .map(res => [res['oaf:datasource'], - res['oaf:datasource']['datasourcetype'], - res['oaf:datasource']['openairecompatibility'], - res['oaf:datasource']['accessinfopackage'], - res['oaf:datasource']['rels']['rel'] - ]).do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseDataProviderInfo(res)); - - } - - private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } - - parseDataProviderInfo (data: any):any { - this.dataProviderInfo = new DataProviderInfo(); - - if(data[0] != null) { - this.dataProviderInfo.title = {"name": (data[0].englishname)?data[0].englishname: data[0].officialname, "url": data[0].websiteurl}; - this.dataProviderInfo.officialName = data[0].officialname; - var originalId =(data[0].originalId)?data[0].originalId:""; - if(originalId && originalId != ""){ - if(originalId.indexOf("opendoar____::") != -1){ - this.dataProviderInfo.openDoarURL = "http://www.opendoar.org/find.php?format=full&rID="+originalId.split("opendoar____::")[1]; - - }else if (originalId.indexOf("re3data_____::") != -1){ - this.dataProviderInfo.r3DataURL = "http://service.re3data.org/repository/"+originalId.split("re3data_____::")[1]; - } - } - - } - - if(data[1] != null) { - this.dataProviderInfo.type = data[1].classname; - - if(data[1].classid == "entityregistry" || data[1].classid == "entityregistry::projects" || data[1].classid == "entityregistry::repositories") { - this.dataProviderInfo.registry = true; - } else { - this.dataProviderInfo.registry = false; - } - - if(this.dataProviderInfo.tabs == undefined) { - this.dataProviderInfo.tabs = new Array<{"name": string, "content": string}>(); - } - - if(this.dataProviderInfo.tabsInTypes.publicationsTab.has(data[1].classid)) { - this.dataProviderInfo.tabs.push({"name": "Publications", "content": "publicationsTab"}); - } - if(this.dataProviderInfo.tabsInTypes.datasetsTab.has(data[1].classid)) { - this.dataProviderInfo.tabs.push({"name": "Research Data", "content": "datasetsTab"}); - } - - if(this.dataProviderInfo.tabsInTypes.projectsTab.has(data[1].classid)) { - this.dataProviderInfo.tabs.push({"name": "Projects", "content": "projectsTab"}); - } - if(this.dataProviderInfo.tabsInTypes.datasourcesTab.has(data[1].classid)) { - this.dataProviderInfo.tabs.push({"name": "Content Providers", "content": "datasourcesTab"}); - } - this.dataProviderInfo.tabs.push({"name": "Organizations", "content": "organizationsTab"}); - - if(this.dataProviderInfo.tabsInTypes.relatedDatasourcesTab.has(data[1].classid)) { - this.dataProviderInfo.tabs.push({"name": "Related Content Providers", "content": "relatedDatasourcesTab"}); - } - - if(this.dataProviderInfo.tabsInTypes.statisticsTab.has(data[1].classid)) { - this.dataProviderInfo.tabs.push({"name": "Statistics", "content": "statisticsTab"}); - } - - this.dataProviderInfo.tabs.push({"name": "Metrics", "content": "metricsTab"}); - - if(this.dataProviderInfo.resultTypes.collectedFrom.has(data[1].classid)) { - this.dataProviderInfo.resultsBy = "collectedFrom"; - } else if(this.dataProviderInfo.resultTypes.hostedBy.has(data[1].classid)) { - this.dataProviderInfo.resultsBy = "hostedBy"; - } - } - - if(!this.dataProviderInfo.registry) { - if(data[2] != null) { - this.dataProviderInfo.compatibility = data[2].classname; - } - - if(data[3] != null) { - let oaiPmhURL: string; - if(Array.isArray(data[3])) { - oaiPmhURL = data[3][0]; - } - else { - oaiPmhURL = data[3]; - } - - if(oaiPmhURL != '' && oaiPmhURL != 'unknown') { - this.dataProviderInfo.oaiPmhURL = oaiPmhURL; - } - } - } - - if(data[4] != null) { - let mydata; - let counter = 0; - let countriesSet: Set; - let length = data[4].length!=undefined ? data[4].length : 1; - - for(let i=0; i(); - this.dataProviderInfo.countries = new Array(); - countriesSet = new Set(); - } - - this.dataProviderInfo.organizations[counter] = {"name": "", "id": ""}; - this.dataProviderInfo.organizations[counter]['name'] = mydata.legalname; - this.dataProviderInfo.organizations[counter]['id'] = /*OpenaireProperties.getsearchLinkToOrganization()+*/mydata['to'].content; - - if(mydata.country != '' && mydata['country'].classname != '') { - if(!countriesSet.has(mydata['country'].classname)) { - this.dataProviderInfo.countries.push(mydata['country'].classname); - countriesSet.add(mydata['country'].classname); - } - } - - counter++; - } - } - } - } - - return this.dataProviderInfo; - } -} diff --git a/portal-2/src/app/landingPages/dataProvider/datasetsTab.component.ts b/portal-2/src/app/landingPages/dataProvider/datasetsTab.component.ts deleted file mode 100644 index d75edae7..00000000 --- a/portal-2/src/app/landingPages/dataProvider/datasetsTab.component.ts +++ /dev/null @@ -1,48 +0,0 @@ -import {Component, Input} from '@angular/core'; -import { FetchDatasets } from '../../utils/fetchEntitiesClasses/fetchDatasets.class'; - -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; - -@Component({ - selector: 'datasetsTab', - template: ` - - - - - - - ` -}) - -export class DatasetsTabComponent { - @Input() paramsForSearchLink = {}; - @Input() fetchDatasets : FetchDatasets; - public linkToSearchDatasets = ""; - public errorCodes:ErrorCodes = new ErrorCodes(); - - constructor () {} - - ngOnInit() { - this.linkToSearchDatasets = OpenaireProperties.getLinkToAdvancedSearchDatasets(); - } - - ngOnDestroy() {} -} diff --git a/portal-2/src/app/landingPages/dataProvider/datasourcesTab.component.ts b/portal-2/src/app/landingPages/dataProvider/datasourcesTab.component.ts deleted file mode 100644 index 4db8adf8..00000000 --- a/portal-2/src/app/landingPages/dataProvider/datasourcesTab.component.ts +++ /dev/null @@ -1,50 +0,0 @@ -import {Component, Input} from '@angular/core'; -import { FetchDataproviders } from '../../utils/fetchEntitiesClasses/fetchDataproviders.class'; - -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; - -@Component({ - selector: 'datasourcesTab', - template: ` - - - - - - - ` -}) - -export class DatasourcesTabComponent { - - @Input() paramsForSearchLink = {}; - @Input() fetchDataproviders : FetchDataproviders; - public linkToSearchDataproviders = ""; - public errorCodes:ErrorCodes = new ErrorCodes(); - - constructor () {} - - ngOnInit() { - this.linkToSearchDataproviders = OpenaireProperties.getLinkToAdvancedSearchDataProviders(); - } - - ngOnDestroy() {} -} diff --git a/portal-2/src/app/landingPages/dataProvider/organizationsTab.component.ts b/portal-2/src/app/landingPages/dataProvider/organizationsTab.component.ts deleted file mode 100644 index c666fdae..00000000 --- a/portal-2/src/app/landingPages/dataProvider/organizationsTab.component.ts +++ /dev/null @@ -1,54 +0,0 @@ -import {Component, Input} from '@angular/core'; - -@Component({ - selector: 'organizationsTab', - template: ` - - -
-
- {{organizations.length}} organizations, page {{organizationsPage}} of {{totalPages(organizations.length)}} - -
- -
-

- - - {{item['name']}} - -

-

- {{item['name']}} -

-
-
- ` -}) - -export class OrganizationsTabComponent { - - @Input() organizations: {"name": string, "id": string}[]; - public organizationsPage: number = 1; - public pageSize: number = 10; - - constructor () {} - - ngOnInit() {} - - ngOnDestroy() {} - - totalPages(totalResults: number): number { - let totalPages:any = totalResults/this.pageSize; - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, this.pageSize) + 1); - } - return totalPages; - } - - updateOrganizationsPage($event) { - this.organizationsPage = $event.value; - } -} diff --git a/portal-2/src/app/landingPages/dataProvider/projectsTab.component.ts b/portal-2/src/app/landingPages/dataProvider/projectsTab.component.ts deleted file mode 100644 index 4102e285..00000000 --- a/portal-2/src/app/landingPages/dataProvider/projectsTab.component.ts +++ /dev/null @@ -1,49 +0,0 @@ -import {Component, Input} from '@angular/core'; - -import { FetchProjects } from '../../utils/fetchEntitiesClasses/fetchProjects.class'; - -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; - -@Component({ - selector: 'projectsTab', - template: ` - - - - - - - ` -}) - -export class ProjectsTabComponent { - - @Input() paramsForSearchLink = {}; - @Input() fetchProjects : FetchProjects; - public linkToSearchProjects = ""; - public errorCodes:ErrorCodes = new ErrorCodes(); - - constructor () {} - - ngOnInit() { - this.linkToSearchProjects = OpenaireProperties.getLinkToAdvancedSearchProjects(); - } - - ngOnDestroy() {} -} diff --git a/portal-2/src/app/landingPages/dataProvider/publicationsTab.component.ts b/portal-2/src/app/landingPages/dataProvider/publicationsTab.component.ts deleted file mode 100644 index 156e48e6..00000000 --- a/portal-2/src/app/landingPages/dataProvider/publicationsTab.component.ts +++ /dev/null @@ -1,50 +0,0 @@ -import {Component, Input} from '@angular/core'; -import { FetchPublications } from '../../utils/fetchEntitiesClasses/fetchPublications.class'; - -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; - -@Component({ - selector: 'publicationsTab', - template: ` - - - - - - - - - ` -}) - -export class PublicationsTabComponent { - @Input() paramsForSearchLink = {};//: string = ""; - @Input() fetchPublications : FetchPublications; - public linkToSearchPublications = ""; - public errorCodes:ErrorCodes = new ErrorCodes(); - - constructor () {} - - ngOnInit() { - this.linkToSearchPublications = OpenaireProperties.getLinkToAdvancedSearchPublications();//+this.paramsForSearchLink; - } - - ngOnDestroy() {} -} diff --git a/portal-2/src/app/landingPages/dataProvider/relatedDatasourcesTab.component.ts b/portal-2/src/app/landingPages/dataProvider/relatedDatasourcesTab.component.ts deleted file mode 100644 index da85f597..00000000 --- a/portal-2/src/app/landingPages/dataProvider/relatedDatasourcesTab.component.ts +++ /dev/null @@ -1,122 +0,0 @@ -import {Component, Input} from '@angular/core'; - -import { FetchPublications } from '../../utils/fetchEntitiesClasses/fetchPublications.class'; -import { FetchDatasets } from '../../utils/fetchEntitiesClasses/fetchDatasets.class'; - -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {RouterHelper} from '../../utils/routerHelper.class'; -import { Observable } from 'rxjs/Observable'; - -@Component({ - selector: 'relatedDatasourcesTab', - template: ` - - - - - - -
-
- {{results.size}} related content providers, page {{page}} of {{totalPages(results.size)}} - -
- - - - - - - - - - - - - - - - - - - - - - - -
Content Provider Name - Number of Publications - - Number of Research Data -
- - {{results.get(id).name}} - - - - {{results.get(id).countPublications}} - - - - - {{results.get(id).countDatasets}} - - -
-
- ` -}) - -export class RelatedDatasourcesTabComponent { - @Input() dataproviderId: string; - @Input() fetchPublications : FetchPublications; - @Input() fetchDatasets : FetchDatasets; - // true: preprocessing is not over - @Input() loading: boolean = true; - // Εvery content provider's id is a single key of a map - @Input() results: Map; - - public linkToSearchPublications: string = ""; - public linkToSearchResearchData: string = ""; - - public routerHelper:RouterHelper = new RouterHelper(); - public errorCodes:ErrorCodes = new ErrorCodes(); - - public page: number = 1; - public pageSize: number = 10; - - constructor () {} - - ngOnInit() { - this.linkToSearchPublications = OpenaireProperties.getLinkToAdvancedSearchPublications();//+"?&hostedBy=";//+ +"&ho=and&collectedFrom="+ +"&co=and"; - this.linkToSearchResearchData = OpenaireProperties.getLinkToAdvancedSearchDatasets(); - } - - ngOnDestroy() {} - - totalPages(totalResults: number): number { - let totalPages:any = totalResults/this.pageSize; - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, this.pageSize) + 1); - } - return totalPages; - } - - updatePage($event) { - this.page = $event.value; - } -} diff --git a/portal-2/src/app/landingPages/dataProvider/statisticsTab.component.ts b/portal-2/src/app/landingPages/dataProvider/statisticsTab.component.ts deleted file mode 100644 index 4aae1f91..00000000 --- a/portal-2/src/app/landingPages/dataProvider/statisticsTab.component.ts +++ /dev/null @@ -1,78 +0,0 @@ -import {Component, Input} from '@angular/core'; -import { SearchDatasetsComponent } from '../../searchPages/simple/searchDatasets.component'; -import { SearchPublicationsComponent } from '../../searchPages/simple/searchPublications.component'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; - -@Component({ - selector: 'statisticsTab', - template: ` -
- - - - -
-

Latest Documents Timeline

- -

Documents Types

- -
- - -
-
-

Funders in content providers Publications

- -

Projects with most Publications

- - -
-
-
-

Projects with most Research Data

- - -
-
-
-
- ` -}) - -export class StatisticsTabComponent { - - @Input() statistics; - @Input() id; - @Input() searchDatasetsComponent : SearchDatasetsComponent; - @Input() searchPublicationsComponent : SearchPublicationsComponent; - @Input() show : boolean = false; - - private docsTimelineUrl: string; - private docsTypesUrl:string; - private docsFunderUrl:string; - private dataProjectsUrl:string ; - private pubsProjectsUrl:string; - public errorCodes:ErrorCodes = new ErrorCodes(); - - constructor () {} - - ngOnInit() { - - this.docsTimelineUrl ='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcYear","dtsrcName":"'+this.id+'","table": "result", "fields": [{"fld": "number", "agg": "count", "type": "line", "yaxis":1, "c":true}], "xaxis":{"name": "year", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Documents"], "in": [{"f":0, "text": "Yearly"}], "filters": [{"name":"year","max":"2016","min":"1997"},{"name": "result_datasources-datasource-name", "values":[""], "to": "-1"}],"having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": "Year"}&w=600&h=250'; - this.docsTypesUrl = 'https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcPubs","dtsrcName":"'+this.id+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "pie", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Documents"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - this.docsFunderUrl =' https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcPubsFund","dtsrcName":"'+this.id+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "pie", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Documents"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - this.dataProjectsUrl ='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcProjData","dtsrcName":"'+this.id+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "bar", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Datasets"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - this.pubsProjectsUrl ='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcProjPubs","dtsrcName":"'+this.id+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "bar", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Publications"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - } - - ngOnDestroy() {} -} diff --git a/portal-2/src/app/landingPages/dataProvider/tabs.component.ts b/portal-2/src/app/landingPages/dataProvider/tabs.component.ts deleted file mode 100644 index eeafe8cc..00000000 --- a/portal-2/src/app/landingPages/dataProvider/tabs.component.ts +++ /dev/null @@ -1,389 +0,0 @@ -import {Component, Input, Renderer, ElementRef} from '@angular/core'; -import {ActivatedRoute, Params} from '@angular/router'; -//import { DOCUMENT } from '@angular/platform-browser'; - -import { FetchPublications } from '../../utils/fetchEntitiesClasses/fetchPublications.class'; -import { SearchPublicationsService } from '../../services/searchPublications.service'; -import { FetchDatasets } from '../../utils/fetchEntitiesClasses/fetchDatasets.class'; -import { SearchDatasetsService } from '../../services/searchDatasets.service'; -import { FetchProjects } from '../../utils/fetchEntitiesClasses/fetchProjects.class'; -import { SearchProjectsService } from '../../services/searchProjects.service'; -import { FetchDataproviders } from '../../utils/fetchEntitiesClasses/fetchDataproviders.class'; -import { SearchDataprovidersService } from '../../services/searchDataproviders.service'; - -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import {RouterHelper} from '../../utils/routerHelper.class'; - -@Component({ - selector: 'tabs', - template: ` - Tabs_0_content:{{tabs[0].content}} & length: {{tabs.length}} -
- - -
    - -
  • - - - - - - - - - - - - - - -
    -
    - No statistics available -
    -
    -

    Latest Documents Timeline

    - -

    Documents Types

    - -
    - - -
    -
    -

    Funders in content providers Publications

    - -

    Projects with most Publications

    - - -
    -
    -
    -

    Projects with most Research Data

    - -
    -
    -
    -
    - - - - - - - -
  • -
-
- ` -}) - -export class TabsComponent { - - @Input() id: string; - @Input() name: string; - @Input() resultsBy: string; - @Input() tabs: {"name": string, "content": string}[]; - //@Input() publications; - //@Input() datasets; - @Input() statistics; - //@Input() projects; - //@Input() datasources; - @Input() organizations: {"name": string, "url": string}[]; - - @Input() _dataproviderService; - - public relatedDataprovidersResultsType: string; - - public paramsForSearchLink = {};//: string = ""; - - public reloadPublications: boolean = true; - public reloadDatasets: boolean = true; - public reloadProjects: boolean = true; - public reloadDataproviders: boolean = true; - public reloadRelatedDatasources: boolean = true; - public metricsClicked: boolean; - private viewsFrameUrl: string; - private downloadsFrameUrl: string; - private totalViews: number; - private totalDownloads: number; - - public statsClicked: boolean = false; - private docsTimelineUrl: string; - private docsTypesUrl:string; - private docsFunderUrl:string; - private dataProjectsUrl:string ; - private pubsProjectsUrl:string; - - public fetchPublications : FetchPublications; - public fetchDatasets: FetchDatasets; - public fetchProjects: FetchProjects; - public fetchDataproviders: FetchDataproviders; - public fetchResultsAggregators: any; - - private nativeElement : Node; - - public routerHelper:RouterHelper = new RouterHelper(); - showTabs:boolean = false; - private sub: any; - - constructor (private renderer : Renderer, private element : ElementRef,private route: ActivatedRoute, - private _searchPublicationsService: SearchPublicationsService, - private _searchDatasetsService: SearchDatasetsService, - private _searchProjectsService: SearchProjectsService, - private _searchDataprovidersService: SearchDataprovidersService) { - this.fetchPublications = new FetchPublications(this._searchPublicationsService); - this.fetchDatasets = new FetchDatasets(this._searchDatasetsService); - this.fetchProjects = new FetchProjects(this._searchProjectsService); - this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService); - } - - ngOnInit() { - this.hideTabs(true); - this.initTabs("init"); - this.hideTabs(false); - } - public hideTabs(hide:boolean){ - this.showTabs = !hide; - } - public initTabs(from){ - console.log("\nCALL init from "+from+" "+this.tabs.length+"\n "); - - if(this.tabs != undefined && this.tabs.length > 0) { - this.reloadPublications = true; - this.reloadDatasets = true; - this.reloadProjects = true; - this.reloadDataproviders = true; - this.reloadRelatedDatasources = true; - this.statsClicked = false; - - this.search(this.tabs[0].content, 1, 10); - this.count(1, 0); - - this.metricsClicked = false; - this.viewsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"dtsrcOpenAIRETimeline", "dtsrcName":"'+this.id+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"OpenAIRE","yaxisheaders":["Monthly views"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]},{"query":"dtsrcRepoTimeline", "dtsrcName":"'+this.id+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":[""],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column","column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(124, 181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true'; - this.downloadsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"dtsrcDownloadsTimeline","dtsrcName":"'+this.id+'","table":"","fields":[{"fld":"sum","agg":"sum","type":"chart","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"","yaxisheaders":["Monthly downloads"],"generalxaxis":"","theme":0,"in":[]}]&info_types=["spline"]&stacking=&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(124, 181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true'; - - this.docsTimelineUrl ='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcYear","dtsrcName":"'+this.id+'","table": "result", "fields": [{"fld": "number", "agg": "count", "type": "line", "yaxis":1, "c":true}], "xaxis":{"name": "year", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Documents"], "in": [{"f":0, "text": "Yearly"}], "filters": [{"name":"year","max":"2016","min":"1997"},{"name": "result_datasources-datasource-name", "values":[""], "to": "-1"}],"having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": "Year"}&w=600&h=250'; - this.docsTypesUrl = 'https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcPubs","dtsrcName":"'+this.id+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "pie", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Documents"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - this.docsFunderUrl =' https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcPubsFund","dtsrcName":"'+this.id+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "pie", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Documents"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - this.dataProjectsUrl ='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcProjData","dtsrcName":"'+this.id+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "bar", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Datasets"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - this.pubsProjectsUrl ='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcProjPubs","dtsrcName":"'+this.id+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "bar", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Publications"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - - //if({"name": "Publications", "content": "publicationsTab"} in this.tabs) { - if(this.tabs.some(function (tab) { - return tab.name === 'Publications'; - })) { - this.relatedDataprovidersResultsType = 'publications'; - this.fetchResultsAggregators = new FetchPublications(this._searchPublicationsService); - } else { - this.relatedDataprovidersResultsType = 'datasets'; - this.fetchResultsAggregators = new FetchDatasets(this._searchDatasetsService); - } - } - if(this.resultsBy == "collectedFrom") { - //this.paramsForSearchLink = "?collectedFrom="+this.id+"&co=and"; - this.paramsForSearchLink = this.routerHelper.createQueryParams(['collectedFrom', 'co'], [this.id, 'and']); - } else if (this.resultsBy == "hostedBy") { - //this.paramsForSearchLink = "?hostedBy="+this.id+"&ho=and"; - this.paramsForSearchLink = this.routerHelper.createQueryParams(['hostedBy', 'ho'], [this.id, 'and']); - } - - } - - ngOnDestroy() { - //this.sub.unsubscribe(); - } - - // ngOnChanges() { - // console.info("on changes dataprovider tabs"); - // if(this.tabs != undefined && this.tabs.length > 0) { - // /*if(typeof document !== undefined) { - // let element = document.getElementById(this.tabs[0].content); - // if(element != null) { - // element.className = "uk-active"; - // element.setAttribute("aria-expanded", "true"); - // } - // - // let element2 = document.getElementById("firstTab-content"); - // if(element2 != null) { - // element2.className = "uk-active"; - // element2.setAttribute("aria-hidden", "false"); - // } - // }*/ - // - // this.reloadPublications = true; - // this.reloadDatasets = true; - // this.reloadProjects = true; - // this.reloadDataproviders = true; - // this.reloadRelatedDatasources = true; - // this.statsClicked = false; - // - // this.search(this.tabs[0].content, 1, 10); - // this.count(1, 0); - // - // this.metricsClicked = false; - // this.viewsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"dtsrcOpenAIRETimeline", "dtsrcName":"'+this.id+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"OpenAIRE","yaxisheaders":["Monthly views"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]},{"query":"dtsrcRepoTimeline", "dtsrcName":"'+this.id+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":[""],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column","column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(124, 181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true'; - // this.downloadsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"dtsrcDownloadsTimeline","dtsrcName":"'+this.id+'","table":"","fields":[{"fld":"sum","agg":"sum","type":"chart","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"","yaxisheaders":["Monthly downloads"],"generalxaxis":"","theme":0,"in":[]}]&info_types=["spline"]&stacking=&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(124, 181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true'; - // - // this.docsTimelineUrl ='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcYear","dtsrcName":"'+this.id+'","table": "result", "fields": [{"fld": "number", "agg": "count", "type": "line", "yaxis":1, "c":true}], "xaxis":{"name": "year", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Documents"], "in": [{"f":0, "text": "Yearly"}], "filters": [{"name":"year","max":"2016","min":"1997"},{"name": "result_datasources-datasource-name", "values":[""], "to": "-1"}],"having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": "Year"}&w=600&h=250'; - // this.docsTypesUrl = 'https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcPubs","dtsrcName":"'+this.id+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "pie", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Documents"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - // this.docsFunderUrl =' https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcPubsFund","dtsrcName":"'+this.id+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "pie", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Documents"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - // this.dataProjectsUrl ='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcProjData","dtsrcName":"'+this.id+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "bar", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Datasets"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - // this.pubsProjectsUrl ='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"dtsrcProjPubs","dtsrcName":"'+this.id+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "bar", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Publications"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [""], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - // } - // - // if(this.resultsBy == "collectedFrom") { - // this.paramsForSearchLink = "?collectedFrom="+this.id+"&co=and"; - // } else if (this.resultsBy == "hostedBy") { - // this.paramsForSearchLink = "?hostedBy="+this.id+"&ho=and"; - // } - // } - - private count(page: number, size: number) { - console.info("number of tabs: "+this.tabs.length); - - for(let i=1; i -
-
- -
- - - - - -
-
- - {{datasetInfo.types.join(", ")}} - {{datasetInfo.title.accessMode}} - - - Record in preview - - - - -
- - ({{datasetInfo.date}}) -
- -
    -
  • Publisher: {{datasetInfo.publisher}}
  • - -
  • Embargo end date: {{datasetInfo.embargoEndDate}}
  • -
  • - -
  • -
  • - - -
  • -
- -
- {{datasetInfo.description}} -
- -
- - -
- - - - - - - - - -
-
-
- No related research results available -
-
-
-
{{provenanceaction}}
- - -
-
-
- -
-
- No similar research results available -
-
- -
-
-
- - - - - - - -
- -
-
- -
-
- Share - Bookmark - -
- - - - - - -
-
-
-
-
-
diff --git a/portal-2/src/app/landingPages/dataset/dataset.component.ts b/portal-2/src/app/landingPages/dataset/dataset.component.ts deleted file mode 100644 index 0eefa691..00000000 --- a/portal-2/src/app/landingPages/dataset/dataset.component.ts +++ /dev/null @@ -1,169 +0,0 @@ -import {Component, ViewChild, ElementRef} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {DatasetService} from './dataset.service'; -import {DatasetInfo} from '../../utils/entities/datasetInfo'; -import {ActivatedRoute, Router} from '@angular/router'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties' -import {RouterHelper} from '../../utils/routerHelper.class'; -import { Meta} from '../../../angular2-meta'; -import {PiwikService} from '../../utils/piwik/piwik.service'; - -@Component({ - selector: 'dataset', - templateUrl: 'dataset.component.html', -}) - -export class DatasetComponent { - public datasetInfo: DatasetInfo; - public datasetId : string ; - - // APP BOX variables - public showAllCollectedFrom: boolean = false; - public showAllDownloadFrom: boolean = false; - public showAllPublishedIn: boolean = false; - - // Metrics tab variables - public metricsClicked: boolean; - public viewsFrameUrl: string; - public downloadsFrameUrl: string; - public totalViews: number; - public totalDownloads: number; - public pageViews: number; - - // Active tab variable for responsiveness - public activeTab: string = "Related Research Results"; - - // Map counting variable - public relatedResearchResultsNum: number = 0; - - // Message variables - public warningMessage = ""; - public errorMessage = ""; - public showLoading: boolean = true; - - public routerHelper:RouterHelper = new RouterHelper(); - - private result ; - sub: any; piwiksub: any; infoSub: any; - - constructor (private element: ElementRef, - private _datasetService: DatasetService, - private _piwikService:PiwikService, - private route: ActivatedRoute, - private _meta: Meta, - private _router: Router) { - this.updateUrl(OpenaireProperties.getBaseLink()+this._router.url); - } - - ngOnInit() { - this.sub = this.route.queryParams.subscribe(params => { - this.datasetInfo = null; - this.updateTitle("Dataset"); - this.updateDescription("Dataset, search, open access"); - - this.datasetId = params['datasetId']; - console.info("Id is :"+this.datasetId); - - if(this.datasetId){ - this.getDatasetInfo(this.datasetId); - }else{ - this.showLoading = false; - this.warningMessage="No valid research data id"; - } - - this.metricsClicked = false; - - this.viewsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"resRepoViews", "resTitle":"'+this.datasetId+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":["Monthly views"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false'; - /*this.viewsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"resViewsTimeline", "resTitle":"'+this.datasetId+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":["Monthly views"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(124, 181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false'; - */ - - this.downloadsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"resRepoDownloads", "resTitle":"'+this.datasetId+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":["Monthly downloads"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false'; - /*this.downloadsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"resRepoDownloadTimeline", "resTitle":"'+this.datasetId+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":["Monthly downloads"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true'; - */ - if (typeof document !== 'undefined') { - this.element.nativeElement.scrollIntoView(); - } - }); - - } - - ngOnDestroy() { - this.sub.unsubscribe(); - if(this.piwiksub){ - this.piwiksub.unsubscribe(); - } - if(this.infoSub) { - this.infoSub.unsubscribe(); - } - } - - private getDatasetInfo(id:string) { - this.warningMessage = ''; - this.errorMessage="" - this.showLoading = true; - - this.infoSub = this._datasetService.getDatasetInfo(id).subscribe( - data => { - this.datasetInfo = data; - this.updateTitle(this.datasetInfo.title.name); - this.updateDescription("Dataset, search, repositories, open access,"+this.datasetInfo.title.name); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView(this.datasetInfo.title.name).subscribe(); - } - - this.result = [] - this.result = {id: id, type :"dataset", source : "openaire", title: this.datasetInfo.title,url: '', result: '', accessRights: this.datasetInfo.title.accessMode, embargoEndDate: ''}; - - let relatedResearchResultsNum = 0; - if(this.datasetInfo.relatedResearchResults != undefined) { - this.datasetInfo.relatedResearchResults.forEach(function (value, key, map) { - relatedResearchResultsNum += value.length; - }); - } - this.relatedResearchResultsNum = relatedResearchResultsNum; - - this.showLoading = false; - }, - err => { - console.log(err) - console.info("error"); - - this.errorMessage = 'No research data found'; - this.showLoading = false; - } - ); - } - - // showChange($event) { - // this.showAllReferences=$event.value; - // } - - public metricsResults($event) { - this.totalViews = $event.totalViews; - this.totalDownloads = $event.totalDownloads; - this.pageViews = $event.pageViews; - } - - private updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - private updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - private updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } - - public buildCurationTooltip() { - let tooltipContent: string = "
"; - - tooltipContent += "

Record in preview

"; - tooltipContent += "

Bibliographic record accepted by the system, but not yet processed by
OpenAIRE tools for information quality improvement and de-duplication

"; - - return tooltipContent; - } -} diff --git a/portal-2/src/app/landingPages/dataset/dataset.module.ts b/portal-2/src/app/landingPages/dataset/dataset.module.ts deleted file mode 100644 index 90c0ded6..00000000 --- a/portal-2/src/app/landingPages/dataset/dataset.module.ts +++ /dev/null @@ -1,37 +0,0 @@ -//import {MaterialModule} from '@angular/material'; -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { SharedModule } from '../../shared/shared.module'; -import { RouterModule } from '@angular/router'; - -import { DatasetService} from './dataset.service'; -import { DatasetComponent } from './dataset.component'; -import { DatasetRoutingModule } from './dataset-routing.module'; -import {MetricsModule} from '../landing-utils/metrics.module'; -import {IFrameModule} from '../../utils/iframe.module'; -import {AltMetricsModule} from '../../utils/altmetrics.module'; -import {CiteThisModule} from '../landing-utils/citeThis/citeThis.module'; - -import { ResultLandingModule } from '../landing-utils/resultLanding.module'; -import { LandingModule } from '../landing-utils/landing.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - //MaterialModule.forRoot(), - CommonModule, FormsModule,SharedModule, RouterModule, LandingModule, CiteThisModule, - ResultLandingModule, DatasetRoutingModule, MetricsModule, IFrameModule, AltMetricsModule - ], - declarations: [ - DatasetComponent - ], - providers:[ - DatasetService, FreeGuard, IsRouteEnabled - ], - exports: [ - DatasetComponent - ] -}) -export class DatasetModule { } diff --git a/portal-2/src/app/landingPages/dataset/dataset.service.ts b/portal-2/src/app/landingPages/dataset/dataset.service.ts deleted file mode 100644 index 2efc3b22..00000000 --- a/portal-2/src/app/landingPages/dataset/dataset.service.ts +++ /dev/null @@ -1,225 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {DatasetInfo} from '../../utils/entities/datasetInfo'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../../shared/cache.service'; -import { ParsingFunctions } from '../landing-utils/parsingFunctions.class'; - -@Injectable() -export class DatasetService { - - constructor(private http: Http, public _cache: CacheService) { - this.parsingFunctions = new ParsingFunctions(); - } - - public parsingFunctions: ParsingFunctions; - datasetInfo: DatasetInfo; - - getDatasetInfo (id: string):any { - console.info("getDatasetInfo in service"); - - let url = OpenaireProperties. getSearchAPIURLLast()+'datasets/'+id+"?format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseDatasetInfo(res)); - } - - return this.http.get(url) - .map(res => res.json()) - .do(res => console.info(res['result']['metadata']['oaf:entity'])) - .map(res => [res['result']['header']['dri:status'], res['result']['metadata']['oaf:entity']['oaf:result']]) - .map(res => [res[1], - res[1]['title'], - res[1]['rels']['rel'], - res[1]['children'], - res[1]['pid'], - res[1]['subject'], - res[1]['bestaccessright'], - res[1]['collectedfrom'], - res[1]['context'], - //res[1]['resulttype'], - res[0], - res[1]['creator'] - ]).do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseDatasetInfo(res)); - } - - private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } - - parseDatasetInfo (data: any):any { - this.datasetInfo = new DatasetInfo(); - - if(data[0] != null) { - var date:string = (data[0].dateofacceptance)+""; // transform to string in case it is an integer - this.datasetInfo.date = (date && (date).indexOf('-') !== -1)?date.split('-')[0]:date; - this.datasetInfo.dateofacceptance = data[0].dateofacceptance; - this.datasetInfo.publisher = data[0].publisher; - if(!Array.isArray(data[0].description)) { - this.datasetInfo.description = data[0].description; - } else { - this.datasetInfo.description = data[0].description[0]; - } - this.datasetInfo.embargoEndDate = data[0].embargoenddate; - } - this.datasetInfo.title = {"name": "", "url": "", "accessMode": ""}; - if(data[0]['bestaccessright'].hasOwnProperty("classid")) { - this.datasetInfo.title.accessMode = data[0]['bestaccessright'].classid; - } - if(data[1] != null) { - if(Array.isArray(data[1])) { - this.datasetInfo.title['name'] = data[1][0].content; - } else { - this.datasetInfo.title['name'] = data[1].content; - } - } - - if(data[2] != null) { - let relation; - let length = data[2].length!=undefined ? data[2].length : 1; - - for(let i=0; i(); - this.datasetInfo.publishedIn = new Map() - - this.datasetInfo.types = new Array(); - let types = new Set(); - - let counter = 0; - let instance; - - let length = data[3]['instance'].length!=undefined ? data[3]['instance'].length : 1; - - for(let i=0; i, Map] = this.parsingFunctions.parseAllSubjects(data[5]); - this.datasetInfo.subjects = subjectResults[0]; - this.datasetInfo.otherSubjects = subjectResults[1]; - this.datasetInfo.classifiedSubjects = subjectResults[2]; - } - - // if(data[6] != null) { - // this.datasetInfo.bestaccessright = data[6].classid; - // } - - // if(data[7] != null) { - // this.datasetInfo.collectedFrom = this.parsingFunctions.parseCollectedFrom(data[7]); - // } - - // null argument is for journal - this.datasetInfo.downloadFrom = this.parsingFunctions.addPublisherToDownloadFrom( - this.datasetInfo.downloadFrom, this.datasetInfo.publisher, - null, this.datasetInfo.identifiers, this.datasetInfo.title); - - if(data[8] != null) { - this.datasetInfo.contexts = this.parsingFunctions.parseContexts(data[8]); - } - - // if(data[9] != null && this.datasetInfo.type == undefined) { - // if(data[9].hasOwnProperty('classname')) { - // this.datasetInfo.type = data[9].classname; - // } - // } - - if(data[9] != null && data[9] == "under curation") { - this.datasetInfo.underCurationMessage = true; - } else { - this.datasetInfo.underCurationMessage = false; - } - - if(data[10] != null) { - if(this.datasetInfo.authors == undefined) { - this.datasetInfo.authors = new Array(); - } - - let authors = data[10]; - let length = Array.isArray(authors) ? authors.length : 1; - for(let i=0; i -
-
- -
- - - -
-

{{header1}}

-

{{header2}}

- -
- -
- -
- - -
-
-
-
-
- - ` - }) -export class HtmlProjectReportComponent{ - private projectId: string; - private totalResults: number = 10; - private resultsType: string = "publication"; - - public header1: string = ""; - public header2: string = ""; - public htmlResult: string = ""; - - public sub: any; piwiksub: any; - public subHTML: any; - public subHTMLInfo: any; - - public warningMessage: string = ""; - public errorMessage: string = ""; - public showLoading: boolean = true; - - constructor ( private route: ActivatedRoute, - private htmlService: HtmlProjectReportService, - private _piwikService:PiwikService, - private _projectService: ProjectService, - private _meta: Meta, private _router: Router) { - this.updateUrl(OpenaireProperties.getBaseLink()+this._router.url); - } - - ngOnInit() { - this.sub = this.route.queryParams.subscribe(params => { - this.projectId = params['projectId']; - - if (params['size'] == parseInt(params['size'], 10)) { - this.totalResults = params['size']; - } else { - this.showLoading = false; - this.warningMessage="Requested size is not an integer"; - } -console.info(params['type']); - if(params['type'] && (params['type'] == "dataset" || params['type'] == "publication")){ - this.resultsType = (params['type'] == "dataset") ? 'research data' : params['type']; - this.updateTitle("Project's "+this.resultsType+" report"); - this.updateDescription("project, project "+ this.resultsType +" report, funding, open access, publications, research data"); - } else { - this.showLoading = false; - this.warningMessage="Requested type should be publication or research data"; - } - - //showLoading is true if no warnings - if(this.showLoading) { - if(this.projectId) { - this.createHeaders(); - } else { - this.showLoading = false; - this.warningMessage="No valid project id"; - } - } - }); - } - - ngOnDestroy() { - this.sub.unsubscribe(); - if(this.piwiksub){ - this.piwiksub.unsubscribe(); - } - if(this.subHTML) { - this.subHTML.unsubscribe(); - } - if(this.subHTMLInfo) { - this.subHTMLInfo.unsubscribe(); - } - } - - private createHeaders() { - this.subHTMLInfo = this._projectService.getHTMLInfo(this.projectId).subscribe( - data => { - this.createHeader1(data); - if(data.acronym) { - this.updateTitle(data.acronym+" "+this.resultsType+" report"); - } else if(data.title){ - this.updateTitle(data.title+" "+this.resultsType+" report"); - } - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView(((data.acronym)?data.acronym:data.title)+" "+this.resultsType+" report").subscribe(); - } - }, - err => { - console.log(err); - this.createClipboard(); - } - ); - - this.header2 = this.totalResults+((this.resultsType == "publication")?" publications":" research data"); - } - - private createClipboard() { - let intro: string = ''; - intro += ''; - intro += ''; - intro += ''+this.header1+'' - intro += ''; - - if (typeof window !== 'undefined') { - this.subHTML = this.htmlService.getHTML(this.projectId, this.totalResults, this.resultsType).subscribe( - data => { - let body: string = intro+'

'+this.header1+'

'+this.header2+'

'+data+''; - this.htmlResult = data; - - let clipboard; - let Clipboard; - Clipboard = require('clipboard'); - clipboard = new Clipboard('.clipBtn', { - /*target: function(trigger) { - return document.getElementById("clipboard"); - }*/ - text: function(trigger) { - return body;//document.getElementById("clipboard").getAttribute('innerHTML');//"aaaa"+tmp+"oo"; - } - }); - - this.showLoading = false; - }, - err => { - console.log(err); - this.errorMessage = 'Service not available'; - this.showLoading = false; - } - ); - } - } - - createHeader1(data: {"title": string, "acronym": string, "callIdentifier": string}) { - this.header1 = ((this.resultsType == "publication")?"Publications":"Research Data") + " of Project "; - - if(data != undefined) { - if(data.title != undefined && data.title != "") { - this.header1 += data.title; - } - if((data.title != undefined && data.title != "") && - ((data.acronym != undefined && data.acronym != "") || - (data.callIdentifier != undefined && data.callIdentifier != ""))) { - this.header1 += "("; - } - if(data.acronym != undefined && data.acronym != "") { - this.header1 += data.acronym + " - "; - } - if(data.callIdentifier != undefined && data.callIdentifier != "") { - this.header1 += data.callIdentifier; - } - if((data.title != undefined && data.title != "") && - ((data.acronym != undefined && data.acronym != "") || - (data.callIdentifier != undefined && data.callIdentifier != ""))) { - this.header1 += ")"; - } - } - - this.createClipboard(); - } - - public copied() { - UIkit.notification({ - message : 'Raw html is copied. Please paste it on an html file.', - status : 'success', - timeout : 3000, - pos : 'top-center' - }); - } - - private updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - private updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - private updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } -} diff --git a/portal-2/src/app/landingPages/htmlProjectReport/htmlProjectReport.module.ts b/portal-2/src/app/landingPages/htmlProjectReport/htmlProjectReport.module.ts deleted file mode 100644 index 9e7dfb63..00000000 --- a/portal-2/src/app/landingPages/htmlProjectReport/htmlProjectReport.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -//import {MaterialModule} from '@angular/material'; -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { ProjectServiceModule} from '../project/projectService.module'; -import { CacheService } from '../../shared/cache.service'; - -import {HtmlProjectReportService} from './htmlProjectReport.service'; -import {HtmlProjectReportComponent} from './htmlProjectReport.component'; -import { HtmlProjectReportRoutingModule } from './htmlProjectReport-routing.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PiwikServiceModule} from '../../utils/piwik/piwikService.module'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, HtmlProjectReportRoutingModule, ProjectServiceModule,PiwikServiceModule - ], - declarations: [ - HtmlProjectReportComponent - ], - providers:[ - HtmlProjectReportService,CacheService, FreeGuard - ], - exports: [ - HtmlProjectReportComponent - ] -}) -export class HtmlProjectReportModule { } diff --git a/portal-2/src/app/landingPages/htmlProjectReport/htmlProjectReport.service.ts b/portal-2/src/app/landingPages/htmlProjectReport/htmlProjectReport.service.ts deleted file mode 100644 index a4f87f25..00000000 --- a/portal-2/src/app/landingPages/htmlProjectReport/htmlProjectReport.service.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import 'rxjs/add/operator/do'; -import { CacheService } from '../../shared/cache.service'; -@Injectable() -export class HtmlProjectReportService { - - constructor(private http: Http, public _cache: CacheService) {} - - getHTML(id: string, size: number, type:string):any { - console.info("getHTML in service"); - - let resultTypeId: string = (type == "research data") ? 'dataset' : type; - let requestType: string = (resultTypeId == "dataset") ? 'datasets' : 'publications'; - //let url = OpenaireProperties. getSearchAPIURLLast() + 'publications/' +id+"?format=json"; - let url = OpenaireProperties.getCsvAPIURL(); - url += 'resources?format=html&page=0&size='+size+'&type='+requestType+'&query=(((oaftype exact result) and (resulttypeid exact '+resultTypeId+')) and (relprojectid exact "'+id+'"))'; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - return this.http.get(url) - .map(res => res.text()) - .do(res => { - this._cache.set(key, res); - }); - } -} diff --git a/portal-2/src/app/landingPages/landing-utils/addThis.component.ts b/portal-2/src/app/landingPages/landing-utils/addThis.component.ts deleted file mode 100644 index 52951668..00000000 --- a/portal-2/src/app/landingPages/landing-utils/addThis.component.ts +++ /dev/null @@ -1,40 +0,0 @@ -import {Component, ElementRef, Input} from '@angular/core'; -import {ActivatedRoute} from '@angular/router'; - - interface addthis { - layers: refresh; - } - interface refresh { - refresh: Function; - } - declare var addthis: addthis; - -// -@Component({ - selector: 'addThis', - template: ` -
- ` -}) -export class AddThisComponent { - private sub:any; - - - constructor(private route: ActivatedRoute) { - - } - ngOnInit() { - this.sub = this.route.queryParams.subscribe(data => { - - if (typeof document !== 'undefined') { - try{ - addthis.layers.refresh(); - }catch (e) { - } - } - }); - - } - - -} diff --git a/portal-2/src/app/landingPages/landing-utils/citeThis/citation.class.ts b/portal-2/src/app/landingPages/landing-utils/citeThis/citation.class.ts deleted file mode 100644 index 3a8f42d8..00000000 --- a/portal-2/src/app/landingPages/landing-utils/citeThis/citation.class.ts +++ /dev/null @@ -1,110 +0,0 @@ -export class Citation{ - public templates:string[]=["bibtex","chicago","ieee","science","apa","cell","harvard","mla","nature","acm"]; - - bibtex:string =` `; - ieee_csl:string =` `; - chicago_csl:string =` `; - science_csl:string =' '; - cell_csl:string =' '; - mla_csl:string =' '; - nature_csl:string =' '; -//nature_csl:string =' '; - acm_csl:string =' '; - - public getOptionsBy(template:string):any{ - if(template == "bibtex"){ - var options:any ={ // Subsequent calls - format: 'string', - type: 'string', - style: 'bibtex' - } - return options; - }else if(template == "apa"){ - var options:any ={ // Subsequent calls - format: 'string', - type: 'string', - style: 'citation-apa' - } - return options; - }else if(template == "harvard"){ - var options:any ={ // Subsequent calls - format: 'string', - type: 'string', - style: 'citation-harvard1' - } - return options; - }else if(template == "chicago"){ - var options:any ={ // Subsequent calls - format: 'string', - type: 'string', - style: 'citation-chicago', - template:this.chicago_csl - } - return options; - }else if(template == "ieee"){ - var options:any ={ // Subsequent calls - format: 'string', - type: 'string', - style: 'citation-ieee', - template:this.ieee_csl - } - return options; - }else if(template == "science"){ - var options:any ={ // Subsequent calls - format: 'string', - type: 'string', - style: 'citation-science', - template:this.science_csl - } - return options; - }else if(template == "cell"){ - var options:any ={ // Subsequent calls - format: 'string', - type: 'string', - style: 'citation-cell', - template:this.cell_csl - } - return options; - }else if(template == "mla"){ - var options:any ={ // Subsequent calls - format: 'string', - type: 'string', - style: 'citation-mla', - template:this.mla_csl - } - return options; - }else if(template == "nature"){ - var options:any ={ // Subsequent calls - format: 'string', - type: 'string', - style: 'citation-nature', - template:this.nature_csl - } - return options; - }else if(template == "acm"){ - var options:any ={ // Subsequent calls - format: 'string', - type: 'string', - style: 'citation-acm', - template:this.acm_csl - } - return options; - } - - - } - -} -export class CitationData{ - public id:string; - public type:string; - public title:string; - public DOI:string; - public "container-title":string; - public publisher:string; - public author:{given:string, family:string, 'parse-names':boolean}[] =[]; - public issued:any[] =[];//{"date-parts":string[]}[] =[]; - public date:string; - public authors:string[] =[]; - -} diff --git a/portal-2/src/app/landingPages/landing-utils/citeThis/citeThis.component.ts b/portal-2/src/app/landingPages/landing-utils/citeThis/citeThis.component.ts deleted file mode 100644 index 954884fc..00000000 --- a/portal-2/src/app/landingPages/landing-utils/citeThis/citeThis.component.ts +++ /dev/null @@ -1,102 +0,0 @@ -import {Component, ElementRef, Input} from '@angular/core'; -import {ActivatedRoute} from '@angular/router'; -import {Citation, CitationData} from './citation.class'; - -// -@Component({ - selector: 'citeThis', - template: ` - -
-
-
Cite this {{type}}
-
- -
{{citationText}}
-
-
-
- ` -}) -export class CiteThisComponent { - private sub:any; - public selectedStyle:string; - public citationText:string; - public citation:Citation = new Citation(); - public cite: any; - @Input() result: any; - @Input() id: string; - @Input() type: string="article"; - - public data;//= '[ { "id": "Q23571040", "type": "apple", "title": "Correlation of the Base Strengths of Amines 1", "DOI": "10.1021/ja01577a030", "author": [ { "given": "H. K.", "family": "Hall" } ], "issued": [ { "date-parts": [ "1957", "1", "1" ] } ], "container-title": "Journal of the American Chemical Society", "volume": "79", "issue": "20", "page": "5441-5444" } ]'; - - - constructor(private route: ActivatedRoute) { - this.selectedStyle = this.citation.templates[0]; - } - - ngOnInit() { - if(typeof window !== 'undefined') { - this.parseData(); - var Cite = require('citation-js'); - this.cite = new Cite(this.data,this.citation.getOptionsBy(this.selectedStyle)); - this.citationText = this.cite.get(this.citation.getOptionsBy(this.selectedStyle)); - } - } - parseData(){ - var citationData:CitationData = new CitationData(); - - citationData.id = this.id; - if(this.result.types != undefined && this.result.types.length > 0 && this.result.types[0]){ - citationData.type = this.result.types[0].toLowerCase(); - }else if(this.result.type != undefined ){ - citationData.type = this.result.type.toLowerCase(); - } - if(this.result.title && this.result.title.name){ - citationData.title = this.result.title.name; - } - if(this.result.journal && this.result.journal.journal){ - citationData["container-title"] = this.result.journal.journal; - } - if(this.result.publisher){ - citationData.publisher = this.result.publisher; - } - if( this.result.authors){ - citationData.author = []; - var max_length = (this.result.authors.length > 10)?10:this.result.authors.length; - for (var i =0 ;i < max_length; i++){ - if(this.result.authors[i] && this.result.authors[i].indexOf(", ") !== -1){ - citationData.author.push({given:this.result.authors[i].split(", ")[0], family:this.result.authors[i].split(", ")[1], 'parse-names':true}); - }else{ - citationData.author.push({given:"", family:this.result.authors[i], 'parse-names':true}); - } - citationData.authors.push(this.result.authors[i]); - } - } - if(this.result.dateofacceptance != undefined){ - citationData.issued = []; - var date:string = (this.result.dateofacceptance)+""; // transform to string in case it is an integer - var dateArray:string[] = (date && (date).indexOf('-') !== -1)?date.split('-'):[date]; - if(dateArray.length < 3){ - dateArray.push["01"]; - dateArray.push["01"]; - } - citationData.issued.push({"date-parts":[dateArray[0],dateArray[1], dateArray[2]]}); - if(this.result.date ){ - citationData.date = this.result.date ; - } - } - - - this.data = JSON.stringify(citationData); - console.log(this.data); - - } - styleChanged(){ - this.citationText = this.cite.get(this.citation.getOptionsBy(this.selectedStyle)); - - } - -} diff --git a/portal-2/src/app/landingPages/landing-utils/citeThis/citeThis.module.ts b/portal-2/src/app/landingPages/landing-utils/citeThis/citeThis.module.ts deleted file mode 100644 index 4a14a36a..00000000 --- a/portal-2/src/app/landingPages/landing-utils/citeThis/citeThis.module.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - - import {CiteThisComponent} from './citeThis.component'; - -@NgModule({ - imports: [ - - CommonModule, FormsModule - ], - declarations: [ - CiteThisComponent - ], - providers:[ - - ], - exports: [ - - CiteThisComponent - ] -}) -export class CiteThisModule { } diff --git a/portal-2/src/app/landingPages/landing-utils/fundedBy.component.ts b/portal-2/src/app/landingPages/landing-utils/fundedBy.component.ts deleted file mode 100644 index 2c4613cc..00000000 --- a/portal-2/src/app/landingPages/landing-utils/fundedBy.component.ts +++ /dev/null @@ -1,131 +0,0 @@ -import {Component, Input, ElementRef} from '@angular/core'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; - -@Component({ - selector: 'fundedBy', - template: ` -
-
Funded By
-
-
- - - - {{item['funderShortname']?item['funderShortname']:item['funderName']}} - [no funder available] - | {{ item['acronym']?item['acronym']:item['title']}} - - - - - {{item['funderShortname']?item['funderShortname']:item['funderName']}} - [no funder available] - | {{ item['acronym']?item['acronym']:item['title']}} - - - - - {{item['funderShortname']?item['funderShortname']:item['funderName']}} - [no funder available] - | {{ item['acronym']?item['acronym']:item['title']}} - - - - - {{item['funderShortname']?item['funderShortname']:item['funderName']}} - [no funder available] - | {{ item['acronym']?item['acronym']:item['title']}} - - - - - - - -
-
-
- - View less - -
-
...
-
- - View more - -
-
- ` - }) - -export class FundedByComponent { - @Input() fundedByProjects: { "id": string, "acronym": string, "title": string, - "funderShortname": string, "funderName": string, - "funding": string, "code": string, "provenanceAction": string, - "inline": boolean }[]; - public showAll: boolean = false; - - constructor (private element: ElementRef) {} - - ngOnInit() {} - - public buildFundingTooltip(item: { "id": string, "acronym": string, "title": string, - "funderShortname": string, "funderName": string, - "funding": string, "code": string, "provenanceAction": string, inline: boolean}) { - let tooltipContent: string = "
"; - - if(item.title) { - tooltipContent += "
"+item.title+"
"; - } - - if(item.code || item.funderName || item.funderShortname || item.funding) { - tooltipContent += "

"; - } - - if(item.code) { - tooltipContent += "

Project Code: "+item.code+"
"; - } - if(item.funderName || item.funderShortname) { - tooltipContent += "
Funder: "; - if(item.funderName && item.funderShortname) { - tooltipContent += item.funderName + " ("+ item.funderShortname +")"; - } else if(item.funderName) { - tooltipContent += item.funderName; - } else { - tooltipContent += item.funderShortname; - } - tooltipContent += "
"; - } - - if(item.funding) { - tooltipContent += "
Funding: "+ item.funding + "
"; - } - - if(item.code || item.funderName || item.funderShortname || item.funding) { - tooltipContent += "

"; - } - - if(item.provenanceAction == 'Repository') { - tooltipContent += "Provided by Repository"; - } else if(item.provenanceAction == 'OpenAIRE') { - tooltipContent += "Inferred by OpenAIRE"; - } else if(item.provenanceAction == 'USer') { - tooltipContent += "Claimed by User"; - } - - tooltipContent+="
" - return tooltipContent; - } - - public scroll() { - console.info("scroll into view"); - if (typeof document !== 'undefined') { - this.element.nativeElement.scrollIntoView(); - } - } -} diff --git a/portal-2/src/app/landingPages/landing-utils/landing.module.ts b/portal-2/src/app/landingPages/landing-utils/landing.module.ts deleted file mode 100644 index a7ae76f1..00000000 --- a/portal-2/src/app/landingPages/landing-utils/landing.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* This module contains all common components for all landing pages */ - -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import {TabPagingComponent} from './tabPaging.component'; -import {ShowTitleComponent} from './showTitle.component'; -import {AddThisComponent} from './addThis.component'; -import {PiwikServiceModule} from '../../utils/piwik/piwikService.module'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, RouterModule, PiwikServiceModule - ], - declarations: [ - TabPagingComponent, ShowTitleComponent, AddThisComponent - ], - providers:[ - PreviousRouteRecorder - ], - exports: [ - TabPagingComponent, ShowTitleComponent, AddThisComponent - ] -}) -export class LandingModule { } diff --git a/portal-2/src/app/landingPages/landing-utils/metrics.component.ts b/portal-2/src/app/landingPages/landing-utils/metrics.component.ts deleted file mode 100644 index b4c75833..00000000 --- a/portal-2/src/app/landingPages/landing-utils/metrics.component.ts +++ /dev/null @@ -1,224 +0,0 @@ -import {Component, Input, Output, EventEmitter} from '@angular/core'; -import {Metrics} from '../../utils/entities/metrics'; -import {MetricsService } from '../../services/metrics.service'; -import {ErrorCodes} from '../../utils/properties/openaireProperties'; - -import { Subscription } from 'rxjs/Subscription'; - -@Component({ - selector: 'metrics', - template: ` - - - - - - - - - -
-
Project metrics are derived from aggregating individual research results metrics.
-
-
- -
{{pageViews}}
-
views in OpenAIRE
- - - -
-
-
-
- -
{{metrics.totalViews}} - - ( {{metrics.totalOpenaireViews}} from OpenAIRE ) -
-
views in local repository
- - - - - -
-
-
-
- -
{{metrics.totalDownloads}} - - ( {{metrics.totalOpenaireDownloads}} from OpenAIRE ) -
-
downloads in local repository
- - - - - - -
-
- -
- -

The information is available from the following content providers:

- - - - - - - - - - - - - - - -
FromNumber Of ViewsNumber Of Downloads
- - {{metrics.infos.get(key).name}} - - - {{metrics.infos.get(key).numOfViews}} - - ( {{metrics.infos.get(key).openaireViews}} from OpenAIRE ) - - - {{metrics.infos.get(key).numOfDownloads}} - - ( {{metrics.infos.get(key).openaireDownloads}} from OpenAIRE ) - -
- ` - }) - -export class MetricsComponent { - @Output() metricsResults = new EventEmitter(); - @Input() id: string; - @Input() entityType: string; - @Input() entity: string; - //@Input() name: string = ""; - @Input() pageViews: number = 0; - - public metrics: Metrics; - public errorCodes:ErrorCodes; - private sub: Subscription; - - public status: number; - - constructor (private _metricsService: MetricsService) {} - - ngOnInit() { - this.errorCodes = new ErrorCodes(); - this.status = this.errorCodes.LOADING; - this.getMetrics(); - } - - ngOnDestroy() { - this.sub.unsubscribe(); - } - - private getMetrics() { - //if(this.id == undefined || this.id == "") { - // console.log("supplied id in metrics is not acceptable"); - //} - //if(this.type == undefined || this.type == "") { - // console.log("supplied id in metrics is not acceptable"); - //} - - this.sub = this._metricsService.getMetrics(this.id, this.entityType).subscribe( - data => { - this.metrics = data; - this.status = this.errorCodes.DONE; - - this.metricsResults.emit({ - totalViews: this.metrics.totalViews, - totalDownloads: this.metrics.totalDownloads, - pageViews: this.metrics.pageViews - }); - }, - err => { - console.log(err); - if(err.status == '404') { - this.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.status = this.errorCodes.ERROR; - } else { - this.status = this.errorCodes.NOT_AVAILABLE; - } - this.metricsResults.emit({ - totalViews: 0, - totalDownloads: 0 - }); - } - ); - } -} diff --git a/portal-2/src/app/landingPages/landing-utils/metrics.module.ts b/portal-2/src/app/landingPages/landing-utils/metrics.module.ts deleted file mode 100644 index 3fb241b4..00000000 --- a/portal-2/src/app/landingPages/landing-utils/metrics.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* This module contains all common components for all landing pages */ - -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - - import {MetricsComponent} from './metrics.component'; - import { MetricsService } from '../../services/metrics.service'; - - import {ErrorMessagesModule} from '../../utils/errorMessages.module'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, ErrorMessagesModule - ], - declarations: [ - MetricsComponent - ], - providers:[ - MetricsService - ], - exports: [ - MetricsComponent - ] -}) -export class MetricsModule { } diff --git a/portal-2/src/app/landingPages/landing-utils/parsingFunctions.class.ts b/portal-2/src/app/landingPages/landing-utils/parsingFunctions.class.ts deleted file mode 100644 index 6143bcda..00000000 --- a/portal-2/src/app/landingPages/landing-utils/parsingFunctions.class.ts +++ /dev/null @@ -1,454 +0,0 @@ -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; - -export class ParsingFunctions { - - constructor () {} - - public ngOnDestroy() {} - - public parseFundingByProjects(fundedByProjects: { "id": string, "acronym": string, "title": string, - "funderShortname": string, "funderName": string, - "funding": string, "code": string, - "provenanceAction": string, "inline": boolean - }[], - relation: any, projectsProvenanceVocabulary: any): - { "id": string, "acronym": string, "title": string, - "funderShortname": string, "funderName": string, - "funding": string, "code": string, - "provenanceAction": string, "inline": boolean - }[] { - if(fundedByProjects == undefined) { - fundedByProjects = new Array<{"id": string, "acronym": string, "title": string, - "funderShortname": string, "funderName": string, - "funding": string, "code": string, - "provenanceAction": string, "inline": boolean - }>(); - } - - let fundedByProject: { "id": string, "acronym": string, "title": string, - "funderShortname": string, "funderName": string, - "funding": string, "code": string, - "provenanceAction": string, "inline": boolean - } = { "id": "", "acronym": "", "title": "", - "funderShortname": "", "funderName": "", - "funding": "", "code": "", "provenanceAction": "", "inline": false - }; - - if(relation.title != 'unidentified') { - fundedByProject['id'] = relation['to'].content; - fundedByProject['acronym'] = relation.acronym; - fundedByProject['title'] = relation.title; - fundedByProject['code'] = relation.code; - - if(relation.provenanceaction in projectsProvenanceVocabulary) { - fundedByProject['provenanceAction'] = projectsProvenanceVocabulary[relation.provenanceaction]; - } - } else { - fundedByProject['id'] = ""; - fundedByProject['acronym'] = ""; - fundedByProject['title'] = ""; - fundedByProject['code'] = ""; - fundedByProject['provenanceAction'] = ""; - } - - if(relation.hasOwnProperty("funding")) { - let funding: {"funderName": string, "funderShortname": string, "stream": string}; - funding = this.parseFundingTrees(relation.funding); - - if(funding.funderName) { - fundedByProject['funderName'] = funding.funderName; - } - if(funding.funderShortname) { - fundedByProject['funderShortname'] = funding.funderShortname; - } - if(funding.stream) { - fundedByProject['funding'] = funding.stream; - } - } - fundedByProjects.push(fundedByProject); - return fundedByProjects; - } - - // publication & research data : for fundedByProjects | project landing : for funding - public parseFundingTrees(fundingTree: any): {"funderName": string, "funderShortname": string, "stream": string} { - let funding: {"funderName": string, "funderShortname": string, "stream": string} = {"funderName": "", "funderShortname": "", "stream": ""}; - let length = Array.isArray(fundingTree) ? fundingTree.length : 1; - - for(let i=0; i(); - - let collected; - let length = Array.isArray(_collectedFrom) ? _collectedFrom.length : 1; - for(let i=0; i, - publisher: string, journal:{"journal": string, "issn": string, "lissn": string}, - identifiers: Map, title: { "name": string, "url": string, "accessMode": string}) { - if( publisher && identifiers != null && identifiers.has('doi')) { - if( downloadFrom == null) { - downloadFrom = new Map(); - } - - let key: string; - if(journal && journal.journal) { - key = publisher + "/ "+journal['journal']; - } else { - key = publisher; - } - downloadFrom.set(key, {"url": null, "accessMode": null, "bestAccessMode": null}); - - let url = OpenaireProperties.getDoiURL()+identifiers.get("doi")[0]; - - downloadFrom.get(key)['url'] = new Array(); - downloadFrom.get(key)['accessMode'] = new Array(); - - downloadFrom.get(key)['url'][0] = url; - downloadFrom.get(key)['accessMode'][0] = ""; - - if(title != undefined && title['url'] == "") { - title['url'] = url; - } - } - return downloadFrom; - } - - // publication & dataset landing : for downloadFrom - parseDownloadFrom(downloadFrom: Map, instance: any, url: string) - { - let key: string = instance['hostedby'].name; - - if(key) { - this.addUrlAndAccessMode(downloadFrom, instance, key, url); - } - } - - // publication & dataset landing : for publishedIn - parsePublishedIn(publishedIn: Map, instance: any, result: any, url: string, counter: number): number { - if(result != null && result.hasOwnProperty("source")) { - let key: string; - if(Array.isArray(result.source)) { - if(counter==result.source.length) { - counter--; - } - key = result['source'][counter]; - } else { - key = result['source']; - } - - if(key) { - this.addUrlAndAccessMode(publishedIn, instance, key, url); - counter++; - } - } - return counter; - } - - // publication & dataset landing : for downloadFrom and publishedIn - addUrlAndAccessMode(mapStructure: Map, instance: any, key: string, url: string) { - if(!mapStructure.has(key)) { - mapStructure.set(key, {"url": null, "accessMode": null, "bestAccessMode": null}); - } - - if(mapStructure.get(key)['url'] == null) { - mapStructure.get(key)['url'] = new Array(); - } - - if(url) { - mapStructure.get(key)['url'].push(url); - } - - if(mapStructure.get(key)['accessMode'] == null) { - mapStructure.get(key)['accessMode'] = new Array(); - } - - if(instance.hasOwnProperty("licence")) { - if(url) { - mapStructure.get(key)['accessMode'].push(instance['licence'].classid); - } - - if(this.changeBestAccessMode(mapStructure.get(key)['bestAccessMode'], instance['licence'])) { - mapStructure.get(key)['bestAccessMode'] = instance['licence'].classid; - } - } else if(url) { - mapStructure.get(key)['accessMode'].push(""); - } - } - - // publication & dataset landing : for downloadFrom and publishedIn - changeBestAccessMode(currentAccessMode: string, accessMode: any): boolean { - if(!accessMode) { - return false; - } - accessMode = accessMode.classid; - - switch (currentAccessMode) { - case null: - return true; - case "CLOSED": - if( accessMode == "OPEN" || - accessMode == "EMBARGO" || - accessMode == "RESTRICTED") { - return true; - } - return false; - case "RESTRICTED": - if( accessMode == "OPEN" || - accessMode == "EMBARGO") { - return true; - } - return false; - case "EMBARGO": - if(accessMode == "OPEN") { - return true; - } - return false; - } - return false; - } - - // publication & dataset landing : for relatedResearchResults - parseRelatedResearchResults(relatedResearchResults: Map, relation: any, provenanceAction: string) : - Map { - if(relatedResearchResults == undefined) { - relatedResearchResults = new Map(); - } - - if(!relatedResearchResults.has(provenanceAction)) { - relatedResearchResults.set(provenanceAction, - new Array<{ "name": string, "id": string, "date": string, - "trust": number, "class": string }>()); - } - relatedResearchResults.get(provenanceAction).push(this.parseRelatedOrSimilarResearchResult(relation)); - - return relatedResearchResults; - } - - // publication & dataset landing : for similarResearchResults - parseSimilarResearchResults(similarResearchResults: { "name": string, "id": string, "date": string, - "trust": number, "class": string}[], relation: any) : - { "name": string, "id": string, "date": string, "trust": number, "class": string }[] { - if(similarResearchResults == undefined) { - similarResearchResults = new Array<{"name": string, "id": string, "date": string, - "trust": number, "class": string}>(); - } - similarResearchResults.push(this.parseRelatedOrSimilarResearchResult(relation)); - return similarResearchResults; - } - - // publication & dataset landing : for relatedResearchResults and similarResearchResults - parseRelatedOrSimilarResearchResult(relation: any): {"name": string, "id": string, "date": string, "trust": number, "class": string} { - let researchResult: {"name": string, "id": string, "date": string, "trust": number, "class": string} - = {"name": "", "id": "", "date": "", "trust": null, "class": ""} - - if(relation['resulttype'].classname == "publication") { - researchResult['class'] = "publication"; - } else if(relation['resulttype'].classname == "dataset") { - researchResult['class'] = "dataset"; - } else { - researchResult['class'] = "software"; - } - - researchResult['id'] = relation['to'].content; - let titleName = Array.isArray(relation['title']) ? relation['title'][0].content : relation['title'].content; - researchResult['name'] = titleName; - var date:string = ((Array.isArray(relation.dateofacceptance))?(relation.dateofacceptance[0]):(relation.dateofacceptance))+""; // transform to string in case it is an integer - researchResult['date'] = (date && (date).indexOf('-') !== -1)?date.split('-')[0]:date; - //researchResult['date'] = relation.dateofacceptance.substring(0,4);; - researchResult['trust'] = Math.round(relation.trust*100); - return researchResult; - } - - // publication & dataset landing : for identifiers - parseIdentifiers(pid: any): Map { - let identifiers = new Map(); - - if(pid.hasOwnProperty("classname") && pid['classname'] != "") { - if(pid.classname == "doi" || pid.classname == "pmc" || pid.classname == "handle") { - if(!identifiers.has(pid.classname)) { - identifiers.set(pid.classname, new Array()); - } - - identifiers.get(pid.classname).push(pid.content); - } - } else { - for(let i=0; i()); - } - identifiers.get(pid[i].classname).push(pid[i].content); - } - } - } - return identifiers; - } - - // publication & dataset landing : for subjects and otherSubjects and classifiedSubjects - parseAllSubjects(_subjects: any): [string[], Map, Map] { - let subjects: string[]; - let otherSubjects: Map; - let classifiedSubjects: Map; - - let subject; - let length = Array.isArray(_subjects) ? _subjects.length : 1; - - for(let i=0; i(); - } - - if(!classifiedSubjects.has(subject.classname)) { - classifiedSubjects.set(subject.classname, new Array()); - } - - classifiedSubjects.get(subject.classname).push(subject.content); - } else { - if(subject.classid == "keyword") { - if(subjects == undefined) { - subjects = new Array(); - } - - subjects.push(subject.content); - } else { - if(otherSubjects == undefined) { - otherSubjects = new Map(); - } - - if(!otherSubjects.has(subject.classname)) { - otherSubjects.set(subject.classname, new Array()); - } - otherSubjects.get(subject.classname).push(subject.content); - } - } - } - } - return [subjects, otherSubjects, classifiedSubjects]; - } - - parseContexts(_contexts: any): {"labelContext": string, "labelCategory": string, - "labelConcept": string, inline:boolean}[] { - let contexts = new Array<{"labelContext": string, "labelCategory": string, - "labelConcept": string, inline:boolean}>(); - - let position = 0; - let labels = ""; - let context; - let length = Array.isArray(_contexts) ? _contexts.length : 1; - for(let i=0; i, instance: any) { - if(instance.hasOwnProperty("instancetype") && instance['instancetype'].classname) { - if(!uniqueTypes.has(instance['instancetype'].classname)) { - types.push(instance['instancetype'].classname); - uniqueTypes.add(instance['instancetype'].classname); - } - } - } -} diff --git a/portal-2/src/app/landingPages/landing-utils/publishedIn.component.ts b/portal-2/src/app/landingPages/landing-utils/publishedIn.component.ts deleted file mode 100644 index 3a882d27..00000000 --- a/portal-2/src/app/landingPages/landing-utils/publishedIn.component.ts +++ /dev/null @@ -1,68 +0,0 @@ -import {Component, Input, ElementRef} from '@angular/core'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; - -@Component({ - selector: 'publishedIn', - template: ` -
-
Published in
-
-
- - - {{key}} - - - [{{i+1}}] - - - - - {{key}} - - - {{key}} - - -
-
-
- - View less - -
-
...
-
- - View more - -
-
- ` - }) - -export class PublishedInComponent { - //key is name - @Input() publishedIn: Map; - - public showAll: boolean = false; - - constructor (private element: ElementRef) {} - - ngOnInit() {} - - public scroll() { - console.info("scroll into view"); - if (typeof document !== 'undefined') { - this.element.nativeElement.scrollIntoView(); - } - } -} diff --git a/portal-2/src/app/landingPages/landing-utils/resultLanding.module.ts b/portal-2/src/app/landingPages/landing-utils/resultLanding.module.ts deleted file mode 100644 index edd543dc..00000000 --- a/portal-2/src/app/landingPages/landing-utils/resultLanding.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* This module contains all common components for Publication & Daasets Landing Pages */ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; -import {PagingModule} from '../../utils/paging.module'; - -import {ShowAuthorsComponent} from './showAuthors.component'; -import {ShowIdentifiersComponent} from './showIdentifiers.component'; -import {ShowSubjectsComponent} from './showSubjects.component'; -import {FundedByComponent} from './fundedBy.component'; -import {PublishedInComponent} from './publishedIn.component'; -import {TabTableComponent} from './tabTable.component'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, RouterModule, PagingModule - ], - declarations: [ - ShowAuthorsComponent,ShowIdentifiersComponent,ShowSubjectsComponent,FundedByComponent,PublishedInComponent,TabTableComponent - ], - providers:[ - ], - exports: [ - ShowAuthorsComponent,ShowIdentifiersComponent,ShowSubjectsComponent,FundedByComponent,PublishedInComponent,TabTableComponent - ] -}) -export class ResultLandingModule { } diff --git a/portal-2/src/app/landingPages/landing-utils/searchingProjectsInTab.component.ts b/portal-2/src/app/landingPages/landing-utils/searchingProjectsInTab.component.ts deleted file mode 100644 index c96d23ba..00000000 --- a/portal-2/src/app/landingPages/landing-utils/searchingProjectsInTab.component.ts +++ /dev/null @@ -1,122 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {ActivatedRoute} from '@angular/router'; - -import { FetchProjects } from '../../utils/fetchEntitiesClasses/fetchProjects.class'; -import { SearchProjectsService } from '../../services/searchProjects.service'; - -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {StringUtils} from '../../utils/string-utils.class'; -import {RouterHelper} from '../../utils/routerHelper.class'; - -@Component({ - selector: 'searchingProjectsTab', - template: ` - - - - -
- -
-
-
- -
-
-
    -
  • - - - - {{value.name}} ({{value.number}}) - -
  • - -
  • Filtered {{fetchProjects.searchUtils.totalResults}} results of {{fetchProjects.searchUtils.totalResultsNoFilters}} total results
  • -
  • -
- - - -
-
- ` -}) - -export class SearchingProjectsTabComponent { - @Input() fetchProjects : FetchProjects; - @Input() organizationId:string = ""; - public page :number = 1; - public size :number = 10; - public linkToSearchProjects: string; - - public routerHelper:RouterHelper = new RouterHelper(); - public errorCodes:ErrorCodes = new ErrorCodes(); - - private filterQuery:string = ""; - - constructor (private route: ActivatedRoute, - private _searchProjectsService: SearchProjectsService) { - } - - - ngOnInit() { - - if(this.organizationId) { - this.linkToSearchProjects = OpenaireProperties.getLinkToAdvancedSearchProjects();//+"?organization="+this.organizationId+"or=and";; - if(this.fetchProjects.searchUtils.totalResults > 0) { - this.search(false,""); - } - } - } - - - private search(refine:boolean, filterQuery:string){ - var refineFields:string [] = ["funder"]; - this.fetchProjects.getResultsForOrganizations(this.organizationId, filterQuery, this.page, this.size,(refine)?refineFields:[]); - } - - public pageChange($event) { - this.page=$event.value; - this.search(false, this.filterQuery); - } - - public filterChange($event) { - console.log("Filter Changed"); - this.updateFilters(); - //this.search(true, this.filterQuery); - this.search(false, this.filterQuery); - } - - private updateFilters (){ - this.filterQuery = ""; - for (let filter of this.fetchProjects.filters){ - var filterLimits=""; - for (let value of filter.values){ - if(value.selected == true){ - //filterLimits+=((filterLimits.length == 0)?'':',') +'"'+ StringUtils.URIEncode(value.id)+'"'; - filterLimits+=((filterLimits.length == 0)?'':' or ')+filter.filterId+' exact '; - filterLimits+='"'+ StringUtils.URIEncode(value.id)+'"'; - } - } - if(filterLimits.length > 0){ - //this.filterQuery+=' and '+filter.filterId + ' exact '+ filterLimits + ' '; - this.filterQuery+=' and ( ' + filterLimits + ' ) '; - } - - } - console.log("Filter Changed"+this.filterQuery); - - } -} diff --git a/portal-2/src/app/landingPages/landing-utils/searchingProjectsInTab.module.ts b/portal-2/src/app/landingPages/landing-utils/searchingProjectsInTab.module.ts deleted file mode 100644 index e3d7a061..00000000 --- a/portal-2/src/app/landingPages/landing-utils/searchingProjectsInTab.module.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* This module contains all common components for all landing pages */ - -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import { ProjectsServiceModule} from '../../services/projectsService.module'; -import { TabResultModule } from '../../searchPages/searchUtils/tabResult.module'; -import { SearchingProjectsTabComponent} from './searchingProjectsInTab.component'; - -import {PagingModule } from '../../utils/paging.module'; -import {ErrorMessagesModule} from '../../utils/errorMessages.module'; - -@NgModule({ - imports: [ - RouterModule, CommonModule, FormsModule, - ProjectsServiceModule, TabResultModule, - PagingModule, ErrorMessagesModule - ], - declarations: [ - SearchingProjectsTabComponent - ], - providers:[ - ], - exports: [ - - SearchingProjectsTabComponent - ] -}) -export class SearchingProjectsTabModule { } diff --git a/portal-2/src/app/landingPages/landing-utils/showAuthors.component.ts b/portal-2/src/app/landingPages/landing-utils/showAuthors.component.ts deleted file mode 100644 index d4dcc85e..00000000 --- a/portal-2/src/app/landingPages/landing-utils/showAuthors.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import {Component, Input, ElementRef} from '@angular/core'; -import {RouterHelper} from '../../utils/routerHelper.class'; - -@Component({ - selector: 'showAuthors', - template: ` - - - - - {{author}} - ; - - ... - - - - {{author}} - ; - - - - - view all {{authors.length}} authors - - - - View less authors - - - - ` - - }) - -export class ShowAuthorsComponent { - @Input() authors: { [key: string]: string }[]; - @Input() searchPage:string ="publications" - - public showAll: boolean = false; - public routerHelper:RouterHelper = new RouterHelper(); - - constructor (private element: ElementRef) { - } - - ngOnInit() { - } - - public quote(params: string):string { - return '"'+params+'"'; - } - - public scroll() { - console.info("scroll into view"); - if (typeof document !== 'undefined') { - this.element.nativeElement.scrollIntoView(); - } - } -} diff --git a/portal-2/src/app/landingPages/landing-utils/showIdentifiers.component.ts b/portal-2/src/app/landingPages/landing-utils/showIdentifiers.component.ts deleted file mode 100644 index e4e8b497..00000000 --- a/portal-2/src/app/landingPages/landing-utils/showIdentifiers.component.ts +++ /dev/null @@ -1,91 +0,0 @@ -import {Component, Input, ElementRef} from '@angular/core'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; - -@Component({ - selector: 'showIdentifiers', - template: ` - - - View less identifiers - - - - - - - {{key}}: {{item}}{{key}}: {{item}}{{key}}: {{item}}{{", "}} - ... - - - - - - - view all {{countIdentifiers()}} identifiers - - - - View less identifiers - - - - ` - }) - -export class ShowIdentifiersComponent { - @Input() identifiers: Map; - public doiURL: string; - public pmcURL: string; - public handleURL: string; - public showAll: boolean = false; - public sizeOfIdentifiers: number = -1; - public sizeOfPreviousIdentifiers: number = -1; - public pageSize: number = 10; - - constructor (private element: ElementRef) { - this.doiURL = OpenaireProperties.getDoiURL(); - this.pmcURL = OpenaireProperties.getPmcURL(); - this.handleURL = OpenaireProperties.getHandleURL(); - } - - ngOnInit() {} - - public countIdentifiers(): number { - if(this.sizeOfIdentifiers < 0) { - let num: number = 0; - if(this.identifiers != undefined) { - this.identifiers.forEach(function (value, key, map) { - num += value.length; - }); - } - this.sizeOfIdentifiers = num; - } - return this.sizeOfIdentifiers; - } - - public countSizeOfPreviousIdentifiers(index: number): number { - let num: number = 0; - let i: number = 0; - if(this.identifiers != undefined) { - this.identifiers.forEach(function (value, key, map) { - if(i < index) { - num += value.length; - } - i++; - }); - } - this.sizeOfPreviousIdentifiers= num; - return num; - } - - public scroll() { - console.info("scroll into view"); - if (typeof document !== 'undefined') { - this.element.nativeElement.scrollIntoView(); - } - } -} diff --git a/portal-2/src/app/landingPages/landing-utils/showSubjects.component.ts b/portal-2/src/app/landingPages/landing-utils/showSubjects.component.ts deleted file mode 100644 index 2bd3c534..00000000 --- a/portal-2/src/app/landingPages/landing-utils/showSubjects.component.ts +++ /dev/null @@ -1,54 +0,0 @@ -import {Component, Input} from '@angular/core'; - -@Component({ - selector: 'showSubjects', - template: ` -
- -
- Subject: - - {{subjects.join(" | ")}} -
    -
  • -
    - {{key}}: {{otherSubjects.get(key).join(" | ")}} -
    -
  • - -
-
- -
-
-
- Classified by OpenAIRE into -
- {{key}}: {{classifiedSubjects.get(key).join(" | ")}} -
-
-
-
-
- ` - - }) - -export class ShowSubjectsComponent { - @Input() subjects: string[]; - @Input() otherSubjects: Map; - @Input() classifiedSubjects: Map; - // private showClassifiedSbj: boolean = false; - - constructor () { - } - - ngOnInit() { - } -} diff --git a/portal-2/src/app/landingPages/landing-utils/showTitle.component.ts b/portal-2/src/app/landingPages/landing-utils/showTitle.component.ts deleted file mode 100644 index a458aae9..00000000 --- a/portal-2/src/app/landingPages/landing-utils/showTitle.component.ts +++ /dev/null @@ -1,66 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {ActivatedRoute} from '@angular/router'; - -@Component({ - selector: 'showTitle', - template: ` -

- - - - - - - [no title available] - - - - - - - [no title available] - -

- - ` - - }) - -export class ShowTitleComponent { - @Input() title: { [key: string]: string }; - @Input() iconClass:string; - - sub: any; - - constructor (private route: ActivatedRoute) {} - - ngOnInit() { - this.sub = this.route.queryParams.subscribe( - params => { - console.info("onInit showTitle"); - - if(this.title['accessMode'] == undefined) { - this.title['accessMode'] = ""; - } - } - ); - } - - ngOnDestroy() { - console.info("onDestroy showTitle"); - this.sub.unsubscribe(); - } -} diff --git a/portal-2/src/app/landingPages/landing-utils/tabPaging.component.ts b/portal-2/src/app/landingPages/landing-utils/tabPaging.component.ts deleted file mode 100644 index f0671764..00000000 --- a/portal-2/src/app/landingPages/landing-utils/tabPaging.component.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {Component, Input, Output, EventEmitter} from '@angular/core'; - -@Component({ - selector: 'tabPaging', - template: ` - - ` - }) - -export class TabPagingComponent { - @Input() showAll: boolean; - @Input() length: number; - @Output() changeShowAll: EventEmitter = new EventEmitter(); - - constructor () { - } - - ngOnInit() { - } -} diff --git a/portal-2/src/app/landingPages/landing-utils/tabTable.component.ts b/portal-2/src/app/landingPages/landing-utils/tabTable.component.ts deleted file mode 100644 index 83e51e77..00000000 --- a/portal-2/src/app/landingPages/landing-utils/tabTable.component.ts +++ /dev/null @@ -1,99 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {RouterHelper} from '../../utils/routerHelper.class'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -//import {PagingModule} from '../utils/paging.module'; - -@Component({ - selector: 'tabTable', - template: ` -
- {{info.length}} research results, page {{page}} of {{totalPages(info.length)}} - -
- - - - - - - - - -
- - (Publication) - (Dataset) - (Software) - - - - - {{item['name']}} - - - - {{item['name']}} - - - - - - {{item['name']}} - - -

{{item['name']}}

- - ({{item['date']}}) - -
-
-
{{item['trust']}}%
- -
-
-

No trust available

-
-
- ` - - }) - -export class TabTableComponent { - @Input() info: { "name": string, "url": string, "date": string, "trust": number}[];//Map; - - public routerHelper:RouterHelper = new RouterHelper(); - public searchLinkToPublication: string; - public searchLinkToDataset: string; - - public page: number = 1; - public pageSize: number = 10; - - constructor () { - } - - ngOnInit() { - this.searchLinkToPublication = OpenaireProperties.getsearchLinkToPublication(); - this.searchLinkToDataset = OpenaireProperties.getsearchLinkToDataset(); - } - - totalPages(totalResults: number): number { - let totalPages:any = totalResults/this.pageSize; - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, this.pageSize) + 1); - } - return totalPages; - } - - updatePage($event) { - this.page = $event.value; - } -} diff --git a/portal-2/src/app/landingPages/organization/organization-routing.module.ts b/portal-2/src/app/landingPages/organization/organization-routing.module.ts deleted file mode 100644 index 0111f624..00000000 --- a/portal-2/src/app/landingPages/organization/organization-routing.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { OrganizationComponent } from './organization.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: OrganizationComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - },canDeactivate: [PreviousRouteRecorder] } - ]) -] -}) -export class OrganizationRoutingModule { } diff --git a/portal-2/src/app/landingPages/organization/organization.component.html b/portal-2/src/app/landingPages/organization/organization.component.html deleted file mode 100644 index 47145857..00000000 --- a/portal-2/src/app/landingPages/organization/organization.component.html +++ /dev/null @@ -1,195 +0,0 @@ - diff --git a/portal-2/src/app/landingPages/organization/organization.component.ts b/portal-2/src/app/landingPages/organization/organization.component.ts deleted file mode 100644 index 1e02b02d..00000000 --- a/portal-2/src/app/landingPages/organization/organization.component.ts +++ /dev/null @@ -1,489 +0,0 @@ -import {Component, ViewChild, ElementRef} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {Subject} from 'rxjs/Subject'; -import {ActivatedRoute, Router} from '@angular/router'; - -import {OrganizationService} from '../../services/organization.service'; -import {OrganizationInfo} from '../../utils/entities/organizationInfo'; -import {ReportsService} from '../../services/reports.service'; -import {FetchPublications} from '../../utils/fetchEntitiesClasses/fetchPublications.class'; -import {FetchProjects} from '../../utils/fetchEntitiesClasses/fetchProjects.class'; -import {FetchDataproviders} from '../../utils/fetchEntitiesClasses/fetchDataproviders.class'; -import {SearchPublicationsService} from '../../services/searchPublications.service'; -import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; -import {SearchProjectsService} from '../../services/searchProjects.service'; -import { Meta} from '../../../angular2-meta'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchingProjectsTabComponent} from '../landing-utils/searchingProjectsInTab.component'; -import {RouterHelper} from '../../utils/routerHelper.class'; - -import {ModalLoading} from '../../utils/modal/loading.component'; -import {AlertModal} from '../../utils/modal/alert'; -import {PiwikService} from '../../utils/piwik/piwik.service'; -import {StringUtils} from '../../utils/string-utils.class'; - -@Component({ - selector: 'organization', - templateUrl: 'organization.component.html', -}) - -export class OrganizationComponent { - public organizationInfo: OrganizationInfo; - public organizationId: string; - - // Message variables - public warningMessage = ""; - public errorMessage = ""; - public showLoading: boolean = true; - - // CSV variables - public downloadURLAPI: string; - public csvProjectParamsHead: string; - public csvPublicationParamsHead: string; - public csvParamsTail: string; - - // Active tab variable for responsiveness - public activeTab: string = "Publications"; - - // Variables for publications, projects, dataproviders tabs - public fetchPublications: FetchPublications; - public linkToSearchPublications: string = ""; - public fetchProjects: FetchProjects; - public fetchDataproviders : FetchDataproviders; - public linkToSearchDataproviders:string = ""; - //public projectFunders:string[] = []; - - // Variables for projects query (query results only if projects tab is clicked) - public projectsClicked: boolean = false; - @ViewChild (SearchingProjectsTabComponent) searchingProjectsTabComponent : SearchingProjectsTabComponent ; - - @ViewChild (ModalLoading) loading : ModalLoading ; - // Alert box when CSV: Project Publications for a funder is requested - @ViewChild('AlertModalApplyAll') alertApplyAll; - // Alert box when something is wrong with CSV requests - @ViewChild('AlertModalCsvError') alertCsvError; - - public routerHelper:RouterHelper = new RouterHelper(); - public errorCodes:ErrorCodes = new ErrorCodes(); - - //private projectsNum: number = 0; - //private fundersSet: Set; - //private emptyFundersSet: boolean = true; - - // Request results for content providers only the one time (first time tab is clicked) - private reloadDataproviders: boolean = true; - - // Helper variables to specify funder in downloadPublicationsFile function - private funder: string; - private funderId: string; - private funderCountPublications: number; - sub: any; - infoSub: any; - piwiksub: any; - downloadFileSub: any; - downloadFilePiwikSub: any; - countProjectsSub: any; - countPublSub: any; - downloadProjectPublSub: any; - - //private ngUnsubscribe: Subject = new Subject(); - - constructor (private element: ElementRef, - private _organizationService: OrganizationService, - private _piwikService:PiwikService, - private route: ActivatedRoute, - private _searchDataprovidersService: SearchDataprovidersService, - private _reportsService: ReportsService, - private _searchPublicationsService: SearchPublicationsService, - private _searchProjectsService: SearchProjectsService, private _meta: Meta, - private _router: Router) { - - this.fetchPublications = new FetchPublications(this._searchPublicationsService); - this.fetchProjects = new FetchProjects(this._searchProjectsService); - this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService); - this.updateUrl(OpenaireProperties.getBaseLink()+this._router.url); - } - - ngOnInit() { - console.info('organization init'); - this.sub = this.route.queryParams.subscribe(params => { - this.organizationInfo=null; - this.updateTitle("Organization"); - this.updateDescription("Organization, country, projects, search, repositories, open access"); - this.projectsClicked = false; - - this.organizationId = params['organizationId']; - console.info("Id is :"+this.organizationId); - - if(this.organizationId){ - this.getOrganizationInfo(); - }else{ - this.showLoading = false; - this.warningMessage="No valid organization id"; - } - - if (typeof document !== 'undefined') { - this.element.nativeElement.scrollIntoView(); - } - - this.csvParamsTail = '" and relorganizationid exact "'+this.organizationId+'" ))'; - - }); - - this.downloadURLAPI = OpenaireProperties.getCsvAPIURL(); - this.csvProjectParamsHead = 'format=csv&type=projects&page=0&query=( (oaftype exact project)and (funder exact "'; - //this.csvPublicationParamsHead = 'format=csv-special&type=publications&page=0&query=((((oaftype exact result) and (resulttypeid exact publication)) and (funderid exact '; - } - - - ngOnDestroy() { - this.sub.unsubscribe(); - if(this.piwiksub){ - this.piwiksub.unsubscribe(); - } - if(this.infoSub) { - this.infoSub.unsubscribe(); - } - if(this.downloadFileSub) { - this.downloadFileSub.unsubscribe(); - } - if(this.downloadFilePiwikSub) { - this.downloadFilePiwikSub.unsubscribe(); - } - if(this.countProjectsSub) { - this.countProjectsSub.unsubscribe(); - } - if(this.countPublSub) { - this.countPublSub.unsubscribe(); - } - if(this.downloadProjectPublSub) { - this.downloadProjectPublSub.unsubscribe(); - } - - /* - this.ngUnsubscribe.next(); - this.ngUnsubscribe.complete(); - */ - } - - private getOrganizationInfo () { - - this.warningMessage = ''; - this.errorMessage="" - this.showLoading = true; - - this.infoSub = this._organizationService.getOrganizationInfo(this.organizationId).subscribe( - data => { - if(data == null) { - this.showLoading = false; - this.errorMessage = 'No organization found'; - } else { - this.organizationInfo = data; - this.updateTitle(this.organizationInfo.title.name); - this.updateDescription("Organization, country, projects, search, repositories, open access"+this.organizationInfo.title.name); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView(this.organizationInfo.title.name).subscribe(); - } - var refineFields:string [] = ["funder"]; - - this.searchPublications(); - - this.fetchProjects.getResultsForOrganizations(this.organizationId, "", 1, 0,refineFields); - - this.fetchDataproviders.getNumForEntity("organization", this.organizationId); - - this.showLoading = false; - - /*let projectsNum = 0; - - if(this.organizationInfo.projects != undefined) { - this.fundersSet = new Set(); - this.organizationInfo.projects.forEach(function (value, key, map) { - projectsNum += value.length; - this.fundersSet.add(key); - }.bind(this)); - } - - this.projectsNum = projectsNum;*/ - } - }, - err => { - console.log(err) - - this.errorMessage = 'No organization found'; - this.showLoading = false; - } - ); - } -/* - private getMetrics() { - console.info("getOrganizationMetrics: component"); - this._organizationService.getMetrics(this.organizationId).subscribe( - data => { - this.metrics = data; - }, - err => { - console.log(err); - } - ); - } -*/ -/* - private handleClick(funder: string) { - if(this.emptyFundersSet) { - this.fundersSet.clear(); - this.emptyFundersSet = false; - } - - if(this.fundersSet.has(funder)) { - this.fundersSet.delete(funder); - - if(this.fundersSet.size == 0) { - this.organizationInfo.projects.forEach(function (value, key, map) { - this.fundersSet.add(key); - }.bind(this)); - this.emptyFundersSet = true; - } - console.info(funder+" funder deleted"); - } else { - this.fundersSet.add(funder); - console.info(funder+" funder added"); - } - } -*/ - //private getProjectsData(key: string): any { - //return this.projectsData; - //} - - private searchPublications() { - this.fetchPublications.getResultsForEntity("organization", this.organizationId, 1, 10); - this.linkToSearchPublications = OpenaireProperties.getLinkToAdvancedSearchPublications();// + "?project=" + this.projectId+"&pr=and"; - if(this.fetchPublications.searchUtils.totalResults > 0) { - //this.activeTab = "Publications"; - } else { - //this.projectsClicked = true; - } - } - - private searchDataproviders() { - this.fetchDataproviders.getResultsForEntity("organization", this.organizationId, 1, 10); - this.linkToSearchDataproviders = OpenaireProperties.getLinkToAdvancedSearchDataProviders(); - - if(this.fetchDataproviders.searchUtils.totalResults > 0) { - this.reloadDataproviders = false; - //this.activeTab = "Content Providers"; - } else { - - } - } - - public searchDataprovidersInit() { - if(this.reloadDataproviders && this.fetchDataproviders.searchUtils.totalResults > 0) { - this.searchDataproviders(); - } - } - - public downloadFile(url:string){ - console.log("Downloading file: "+ url); - - this.openLoading(); - this.setMessageLoading("Downloading CSV file"); - - this.downloadFileSub = this._reportsService.downloadCSVFile(url).subscribe( - data => { - this.closeLoading(); - window.open(window.URL.createObjectURL(data)); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.downloadFilePiwikSub = this._piwikService.trackDownload(url).subscribe(); - } - }, - err => { - console.log("Error downloading the file."); - this.closeLoading(); - this.confirmOpenCsvError(); - }, - () => console.log('Completed file download.')); - } - - private downloadPublicationsFile(funder: string, funderId:string, count:number){ - console.log("Downloading publications file"); - - this.openLoading(); - this.setMessageLoading("Downloading CSV file"); - - let response: string[] = []; - let totalResponse: string = ""; - let projects = []; - let counter: number = count; - let title: boolean = false; - - this.countProjectsSub = this._searchProjectsService.getProjectsForOrganizations(this.organizationId,' and (funder exact "'+ funderId + '" ) ',1,count,[]).subscribe( - data => - { - projects = data[1]; - for(let index=0; index < projects.length; index++) { - this.countPublSub = this._searchPublicationsService.numOfEntityPublications(projects[index].id, "project").subscribe( - data => - { - // let index: number = this.organizationInfo.projects.get(funder).indexOf(project); - - let url: string; - if(index == 0 || !title) { - url = this.downloadURLAPI+"projects/"+projects[index].id+"/publications?format=csv-special&size="+data; - } else { - url = this.downloadURLAPI+"projects/"+projects[index].id+"/publications?format=csv-special-notitle&size="+data; - } - - if(data == 0) { // if no publications for this project - counter--; - response[index] = ""; - if(counter == 0) { - for(let i=0; i - { - counter--; - response[index] = data; - - if(counter == 0) { - for(let i=0; i { - console.log("Error downloading the file."); - this.closeLoading(); - this.confirmOpenCsvError(); - }, - () => console.log('Completed file download.') - ); - } - }, - err => console.log("Error getting number of publications for project.")); - }//); - - }, - err => { - console.log("Error getting projects project."); - this.closeLoading(); - this.confirmOpenCsvError(); - } - ); - - // let counter: number = this.organizationInfo.projects.get(funder).length; - // - // for(let project of this.organizationInfo.projects.get(funder)) { - // this._searchPublicationsService.numOfEntityPublications(project.id, "projects/").subscribe( - // data => - // { - // let index: number = this.organizationInfo.projects.get(funder).indexOf(project); - // - // let url: string; - // if(index == 0) { - // url = this.downloadURLAPI+"projects/"+project.id+"/publications?format=csv-special&size="+data; - // } else { - // url = this.downloadURLAPI+"projects/"+project.id+"/publications?format=csv-special-notitle&size="+data; - // } - // - // this._reportsService.getCSVResponse(url).subscribe( - // data => - // { - // counter--; - // - // response[index] = data; - // - // if(counter == 0) { - // for(let i=0; i console.log("Error downloading the file."), - // () => console.log('Completed file download.')); - // }, - // error => console.log("Error getting number of publications for project.")); - // }//); - } - - private updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - private updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - private updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } - - private openLoading(){ - if(this.loading){ - this.loading.open(); - } - } - private closeLoading(){ - if(this.loading){ - this.loading.close(); - } - } - private setMessageLoading(message: string){ - if(this.loading){ - this.loading.message = message; - } - } - - public confirmOpenApplyAll(funder: string, funderId:string, funderCountPublications:number){ - this.alertApplyAll.cancelButton = true; - this.alertApplyAll.okButton = true; - this.alertApplyAll.alertTitle = "CSV FILE"; - this.alertApplyAll.message = "Do you wish to download a CSV file? Note that this process may take a while."; - this.alertApplyAll.okButtonText = "Yes"; - this.alertApplyAll.cancelButtonText = "No"; - this.alertApplyAll.open(); - - this.funder = funder; - this.funderId = funderId; - this.funderCountPublications = funderCountPublications; - } - public confirmCloseApplyAll(data){ - this.downloadPublicationsFile(this.funder, this.funderId, this.funderCountPublications); - } - - public confirmOpenCsvError(){ - this.alertCsvError.cancelButton = false; - this.alertCsvError.okButton = true; - this.alertCsvError.alertTitle = "ERROR DOWNLOADING CSV FILE"; - this.alertCsvError.message = "There was an error in csv downloading. Please try again later."; - this.alertCsvError.okButtonText = "OK"; - this.alertCsvError.open(); - } - - encodeURI(input: string): string { - return StringUtils.URIEncode(input); - } -} diff --git a/portal-2/src/app/landingPages/organization/organization.module.ts b/portal-2/src/app/landingPages/organization/organization.module.ts deleted file mode 100644 index 3e8e6f1d..00000000 --- a/portal-2/src/app/landingPages/organization/organization.module.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import {LoadingModalModule} from '../../utils/modal/loadingModal.module'; -import {AlertModalModule} from '../../utils/modal/alertModal.module'; -import {ErrorMessagesModule} from '../../utils/errorMessages.module'; - -import { OrganizationServiceModule} from '../../services/organizationService.module'; -// import { ProjectsServiceModule} from '../../services/projectsService.module'; -import { OrganizationComponent } from './organization.component'; -import { OrganizationRoutingModule } from './organization-routing.module'; - -import { LandingModule } from '../landing-utils/landing.module'; -import {TabResultModule } from '../../searchPages/searchUtils/tabResult.module'; -import {DataProvidersServiceModule} from '../../services/dataProvidersService.module'; -import {ReportsServiceModule} from '../../services/reportsService.module'; -import {PublicationsServiceModule} from '../../services/publicationsService.module'; -import {ProjectsServiceModule} from '../../services/projectsService.module'; - -import { SearchingProjectsTabModule} from '../landing-utils/searchingProjectsInTab.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, RouterModule, - LoadingModalModule, AlertModalModule, ErrorMessagesModule, - LandingModule, - OrganizationRoutingModule, - TabResultModule, - DataProvidersServiceModule, - ReportsServiceModule, - OrganizationServiceModule, - SearchingProjectsTabModule, - OrganizationServiceModule, - PublicationsServiceModule, - ProjectsServiceModule - - ], - declarations: [ - OrganizationComponent, - ], - providers:[ - FreeGuard, IsRouteEnabled - ], - exports: [ - OrganizationComponent - ] -}) -export class OrganizationModule { } diff --git a/portal-2/src/app/landingPages/project/project-routing.module.ts b/portal-2/src/app/landingPages/project/project-routing.module.ts deleted file mode 100644 index 4fa87efe..00000000 --- a/portal-2/src/app/landingPages/project/project-routing.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { ProjectComponent } from './project.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: ProjectComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - },canDeactivate: [PreviousRouteRecorder] } - ]) - ] -}) -export class ProjectRoutingModule { } diff --git a/portal-2/src/app/landingPages/project/project.component.html b/portal-2/src/app/landingPages/project/project.component.html deleted file mode 100644 index f35de248..00000000 --- a/portal-2/src/app/landingPages/project/project.component.html +++ /dev/null @@ -1,382 +0,0 @@ -
-
-
- -
- - - - -
-
- -

- - {{projectName}} - {{projectName}} - ({{projectInfo.contractNum}}) -

-
{{projectInfo.title}} ({{projectInfo.contractNum}})
- - Project - {{projectInfo.funder}} - Open Access mandate - Special Clause 39 - - -
- -
- - -
-
- - - - - - - - -
- - - - - -
- - - - -
- -
-

Research Results

- -

Access Mode of Research Results

- -

By Datasource of Research Results

- -
-
-
-
- - - - - - - - - -
- -
-
- -
-
- Share - Bookmark -
-
-
- Application Box -
- - -
- - -
-
- - -
-
-
-
diff --git a/portal-2/src/app/landingPages/project/project.component.ts b/portal-2/src/app/landingPages/project/project.component.ts deleted file mode 100644 index 39597b62..00000000 --- a/portal-2/src/app/landingPages/project/project.component.ts +++ /dev/null @@ -1,360 +0,0 @@ -import {Component, ViewChild, ElementRef} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {ActivatedRoute, Params, Router} from '@angular/router'; -import {ProjectService} from './project.service'; -import {ProjectInfo} from '../../utils/entities/projectInfo'; -import {RouterHelper} from '../../utils/routerHelper.class'; - -import { FetchPublications } from '../../utils/fetchEntitiesClasses/fetchPublications.class'; -import { SearchPublicationsService } from '../../services/searchPublications.service'; -import { FetchDatasets } from '../../utils/fetchEntitiesClasses/fetchDatasets.class'; -import { SearchDatasetsService } from '../../services/searchDatasets.service'; -import { FetchSoftware } from '../../utils/fetchEntitiesClasses/fetchSoftware.class'; -import { SearchSoftwareService } from '../../services/searchSoftware.service'; - -import {ModalLoading} from '../../utils/modal/loading.component'; - -import {ReportsService} from '../../services/reports.service'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import { Meta} from '../../../angular2-meta'; - -import {PiwikService} from '../../utils/piwik/piwik.service'; - -@Component({ - selector: 'project', - templateUrl: 'project.component.html', - }) -export class ProjectComponent{ - public projectInfo: ProjectInfo; - public projectId : string ; - public projectName: string; - - // Metrics tab variables - public metricsClicked: boolean; - public viewsFrameUrl: string; - public downloadsFrameUrl: string; - private totalViews: number; - private totalDownloads: number; - private pageViews: number; - - // Statistics tab variables - public statsClicked: boolean; - public chartScientificResultsUrl: string; - public chartAccessModeUrl: string; - public chartDatasourcesUrl: string; - - // HTML variables in APP BOX - public publications_dynamic: string; - public datasets_dynamic: string; - - public project ; - - // CSV variables - public downloadURLAPI: string; - public csvParams: string; - public csvParamsDatasets: string; - - // Message variables - public warningMessage = ""; - public errorMessage = ""; - public showLoading: boolean = true; - - // Active tab variable for responsiveness - public activeTab: string = "Publications"; - - // Request results for research data and software only the one time (first time tab is clicked) - private reloadDatasets: boolean = true; - private reloadSoftware: boolean = true; - - // Variables for publications, research data, software tabs - public fetchPublications : FetchPublications; - public linkToSearchPublications = ""; - public fetchDatasets : FetchDatasets; - public linkToSearchDatasets = ""; - public fetchSoftware: FetchSoftware; - public linkToSearchSoftware = ""; - - public routerHelper:RouterHelper = new RouterHelper(); - public errorCodes:ErrorCodes = new ErrorCodes(); - - @ViewChild (ModalLoading) loading : ModalLoading ; - // Alert box when something is wrong with CSV requests - @ViewChild('AlertModalCsvError') alertCsvError; - - sub: any; piwiksub: any; infoSub: any; downloadFilePiwikSub: any; - - constructor ( private element: ElementRef, - private _projectService: ProjectService, - private _piwikService:PiwikService, - private route: ActivatedRoute, - private _searchPublicationsService: SearchPublicationsService, - private _searchDatasetsService: SearchDatasetsService, - private _searchSoftwareService: SearchSoftwareService, - private _reportsService: ReportsService, private _meta: Meta, - private _router: Router) { - this.updateUrl(OpenaireProperties.getBaseLink()+this._router.url); - } - - ngOnInit() { - this.sub = this.route.queryParams.subscribe(params => { - this.metricsClicked = false; - this.statsClicked = false; - this.fetchPublications = new FetchPublications( this._searchPublicationsService); - this.fetchDatasets = new FetchDatasets(this._searchDatasetsService); - this.fetchSoftware = new FetchSoftware(this._searchSoftwareService); - - this.updateTitle("Project"); - this.updateDescription("project, funding, open access, publications, research data, software"); - - this.projectId = params['projectId']; - if(this.projectId){ - this.publications_dynamic = - ""; - - this.datasets_dynamic = - ""; - - this.getProjectInfo(this.projectId); - this.searchPublications(); - this.fetchDatasets.getNumForEntity("project", this.projectId); - this.fetchSoftware.getNumForEntity("project", this.projectId); - }else{ - this.showLoading = false; - this.warningMessage="No valid project id"; - } - - this.downloadURLAPI = OpenaireProperties.getCsvAPIURL(); - - this.createClipboard(); - this.csvParams = "format=csv-special&page=0&type=publications&query=(((oaftype exact result) and (resulttypeid exact publication)) and (relprojectid exact "+this.projectId+"))&size="; - this.csvParamsDatasets = "format=csv-special&page=0&type=datasets&query=(((oaftype exact result) and (resulttypeid exact dataset)) and (relprojectid exact "+this.projectId+"))&size="; - - if (typeof document !== 'undefined') { - this.element.nativeElement.scrollIntoView(); - } - }); -} - - - ngOnDestroy() { - this.sub.unsubscribe(); - if(this.piwiksub){ - this.piwiksub.unsubscribe(); - } - if(this.infoSub) { - this.infoSub.unsubscribe(); - } - if(this.downloadFilePiwikSub) { - this.downloadFilePiwikSub.unsubscribe(); - } - } - - private createClipboard() { - if(typeof window !== 'undefined') { - - let publ_clipboard, datasets_clipboard; - let Clipboard; - Clipboard = require('clipboard'); - publ_clipboard = new Clipboard('.publ_clipboard_btn'); - datasets_clipboard = new Clipboard('.datasets_clipboard_btn'); - } - } - - private searchPublications() { - this.fetchPublications.getResultsForEntity("project", this.projectId, 1, 10); - this.linkToSearchPublications = OpenaireProperties.getLinkToAdvancedSearchPublications();// + "?project=" + this.projectId+"&pr=and"; - if(this.fetchPublications.searchUtils.totalResults > 0) { - //this.activeTab = "Publications"; - } else { - //this.searchDatasetsInit(); - } - } - - private searchDatasets() { - this.fetchDatasets.getResultsForEntity("project", this.projectId, 1, 10); - this.linkToSearchDatasets = OpenaireProperties.getLinkToAdvancedSearchDatasets();// + "?project=" + this.projectId+"&pr=and"; - - this.reloadDatasets = false; - //this.activeTab = "Research Data"; - } - - private searchSoftware() { - this.fetchSoftware.getResultsForEntity("project", this.projectId, 1, 10); - this.linkToSearchSoftware = OpenaireProperties.getLinkToAdvancedSearchSoftware(); - this.reloadSoftware = false; - } - - public searchDatasetsInit() { - console.info("searchDatasetsInit"); - if(this.reloadDatasets && this.fetchDatasets.searchUtils.totalResults > 0) { - this.searchDatasets(); - } else if(this.fetchDatasets.searchUtils.totalResults == 0) { - //this.statsClicked=true; - //this.activeTab = "Statistics"; - } - } - - public searchSoftwareInit() { - console.info("searchSoftwareInit"); - if(this.reloadSoftware && this.fetchSoftware.searchUtils.totalResults > 0) { - this.searchSoftware(); - } - } - - private getProjectInfo (id:string) { - this.warningMessage = ''; - this.errorMessage="" - this.showLoading = true; - - this.infoSub = this._projectService.getProjectInfo(id).subscribe( - data => { - this.projectInfo = data; - - this.projectName = this.projectInfo.acronym; - if(this.projectName == undefined || this.projectName == '') { - this.projectName = this.projectInfo.title; - } - this.updateTitle(this.projectName); - this.updateDescription("project, funding, open access, publications, research data, "+this.projectName+ ","+this.projectInfo.funder); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView(this.projectName).subscribe(); - } - - this.project= { funderId: "", funderName: this.projectInfo.funder, projectId: this.projectId, projectName: this.projectInfo.title, projectAcronym: this.projectInfo.acronym, startDate: this.projectInfo.startDate, endDate: this.projectInfo.endDate }; - - this.viewsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"projRepoViews","projTitle":"'+this.projectId+'","table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"","yaxisheaders":["Monthly views"],"generalxaxis":"","theme":0,"in":[]}]&info_types=["column"]&stacking=&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(124, 181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false'; - - this.downloadsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"projRepoDownloads","projTitle":"'+this.projectId+'","table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":"","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"","yaxisheaders":["Monthly downloads"],"generalxaxis":"","theme":0,"in":[]}]&info_types=["column"]&stacking=&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(124, 181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false'; - - //stats tab charts - this.chartScientificResultsUrl='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"projScient","projTitle":"'+this.projectId+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "spline", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Research Results"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [" "], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - this.chartAccessModeUrl='https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"projOA","projTitle":"'+this.projectId+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "pie", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Research Results"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [" "], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - this.chartDatasourcesUrl= 'https://beta.openaire.eu/stats/chart.php?com=query&persistent=false&data={"query":"projPubsRepos","projTitle":"'+this.projectId+'", "table": "result", "fields": [{"fld": "number", "agg": "count", "type": "bar", "yaxis":1, "c":false}], "xaxis":{"name": "result_classifications-type", "agg": "avg"}, "group": "", "color": "", "type": "chart", "size":30, "sort": "xaxis", "xStyle":{"r": "-", "s": "-", "l": "-", "ft": "-", "wt": "-"}, "yaxisheaders": [""], "fieldsheaders": ["Research Results"], "in": [], "filters": [{"name": "result_datasources-datasource-name", "values": [" "], "to": "-1"}], "having": [], "incfilters": [], "inchaving": [], "title": "", "subtitle": "", "xaxistitle": ""}&w=600&h=250'; - - this.showLoading = false; - }, - err => { - console.log(err); - this.errorMessage = 'No project found'; - this.showLoading = false; - } - ); - } - - public downloadfile(url:string){ - this.openLoading(); - this.setMessageLoading("Downloading CSV file"); - - this._reportsService.downloadCSVFile(url).subscribe( - data => { - this.closeLoading(); - window.open(window.URL.createObjectURL(data)); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.downloadFilePiwikSub = this._piwikService.trackDownload(url).subscribe(); - } - }, - error => { - console.log("Error downloading the file."); - this.closeLoading(); - this.confirmOpenCsvError(); - }, - () => console.log('Completed file download.') - ); - } - -/* - showHTML(){ - let info:string = "

Publications of Project "; - - if(this.projectInfo.title != undefined && this.projectInfo.title != "") { - info += this.projectInfo.title; - } - if((this.projectInfo.title != undefined && this.projectInfo.title != "") && - ((this.projectInfo.acronym != undefined && this.projectInfo.acronym != "") || - (this.projectInfo.callIdentifier != undefined && this.projectInfo.callIdentifier != ""))) { - info += "("; - } - if(this.projectInfo.acronym != undefined && this.projectInfo.acronym != "") { - info += this.projectInfo.acronym + " - "; - } - if(this.projectInfo.callIdentifier != undefined && this.projectInfo.callIdentifier != "") { - info += this.projectInfo.callIdentifier; - } - if((this.projectInfo.title != undefined && this.projectInfo.title != "") && - ((this.projectInfo.acronym != undefined && this.projectInfo.acronym != "") || - (this.projectInfo.callIdentifier != undefined && this.projectInfo.callIdentifier != ""))) { - info += ")"; - } - info +="

"; - info += "

"+this.fetchPublications.searchUtils.totalResults+" publications

"; - - let htmlParams = 'resources?format=html&page=0&size='+this.fetchPublications.searchUtils.totalResults+'&type=publications&query=(((oaftype exact result) and (resulttypeid exact publication)) and (relprojectid exact "'+this.projectId+'"))'; - this._reportsService.downloadHTMLFile(this.downloadURLAPI+htmlParams, info) - .subscribe(data => this.funct(data), - error => console.log("Error downloading the file."), - () => console.log('Completed file download.')); - } - - funct(data) { - var win = window.open(window.URL.createObjectURL(data)); - } -*/ - public metricsResults($event) { - this.totalViews = $event.totalViews; - this.totalDownloads = $event.totalDownloads; - this.pageViews = $event.pageViews; - } - - private updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - private updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - private updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } - - private openLoading(){ - if(this.loading){ - this.loading.open(); - } - } - private closeLoading(){ - if(this.loading){ - this.loading.close(); - } - } - private setMessageLoading(message: string){ - if(this.loading){ - this.loading.message = message; - } - } - - public confirmOpenCsvError(){ - this.alertCsvError.cancelButton = false; - this.alertCsvError.okButton = true; - this.alertCsvError.alertTitle = "ERROR DOWNLOADING CSV FILE"; - this.alertCsvError.message = "There was an error in csv downloading. Please try again later."; - this.alertCsvError.okButtonText = "OK"; - this.alertCsvError.open(); - } -} diff --git a/portal-2/src/app/landingPages/project/project.module.ts b/portal-2/src/app/landingPages/project/project.module.ts deleted file mode 100644 index e77d471e..00000000 --- a/portal-2/src/app/landingPages/project/project.module.ts +++ /dev/null @@ -1,45 +0,0 @@ -//import {MaterialModule} from '@angular/material'; -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import { ProjectServiceModule} from './projectService.module'; -// import {HtmlProgressReportService} from './htmlProgressReport.service'; -import{LoadingModalModule} from '../../utils/modal/loadingModal.module'; -import {AlertModalModule} from '../../utils/modal/alertModal.module'; -import {ErrorMessagesModule} from '../../utils/errorMessages.module'; - -import { ProjectComponent } from './project.component'; -import { ProjectRoutingModule } from './project-routing.module'; -import {IFrameModule} from '../../utils/iframe.module'; -import {MetricsModule} from '../landing-utils/metrics.module'; -import {ReportsServiceModule} from '../../services/reportsService.module'; -import {PublicationsServiceModule} from '../../services/publicationsService.module'; -import {DatasetsServiceModule} from '../../services/datasetsService.module'; -import {SoftwareServiceModule} from '../../services/softwareService.module'; -import {TabResultModule } from '../../searchPages/searchUtils/tabResult.module'; -import { LandingModule } from '../landing-utils/landing.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, RouterModule, LandingModule, - ProjectRoutingModule, LoadingModalModule, AlertModalModule, ErrorMessagesModule, - TabResultModule, IFrameModule, MetricsModule, ReportsServiceModule, - PublicationsServiceModule, DatasetsServiceModule, SoftwareServiceModule, ProjectServiceModule - ], - declarations: [ - ProjectComponent - ], - providers:[ - // ProjectService, - // HtmlProgressReportService - FreeGuard, IsRouteEnabled - ], - exports: [ - ProjectComponent - ] -}) -export class ProjectModule { } diff --git a/portal-2/src/app/landingPages/project/project.service.ts b/portal-2/src/app/landingPages/project/project.service.ts deleted file mode 100644 index 9474039b..00000000 --- a/portal-2/src/app/landingPages/project/project.service.ts +++ /dev/null @@ -1,228 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {ProjectInfo} from '../../utils/entities/projectInfo'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../../shared/cache.service'; -import { ParsingFunctions } from '../landing-utils/parsingFunctions.class'; - -@Injectable() -export class ProjectService { - - constructor(private http: Http, public _cache: CacheService) { - this.parsingFunctions = new ParsingFunctions(); - } - - public parsingFunctions: ParsingFunctions; - projectInfo: ProjectInfo; - - getProjectInfo (id: string):any { - console.info("getProjectInfo in service"); - - let url = OpenaireProperties. getSearchAPIURLLast() + 'projects/'+id+"?format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)) - .map(res => this.parseProjectInfo(res)); - } - return this.http.get(url) - .map(res => res.json()) - .map(res => res['result']['metadata']['oaf:entity']['oaf:project']) - .map(res => [res, - res['fundingtree'], - res['rels']['rel']]) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseProjectInfo(res)); - - } - - /* - get project strtDate and endDate - */ - getProjectDates (id: string):any { - - let url = OpenaireProperties. getSearchAPIURLLast()+'projects/'+id+"?format=json"; - let key = url+'_projectDates'; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)) - .map(res => [res, - res['fundingtree'], - res['rels']['rel']]) - .map(res => this.parseProjectDates(id,res)) - } - return this.http.get(url) - .map(res => res.json()) - .map(res => res['result']['metadata']['oaf:entity']['oaf:project']) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res, - res['fundingtree'], - res['rels']['rel']]) - .map(res => this.parseProjectDates(id,res)) - - } - - getHTMLInfo(id: string): any { - let url = OpenaireProperties. getSearchAPIURLLast() + 'projects/'+id+"?format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)) - .map(res => this.parseHTMLInfo(res)); - } - return this.http.get(url) - .map(res => res.json()) - .map(res => res['result']['metadata']['oaf:entity']['oaf:project']) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseHTMLInfo(res)); - } - - private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } - - parseHTMLInfo (data: any):any { - let htmlInfo: {"title": string, "acronym": string, "callIdentifier": string}; - - if(data != null) { - htmlInfo = {"title": data.title, "acronym": data.acronym, "callIdentifier": data.callidentifier}; - } - return htmlInfo; - } - - parseProjectInfo (data: any):any { - this.projectInfo = new ProjectInfo(); - - if(data[0] != null) { - this.projectInfo.acronym = data[0].acronym; - if(Array.isArray(data[0]['title'])) { - this.projectInfo.title = data[0].title[0]; - } else { - this.projectInfo.title = data[0].title; - } - this.projectInfo.callIdentifier = data[0].callidentifier; - this.projectInfo.contractNum = data[0].code; - this.projectInfo.startDate = data[0].startdate; - this.projectInfo.endDate = data[0].enddate; - this.projectInfo.openAccessMandate = data[0].oamandatepublications; - this.projectInfo.specialClause39 = data[0].ecsc39; - } - if(data[1] != null) { - /* - if(data[1]['funder'] != null) { - this.projectInfo.funder = data[1]['funder'].shortname; - } - - let funding; - this.projectInfo.funding = ""; - - if(data[1]['funding_level_2'] != null) { - funding = data[1]['funding_level_2'].id; - } else if(data[1]['funding_level_1'] != null) { - funding = data[1]['funding_level_1'].id; - } else if(data[1]['funding_level_0'] != null) { - funding = data[1]['funding_level_0'].id; - } - - if(funding != undefined) { - funding = funding.split("::"); - for(let i=1; i(); - - let acronym: string = ""; - let name: string = ""; - let id: string = ""; - - if(!Array.isArray(data[2])) { - if(data[2].hasOwnProperty("legalshortname")) { - acronym = data[2].legalshortname; - } - if(data[2].hasOwnProperty("legalname")) { - name = data[2].legalname; - } - if(!acronym && !name){ - // acronym is displayed with link and name only in tooltip - acronym = "[no title available]"; - } - - if(data[2].hasOwnProperty("to")) { - id = data[2]['to'].content; - } - - this.projectInfo.organizations.push({"acronym": acronym, "name": name, "id": id}); - } else { - for(let i=0; i -
-
- -
- - - - -
-
- - {{publicationInfo.types.join(", ")}} - {{publicationInfo.languages.join(", ")}} - {{publicationInfo.title.accessMode}} - - - - Record in preview - - - - - -
- - ({{publicationInfo.date}}) -
- -
    -
  • Publisher: {{publicationInfo.publisher}}
  • -
  • - Journal: - {{publicationInfo.journal['journal']}} - - ( - - - issn: {{publicationInfo.journal['issn']}} - - - lissn: {{publicationInfo.journal['lissn']}} - - - ) - -
  • - -
  • Embargo end date: {{publicationInfo.embargoEndDate}}
  • -
  • - -
  • -
  • - - -
  • -
- -
- {{publicationInfo.description}} -
- - -
- - -
- - - - - - - - - - - - - - -
-
-
- No references available -
- -
- - -
- {{publicationInfo.references.length}} references, page {{referencesPage}} of {{totalPages(publicationInfo.references.length)}} - -
- -
-

- - {{item['name']}} - -

-

- {{item['name']}} -

-
- - - - - -
-
- -
-
- No related research results available -
-
-
-
{{provenanceaction}}
- - -
-
-
- - -
-
- No similar research results available -
-
- - -
-
- -
-
- No related organizations available -
-
-
- {{publicationInfo.organizations.length}} organizations, page {{organizationsPage}} of {{totalPages(publicationInfo.organizations.length)}} - -
- - - - - - - - - -
- - {{organization['name']}} - ( - {{organization.shortname}} - ) - -

- {{organization['name']}} - ( - {{organization.shortname}} - ) -

-
{{organization.country}}
-
Website url: - {{organization.websiteUrl}} -
-
-
-
{{organization['trust']}}%
- -
-
-

no trust available

-
-
- - -
-
- -
-
- {{bioentitiesNum}} bioentities, page {{bioentitiesPage}} of {{totalPages(bioentitiesNum)}} - -
- - - - - - - - - - - - - -
- - - {{keyIn}} - - - - {{key}} -
-
-
-
- {{publicationInfo.software.length}} software results, page {{softwarePage}} of {{totalPages(publicationInfo.software.length)}} - -
- - - - - - - - -
- - - {{item.name}} - - -
-
-
- - - - - - - - -
- -
-
- -
-
- Share - Bookmark - -
- - - - -
-
-
-
-
-
diff --git a/portal-2/src/app/landingPages/publication/publication.component.ts b/portal-2/src/app/landingPages/publication/publication.component.ts deleted file mode 100644 index 3f3a8d37..00000000 --- a/portal-2/src/app/landingPages/publication/publication.component.ts +++ /dev/null @@ -1,309 +0,0 @@ -import {Component, ViewChild, ElementRef} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {PublicationService} from './publication.service'; -import {PublicationInfo} from '../../utils/entities/publicationInfo'; -import {ActivatedRoute, Router} from '@angular/router'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import {RouterHelper} from '../../utils/routerHelper.class'; -import {PiwikService} from '../../utils/piwik/piwik.service'; - -import { Meta} from '../../../angular2-meta'; - - - -@Component({ - selector: 'publication', - templateUrl: 'publication.component.html', - -}) - -export class PublicationComponent { - public publicationInfo: PublicationInfo; - public articleId: string; - - // APP BOX variables - public showAllCollectedFrom: boolean = false; - public showAllDownloadFrom: boolean = false; - - // Metrics tab variables - public metricsClicked: boolean; - public viewsFrameUrl: string; - public downloadsFrameUrl: string; - public totalViews: number; - public totalDownloads: number; - public pageViews: number; - - // Custom tab paging variables - public referencesPage: number = 1; - public organizationsPage: number = 1; - public softwarePage: number = 1; - public bioentitiesPage: number = 1; - public pageSize: number = 10; - /* - public startt: number = 0; - public stopp: number = 0; - */ - - // Active tab variable for responsiveness - public activeTab: string = "References"; - - // Map counting variables - public bioentitiesNum: number = 0; - public relatedResearchResultsNum: number = 0; - - // Message variables - public warningMessage = ""; - public errorMessage = ""; - public showLoading: boolean = true; - - public routerHelper:RouterHelper = new RouterHelper(); - - private doi: string; - private result; - sub: any; piwiksub: any; infoSub: any; - - constructor ( private element: ElementRef, - private _publicationService: PublicationService, - private _piwikService:PiwikService, - private route: ActivatedRoute, private _meta: Meta, - private _router: Router) { - this.updateUrl(OpenaireProperties.getBaseLink()+this._router.url); - } - - ngOnInit() { - this.sub = this.route.queryParams.subscribe(data => { - this.publicationInfo = null; - this.updateTitle("Publication"); - this.updateDescription("Publication, open access, collected from"); - - this.articleId = data['articleId']; - console.info("Article id is :"+this.articleId); - - this.metricsClicked = false; - - if(this.articleId){ - - this.getPublicationInfo(this.articleId); - // if (typeof document !== 'undefined') { - // switcher(UIkit); - // } - }else{ - this.showLoading = false; - this.warningMessage="No valid publication id"; - } - - this.viewsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"resRepoViews", "resTitle":"'+this.articleId+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":["Monthly views"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false'; - - this.downloadsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"resRepoDownloads", "resTitle":"'+this.articleId+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":["Monthly downloads"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false'; - - if (typeof document !== 'undefined') { - this.element.nativeElement.scrollIntoView(); - } - }); - } - - ngOnDestroy() { - this.sub.unsubscribe(); - if(this.piwiksub){ - this.piwiksub.unsubscribe(); - } - if(this.infoSub) { - this.infoSub.unsubscribe(); - } - } - - private getPublicationInfo(id:string) { - this.warningMessage = ''; - this.errorMessage="" - this.showLoading = true; - - this.infoSub = this._publicationService.getPublicationInfo(this.articleId).subscribe( - data => { - this.publicationInfo = data; - - // this.result = [] - // this.result = {id: id, type :"dataset", source : "openaire", title: this.publicationInfo.title,url: '', result: '', accessRights: this.publicationInfo.bestaccessright, embargoEndDate: ''}; - this.updateTitle(this.publicationInfo.title.name); - this.updateDescription("Dataset, search, repositories, open access,"+this.publicationInfo.title.name); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView(this.publicationInfo.title.name).subscribe(); - } - - let bioentitiesNum = 0; - if(this.publicationInfo.bioentities != undefined) { - this.publicationInfo.bioentities.forEach(function (value, key, map) { - bioentitiesNum += value.size; - }); - } - this.bioentitiesNum = bioentitiesNum; - - let relatedResearchResultsNum = 0; - if(this.publicationInfo.relatedResearchResults != undefined) { - this.publicationInfo.relatedResearchResults.forEach(function (value, key, map) { - relatedResearchResultsNum += value.length; - }); - } - this.relatedResearchResultsNum = relatedResearchResultsNum; - - this.result = {id: this.articleId, type :"publication", source : "openaire", title: this.publicationInfo.title,url: '', result: '', accessRights: this.publicationInfo.title.accessMode, embargoEndDate: ''}; - // this.result.push(result_); - - if(this.publicationInfo.identifiers != undefined && this.publicationInfo.identifiers.has('doi')) { - this.doi = this.publicationInfo.identifiers.get('doi')[0]; - } - - this.showLoading = false; - - if(this.publicationInfo.references) { - this.activeTab = "References"; - } else if(this.publicationInfo.relatedResearchResults) { - this.activeTab = "Related Research Results"; - } else if(this.publicationInfo.similarResearchResults) { - this.activeTab = "Similar Research Results"; - } else if(this.publicationInfo.organizations) { - this.activeTab = "Related Organizations"; - } else if(this.publicationInfo.bioentities) { - this.activeTab = "bioentities"; - } else if(this.publicationInfo.software) { - this.activeTab = "Software"; - } else { - this.activeTab = "Metrics"; - this.metricsClicked = true; - } - console.info("activeTab is "+this.activeTab); - }, - err => { - console.log(err); - console.info("error"); - - this.errorMessage = 'No publication found'; - this.showLoading = false; - } - ); - } - - public metricsResults($event) { - this.totalViews = $event.totalViews; - this.totalDownloads = $event.totalDownloads; - this.pageViews = $event.pageViews; - } - - public buildCurationTooltip() { - let tooltipContent: string = "
"; - - tooltipContent += "

Record in preview

"; - tooltipContent += "

Bibliographic record accepted by the system, but not yet processed by
OpenAIRE tools for information quality improvement and de-duplication

"; - - return tooltipContent+= "
"; - } - - private updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - private updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - - private updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } - - public totalPages(totalResults: number): number { - let totalPages:any = totalResults/this.pageSize; - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, this.pageSize) + 1); - } - return totalPages; - } - - public updateReferencesPage($event) { - this.referencesPage = $event.value; - } - - public updateOrganizationsPage($event) { - this.organizationsPage = $event.value; - } - - public updateSoftwarePage($event) { - this.softwarePage = $event.value; - } - - public updateBioentitiesPage($event) { - this.bioentitiesPage = $event.value; - } - - public keysToArray(bioentities: Map) : string[] { - let keys: string[] = []; - bioentities.forEach(function (value, key, map) { - keys.push(key); - }); - return keys; - } -/* - start(i: number, bioentitiesPage: number) { - let sum = 0; - let index=0; - let retValue = 0; - let valuesToPage = this.pageSize*bioentitiesPage; - let valuesToPreviousPage = valuesToPage - this.pageSize; - - if(bioentitiesPage == 1) { - return 0; - } - - this.publicationInfo.bioentities.forEach(function (value, key, map) { - sum += map.get(key).size; - - if(index == i) { - if(sum <= valuesToPreviousPage) { - retValue = 0; - } else if((sum-map.get(key).size) >= valuesToPage){ - retValue = 0; - } else { - if(map.get(key).size < (sum - valuesToPreviousPage)) { - retValue = 0; - } else { - retValue = map.get(key).size - (sum - valuesToPreviousPage); - } - } - } - index++; - }); - this.startt = retValue; - return retValue; - } - - stop(i: number, bioentitiesPage: number) { - let sum = 0; - let index=0; - let retValue = 0; - let valuesToPage = this.pageSize*bioentitiesPage; - let valuesToPreviousPage = valuesToPage - this.pageSize; - - this.publicationInfo.bioentities.forEach(function (value, key, map) { - sum += map.get(key).size; - if(index == i) { - if(sum <= valuesToPreviousPage) { - retValue = 0; - } else if((sum - map.get(key).size) >= valuesToPage){ - retValue = 0; - } else { - if(sum < valuesToPage) { - retValue = map.get(key).size; - } else { - retValue = map.get(key).size - (sum - valuesToPage); - } - } - } - index++; - }); - this.stopp = retValue; - return retValue; - } -*/ - -} diff --git a/portal-2/src/app/landingPages/publication/publication.module.ts b/portal-2/src/app/landingPages/publication/publication.module.ts deleted file mode 100644 index cfa5337a..00000000 --- a/portal-2/src/app/landingPages/publication/publication.module.ts +++ /dev/null @@ -1,30 +0,0 @@ -//import {MaterialModule} from '@angular/material'; -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { SharedModule } from '../../shared/shared.module'; -import { RouterModule } from '@angular/router'; - -import { PublicationService} from './publication.service'; -import { PublicationComponent } from './publication.component'; -import { PublicationRoutingModule } from './publication-routing.module'; -import {MetricsModule} from '../landing-utils/metrics.module'; -import {IFrameModule} from '../../utils/iframe.module'; -import {AltMetricsModule} from '../../utils/altmetrics.module'; -import {CiteThisModule} from '../landing-utils/citeThis/citeThis.module'; -import {PagingModule} from '../../utils/paging.module'; - -import { ResultLandingModule } from '../landing-utils/resultLanding.module'; -import { LandingModule } from '../landing-utils/landing.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, LandingModule,SharedModule, RouterModule, CiteThisModule, PagingModule, - ResultLandingModule, PublicationRoutingModule, IFrameModule, MetricsModule, AltMetricsModule], - declarations: [PublicationComponent], - providers:[PublicationService, FreeGuard, IsRouteEnabled], - exports: [PublicationComponent] -}) -export class PublicationModule { } diff --git a/portal-2/src/app/landingPages/publication/publication.service.ts b/portal-2/src/app/landingPages/publication/publication.service.ts deleted file mode 100644 index 04e8df69..00000000 --- a/portal-2/src/app/landingPages/publication/publication.service.ts +++ /dev/null @@ -1,362 +0,0 @@ - -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {PublicationInfo} from '../../utils/entities/publicationInfo'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../../shared/cache.service'; - -import { ParsingFunctions } from '../landing-utils/parsingFunctions.class'; - -@Injectable() -export class PublicationService { - - constructor(private http: Http, public _cache: CacheService) { - this.parsingFunctions = new ParsingFunctions(); - } - - public parsingFunctions: ParsingFunctions; - publicationInfo: PublicationInfo; - - getPublicationInfo (id: string):any { - console.info("getPublicationInfo in service"); - let url = OpenaireProperties. getSearchAPIURLLast() + 'publications/' +id+"?format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parsePublicationInfo(res)); - } - return this.http.get(url) - .map(res => res.json()) - .map(res => [res['result']['header']['dri:status'], res['result']['metadata']['oaf:entity']]) - .map(res => [ res[1]['oaf:result'], - res[1]['oaf:result']['title'], - res[1]['oaf:result']['rels']['rel'], - res[1]['oaf:result']['children'], - res[1]['oaf:result']['pid'], - res[1]['oaf:result']['journal'], - res[1]['oaf:result']['language'], - res[1]['oaf:result']['subject'], - res[1]['oaf:result']['bestaccessright'], - res[1]['oaf:result']['collectedfrom'], - (res[1]['extraInfo']!= undefined && res[1]['extraInfo']['citations']!= undefined)? res[1]['extraInfo']['citations']['citation']:null, - res[1]['oaf:result']['context'], - res[0], - res[1]['oaf:result']['creator'] - ]) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parsePublicationInfo(res)); - } - - private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } - - parsePublicationInfo (data: any):any { - this.publicationInfo = new PublicationInfo(); - - if(data[0] != null) { - var date:string = (data[0].dateofacceptance)+""; // transform to string in case it is an integer - this.publicationInfo.date = (date && (date).indexOf('-') !== -1)?date.split('-')[0]:date; - this.publicationInfo.dateofacceptance = data[0].dateofacceptance; - this.publicationInfo.publisher = data[0].publisher; - if(!Array.isArray(data[0].description)) { - this.publicationInfo.description = data[0].description; - } else { - this.publicationInfo.description = data[0].description[0]; - } - this.publicationInfo.embargoEndDate = data[0].embargoenddate; - } - - this.publicationInfo.title = {"name": "", "url": "", "accessMode": ""}; - if(data[0]['bestaccessright'].hasOwnProperty("classid")) { - this.publicationInfo.title.accessMode = data[0]['bestaccessright'].classid; - } - - if(data[1] != null) { - if(Array.isArray(data[1])) { - this.publicationInfo.title['name'] = data[1][0].content; - } else { - this.publicationInfo.title['name'] = data[1].content; - } - } - - if(data[2] != null) { - let relation; - let length = Array.isArray(data[2]) ? data[2].length : 1; - - for(let i=0; i(); - // } - // - // this.publicationInfo.authors[relation.ranking-1] = {"name": "", "id": ""}; - // this.publicationInfo.authors[relation.ranking-1]['name'] = relation.fullname; - /*} else*/ if(relation['to'].class == "isProducedBy") { - this.publicationInfo.fundedByProjects = this.parsingFunctions.parseFundingByProjects(this.publicationInfo.fundedByProjects, relation, this.publicationInfo.projectsProvenanceVocabulary); - } else if(relation['to'].class == "isRelatedTo") { - let provenanceAction: string; - if(relation.provenanceaction in this.publicationInfo.researchResultsProvenanceVocabulary) { - provenanceAction = this.publicationInfo.researchResultsProvenanceVocabulary[relation.provenanceaction]; - } else { - provenanceAction = "Other"; - } - - this.publicationInfo.relatedResearchResults = this.parsingFunctions.parseRelatedResearchResults(this.publicationInfo.relatedResearchResults, relation, provenanceAction); - } else if(relation['to'].class == "hasAmongTopNSimilarDocuments") { - this.publicationInfo.similarResearchResults = this.parsingFunctions.parseSimilarResearchResults(this.publicationInfo.similarResearchResults, relation); - } else if(relation['to'].class == "hasAuthorInstitution") { - this.publicationInfo.organizations = this.parseRelatedOrganizations(this.publicationInfo.organizations, relation); - } - } - } - } - - if(data[3] != null) { - if(data[3].hasOwnProperty("instance")) { - this.publicationInfo.downloadFrom = new Map(); - this.publicationInfo.publishedIn = new Map(); - - this.publicationInfo.types = new Array(); - let types = new Set(); - - let counter = 0; - let instance; - - let length = Array.isArray(data[3]['instance']) ? data[3]['instance'].length : 1; - - for(let i=0; i>, { "name": string, "url": string}[]] = this.parseBioentitiesAndSoftware(data[3]); - this.publicationInfo.bioentities = externalResults[0]; - this.publicationInfo.software = externalResults[1]; - } - } - - if(data[4] != null) { - this.publicationInfo.identifiers = this.parsingFunctions.parseIdentifiers(data[4]); - } - - if(data[5] != null) { - this.publicationInfo.journal = {"journal": "", "issn": "", "lissn": ""} - - this.publicationInfo.journal['journal'] = data[5].content; - this.publicationInfo.journal['issn'] = data[5].issn; - this.publicationInfo.journal['lissn'] = data[5].lissn; - } - - if(data[6] != null) { - this.publicationInfo.languages = new Array(); - - if(!Array.isArray(data[6])) { - if(data[6].classname != "Undetermined" && data[6].classname) { - this.publicationInfo.languages.push(data[6].classname); - } - } else { - for(let i=0; i, Map] = this.parsingFunctions.parseAllSubjects(data[7]); - this.publicationInfo.subjects = subjectResults[0]; - this.publicationInfo.otherSubjects = subjectResults[1]; - this.publicationInfo.classifiedSubjects = subjectResults[2]; - } - - // if(data[8] != null) { - // this.publicationInfo.bestaccessright = data[8].classid; - // } - - // if(data[9] != null) { - // this.publicationInfo.collectedFrom = this.parsingFunctions.parseCollectedFrom(data[9]); - // } - - this.publicationInfo.downloadFrom = this.parsingFunctions.addPublisherToDownloadFrom( - this.publicationInfo.downloadFrom, this.publicationInfo.publisher, - this.publicationInfo.journal, this.publicationInfo.identifiers, - this.publicationInfo.title); - - if(data[10] != null) { - this.publicationInfo.references = this.parseReferences(data[10]); - } - - if(data[11] != null) { - this.publicationInfo.contexts = this.parsingFunctions.parseContexts(data[11]); - } - - if(data[12] != null && data[12] == "under curation") { - this.publicationInfo.underCurationMessage = true; - } else { - this.publicationInfo.underCurationMessage = false; - } - - if(data[13] != null) { - if(this.publicationInfo.authors == undefined) { - this.publicationInfo.authors = new Array(); - } - - let authors = data[13]; - let length = Array.isArray(authors) ? authors.length : 1; - - for(let i=0; i(); - } - - let organization: { "name": string, "shortname": string, - "id": string, "websiteUrl": string, - "country": string, "trust": number - } = { - "name": "", "shortname": "", - "id": "", "websiteUrl": "", - "country": "", "trust": null - }; - - organization.id = relation['to'].content; - organization.name = relation.legalname; - organization.shortname = relation.legalshortname; - organization.websiteUrl = relation.websiteurl; - if(relation.country) { - organization.country = relation.country.classname; - } - if(relation.trust) { - organization.trust = Math.round(relation.trust*100); - } - - organizations.push(organization); - return organizations; - } - - parseBioentitiesAndSoftware(children: any) : [Map>, { "name": string, "url": string}[]] { - let bioentities: Map>; - let software: {"name": string, "url": string}[]; - - let length = Array.isArray(children['externalreference']) ? children['externalreference'].length : 1; - - let externalreference; - for(let i=0; i>(); - } - - if(!bioentities.has(externalreference.sitename)) { - bioentities.set(externalreference.sitename, new Map()); - } - bioentities.get(externalreference.sitename).set(externalreference.refidentifier, externalreference.url); - - } else if(externalreference['qualifier'].classid == "software") { - - if(software == undefined) { - software = new Array<{"name": string, "url": string}>(); - } - - software.push({"name": externalreference.sitename, "url": externalreference.url}); - } - } - } - - return [bioentities, software]; - } - - parseReferences(citations: any): {"name": string, "url": string}[] { - let references = new Array<{"name": string, "url": string}>(); - - let citation; - let length = Array.isArray(citations) ? citations.length : 1; - for(let i=0; i -
-
- -
- - - - - -
-
- - {{softwareInfo.types.join(", ")}} - {{softwareInfo.title.accessMode}} - - - Record in preview - - - - -
- - ({{softwareInfo.date}}) -
- -
    -
  • Publisher: {{softwareInfo.publisher}}
  • - -
  • Embargo end date: {{softwareInfo.embargoEndDate}}
  • -
  • - -
  • -
  • - - -
  • -
- -
- {{softwareInfo.description}} -
- - - - - - - - - - - -
-
-
- No related research results available -
-
-
-
{{provenanceaction}}
- - -
-
-
- -
-
- No similar research results available -
-
- -
-
-
- - - - - - - -
- -
-
- -
-
- Share - Bookmark - -
- - - - - -
-
-
-
-
-
diff --git a/portal-2/src/app/landingPages/software/software.component.ts b/portal-2/src/app/landingPages/software/software.component.ts deleted file mode 100644 index 064a7883..00000000 --- a/portal-2/src/app/landingPages/software/software.component.ts +++ /dev/null @@ -1,169 +0,0 @@ -import {Component, ViewChild, ElementRef} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {SoftwareService} from './software.service'; -import {SoftwareInfo} from '../../utils/entities/softwareInfo'; -import {ActivatedRoute, Router} from '@angular/router'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties' -import {RouterHelper} from '../../utils/routerHelper.class'; -import { Meta} from '../../../angular2-meta'; -import {PiwikService} from '../../utils/piwik/piwik.service'; - -@Component({ - selector: 'software', - templateUrl: 'software.component.html', -}) - -export class SoftwareComponent { - public softwareInfo: SoftwareInfo; - public softwareId : string ; - - // APP BOX variables - public showAllCollectedFrom: boolean = false; - public showAllDownloadFrom: boolean = false; - public showAllPublishedIn: boolean = false; - - // Metrics tab variables - public metricsClicked: boolean; - public viewsFrameUrl: string; - public downloadsFrameUrl: string; - public totalViews: number; - public totalDownloads: number; - public pageViews: number; - - // Active tab variable for responsiveness - public activeTab: string = "Related Research Results"; - - // Map counting variable - public relatedResearchResultsNum: number = 0; - - // Message variables - public warningMessage = ""; - public errorMessage = ""; - public showLoading: boolean = true; - - public routerHelper:RouterHelper = new RouterHelper(); - - private result ; - sub: any; piwiksub: any; infoSub: any; - - constructor (private element: ElementRef, - private _softwareService: SoftwareService, - private _piwikService:PiwikService, - private route: ActivatedRoute, - private _meta: Meta, - private _router: Router) { - this.updateUrl(OpenaireProperties.getBaseLink()+this._router.url); - } - - ngOnInit() { - this.sub = this.route.queryParams.subscribe(params => { - this.softwareInfo = null; - this.updateTitle("Software"); - this.updateDescription("Software, search, open access"); - - this.softwareId = params['softwareId']; - console.info("Id is :"+this.softwareId); - - if(this.softwareId){ - this.getSoftwareInfo(this.softwareId); - }else{ - this.showLoading = false; - this.warningMessage="No valid software id"; - } - - this.metricsClicked = false; - - this.viewsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"resRepoViews", "resTitle":"'+this.softwareId+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":["Monthly views"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false'; - /*this.viewsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"resViewsTimeline", "resTitle":"'+this.softwareId+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":["Monthly views"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(124, 181, 236, 1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false'; - */ - - this.downloadsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"resRepoDownloads", "resTitle":"'+this.softwareId+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":["Monthly downloads"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false'; - /*this.downloadsFrameUrl = OpenaireProperties.getFramesAPIURL()+'merge.php?com=query&data=[{"query":"resRepoDownloadTimeline", "resTitle":"'+this.softwareId+'", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":["Monthly downloads"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true'; - */ - if (typeof document !== 'undefined') { - this.element.nativeElement.scrollIntoView(); - } - }); - - } - - ngOnDestroy() { - this.sub.unsubscribe(); - if(this.piwiksub){ - this.piwiksub.unsubscribe(); - } - if(this.infoSub) { - this.infoSub.unsubscribe(); - } - } - - private getSoftwareInfo(id:string) { - this.warningMessage = ''; - this.errorMessage="" - this.showLoading = true; - - this.infoSub = this._softwareService.getSoftwareInfo(id).subscribe( - data => { - this.softwareInfo = data; - this.updateTitle(this.softwareInfo.title.name); - this.updateDescription("Software, search, repositories, open access,"+this.softwareInfo.title.name); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView(this.softwareInfo.title.name).subscribe(); - } - - this.result = [] - this.result = {id: id, type :"software", source : "openaire", title: this.softwareInfo.title,url: '', result: '', accessRights: this.softwareInfo.title.accessMode, embargoEndDate: ''}; - - let relatedResearchResultsNum = 0; - if(this.softwareInfo.relatedResearchResults != undefined) { - this.softwareInfo.relatedResearchResults.forEach(function (value, key, map) { - relatedResearchResultsNum += value.length; - }); - } - this.relatedResearchResultsNum = relatedResearchResultsNum; - - this.showLoading = false; - }, - err => { - console.log(err) - console.info("error"); - - this.errorMessage = 'No software found'; - this.showLoading = false; - } - ); - } - - // showChange($event) { - // this.showAllReferences=$event.value; - // } - - public metricsResults($event) { - this.totalViews = $event.totalViews; - this.totalDownloads = $event.totalDownloads; - this.pageViews = $event.pageViews; - } - - private updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - private updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - private updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } - - public buildCurationTooltip() { - let tooltipContent: string = "
"; - - tooltipContent += "

Record in preview

"; - tooltipContent += "

Bibliographic record accepted by the system, but not yet processed by
OpenAIRE tools for information quality improvement and de-duplication

"; - - return tooltipContent; - } -} diff --git a/portal-2/src/app/landingPages/software/software.module.ts b/portal-2/src/app/landingPages/software/software.module.ts deleted file mode 100644 index c6bfe7bd..00000000 --- a/portal-2/src/app/landingPages/software/software.module.ts +++ /dev/null @@ -1,36 +0,0 @@ -//import {MaterialModule} from '@angular/material'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { SharedModule } from '../../shared/shared.module'; -import { RouterModule } from '@angular/router'; - -import { SoftwareService } from './software.service'; -import { SoftwareComponent } from './software.component'; -import { SoftwareRoutingModule } from './software-routing.module'; -import { MetricsModule } from '../landing-utils/metrics.module'; -import { IFrameModule } from '../../utils/iframe.module'; -import { AltMetricsModule } from '../../utils/altmetrics.module'; -import { CiteThisModule } from '../landing-utils/citeThis/citeThis.module'; -import { PagingModule } from '../../utils/paging.module'; - -import { ResultLandingModule } from '../landing-utils/resultLanding.module'; -import { LandingModule } from '../landing-utils/landing.module'; -import { FreeGuard } from'../../login/freeGuard.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, LandingModule,SharedModule, RouterModule, CiteThisModule, PagingModule, - ResultLandingModule, SoftwareRoutingModule, IFrameModule, MetricsModule, AltMetricsModule - ], - declarations: [ - SoftwareComponent - ], - providers:[ - SoftwareService, FreeGuard - ], - exports: [ - SoftwareComponent - ] -}) -export class SoftwareModule { } diff --git a/portal-2/src/app/landingPages/software/software.service.ts b/portal-2/src/app/landingPages/software/software.service.ts deleted file mode 100644 index c3e63151..00000000 --- a/portal-2/src/app/landingPages/software/software.service.ts +++ /dev/null @@ -1,225 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {SoftwareInfo} from '../../utils/entities/softwareInfo'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../../shared/cache.service'; -import { ParsingFunctions } from '../landing-utils/parsingFunctions.class'; - -@Injectable() -export class SoftwareService { - - constructor(private http: Http, public _cache: CacheService) { - this.parsingFunctions = new ParsingFunctions(); - } - - public parsingFunctions: ParsingFunctions; - softwareInfo: SoftwareInfo; - - getSoftwareInfo (id: string):any { - console.info("getSoftwareInfo in service"); - - let url = OpenaireProperties. getSearchAPIURLLast()+'software/'+id+"?format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseSoftwareInfo(res)); - } - - return this.http.get(url) - .map(res => res.json()) - .do(res => console.info(res['result']['metadata']['oaf:entity'])) - .map(res => [res['result']['header']['dri:status'], res['result']['metadata']['oaf:entity']['oaf:result']]) - .map(res => [res[1], - res[1]['title'], - res[1]['rels']['rel'], - res[1]['children'], - res[1]['pid'], - res[1]['subject'], - res[1]['bestaccessright'], - res[1]['collectedfrom'], - res[1]['context'], - //res[1]['resulttype'], - res[0], - res[1]['creator'] - ]).do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseSoftwareInfo(res)); - } - - private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } - - parseSoftwareInfo (data: any):any { - this.softwareInfo = new SoftwareInfo(); - - if(data[0] != null) { - var date:string = (data[0].dateofacceptance)+""; // transform to string in case it is an integer - this.softwareInfo.date = (date && (date).indexOf('-') !== -1)?date.split('-')[0]:date; - this.softwareInfo.dateofacceptance = data[0].dateofacceptance; - this.softwareInfo.publisher = data[0].publisher; - if(!Array.isArray(data[0].description)) { - this.softwareInfo.description = data[0].description; - } else { - this.softwareInfo.description = data[0].description[0]; - } - this.softwareInfo.embargoEndDate = data[0].embargoenddate; - } - this.softwareInfo.title = {"name": "", "url": "", "accessMode": ""}; - if(data[0]['bestaccessright'].hasOwnProperty("classid")) { - this.softwareInfo.title.accessMode = data[0]['bestaccessright'].classid; - } - if(data[1] != null) { - if(Array.isArray(data[1])) { - this.softwareInfo.title['name'] = data[1][0].content; - } else { - this.softwareInfo.title['name'] = data[1].content; - } - } - - if(data[2] != null) { - let relation; - let length = data[2].length!=undefined ? data[2].length : 1; - - for(let i=0; i(); - this.softwareInfo.publishedIn = new Map() - - this.softwareInfo.types = new Array(); - let types = new Set(); - - let counter = 0; - let instance; - - let length = data[3]['instance'].length!=undefined ? data[3]['instance'].length : 1; - - for(let i=0; i, Map] = this.parsingFunctions.parseAllSubjects(data[5]); - this.softwareInfo.subjects = subjectResults[0]; - this.softwareInfo.otherSubjects = subjectResults[1]; - this.softwareInfo.classifiedSubjects = subjectResults[2]; - } - - // if(data[6] != null) { - // this.softwareInfo.bestaccessright = data[6].classid; - // } - - // if(data[7] != null) { - // this.softwareInfo.collectedFrom = this.parsingFunctions.parseCollectedFrom(data[7]); - // } - - // null argument is for journal - this.softwareInfo.downloadFrom = this.parsingFunctions.addPublisherToDownloadFrom( - this.softwareInfo.downloadFrom, this.softwareInfo.publisher, - null, this.softwareInfo.identifiers, this.softwareInfo.title); - - if(data[8] != null) { - this.softwareInfo.contexts = this.parsingFunctions.parseContexts(data[8]); - } - - // if(data[9] != null && this.softwareInfo.type == undefined) { - // if(data[9].hasOwnProperty('classname')) { - // this.softwareInfo.type = data[9].classname; - // } - // } - - if(data[9] != null && data[9] == "under curation") { - this.softwareInfo.underCurationMessage = true; - } else { - this.softwareInfo.underCurationMessage = false; - } - - if(data[10] != null) { - if(this.softwareInfo.authors == undefined) { - this.softwareInfo.authors = new Array(); - } - - let authors = data[10]; - let length = Array.isArray(authors) ? authors.length : 1; - - for(let i=0; i | boolean { - var user; - var loggedIn = false; - var isAdmin = false; - var errorCode = ErrorCodes.NOT_LOGGIN; - - if(Session.isLoggedIn()){ - loggedIn = true; - if(!Session.isValidAndRemove()){ - loggedIn = false; - errorCode = ErrorCodes.NOT_VALID; - }else { - isAdmin = Session.isAdminUser(); - if(!isAdmin){ - errorCode = ErrorCodes.NOT_ADMIN; - } - } - }else{ - errorCode =ErrorCodes.NOT_LOGGIN; - } - - if(!loggedIn){ - // this.guardHelper.redirect("/user-info",errorCode,state.url); - this.router.navigate(['/user-info'], { queryParams: { "errorCode": errorCode, "redirectUrl": state.url } }); - - return false; - }else if(!isAdmin){ - // this.guardHelper.redirect("/user-info",errorCode,state.url); - this.router.navigate(['/user-info'], { queryParams: { "errorCode": errorCode, "redirectUrl": state.url } }); - return false; - }else{ - return true; - } - } -} diff --git a/portal-2/src/app/login/freeGuard.guard.ts b/portal-2/src/app/login/freeGuard.guard.ts deleted file mode 100644 index 316ff266..00000000 --- a/portal-2/src/app/login/freeGuard.guard.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Router,CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router'; -import {Observable} from 'rxjs/Observable'; -import {Session} from './utils/helper.class'; -import {ErrorCodes} from './utils/guardHelper.class'; - -@Injectable() -export class FreeGuard implements CanActivate { - - constructor(private router: Router) {} - - canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | boolean { - var user; - var valid = true; - var loggedIn = false; - var errorCode = ErrorCodes.NOT_LOGGIN; - - if(Session.isLoggedIn()){ - loggedIn = true; - if(!Session.isValidAndRemove()){ - loggedIn = false; - valid = false; - errorCode = ErrorCodes.NOT_VALID; - } - } - - if(!valid){ - // this.guardHelper.redirect("/user-info",errorCode,state.url); - - this.router.navigate(['/user-info'], { queryParams: { "errorCode": errorCode, "redirectUrl": state.url } }); - return false; - } - return true; - - } -} diff --git a/portal-2/src/app/login/loginGuard.guard.ts b/portal-2/src/app/login/loginGuard.guard.ts deleted file mode 100644 index 59999519..00000000 --- a/portal-2/src/app/login/loginGuard.guard.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Router,CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router'; -import {Observable} from 'rxjs/Observable'; -import {Session} from './utils/helper.class'; -import {ErrorCodes} from './utils/guardHelper.class'; - -@Injectable() -export class LoginGuard implements CanActivate { - - constructor(private router: Router) {} - - canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | boolean { - var user; - var loggedIn = false; - var errorCode = ErrorCodes.NOT_LOGGIN; - if(Session.isLoggedIn()){ - loggedIn = true; - if(!Session.isValidAndRemove()){ - loggedIn = false; - errorCode = ErrorCodes.NOT_VALID; - } - }else{ - errorCode = ErrorCodes.NOT_LOGGIN; - } - if(!loggedIn){ - // this.guardHelper.redirect("/user-info",errorCode,state.url); - this.router.navigate(['/user-info'], { queryParams: { "errorCode": errorCode, "redirectUrl": state.url } }); - return false; - }else{ - return true; - } - } -} diff --git a/portal-2/src/app/login/user-routing.module.ts b/portal-2/src/app/login/user-routing.module.ts deleted file mode 100644 index 6bbadb82..00000000 --- a/portal-2/src/app/login/user-routing.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { UserComponent } from './user.component'; -import {PreviousRouteRecorder} from '../utils/piwik/previousRouteRecorder.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: UserComponent, canDeactivate: [PreviousRouteRecorder]}, - - ]) - ] -}) -export class UserRoutingModule { } diff --git a/portal-2/src/app/login/user.component.html b/portal-2/src/app/login/user.component.html deleted file mode 100644 index fc699009..00000000 --- a/portal-2/src/app/login/user.component.html +++ /dev/null @@ -1,54 +0,0 @@ - -
-
-
- -
- - - -
- The requested page requires authentication. Please sign in. - - Sign in - -
-
- You are not authorized to use the requested page -
-
- The session has expired. Please sign in again or continue browsing as a guest. - - Sign in - -
-
{{errorMessage}}
- -
-
- Hello {{user.fullname}}! -
- -
-
-
-
-
diff --git a/portal-2/src/app/login/user.component.ts b/portal-2/src/app/login/user.component.ts deleted file mode 100644 index 2babc40e..00000000 --- a/portal-2/src/app/login/user.component.ts +++ /dev/null @@ -1,119 +0,0 @@ -import {Component, ElementRef} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {ActivatedRoute, Router} from '@angular/router'; - -// import {LoginService} from './login.service'; -import {User,Session} from './utils/helper.class'; -import {RouterHelper} from '../utils/routerHelper.class'; -import { Meta} from '../../angular2-meta'; -import {OpenaireProperties} from '../utils/properties/openaireProperties'; - -@Component({ - selector: 'user', - templateUrl: 'user.component.html' - }) - -export class UserComponent { - public user: User; - public loggedIn: boolean = false; - public server: boolean = true; - public errorMessage: string; - public username: string = ""; - public password: string = ""; - private sub:any;private sublogin:any; - public errorCode: string = ""; - public redirectUrl: string = ""; - public routerHelper:RouterHelper = new RouterHelper(); - public loginUrl= OpenaireProperties.getLoginURL(); - - constructor( private router: Router, - private route: ActivatedRoute, private _meta: Meta ) { - this._meta.setTitle("OpenAIRE | Login"); - } - - ngOnInit() { - if( typeof document !== 'undefined') { - this.server = false; - } - this.loggedIn = Session.isLoggedIn(); - this.user = Session.getUser(); - this.errorMessage = ""; - this.sub = this.route.queryParams.subscribe(params => { - this.errorCode = params["errorCode"]; - this.redirectUrl = params["redirectUrl"]; - this.loggedIn = Session.isLoggedIn(); - this.user = Session.getUser(); - this.errorMessage = ""; - if(this.loggedIn){ - this.redirect(); - } - }); - } - ngOnDestroy(){ - this.sub.unsubscribe(); - if(this.sublogin){ - this.sublogin.unsubscribe(); - } - } - logout(){ - if(Session.isLoggedIn()){ - Session.removeUser(); - } - this.loggedIn = false; - this.user = new User(); - this.username = ""; - this.password = ""; - this.redirect(); - - } - redirect(){ - if(this.redirectUrl && this.redirectUrl != null && this.redirectUrl != ""){ - this.redirectUrl = decodeURIComponent(this.redirectUrl); - var baseUrl = this.redirectUrl; - var queryParams = ""; - var paramsArray =[]; - var valuesArray =[]; - if(this.redirectUrl.indexOf('?') != -1){ - baseUrl = this.redirectUrl.split('?')[0]; - queryParams = this.redirectUrl.split('?')[1]; - } - if(queryParams != ""){ - var queryParamsArray = queryParams.split('&'); - for(var i = 0; i < queryParamsArray.length; i++){ - paramsArray.push(queryParamsArray[i].split("=")[0]); - valuesArray.push(queryParamsArray[i].split("=")[1]); - } - this.router.navigate([baseUrl], { queryParams: this.routerHelper.createQueryParams(paramsArray,valuesArray)}); - }else{ - this.router.navigate([baseUrl]); - } - }else{ - this.router.navigate(['/']); - } - } - // login() { - // this.sublogin =this._loginService.authenticate(/*this.user*/this.username, this.password).subscribe( - // data => { - // this.user = data; - // this.loggedIn = true; - // this.username = ""; - // this.password = ""; - // this.errorCode = ""; - // this.redirect(); - // - // }, - // err => { - // console.log(err); - // if(err.status == "404") { - // this.errorMessage = "Wrong username"; - // } else if(err.status == "401") { - // this.errorMessage = "Wrong password"; - // } - // this.username = ""; - // this.password = ""; - // this.errorCode = ""; - // - // } - // ); - // } -} diff --git a/portal-2/src/app/login/user.module.ts b/portal-2/src/app/login/user.module.ts deleted file mode 100644 index f306984c..00000000 --- a/portal-2/src/app/login/user.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {UserComponent } from './user.component'; -import { UserRoutingModule } from './user-routing.module'; -import {PreviousRouteRecorder} from '../utils/piwik/previousRouteRecorder.guard'; - -// import {LoginService} from './login.service'; -@NgModule({ - imports: [ - CommonModule, FormsModule, - UserRoutingModule - - ], - providers:[PreviousRouteRecorder], - declarations: [ -UserComponent - -] -}) -export class UserModule { } diff --git a/portal-2/src/app/login/userMini.component.ts b/portal-2/src/app/login/userMini.component.ts deleted file mode 100644 index 9a122516..00000000 --- a/portal-2/src/app/login/userMini.component.ts +++ /dev/null @@ -1,140 +0,0 @@ -import {Component, ElementRef, Input} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {ActivatedRoute, Router} from '@angular/router'; -import {Location} from '@angular/common'; -// import {LoginService} from './login.service'; -import {User,Session} from './utils/helper.class'; -import {RouterHelper} from '../utils/routerHelper.class'; -import {OpenaireProperties} from '../utils/properties/openaireProperties'; -import {StringUtils} from '../utils/string-utils.class'; - -@Component({ - selector: 'user-mini', - template: ` - - -
  • - - - {{user.fullname+" "}} - - - Sign in | Register - - - - -
  • - - ` -}) - -export class UserMiniComponent { - public user: User; - public loggedIn: boolean = false; - public isAuthorized: boolean = false; - @Input() public mobileView:boolean = false ; - public server: boolean = true; - public routerHelper:RouterHelper = new RouterHelper(); - - public redirectUrl: string = ""; - private baseUrl = "user-info"; - sub:any; - constructor( private router: Router, private route: ActivatedRoute, private location: Location) {} - - ngOnInit() { - if( typeof document !== 'undefined') { - this.server = false; - } - this.initialize(); - this.sub = this.route.queryParams.subscribe(params => { - this.initialize(); - }); - } - ngOnDestroy(){ - this.sub.unsubscribe(); - } - initialize(){ - this.redirectUrl = this.location.path(); - if(Session.isLoggedIn()){ - if(Session.isUserValid()){ - this.loggedIn = Session.isLoggedIn(); - this.user = Session.getUser(); - if(Session.isAdminUser()){ - this.isAuthorized = true; - }else { - this.isAuthorized = false; - } - - }else{ - Session.removeUser(); - this.loggedIn = false; - this.isAuthorized = false; - this.user = null; - } - }else { - this.loggedIn = false; - this.isAuthorized = false; - this.user = null; - } - - } - gotoUserPage(){ - this.redirectUrl = this.location.path(); - if(this.redirectUrl && this.redirectUrl != null && this.redirectUrl != "" && this.redirectUrl !="user-info"){ - this.router.navigate([this.baseUrl], { queryParams: this.routerHelper.createQueryParam("redirectUrl",this.redirectUrl )}); - }else{ - this.router.navigate([this.baseUrl]); - } - } - logOut(){ - if(Session.isLoggedIn()){ - Session.removeUser(); - console.log("Redirect to "+location.href); - window.location.href = OpenaireProperties.getLogoutURL()+ StringUtils.URIEncode(location.href); - - } - this.loggedIn = false; - this.isAuthorized = false; - this.user = new User(); - } - - logIn(){ - Session.setCurrentUrl(location.pathname); - Session.setCurrentParameters(location.search); - window.location.href = OpenaireProperties.getLoginURL(); - } - - onClick(id: string) { - var el: HTMLElement = document.getElementById(id); - el.classList.remove('uk-open'); - } - -} diff --git a/portal-2/src/app/login/utils/guardHelper.class.ts b/portal-2/src/app/login/utils/guardHelper.class.ts deleted file mode 100644 index 2bee44e6..00000000 --- a/portal-2/src/app/login/utils/guardHelper.class.ts +++ /dev/null @@ -1,19 +0,0 @@ - -import { Router} from '@angular/router'; - -// export class GuardHelper{ -// constructor(private router: Router) {} -// -// redirect(url:string, errorCode:number, redirectUrl:string){ -// this.router.navigate([url], { queryParams: { "errorCode": errorCode, "redirectUrl": redirectUrl } }); -// -// } -// -// } -export class ErrorCodes { - public static NOT_LOGGIN:number =1; - public static NOT_ADMIN:number =2; - public static NOT_VALID:number =3; - -} - diff --git a/portal-2/src/app/login/utils/helper.class.ts b/portal-2/src/app/login/utils/helper.class.ts deleted file mode 100644 index 779d78f3..00000000 --- a/portal-2/src/app/login/utils/helper.class.ts +++ /dev/null @@ -1,253 +0,0 @@ -import {StringUtils} from '../../utils/string-utils.class'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; - - -export class User { - email:string; - firstname: string; - lastname: string; - id: string; - fullname: string; - expirationDate: number; - role:string[]; - jwt:string; - -} - -export class Session{ - // public static setUser(user:User): User { - // - // localStorage.setItem("user", JSON.stringify(user)); - // - // return user; - // } - public static removeUser() { - if(Session.isLoggedIn()){ - localStorage.removeItem("user"); - COOKIE.deleteCookie(COOKIE.cookieName_id) - } - } - public static getUser():User { - if(Session.isLoggedIn()){ - return JSON.parse(localStorage.getItem("user")); - }else{ - return null; - } - } - public static isLoggedIn(): boolean { - var loggedIn:boolean = false; - var user:User = null; - var cookie= COOKIE.getCookie(COOKIE.cookieName_u); - if( typeof localStorage !== 'undefined') { - if(localStorage.getItem("user")) { - user = JSON.parse(localStorage.getItem("user")); - if(user && (user.fullname != null || user.lastname !=null || user.firstname !=null)){ - - loggedIn = true; - }else if(cookie != null && this.getUserFromCookie()!= null){ - loggedIn = true - }else{ - loggedIn = false; - } - }else{ - if(cookie != null && this.getUserFromCookie()!= null){ - loggedIn = true - }else{ - loggedIn = false; - } - - } - }else{ - loggedIn = false; - } - return loggedIn; - } - public static getUserFromCookie():User{ - var cookie= COOKIE.getCookie(COOKIE.cookieName_u); - if(cookie != null){ - var user:User = MyJWT.parseUserInfo(cookie); - if( typeof localStorage !== 'undefined') { - localStorage.setItem("user", JSON.stringify(user)); - if(user && user.email && Session.isRegisteredUser()){ - COOKIE.deleteCookie(COOKIE.cookieName_u); // delete cookie to avoid transfer through requests - return user; - }else{ - return null; - } - }else{ - return null; - } - }else{ - return null; - } - } - public static getUserJwt():string { - if(Session.isLoggedIn()){ - return Session.getUser().jwt; - }else{ - return null; - } - - } - public static getUserEmail():string { - if(Session.isLoggedIn()){ - return Session.getUser().email; - }else{ - return null; - } - - } - public static getCurrentUrl():string { - if( typeof localStorage !== 'undefined') { - return localStorage.getItem("url"); - } - return ""; - - } - public static setCurrentUrl(url:string) { - if( typeof localStorage !== 'undefined') { - localStorage.setItem("url", url); - } - } - public static getCurrentParameters():any { - if( typeof localStorage !== 'undefined') { - var params = localStorage.getItem("params"); - var object = null; - if(params.split("&").length > 0){ - object = {}; - } - for(var i=0; i 1)? params.substring(1):""); - } - } - public static isAdminUser():boolean { - var isAdmin = false; - if(Session.isLoggedIn()){ - var claimRoles = ["urn:mace:openminted.eu:aai.openminted.eu:group:OpenAIRE+Curator+-+Claim","urn:mace:openminted.eu:aai.openminted.eu:group:OpenAIRE+Portal+Administrator"] - console.log(Session.getUser().role); - for (var i = 0; i < claimRoles.length; i++) { - if ((Session.getUser().role).indexOf(claimRoles[i]) > -1) { - isAdmin = true; - break; - } - } - // console.log("Is admin:"+ isAdmin) - return (isAdmin); - } - // console.log("Is admin:"+ isAdmin) - return (isAdmin); - } - public static isRegisteredUser():boolean { - var isRegisteredUser = false; - if(Session.isLoggedIn()){ - var claimRoles = ["urn:mace:openminted.eu:aai.openminted.eu:group:Registered+User"]; - for (var i = 0; i < claimRoles.length; i++) { - console.log(Session.getUser().role); - if ((Session.getUser().role).indexOf(claimRoles[i]) > -1) { - isRegisteredUser = true; - break; - } - } - // console.log("Is isRegisteredUser:"+ isRegisteredUser) - return (isRegisteredUser); - } - // console.log("Is isRegisteredUser:"+ isRegisteredUser) - return (isRegisteredUser); - } - public static isUserValid() { - if(Session.isLoggedIn()){ - var expires = Session.getUser().expirationDate; - var now = new Date().getTime() / 1000; - // console.log(" is still valid ? "+(now +0 < expires) +" Remaining:"+ (expires - (now+0))+ " now is:"+now + "expires at:"+expires); - return now +0 < expires; - } - return false; - } - public static isValidAndRemove() { - if(Session.isLoggedIn()){ - if(!Session.isUserValid()){ - Session.removeUser(); - return false; - }else{ - return true; - } - }else{ - return false; - } - } - -} -export class MyJWT{ - private static validateJWTFormat(data){ - if(data != null && (data.indexOf(".") !=-1 && data.split('.').length == 3)){ - return true; - } - return false; - } - private static getPayload(data){ - var payload = data.split('.')[1]; - return StringUtils.b64DecodeUnicode(payload); - } - public static parseUserInfo(data: any): User { - if(this.validateJWTFormat(data)){ - var info = JSON.parse(this.getPayload(data)); - }else{ - return null; - } - var user: User = new User(); - - user.firstname = (StringUtils.URIDecode(info.firstname)).replace("+"," "); - user.lastname = (StringUtils.URIDecode(info.lastname)).replace("+"," "); - user.email = info.email; - // user.id = info.userId; - user.fullname = (StringUtils.URIDecode(info.fullname)).replace("+"," "); - user.role =JSON.parse( StringUtils.URIDecode(info.role)); - // console.log("User Role is:"); - // console.log(user.role) - user.jwt = data; - user.expirationDate = info.exp; - localStorage.setItem("user", JSON.stringify(user)); - return user; - } - -} - export class COOKIE{ - public static cookieName_u:string="XCsrfToken"; - public static cookieName_id:string="AccessToken"; - - public static getCookie(name: string) : string { - if(typeof document == 'undefined'){ - return null; - } - let ca: Array = document.cookie.split(';'); - let caLen: number = ca.length; - let cookieName = `${name}=`; - let c: string; - - for (let i: number = 0; i < caLen; i += 1) { - c = ca[i].replace(/^\s+/g, ''); - if (c.indexOf(cookieName) == 0) { - return c.substring(cookieName.length, c.length); - } - } - return null; - } - public static deleteCookie(name) { - this.setCookie(name, '', -1); - } - public static setCookie(name: string, value: string, expireDays: number, path: string = '/') { - let d:Date = new Date(); - d.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000); - let expires:string = `expires=${d.toUTCString()}`; - // let cpath:string = path ? `; path=${path}` : ''; - document.cookie = name+'='+value+'; path='+path+'; domain='+OpenaireProperties.getCookieDomain()+';'; - } -} diff --git a/portal-2/src/app/reload/reload-routing.module.ts b/portal-2/src/app/reload/reload-routing.module.ts deleted file mode 100644 index f304da05..00000000 --- a/portal-2/src/app/reload/reload-routing.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{ReloadComponent} from './reload.component'; -import {FreeGuard} from'../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../utils/piwik/previousRouteRecorder.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: ReloadComponent, canActivate: [FreeGuard], canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class ReloadRoutingModule { } diff --git a/portal-2/src/app/reload/reload.component.ts b/portal-2/src/app/reload/reload.component.ts deleted file mode 100644 index eac98f96..00000000 --- a/portal-2/src/app/reload/reload.component.ts +++ /dev/null @@ -1,53 +0,0 @@ -import {Component, Input, Output, EventEmitter, ViewChild} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {ActivatedRoute, Router} from '@angular/router'; -import {Location} from '@angular/common'; - -import {OpenaireProperties} from '../utils/properties/openaireProperties'; -import {ErrorCodes} from '../utils/properties/openaireProperties'; -import {RouterHelper} from '../utils/routerHelper.class'; -import {Session} from '../login/utils/helper.class'; - -@Component({ - selector: 'reload', - template: ` -
    -
    -
    -
    - Go to initial page.... -
    -
    -
    -
    - ` -}) -export class ReloadComponent { - - constructor ( - private route: ActivatedRoute, - private _router: Router, - private location: Location - ) { - - } - - public ngOnInit() { - - var url = Session.getCurrentUrl(); - if(url && url != null && url != ""){ - Session.setCurrentUrl(""); - var paramsObject = Session.getCurrentParameters(); - Session.setCurrentParameters(""); - if(paramsObject && paramsObject != null){ - this._router.navigate([url],{ queryParams: paramsObject}); - }else{ - this._router.navigate([url]); - } - }else{ - this._router.navigate(['/']); - - } - } - -} diff --git a/portal-2/src/app/reload/reload.module.ts b/portal-2/src/app/reload/reload.module.ts deleted file mode 100644 index 2b7e8469..00000000 --- a/portal-2/src/app/reload/reload.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import{ReloadRoutingModule } from './reload-routing.module'; -import{ReloadComponent} from './reload.component'; - - - import {FreeGuard} from'../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../utils/piwik/previousRouteRecorder.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, RouterModule, - ReloadRoutingModule - - ], - declarations: [ - ReloadComponent - ], - providers:[ - FreeGuard, PreviousRouteRecorder - ], - exports: [ - ReloadComponent - ] -}) -export class ReloadModule { } diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchDataProviders-routing.module.ts b/portal-2/src/app/searchPages/advanced/advancedSearchDataProviders-routing.module.ts deleted file mode 100644 index 1225ed7a..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchDataProviders-routing.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import{AdvancedSearchDataProvidersComponent} from './advancedSearchDataProviders.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: AdvancedSearchDataProvidersComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class AdvancedSearchDataProvidersRoutingModule { } diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchDataProviders.component.ts b/portal-2/src/app/searchPages/advanced/advancedSearchDataProviders.component.ts deleted file mode 100644 index 85f620eb..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchDataProviders.component.ts +++ /dev/null @@ -1,153 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import { Router, ActivatedRoute} from '@angular/router'; -import {Filter, Value,AdvancedField} from '../searchUtils/searchHelperClasses.class'; -import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {AdvancedSearchPageComponent} from '../searchUtils/advancedSearchPage.component'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - - - -@Component({ - selector: 'advanced-search-dataprovider', - template: ` - - - - ` - }) - -export class AdvancedSearchDataProvidersComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public searchFields:SearchFields = new SearchFields(); - - public fieldIds: string[] = this.searchFields.DATASOURCE_ADVANCED_FIELDS; - public fieldIdsMap= this.searchFields.DATASOURCE_FIELDS; - public selectedFields:AdvancedField[] = []; - - @ViewChild (AdvancedSearchPageComponent) searchPage : AdvancedSearchPageComponent ; - public resourcesQuery = "(oaftype exact datasource)"; - public csvParams: string; - public disableForms: boolean = false; - public loadPaging: boolean = true; - public oldTotalResults: number = 0; - - constructor (private route: ActivatedRoute, private _searchDataProvidersService: SearchDataprovidersService ) { - this.results =[]; - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.searchUtils.baseUrl = OpenaireProperties.searchLinkToAdvancedDataProviders; - console.info("Con -base url:"+this.searchUtils.baseUrl ); - - } - ngOnInit() { - this.sub = this.route.queryParams.subscribe(params => { - if(params['page'] && this.searchUtils.page != params['page']) { - this.loadPaging = false; - this.oldTotalResults = this.searchUtils.totalResults; - } - - let page = (params['page']=== undefined)?0:+params['page']; - this.searchUtils.page = ( page < 1 ) ? 1 : page; - this.searchPage.fieldIds = this.fieldIds; - this.selectedFields =[]; - this.searchPage.selectedFields = this.selectedFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - this.searchPage.getSelectedFiltersFromUrl(params); - this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size); - }); - } - ngOnDestroy() { - this.sub.unsubscribe(); - } - sub: any; - public getResults(parameters:string, page: number, size: number){ - if(parameters!= null && parameters != '' ) { - this.csvParams ="&type=datasources&query=( "+this.resourcesQuery + "and (" + parameters + "))"; - }else{ - this.csvParams ="&type=datasources&query="+this.resourcesQuery; - } - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - console.info("Advanced Search for Content Providers: Execute search query "+parameters); - this._searchDataProvidersService.advancedSearchDataproviders(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("Adv Search Content Providers total="+this.searchUtils.totalResults); - this.results = data[1]; - this.searchPage.updateBaseUrlWithParameters(); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - if(this.searchUtils.status == this.errorCodes.DONE) { - // Page out of limit - let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - if(totalPages < page) { - this.searchUtils.totalResults = 0; - this.searchUtils.status = this.errorCodes.OUT_OF_BOUND; - } - } - }, - err => { - console.log(err); - console.info("error"); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = errorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.NOT_AVAILABLE; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - } - ); - } - - public queryChanged($event) { - this.loadPaging = true; - - var parameters = $event.value; - this.getResults(parameters, this.searchUtils.page,this.searchUtils.size); - console.info("queryChanged: Execute search query "+parameters); - - } - - -} diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchDataProviders.module.ts b/portal-2/src/app/searchPages/advanced/advancedSearchDataProviders.module.ts deleted file mode 100644 index 77d474b3..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchDataProviders.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ AdvancedSearchDataProvidersRoutingModule} from './advancedSearchDataProviders-routing.module'; -import{AdvancedSearchDataProvidersComponent} from './advancedSearchDataProviders.component'; - - -import {DataProvidersServiceModule} from '../../services/dataProvidersService.module'; - import {AdvancedSearchPageModule} from '../searchUtils/advancedSearchPage.module'; - import {FreeGuard} from'../../login/freeGuard.guard'; - import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - DataProvidersServiceModule, - AdvancedSearchDataProvidersRoutingModule, AdvancedSearchPageModule - - ], - declarations: [ - AdvancedSearchDataProvidersComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - AdvancedSearchDataProvidersComponent - ] -}) -export class AdvancedSearchDataProvidersModule { } diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchDatasets-routing.module.ts b/portal-2/src/app/searchPages/advanced/advancedSearchDatasets-routing.module.ts deleted file mode 100644 index 6217c5da..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchDatasets-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{AdvancedSearchDatasetsComponent} from './advancedSearchDatasets.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: AdvancedSearchDatasetsComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class AdvancedSearchDatasetsRoutingModule { } diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchDatasets.component.ts b/portal-2/src/app/searchPages/advanced/advancedSearchDatasets.component.ts deleted file mode 100644 index d5a41f05..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchDatasets.component.ts +++ /dev/null @@ -1,161 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import { Router, ActivatedRoute} from '@angular/router'; -import {Filter, Value,AdvancedField} from '../searchUtils/searchHelperClasses.class'; -import {SearchDatasetsService} from '../../services/searchDatasets.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {AdvancedSearchPageComponent} from '../searchUtils/advancedSearchPage.component'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - - -@Component({ - selector: 'advanced-search-datasets', - template: ` - - - - ` - }) - -export class AdvancedSearchDatasetsComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public searchFields:SearchFields = new SearchFields(); - - public fieldIds: string[] = this.searchFields.RESULT_ADVANCED_FIELDS; - public fieldIdsMap= this.searchFields.RESULT_FIELDS; - public selectedFields:AdvancedField[] = []; - - @ViewChild (AdvancedSearchPageComponent) searchPage : AdvancedSearchPageComponent ; - public resourcesQuery = "( (oaftype exact result) and (resulttypeid exact dataset) )"; - public csvParams: string; - public disableForms: boolean = false; - public loadPaging: boolean = true; - public oldTotalResults: number = 0; - - constructor (private route: ActivatedRoute, private _searchDatasetsService: SearchDatasetsService ) { - this.results =[]; - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.searchUtils.baseUrl = OpenaireProperties.searchLinkToAdvancedDatasets; - - - - } - ngOnInit() { - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.sub = this.route.queryParams.subscribe(params => { - if(params['page'] && this.searchUtils.page != params['page']) { - this.loadPaging = false; - this.oldTotalResults = this.searchUtils.totalResults; - } - - let page = (params['page']=== undefined)?1:+params['page']; - this.searchUtils.page = ( page <= 0 ) ? 1 : page; - this.searchPage.fieldIds = this.fieldIds; - this.selectedFields =[]; - this.searchPage.selectedFields = this.selectedFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - this.searchPage.getSelectedFiltersFromUrl(params); - this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size); - - }); - } - ngOnDestroy() { - this.sub.unsubscribe(); - } - sub: any; - public getResults(parameters:string, page: number, size: number){ - if(parameters!= null && parameters != '' ) { - this.csvParams ="&type=datasets&query=( "+this.resourcesQuery + "and (" + parameters + "))"; - }else{ - this.csvParams ="&type=datasets&query="+this.resourcesQuery; - } - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - console.info("Advanced Search for Research Data: Execute search query "+parameters); - this._searchDatasetsService.advancedSearchDatasets(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Research Data total="+this.searchUtils.totalResults); - this.results = data[1]; - this.searchPage.updateBaseUrlWithParameters(); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - if(this.searchUtils.status == this.errorCodes.DONE) { - // Page out of limit!!! - let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - if(totalPages < page) { - this.searchUtils.totalResults = 0; - this.searchUtils.status = this.errorCodes.OUT_OF_BOUND; - } - } - }, - err => { - console.log(err); - console.info("error"); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = errorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.NOT_AVAILABLE; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - } - ); - } - private setFilters(){ - //TODO set filters from - } - - public queryChanged($event) { - this.loadPaging = true; - - var parameters = $event.value; - this.getResults(parameters, this.searchUtils.page,this.searchUtils.size); - console.info("queryChanged: Execute search query "+parameters); - - } - - -} diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchDatasets.module.ts b/portal-2/src/app/searchPages/advanced/advancedSearchDatasets.module.ts deleted file mode 100644 index b68d2582..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchDatasets.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ AdvancedSearchDatasetsRoutingModule} from './advancedSearchDatasets-routing.module'; -import{AdvancedSearchDatasetsComponent} from './advancedSearchDatasets.component'; - - -import {DatasetsServiceModule} from '../../services/datasetsService.module'; - import {AdvancedSearchPageModule} from '../searchUtils/advancedSearchPage.module'; - import {FreeGuard} from'../../login/freeGuard.guard'; - import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - DatasetsServiceModule, - AdvancedSearchDatasetsRoutingModule, AdvancedSearchPageModule - - ], - declarations: [ - AdvancedSearchDatasetsComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - AdvancedSearchDatasetsComponent - ] -}) -export class AdvancedSearchDatasetsModule { } diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchOrganizations-routing.module.ts b/portal-2/src/app/searchPages/advanced/advancedSearchOrganizations-routing.module.ts deleted file mode 100644 index 541dc659..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchOrganizations-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{AdvancedSearchOrganizationsComponent} from './advancedSearchOrganizations.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: AdvancedSearchOrganizationsComponent , canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - },canDeactivate: [PreviousRouteRecorder]} - - ]) - ] -}) -export class AdvancedSearchOrganizationsRoutingModule { } diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchOrganizations.component.ts b/portal-2/src/app/searchPages/advanced/advancedSearchOrganizations.component.ts deleted file mode 100644 index dffde579..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchOrganizations.component.ts +++ /dev/null @@ -1,161 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import { Router, ActivatedRoute} from '@angular/router'; -import {Filter, Value,AdvancedField} from '../searchUtils/searchHelperClasses.class'; -import {SearchOrganizationsService} from '../../services/searchOrganizations.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {AdvancedSearchPageComponent} from '../searchUtils/advancedSearchPage.component'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - - -@Component({ - selector: 'advanced-search-organizations', - template: ` - - - - ` - }) - -export class AdvancedSearchOrganizationsComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public searchFields:SearchFields = new SearchFields(); - - public fieldIds: string[] = this.searchFields.ORGANIZATION_ADVANCED_FIELDS; - public fieldIdsMap = this.searchFields.ORGANIZATION_FIELDS; - public selectedFields:AdvancedField[] = []; - public csvParams: string; - public disableForms: boolean = false; - public loadPaging: boolean = true; - public oldTotalResults: number = 0; - - @ViewChild (AdvancedSearchPageComponent) searchPage : AdvancedSearchPageComponent ; - -public resourcesQuery = "(oaftype exact organization)"; - constructor (private route: ActivatedRoute, private _searchOrganizationsService: SearchOrganizationsService ) { - this.results =[]; - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.searchUtils.baseUrl = OpenaireProperties.searchLinkToAdvancedOrganizations; - - - - } - ngOnInit() { - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this.sub = this.route.queryParams.subscribe(params => { - if(params['page'] && this.searchUtils.page != params['page']) { - this.loadPaging = false; - this.oldTotalResults = this.searchUtils.totalResults; - } - - let page = (params['page']=== undefined)?1:+params['page']; - this.searchUtils.page = ( page <= 0 ) ? 1 : page; - this.searchPage.fieldIds = this.fieldIds; - this.selectedFields =[]; - this.searchPage.selectedFields = this.selectedFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - this.searchPage.getSelectedFiltersFromUrl(params); - this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size); - - }); - } - ngOnDestroy() { - this.sub.unsubscribe(); - } - sub: any; - public getResults(parameters:string, page: number, size: number){ - if(parameters!= null && parameters != '' ) { - this.csvParams ="&type=organizations&query=( "+this.resourcesQuery + "and (" + parameters + "))"; - }else{ - this.csvParams ="&type=organizations&query="+this.resourcesQuery; - } - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - console.info("Advanced Search for Organizations: Execute search query "+parameters); - this._searchOrganizationsService.advancedSearchOrganizations(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Organizations total="+this.searchUtils.totalResults); - this.results = data[1]; - this.searchPage.updateBaseUrlWithParameters(); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - if(this.searchUtils.status == this.errorCodes.DONE) { - // Page out of limit!!! - let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - if(totalPages < page) { - this.searchUtils.totalResults = 0; - this.searchUtils.status = this.errorCodes.OUT_OF_BOUND; - } - } - }, - err => { - console.log(err); - console.info("error"); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = errorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.NOT_AVAILABLE; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - } - ); - } - private setFilters(){ - //TODO set filters from - } - - public queryChanged($event) { - this.loadPaging = true; - - var parameters = $event.value; - this.getResults(parameters, this.searchUtils.page,this.searchUtils.size); - console.info("queryChanged: Execute search query "+parameters); - - } - - -} diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchOrganizations.module.ts b/portal-2/src/app/searchPages/advanced/advancedSearchOrganizations.module.ts deleted file mode 100644 index 85432402..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchOrganizations.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ AdvancedSearchOrganizationsRoutingModule} from './advancedSearchOrganizations-routing.module'; -import{AdvancedSearchOrganizationsComponent} from './advancedSearchOrganizations.component'; - - -import {OrganizationsServiceModule} from '../../services/organizationsService.module'; - import {AdvancedSearchPageModule} from '../searchUtils/advancedSearchPage.module'; - import {FreeGuard} from'../../login/freeGuard.guard'; - import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - OrganizationsServiceModule, - AdvancedSearchOrganizationsRoutingModule, AdvancedSearchPageModule - - ], - declarations: [ - AdvancedSearchOrganizationsComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - AdvancedSearchOrganizationsComponent - ] -}) -export class AdvancedSearchOrganizationsModule { } diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchProjects-routing.module.ts b/portal-2/src/app/searchPages/advanced/advancedSearchProjects-routing.module.ts deleted file mode 100644 index 6056b75b..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchProjects-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{AdvancedSearchProjectsComponent} from './advancedSearchProjects.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: AdvancedSearchProjectsComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class AdvancedSearchProjectsRoutingModule { } diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchProjects.component.ts b/portal-2/src/app/searchPages/advanced/advancedSearchProjects.component.ts deleted file mode 100644 index bf1af211..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchProjects.component.ts +++ /dev/null @@ -1,162 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import { Router, ActivatedRoute} from '@angular/router'; -import {Filter, Value,AdvancedField} from '../searchUtils/searchHelperClasses.class'; -import {SearchProjectsService} from '../../services/searchProjects.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {AdvancedSearchPageComponent} from '../searchUtils/advancedSearchPage.component'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - -@Component({ - selector: 'advanced-search-projects', - template: ` - - - - ` - }) - -export class AdvancedSearchProjectsComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public searchFields:SearchFields = new SearchFields(); - - public fieldIds: string[] = this.searchFields.PROJECT_ADVANCED_FIELDS; - public fieldIdsMap = this.searchFields.PROJECT_FIELDS; - public selectedFields:AdvancedField[] = []; - - @ViewChild (AdvancedSearchPageComponent) searchPage : AdvancedSearchPageComponent ; - public resourcesQuery = "(oaftype exact project)"; - public csvParams: string; - public disableForms: boolean = false; - public loadPaging: boolean = true; - public oldTotalResults: number = 0; - - constructor (private route: ActivatedRoute, private _searchProjectsService: SearchProjectsService ) { - - this.results =[]; - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.searchUtils.baseUrl = OpenaireProperties.searchLinkToAdvancedProjects; - - - - } - ngOnInit() { - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.sub = this.route.queryParams.subscribe(params => { - if(params['page'] && this.searchUtils.page != params['page']) { - this.loadPaging = false; - this.oldTotalResults = this.searchUtils.totalResults; - } - - let page = (params['page']=== undefined)?1:+params['page']; - this.searchUtils.page = ( page <= 0 ) ? 1 : page; - this.searchPage.fieldIds = this.fieldIds; - this.selectedFields =[]; - this.searchPage.selectedFields = this.selectedFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - this.searchPage.getSelectedFiltersFromUrl(params); - this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size); - - }); - } - ngOnDestroy() { - this.sub.unsubscribe(); - } - sub: any; - public getResults(parameters:string, page: number, size: number){ - if(parameters!= null && parameters != '' ) { - this.csvParams ="&type=projects&query=( "+this.resourcesQuery + "and (" + parameters + "))"; - }else{ - this.csvParams ="&type=projects&query="+this.resourcesQuery; - } - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - console.info("Advanced Search for Publications: Execute search query "+parameters); - this._searchProjectsService.advancedSearchProjects(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("Advanced Search for Projects total="+this.searchUtils.totalResults); - this.results = data[1]; - this.searchPage.updateBaseUrlWithParameters(); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - if(this.searchUtils.status == this.errorCodes.DONE) { - // Page out of limit!!! - let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - if(totalPages < page) { - this.searchUtils.totalResults = 0; - this.searchUtils.status = this.errorCodes.OUT_OF_BOUND; - } - } - }, - err => { - console.log(err); - console.info("error"); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = errorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.NOT_AVAILABLE; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - - } - ); - } - private setFilters(){ - //TODO set filters from - } - - public queryChanged($event) { - this.loadPaging = true; - - var parameters = $event.value; - this.getResults(parameters, this.searchUtils.page,this.searchUtils.size); - console.info("queryChanged: Execute search query "+parameters); - - } - - -} diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchProjects.module.ts b/portal-2/src/app/searchPages/advanced/advancedSearchProjects.module.ts deleted file mode 100644 index cb81a43d..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchProjects.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ AdvancedSearchProjectsRoutingModule} from './advancedSearchProjects-routing.module'; -import{AdvancedSearchProjectsComponent} from './advancedSearchProjects.component'; - - -import {ProjectsServiceModule} from '../../services/projectsService.module'; - import {AdvancedSearchPageModule} from '../searchUtils/advancedSearchPage.module'; - import {FreeGuard} from'../../login/freeGuard.guard'; - import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - ProjectsServiceModule, - AdvancedSearchProjectsRoutingModule, AdvancedSearchPageModule - - ], - declarations: [ - AdvancedSearchProjectsComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - AdvancedSearchProjectsComponent - ] -}) -export class AdvancedSearchProjectsModule { } diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchPublications-routing.module.ts b/portal-2/src/app/searchPages/advanced/advancedSearchPublications-routing.module.ts deleted file mode 100644 index 3a467df9..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchPublications-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{AdvancedSearchPublicationsComponent} from './advancedSearchPublications.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: AdvancedSearchPublicationsComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class AdvancedSearchPublicationsRoutingModule { } diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchPublications.component.ts b/portal-2/src/app/searchPages/advanced/advancedSearchPublications.component.ts deleted file mode 100644 index 8f0cfa26..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchPublications.component.ts +++ /dev/null @@ -1,160 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import { Router, ActivatedRoute} from '@angular/router'; -import {Filter, Value,AdvancedField} from '../searchUtils/searchHelperClasses.class'; -import {SearchPublicationsService} from '../../services/searchPublications.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {AdvancedSearchPageComponent} from '../searchUtils/advancedSearchPage.component'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - - -@Component({ - selector: 'advanced-search-publications', - template: ` - - - ` - }) - -export class AdvancedSearchPublicationsComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public searchFields:SearchFields = new SearchFields(); - - public fieldIds: string[] = this.searchFields.RESULT_ADVANCED_FIELDS; - public fieldIdsMap= this.searchFields.RESULT_FIELDS; - public selectedFields:AdvancedField[] = []; - public resourcesQuery = "((oaftype exact result) and (resulttypeid exact publication))"; - public csvParams: string; - public disableForms: boolean = false; - public loadPaging: boolean = true; - public oldTotalResults: number = 0; - - @ViewChild (AdvancedSearchPageComponent) searchPage : AdvancedSearchPageComponent ; - - - constructor (private route: ActivatedRoute, private _searchPublicationsService: SearchPublicationsService ) { - - this.results =[]; - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.searchUtils.baseUrl = OpenaireProperties.searchLinkToAdvancedPublications; - - - - } - ngOnInit() { - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.sub = this.route.queryParams.subscribe(params => { - if(params['page'] && this.searchUtils.page != params['page']) { - this.loadPaging = false; - this.oldTotalResults = this.searchUtils.totalResults; - } - - let page = (params['page']=== undefined)?1:+params['page']; - this.searchUtils.page = ( page <= 0 ) ? 1 : page; - this.searchPage.fieldIds = this.fieldIds; - this.selectedFields =[]; - this.searchPage.selectedFields = this.selectedFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - - this.searchPage.getSelectedFiltersFromUrl(params); - this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size); - }); - } - ngOnDestroy() { - this.sub.unsubscribe(); - } - sub: any; - public getResults(parameters:string, page: number, size: number){ - if(parameters!= null && parameters != '' ) { - this.csvParams ="&type=publications&query=("+this.resourcesQuery +" and (" + parameters + "))"; - }else{ - this.csvParams ="&type=publications&query="+this.resourcesQuery; - } - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - console.info("Advanced Search for Publications: Execute search query "+parameters); - this._searchPublicationsService.advancedSearchPublications(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("searchPubl total="+this.searchUtils.totalResults); - this.results = data[1]; - this.searchPage.updateBaseUrlWithParameters(); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - if(this.searchUtils.status == this.errorCodes.DONE) { - // Page out of limit!!! - let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - if(totalPages < page) { - this.searchUtils.totalResults = 0; - this.searchUtils.status = this.errorCodes.OUT_OF_BOUND; - } - } - }, - err => { - console.log(err); - console.info("error"); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.NOT_AVAILABLE; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - - } - ); - } - - public queryChanged($event) { - this.loadPaging = true; - - var parameters = $event.value; - this.getResults(parameters, this.searchUtils.page,this.searchUtils.size); - console.info("queryChanged: Execute search query "+parameters); - - } - - -} diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchPublications.module.ts b/portal-2/src/app/searchPages/advanced/advancedSearchPublications.module.ts deleted file mode 100644 index 4e6a230d..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchPublications.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ AdvancedSearchPublicationsRoutingModule} from './advancedSearchPublications-routing.module'; -import{AdvancedSearchPublicationsComponent} from './advancedSearchPublications.component'; - - -import {PublicationsServiceModule} from '../../services/publicationsService.module'; - import {AdvancedSearchPageModule} from '../searchUtils/advancedSearchPage.module'; - import {FreeGuard} from'../../login/freeGuard.guard'; - import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - PublicationsServiceModule, - AdvancedSearchPublicationsRoutingModule, AdvancedSearchPageModule - - ], - declarations: [ - AdvancedSearchPublicationsComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - AdvancedSearchPublicationsComponent - ] -}) -export class AdvancedSearchPublicationsModule { } diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchSoftware-routing.module.ts b/portal-2/src/app/searchPages/advanced/advancedSearchSoftware-routing.module.ts deleted file mode 100644 index 95183ca0..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchSoftware-routing.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{AdvancedSearchSoftwareComponent} from './advancedSearchSoftware.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: AdvancedSearchSoftwareComponent, canActivate: [FreeGuard],canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class AdvancedSearchSoftwareRoutingModule { } diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchSoftware.component.ts b/portal-2/src/app/searchPages/advanced/advancedSearchSoftware.component.ts deleted file mode 100644 index 73275cea..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchSoftware.component.ts +++ /dev/null @@ -1,161 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import { Router, ActivatedRoute} from '@angular/router'; -import {Filter, Value,AdvancedField} from '../searchUtils/searchHelperClasses.class'; -import {SearchSoftwareService} from '../../services/searchSoftware.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {AdvancedSearchPageComponent} from '../searchUtils/advancedSearchPage.component'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - - -@Component({ - selector: 'advanced-search-software', - template: ` - - - - ` - }) - -export class AdvancedSearchSoftwareComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public searchFields:SearchFields = new SearchFields(); - - public fieldIds: string[] = this.searchFields.RESULT_ADVANCED_FIELDS; - public fieldIdsMap= this.searchFields.RESULT_FIELDS; - public selectedFields:AdvancedField[] = []; - - @ViewChild (AdvancedSearchPageComponent) searchPage : AdvancedSearchPageComponent ; - public resourcesQuery = "( (oaftype exact result) and (resulttypeid exact software) )"; - public csvParams: string; - public disableForms: boolean = false; - public loadPaging: boolean = true; - public oldTotalResults: number = 0; - - constructor (private route: ActivatedRoute, private _searchSoftwareService: SearchSoftwareService ) { - this.results =[]; - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.searchUtils.baseUrl = OpenaireProperties.searchLinkToAdvancedSoftware; - - - - } - ngOnInit() { - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.sub = this.route.queryParams.subscribe(params => { - if(params['page'] && this.searchUtils.page != params['page']) { - this.loadPaging = false; - this.oldTotalResults = this.searchUtils.totalResults; - } - - let page = (params['page']=== undefined)?1:+params['page']; - this.searchUtils.page = ( page <= 0 ) ? 1 : page; - this.searchPage.fieldIds = this.fieldIds; - this.selectedFields =[]; - this.searchPage.selectedFields = this.selectedFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - this.searchPage.getSelectedFiltersFromUrl(params); - this.getResults(this.searchPage.createQueryParameters(), this.searchUtils.page, this.searchUtils.size); - - }); - } - ngOnDestroy() { - this.sub.unsubscribe(); - } - sub: any; - public getResults(parameters:string, page: number, size: number){ - if(parameters!= null && parameters != '' ) { - this.csvParams ="&type=software&query=( "+this.resourcesQuery + "and (" + parameters + "))"; - }else{ - this.csvParams ="&type=software&query="+this.resourcesQuery; - } - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - console.info("Advanced Search for Software: Execute search query "+parameters); - this._searchSoftwareService.advancedSearchSoftware(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Software total="+this.searchUtils.totalResults); - this.results = data[1]; - this.searchPage.updateBaseUrlWithParameters(); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - if(this.searchUtils.status == this.errorCodes.DONE) { - // Page out of limit!!! - let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - if(totalPages < page) { - this.searchUtils.totalResults = 0; - this.searchUtils.status = this.errorCodes.OUT_OF_BOUND; - } - } - }, - err => { - console.log(err); - console.info("error"); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = errorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.NOT_AVAILABLE; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - } - ); - } - private setFilters(){ - //TODO set filters from - } - - public queryChanged($event) { - this.loadPaging = true; - - var parameters = $event.value; - this.getResults(parameters, this.searchUtils.page,this.searchUtils.size); - console.info("queryChanged: Execute search query "+parameters); - - } - - -} diff --git a/portal-2/src/app/searchPages/advanced/advancedSearchSoftware.module.ts b/portal-2/src/app/searchPages/advanced/advancedSearchSoftware.module.ts deleted file mode 100644 index c5c276ff..00000000 --- a/portal-2/src/app/searchPages/advanced/advancedSearchSoftware.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ AdvancedSearchSoftwareRoutingModule} from './advancedSearchSoftware-routing.module'; -import{AdvancedSearchSoftwareComponent} from './advancedSearchSoftware.component'; - - -import {SoftwareServiceModule} from '../../services/softwareService.module'; - import {AdvancedSearchPageModule} from '../searchUtils/advancedSearchPage.module'; - import {FreeGuard} from'../../login/freeGuard.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - SoftwareServiceModule, - AdvancedSearchSoftwareRoutingModule, AdvancedSearchPageModule - - ], - declarations: [ - AdvancedSearchSoftwareComponent - ], - providers:[FreeGuard - ], - exports: [ - AdvancedSearchSoftwareComponent - ] -}) -export class AdvancedSearchSoftwareModule { } diff --git a/portal-2/src/app/searchPages/dataProviders/compatibleDataProviders-routing.module.ts b/portal-2/src/app/searchPages/dataProviders/compatibleDataProviders-routing.module.ts deleted file mode 100644 index 5c8b5cba..00000000 --- a/portal-2/src/app/searchPages/dataProviders/compatibleDataProviders-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{SearchCompatibleDataprovidersComponent} from './compatibleDataProviders.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: SearchCompatibleDataprovidersComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class CompatibleDataProvidersRoutingModule { } diff --git a/portal-2/src/app/searchPages/dataProviders/compatibleDataProviders.component.ts b/portal-2/src/app/searchPages/dataProviders/compatibleDataProviders.component.ts deleted file mode 100644 index 4e842e97..00000000 --- a/portal-2/src/app/searchPages/dataProviders/compatibleDataProviders.component.ts +++ /dev/null @@ -1,186 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; - -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; - -import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageComponent } from '../searchUtils/searchPage.component'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - -@Component({ - selector: 'search-content-providers', - template: ` - - - - - - ` - -}) -export class SearchCompatibleDataprovidersComponent { - private errorCodes: ErrorCodes; - public results =[]; - public filters =[]; - public baseUrl:string; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public sub: any; public subResults: any; - public _location:Location; - public searchFields:SearchFields = new SearchFields(); - public refineFields: string[] = this.searchFields.COMPATIBLE_DATAPROVIDER_FIELDS; - public fieldIdsMap= this.searchFields.DATASOURCE_FIELDS; - public _prefixQueryFields: {field:string,opName:string,opValue:string,values:string[]}[] =[{field:"compatibility",opName:"cm",opValue:"not", values:["UNKNOWN","hostedBy","notCompatible"]},{field:"type",opName:"tp",opValue:"not",values: ["other"]}]; - // ["entityregistry","entityregistry::projects","entityregistry::repositories"]}]; - public _prefixQuery: string = ""; - - public CSV: any = { "columnNames": [ "Title", "Type", "Coutries", "Compatibility" ], - "export":[] - }; - public CSVDownloaded = false; - public resourcesQuery = '&query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other) not(datasourcetypeuiid exact "pubsrepository::journal") not(datasourcetypeuiid exact "aggregator::pubsrepository::journals"))'; - public csvParams: string; - public disableForms: boolean = false; - - @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ; - - constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService ) { - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.baseUrl = OpenaireProperties.getLinkToSearchCompatibleDataProviders(); - for(var i = 0; i < this._prefixQueryFields.length; i++ ){ - for(var j =0; j < this._prefixQueryFields[i].values.length; j++){ - this._prefixQuery+="&" + this._prefixQueryFields[i].field + "=" - + this._prefixQueryFields[i].values[j] + "&" + - this._prefixQueryFields[i].opName + "=" + this._prefixQueryFields[i].opValue; - } - } - this._prefixQuery+="&"; - } - - public ngOnInit() { - this.searchPage.refineFields = this.refineFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - this.sub = this.route.queryParams.subscribe(params => { - this.searchUtils.keyword = (params['keyword']?params['keyword']:''); - this.searchUtils.page = (params['page']=== undefined)?1:+params['page']; - this.filters = this.createFilters(); - var queryParameters = this.searchPage.getIndexQueryParametersFromUrl(params); - console.info("|"+queryParameters+"|"); - this._getResults(queryParameters, false, this.searchUtils.page, this.searchUtils.size); - }); - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } } - private _getResults(parameters:string,refine:boolean, page: number, size: number){ - this.csvParams = parameters+this.resourcesQuery+"&type=datasources"; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - this.subResults = this._searchDataprovidersService.searchCompatibleDataproviders(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, []).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Content Providers: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - this.searchPage.checkSelectedFilters(this.filters); - this.searchPage.updateBaseUrlWithParameters(this.filters); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - - } - ); - } - private setFilters(){ - //TODO set filters from - } - - public queryChanged($event) { - var parameters = $event.index; - console.info("queryChanged: Execute search query "+parameters); - - this._getResults(parameters, false, this.searchUtils.page, this.searchUtils.size); - } - private createFilters():Filter[] { - var filter_names=["Type","Compatibility Level"]; - var filter_ids=["datasourcetypeuiid","datasourcecompatibilityname"]; - var searchFields = new SearchFields(); - var filter_original_ids = searchFields.COMPATIBLE_DATAPROVIDER_FIELDS; - var value_names=[ - /*[ - "Institutional Publication Repository","Thematic Publication Repository", "Other Publication Repository", - "Institutional Repositories Aggregators", - "Thematic Repositories Aggregators", "Other Repositories Aggregators", - "Data Repositories", "Data Repositories Aggregators", "Journals", "Journals Aggregators", "CRIS Systems", "Publication Catalogues"], - */ - [ - "Institutional Repository", "Thematic Repository", "Publication Repository", - "Institutional Repository Aggregator", - "Thematic Repositories Aggregators", "Publication Repository Aggregator", - "Data Repository", "Data Repository Aggregator", "CRIS Systems", "Publication Catalogue"], - ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]]; - - var value_original_ids=[ - ["pubsrepository::institutional","pubsrepository::thematic", "pubsrepository::unknown", "aggregator::pubsrepository::institutional","aggregator::pubsrepository::thematic","aggregator::pubsrepository::unknown", - "datarepository::unknown", "aggregator::datarepository", "cris", "pubscatalogue::unknown"], - //["driver","openaire2.0", "driver-openaire2.0", "openaire3.0","openaire2.0_data"] - ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]]; - var filters: Filter[] =[]; - for(var i =0 ; i < filter_names.length;i++){ - var values:Value[] = []; - for(var j =0 ; j < value_names[i].length;j++){ - var value:Value = {name: value_names[i][j], id: value_original_ids[i][j], number:j, selected:false} - values.push(value); - } - var filter:Filter = {title: filter_names[i], filterId: filter_ids[i], originalFilterId: filter_original_ids[i], values : values, countSelectedValues:0, "filterOperator": 'or' }; - filters.push(filter); - } - return filters; - } -} diff --git a/portal-2/src/app/searchPages/dataProviders/compatibleDataProviders.module.ts b/portal-2/src/app/searchPages/dataProviders/compatibleDataProviders.module.ts deleted file mode 100644 index d5c3082e..00000000 --- a/portal-2/src/app/searchPages/dataProviders/compatibleDataProviders.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ CompatibleDataProvidersRoutingModule} from './compatibleDataProviders-routing.module'; -import{SearchCompatibleDataprovidersComponent} from './compatibleDataProviders.component'; - -import {SearchResultsModule } from '../searchUtils/searchResults.module'; - -import {DataProvidersServiceModule} from '../../services/dataProvidersService.module'; -import {SearchFormModule} from '../searchUtils/searchForm.module'; -//import {SearchFilterModalModule} from '../searchUtils/searchFilterModal.module'; -import {SearchPageModule} from '../searchUtils/searchPage.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - DataProvidersServiceModule, - SearchFormModule, SearchResultsModule, CompatibleDataProvidersRoutingModule, SearchPageModule - - ], - declarations: [ - SearchCompatibleDataprovidersComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - SearchCompatibleDataprovidersComponent - ] -}) -export class CompatibleDataProvidersModule { } diff --git a/portal-2/src/app/searchPages/dataProviders/compatibleDataProvidersTable-routing.module.ts b/portal-2/src/app/searchPages/dataProviders/compatibleDataProvidersTable-routing.module.ts deleted file mode 100644 index b00ad1ad..00000000 --- a/portal-2/src/app/searchPages/dataProviders/compatibleDataProvidersTable-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{SearchCompatibleDataprovidersTableComponent} from './compatibleDataProvidersTable.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: SearchCompatibleDataprovidersTableComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class CompatibleDataProvidersTableRoutingModule { } diff --git a/portal-2/src/app/searchPages/dataProviders/compatibleDataProvidersTable.component.ts b/portal-2/src/app/searchPages/dataProviders/compatibleDataProvidersTable.component.ts deleted file mode 100644 index 3b4e7c4f..00000000 --- a/portal-2/src/app/searchPages/dataProviders/compatibleDataProvidersTable.component.ts +++ /dev/null @@ -1,196 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; - -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; - -import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageTableViewComponent } from '../searchUtils/searchPageTableView.component'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - -@Component({ - selector: 'search-content-providers-table', - template: ` - - - - ` - -}) -export class SearchCompatibleDataprovidersTableComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - public baseUrl:string; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public sub: any; public subResults: any; - public _location:Location; - public searchFields:SearchFields = new SearchFields(); - public refineFields: string[] = this.searchFields.COMPATIBLE_DATAPROVIDER_FIELDS; - - /*public CSV: any = { "columnNames": [ "Title", "Type", "Coutries", "Compatibility" ], - "export":[] - }; - public CSVDownloaded = false; - public csvParams: string; - public resourcesQuery = "&query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other))";*/ - - public disableForms: boolean = false; - - @ViewChild (SearchPageTableViewComponent) searchPage : SearchPageTableViewComponent ; - - constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService ) { - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.baseUrl = OpenaireProperties.getLinkToSearchCompatibleDataProvidersTable(); - } - - public ngOnInit() { - this.searchPage.refineFields = this.refineFields; - this.sub = this.route.queryParams.subscribe(params => { - this.searchUtils.keyword = (params['keyword']?params['keyword']:''); - //this.searchUtils.page = (params['page']=== undefined)?1:+params['page']; - this.filters = this.createFilters(); - this.searchPage.getParametersFromUrl(params); - this._getResults(); - }); - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } } - private _getResults(){ - //this.csvParams = this.resourcesQuery+"&type=datasources"; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - let size: number = 0; - this.subResults = this._searchDataprovidersService.searchCompatibleDataprovidersTable().subscribe( - data => { - size = data; - if(size > 0) { - this.subResults = this._searchDataprovidersService.searchCompatibleDataproviders("", null, 1, size, []).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Content Providers [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - this.searchPage.checkSelectedFilters(this.filters); - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - this.disableForms = false; - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - this.disableForms = false; - - } - ); - } else { - this.searchPage.checkSelectedFilters(this.filters); - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.NONE; - this.disableForms = false; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - - } - private setFilters(){ - //TODO set filters from - } - - private createFilters():Filter[] { - var filter_names=["Type","Compatibility Level"]; - var filter_ids=["datasourcetypeuiid","datasourcecompatibilityname"]; - var searchFields = new SearchFields(); - var filter_original_ids = searchFields.COMPATIBLE_DATAPROVIDER_FIELDS; - var value_names=[ - /*[ - "Institutional Publication Repository","Thematic Publication Repository", "Other Publication Repository", - "Institutional Repositories Aggregators", - "Thematic Repositories Aggregators", "Other Repositories Aggregators", - "Data Repositories", "Data Repositories Aggregators", "Journals", "Journals Aggregators", "CRIS Systems", "Publication Catalogues"], - */ - [ - "Institutional Repository", "Thematic Repository", "Publication Repository", - "Institutional Repository Aggregator", - "Thematic Repositories Aggregators", "Publication Repository Aggregator", - "Data Repository", "Data Repository Aggregator", "CRIS Systems", "Publication Catalogue"], - - - - - ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]]; - - var value_original_ids=[ - ["pubsrepository::institutional","pubsrepository::thematic", "pubsrepository::unknown", "aggregator::pubsrepository::institutional","aggregator::pubsrepository::thematic","aggregator::pubsrepository::unknown", - "datarepository::unknown", "aggregator::datarepository", "cris", "pubscatalogue::unknown"], - //["driver","openaire2.0", "driver-openaire2.0", "openaire3.0","openaire2.0_data"] - ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]]; - var filters: Filter[] =[]; - for(var i =0 ; i < filter_names.length;i++){ - var values:Value[] = []; - for(var j =0 ; j < value_names[i].length;j++){ - var value:Value = {name: value_names[i][j], id: value_original_ids[i][j], number:j, selected:false} - values.push(value); - } - var filter:Filter = {title: filter_names[i], filterId: filter_ids[i], originalFilterId: filter_original_ids[i], values : values, countSelectedValues:0, "filterOperator": 'or' }; - filters.push(filter); - } - return filters; - } -} diff --git a/portal-2/src/app/searchPages/dataProviders/compatibleDataProvidersTable.module.ts b/portal-2/src/app/searchPages/dataProviders/compatibleDataProvidersTable.module.ts deleted file mode 100644 index 1efcace5..00000000 --- a/portal-2/src/app/searchPages/dataProviders/compatibleDataProvidersTable.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ CompatibleDataProvidersTableRoutingModule} from './compatibleDataProvidersTable-routing.module'; -import{SearchCompatibleDataprovidersTableComponent} from './compatibleDataProvidersTable.component'; - -//import {DatasourceTableViewModule } from '../searchUtils/datasourceTableView.module'; - -import {DataProvidersServiceModule} from '../../services/dataProvidersService.module'; -import {SearchFormModule} from '../searchUtils/searchForm.module'; -//import {SearchFilterModalModule} from '../searchUtils/searchFilterModal.module'; -import {SearchPageTableViewModule} from '../searchUtils/searchPageTableView.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - DataProvidersServiceModule, - SearchFormModule, CompatibleDataProvidersTableRoutingModule, SearchPageTableViewModule - - ], - declarations: [ - SearchCompatibleDataprovidersTableComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - SearchCompatibleDataprovidersTableComponent - ] -}) -export class CompatibleDataProvidersTableModule { } diff --git a/portal-2/src/app/searchPages/dataProviders/entityRegistries-routing.module.ts b/portal-2/src/app/searchPages/dataProviders/entityRegistries-routing.module.ts deleted file mode 100644 index 35e6b8bc..00000000 --- a/portal-2/src/app/searchPages/dataProviders/entityRegistries-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{SearchEntityRegistriesComponent} from './entityRegistries.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: SearchEntityRegistriesComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class EntityRegistriesRoutingModule { } diff --git a/portal-2/src/app/searchPages/dataProviders/entityRegistries.component.ts b/portal-2/src/app/searchPages/dataProviders/entityRegistries.component.ts deleted file mode 100644 index d3652b04..00000000 --- a/portal-2/src/app/searchPages/dataProviders/entityRegistries.component.ts +++ /dev/null @@ -1,178 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; - -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; - -import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageComponent } from '../searchUtils/searchPage.component'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - -@Component({ - selector: 'search-entity-registries', - template: ` - - - - - ` - -}) -export class SearchEntityRegistriesComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - public baseUrl:string; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public sub: any; public subResults: any; - public _location:Location; - public searchFields:SearchFields = new SearchFields(); - public refineFields: string[] = this.searchFields.ENTITY_REGISTRIES_FIELDS; - public fieldIdsMap= this.searchFields.DATASOURCE_FIELDS; - public _prefixQueryFields: {field:string,opName:string,opValue:string,values:string[]}[] =[ - {field:"type",opName:"tp",opValue:"and",values: ["other"]}]; - // ["entityregistry","entityregistry::projects","entityregistry::repositories"]}]; - public _prefixQuery: string = ""; - - public CSV: any = { "columnNames": [ "Title", "Type", "Coutries", "Compatibility" ], - "export":[] - }; - public CSVDownloaded = false; - public disableForms: boolean = false; - - @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ; - public resourcesQuery = "&query=((oaftype exact datasource) and(datasourcetypeuiid = other))"; - public csvParams: string; - - constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService ) { - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.baseUrl = OpenaireProperties.getLinkToSearchEntityRegistries(); - for(var i = 0; i < this._prefixQueryFields.length; i++ ){ - for(var j =0; j < this._prefixQueryFields[i].values.length; j++){ - this._prefixQuery+="&" + this._prefixQueryFields[i].field + "=" - + this._prefixQueryFields[i].values[j] + "&" + - this._prefixQueryFields[i].opName + "=" + this._prefixQueryFields[i].opValue; - } - } - this._prefixQuery+="&"; - } - - public ngOnInit() { - this.searchPage.refineFields = this.refineFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - this.sub = this.route.queryParams.subscribe(params => { - this.searchUtils.keyword = (params['keyword']?params['keyword']:''); - this.searchUtils.page = (params['page']=== undefined)?1:+params['page']; - this.filters = this.createFilters(); - - var queryParameters = this.searchPage.getIndexQueryParametersFromUrl(params); - this._getResults(queryParameters, false, this.searchUtils.page, this.searchUtils.size); - }); - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } } - private _getResults(parameters:string,refine:boolean, page: number, size: number){ - this.csvParams = parameters+this.resourcesQuery+"&type=datasources"; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - this.subResults = this._searchDataprovidersService.searchEntityRegistries(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, []).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Entity Registries: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - this.searchPage.checkSelectedFilters(this.filters); - this.searchPage.updateBaseUrlWithParameters(this.filters); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - - } - ); - } - private setFilters(){ - //TODO set filters from - } - - public queryChanged($event) { - var parameters = $event.index; - console.info("queryChanged: Execute search query "+parameters); - this._getResults(parameters, false, this.searchUtils.page, this.searchUtils.size); - } - private createFilters():Filter[] { - var filter_names=["Type","Compatibility Level"]; - var filter_ids=["datasourcetypename","datasourcecompatibilityname"]; - var searchFields = new SearchFields(); - var filter_original_ids = searchFields.ENTITY_REGISTRIES_FIELDS; - var value_names=[ - ["Funder","Registry of repositories","Scholarly Comm. Infrastructure","Registry","Information Space","Web Source"], - - ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]]; - - var value_original_ids=[ - ["Funder database","Registry of repositories","Scholarly Comm. Infrastructure","Registry","Information Space","Web Source"], - //["entityregistry::projects","entityregistry::repositories","scholarcomminfra","entityregistry","infospace","websource"], - //["driver","openaire2.0", "driver-openaire2.0", "openaire3.0","openaire2.0_data"] - ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]]; - - var filters: Filter[] =[]; - for(var i =0 ; i < filter_names.length;i++){ - var values:Value[] = []; - for(var j =0 ; j < value_names[i].length;j++){ - var value:Value = {name: value_names[i][j], id: value_original_ids[i][j], number:j, selected:false} - values.push(value); - } - var filter:Filter = {title: filter_names[i], filterId: filter_ids[i], originalFilterId: filter_original_ids[i], values : values, countSelectedValues:0, "filterOperator": 'or' }; - filters.push(filter); - } - return filters; - } -} diff --git a/portal-2/src/app/searchPages/dataProviders/entityRegistries.module.ts b/portal-2/src/app/searchPages/dataProviders/entityRegistries.module.ts deleted file mode 100644 index f1a2a277..00000000 --- a/portal-2/src/app/searchPages/dataProviders/entityRegistries.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ EntityRegistriesRoutingModule} from './entityRegistries-routing.module'; -import{SearchEntityRegistriesComponent} from './entityRegistries.component'; - -import {SearchResultsModule } from '../searchUtils/searchResults.module'; - -import {DataProvidersServiceModule} from '../../services/dataProvidersService.module'; -import {SearchFormModule} from '../searchUtils/searchForm.module'; -//import {SearchFilterModalModule} from '../searchUtils/searchFilterModal.module'; -import {SearchPageModule} from '../searchUtils/searchPage.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - DataProvidersServiceModule, - SearchFormModule, SearchResultsModule, EntityRegistriesRoutingModule, SearchPageModule - - ], - declarations: [ - SearchEntityRegistriesComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - SearchEntityRegistriesComponent - ] -}) -export class EntityRegistriesModule { } diff --git a/portal-2/src/app/searchPages/dataProviders/entityRegistriesTable-routing.module.ts b/portal-2/src/app/searchPages/dataProviders/entityRegistriesTable-routing.module.ts deleted file mode 100644 index 64986745..00000000 --- a/portal-2/src/app/searchPages/dataProviders/entityRegistriesTable-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{SearchEntityRegistriesTableComponent} from './entityRegistriesTable.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: SearchEntityRegistriesTableComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class EntityRegistriesTableRoutingModule { } diff --git a/portal-2/src/app/searchPages/dataProviders/entityRegistriesTable.component.ts b/portal-2/src/app/searchPages/dataProviders/entityRegistriesTable.component.ts deleted file mode 100644 index c4c5a453..00000000 --- a/portal-2/src/app/searchPages/dataProviders/entityRegistriesTable.component.ts +++ /dev/null @@ -1,206 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; - -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; - -import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageTableViewComponent } from '../searchUtils/searchPageTableView.component'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - -@Component({ - selector: 'search-entity-registries-table', - template: ` - - - - - ` - -}) -export class SearchEntityRegistriesTableComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - public baseUrl:string; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public sub: any; public subResults: any; - public _location:Location; - public searchFields:SearchFields = new SearchFields(); - public refineFields: string[] = this.searchFields.ENTITY_REGISTRIES_FIELDS; - public disableForms: boolean = false; - - @ViewChild (SearchPageTableViewComponent) searchPage : SearchPageTableViewComponent ; - - constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService ) { - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - } - - public ngOnInit() { - this.searchPage.refineFields = this.refineFields; - this.sub = this.route.queryParams.subscribe(params => { - this.searchUtils.keyword = (params['keyword']?params['keyword']:''); - //this.searchUtils.page = (params['page']=== undefined)?1:+params['page']; - this.filters = this.createFilters(); - - this.searchPage.getParametersFromUrl(params); - this._getResults("", false, this.searchUtils.page); - }); - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } } - private _getResults(parameters:string,refine:boolean, page: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - let size: number = 0; - this.subResults = this._searchDataprovidersService.searchEntityRegistriesTable().subscribe( - data => { - size = data; - if(size > 0) { - this.subResults = this._searchDataprovidersService.searchEntityRegistries("",null, page, size, []).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Entity Registries [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - this.searchPage.checkSelectedFilters(this.filters); - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - this.disableForms = false; - - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - this.disableForms = false; - - } - ); - } else { - this.searchPage.checkSelectedFilters(this.filters); - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.NONE; - this.disableForms = false; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); -/* - this.subResults = this._searchDataprovidersService.searchEntityRegistries(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, []).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Entity Registries: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - this.searchPage.checkSelectedFilters(this.filters); - this.searchPage.updateBaseUrlWithParameters(this.filters); - var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = errorCodes.ERROR; - //this.searchPage.closeLoading(); - this.disableForms = false; - - } - ); -*/ - } - private setFilters(){ - //TODO set filters from - } - - - private createFilters():Filter[] { - var filter_names=["Type","Compatibility Level"]; - var filter_ids=["datasourcetypename","datasourcecompatibilityname"]; - var searchFields = new SearchFields(); - var filter_original_ids = searchFields.ENTITY_REGISTRIES_FIELDS; - var value_names=[ - ["Funder database","Registry of repositories","Scholarly Comm. Infrastructure","Registry","Information Space","Web Source"], - - ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]]; - - var value_original_ids=[ - ["Funder database","Registry of repositories","Scholarly Comm. Infrastructure","Registry","Information Space","Web Source"], - //["entityregistry::projects","entityregistry::repositories","scholarcomminfra","entityregistry","infospace","websource"], - //["driver","openaire2.0", "driver-openaire2.0", "openaire3.0","openaire2.0_data"] - ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]]; - - var filters: Filter[] =[]; - for(var i =0 ; i < filter_names.length;i++){ - var values:Value[] = []; - for(var j =0 ; j < value_names[i].length;j++){ - var value:Value = {name: value_names[i][j], id: value_original_ids[i][j], number:j, selected:false} - values.push(value); - } - var filter:Filter = {title: filter_names[i], filterId: filter_ids[i], originalFilterId: filter_original_ids[i], values : values, countSelectedValues:0, "filterOperator": 'or' }; - filters.push(filter); - } - return filters; - } -} diff --git a/portal-2/src/app/searchPages/dataProviders/entityRegistriesTable.module.ts b/portal-2/src/app/searchPages/dataProviders/entityRegistriesTable.module.ts deleted file mode 100644 index 9d9b824c..00000000 --- a/portal-2/src/app/searchPages/dataProviders/entityRegistriesTable.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ EntityRegistriesTableRoutingModule} from './entityRegistriesTable-routing.module'; -import{SearchEntityRegistriesTableComponent} from './entityRegistriesTable.component'; - -//import {DatasourceTableViewModule } from '../searchUtils/datasourceTableView.module'; - -import {DataProvidersServiceModule} from '../../services/dataProvidersService.module'; -import {SearchFormModule} from '../searchUtils/searchForm.module'; -//import {SearchFilterModalModule} from '../searchUtils/searchFilterModal.module'; -import {SearchPageTableViewModule} from '../searchUtils/searchPageTableView.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - DataProvidersServiceModule, - SearchFormModule, EntityRegistriesTableRoutingModule, SearchPageTableViewModule - - ], - declarations: [ - SearchEntityRegistriesTableComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - SearchEntityRegistriesTableComponent - ] -}) -export class EntityRegistriesTableModule { } diff --git a/portal-2/src/app/searchPages/dataProviders/journals-routing.module.ts b/portal-2/src/app/searchPages/dataProviders/journals-routing.module.ts deleted file mode 100644 index d9c3de9d..00000000 --- a/portal-2/src/app/searchPages/dataProviders/journals-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{SearchJournalsComponent} from './journals.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: SearchJournalsComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class JournalsRoutingModule { } diff --git a/portal-2/src/app/searchPages/dataProviders/journals.component.ts b/portal-2/src/app/searchPages/dataProviders/journals.component.ts deleted file mode 100644 index 265d0126..00000000 --- a/portal-2/src/app/searchPages/dataProviders/journals.component.ts +++ /dev/null @@ -1,181 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; - -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; - -import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageComponent } from '../searchUtils/searchPage.component'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - -@Component({ - selector: 'search-journals', - template: ` - - - - ` - -}) -export class SearchJournalsComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - public baseUrl:string; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public sub: any; public subResults: any; - public _location:Location; - public searchFields:SearchFields = new SearchFields(); - public refineFields: string[] = this.searchFields.JOURNAL_FIELDS; - public fieldIdsMap= this.searchFields.DATASOURCE_FIELDS; - public _prefixQueryFields: {field:string,opName:string,opValue:string,values:string[]}[] =[{field:"compatibility",opName:"cm",opValue:"not", values:["UNKNOWN","hostedBy","notCompatible"]},{field:"type",opName:"tp",opValue:"not",values: ["other"]}]; - // ["entityregistry","entityregistry::projects","entityregistry::repositories"]}]; - public _prefixQuery: string = ""; - - public CSV: any = { "columnNames": [ "Title", "Type", "Coutries", "Compatibility" ], - "export":[] - }; - public CSVDownloaded = false; - public resourcesQuery = '&query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) and (datasourcetypeuiid exact "pubsrepository::journal" or datasourcetypeuiid exact "aggregator::pubsrepository::journals" ))'; - //"&query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other))"; - public csvParams: string; - public disableForms: boolean = false; - - @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ; - - constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService ) { - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.baseUrl = OpenaireProperties.getLinkToSearchJournals(); - for(var i = 0; i < this._prefixQueryFields.length; i++ ){ - for(var j =0; j < this._prefixQueryFields[i].values.length; j++){ - this._prefixQuery+="&" + this._prefixQueryFields[i].field + "=" - + this._prefixQueryFields[i].values[j] + "&" + - this._prefixQueryFields[i].opName + "=" + this._prefixQueryFields[i].opValue; - } - } - this._prefixQuery+="&"; - } - - public ngOnInit() { - this.searchPage.refineFields = this.refineFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - this.sub = this.route.queryParams.subscribe(params => { - this.searchUtils.keyword = (params['keyword']?params['keyword']:''); - this.searchUtils.page = (params['page']=== undefined)?1:+params['page']; - this.filters = this.createFilters(); - var queryParameters = this.searchPage.getIndexQueryParametersFromUrl(params); - console.info("|"+queryParameters+"|"); - this._getResults(queryParameters, false, this.searchUtils.page, this.searchUtils.size); - }); - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } } - private _getResults(parameters:string,refine:boolean, page: number, size: number){ - this.csvParams = parameters+this.resourcesQuery+"&type=datasources"; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - this.subResults = this._searchDataprovidersService.searchJournals(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, []).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Journals: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - this.searchPage.checkSelectedFilters(this.filters); - this.searchPage.updateBaseUrlWithParameters(this.filters); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - - } - ); - } - private setFilters(){ - //TODO set filters from - } - - public queryChanged($event) { - var parameters = $event.index; - console.info("queryChanged: Execute search query "+parameters); - - this._getResults(parameters, false, this.searchUtils.page, this.searchUtils.size); - } - private createFilters():Filter[] { - var filter_names=["Type","Compatibility Level"]; - var filter_ids=["datasourcetypeuiid","datasourcecompatibilityname"]; - var searchFields = new SearchFields(); - var filter_original_ids = searchFields.JOURNAL_FIELDS; - var value_names=[ - /*[ - "Institutional Publication Repository","Thematic Publication Repository", "Other Publication Repository", - "Institutional Repositories Aggregators", - "Thematic Repositories Aggregators", "Other Repositories Aggregators", - "Data Repositories", "Data Repositories Aggregators", "Journals", "Journals Aggregators", "CRIS Systems", "Publication Catalogues"], - */ - ["Journal", "Journal Aggregator\/Publisher"], - ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]]; - - var value_original_ids=[ - ["pubsrepository::journal", "aggregator::pubsrepository::journals"], - //["driver","openaire2.0", "driver-openaire2.0", "openaire3.0","openaire2.0_data"] - ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]]; - var filters: Filter[] =[]; - for(var i =0 ; i < filter_names.length;i++){ - var values:Value[] = []; - for(var j =0 ; j < value_names[i].length;j++){ - var value:Value = {name: value_names[i][j], id: value_original_ids[i][j], number:j, selected:false} - values.push(value); - } - var filter:Filter = {title: filter_names[i], filterId: filter_ids[i], originalFilterId: filter_original_ids[i], values : values, countSelectedValues:0, "filterOperator": 'or' }; - filters.push(filter); - } - return filters; - } -} diff --git a/portal-2/src/app/searchPages/dataProviders/journals.module.ts b/portal-2/src/app/searchPages/dataProviders/journals.module.ts deleted file mode 100644 index c8c76b1e..00000000 --- a/portal-2/src/app/searchPages/dataProviders/journals.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ JournalsRoutingModule} from './journals-routing.module'; -import{SearchJournalsComponent} from './journals.component'; - -import {SearchResultsModule } from '../searchUtils/searchResults.module'; - -import {DataProvidersServiceModule} from '../../services/dataProvidersService.module'; -import {SearchFormModule} from '../searchUtils/searchForm.module'; -//import {SearchFilterModalModule} from '../searchUtils/searchFilterModal.module'; -import {SearchPageModule} from '../searchUtils/searchPage.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - DataProvidersServiceModule, - SearchFormModule, SearchResultsModule, JournalsRoutingModule, SearchPageModule - - ], - declarations: [ - SearchJournalsComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - SearchJournalsComponent - ] -}) -export class JournalsModule { } diff --git a/portal-2/src/app/searchPages/dataProviders/journalsTable-routing.module.ts b/portal-2/src/app/searchPages/dataProviders/journalsTable-routing.module.ts deleted file mode 100644 index de701dcd..00000000 --- a/portal-2/src/app/searchPages/dataProviders/journalsTable-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{SearchJournalsTableComponent} from './journalsTable.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: SearchJournalsTableComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - } , canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class JournalsTableRoutingModule { } diff --git a/portal-2/src/app/searchPages/dataProviders/journalsTable.component.ts b/portal-2/src/app/searchPages/dataProviders/journalsTable.component.ts deleted file mode 100644 index 4322a268..00000000 --- a/portal-2/src/app/searchPages/dataProviders/journalsTable.component.ts +++ /dev/null @@ -1,191 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; - -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; - -import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageTableViewComponent } from '../searchUtils/searchPageTableView.component'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - -@Component({ - selector: 'search-journals-table', - template: ` - - - - ` - -}) -export class SearchJournalsTableComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - public baseUrl:string; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public sub: any; public subResults: any; - public _location:Location; - public searchFields:SearchFields = new SearchFields(); - public refineFields: string[] = this.searchFields.JOURNAL_FIELDS; - - /*public CSV: any = { "columnNames": [ "Title", "Type", "Coutries", "Compatibility" ], - "export":[] - }; - public CSVDownloaded = false; - public csvParams: string; - public resourcesQuery = "&query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other))";*/ - - public disableForms: boolean = false; - - @ViewChild (SearchPageTableViewComponent) searchPage : SearchPageTableViewComponent ; - - constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService ) { - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.baseUrl = OpenaireProperties.getLinkToSearchJournalsTable(); - } - - public ngOnInit() { - this.searchPage.refineFields = this.refineFields; - this.sub = this.route.queryParams.subscribe(params => { - this.searchUtils.keyword = (params['keyword']?params['keyword']:''); - //this.searchUtils.page = (params['page']=== undefined)?1:+params['page']; - this.filters = this.createFilters(); - this.searchPage.getParametersFromUrl(params); - this._getResults(); - }); - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } } - private _getResults(){ - //this.csvParams = this.resourcesQuery+"&type=datasources"; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - let size: number = 0; - this.subResults = this._searchDataprovidersService.searchJournalsTable().subscribe( - data => { - size = data; - if(size > 0) { - this.subResults = this._searchDataprovidersService.searchJournals("", null, 1, size, []).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Journals [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - this.searchPage.checkSelectedFilters(this.filters); - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - this.disableForms = false; - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - this.disableForms = false; - - } - ); - } else { - this.searchPage.checkSelectedFilters(this.filters); - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.NONE; - this.disableForms = false; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - - } - private setFilters(){ - //TODO set filters from - } - - private createFilters():Filter[] { - var filter_names=["Type","Compatibility Level"]; - var filter_ids=["datasourcetypeuiid","datasourcecompatibilityname"]; - var searchFields = new SearchFields(); - var filter_original_ids = searchFields.JOURNAL_FIELDS; - var value_names=[ - /*[ - "Institutional Publication Repository","Thematic Publication Repository", "Other Publication Repository", - "Institutional Repositories Aggregators", - "Thematic Repositories Aggregators", "Other Repositories Aggregators", - "Data Repositories", "Data Repositories Aggregators", "Journals", "Journals Aggregators", "CRIS Systems", "Publication Catalogues"], - */ - ["Journal", "Journal Aggregator\/Publisher"], - - - - - ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]]; - - var value_original_ids=[ - ["pubsrepository::journal", "aggregator::pubsrepository::journals"], - //["driver","openaire2.0", "driver-openaire2.0", "openaire3.0","openaire2.0_data"] - ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]]; - var filters: Filter[] =[]; - for(var i =0 ; i < filter_names.length;i++){ - var values:Value[] = []; - for(var j =0 ; j < value_names[i].length;j++){ - var value:Value = {name: value_names[i][j], id: value_original_ids[i][j], number:j, selected:false} - values.push(value); - } - var filter:Filter = {title: filter_names[i], filterId: filter_ids[i], originalFilterId: filter_original_ids[i], values : values, countSelectedValues:0, "filterOperator": 'or' }; - filters.push(filter); - } - return filters; - } -} diff --git a/portal-2/src/app/searchPages/dataProviders/journalsTable.module.ts b/portal-2/src/app/searchPages/dataProviders/journalsTable.module.ts deleted file mode 100644 index 307dcb89..00000000 --- a/portal-2/src/app/searchPages/dataProviders/journalsTable.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ JournalsTableRoutingModule} from './journalsTable-routing.module'; -import{SearchJournalsTableComponent} from './journalsTable.component'; - -//import {DatasourceTableViewModule } from '../searchUtils/datasourceTableView.module'; - -import {DataProvidersServiceModule} from '../../services/dataProvidersService.module'; -import {SearchFormModule} from '../searchUtils/searchForm.module'; -//import {SearchFilterModalModule} from '../searchUtils/searchFilterModal.module'; -import {SearchPageTableViewModule} from '../searchUtils/searchPageTableView.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - DataProvidersServiceModule, - SearchFormModule, JournalsTableRoutingModule, SearchPageTableViewModule - - ], - declarations: [ - SearchJournalsTableComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - SearchJournalsTableComponent - ] -}) -export class JournalsTableModule { } diff --git a/portal-2/src/app/searchPages/find/mainSearch-routing.module.ts b/portal-2/src/app/searchPages/find/mainSearch-routing.module.ts deleted file mode 100644 index 69df52f5..00000000 --- a/portal-2/src/app/searchPages/find/mainSearch-routing.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{SearchComponent} from './search.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: SearchComponent, canActivate: [FreeGuard], canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class MainSearchRoutingModule { } diff --git a/portal-2/src/app/searchPages/find/mainSearch.module.ts b/portal-2/src/app/searchPages/find/mainSearch.module.ts deleted file mode 100644 index fe01546d..00000000 --- a/portal-2/src/app/searchPages/find/mainSearch.module.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import{MainSearchRoutingModule} from './mainSearch-routing.module'; -import{SearchComponent} from './search.component'; - -import {SearchResultsModule } from '../searchUtils/searchResults.module'; - -import {DataProvidersServiceModule} from '../../services/dataProvidersService.module'; -import {DatasetsServiceModule} from '../../services/datasetsService.module'; -import {SoftwareServiceModule} from '../../services/softwareService.module'; -import {ProjectsServiceModule} from '../../services/projectsService.module'; -import {PublicationsServiceModule} from '../../services/publicationsService.module'; -import {OrganizationsServiceModule} from '../../services/organizationsService.module'; -import {BrowseEntitiesModule} from '../searchUtils/browseEntities.module'; -import {SearchFormModule} from '../searchUtils/searchForm.module'; -//import {SearchFilterModalModule} from '../searchUtils/searchFilterModal.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PiwikServiceModule} from '../../utils/piwik/piwikService.module'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, RouterModule, - DataProvidersServiceModule, DatasetsServiceModule, SoftwareServiceModule, ProjectsServiceModule, - PublicationsServiceModule, OrganizationsServiceModule, - BrowseEntitiesModule, SearchFormModule, SearchResultsModule, MainSearchRoutingModule, PiwikServiceModule - - ], - declarations: [ - SearchComponent - ], - providers:[FreeGuard, PreviousRouteRecorder - ], - exports: [ - SearchComponent - ] -}) -export class MainSearchModule { } diff --git a/portal-2/src/app/searchPages/find/search.component.html b/portal-2/src/app/searchPages/find/search.component.html deleted file mode 100644 index 16d936d9..00000000 --- a/portal-2/src/app/searchPages/find/search.component.html +++ /dev/null @@ -1,241 +0,0 @@ - - -
    -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - -
    - -
    -
    -
    -
    diff --git a/portal-2/src/app/searchPages/find/search.component.ts b/portal-2/src/app/searchPages/find/search.component.ts deleted file mode 100644 index 056c34e1..00000000 --- a/portal-2/src/app/searchPages/find/search.component.ts +++ /dev/null @@ -1,400 +0,0 @@ -import {Component, Input, Output, EventEmitter, ViewChild, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {ActivatedRoute, Router} from '@angular/router'; -import {Location} from '@angular/common'; - -import { Meta, MetaDefinition} from '../../../angular2-meta'; - -import { FetchPublications } from '../../utils/fetchEntitiesClasses/fetchPublications.class'; -import { FetchDataproviders } from '../../utils/fetchEntitiesClasses/fetchDataproviders.class'; -import { FetchProjects } from '../../utils/fetchEntitiesClasses/fetchProjects.class'; -import { FetchDatasets } from '../../utils/fetchEntitiesClasses/fetchDatasets.class'; -import { FetchSoftware } from '../../utils/fetchEntitiesClasses/fetchSoftware.class'; -import { FetchOrganizations } from '../../utils/fetchEntitiesClasses/fetchOrganizations.class'; - -import {SearchPublicationsService} from '../../services/searchPublications.service'; -import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; -import {SearchProjectsService} from '../../services/searchProjects.service'; -import {SearchDatasetsService} from '../../services/searchDatasets.service'; -import {SearchSoftwareService} from '../../services/searchSoftware.service'; -import {SearchOrganizationsService} from '../../services/searchOrganizations.service'; - -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {ErrorCodes} from '../../utils/properties/openaireProperties'; -import {RouterHelper} from '../../utils/routerHelper.class'; -import {RefineFieldResultsService} from '../../services/refineFieldResults.service'; -import {PiwikService} from '../../utils/piwik/piwik.service'; -import { ConfigurationService } from '../../utils/configuration/configuration.service'; - -@Component({ - changeDetection: ChangeDetectionStrategy.Default, - encapsulation: ViewEncapsulation.Emulated, - selector: 'search-find', - templateUrl: 'search.component.html' -}) -export class SearchComponent { - public sub: any; piwiksub: any; - public reloadPublications: boolean; - public reloadDatasets: boolean; - public reloadSoftware: boolean; - public reloadProjects: boolean; - public reloadDataproviders: boolean; - public reloadOrganizations: boolean; - - - public pageTitle = "Search in OpenAIRE" - public keyword:string = ""; - public publications:string[]; - public datasets:string[]; - public software:string[]; - public projectsTab:string[]; - public dataproviders:string[]; - public organizations:string[]; - - public activeTab = "publications"; - public linkToSearchPublications = ""; - public linkToSearchProjects = ""; - public linkToSearchDataproviders = ""; - public linkToSearchDatasets = ""; - public linkToSearchSoftware = ""; - public linkToSearchOrganizations = ""; - - public fetchPublications : FetchPublications; - public fetchDataproviders : FetchDataproviders; - public fetchProjects : FetchProjects; - public fetchDatasets: FetchDatasets; - public fetchSoftware: FetchSoftware; - public fetchOrganizations: FetchOrganizations; - - public searchFields:SearchFields = new SearchFields(); - public errorCodes:ErrorCodes = new ErrorCodes(); - public routerHelper:RouterHelper = new RouterHelper(); - - public publicationsSize:any = null; - public datasetsSize:any = null; - public softwareSize:any = null; - public fundersSize:any = null; - public projectsSize:any = null; - public datasourcesSize:any = null; - showPublications:boolean= false; - showDatasets:boolean= false; - showSoftware:boolean=false; - showProjects:boolean= false; - showDataProviders:boolean= false; - showOrganizations:boolean= false; -public subPub;public subData;public subProjects;public subOrg; public subDataPr; - constructor ( private route: ActivatedRoute, - private _router: Router, - private _searchPublicationsService: SearchPublicationsService, - private _searchDataprovidersService: SearchDataprovidersService, - private _searchProjectsService: SearchProjectsService, - private _searchDatasetsService: SearchDatasetsService, - private _searchSoftwareService: SearchSoftwareService, - private _searchOrganizationsService: SearchOrganizationsService, - private _refineFieldResultsService:RefineFieldResultsService, - private location: Location, private _meta: Meta,private _piwikService:PiwikService, - private config: ConfigurationService ) { - this.fetchPublications = new FetchPublications(this._searchPublicationsService); - this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService); - this.fetchProjects = new FetchProjects(this._searchProjectsService); - this.fetchDatasets = new FetchDatasets( this._searchDatasetsService); - this.fetchSoftware = new FetchSoftware(this._searchSoftwareService); - this.fetchOrganizations = new FetchOrganizations( this._searchOrganizationsService); - - var description = "open access, research, scientific publication, European Commission, EC, FP7, ERC, Horizon 2020, H2020, search, projects "; - - var title = "OpenAIRE | Search publications, research data, projects... | OpenAIRE"; - - var url = OpenaireProperties.getBaseLink()+this._router.url; - this._meta.setTitle(title); - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - this._meta.updateProperty("og:title", title); - this._meta.updateProperty("og:url", url); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView("OpenAIRE |Search publications, research data, projects...").subscribe(); - - } - - - - } - - public ngOnInit() { - const entityOne = this.config.isEntityEnabled("publication"); - const entityTwo = this.config.isEntityEnabled("dataset"); - const entityThree = this.config.isEntityEnabled("project"); - const entityFour = this.config.isEntityEnabled("organization"); - const entityFive = this.config.isEntityEnabled("datasource"); - const entitySix = this.config.isEntityEnabled("software"); - const example = Observable.zip(entityOne,entityTwo,entityThree,entityFour,entityFive,entitySix); - -//wait until all observables have emitted a value then emit all as an array - this.sub = this.route.queryParams.subscribe(params => { - const subscribe = example.subscribe(data => { - this.showPublications = data[0]; - this.showDatasets = data[1]; - this.showProjects = data[2]; - this.showOrganizations = data[3]; - this.showDataProviders = data[4]; - this.showSoftware = data[5]; - console.log(data) - this.keyword = (params['keyword'])?params['keyword']:""; - if(this.keyword !=null && this.keyword.length > 0){ - this.reloadTabs(); - //if showPublications == false will set another entity as the first - if(this.showPublications){ - this.activeTab = "publications"; - this.searchPublications(); - }else if(this.showDatasets){ - this.activeTab = "research data"; - this.searchDatasets(); - }else if(this.showSoftware){ - this.activeTab = "software"; - this.searchSoftware(); - }else if(this.showProjects){ - this.activeTab = "projects"; - this.searchProjects(); - }else if(this.showDataProviders){ - this.activeTab = "content providers"; - this.searchDataProviders(); - }else if(this.showOrganizations){ - this.activeTab = "organizations"; - this.searchOrganizations(); - } - this.count(); - } - }); - }); - - } - public ngOnDestroy() { - this.sub.unsubscribe(); - if(this.piwiksub){ - this.piwiksub.unsubscribe(); -} - if(this.keyword !=null && this.keyword.length > 0){ - if(this.subPub){ - this.subPub.unsubscribe(); - } - if(this.subData){ - this.subData.unsubscribe(); - } - if(this.subProjects){ - this.subProjects.unsubscribe(); - } - if(this.subOrg){ - this.subOrg.unsubscribe(); - } - if(this.subDataPr){ - this.subDataPr.unsubscribe(); - } - - } - } - public searchPublications() { - this.activeTab = "publications"; - if( this.reloadPublications && - this.fetchPublications.searchUtils.status != this.errorCodes.NONE && - this.fetchPublications.searchUtils.status != this.errorCodes.ERROR) { - this.reloadPublications = false; - this.fetchPublications.getResultsByKeyword(this.keyword, 1, 10); - this.linkToSearchPublications = OpenaireProperties.getLinkToSearchPublications();// + "?keyword=" + this.keyword; - } - } - public searchDatasets() { - this.activeTab = "research data"; - if(this.reloadDatasets && - this.fetchDatasets.searchUtils.status != this.errorCodes.NONE && - this.fetchDatasets.searchUtils.status != this.errorCodes.ERROR) { - this.reloadDatasets = false; - this.fetchDatasets.getResultsByKeyword(this.keyword, 1, 10); - this.linkToSearchDatasets = OpenaireProperties.getLinkToSearchDatasets();// + "?keyword=" + this.keyword; - } - } - public searchSoftware() { - this.activeTab = "software"; - if(this.reloadSoftware && - ( this.fetchSoftware.searchUtils.status == this.errorCodes.LOADING || - this.fetchSoftware.searchUtils.status == this.errorCodes.DONE )) { - this.reloadSoftware = false; - this.fetchSoftware.getResultsByKeyword(this.keyword, 1, 10); - this.linkToSearchSoftware = OpenaireProperties.getLinkToSearchSoftware();// + "?keyword=" + this.keyword; - } - } - public searchProjects() { - this.activeTab = "projects"; - if(this.reloadProjects && - this.fetchProjects.searchUtils.status != this.errorCodes.NONE && - this.fetchProjects.searchUtils.status != this.errorCodes.ERROR) { - this.reloadProjects = false; - this.fetchProjects.getResultsByKeyword(this.keyword, 1, 10); - this.linkToSearchProjects = OpenaireProperties.getLinkToSearchProjects();// + "?keyword=" + this.keyword; - } - } - public searchDataProviders() { - this.activeTab = "content providers"; - if( this.reloadDataproviders && - this.fetchDataproviders.searchUtils.status != this.errorCodes.NONE && - this.fetchDataproviders.searchUtils.status != this.errorCodes.ERROR) { - this.reloadDataproviders = false; - this.fetchDataproviders.getResultsByKeyword(this.keyword, 1, 10); - this.linkToSearchDataproviders = OpenaireProperties.getLinkToSearchDataProviders();// + "?keyword=" + this.keyword; - } - } - public searchOrganizations() { - this.activeTab = "organizations"; - if( this.reloadOrganizations && - this.fetchOrganizations.searchUtils.status != this.errorCodes.NONE && - this.fetchOrganizations.searchUtils.status != this.errorCodes.ERROR) { - this.reloadOrganizations = false; - this.fetchOrganizations.getResultsByKeyword(this.keyword, 1, 10); - this.linkToSearchOrganizations = OpenaireProperties.getLinkToSearchOrganizations();// + "?keyword=" + this.keyword; - } - } - - - public keywordChanged($event){ - - this.keyword = $event.value; - console.info("Search Find: search with keyword \"" + this.keyword + "\"" ); - this.location.go(location.pathname,"?keyword=" + this.keyword); - this.reloadTabs(); - if(this.activeTab == "publications") { - this.searchPublications(); - } - if(this.activeTab == "projects") { - this.searchProjects(); - } - if(this.activeTab == "content providers") { - this.searchDataProviders(); - } - if(this.activeTab == "research data") { - this.searchDatasets(); - } - if(this.activeTab == "software") { - this.searchSoftware(); - } - if(this.activeTab == "organizations") { - this.searchOrganizations(); - } - - this.count(); - } - - private count() { - if(this.activeTab != "publications" && this.showPublications){ - this.fetchPublications.searchUtils.status = this.errorCodes.LOADING; - this.fetchPublications.results = []; - this.subPub = this._searchPublicationsService.numOfSearchPublications(this.keyword).subscribe( - data => { - console.log("Count results: "+data); - this.fetchPublications.searchUtils.totalResults = data; - this.fetchPublications.searchUtils.status = this.errorCodes.DONE; - if(this.fetchPublications.searchUtils.totalResults == 0) { - this.fetchPublications.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - this.fetchPublications.searchUtils.status = this.errorCodes.ERROR; - } - ); - } - if(this.activeTab != "research data" && this.showDatasets){ - this.fetchDatasets.searchUtils.status = this.errorCodes.LOADING; - this.fetchDatasets.results = []; - this.subData = this._searchDatasetsService.numOfSearchDatasets(this.keyword).subscribe( - data => { - this.fetchDatasets.searchUtils.totalResults = data; - this.fetchDatasets.searchUtils.status = this.errorCodes.DONE; - if(this.fetchDatasets.searchUtils.totalResults == 0) { - this.fetchDatasets.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - this.fetchDatasets.searchUtils.status = this.errorCodes.ERROR; - } - ); - } - if(this.activeTab != "software" && this.showSoftware){ - this.fetchSoftware.searchUtils.status = this.errorCodes.LOADING; - this.fetchSoftware.results = []; - this.subData = this._searchSoftwareService.numOfSearchSoftware(this.keyword).subscribe( - data => { - this.fetchSoftware.searchUtils.totalResults = data; - this.fetchSoftware.searchUtils.status = this.errorCodes.DONE; - if(this.fetchSoftware.searchUtils.totalResults == 0) { - this.fetchSoftware.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - if(err.status == '404') { - this.fetchSoftware.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.fetchSoftware.searchUtils.status = this.errorCodes.ERROR; - } else { - this.fetchSoftware.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - //this.fetchSoftware.searchUtils.status = this.errorCodes.ERROR; - } - ); - } - if(this.activeTab != "projects" && this.showProjects){ - this.fetchProjects.searchUtils.status = this.errorCodes.LOADING; - this.fetchProjects.results = []; - this.subProjects = this._searchProjectsService.numOfSearchProjects(this.keyword).subscribe( - data => { - this.fetchProjects.searchUtils.totalResults = data; - this.fetchProjects.searchUtils.status = this.errorCodes.DONE; - if(this.fetchProjects.searchUtils.totalResults == 0) { - this.fetchProjects.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - this.fetchProjects.searchUtils.status = this.errorCodes.ERROR; - } - ); - } - if(this.activeTab != "content providers" && this.showDataProviders){ - this.fetchDataproviders.results = []; - this.fetchDataproviders.getNumForSearch(this.keyword); - } - if(this.activeTab != "organizations" && this.showOrganizations){ - this.fetchOrganizations.searchUtils.status = this.errorCodes.LOADING; - this.fetchOrganizations.results = []; - this.subOrg = this._searchOrganizationsService.numOfSearchOrganizations(this.keyword).subscribe( - data => { - this.fetchOrganizations.searchUtils.totalResults = data; - this.fetchOrganizations.searchUtils.status = this.errorCodes.DONE; - if(this.fetchOrganizations.searchUtils.totalResults == 0) { - this.fetchOrganizations.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - this.fetchOrganizations.searchUtils.status = this.errorCodes.ERROR; - - } - ); - } - - - } - - private reloadTabs() { - this.reloadPublications = true; - this.reloadDatasets = true; - this.reloadSoftware = true; - this.reloadProjects = true; - this.reloadDataproviders = true; - this.reloadOrganizations = true; - } - - - -} diff --git a/portal-2/src/app/searchPages/searchUtils/advancedSearchForm.component.html b/portal-2/src/app/searchPages/searchUtils/advancedSearchForm.component.html deleted file mode 100644 index 938ca3cd..00000000 --- a/portal-2/src/app/searchPages/searchUtils/advancedSearchForm.component.html +++ /dev/null @@ -1,56 +0,0 @@ - -
    - - - - - - - - - - - - - - - - -
    Search for: - - - - - - - - Yes
    -
    - - No
    -
    -
    - - - - - - - - -
    -
    - -
    - -
    diff --git a/portal-2/src/app/searchPages/searchUtils/advancedSearchForm.component.ts b/portal-2/src/app/searchPages/searchUtils/advancedSearchForm.component.ts deleted file mode 100644 index 1e7ef861..00000000 --- a/portal-2/src/app/searchPages/searchUtils/advancedSearchForm.component.ts +++ /dev/null @@ -1,95 +0,0 @@ -import {Component, Input, Output, EventEmitter, ElementRef} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import { Subject } from 'rxjs/Subject'; - -import {AdvancedField, OPERATOR} from '../searchUtils/searchHelperClasses.class'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {Dates} from '../../utils/string-utils.class'; - -@Component({ - selector: 'advanced-search-form', - templateUrl: 'advancedSearchForm.component.html' -}) -export class AdvancedSearchFormComponent { - @Input() entityType; - @Input() fieldIds: string[]; - @Input() fieldIdsMap; - @Input() selectedFields:AdvancedField[]; - @Input() isDisabled: boolean = false; - - @Output() queryChange = new EventEmitter(); - newFieldId:string; - newFieldName:string; - fieldList:{[id:string]:any[]} = {}; - public searchFields:SearchFields = new SearchFields(); - - public operators: [{name:string, id:string}] = this.searchFields.ADVANCED_SEARCH_OPERATORS; - constructor () { - } - - ngOnInit() { - for(var i = 0; i < this.fieldIds.length; i++){ - this.fieldList[this.fieldIds[i]]=[]; - } - this.newFieldId = this.fieldIds[0]; - this.newFieldName = this.fieldIdsMap[this.newFieldId].name; - } - - queryChanged() { - this.queryChange.emit({ - // selectedFields: this.selectedFields, - // selectedQuantifiers: this.selectedQuantifiers, - // keywords: this.keywords - }); - } - - addField() { - this.newFieldId = this.fieldIds[0]; - var type = this.fieldIdsMap[this.newFieldId].type; - if(type == "boolean"){ - this.selectedFields.push(new AdvancedField(this.newFieldId,this.fieldIdsMap[this.newFieldId].param, this.fieldIdsMap[this.newFieldId].name, type, "true", "and")); - }else{ - this.selectedFields.push(new AdvancedField(this.newFieldId, this.fieldIdsMap[this.newFieldId].param,this.fieldIdsMap[this.newFieldId].name, type, "", "and")); - } - - } - - removeField(index: number) { - this.selectedFields.splice(index, 1); - - } - - fieldOperatorChanged(index: number, operatorId: string, operatorName: string) { - this.selectedFields[index].operatorId = operatorId; - this.selectedFields[index].operatorName = operatorName; - } - validateDate(index: number, value: string){ - this.selectedFields[index].valid = Dates.isValidYear(value); - } - - fieldIdsChanged(index: number, fieldId:string ) { - console.log("Field index::"+index + " " + this.selectedFields[index].id + " function id:" +fieldId); - - var id= this.fieldIds[0]; - this.selectedFields[index].name = this.fieldIdsMap[id].name; - this.selectedFields[index].type = this.fieldIdsMap[id].type; - this.selectedFields[index].value = ""; - this.selectedFields[index].param = this.fieldIdsMap[id].param; - - var id =fieldId;//this.selectedFields[index].id; - this.selectedFields[index].name = this.fieldIdsMap[id].name; - this.selectedFields[index].type = this.fieldIdsMap[id].type; - this.selectedFields[index].value = ""; - this.selectedFields[index].param = this.fieldIdsMap[id].param; - if(this.fieldIdsMap[id].type == "boolean"){ - this.selectedFields[index].value = "true"; - } - } - valueChanged($event,index:number){ - this.selectedFields[index].value = $event.value; - } - listUpdated($event,fieldId:number){ - this.fieldList[fieldId] = $event.value; - } - -} diff --git a/portal-2/src/app/searchPages/searchUtils/advancedSearchForm.module.ts b/portal-2/src/app/searchPages/searchUtils/advancedSearchForm.module.ts deleted file mode 100644 index 1ee2f437..00000000 --- a/portal-2/src/app/searchPages/searchUtils/advancedSearchForm.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{AdvancedSearchFormComponent} from './advancedSearchForm.component'; -import {EntitiesAutocompleteModule} from '../../utils/entitiesAutoComplete/entitiesAutoComplete.module'; -import {StaticAutocompleteModule} from '../../utils/staticAutoComplete/staticAutoComplete.module'; -import {DateFilterModule} from './dateFilter.module'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule, EntitiesAutocompleteModule, StaticAutocompleteModule, DateFilterModule - ], - declarations: [ - AdvancedSearchFormComponent, -], - - providers:[ - ], - exports: [ - AdvancedSearchFormComponent - - ] -}) -export class AdvancedSearchFormModule { } diff --git a/portal-2/src/app/searchPages/searchUtils/advancedSearchPage.component.html b/portal-2/src/app/searchPages/searchUtils/advancedSearchPage.component.html deleted file mode 100644 index e27fa9ed..00000000 --- a/portal-2/src/app/searchPages/searchUtils/advancedSearchPage.component.html +++ /dev/null @@ -1,61 +0,0 @@ -
    -
    -
    -
    -
    - {{pageTitle}} -
    -
    - Simple search - - - - -
    - -
    -
    - -
    -
    - -
    - - - -
    - - -
    -
    - -
    - - - -
    -
    - - -
    - -
    - -
    - -
    -
    -
    - -
    -
    -
    diff --git a/portal-2/src/app/searchPages/searchUtils/advancedSearchPage.component.ts b/portal-2/src/app/searchPages/searchUtils/advancedSearchPage.component.ts deleted file mode 100644 index a668f7af..00000000 --- a/portal-2/src/app/searchPages/searchUtils/advancedSearchPage.component.ts +++ /dev/null @@ -1,254 +0,0 @@ -import {Component, Input, ViewChild, Output, EventEmitter} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {Location} from '@angular/common'; -import { Router} from '@angular/router'; -import {Filter, Value,AdvancedField} from '../searchUtils/searchHelperClasses.class'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchUtilsClass} from './searchUtils.class'; -import {ModalLoading} from '../../utils/modal/loading.component'; -import {StringUtils, Dates} from '../../utils/string-utils.class'; -import { Meta} from '../../../angular2-meta'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import {PiwikService} from '../../utils/piwik/piwik.service'; - -@Component({ - selector: 'advanced-search-page', - templateUrl: 'advancedSearchPage.component.html' -}) -export class AdvancedSearchPageComponent { - @Input() pageTitle = ""; - @Input() results = []; - @Input() type; - @Input() entityType; - @Input() searchUtils:SearchUtilsClass = new SearchUtilsClass(); - @Input() fieldIds: string[]; - @Input() fieldIdsMap;//:{ [key:string]:{ name:string, operator:string, type:string, indexField:string, equalityOperator:string }} ; - @Input() selectedFields:AdvancedField[]; - @Input() simpleSearchUrl: string; - @ViewChild (ModalLoading) loading : ModalLoading ; - @Input() csvParams: string; - @Input() csvPath: string; - @Input() simpleSearchLink: string = ""; - @Input() disableForms:boolean = false; - @Input() loadPaging: boolean = true; - @Input() oldTotalResults: number = 0; - - piwiksub: any; - public parameterNames:string[] =[]; - public parameterValues:string[] =[]; - - public baseURLWithParameters:string = ''; - - @Output() queryChange = new EventEmitter(); - constructor (private location: Location, private _meta: Meta, private _piwikService:PiwikService, private router: Router) { - } - - ngOnInit() { - this.updateTitle("Advanced search "+this.pageTitle); - this.updateDescription("Openaire, search, repositories, open access, type, content provider, funder, project, "+ this.pageTitle); - if(typeof window !== 'undefined') { - this.updateUrl(OpenaireProperties.getBaseLink()+location.pathname); - } - - this.searchUtils.baseUrl = "/" + this.searchUtils.baseUrl; - this.updateBaseUrlWithParameters(); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView(this.pageTitle).subscribe(); - } - } - - ngOnDestroy() { - if(this.piwiksub){ - this.piwiksub.unsubscribe(); -} - } - updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } - - public getSelectedFiltersFromUrl(params){ - for(var i=0; i< this.fieldIds.length ; i++){ - - var fieldId = this.fieldIds[i]; - var fieldparam = (this.fieldIdsMap[fieldId])?this.fieldIdsMap[fieldId].param:""; - if(!this.fieldIdsMap[fieldId]){ - - console.error("Field: "+fieldId +" not found in fieldIds map"); - } - - var operatorId = this.getOperatorParameter(fieldparam); - if(params[fieldparam] != undefined && params[operatorId] != undefined) { - var values:string [] = StringUtils.URIDecode(params[fieldparam]).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,-1); - var operators:string [] = (StringUtils.URIDecode(params[operatorId])).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,-1); - if(values.length == operators.length){ - for(var j=0; j< values.length ; j++){ - if(this.fieldIdsMap[fieldId].type == "date"){ - var value:string =StringUtils.unquote(values[j]); - var validDates:boolean = true; - var dateField:AdvancedField = new AdvancedField(fieldId,fieldparam,this.fieldIdsMap[fieldId].name,this.fieldIdsMap[fieldId].type,value,operators[j]) ; - if(value.indexOf("range") != -1){ - dateField.dateValue.type="range"; - if(value.length < 26 ){ - validDates =false; - }else{ - if(!Dates.isValidDate(value.substring(5,15)) || !Dates.isValidDate(value.substring(16,26))){ - validDates =false; - }else { - dateField.dateValue.from = Dates.getDateFromString(value.substring(5,15)); - dateField.dateValue.to = Dates.getDateFromString(value.substring(16,26)); - } - } - // "rangeYYYY-MM-DD:YYYY-MM-DD" - }else{ - dateField.dateValue.setDatesByType(value); - } - if(validDates){ - this.selectedFields.push(dateField); - } - - }else{ - this.selectedFields.push(new AdvancedField(fieldId,fieldparam,this.fieldIdsMap[fieldId].name,this.fieldIdsMap[fieldId].type,StringUtils.unquote(values[j]),operators[j]) ); - } - } - } - } - } - if(this.selectedFields.length == 0){ - this.selectedFields.push(new AdvancedField(this.fieldIds[0],fieldparam,this.fieldIdsMap[this.fieldIds[0]].name,this.fieldIdsMap[this.fieldIds[0]].type,"","and")); - } - } - private createUrlParameters(includePage:boolean){ - var params=""; - this.parameterNames.splice(0,this.parameterNames.length); - this.parameterValues.splice(0,this.parameterValues.length); - var fields: { [key:string]:{ values:string[], operators:string[] }}={}; - for(var i = 0; i< this.selectedFields.length; i++){ - if(this.fieldIdsMap[this.selectedFields[i].id] != undefined && (this.selectedFields[i].value.length > 0 || this.selectedFields[i].type == "date" )){ - if(!fields[this.selectedFields[i].id]){ - fields[this.selectedFields[i].id] = {values:[], operators:[]}; - fields[this.selectedFields[i].id].values =[]; - fields[this.selectedFields[i].id].operators =[]; - } - if(this.selectedFields[i].type == "date"){ - if(this.selectedFields[i].dateValue.type == "range"){ - fields[this.selectedFields[i].id].values.push(StringUtils.quote(StringUtils.URIEncode("range"+Dates.getDateToString(this.selectedFields[i].dateValue.from)+":"+Dates.getDateToString(this.selectedFields[i].dateValue.to)))); - }else{ - fields[this.selectedFields[i].id].values.push(StringUtils.quote(StringUtils.URIEncode(this.selectedFields[i].dateValue.type))); - } - }else{ - fields[this.selectedFields[i].id].values.push(StringUtils.quote(StringUtils.URIEncode(this.selectedFields[i].value))); - } - fields[this.selectedFields[i].id].operators.push(this.selectedFields[i].operatorId); - - } - } - for(var i = 0; i< this.fieldIds.length; i++){ - if(fields[this.fieldIds[i]]){ - - params+="&"+this.fieldIdsMap[this.fieldIds[i]].param+"="+fields[this.fieldIds[i]].values.join()+ - "&"+this.getOperatorParameter(this.fieldIdsMap[this.fieldIds[i]].param)+"="+fields[this.fieldIds[i]].operators.join() - this.parameterNames.push(this.fieldIdsMap[this.fieldIds[i]].param); - this.parameterValues.push(fields[this.fieldIds[i]].values.join()); - this.parameterNames.push(this.getOperatorParameter(this.fieldIdsMap[this.fieldIds[i]].param)); - this.parameterValues.push(fields[this.fieldIds[i]].operators.join()); - } - } - if(includePage && this.searchUtils.page != 1){ - params += "&page="+this.searchUtils.page; - } - return '?'+params; - } - public createQueryParameters(){ - var params=""; - var countParams = 0; - for(var i = 0; i< this.selectedFields.length; i++){ - if(this.fieldIdsMap[this.selectedFields[i].id] != undefined && (this.selectedFields[i].value != "" ||this.selectedFields[i].type == "date")){ - console.log("createQueryParameters::"+this.selectedFields[i].type); - if(this.selectedFields[i].type == "date"){ - if(this.selectedFields[i].dateValue.type != "any"){ - params += (countParams == 0 ? "" : this.selectedFields[i].operatorId) + " " + this.selectedFields[i].id + this.fieldIdsMap[this.selectedFields[i].id].equalityOperator+ '"' + StringUtils.URIEncode(Dates.getDateToString(this.selectedFields[i].dateValue.from)) + " " - + StringUtils.URIEncode(Dates.getDateToString(this.selectedFields[i].dateValue.to)) + '"' + " "; - } - }else{ - if(this.selectedFields[i].id == "q"){ - var op = ""; - // if() - params += (countParams == 0 ? "" : this.selectedFields[i].operatorId) + " " + '"' + StringUtils.URIEncode(this.selectedFields[i].value) + '"' + " "; - }else if(countParams == 0 && this.selectedFields[i].operatorId == "not"){ - params += " "+ this.selectedFields[i].id + " <> "+'"' + StringUtils.URIEncode(this.selectedFields[i].value) +'"' + " "; - }else{ - params += (countParams == 0 ? "" : this.selectedFields[i].operatorId + " " ) + this.selectedFields[i].id + this.fieldIdsMap[this.selectedFields[i].id].equalityOperator+'"' + encodeURIComponent(this.selectedFields[i].value) +'"' + " "; - - } - } - countParams++; - } - } - - return params; - - } - clearFilters(){ - } - - goTo(page:number = 1){ - this.searchUtils.page = page; - var urlParameters = this.createUrlParameters(true); - var queryParameters = this.createQueryParameters(); - this.location.go(location.pathname,urlParameters); - this.queryChange.emit({ - value: queryParameters - }); - /* Code For Piwik*/ - if (typeof localStorage !== 'undefined') { - console.log("In PreviousRouteRecorder : "+this.router.url ); - localStorage.setItem('previousRoute', this.router.url); - } - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView(this.pageTitle).subscribe(); - } - /* End Piwik Code */ - } - - queryChanged($event) { - - this.goTo(1); - } - pageChanged($event) { - this.searchUtils.page = +$event.value; - this.goTo(this.searchUtils.page); - } - /* - * Update the url with proper parameters. This is used as base url in Paging Component - */ - public updateBaseUrlWithParameters(){ - this.baseURLWithParameters = this.searchUtils.baseUrl + this.createUrlParameters(false); - } - getOperatorParameter(parameter:string):string{ - if(parameter.length > 2){ - return parameter.substring(0,2); - }else if(parameter == "q"){ - return "op"; - }else{ - return parameter+"Op"; - } - } - // for loading - public openLoading(){ - this.loading.open(); - } - public closeLoading(){ - this.loading.close(); - } -} diff --git a/portal-2/src/app/searchPages/searchUtils/advancedSearchPage.module.ts b/portal-2/src/app/searchPages/searchUtils/advancedSearchPage.module.ts deleted file mode 100644 index df34b56c..00000000 --- a/portal-2/src/app/searchPages/searchUtils/advancedSearchPage.module.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import{AdvancedSearchPageComponent} from './advancedSearchPage.component'; -import{SearchResultsModule} from './searchResults.module'; -import{LoadingModalModule} from '../../utils/modal/loadingModal.module'; -import {ReportsServiceModule} from '../../services/reportsService.module'; -import {SearchDownloadModule} from './searchDownload.module'; -import{SearchPagingModule} from './searchPaging.module'; - -import {AdvancedSearchFormModule} from '../searchUtils/advancedSearchForm.module'; -import {PiwikServiceModule} from '../../utils/piwik/piwikService.module'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {HelperModule} from '../../utils/helper/helper.module'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, RouterModule, SearchResultsModule, LoadingModalModule, ReportsServiceModule, SearchPagingModule, AdvancedSearchFormModule, SearchDownloadModule, PiwikServiceModule, HelperModule - ], - declarations: [ - AdvancedSearchPageComponent, -], - - providers:[ - PreviousRouteRecorder - ], - exports: [ - AdvancedSearchPageComponent, - ] -}) -export class AdvancedSearchPageModule { } diff --git a/portal-2/src/app/searchPages/searchUtils/browseEntities.component.ts b/portal-2/src/app/searchPages/searchUtils/browseEntities.component.ts deleted file mode 100644 index 36cc7bbe..00000000 --- a/portal-2/src/app/searchPages/searchUtils/browseEntities.component.ts +++ /dev/null @@ -1,96 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; -import {Location} from '@angular/common'; - -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; - -import {RefineFieldResultsService} from '../../services/refineFieldResults.service'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageComponent } from '../searchUtils/searchPage.component'; -import {SearchUtilsClass} from '../searchUtils/searchUtils.class'; - -@Component({ - selector: 'browse-entities', - template: ` -
    - - - -
    -
    - -
    -
    -
    -` - -}) -export class BrowseEntitiesComponent { - public searchFields:SearchFields = new SearchFields(); - public filters =[]; - @Input() public baseUrl:string = ""; - @Input() public entityName:string = ""; - @Input() public refineFields: string[] ;//= this.searchFields.RESULT_REFINE_FIELDS; - public sub: any; - public errorCodes:ErrorCodes = new ErrorCodes(); - public status = this.errorCodes.LOADING; - public fieldIdsMap=this.searchFields.RESULT_REFINE_FIELDS; - - constructor ( private _refineFieldsService: RefineFieldResultsService ) { - // this.baseUrl = OpenaireProperties.getLinkToSearchPublications(); - - } - - public ngOnInit() { - for(var i=0; i < this.searchFields.HIDDEN_FIELDS.length; i++){ - var index = this.refineFields.indexOf(this.searchFields.HIDDEN_FIELDS[i]) ; - if(index > -1){ - this.refineFields.splice(index,1); - - } - } - this.getStats(); - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - } - - -private getStats(){ - - this.status = this.errorCodes.LOADING; - this.sub = this._refineFieldsService.getRefineFieldsResultsByEntityName(this.refineFields,this.entityName).subscribe( - data => { - console.info("Get Stats for "+this.entityName+ ": [Total:"+data[0]+" ] [fields: "+data[1].length+"]"); - this.filters = data[1]; - this.status = this.errorCodes.DONE; - if(data[0] == 0 ){ - this.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //this.status = this.errorCodes.ERROR; - if(err.status == '404') { - this.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.status = this.errorCodes.ERROR; - } else { - this.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); -} -} diff --git a/portal-2/src/app/searchPages/searchUtils/browseEntities.module.ts b/portal-2/src/app/searchPages/searchUtils/browseEntities.module.ts deleted file mode 100644 index 2d8d3cda..00000000 --- a/portal-2/src/app/searchPages/searchUtils/browseEntities.module.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import {RefineFieldResultsServiceModule} from '../../services/refineFieldResultsService.module'; - -import {BrowseEntitiesComponent} from './browseEntities.component'; -import {BrowseStatisticComponent} from './browseStatistic.component'; - -import {ErrorMessagesModule} from '../../utils/errorMessages.module'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, ErrorMessagesModule, - RefineFieldResultsServiceModule, RouterModule - ], - declarations: [ - BrowseEntitiesComponent, - BrowseStatisticComponent - -], - - providers:[ - ], - exports: [ - BrowseEntitiesComponent, - BrowseStatisticComponent - ] -}) -export class BrowseEntitiesModule { } diff --git a/portal-2/src/app/searchPages/searchUtils/browseStatistic.component.html b/portal-2/src/app/searchPages/searchUtils/browseStatistic.component.html deleted file mode 100644 index 3eb79bc6..00000000 --- a/portal-2/src/app/searchPages/searchUtils/browseStatistic.component.html +++ /dev/null @@ -1,50 +0,0 @@ - - {{filter.title}} - - - - - - - diff --git a/portal-2/src/app/searchPages/searchUtils/browseStatistic.component.ts b/portal-2/src/app/searchPages/searchUtils/browseStatistic.component.ts deleted file mode 100644 index 485e6d97..00000000 --- a/portal-2/src/app/searchPages/searchUtils/browseStatistic.component.ts +++ /dev/null @@ -1,42 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; -import {Location} from '@angular/common'; - -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; - -import {RefineFieldResultsService} from '../../services/refineFieldResults.service'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageComponent } from '../searchUtils/searchPage.component'; -import {SearchUtilsClass} from '../searchUtils/searchUtils.class'; -import {RouterHelper} from '../../utils/routerHelper.class'; -@Component({ - selector: 'browse-statistic', - templateUrl: 'browseStatistic.component.html' - -}) -export class BrowseStatisticComponent { - - @Input() public baseUrl:string = ""; - @Input() public filter:any = ""; - private _maxCharacters = 30; - public viewAll = false; - public routerHelper:RouterHelper = new RouterHelper(); - constructor () { - - } - - public ngOnInit() { - - - } - - quote(str:string){ - return '"'+str+'"'; - } - - private _formatName(value){ - return value.name+" ";//(((value.name+" ("+value.number+")").length >this._maxCharacters)?(value.name.substring(0,(this._maxCharacters - (" ("+value.number+")").length - ('...').length))+"..."):value.name) - } - -} diff --git a/portal-2/src/app/searchPages/searchUtils/dateFilter.component.ts b/portal-2/src/app/searchPages/searchUtils/dateFilter.component.ts deleted file mode 100644 index f03eb76a..00000000 --- a/portal-2/src/app/searchPages/searchUtils/dateFilter.component.ts +++ /dev/null @@ -1,73 +0,0 @@ -import {Component, Input, Output, EventEmitter} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; - -import { Filter, Value, DateValue} from './searchHelperClasses.class'; -import {IMyOptions, IMyDateModel} from '../../utils/my-date-picker/interfaces/index'; -// import {IMyDateModel} from '../../../utils/my-date-picker/interfaces/my-date-model.interface'; -import {Dates} from '../../utils/string-utils.class'; - -@Component({ - selector: 'date-filter', - template: ` - - -
    - - - - -
    - - From - - To
    -
    - ` - -}) - -export class DateFilterComponent { - - @Input() dateValue = new DateValue("any"); - @Input() filterId; - - private myDatePickerOptions: IMyOptions = { - // other options... - dateFormat: 'yyyy-mm-dd', - selectionTxtFontSize: '15px', - height:'28px', - width: '100%', - editableDateField: false, - showClearDateBtn: false - }; - - // Initialized to specific date (09.10.2018). - public from;//: Object = { date: { year: 2018, month: 10, day: 9 } }; - public to;//: Object = { date: { year: 2018, month: 10, day: 9 } }; - -constructor() { - this.updateDefaultRangeDates(this.dateValue.from,this.dateValue.to); -} -updateDefaultRangeDates(df:Date,dt:Date){ - this.from = { date: { year: df.getFullYear(), month: (df.getMonth()+1), day: df.getDate() } }; - this.to = { date: { year: dt.getFullYear(), month: (dt.getMonth()+1), day: dt.getDate() } }; - } -typeChanged(type:string){ - this.dateValue.setDatesByType(type); - this.updateDefaultRangeDates(this.dateValue.from, this.dateValue.to); -} - -onFromDateChanged(event: IMyDateModel) { - this.dateValue.from = Dates.getDateFromString(event.formatted); - -} -onToDateChanged(event: IMyDateModel) { - this.dateValue.to = Dates.getDateFromString(event.formatted); - -}} diff --git a/portal-2/src/app/searchPages/searchUtils/dateFilter.module.ts b/portal-2/src/app/searchPages/searchUtils/dateFilter.module.ts deleted file mode 100644 index 0c5dca82..00000000 --- a/portal-2/src/app/searchPages/searchUtils/dateFilter.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { MyDatePickerModule } from '../../utils/my-date-picker/my-date-picker.module'; -import {DateFilterComponent} from './dateFilter.component'; -@NgModule({ - imports: [ - CommonModule, FormsModule, MyDatePickerModule - ], - declarations: [ - DateFilterComponent -], - - providers:[ - ], - exports: [ - DateFilterComponent - ] -}) -export class DateFilterModule { } diff --git a/portal-2/src/app/searchPages/searchUtils/searchDownload.component.ts b/portal-2/src/app/searchPages/searchUtils/searchDownload.component.ts deleted file mode 100644 index 55df68d0..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchDownload.component.ts +++ /dev/null @@ -1,112 +0,0 @@ -import {Component, Input, Output, EventEmitter, ViewChild} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {AlertModal} from '../../utils/modal/alert'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import {ReportsService} from '../../services/reports.service'; -import {ModalLoading} from '../../utils/modal/loading.component'; -import {PiwikService} from '../../utils/piwik/piwik.service'; - -@Component({ - selector: 'search-download', - template: ` - - - - (CSV) - - - - - - ` -}) - -export class SearchDownloadComponent { - @Input() totalResults:number = 0; - @Input() csvParams: string; - @Input() type: string; - @ViewChild(AlertModal) alertApplyAll; - private downloadURLAPI: string; - - sub: any; - downloadFilePiwikSub: any; - - @ViewChild (ModalLoading) loading : ModalLoading ; - // Alert box when something is wrong with CSV requests - @ViewChild('AlertModalCsvError') alertCsvError; - - constructor ( private _reportsService: ReportsService, private _piwikService:PiwikService) {} - - ngOnInit() { - this.downloadURLAPI = OpenaireProperties.getCsvAPIURL(); - } - - ngOnDestroy() { - if(this.sub) { - this.sub.unsubscribe(); - } - if(this.downloadFilePiwikSub) { - this.downloadFilePiwikSub.unsubscribe(); - } - } - - denialOfDownload() { - this.alertApplyAll.isOpen = true; - this.alertApplyAll.cancelButton = true; - this.alertApplyAll.okButton = false; - this.alertApplyAll.alertTitle = "Download Results in CSV"; - this.alertApplyAll.message = "Sorry, but the results are too many! Use the api instead!"; - this.alertApplyAll.cancelButtonText = "Ok"; - - console.info("denial of Download"); - - } - downloadfile(url:string,filename:string){ - console.log("Downloading file: "+ url); - this.openLoading(); - this.setMessageLoading("Downloading CSV file"); - - this._reportsService.downloadCSVFile(url).subscribe( - data => { - this.closeLoading(); - window.open(window.URL.createObjectURL(data),filename+".csv"); - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.downloadFilePiwikSub = this._piwikService.trackDownload(url).subscribe(); - } - }, - error => { - console.log("Error downloading the file."); - this.closeLoading(); - this.confirmOpenCsvError(); - }, - () => console.log('Completed file download.') - ); - } - - - public openLoading(){ - if(this.loading){ - this.loading.open(); - } - } - public closeLoading(){ - if(this.loading){ - this.loading.close(); - } - } - public setMessageLoading(message: string){ - if(this.loading){ - this.loading.message = message; - } - } - - public confirmOpenCsvError(){ - this.alertCsvError.cancelButton = false; - this.alertCsvError.okButton = true; - this.alertCsvError.alertTitle = "ERROR DOWNLOADING CSV FILE"; - this.alertCsvError.message = "There was an error in csv downloading. Please try again later."; - this.alertCsvError.okButtonText = "OK"; - this.alertCsvError.open(); - } - -} diff --git a/portal-2/src/app/searchPages/searchUtils/searchDownload.module.ts b/portal-2/src/app/searchPages/searchUtils/searchDownload.module.ts deleted file mode 100644 index 1275de01..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchDownload.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {SearchDownloadComponent} from './searchDownload.component'; -import {LoadingModalModule} from '../../utils/modal/loadingModal.module'; -import {AlertModalModule} from '../../utils/modal/alertModal.module'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, LoadingModalModule, AlertModalModule - ], - declarations: [ - SearchDownloadComponent -], - - providers:[ - ], - exports: [ - SearchDownloadComponent - - ] -}) -export class SearchDownloadModule { } diff --git a/portal-2/src/app/searchPages/searchUtils/searchFilter.component.html b/portal-2/src/app/searchPages/searchUtils/searchFilter.component.html deleted file mode 100644 index fdf83db7..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchFilter.component.html +++ /dev/null @@ -1,67 +0,0 @@ - -
      -
    • -
      {{_formatTitle(filter.title,filter.values.length)}} -
      - -
    • -
    diff --git a/portal-2/src/app/searchPages/searchUtils/searchFilter.component.ts b/portal-2/src/app/searchPages/searchUtils/searchFilter.component.ts deleted file mode 100644 index a120673c..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchFilter.component.ts +++ /dev/null @@ -1,144 +0,0 @@ -import {Component, Input, Output, EventEmitter} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; - -import { Filter, Value} from './searchHelperClasses.class'; -import {Open} from '../../utils/modal/open.component'; - -@Component({ - selector: 'search-filter', - templateUrl: 'searchFilter.component.html' -}) - -export class SearchFilterComponent { - - @Input() filter:Filter; - @Input() showResultCount:boolean = true; - @Input() isDisabled:boolean = false; - @Input() addShowMore:boolean = true; - - public showAll:boolean = false; - public _maxCharacters:number =28; - - @Output() toggleModal = new EventEmitter(); - - @Output() modalChange = new EventEmitter(); - - - public isOpen:boolean=false; - - filterModalChange() { - console.info("Modal Changed"); - this.modalChange.emit({ - value: true - }); - //this.close(); - } - - constructor () { - } - - ngOnInit() { - - } - public _formatTitle(title,length){ - return (((title+" ("+length+")").length >this._maxCharacters)?(title.substring(0,(this._maxCharacters - (" ("+length+")").length - ('...').length))+"..."):title+" ("+((length >= 99)?length+"+":length)+")") - } - private _formatName(value){ - return value.name;//(((value.name+" ("+value.number+")").length >this._maxCharacters)?(value.name.substring(0,(this._maxCharacters - (" ("+value.number+")").length - ('...').length))+"..."):value.name) - } - toggleShowAll(){ - this.showAll = !this.showAll; - if(this.showAll == false) { - this.reorderFilterValues(); - } - } - - filterChange(selected:boolean){ - console.info("filter change: "+selected); - if(selected){ - this.filter.countSelectedValues++; - // this.reorderFilterValues(); - }else{ - this.filter.countSelectedValues--; - // this.reorderFilterValues(); - } - } - getSelectedValues(filter):any{ - var selected = []; - if(filter.countSelectedValues >0){ - for (var i=0; i < filter.values.length; i++){ - if(filter.values[i].selected){ - selected.push(filter.values[i]); - } - } - } - return selected; - - } - getNotSelectedValues(filter):any{ - var notSselected = []; - if(filter.countSelectedValues >0){ - for (var i=0; i < filter.values.length; i++){ - if(!filter.values[i].selected){ - notSselected.push(filter.values[i]); - } - } - }else { - notSselected = filter.values; - } - return notSselected; - } - reorderFilterValues() { - for(let value of this.filter.values) { - if(value.selected) { - let index: number = this.filter.values.indexOf(value); - let selectedValue:Value = this.filter.values[index]; - - this.filter.values.splice(index, 1); - this.filter.values.splice(0, 0, selectedValue); - } - } - } -// sliceSelected() { -// let values: Value[] = []; -// -// for(let value of this.filter.values) { -// if(value.selected) { -// let index: number = this.filter.values.indexOf(value); -// let selectedValue:Value = this.filter.values[index]; -// -// this.filter.values.splice(index, 1); -// this.filter.values.splice(0, 0, selectedValue); -// } -// } - - - toggle() { - this.toggleModal.emit({ - value: this.filter - }); - } - - - open() { - this.isOpen = true; - } - - close() { - this.isOpen = false; - } - - filterChange2(selected:boolean){ - - console.info("filter change2"); - if(selected){ - this.filter.countSelectedValues++; - // this.reorderFilterValues(); - }else{ - this.filter.countSelectedValues--; - // this.reorderFilterValues(); - } - this.close(); - } - -} diff --git a/portal-2/src/app/searchPages/searchUtils/searchFilter.module.ts b/portal-2/src/app/searchPages/searchUtils/searchFilter.module.ts deleted file mode 100644 index 3cc6792b..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchFilter.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {SearchFilterComponent} from './searchFilter.component'; -import{SearchFilterModalComponent} from './searchFilterModal.component'; -import {ModalModule} from '../../utils/modal/modal.module'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, ModalModule - ], - declarations: [ - SearchFilterComponent, SearchFilterModalComponent -], - - providers:[ - ], - exports: [ - SearchFilterComponent, SearchFilterModalComponent - - ] -}) -export class SearchFilterModule { } diff --git a/portal-2/src/app/searchPages/searchUtils/searchFilterModal.component.ts b/portal-2/src/app/searchPages/searchUtils/searchFilterModal.component.ts deleted file mode 100644 index bb0ed624..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchFilterModal.component.ts +++ /dev/null @@ -1,104 +0,0 @@ -import {Component, ViewEncapsulation, ComponentRef, ElementRef, Input, EventEmitter, Output} from '@angular/core'; -// import { DynamicComponentLoader} from '@angular/core'; - -import {Open} from '../../utils/modal/open.component'; -import { Filter} from './searchHelperClasses.class'; - -@Component({ - selector: 'modal-search-filter', - template: ` - - - `, - encapsulation: ViewEncapsulation.None, -}) -/** - * API to an open search filter window. - */ -export class SearchFilterModalComponent{ - @Input() filter: Filter; - @Input() showResultCount:boolean = true; - @Output() modalChange = new EventEmitter(); - - public isOpen:boolean=false; - - constructor( public _elementRef: ElementRef){} - - filterModalChange(selected:boolean) { - console.info("Modal Changed"); - this.filterChange(selected); - this.modalChange.emit({ - value: selected - }); - this.close(); - } - filterChange(selected:boolean){ - if(selected){ - this.filter.countSelectedValues++; - // this.reorderFilterValues(); - }else{ - this.filter.countSelectedValues--; - // this.reorderFilterValues(); - } - } - getSelectedValues(filter):any{ - var selected = []; - if(filter.countSelectedValues >0){ - for (var i=0; i < filter.values.length; i++){ - if(filter.values[i].selected){ - selected.push(filter.values[i]); - } - } - } - return selected; - - } - getNotSelectedValues(filter):any{ - var notSselected = []; - if(filter.countSelectedValues >0){ - for (var i=0; i < filter.values.length; i++){ - if(!filter.values[i].selected){ - notSselected.push(filter.values[i]); - } - } - }else { - notSselected = filter.values; - } - return notSselected; - } - - open() { - this.isOpen = true; - } - - close() { - this.isOpen = false; - } - -} diff --git a/portal-2/src/app/searchPages/searchUtils/searchForm.component.ts b/portal-2/src/app/searchPages/searchUtils/searchForm.component.ts deleted file mode 100644 index 0a6ba9a8..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchForm.component.ts +++ /dev/null @@ -1,52 +0,0 @@ -import {Component, Input, Output, EventEmitter} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {RouterHelper} from '../../utils/routerHelper.class'; -import {Router} from '@angular/router'; - -@Component({ - selector: 'search-form', - template: ` - -
    - - - -
    - ` -}) - -export class SearchFormComponent { - @Input() isDisabled: boolean = false; - @Input() keyword: string = ''; - @Input() generalSearch: boolean = false; - @Input() placeholderText: string = "Type keywords"; - @Input() link: boolean = false; - public routerHelper:RouterHelper = new RouterHelper(); - - @Output() keywordChange = new EventEmitter(); - - constructor (private _router:Router) { - } - - ngOnInit() { - - } - - keywordChanged() { - console.info("inside form: "+this.keyword); - this.keywordChange.emit({ - value: this.keyword - }); - } - goTo() { - this._router.navigate(['/search/find'], { queryParams: this.routerHelper.createQueryParam('keyword',this.keyword) }); - } -} diff --git a/portal-2/src/app/searchPages/searchUtils/searchForm.module.ts b/portal-2/src/app/searchPages/searchUtils/searchForm.module.ts deleted file mode 100644 index 21a9d9b1..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchForm.module.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import{SearchFormComponent} from './searchForm.component'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, RouterModule - ], - declarations: [ - SearchFormComponent -], - - providers:[ - ], - exports: [ - SearchFormComponent - - ] -}) -export class SearchFormModule { } diff --git a/portal-2/src/app/searchPages/searchUtils/searchHelperClasses.class.ts b/portal-2/src/app/searchPages/searchUtils/searchHelperClasses.class.ts deleted file mode 100644 index c09b3440..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchHelperClasses.class.ts +++ /dev/null @@ -1,89 +0,0 @@ -import {Dates} from '../../utils/string-utils.class'; -export class Filter{ - public title: string; // eg Type - public filterId: string; // type (name in url parameter) - public originalFilterId: string; // (in index) - public countSelectedValues: number = 0; - public values: Value[] = []; - public filterOperator: string ='or'; - - -} - -export class Value{ - public name: string; //eg Article, Journal - public id: string; //0001 - public selected: boolean = false; - public number: number = 0; - -} -export class AdvancedField{ - public id: string; // - public param:string; - public name: string; // - public type: string = "keyword"; //keyword, static or dynamic - public value: string = ''; - public operatorId: string; - public operatorName: string =""; - public valid: boolean = true; - public dateValue:DateValue = new DateValue("any"); - - constructor(id:string,param:string,name:string, type:string, value:string,operator:string){ - this.id = id; - this.param = param; - this.name = name; - this.type = type; - this.value = value; - this.operatorId = operator; - // this.operatorName = "AND"; - - } -} -export class DateValue{ - public types = ["any","range","1mon","2mon","3mon","6mon","12mon","2year","5year","10year"]; - public typesTitle = ["any","in the specified date range","in the last month","in the last 2 months","in the last 3 months","in the last 6 months","in the last year","in the last 2 years","in the last 5 years","in the last 10 years"]; - public type: string ; - public from:Date = new Date(); - public to:Date = new Date(); - constructor(type:string = "any"){ - this.setDatesByType(type); - } - public setDatesByType(type:string){ - if(this.types.indexOf(type) == -1){ - type=this.types[0]; - } - this.type = type; - this.to = Dates.getDateToday(); - if(this.type == "range" || this.type == "any"){ // for type "any" just to initiate with values - this.from = Dates.getDateXMonthsAgo(1); - }else if(this.type == "1mon"){ - this.from = Dates.getDateXMonthsAgo(1); - }else if(this.type == "2mon"){ - this.from = Dates.getDateXMonthsAgo(2); - }else if(this.type == "3mon"){ - this.from = Dates.getDateXMonthsAgo(3); - }else if(this.type == "6mon"){ - this.from = Dates.getDateXMonthsAgo(6); - }else if(this.type == "12mon"){ - this.from = Dates.getDateXMonthsAgo(12); - }else if(this.type == "2year"){ - this.from = Dates.getDateXYearsAgo(2); - }else if(this.type == "5year"){ - this.from = Dates.getDateXYearsAgo(5); - }else if(this.type == "10year"){ - this.from = Dates.getDateXYearsAgo(10); - } - } - -} -export class OPERATOR{ - public static AND: string ="and"; - public static OR: string ="or"; - public static NOT: string ="not"; - -} - -export class AutoCompleteValue{ - public id: string; - public label: string; -} diff --git a/portal-2/src/app/searchPages/searchUtils/searchPage.component.html b/portal-2/src/app/searchPages/searchUtils/searchPage.component.html deleted file mode 100644 index 2c6aa29b..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchPage.component.html +++ /dev/null @@ -1,126 +0,0 @@ -
    -
    -
    -
    - -
    -
    -
    - -
    -
    - - More search options - - - -
    - Keywords: - - - {{filter.title}}: - - , - - - - - - Clear All - -
    - -
    - -
    -
    -
    - -
    -
    - - - -
    -
    - -
    Filter By:
    - -
    -
    - -
    -
    - - -
    -
    - - -
    - - -
    - -
    - -
    - -
    - - - - - - - - -
    - -
    - - -
    - -
    - -
    - - - -
    - -
    - - - - - - - - - -
    - -
    - -
    - -
    -
    -
    -
    -
    -
    diff --git a/portal-2/src/app/searchPages/searchUtils/searchPage.component.ts b/portal-2/src/app/searchPages/searchUtils/searchPage.component.ts deleted file mode 100644 index c25a7bd4..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchPage.component.ts +++ /dev/null @@ -1,515 +0,0 @@ -import {Component, Input, ViewChild, Output, EventEmitter,ElementRef} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {Location} from '@angular/common'; -import { Router} from '@angular/router'; - -import { Filter, Value} from './searchHelperClasses.class'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchUtilsClass} from './searchUtils.class'; -import {DOI, StringUtils} from '../../utils/string-utils.class'; -import {ModalLoading} from '../../utils/modal/loading.component'; -import { Meta} from '../../../angular2-meta'; -import{SearchFilterComponent} from './searchFilter.component'; -import {SearchFilterModalComponent} from './searchFilterModal.component'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import { ErrorCodes} from '../../utils/properties/openaireProperties'; -import {PiwikService} from '../../utils/piwik/piwik.service'; - - -@Component({ - selector: 'search-page', - templateUrl: 'searchPage.component.html' - -}) -export class SearchPageComponent { - @Input() pageTitle = ""; - @Input() formPlaceholderText = "Type Keywords..."; - @Input() results = []; - @Input() filters = []; - @Input() type:string = ""; - @Input() entityType: string = ""; - @Input() searchUtils:SearchUtilsClass = new SearchUtilsClass(); - @Output() queryChange = new EventEmitter(); - @Input() baseUrl:string = ''; - @Input() showResultCount:boolean = true; - @Input() showRefine:boolean = true; - @Input() refineFields = []; - @Input() csvParams: string; - @Input() csvPath: string; - @Input() advancedSearchLink: string = ""; - @Input() tableViewLink: string; - @Input() disableForms: boolean = false; - @Input() loadPaging: boolean = true; - @Input() oldTotalResults: number = 0; - @Input() tableView: boolean = false; - @Input() searchFormClass: string = "searchForm"; - @ViewChild (ModalLoading) loading : ModalLoading ; - public fieldIdsMap;//: { [key:string]:{ name:string, operator:string, type:string, indexField:string, equalityOperator:string }}; - private searchFieldsHelper:SearchFields = new SearchFields(); - private queryParameters: Map = new Map(); - private baseURLWithParameters:string = ''; - private sub: any; piwiksub: any; - public countFilters= 0; - public parameterNames:string[] =[]; - public parameterValues:string[] =[]; - public showUnknownFilters:boolean = false; // when a filter exists in query but has no results, so no filters returned from the query - //@ViewChild (SearchFilterModalComponent) searchFilterModal : SearchFilterModalComponent ; - public currentFilter: Filter; - - constructor (private location: Location , private _meta: Meta,private element: ElementRef,private _piwikService:PiwikService, private router: Router) { - } - - ngOnInit() { - if (typeof document !== 'undefined') { - this.element.nativeElement.scrollIntoView(); - } - this.updateBaseUrlWithParameters(this.filters); - this.updateTitle(this.pageTitle); - this.updateDescription("Openaire, search, repositories, open access, type, content provider, funder, project, " + this.type + "," +this.pageTitle); - if(typeof window !== 'undefined') { - this.updateUrl(OpenaireProperties.getBaseLink()+location.pathname); - } - if(typeof document !== 'undefined' && OpenaireProperties.isPiwikTrackEnabled()){ - this.piwiksub = this._piwikService.trackView(this.pageTitle).subscribe(); - } - } - ngAfterViewChecked(){ - - } - ngOnDestroy() { - if(this.piwiksub){ - this.piwiksub.unsubscribe(); - } - } - toggleModal($event) { - this.currentFilter = $event.value; - //this.searchFilterModal.open(); - } - - updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } - - public getQueryParametersFromUrl(params){ - // var parameters = ""; - var allFqs = ""; - - this.queryParameters = new Map(); - - for(var i=0; i< this.refineFields.length ; i++){ - var filterId = this.refineFields[i]; - - if(params[filterId] != undefined) { - this.queryParameters[filterId]=StringUtils.URIDecode(params[filterId]); - - let values = (StringUtils.URIDecode(this.queryParameters[filterId])).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,-1); - var countvalues = 0; - var fq = ""; - for(let value of values) { - countvalues++; - var paramId = this.fieldIdsMap[filterId].param; - // parameters+='&' + paramId+ '='+ value;//+"&" + this.fieldIdsMap[paramId].operator + "="+((countvalues == 1)?"and":"or"); - fq+=(fq.length > 0 ? " " + "or" + " ":"" ) + filterId +" exact " +StringUtils.URIEncode(value); - } - if(countvalues > 0){ - fq="&fq="+fq; - } - allFqs += fq; - } - } - var keyword = params['keyword']; - var doiQuery = ""; - var keywordQuery = ""; - if((keyword && keyword.length > 0)){ - if((this.type == 'publications' ||this.type == 'research data')){ - var DOIs:string[] = DOI.getDOIsFromString(keyword); - var doisParams = ""; - - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; - } - if(doisParams.length > 0){ - doiQuery += "&"+doisParams; - }else { - keywordQuery += "&q="+StringUtils.URIEncode(keyword); - } - }else{ - keywordQuery += "&q="+StringUtils.URIEncode(keyword); - - } - } - return (doiQuery.length > 0 ? doiQuery:keywordQuery) + allFqs; - } - public getIndexQueryParametersFromUrl(params){ - // var parameters = ""; - var allFqs = ""; - - for(var i=0; i< this.refineFields.length ; i++){ - var filterId = this.refineFields[i]; - var fq = ""; - if(params[filterId] != undefined) { - this.queryParameters[filterId]=decodeURIComponent(params[filterId]); - let values = (decodeURIComponent(this.queryParameters[filterId])).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,-1); - var countvalues = 0 - for(let value of values) { - countvalues++; - // parameters+= ((countvalues == 1)?" and (":" or ")+ filterId+ '='+ value; - fq+=(fq.length > 0 ? " " + "or" + " ":"" ) + filterId + " exact " + value;//StringUtils.quote(value); - } - // parameters+= " ) "; - if(countvalues > 0){ - fq="&fq="+fq; - } - allFqs += fq; - } - - } - var keyword = params['keyword']; - var doiQuery = ""; - var keywordQuery = ""; - if((keyword && keyword.length > 0)){ - if((this.type == 'publications' ||this.type == 'research data')){ - var DOIs:string[] = DOI.getDOIsFromString(keyword); - var doisParams = ""; - - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; - } - if(doisParams.length > 0){ - doiQuery += "&"+doisParams; - } - }else{ - keywordQuery += "and ("+StringUtils.quote(StringUtils.URIEncode(keyword)) +")"; - - } - } - return (doiQuery.length > 0 ? doiQuery:keywordQuery) + allFqs; - -} - /* - * Mark as check the new filters that are selected, when you get them from search - */ - public checkSelectedFilters(filters:Filter[]){ - this.filters = filters; - for(var i=0; i< filters.length ; i++){ - var filter:Filter = filters[i]; - filter.countSelectedValues = 0; - if(this.queryParameters[filter.filterId] != undefined) { - let values = (decodeURIComponent(this.queryParameters[filter.filterId])).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,-1); - for(let filterValue of filter.values) { - if(values.indexOf(StringUtils.quote(filterValue.id)) > -1) { - filterValue.selected = true; - filter.countSelectedValues++; - }else{ - filterValue.selected = false; - - } - } - }else{ - for(let filterValue of filter.values) { - filterValue.selected = false; - } - } - } - - return filters; - } - /* - * Update the url with proper parameters. This is used as base url in Paging Component - */ - public updateBaseUrlWithParameters(filters:Filter[]){ - this.baseURLWithParameters = this.baseUrl + this.createUrlParameters(filters,false); - - } - - /* - * - */ - private createUrlParameters(filters:Filter[], includePage:boolean){ - var allLimits="";//location.search.slice(1); - this.queryParameters = new Map(); - this.parameterNames.splice(0,this.parameterNames.length); - this.parameterValues.splice(0,this.parameterValues.length); - - for (let filter of filters){ - var filterLimits=""; - if(filter.countSelectedValues > 0){ - for (let value of filter.values){ - if(value.selected == true){ - filterLimits+=((filterLimits.length == 0)?'':',') +'"'+ StringUtils.URIEncode(value.id)+'"'; - } - } - this.queryParameters[filter.filterId]=filterLimits; - if(filterLimits.length > 0){ - this.parameterNames.push(filter.filterId); - this.parameterValues.push(filterLimits); - } - allLimits+=(allLimits.length==0?"?":"&")+((filterLimits.length == 0 )?'':filter.filterId + '='+ filterLimits) ; - } - } - if(this.searchUtils.keyword.length > 0 ){ - allLimits+=(allLimits.length==0?"?":"&")+'keyword=' + this.searchUtils.keyword; - this.parameterNames.push("keyword"); - this.parameterValues.push(this.searchUtils.keyword); - } - if(this.searchUtils.page != 1 && includePage){ - allLimits+=((allLimits.length == 0)?'?':'&') + 'page=' + this.searchUtils.page; - } - - return allLimits; - } - /* - * - */ - private createSearchQueryParameters(filters:Filter[]){ - var allFqs = ""; - for (let filter of filters){ - if(filter.countSelectedValues > 0){ - var fq = ""; - var count_selected=0; - for (let value of filter.values){ - if(value.selected == true){ - count_selected++; - fq+=(fq.length > 0 ? " " + filter.filterOperator + " ":"" ) + filter.filterId + " exact " + StringUtils.quote(StringUtils.URIEncode(value.id)); - } - } - fq="&fq="+fq; - allFqs += fq; - } - } - var doiQuery = ""; - var keywordQuery = ""; - if((this.searchUtils.keyword && this.searchUtils.keyword.length > 0)){ - if((this.type == 'publications' ||this.type == 'research data')){ - var DOIs:string[] = DOI.getDOIsFromString(this.searchUtils.keyword); - var doisParams = ""; - - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; - } - if(doisParams.length > 0){ - doiQuery += "&"+doisParams; - }else{ - keywordQuery += "&q="+StringUtils.URIEncode(this.searchUtils.keyword); - } - }else{ - keywordQuery += "&q="+StringUtils.URIEncode(this.searchUtils.keyword); - } - } - - return (doiQuery.length > 0 ? doiQuery:keywordQuery) + allFqs; - - } - private createIndexQueryParameters(filters:Filter[]){ - var allFqs = ""; - for (let filter of filters){ - if(filter.countSelectedValues > 0){ - var count_selected=0; - var fq = ""; - for (let value of filter.values){ - if(value.selected == true){ - count_selected++; - fq+=(fq.length > 0 ? " " + filter.filterOperator + " ":"" ) + filter.filterId + " exact " + StringUtils.quote(StringUtils.URIEncode(value.id)); - } - } - if(count_selected > 0){ - fq="&fq="+fq; - allFqs += fq; - } - } - } - var doiQuery = ""; - var keywordQuery = ""; - if((this.searchUtils.keyword && this.searchUtils.keyword.length > 0)){ - if((this.type == 'publications' ||this.type == 'research data')){ - var DOIs:string[] = DOI.getDOIsFromString(this.searchUtils.keyword); - var doisParams = ""; - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; - } - if(doisParams.length > 0){ - doiQuery += "&"+doisParams; - } - }else{ - keywordQuery += " and ("+StringUtils.quote(StringUtils.URIEncode(this.searchUtils.keyword)) +")" - - } - } - return (doiQuery.length > 0 ? doiQuery:keywordQuery) + allFqs; - - } - public isFiltered(){ - var filtered=false; - this.showUnknownFilters = false; - for (let filter of this.filters){ - if(filter.countSelectedValues > 0){ - filtered = true; - break; - } - } - if(this.searchUtils.keyword.length > 0 ){ - filtered = true; - } - var errorCodes:ErrorCodes = new ErrorCodes(); - if(this.queryParameters.keys() && this.searchUtils.totalResults == 0 && this.searchUtils.status !=errorCodes.LOADING ){ - this.showUnknownFilters = true; - } - return filtered; - } - private clearKeywords(){ - if(this.searchUtils.keyword.length > 0 ){ - this.searchUtils.keyword =''; - } - this.goTo(1); - } - private clearFilters(){ - for (var i =0 ; i < this.filters.length; i++){ - for (var j=0; j < this.filters[i].countSelectedValues; j++){ - if(this.filters[i].values[j].selected){ - this.filters[i].values[j].selected = false; - } - this.filters[i].countSelectedValues = 0; - } - } - this.clearKeywords(); - - } - private removeFilter(value:Value,filter:Filter){ - filter.countSelectedValues--; - if(value.selected == true){ - value.selected = false; - } - this.goTo(1); - - } - goTo(page:number = 1){ - this.searchUtils.page = page; - console.info("searchUtils.page goto = "+this.searchUtils.page); - var urlParameters = this.createUrlParameters(this.filters,true); - console.info("urlParams : "+urlParameters); - this.updateBaseUrlWithParameters(this.filters); - var queryParameters = this.createSearchQueryParameters(this.filters); - console.info("queryParams : "+queryParameters); - var indexQuery = this.createIndexQueryParameters(this.filters); - - this.location.go(location.pathname,urlParameters); -/* Code For Piwik*/ - if (typeof localStorage !== 'undefined') { - console.log("In PreviousRouteRecorder : "+this.router.url ); - localStorage.setItem('previousRoute', this.router.url); - } - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView(this.pageTitle).subscribe(); - } - /* End Piwik Code */ - this.queryChange.emit({ - value: queryParameters, - index:indexQuery - - }); - if (typeof document !== 'undefined') { - this.element.nativeElement.scrollIntoView(); - } - } - filterChanged($event){ - console.info("filter Changed"); - this.goTo(1); - } - keywordChanged($event) { - this.searchUtils.keyword = $event.value; - this.goTo(1); - } - - /* - * Get A sub-array of this.refineFields array, which contains the ids of the selected filters - */ - public getSelectedFilters():string[] { - var selected:string[] = []; - for(var i=0; i < this.filters.length; i++){ - var filter:Filter = this.filters[i]; - if(filter.countSelectedValues > 0){ - selected.push(filter.filterId); - } - } - return selected; - } - /* - * Get A sub-array of this.refineFields array, which contains the ids of the selected parameters - */ - private getSelectedParameters():string[] { - var selected:string[] = []; - var params:string[] = Object.keys(this.queryParameters); - for(var i=0; i < params.length; i++){ - if(this.refineFields.indexOf(params[i]) > -1){ - selected.push(params[i]); - } - } - return selected; - } - /* - * Get A sub-array of this.refineFields array, which hides hidden fields (e.g Funding level 0,1,2,..), and contains those that depend on another fields (e.g Funding level 0 if Funder is selected ) - */ - public getFields():string[] { - var selected_filters:string[] = this.getSelectedFilters(); - if(selected_filters.length == 0){ - selected_filters = this.getSelectedParameters(); - } - var fields:string[] = []; - for(var i =0 ; i < this.refineFields.length;i++){ - var dependentTo = this.searchFieldsHelper.DEPENDENT_FIELDS[this.refineFields[i]]; - - //if filter is not marked as hidden OR it is hidden but it is dependent to a field that it IS selected - if(this.searchFieldsHelper.HIDDEN_FIELDS.indexOf(this.refineFields[i]) == -1 || (selected_filters.indexOf(dependentTo) != -1) || (selected_filters.indexOf(this.refineFields[i]) != -1) ){ - fields.push(this.refineFields[i]); - } - } - return fields; - } - /* - * Get a query string of all fields, that want to get from search (e.g. &fields=funderid&fields=projectstartyear&...)) - */ - public getRefineFieldsQuery():string{ - - var fields:string[] = this.getFields(); - var fieldsStr = "" - for(var i =0 ; i < fields.length ;i++){ - fieldsStr+="&fields="+fields[i]; - } - return "&refine=true"+fieldsStr; - } - - // for loading - public openLoading(){ - if(this.loading){ - this.loading.open(); - } - } - public closeLoading(){ - if(this.loading){ - this.loading.close(); - } - } - getSelectedValues(filter):any{ - var selected = []; - if(filter.countSelectedValues >0){ - for (var i=0; i < filter.values.length; i++){ - if(filter.values[i].selected){ - selected.push(filter.values[i]); - } - } - } - return selected; - - } -} diff --git a/portal-2/src/app/searchPages/searchUtils/searchPage.module.ts b/portal-2/src/app/searchPages/searchUtils/searchPage.module.ts deleted file mode 100644 index 39fc78fd..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchPage.module.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import{SearchPageComponent} from './searchPage.component'; -import{SearchFormModule} from './searchForm.module'; -import{SearchResultsModule} from './searchResults.module'; -//import{DatasourceTableViewModule} from './datasourceTableView.module'; -//import{SearchFilterComponent} from './searchFilter.component'; -//import{SearchFilterModalComponent} from './searchFilterModal.component'; -import {SearchFilterModule} from './searchFilter.module'; -import{LoadingModalModule} from '../../utils/modal/loadingModal.module'; -import {ReportsServiceModule} from '../../services/reportsService.module'; -import{SearchPagingModule} from './searchPaging.module'; -import {SearchDownloadModule} from './searchDownload.module'; -import {ModalModule} from '../../utils/modal/modal.module'; -import {PiwikServiceModule} from '../../utils/piwik/piwikService.module'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {HelperModule} from '../../utils/helper/helper.module'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule,RouterModule, SearchFormModule, SearchResultsModule, - LoadingModalModule, ReportsServiceModule, - SearchPagingModule, SearchDownloadModule, ModalModule, SearchFilterModule, PiwikServiceModule, HelperModule - ], - declarations: [ - SearchPageComponent -], - - providers:[ - PreviousRouteRecorder - ], - exports: [ - SearchPageComponent - ] -}) -export class SearchPageModule { } diff --git a/portal-2/src/app/searchPages/searchUtils/searchPageTableView.component.html b/portal-2/src/app/searchPages/searchUtils/searchPageTableView.component.html deleted file mode 100644 index ccd8c450..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchPageTableView.component.html +++ /dev/null @@ -1,197 +0,0 @@ -
    -
    -
    -
    -
    -
    - -
    -
    -
    - Keywords: {{searchUtils.keyword}} - - - {{filter.title}}: - {{value.name}} - , - - - - - - Clear All - -
    -
    -
    -
    -
    - -
    - -
    - - -
    -
    - -
    Filter By:
    - -
    -
    - -
    -
    - -
    -
    - - -
    - -
    -
    -
    - - {{searchUtils.totalResults}} content providers, page {{searchUtils.page}} of {{(totalPages())}} - - - - -
    -
    - -
    -

    - - - - - -

    -
    - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - -
    Name - - - - - Type - - - - - Country - - - - - Institution - - - - - Compatibility - - - - -
    - - - - - [no title available] - - - - {{dataprovider.type}} - - - - {{country}}{{(i < ( dataprovider['countries'].slice(0,5).length-1))?", ":""}}{{(i == dataprovider['countries'].slice(0,5).length-1 && dataprovider['countries'].length > 5)?"...":""}} - - - - - {{org.name}}{{org.name}}{{(i < ( dataprovider['organizations'].slice(0,5).length-1))?", ":""}}{{(i == dataprovider['organizations'].slice(0,5).length-1 && dataprovider['organizations'].length > 5)?"...":""}} - - - - - {{dataprovider.compatibility}} - - -
    -
    - -
    -
    - - {{searchUtils.totalResults}} content providers, page {{searchUtils.page}} of {{(totalPages())}} - - - - -
    -
    - - - -
    - -
    -

    - - - - - -

    - - -
    -
    - - -
    - -
    -
    -
    diff --git a/portal-2/src/app/searchPages/searchUtils/searchPageTableView.component.ts b/portal-2/src/app/searchPages/searchUtils/searchPageTableView.component.ts deleted file mode 100644 index bdfdb8d4..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchPageTableView.component.ts +++ /dev/null @@ -1,272 +0,0 @@ -import {Component, Input, ViewChild, Output, EventEmitter, ChangeDetectorRef} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {Location} from '@angular/common'; -import { Filter, Value} from './searchHelperClasses.class'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchUtilsClass} from './searchUtils.class'; -import {DOI, StringUtils} from '../../utils/string-utils.class'; -import {ModalLoading} from '../../utils/modal/loading.component'; -import { Meta} from '../../../angular2-meta'; -import{SearchFilterComponent} from './searchFilter.component'; -import {SearchFilterModalComponent} from './searchFilterModal.component'; -import { ErrorCodes} from '../../utils/properties/openaireProperties'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; -import {ContentProvidersDatatablePipe} from '../../utils/pipes/contentProvidersDatatable.pipe'; -import {PiwikService} from '../../utils/piwik/piwik.service'; - -@Component({ - selector: 'search-page-table', - templateUrl:'searchPageTableView.component.html' - }) -export class SearchPageTableViewComponent { - @Input() pageTitle = ""; - @Input() results; - @Input() filters = []; - @Input() type:string = ""; - @Input() entityType: string = ""; - @Input() searchUtils:SearchUtilsClass;// = new SearchUtilsClass(); - //@Output() downloadClick = new EventEmitter(); - @Input() showResultCount:boolean = true; - @Input() showRefine:boolean = true; - @Input() refineFields = []; - //@Input() csvParams: string; - //@Input() csvPath: string; - @Input() searchViewLink: string; - @Input() disableForms: boolean = false; - @Input() searchFormClass: string = "searchForm"; -@Input() formPlaceholderText = "Type Keywords..."; - @ViewChild (ModalLoading) loading : ModalLoading ; - private searchFieldsHelper:SearchFields = new SearchFields(); - private queryParameters: Map = new Map(); - private sub: any; - public countFilters= 0; - public parameterNames:string[] =[]; - public parameterValues:string[] =[]; - - public triggerPipe: boolean = false; - - public rowsOnPage:number = 10; - @ViewChild('mf') table: any;//DataTable; - - @ViewChild (SearchFilterModalComponent) searchFilterModal : SearchFilterModalComponent ; - public currentFilter: Filter; - public errorCodes:ErrorCodes = new ErrorCodes(); - piwiksub: any; - - constructor (private location: Location , private _meta: Meta, private _piwikService:PiwikService, private cd: ChangeDetectorRef) { } - - ngOnInit() { - this.updateTitle(this.pageTitle); - this.updateDescription("Openaire, search, repositories, open access, type, content provider, funder, project, " + this.type + "," +this.pageTitle); - if(typeof window !== 'undefined') { - this.updateUrl(OpenaireProperties.getBaseLink()+location.pathname); - } - if(OpenaireProperties.isPiwikTrackEnabled() && (typeof document !== 'undefined')){ - this.piwiksub = this._piwikService.trackView(this.pageTitle).subscribe(); - } - } - ngOnDestroy() { - if(this.piwiksub){ - this.piwiksub.unsubscribe(); -} - } - public sortByOrganization = (dataprovider: any) => { - if(dataprovider.organizations && dataprovider.organizations.length > 0) { - return dataprovider.organizations[0].name.toUpperCase(); - } - return "-"; - } - - totalPages(): number { - let totalPages:any = this.searchUtils.totalResults/(this.rowsOnPage); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - return totalPages; - } - - refreshTable(page:number) { - this.searchUtils.page=page; - //this.table.mfActivePage=$event.value; - this.table.setPage(this.searchUtils.page, this.rowsOnPage); - } - - toggleModal($event) { - this.currentFilter = $event.value; - this.searchFilterModal.open(); - } - - updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } - -public getParametersFromUrl(params) { - for(var i=0; i< this.refineFields.length ; i++) { - var filterId = this.refineFields[i]; - if(params[filterId] != undefined) { - if(this.queryParameters == undefined){ - this.queryParameters = new Map(); - } - this.queryParameters[filterId]=decodeURIComponent(params[filterId]); - } - } -} - /* - * Mark as check the new filters that are selected, when you get them from search - */ - public checkSelectedFilters(filters:Filter[]){ - - this.filters = filters; - for(var i=0; i< filters.length ; i++){ - var filter:Filter = filters[i]; - filter.countSelectedValues = 0; - - if(this.queryParameters[filter.filterId] != undefined) { - let values = (decodeURIComponent(this.queryParameters[filter.filterId])).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,-1); - for(let filterValue of filter.values) { - if(values.indexOf(StringUtils.quote(filterValue.id)) > -1) { - filterValue.selected = true; - filter.countSelectedValues++; - }else{ - filterValue.selected = false; - } - } - }else{ - for(let filterValue of filter.values) { - filterValue.selected = false; - } - } - } - - return filters; - } - - /* - * - */ - private createUrlParameters(filters:Filter[], includePage:boolean){ - var allLimits="";//location.search.slice(1); - this.parameterNames.splice(0,this.parameterNames.length); - this.parameterValues.splice(0,this.parameterValues.length); - - for (let filter of filters){ - var filterLimits=""; - if(filter.countSelectedValues > 0){ - for (let value of filter.values){ - if(value.selected == true){ - filterLimits+=((filterLimits.length == 0)?'':',') +'"'+ StringUtils.URIEncode(value.id)+'"'; - } - } - this.queryParameters[filter.filterId]=filterLimits; - if(filterLimits.length > 0){ - this.parameterNames.push(filter.filterId); - this.parameterValues.push(filterLimits); - } - allLimits+=(allLimits.length==0?"?":"&")+((filterLimits.length == 0 )?'':filter.filterId + '='+ filterLimits) ; - } - } - if(this.searchUtils.keyword.length > 0 ){ - allLimits+=(allLimits.length==0?"?":"&")+'keyword=' + this.searchUtils.keyword; - this.parameterNames.push("keyword"); - this.parameterValues.push(this.searchUtils.keyword); - } - - //if(this.searchUtils.page != 1 && includePage){ - // allLimits+=((allLimits.length == 0)?'?':'&') + 'page=' + this.searchUtils.page; - //} - - return allLimits; - } - - public isFiltered(){ - var filtered=false; - for (let filter of this.filters){ - if(filter.countSelectedValues > 0){ - filtered = true; - break; - } - } - if(this.searchUtils.keyword.length > 0 ){ - filtered = true; - } - return filtered; - } - private clearKeywords(){ - if(this.searchUtils.keyword.length > 0 ){ - this.searchUtils.keyword =''; - } - this.goTo(1, true); - } - private clearFilters(){ - for (var i =0 ; i < this.filters.length; i++) { - for (var j=0; j < this.filters[i].values.length; j++) { - if(this.filters[i].values[j].selected) { - this.filters[i].values[j].selected = false; - } - } - this.filters[i].countSelectedValues = 0; - } - this.clearKeywords(); - } - - private removeFilter(value:Value,filter:Filter){ - filter.countSelectedValues--; - if(value.selected == true){ - value.selected = false; - } - this.goTo(1, true); - } - goTo(page:number = 1, triggerPipe:boolean = true){ - this.refreshTable(page); - - var urlParameters = this.createUrlParameters(this.filters,true); - this.location.go(location.pathname,urlParameters); - if(triggerPipe) { - this.triggerPipe = !this.triggerPipe; - } - } - - filterChanged($event){ - this.goTo(1, true); - } - keywordChanged($event) { - this.searchUtils.keyword = $event.value; - this.goTo(1, true); - } -/* - downloadClicked($event) { - if($event.value == true) { - var queryParameters = this.createSearchQueryParameters(this.filters); - - this.downloadClick.emit({ - value: queryParameters - }); - } - } -*/ - - - getSelectedValues(filter):any{ - var selected = []; - if(filter.countSelectedValues >0){ - for (var i=0; i < filter.values.length; i++){ - if(filter.values[i].selected){ - selected.push(filter.values[i]); - } - } - } - return selected; - - } -} diff --git a/portal-2/src/app/searchPages/searchUtils/searchPageTableView.module.ts b/portal-2/src/app/searchPages/searchUtils/searchPageTableView.module.ts deleted file mode 100644 index 2586914e..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchPageTableView.module.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import{SearchPageTableViewComponent} from './searchPageTableView.component'; -import{SearchFormModule} from './searchForm.module'; -import{SearchResultsModule} from './searchResults.module'; -//import{DatasourceTableViewModule} from './datasourceTableView.module'; -//import{SearchFilterComponent} from './searchFilter.component'; -//import{SearchFilterModalComponent} from './searchFilterModal.component'; -import {SearchFilterModule} from './searchFilter.module'; -import{LoadingModalModule} from '../../utils/modal/loadingModal.module'; -import {ReportsServiceModule} from '../../services/reportsService.module'; -import{SearchPagingModule} from './searchPaging.module'; -import {SearchDownloadModule} from './searchDownload.module'; -import {ModalModule} from '../../utils/modal/modal.module'; -import {PagingModule} from '../../utils/paging.module'; -import {DataTableModule} from "angular2-datatable"; -import {ContentProvidersDatatablePipe} from '../../utils/pipes/contentProvidersDatatable.pipe'; - -import {PiwikServiceModule} from '../../utils/piwik/piwikService.module'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; - -import {HelperModule} from '../../utils/helper/helper.module'; -import {ErrorMessagesModule} from '../../utils/errorMessages.module'; - -@NgModule({ - imports: [ - CommonModule, FormsModule,RouterModule, SearchFormModule, SearchResultsModule, LoadingModalModule, - ReportsServiceModule, SearchPagingModule, SearchDownloadModule, ModalModule, PagingModule, - DataTableModule, SearchFilterModule, PiwikServiceModule, HelperModule, ErrorMessagesModule - ], - declarations: [ - SearchPageTableViewComponent//, - //SearchFilterComponent, - //SearchFilterModalComponent - , - ContentProvidersDatatablePipe -], - - providers:[ - PreviousRouteRecorder - ], - exports: [ - SearchPageTableViewComponent//, - //SearchFilterComponent, - //SearchFilterModalComponent - , - ContentProvidersDatatablePipe - ] -}) -export class SearchPageTableViewModule { } diff --git a/portal-2/src/app/searchPages/searchUtils/searchPaging.component.ts b/portal-2/src/app/searchPages/searchUtils/searchPaging.component.ts deleted file mode 100644 index 5044baa3..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchPaging.component.ts +++ /dev/null @@ -1,58 +0,0 @@ -import {Component, Input, Output, EventEmitter} from '@angular/core'; -import {Observable} from 'rxjs/Observable'; -import {ErrorCodes} from '../../utils/properties/openaireProperties'; - -@Component({ - selector: 'search-paging', - template: ` -
    -
    - {{searchUtils.totalResults}} {{type}}, page {{searchUtils.page}} of {{(totalPages(searchUtils.totalResults))}} -
    -
    - {{oldTotalResults}} {{type}}, page {{searchUtils.page}} of {{(totalPages(oldTotalResults))}} -
    -
    - -
    -
    - -
    -
    - ` -}) - -export class SearchPagingComponent { - @Input() searchUtils; - @Input() results; - @Input() baseUrl; - @Input() type; - @Input() parameterNames:string[]; - @Input() parameterValues:string[]; - - @Input() loadPaging: boolean = true; - @Input() oldTotalResults: number = 0; - - public totalResults: number = 0; - public errorCodes:ErrorCodes = new ErrorCodes(); - - // @Input() totalResults:number = 0; - constructor () {} - - ngOnInit() { - // this.totalResults = this.searchUtils.totalResults; - // if(!this.loadPaging && this.totalResults == 0) { - // this.totalResults = this.oldTotalResults; - // } - } - - totalPages(totalResults: number): number { - let totalPages:any = totalResults/(this.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - return totalPages; - } - - -} diff --git a/portal-2/src/app/searchPages/searchUtils/searchPaging.module.ts b/portal-2/src/app/searchPages/searchUtils/searchPaging.module.ts deleted file mode 100644 index 4a403bd1..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchPaging.module.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{SearchPagingComponent} from './searchPaging.component'; -import{PagingModule} from '../../utils/paging.module'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, PagingModule - ], - declarations: [ - SearchPagingComponent -], - - providers:[ - ], - exports: [ - SearchPagingComponent - - ] -}) -export class SearchPagingModule { } diff --git a/portal-2/src/app/searchPages/searchUtils/searchResult.component.html b/portal-2/src/app/searchPages/searchUtils/searchResult.component.html deleted file mode 100644 index 47e73654..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchResult.component.html +++ /dev/null @@ -1,124 +0,0 @@ - diff --git a/portal-2/src/app/searchPages/searchUtils/searchResult.component.ts b/portal-2/src/app/searchPages/searchUtils/searchResult.component.ts deleted file mode 100644 index cca7ba9f..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchResult.component.ts +++ /dev/null @@ -1,52 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {RouterHelper} from '../../utils/routerHelper.class'; - -@Component({ - selector: 'search-result', - templateUrl:'searchResult.component.html' -}) - -export class SearchResultComponent { - @Input() results: SearchResult[]; - @Input() status: number; - @Input() type: string; - @Input() showLoading: boolean = false; - @Input() showSubjects: boolean = false; - @Input() custom_class: string = "search-results"; - - public urlParam: string; - public linkToAdvancedSearchPage: string; - public errorCodes:ErrorCodes = new ErrorCodes(); - public routerHelper:RouterHelper = new RouterHelper(); - public errorMessage: string = "No results found"; - - constructor () {} - - ngOnInit() { - if(this.type == "publication") { - this.linkToAdvancedSearchPage = OpenaireProperties.getLinkToAdvancedSearchPublications(); - this.urlParam = "articleId"; - } else if(this.type == "dataset") { - this.linkToAdvancedSearchPage = OpenaireProperties.getLinkToAdvancedSearchDatasets(); - this.urlParam = "datasetId"; - } else if(this.type == "software") { - this.linkToAdvancedSearchPage = OpenaireProperties.getLinkToAdvancedSearchSoftware(); - this.urlParam = "softwareId"; - } else if(this.type == "project") { - this.linkToAdvancedSearchPage = OpenaireProperties.getLinkToAdvancedSearchProjects(); - this.urlParam = "projectId"; - } else if(this.type == "organization") { - this.linkToAdvancedSearchPage = OpenaireProperties.getLinkToAdvancedSearchOrganizations(); - this.urlParam = "organizationId"; - } else if(this.type == "dataprovider") { - this.linkToAdvancedSearchPage = OpenaireProperties.getLinkToAdvancedSearchDataProviders(); - this.urlParam = "datasourceId"; - } - } - - public quote(params: string):string { - return '"'+params+'"'; - } -} diff --git a/portal-2/src/app/searchPages/searchUtils/searchResults.module.ts b/portal-2/src/app/searchPages/searchUtils/searchResults.module.ts deleted file mode 100644 index 0ca38971..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchResults.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import {ErrorMessagesModule} from '../../utils/errorMessages.module'; - -import {SearchResult} from '../../utils/entities/searchResult'; -import {SearchResultComponent} from './searchResult.component'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - RouterModule, ErrorMessagesModule - ], - declarations: [ - SearchResultComponent, - -], - - providers:[ - ], - exports: [ - - SearchResultComponent - - ] -}) -export class SearchResultsModule { } diff --git a/portal-2/src/app/searchPages/searchUtils/searchUtils.class.ts b/portal-2/src/app/searchPages/searchUtils/searchUtils.class.ts deleted file mode 100644 index da9fb9cb..00000000 --- a/portal-2/src/app/searchPages/searchUtils/searchUtils.class.ts +++ /dev/null @@ -1,10 +0,0 @@ -export class SearchUtilsClass{ - page:number = 1; - size:number = 10; - status:number = 1; - keyword:string = ""; - baseUrl:string = ""; - totalResults = 0; - totalResultsNoFilters:number; // for organization landing - tab with projects - -} diff --git a/portal-2/src/app/searchPages/searchUtils/tabResult.component.html b/portal-2/src/app/searchPages/searchUtils/tabResult.component.html deleted file mode 100644 index da14e703..00000000 --- a/portal-2/src/app/searchPages/searchUtils/tabResult.component.html +++ /dev/null @@ -1,122 +0,0 @@ - diff --git a/portal-2/src/app/searchPages/searchUtils/tabResult.component.ts b/portal-2/src/app/searchPages/searchUtils/tabResult.component.ts deleted file mode 100644 index 39576e56..00000000 --- a/portal-2/src/app/searchPages/searchUtils/tabResult.component.ts +++ /dev/null @@ -1,31 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {ErrorCodes} from '../../utils/properties/openaireProperties'; -import {RouterHelper} from '../../utils/routerHelper.class'; - -@Component({ - selector: 'tab-result', - templateUrl: 'tabResult.component.html' - }) - -export class TabResultComponent { - @Input() results: SearchResult[]; - @Input() status: number; - @Input() type: string; - @Input() urlParam: string; - @Input() showLoading: boolean = false; - @Input() showOrganizations: boolean = true; - - public errorCodes:ErrorCodes = new ErrorCodes(); - public routerHelper:RouterHelper = new RouterHelper(); - public errorMessage: string = "No results found"; - constructor () { - - } - - ngOnInit() {} - - public quote(params: string):string { - return '"'+params+'"'; - } -} diff --git a/portal-2/src/app/searchPages/searchUtils/tabResult.module.ts b/portal-2/src/app/searchPages/searchUtils/tabResult.module.ts deleted file mode 100644 index 589b5623..00000000 --- a/portal-2/src/app/searchPages/searchUtils/tabResult.module.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {SearchResult} from '../../utils/entities/searchResult'; -import {TabResultComponent} from './tabResult.component'; -import {RouterModule} from '@angular/router'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - RouterModule - ], - declarations: [ - TabResultComponent, - ], - providers:[ - ], - exports: [ - TabResultComponent - ] -}) -export class TabResultModule { } diff --git a/portal-2/src/app/searchPages/simple/searchDataProviders-routing.module.ts b/portal-2/src/app/searchPages/simple/searchDataProviders-routing.module.ts deleted file mode 100644 index c268a082..00000000 --- a/portal-2/src/app/searchPages/simple/searchDataProviders-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{SearchDataprovidersComponent} from './searchDataproviders.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: SearchDataprovidersComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class SearchDataProvidersRoutingModule { } diff --git a/portal-2/src/app/searchPages/simple/searchDataProviders.module.ts b/portal-2/src/app/searchPages/simple/searchDataProviders.module.ts deleted file mode 100644 index 45f1ef1b..00000000 --- a/portal-2/src/app/searchPages/simple/searchDataProviders.module.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ SearchDataProvidersRoutingModule} from './searchDataProviders-routing.module'; -import{SearchDataprovidersComponent} from './searchDataproviders.component'; - -import {SearchResultsModule } from '../searchUtils/searchResults.module'; - -import {DataProvidersServiceModule} from '../../services/dataProvidersService.module'; -import {SearchFormModule} from '../searchUtils/searchForm.module'; -//import {SearchFilterModalModule} from '../searchUtils/searchFilterModal.module'; -import {SearchPageModule} from '../searchUtils/searchPage.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - - DataProvidersServiceModule, - SearchFormModule, SearchResultsModule, SearchDataProvidersRoutingModule, SearchPageModule - - ], - declarations: [ - SearchDataprovidersComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - SearchDataprovidersComponent - ] -}) -export class SearchDataProvidersModule { } diff --git a/portal-2/src/app/searchPages/simple/searchDataproviders.component.ts b/portal-2/src/app/searchPages/simple/searchDataproviders.component.ts deleted file mode 100644 index 8e57cd16..00000000 --- a/portal-2/src/app/searchPages/simple/searchDataproviders.component.ts +++ /dev/null @@ -1,360 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; -import {Location} from '@angular/common'; -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; -import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageComponent } from '../searchUtils/searchPage.component'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - -@Component({ - selector: 'search-dataproviders', - template: ` - - - - - ` -}) -export class SearchDataprovidersComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - public totalResults:number = 0 ; - public baseUrl:string; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public sub: any; public subResults: any; - public _location:Location; - public searchFields:SearchFields = new SearchFields(); - public refineFields: string[] = this.searchFields.DATASOURCE_REFINE_FIELDS; - public fieldIdsMap= this.searchFields.DATASOURCE_FIELDS; - public CSV: any = { "columnNames": [ "Title", "Type", "Coutries", "Compatibility" ], - "export":[] - }; - public CSVDownloaded = false; - public csvParams: string; - - public disableForms: boolean = false; - public loadPaging: boolean = true; - public oldTotalResults: number = 0; - - @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ; - - constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService ) { - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.searchUtils.page =1; - this.baseUrl = OpenaireProperties.getLinkToSearchDataProviders(); - } - - public ngOnInit() { - this.searchPage.refineFields = this.refineFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - var firstLoad =true; - - this.sub = this.route.queryParams.subscribe(params => { - if(params['page'] && this.searchUtils.page != params['page']) { - this.loadPaging = false; - this.oldTotalResults = this.searchUtils.totalResults; - } - - this.searchUtils.keyword = (params['keyword']?params['keyword']:''); - var refine = true; - if(this.searchUtils.page != ((params['page']=== undefined)?1:+params['page']) && this.filters && !firstLoad){ - refine = false; - - } - firstLoad = false; - this.searchUtils.page = (params['page']=== undefined)?1:+params['page']; - - var queryParameters = this.searchPage.getQueryParametersFromUrl(params); - this._getResults(queryParameters, refine, this.searchUtils.page, this.searchUtils.size); - }); - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } - } - - public getNumForEntity(entity: string, id:string) { - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - if(id != "" && entity != "") { - - this._searchDataprovidersService.numOfEntityDataproviders(id, entity).subscribe( - data => { - this.searchUtils.totalResults = data; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - } - - public getNumForSearch(keyword: string) { - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this._searchDataprovidersService.numOfDataproviders(keyword).subscribe( - data => { - this.searchUtils.totalResults = data; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - -public getResultsForDeposit(id:string, type:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.status = errorCodes.LOADING; - if(id != "") { - - this._searchDataprovidersService.searchDataprovidersForDeposit(id,type, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Dataproviders forDeposit: [id:"+id+", type:"+type+" ] [total results:"+this.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - public getResultsForEntity(entity:string, id:string, page: number, size: number){ - var parameters = ""; - - if(entity == "organization") { - parameters = "organizations/"+id; - } - - if(parameters != "") { - - this._searchDataprovidersService.searchDataprovidersForEntity(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Dataproviders for "+entity+": [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - } - - public getResultsForDataproviders(id:string, page: number, size: number){ - - this._searchDataprovidersService.getDataProvidersforEntityRegistry(id, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Dataproviders for Entity Registry: [Id:"+id+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - - public getResults(keyword:string,refine:boolean, page: number, size: number){ - var parameters = ""; - if(keyword.length > 0){ - parameters = "q="+ keyword; - } - this._getResults(parameters,refine,page,this.searchUtils.size); - } - private _getResults(parameters:string,refine:boolean, page: number, size: number){ - this.csvParams = parameters; - - // if(!refine && !this.searchPage){ - // this.searchPage = new SearchPageComponent(this._location); - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - this.subResults = this._searchDataprovidersService.searchDataproviders(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, this.searchPage.getFields()).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Content Providers: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - if(refine){ - this.filters = data[2]; - } - this.searchPage.checkSelectedFilters(this.filters); - // this.filters = this.searchPage.checkSelectedFilters(data[2]); - this.searchPage.updateBaseUrlWithParameters(this.filters); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - if(this.searchUtils.status == this.errorCodes.DONE) { - // Page out of limit!!! - let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - if(totalPages < page) { - this.searchUtils.totalResults = 0; - this.searchUtils.status = this.errorCodes.OUT_OF_BOUND; - } - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - } - ); - } - - private setFilters(){ - //TODO set filters from - } - - public queryChanged($event) { - this.loadPaging = true; - - var parameters = $event.value; - this._getResults(parameters, true, this.searchUtils.page, this.searchUtils.size); - } -} diff --git a/portal-2/src/app/searchPages/simple/searchDatasets-routing.module.ts b/portal-2/src/app/searchPages/simple/searchDatasets-routing.module.ts deleted file mode 100644 index 6e970898..00000000 --- a/portal-2/src/app/searchPages/simple/searchDatasets-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{SearchDatasetsComponent} from './searchDatasets.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: SearchDatasetsComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class SearchDatasetsRoutingModule { } diff --git a/portal-2/src/app/searchPages/simple/searchDatasets.component.ts b/portal-2/src/app/searchPages/simple/searchDatasets.component.ts deleted file mode 100644 index 60a8099a..00000000 --- a/portal-2/src/app/searchPages/simple/searchDatasets.component.ts +++ /dev/null @@ -1,275 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; -import {Location} from '@angular/common'; -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; - -import {SearchDatasetsService} from '../../services/searchDatasets.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageComponent } from '../searchUtils/searchPage.component'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; -import {DOI} from '../../utils/string-utils.class'; - -@Component({ - selector: 'search-datasets', - template: ` - - - - ` -}) - -export class SearchDatasetsComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters: Filter[] =[]; - // public totalResults:number = 0 ; - public baseUrl:string; - - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - private sub: any; - private subResults: any; - private searchFields:SearchFields = new SearchFields(); - public refineFields: string[] = this.searchFields.RESULT_REFINE_FIELDS; - public fieldIdsMap=this.searchFields.RESULT_FIELDS; - private urlParams : Map; - private _location:Location; - public csvParams: string; - public disableForms: boolean = false; - public loadPaging: boolean = true; - public oldTotalResults: number = 0; - - @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ; - constructor (private route: ActivatedRoute, private _searchDatasetsService: SearchDatasetsService ) { - - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.searchUtils.page =1; - this.baseUrl = OpenaireProperties.getLinkToSearchDatasets(); - - } - - public ngOnInit() { - this.searchPage.refineFields = this.refineFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - this.searchPage.type = "research data"; - var firstLoad =true; - this.sub = this.route.queryParams.subscribe(params => { - if(params['page'] && this.searchUtils.page != params['page']) { - this.loadPaging = false; - this.oldTotalResults = this.searchUtils.totalResults; - } - - this.searchUtils.keyword = (params['keyword']?params['keyword']:''); - var refine = true; - if(this.searchUtils.page != ((params['page']=== undefined)?1:+params['page']) && this.filters && !firstLoad){ - refine = false; - } - firstLoad = false; - this.searchUtils.page = (params['page']=== undefined)?1:+params['page']; - - var queryParameters = this.searchPage.getQueryParametersFromUrl(params); - this._getResults(queryParameters, refine, this.searchUtils.page, this.searchUtils.size); - - }); - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } - } - - -public getResultsForEntity(entity:string, id:string, page: number, size: number){ - var parameters = ""; - - if(entity == "project") { - parameters = "projects/"+id; - } - - if(parameters != "") { - - this._searchDatasetsService.searchDatasetsForEntity(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Research Data for "+entity+": [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getResultsForDataproviders(id:string, resultsFrom:string, page: number, size: number){ - var parameters; - if(resultsFrom == "collectedFrom") { - parameters = "datasets?fq=collectedfromdatasourceid exact "+'"'+id+'"'; - } else if(resultsFrom == "hostedBy") { - parameters = "datasets?fq=resulthostingdatasourceid exact "+'"'+id+'"'; - } - - if(parameters != "") { - - this._searchDatasetsService.searchDatasetsForDataproviders(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Research Data for Dataproviders: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getResults(keyword:string,refine:boolean, page: number, size: number){ - var parameters = ""; - if(keyword.length > 0){ - var DOIs:string[] = DOI.getDOIsFromString(keyword); - var doisParams = ""; - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; - } - if(doisParams.length > 0){ - parameters += "&"+doisParams; - }else{ - parameters = "q=" + keyword; - } - } - this._getResults(parameters,refine,page,size); -} -private _getResults(parameters:string,refine:boolean, page: number, size: number){ - this.csvParams = parameters; - - // if(!refine && !this.searchPage){ - // this.searchPage = new SearchPageComponent(this._location); - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - this.subResults = this._searchDatasetsService.searchDatasets(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, this.searchPage.getFields()).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Research Data: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - if(refine){ - this.filters = data[2]; - } - this.searchPage.checkSelectedFilters(this.filters); - this.searchPage.updateBaseUrlWithParameters(this.filters); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - if(this.searchUtils.status == this.errorCodes.DONE) { - // Page out of limit!!! - let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - if(totalPages < page) { - this.searchUtils.totalResults = 0; - this.searchUtils.status = this.errorCodes.OUT_OF_BOUND; - } - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - } - ); -} - - - - private setFilters(){ - //TODO set filters from - } - - public queryChanged($event) { - this.loadPaging = true; - - var parameters = $event.value; - //this.getResults(parameters, this.searchUtils.page, this.searchUtils.size, "searchPage"); - this._getResults(parameters, true, this.searchUtils.page, this.searchUtils.size); - } -} diff --git a/portal-2/src/app/searchPages/simple/searchDatasets.module.ts b/portal-2/src/app/searchPages/simple/searchDatasets.module.ts deleted file mode 100644 index 7bb43a80..00000000 --- a/portal-2/src/app/searchPages/simple/searchDatasets.module.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ SearchDatasetsRoutingModule} from './searchDatasets-routing.module'; -import{SearchDatasetsComponent} from './searchDatasets.component'; - -import {SearchResultsModule } from '../searchUtils/searchResults.module'; - -import {DatasetsServiceModule} from '../../services/datasetsService.module'; -import {SearchFormModule} from '../searchUtils/searchForm.module'; -//import {SearchFilterModalModule} from '../searchUtils/searchFilterModal.module'; -import {SearchPageModule} from '../searchUtils/searchPage.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - - DatasetsServiceModule, - SearchFormModule, SearchResultsModule, SearchDatasetsRoutingModule, SearchPageModule - - ], - declarations: [ - SearchDatasetsComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - SearchDatasetsComponent - ] -}) -export class SearchDatasetsModule { } diff --git a/portal-2/src/app/searchPages/simple/searchOrganizations-routing.module.ts b/portal-2/src/app/searchPages/simple/searchOrganizations-routing.module.ts deleted file mode 100644 index a2b4ad8c..00000000 --- a/portal-2/src/app/searchPages/simple/searchOrganizations-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{SearchOrganizationsComponent} from './searchOrganizations.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: SearchOrganizationsComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class SearchOrganizationsRoutingModule { } diff --git a/portal-2/src/app/searchPages/simple/searchOrganizations.component.ts b/portal-2/src/app/searchPages/simple/searchOrganizations.component.ts deleted file mode 100644 index 12c5d7ec..00000000 --- a/portal-2/src/app/searchPages/simple/searchOrganizations.component.ts +++ /dev/null @@ -1,175 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; -import {Location} from '@angular/common'; -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; -import {SearchOrganizationsService} from '../../services/searchOrganizations.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageComponent } from '../searchUtils/searchPage.component'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - -@Component({ - selector: 'search-organizations', - template: ` - - - - - ` - -}) -export class SearchOrganizationsComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - public baseUrl:string; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public sub: any; - public subResults: any; - public searchFields:SearchFields = new SearchFields(); - public refineFields: string[] = this.searchFields.ORGANIZATION_REFINE_FIELDS; - public fieldIdsMap = this.searchFields.ORGANIZATION_FIELDS; - public urlParams : Map; - public _location:Location; - public csvParams: string; - public disableForms: boolean = false; - public loadPaging: boolean = true; - public oldTotalResults: number = 0; - - @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ; - - constructor (private route: ActivatedRoute, private _searchOrganizationsService: SearchOrganizationsService ) { - - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.searchUtils.page =1; - this.baseUrl = OpenaireProperties.getLinkToSearchOrganizations(); - - } - - public ngOnInit() { - this.searchPage.refineFields = this.refineFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - var firstLoad = true; - this.sub = this.route.queryParams.subscribe(params => { - if(params['page'] && this.searchUtils.page != params['page']) { - this.loadPaging = false; - this.oldTotalResults = this.searchUtils.totalResults; - } - - this.searchUtils.keyword = (params['keyword']?params['keyword']:''); - var refine = true; - if(this.searchUtils.page != ((params['page']=== undefined)?1:+params['page']) && this.filters && !firstLoad){ - refine = false; - - } - firstLoad = false; - this.searchUtils.page = (params['page']=== undefined)?1:+params['page']; - - var queryParameters = this.searchPage.getQueryParametersFromUrl(params); - this._getResults(queryParameters, refine, this.searchUtils.page, this.searchUtils.size); - }); - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } - } - - - public getResults(keyword:string,refine:boolean, page: number, size: number){ - var parameters = ""; - if(keyword.length > 0){ - parameters = "q=" + keyword; - } - this._getResults(parameters,refine,page,this.searchUtils.size); - } - private _getResults(parameters:string,refine:boolean, page: number, size: number){ - this.csvParams = parameters; - - // if(!refine && !this.searchPage){ - // this.searchPage = new SearchPageComponent(this._location); - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - this.subResults = this._searchOrganizationsService.searchOrganizations(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, this.searchPage.getFields()).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Organizations: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - if(refine){ - this.filters = data[2]; - } - this.searchPage.checkSelectedFilters(this.filters); - this.searchPage.updateBaseUrlWithParameters(this.filters); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - if(this.searchUtils.status == this.errorCodes.DONE) { - // Page out of limit!!! - let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - if(totalPages < page) { - this.searchUtils.totalResults = 0; - this.searchUtils.status = this.errorCodes.OUT_OF_BOUND; - } - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - } - ); - } - - - public queryChanged($event) { - this.loadPaging = true; - - var parameters = $event.value; - console.info("queryChanged: Execute search query "+parameters); - this._getResults(parameters, true, this.searchUtils.page, this.searchUtils.size); - } -} diff --git a/portal-2/src/app/searchPages/simple/searchOrganizations.module.ts b/portal-2/src/app/searchPages/simple/searchOrganizations.module.ts deleted file mode 100644 index ca4c57d8..00000000 --- a/portal-2/src/app/searchPages/simple/searchOrganizations.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ SearchOrganizationsRoutingModule} from './searchOrganizations-routing.module'; -import{SearchOrganizationsComponent} from './searchOrganizations.component'; - -import {SearchResultsModule } from '../searchUtils/searchResults.module'; - -import {OrganizationsServiceModule} from '../../services/organizationsService.module'; -import {SearchFormModule} from '../searchUtils/searchForm.module'; -import {SearchPageModule} from '../searchUtils/searchPage.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - - OrganizationsServiceModule, - SearchFormModule, SearchResultsModule, SearchOrganizationsRoutingModule, SearchPageModule - - ], - declarations: [ - SearchOrganizationsComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - SearchOrganizationsComponent - ] -}) -export class SearchOrganizationsModule { } diff --git a/portal-2/src/app/searchPages/simple/searchProjects-routing.module.ts b/portal-2/src/app/searchPages/simple/searchProjects-routing.module.ts deleted file mode 100644 index 37ad2a39..00000000 --- a/portal-2/src/app/searchPages/simple/searchProjects-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{SearchProjectsComponent} from './searchProjects.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: SearchProjectsComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class SearchProjectsRoutingModule { } diff --git a/portal-2/src/app/searchPages/simple/searchProjects.component.ts b/portal-2/src/app/searchPages/simple/searchProjects.component.ts deleted file mode 100644 index 0c7bbb5f..00000000 --- a/portal-2/src/app/searchPages/simple/searchProjects.component.ts +++ /dev/null @@ -1,213 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; -import {Location} from '@angular/common'; -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; -import {SearchProjectsService} from '../../services/searchProjects.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageComponent } from '../searchUtils/searchPage.component'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; - -@Component({ - selector: 'search-projects', - template: ` - - - - ` - -}) -export class SearchProjectsComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters: Filter[] =[]; - public baseUrl:string; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public sub: any; - public subResults: any; - public searchFields:SearchFields = new SearchFields(); - public refineFields: string[] = this.searchFields.PROJECT_REFINE_FIELDS; - public fieldIdsMap = this.searchFields.PROJECT_FIELDS; - public urlParams : Map; - public _location:Location; - public csvParams: string; - public disableForms: boolean = false; - public loadPaging: boolean = true; - public oldTotalResults: number = 0; - - @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ; - - constructor (private route: ActivatedRoute, private _searchProjectsService: SearchProjectsService) { - console.info(" constructor SearchProjectsComponent "+this.refineFields.length); - - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.searchUtils.page =1; - this.baseUrl = OpenaireProperties.getLinkToSearchProjects(); - - } - - public ngOnInit() { - this.searchPage.refineFields = this.refineFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - console.info(" ngOnInit SearchProjectsComponent "+this.refineFields.length); - //get refine field filters from url parameters - var firstLoad = true; - this.sub = this.route.queryParams.subscribe(params => { - if(params['page'] && this.searchUtils.page != params['page']) { - this.loadPaging = false; - this.oldTotalResults = this.searchUtils.totalResults; - } - - //get keyword from url parameters - this.searchUtils.keyword = (params['keyword']?params['keyword']:''); - var refine = true; - if(this.searchUtils.page != ((params['page']=== undefined)?1:+params['page']) && this.filters && !firstLoad){ - refine = false; - - } - firstLoad = false; - //get page from url parameters - this.searchUtils.page = (params['page']=== undefined)?1:+params['page']; - var queryParameters = this.searchPage.getQueryParametersFromUrl(params); - this._getResults(queryParameters, refine, this.searchUtils.page, this.searchUtils.size); - }); - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } - } - - public getResults(keyword:string,refine:boolean, page: number, size: number){ - var parameters = ""; - if(keyword.length > 0){ - parameters = "q="+keyword; - } - this._getResults(parameters,refine,page,this.searchUtils.size); - } - private _getResults(parameters:string,refine:boolean, page: number, size: number){ - this.csvParams = parameters; - - // if(!refine && !this.searchPage){ - // this.searchPage = new SearchPageComponent(this._location); - // } - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - this.subResults = this._searchProjectsService.searchProjects(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, this.searchPage.getFields()).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Projects: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - if(refine){ - this.filters = data[2]; - } - this.searchPage.checkSelectedFilters(this.filters); - // this.filters = this.searchPage.checkSelectedFilters(data[2]); - this.searchPage.updateBaseUrlWithParameters(this.filters); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - if(this.searchUtils.status == this.errorCodes.DONE) { - // Page out of limit!!! - let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - if(totalPages < page) { - this.searchUtils.totalResults = 0; - this.searchUtils.status = this.errorCodes.OUT_OF_BOUND; - } - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - } - ); - } - - public getResultsForDataproviders(id:string, page: number, size: number){ - - this._searchProjectsService.getProjectsforDataProvider(id, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Projects for Dataproviders: [Id:"+id+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - - - public queryChanged($event) { - this.loadPaging = true; - - this.urlParams = undefined; - var parameters = $event.value; - this._getResults(parameters, true, this.searchUtils.page, this.searchUtils.size); - } - -} diff --git a/portal-2/src/app/searchPages/simple/searchProjects.module.ts b/portal-2/src/app/searchPages/simple/searchProjects.module.ts deleted file mode 100644 index 6a6d68ef..00000000 --- a/portal-2/src/app/searchPages/simple/searchProjects.module.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ SearchProjectsRoutingModule} from './searchProjects-routing.module'; -import{SearchProjectsComponent} from './searchProjects.component'; - -import {SearchResultsModule } from '../searchUtils/searchResults.module'; - -import {ProjectsServiceModule} from '../../services/projectsService.module'; -import {SearchFormModule} from '../searchUtils/searchForm.module'; -//import {SearchFilterModalModule} from '../searchUtils/searchFilterModal.module'; -import {SearchPageModule} from '../searchUtils/searchPage.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - - ProjectsServiceModule, - SearchFormModule, SearchResultsModule, SearchProjectsRoutingModule, SearchPageModule - - ], - declarations: [ - SearchProjectsComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - SearchProjectsComponent - ] -}) -export class SearchProjectsModule { } diff --git a/portal-2/src/app/searchPages/simple/searchPublications-routing.module.ts b/portal-2/src/app/searchPages/simple/searchPublications-routing.module.ts deleted file mode 100644 index 97bebe07..00000000 --- a/portal-2/src/app/searchPages/simple/searchPublications-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import{SearchPublicationsComponent} from './searchPublications.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: SearchPublicationsComponent, canActivate: [FreeGuard, IsRouteEnabled], data: { - redirect: '/error' - }, canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class SearchPublicationsRoutingModule { } diff --git a/portal-2/src/app/searchPages/simple/searchPublications.component.ts b/portal-2/src/app/searchPages/simple/searchPublications.component.ts deleted file mode 100644 index 2d667f14..00000000 --- a/portal-2/src/app/searchPages/simple/searchPublications.component.ts +++ /dev/null @@ -1,308 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; -import {Location} from '@angular/common'; - -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; - -import {SearchPublicationsService} from '../../services/searchPublications.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageComponent } from '../searchUtils/searchPage.component'; -import {SearchUtilsClass} from '../searchUtils/searchUtils.class'; -import {DOI} from '../../utils/string-utils.class'; - -@Component({ - selector: 'search-publications', - template: ` - - - - - ` - -}) -export class SearchPublicationsComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters =[]; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public baseUrl:string = ""; - public sub: any; - public subResults: any; - public searchFields:SearchFields = new SearchFields(); - public refineFields: string[] = this.searchFields.RESULT_REFINE_FIELDS; - public fieldIdsMap=this.searchFields.RESULT_FIELDS; - //: { [key:string] :{ name:string, operator:string, type:string, indexField:string, equalityOperator:string }} = this.searchFields.PUBLICATION_FIELDS_MAP; - public urlParams : Map; - @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ; - public _location:Location; - - public CSV: any = { "columnNames": ["Title", "Authors", "Publication Year", "DOI", - /*"Download From", "Publication type", "Journal",*/ - "Funder", "Project Name (GA Number)", "Access"], - "export":[] - }; - public CSVDownloaded = false; - public csvParams: string; - public disableForms: boolean = false; - public loadPaging: boolean = true; - public oldTotalResults: number = 0; - - constructor (private route: ActivatedRoute, private _searchPublicationsService: SearchPublicationsService ) { - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.searchUtils.page =1; - this.baseUrl = OpenaireProperties.getLinkToSearchPublications(); - - } - - public ngOnInit() { - this.searchPage.refineFields = this.refineFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - this.searchPage.type = "publications"; - var firstLoad =true; - this.sub = this.route.queryParams.subscribe(params => { - if(params['page'] && this.searchUtils.page != params['page']) { - this.loadPaging = false; - this.oldTotalResults = this.searchUtils.totalResults; - } - - this.searchUtils.keyword = (params['keyword']?params['keyword']:''); - var refine = true; - if(this.searchUtils.page != ((params['page']=== undefined)?1:+params['page']) && this.filters && !firstLoad){ - refine = false; - - } - firstLoad = false; - this.searchUtils.page = (params['page']=== undefined)?1:+params['page']; - var queryParameters = this.searchPage.getQueryParametersFromUrl(params); - this._getResults(queryParameters, refine, this.searchUtils.page, this.searchUtils.size); - }); - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } - } - -public getResultsForEntity(entity:string, id:string, page: number, size: number){ - var parameters = ""; - - if(entity == "project") { - parameters = "projects/"+id; - } - - if(parameters != "") { - - this._searchPublicationsService.searchPublicationsForEntity(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Publications for "+entity+": [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getResultsForDataproviders(id:string, resultsFrom:string, page: number, size: number){ - var parameters; - if(resultsFrom == "collectedFrom") { - parameters = "publications?fq=collectedfromdatasourceid exact "+'"'+id+'"'; - } else if(resultsFrom == "hostedBy") { - parameters = "publications?fq=resulthostingdatasourceid exact "+'"'+id+'"'; - } - - if(parameters != "") { - - this._searchPublicationsService.searchPublicationsForDataproviders(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Publications for Dataproviders: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getResults(keyword:string,refine:boolean, page: number, size: number){ - var parameters = ""; - if(keyword.length > 0){ - var DOIs:string[] = DOI.getDOIsFromString(keyword); - var doisParams = ""; - - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; - } - if(doisParams.length > 0){ - parameters += "&"+doisParams; - }else{ - parameters = "q=" + keyword; - } - } - this._getResults(parameters,refine,page,size); -} - -private _getResults(parameters:string,refine:boolean, page: number, size: number){ - this.csvParams = parameters; - - // if(!refine && !this.searchPage){ - // this.searchPage = new SearchPageComponent(this._location); - // } - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - this.subResults = this._searchPublicationsService.searchPublications(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, this.searchPage.getFields()).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Publications: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - if(refine){ - this.filters = data[2]; - } - this.searchPage.checkSelectedFilters(this.filters); - this.searchPage.updateBaseUrlWithParameters(this.filters); - - //var errorCodes:ErrorCodes = new ErrorCodes(); - - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - if(this.searchUtils.status == this.errorCodes.DONE) { - // Page out of limit!!! - let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - if(totalPages < page) { - this.searchUtils.totalResults = 0; - this.searchUtils.status = this.errorCodes.OUT_OF_BOUND; - } - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - - } - ); -} -/* -public getAggregatorResults(id:string, page: number, size: number){ - this.subResults = this._searchPublicationsService.searchAggregators('&fq=collectedfromdatasourceid exact "'+id+'"',"&refine=true&fields=resulthostingdatasource" , page, size).subscribe( - data => { - this.results = data; - - var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = errorCodes.ERROR; - } - ); -}*/ - - public queryChanged($event) { - this.loadPaging = true; - - var parameters = $event.value; - console.info("queryChanged: Execute search query "+parameters); - console.info("Search Pubs::page "+this.searchUtils.page); - this._getResults(parameters, true, this.searchUtils.page, this.searchUtils.size); - } - - -} diff --git a/portal-2/src/app/searchPages/simple/searchPublications.module.ts b/portal-2/src/app/searchPages/simple/searchPublications.module.ts deleted file mode 100644 index 784e29ac..00000000 --- a/portal-2/src/app/searchPages/simple/searchPublications.module.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ SearchPublicationsRoutingModule} from './searchPublications-routing.module'; -import{SearchPublicationsComponent} from './searchPublications.component'; - -import {SearchResultsModule } from '../searchUtils/searchResults.module'; - -import {PublicationsServiceModule} from '../../services/publicationsService.module'; -import {SearchFormModule} from '../searchUtils/searchForm.module'; -//import {SearchFilterModalModule} from '../searchUtils/searchFilterModal.module'; -import {SearchPageModule} from '../searchUtils/searchPage.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - - PublicationsServiceModule, - SearchFormModule, SearchResultsModule, SearchPublicationsRoutingModule, SearchPageModule - - ], - declarations: [ - SearchPublicationsComponent - ], - providers:[FreeGuard, IsRouteEnabled], - exports: [ - SearchPublicationsComponent - ] -}) -export class SearchPublicationsModule { } diff --git a/portal-2/src/app/searchPages/simple/searchSoftware-routing.module.ts b/portal-2/src/app/searchPages/simple/searchSoftware-routing.module.ts deleted file mode 100644 index 0ec1e843..00000000 --- a/portal-2/src/app/searchPages/simple/searchSoftware-routing.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import {SearchSoftwareComponent} from './searchSoftware.component'; -import {FreeGuard} from'../../login/freeGuard.guard'; -import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: SearchSoftwareComponent, canActivate: [FreeGuard], canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class SearchSoftwareRoutingModule { } diff --git a/portal-2/src/app/searchPages/simple/searchSoftware.component.ts b/portal-2/src/app/searchPages/simple/searchSoftware.component.ts deleted file mode 100644 index 5e6e89c5..00000000 --- a/portal-2/src/app/searchPages/simple/searchSoftware.component.ts +++ /dev/null @@ -1,275 +0,0 @@ -import {Component, Input, ViewChild} from '@angular/core'; -import { ActivatedRoute} from '@angular/router'; -import {Location} from '@angular/common'; -import { Filter, Value} from '../searchUtils/searchHelperClasses.class'; - -import {SearchSoftwareService} from '../../services/searchSoftware.service'; -import {SearchResult} from '../../utils/entities/searchResult'; -import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; -import {SearchPageComponent } from '../searchUtils/searchPage.component'; -import {SearchUtilsClass } from '../searchUtils/searchUtils.class'; -import {DOI} from '../../utils/string-utils.class'; - -@Component({ - selector: 'search-software', - template: ` - - - - ` -}) - -export class SearchSoftwareComponent { - private errorCodes: ErrorCodes; - - public results =[]; - public filters: Filter[] =[]; - // public totalResults:number = 0 ; - public baseUrl:string; - - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - private sub: any; - private subResults: any; - private searchFields:SearchFields = new SearchFields(); - public refineFields: string[] = this.searchFields.RESULT_REFINE_FIELDS; - public fieldIdsMap=this.searchFields.RESULT_FIELDS; - private urlParams : Map; - private _location:Location; - public csvParams: string; - public disableForms: boolean = false; - public loadPaging: boolean = true; - public oldTotalResults: number = 0; - - @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ; - constructor (private route: ActivatedRoute, private _searchSoftwareService: SearchSoftwareService ) { - - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this.searchUtils.page =1; - this.baseUrl = OpenaireProperties.getLinkToSearchSoftware(); - - } - - public ngOnInit() { - this.searchPage.refineFields = this.refineFields; - this.searchPage.fieldIdsMap = this.fieldIdsMap; - this.searchPage.type = "software"; - var firstLoad =true; - this.sub = this.route.queryParams.subscribe(params => { - if(params['page'] && this.searchUtils.page != params['page']) { - this.loadPaging = false; - this.oldTotalResults = this.searchUtils.totalResults; - } - - this.searchUtils.keyword = (params['keyword']?params['keyword']:''); - var refine = true; - if(this.searchUtils.page != ((params['page']=== undefined)?1:+params['page']) && this.filters && !firstLoad){ - refine = false; - } - firstLoad = false; - this.searchUtils.page = (params['page']=== undefined)?1:+params['page']; - - var queryParameters = this.searchPage.getQueryParametersFromUrl(params); - this._getResults(queryParameters, refine, this.searchUtils.page, this.searchUtils.size); - - }); - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } - } - - -public getResultsForEntity(entity:string, id:string, page: number, size: number){ - var parameters = ""; - - if(entity == "project") { - parameters = "projects/"+id; - } - - if(parameters != "") { - - this._searchSoftwareService.searchSoftwareForEntity(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Software for "+entity+": [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getResultsForDataproviders(id:string, resultsFrom:string, page: number, size: number){ - var parameters; - if(resultsFrom == "collectedFrom") { - parameters = "software?fq=collectedfromdatasourceid exact "+'"'+id+'"'; - } else if(resultsFrom == "hostedBy") { - parameters = "software?fq=resulthostingdatasourceid exact "+'"'+id+'"'; - } - - if(parameters != "") { - - this._searchSoftwareService.searchSoftwareForDataproviders(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Software for Dataproviders: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getResults(keyword:string,refine:boolean, page: number, size: number){ - var parameters = ""; - if(keyword.length > 0){ - var DOIs:string[] = DOI.getDOIsFromString(keyword); - var doisParams = ""; - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; - } - if(doisParams.length > 0){ - parameters += "&"+doisParams; - }else{ - parameters = "q=" + keyword; - } - } - this._getResults(parameters,refine,page,size); -} -private _getResults(parameters:string,refine:boolean, page: number, size: number){ - this.csvParams = parameters; - - // if(!refine && !this.searchPage){ - // this.searchPage = new SearchPageComponent(this._location); - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - //this.searchPage.openLoading(); - this.disableForms = true; - this.results = []; - this.searchUtils.totalResults = 0; - - this.subResults = this._searchSoftwareService.searchSoftware(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, this.searchPage.getFields()).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Software: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - if(refine){ - this.filters = data[2]; - } - this.searchPage.checkSelectedFilters(this.filters); - this.searchPage.updateBaseUrlWithParameters(this.filters); - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - //this.searchPage.closeLoading(); - this.disableForms = false; - - if(this.searchUtils.status == this.errorCodes.DONE) { - // Page out of limit!!! - let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size); - if(!(Number.isInteger(totalPages))) { - totalPages = (parseInt(totalPages, 10) + 1); - } - if(totalPages < page) { - this.searchUtils.totalResults = 0; - this.searchUtils.status = this.errorCodes.OUT_OF_BOUND; - } - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - //this.searchPage.closeLoading(); - this.disableForms = false; - } - ); -} - - - - private setFilters(){ - //TODO set filters from - } - - public queryChanged($event) { - this.loadPaging = true; - - var parameters = $event.value; - //this.getResults(parameters, this.searchUtils.page, this.searchUtils.size, "searchPage"); - this._getResults(parameters, true, this.searchUtils.page, this.searchUtils.size); - } -} diff --git a/portal-2/src/app/searchPages/simple/searchSoftware.module.ts b/portal-2/src/app/searchPages/simple/searchSoftware.module.ts deleted file mode 100644 index 227cb49d..00000000 --- a/portal-2/src/app/searchPages/simple/searchSoftware.module.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import{ SearchSoftwareRoutingModule} from './searchSoftware-routing.module'; -import{SearchSoftwareComponent} from './searchSoftware.component'; - -import {SearchResultsModule } from '../searchUtils/searchResults.module'; - -import {SoftwareServiceModule} from '../../services/softwareService.module'; -import {SearchFormModule} from '../searchUtils/searchForm.module'; -//import {SearchFilterModalModule} from '../searchUtils/searchFilterModal.module'; -import {SearchPageModule} from '../searchUtils/searchPage.module'; -import {FreeGuard} from'../../login/freeGuard.guard'; - -@NgModule({ - imports: [ - CommonModule, FormsModule, - - SoftwareServiceModule, - SearchFormModule, SearchResultsModule, SearchSoftwareRoutingModule, SearchPageModule - - ], - declarations: [ - SearchSoftwareComponent - ], - providers:[FreeGuard - ], - exports: [ - SearchSoftwareComponent - ] -}) -export class SearchSoftwareModule { } diff --git a/portal-2/src/app/services/dataProvidersService.module.ts b/portal-2/src/app/services/dataProvidersService.module.ts deleted file mode 100644 index 88e7b6df..00000000 --- a/portal-2/src/app/services/dataProvidersService.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {SearchDataprovidersService} from './searchDataproviders.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule - ], - declarations: [ - ], - providers:[ - SearchDataprovidersService -], - exports: [ - ] -}) -export class DataProvidersServiceModule { } diff --git a/portal-2/src/app/services/datasetsService.module.ts b/portal-2/src/app/services/datasetsService.module.ts deleted file mode 100644 index e5298338..00000000 --- a/portal-2/src/app/services/datasetsService.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {SearchDatasetsService} from './searchDatasets.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule - ], - declarations: [ - ], - providers:[ - SearchDatasetsService -], - exports: [ - ] -}) -export class DatasetsServiceModule { } diff --git a/portal-2/src/app/services/metrics.service.ts b/portal-2/src/app/services/metrics.service.ts deleted file mode 100644 index c9890373..00000000 --- a/portal-2/src/app/services/metrics.service.ts +++ /dev/null @@ -1,90 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {Metrics} from '../utils/entities/metrics'; -import {OpenaireProperties} from '../utils/properties/openaireProperties'; -import 'rxjs/add/operator/do'; -import { CacheService } from '../shared/cache.service'; -@Injectable() -export class MetricsService { - metrics: Metrics; - - constructor(private http: Http, public _cache: CacheService) {} - - getMetrics (id: string, entityType: string):any { - console.info("getMetrics in service"); - //let url = OpenaireProperties. getSearchAPIURLLast() + 'publications/' +id+"?format=json"; - let url = OpenaireProperties.getMetricsAPIURL()+entityType+"/"+id+"/clicks"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)) - .map(res => this.parseMetrics(res["downloads"], res["views"], res["total_downloads"], res["total_views"], - res["total_openaire_views"], res["total_openaire_downloads"], res["pageviews"])); - } - - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseMetrics(res["downloads"], res["views"], res["total_downloads"], res["total_views"], - res["total_openaire_views"], res["total_openaire_downloads"], res["pageviews"])); - } - - - parseMetrics(downloads: any, views: any, totalDownloads: string, totalViews: string, - totalOpenaireViews: string, totalOpenaireDownloads: string, pageViews: string): any { - this.metrics = new Metrics(); - - this.metrics.totalDownloads = totalDownloads; - this.metrics.totalViews = totalViews; - this.metrics.totalOpenaireViews = totalOpenaireViews; - this.metrics.totalOpenaireDownloads = totalOpenaireDownloads; - this.metrics.pageViews = pageViews; - - this.metrics.infos = new Map(); - - for(let i=0; i this.parseOrganizationInfo(res)); - } - - return this.http.get(url) - .map(res => res.json()) - .map(res => res['results'][0]) - //.map(res => res[0]['result']['metadata']['oaf:entity']['oaf:organization']) - //.map(res => [res, res['rels']['rel']]) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseOrganizationInfo(res)); - - - } -/* - getMetrics (id: string):any { - console.info("getOrganizationMetrics in service"); - //let url = OpenaireProperties. getSearchAPIURLLast() + 'publications/' +id+"?format=json"; - let url = OpenaireProperties.getMetricsAPIURL()+"organizations/"+id+"/clicks"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - return this.http.get(url) - .map(res => res.json()) - .map(res => res['views']) - .do(res => { - this._cache.set(key, res); - }); - } -*/ - private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } - - parseOrganizationInfo (data: any):any { - console.info("parseOrganizationInfo"); - this.organizationInfo = new OrganizationInfo(); - - let organization; - let relations; - - if(data != null) { - organization = data['result']['metadata']['oaf:entity']['oaf:organization']; - relations = data['result']['metadata']['oaf:entity']['oaf:organization']['rels']['rel']; - } else { - return null; - } - - if(organization != null) { - - if(organization.hasOwnProperty("websiteurl")) { - this.organizationInfo.title = {"name": organization.legalshortname, "url": organization.websiteurl}; - } else { - this.organizationInfo.title = {"name": organization.legalshortname, "url": ''}; - } - - this.organizationInfo.name = organization.legalname; - - if(this.organizationInfo.title.name == '') { - this.organizationInfo.title.name = this.organizationInfo.name; - } - - if(organization.hasOwnProperty("country")) { - this.organizationInfo.country = organization['country'].classname; - } - } - -//Comment Parsing Projects info -/* - if(data[1] != null) { - - let counter; - let length = relations.length!=undefined ? relations.length : 1; - - for(let i=0; i(); - } - - if(!this.organizationInfo.projects.has(relation['funding']['funder'].name)) { - this.organizationInfo.projects.set(relation['funding']['funder'].name, - new Array<{ "name": string, "id": string, "code": string, - "acronym": string, "funder": string, "funderId": string, - "fundingStream": string, "fundingLevel1": string, "fundingLevel2": string, - "sc39": string, "startDate": string, "endDate": string }>()); - } - - counter = this.organizationInfo.projects.get(relation['funding']['funder'].name).length; - this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter] = - { "name": "", "id": "", "code": "", - "acronym": "", "funder": "", "funderId": "", - "fundingStream": "", "fundingLevel1": "", "fundingLevel2": "", - "sc39": "", "startDate": "", "endDate": "" }; - - //let url = ""; - if(relation['to'].content != null && relation['to'].content != "") { - this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['id'] = relation['to'].content; - //url = OpenaireProperties.getsearchLinkToProject()+relation['to'].content; - } - this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['name'] = relation.title; - //this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['url'] = url; - this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['code'] = relation.code; - this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['acronym'] = relation.acronym; - - this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['funder'] = relation['funding']['funder'].shortname; - this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['funderId'] = relation['funding']['funder'].id; - if(relation['funding'].hasOwnProperty("funding_level_0")) { - this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['fundingStream'] = relation['funding']['funding_level_0'].name; - } - if(relation['funding'].hasOwnProperty("funding_level_1")) { - this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['fundingLevel1'] = relation['funding']['funding_level_1'].name; - } - if(relation['funding'].hasOwnProperty("funding_level_2")) { - this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['fundingLevel2'] = relation['funding']['funding_level_2'].name; - } - //this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['sc39'] = - //this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['startDate'] = - //this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['endDate'] = - } - } - - } - - - } /*else if(relation['to'].class == "isProvidedBy") { - - if(this.organizationInfo.dataProviders == undefined) { - this.organizationInfo.dataProviders = new Array<{ "name": string, "url": string, "type": string, "websiteUrl": string , "organizations": {"name": string, "url": string}[]}>(); - } - - counter = this.organizationInfo.dataProviders.length; - this.organizationInfo.dataProviders[counter] = { "name": "", "url": "", "type": "", "websiteUrl": "", "organizations": [] } - - let url=""; - if(relation['to'].content != null && relation['to'].content != "") { - url = OpenaireProperties.getsearchLinkToDataProvider()+relation['to'].content; - } - this.organizationInfo.dataProviders[counter]['name'] = relation.officialname; - this.organizationInfo.dataProviders[counter]['url'] = url; - if(relation.hasOwnProperty("datasourcetype")) { - this.organizationInfo.dataProviders[counter]['type'] = relation['datasourcetype'].classname; - } - this.organizationInfo.dataProviders[counter]['websiteUrl'] = relation.websiteurl; - }*/ -/* -----> - } - } - } -*/ - return this.organizationInfo; - - } - -} diff --git a/portal-2/src/app/services/organizationService.module.ts b/portal-2/src/app/services/organizationService.module.ts deleted file mode 100644 index ee150c3e..00000000 --- a/portal-2/src/app/services/organizationService.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {OrganizationService} from './organization.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule - ], - declarations: [ - ], - providers:[ - OrganizationService -], - exports: [ - ] -}) -export class OrganizationServiceModule { } diff --git a/portal-2/src/app/services/organizationsService.module.ts b/portal-2/src/app/services/organizationsService.module.ts deleted file mode 100644 index 0810f680..00000000 --- a/portal-2/src/app/services/organizationsService.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {SearchOrganizationsService} from './searchOrganizations.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule - ], - declarations: [ - ], - providers:[ - SearchOrganizationsService -], - exports: [ - ] -}) -export class OrganizationsServiceModule { } diff --git a/portal-2/src/app/services/project.service.ts b/portal-2/src/app/services/project.service.ts deleted file mode 100644 index 91cd3e69..00000000 --- a/portal-2/src/app/services/project.service.ts +++ /dev/null @@ -1,200 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {ProjectInfo} from '../utils/entities/projectInfo'; -import {OpenaireProperties} from '../utils/properties/openaireProperties'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../shared/cache.service'; -@Injectable() -export class ProjectService { - - constructor(private http: Http, public _cache: CacheService) {} - - projectInfo: ProjectInfo; - - getProjectInfo (id: string):any { - console.info("getProjectInfo in service"); - - let url = OpenaireProperties. getSearchAPIURLLast() + 'projects/'+id+"?format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)) - .map(res => this.parseProjectInfo(res)); - } - return this.http.get(url) - .map(res => res.json()) - .map(res => res['result']['metadata']['oaf:entity']['oaf:project']) - .map(res => [res, - res['fundingtree'], - res['rels']['rel']]) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseProjectInfo(res)); - - } - - /* - get project strtDate and endDate - */ - getProjectDates (id: string):any { - - let url = OpenaireProperties. getSearchAPIURLLast()+'projects/'+id+"?format=json"; - let key = url+'_projectDates'; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)) - .map(res => [res, - res['fundingtree'], - res['rels']['rel']]) - .map(res => this.parseProjectDates(id,res)) - } - return this.http.get(url) - .map(res => res.json()) - .map(res => res['result']['metadata']['oaf:entity']['oaf:project']) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res, - res['fundingtree'], - res['rels']['rel']]) - .map(res => this.parseProjectDates(id,res)) - - } - - getHTMLInfo(id: string): any { - console.info("getHTMLInfo in service"); - - let url = OpenaireProperties. getSearchAPIURLLast() + 'projects/'+id+"?format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)) - .map(res => this.parseHTMLInfo(res)); - } - return this.http.get(url) - .map(res => res.json()) - .map(res => res['result']['metadata']['oaf:entity']['oaf:project']) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseHTMLInfo(res)); - } - - private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } - - parseHTMLInfo (data: any):any { - let htmlInfo: {"title": string, "acronym": string, "callIdentifier": string}; - - if(data != null) { - htmlInfo = {"title": data.title, "acronym": data.acronym, "callIdentifier": data.callidentifier}; - } - console.info(htmlInfo); - return htmlInfo; - } - - parseProjectInfo (data: any):any { - this.projectInfo = new ProjectInfo(); - - if(data[0] != null) { - this.projectInfo.acronym = data[0].acronym; - this.projectInfo.title = data[0].title; - this.projectInfo.callIdentifier = data[0].callidentifier; - this.projectInfo.contractNum = data[0].code; - this.projectInfo.startDate = data[0].startdate; - this.projectInfo.endDate = data[0].enddate; - this.projectInfo.openAccessMandate = data[0].oamandatepublications; - this.projectInfo.specialClause39 = data[0].ecsc39; - } - if(data[1] != null) { - if(data[1]['funder'] != null) { - this.projectInfo.funder = data[1]['funder'].shortname; - } - - let funding; - this.projectInfo.funding = ""; - - if(data[1]['funding_level_2'] != null) { - funding = data[1]['funding_level_2'].id; - } else if(data[1]['funding_level_1'] != null) { - funding = data[1]['funding_level_1'].id; - } else if(data[1]['funding_level_0'] != null) { - funding = data[1]['funding_level_0'].id; - } - - if(funding != undefined) { - funding = funding.split("::"); - for(let i=1; i(); - - let name = ""; - let url = ""; - - if(!Array.isArray(data[2])) { - if(data[2].hasOwnProperty("legalshortname")) { - name = data[2].legalshortname; - } else if(data[2].hasOwnProperty("legalname")) { - name = data[2].legalname; - } - - if(data[2].hasOwnProperty("to") && name != "") { - url = OpenaireProperties.getsearchLinkToOrganization()+data[2]['to'].content; - } - if(name != "") { - this.projectInfo.organizations.set(name, url); - } - } else { - for(let i=0; i console.log(res['meta'])).map(res => [res['meta'].total, RefineResultsUtils.parse(res['refineResults'],fields, entityName)]).do(res => console.log(res)); - } - return this.http.get(link) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, RefineResultsUtils.parse(res['refineResults'],fields, entityName)]); - - } - getRefineFieldResultsByFieldName(fieldName:string, entityName:string):any{ - let link = OpenaireProperties.getSearchAPIURLForEntity(entityName)+"?fields="+fieldName + "&format=json"; - return this.getField(link,fieldName) - - } - - getField (link:string,fieldName:string):any{ - let url = link+"&refine=true&page=1&size=0"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parse(res,fieldName)); - } - return this.http.get(url) - .map(res => res.json()) - .map(res => res['refineResults']) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parse(res,fieldName)); - - } - parse(data: any,fieldName:string):any { - var values:AutoCompleteValue[] = []; - if(data){ - let field = data[fieldName]; - for(let i=0; i new Blob([res['_body']], { type: 'text/csv' })); - } - getCSVResponse(url: string){ - var headers = new Headers(); - headers.append('responseType', 'arraybuffer'); - return this.http.get(url) - .map(res => res['_body']); - } - downloadHTMLFile(url: string, info: string){ - var headers = new Headers(); - headers.append('responseType', 'arraybuffer'); - return this.http.get(url) - .map(res => this.addInfo(res, info)) - .map(res => new Blob([res['_body']], { type: 'text/html' })) - .do(res => console.log(res)) - } - - addInfo(res:any, info:string) { - /* - var para = res.document.createElement("P"); // Create a

    element - var t = res.document.createTextNode("This is a paragraph"); // Create a text node - para.appendChild(t); // Append the text to

    - res.document.body.appendChild(para); - */ - res['_body'] = info+res['_body']; - return res; - } - - private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } - - -} diff --git a/portal-2/src/app/services/reportsService.module.ts b/portal-2/src/app/services/reportsService.module.ts deleted file mode 100644 index 0d637dad..00000000 --- a/portal-2/src/app/services/reportsService.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {ReportsService} from './reports.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule - ], - declarations: [ - ], - providers:[ - ReportsService -], - exports: [ - ] -}) -export class ReportsServiceModule { } diff --git a/portal-2/src/app/services/searchDataproviders.service.ts b/portal-2/src/app/services/searchDataproviders.service.ts deleted file mode 100644 index ea622c6f..00000000 --- a/portal-2/src/app/services/searchDataproviders.service.ts +++ /dev/null @@ -1,528 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {OpenaireProperties} from '../utils/properties/openaireProperties'; -import {SearchResult} from '../utils/entities/searchResult'; -import {RefineResultsUtils} from './servicesUtils/refineResults.class'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../shared/cache.service'; -import {StringUtils} from '../utils/string-utils.class'; -@Injectable() -export class SearchDataprovidersService { - constructor(private http: Http, public _cache: CacheService) {} - - searchDataproviders (params: string, refineParams:string, page: number, size: number, refineFields:string[] ):any { - - let link = OpenaireProperties. getSearchAPIURLLast()+"datasources"; - - let url = link+"?"; - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page-1)+"&size="+size+"&format=json"; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "datasource")]); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "datasource")]); - } - //((oaftype exact datasource) and(collectedfromdatasourceid exact "openaire____::47ce9e9f4fad46e732cff06419ecaabb")) - advancedSearchDataproviders (params: string, page: number, size: number ):any { - let url = OpenaireProperties.getSearchResourcesAPIURL(); - var basicQuery = "(oaftype exact datasource) " - url += "?query="; - if(params!= null && params != '' ) { - url +=" ( "+basicQuery+ " ) " +" and (" + params + ")"; - }else{ - url +=" ( "+basicQuery+ " ) "; - } - - url += "&page="+(page-1)+"&size="+size+"&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]) - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]) - } - - searchCompatibleDataprovidersTable ():any { - let size: number = 0; - let url: string= OpenaireProperties.getSearchResourcesAPIURL(); - url += '?query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other) not(datasourcetypeuiid exact "pubsrepository::journal") not(datasourcetypeuiid exact "aggregator::pubsrepository::journals"))'; - url += "&page=0&size=0&format=json"; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => res['meta'].total); - } - - return this.http.get(url).map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => res['meta'].total); - } - - searchCompatibleDataproviders (params: string,refineParams:string, page: number, size: number, refineFields:string[] ):any { - console.info("in search Compatible Dataproviders service function"); - let url: string = OpenaireProperties.getSearchResourcesAPIURL(); - url += '?query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other) not(datasourcetypeuiid exact "pubsrepository::journal") not(datasourcetypeuiid exact "aggregator::pubsrepository::journals"))'; - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page-1)+"&size="+size+"&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "datasource")]); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "datasource")]); - } - - searchEntityRegistriesTable ():any { - let size: number = 0; - let url: string= OpenaireProperties.getSearchResourcesAPIURL(); - url += "?query=((oaftype exact datasource) and(datasourcetypeuiid = other))"; - url += "&page=0&size=0&format=json"; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => res['meta'].total); - } - - return this.http.get(url).map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => res['meta'].total); - } - - searchEntityRegistries (params: string,refineParams:string, page: number, size: number, refineFields:string[] ):any { - let url = OpenaireProperties.getSearchResourcesAPIURL(); - url += "?query=((oaftype exact datasource) and(datasourcetypeuiid = other))"; - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page-1)+"&size="+size+"&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "datasource")]); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "datasource")]); - } - - searchJournalsTable ():any { - let size: number = 0; - let url: string= OpenaireProperties.getSearchResourcesAPIURL(); - url += '?query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) and (datasourcetypeuiid exact "pubsrepository::journal" or datasourcetypeuiid exact "aggregator::pubsrepository::journals" ))'; - url += "&page=0&size=0&format=json"; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => res['meta'].total); - } - - return this.http.get(url).map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => res['meta'].total); - } - - searchJournals (params: string,refineParams:string, page: number, size: number, refineFields:string[] ):any { - console.info("in search Journals service function"); - let url: string = OpenaireProperties.getSearchResourcesAPIURL(); - //url += "?query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other))" - url += '?query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) and (datasourcetypeuiid exact "pubsrepository::journal" or datasourcetypeuiid exact "aggregator::pubsrepository::journals" ))'; - - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page-1)+"&size="+size+"&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "datasource")]); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "datasource")]); - } - - searchDataprovidersForDeposit (id: string,type:string, page: number, size: number):any { - let link = OpenaireProperties.getSearchResourcesAPIURL(); - var compatibilities = ""; - if(type == "Research Data"){ - compatibilities = " and (datasourcecompatibilityid <> UNKNOWN) and (datasourcecompatibilityid = openaire2.0_data)" - }else if(type == "Publications"){ - compatibilities = " and (datasourcecompatibilityid <> UNKNOWN) and (datasourcecompatibilityid <> openaire2.0_data)" - } - let url = link+"?query=(((deletedbyinference = false) AND (oaftype exact datasource)) "+((compatibilities && compatibilities.length > 0)?" "+compatibilities+" ":"")+") and (relorganizationid exact "+id+")"; - url += "&page="+(page-1)+"&size="+size+"&format=json"; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - searchDataProvidersBySubjects(keyword:string, type:string, page: number, size: number):any { - let link = OpenaireProperties.getSearchResourcesAPIURL(); - var compatibilities = ""; - if(type == "Research Data"){ - compatibilities = " and (datasourcecompatibilityid <> UNKNOWN) and (datasourcecompatibilityid = openaire2.0_data)" - }else if(type == "Publications"){ - compatibilities = " and (datasourcecompatibilityid <> UNKNOWN) and (datasourcecompatibilityid <> openaire2.0_data)" - } - let url = link+"?query=(((deletedbyinference = false) AND (oaftype exact datasource)) "+((compatibilities && compatibilities.length > 0)?" "+ - compatibilities+" ":"")+") "+ - " and (datasourcesubject all "+'"'+keyword+'"'+") " ; - url += "&page="+(page-1)+"&size="+size+"&format=json"; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - - } - - getDataProvidersforEntityRegistry(datasourceId: string, page: number, size: number ):any { - let url = OpenaireProperties.getSearchResourcesAPIURL(); - var basicQuery = "(oaftype exact datasource) " - url += "?query="; - if(datasourceId!= null && datasourceId != '' ) { - url +=" ( "+basicQuery+ " ) " +" and (collectedfromdatasourceid exact \"" + datasourceId + "\")"; - }else{ - url +=" ( "+basicQuery+ " ) "; - } - - url += "&page="+(page-1)+"&size="+size+"&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - searchDataprovidersForEntity (params: string, page: number, size: number):any { - let link = OpenaireProperties. getSearchAPIURLLast(); - let url = link+params+"/datasources?format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - } -/* - searchDataprovidersCSV (params: string, refineParams:string, page: number, size: number):any { - - let link = OpenaireProperties. getSearchAPIURLLast()+"datasources"; - - let url = link+"?"; - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page-1)+"&size="+size+"&format=json"; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseResultsCSV(res['results'])); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseResultsCSV(res['results'])); - } -*/ -/* - searchEntityRegistriesCSV (params: string,refineParams:string, page: number, size: number):any { - let url = OpenaireProperties.getSearchResourcesAPIURL(); - url += "?query=((oaftype exact datasource) and(datasourcetypeuiid = other))" - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page - 1)+"&size="+size+"&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseResultsCSV(res['results'])); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res) - }) - .map(res => this.parseResultsCSV(res['results'])); - } -*/ -/* - searchCompatibleDataprovidersCSV (params: string,refineParams:string, page: number, size: number):any { - let url = OpenaireProperties.getSearchResourcesAPIURL(); - url += "?query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other))" - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page - 1)+"&size="+size+"&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseResultsCSV(res['results'])); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseResultsCSV(res['results'])); - } -*/ - - - parseResults(data: any): SearchResult[] { - let results: SearchResult[] = []; - - let length = Array.isArray(data) ? data.length : 1; - - for(let i=0; i = new Set(); - - let relLength = Array.isArray(resData['rels']['rel']) ? resData['rels']['rel'].length : 1; - - for(let i=0; i res.json()) - .map(res => res.total) - .do(res => { - this._cache.set(key, res); - }); - } - - numOfEntityDataproviders(id: string, entity: string):any { - var parameters = ""; - if(entity == "organization") { - parameters = "organizations/"+id+"/datasources/count"; - } - - let url = OpenaireProperties.getSearchAPIURLLast()+parameters+"?format=json"; - return this.numOfDataproviders(url); - } - - numOfSearchDataproviders(params: string):any { - let url: string = OpenaireProperties.getSearchAPIURLLast()+"datasources/count?format=json"; - if(params != "") { - url += "&q=" + params; - } - - return this.numOfDataproviders(url); - } -/* - private quote(word: any): string { - return '"'+word+'"'; - } -*/ -} diff --git a/portal-2/src/app/services/searchDatasets.service.ts b/portal-2/src/app/services/searchDatasets.service.ts deleted file mode 100644 index 09bc74a0..00000000 --- a/portal-2/src/app/services/searchDatasets.service.ts +++ /dev/null @@ -1,364 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {OpenaireProperties} from '../utils/properties/openaireProperties'; -import {SearchResult} from '../utils/entities/searchResult'; -import {RefineResultsUtils} from './servicesUtils/refineResults.class'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../shared/cache.service'; -@Injectable() -export class SearchDatasetsService { - private sizeOfDescription: number = 270; - - constructor(private http: Http, public _cache: CacheService) {} - - searchDatasets (params: string, refineParams:string, page: number, size: number, refineFields:string[] ):any { - - let link = OpenaireProperties.getSearchAPIURLLast()+"datasets"; - - let url = link+"?"; - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+ (page-1) +"&size="+size+"&format=json"; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "dataset")]); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "dataset")]); - } - searchDatasetById (id: string ):any { - - let url = OpenaireProperties.getSearchAPIURLLast()+"datasets/"+id+"?format=json"; - let key = url+"-searchById"; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseResults(res)); - } - - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseResults(res)); - } - - searchAggregators (id: string, params: string, refineParams:string, page: number, size: number ):any { - - let link = OpenaireProperties.getSearchAPIURLLast()+"datasets"; - - let url = link+"?"+"&format=json"; - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page-1)+"&size="+size; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseRefineResults(id, res['refineResults'])); - } - - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseRefineResults(id, res['refineResults'])) - } - - searchDatasetsByDois (DOIs: string[], refineParams:string, page: number, size: number, refineFields:string[] ):any { - let link = OpenaireProperties.getSearchAPIURLLast()+"datasets"; - let url = link+"?"; - var doisParams = ""; - - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; - } - if(doisParams.length > 0){ - url += "&"+doisParams; - - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+ (page-1) +"&size="+size+"&format=json"; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "dataset")]); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "dataset")]); - } - advancedSearchDatasets (params: string, page: number, size: number ):any { - let url = OpenaireProperties.getSearchResourcesAPIURL(); - var basicQuery = "(oaftype exact result) and (resulttypeid exact dataset) " - url += "?query="; - if(params!= null && params != '' ) { - url +=" ( "+basicQuery+ " ) " +" and (" + params + ")"; - }else{ - url +=" ( "+basicQuery+ " ) "; - } - - url += "&page="+(page-1)+"&size="+size; - url += "&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .map(res => [res['meta'].total, this.parseResults(res['results'])]) - .do(res => { - this._cache.set(key, res); - }); - } - searchDatasetsForEntity (params: string, page: number, size: number):any { - let link = OpenaireProperties.getSearchAPIURLLast(); - let url = link+params+"/datasets"+"?format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - - searchDatasetsForDataproviders(params: string, page: number, size: number):any { - let link = OpenaireProperties.getSearchAPIURLLast(); - let url = link+params+ "&page="+(page-1)+"&size="+size + "&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - - parseResults(data: any): SearchResult[] { - let results: SearchResult[] = []; - - let length = Array.isArray(data) ? data.length : 1; - - for(let i=0; i(); - } - - result['authors'].push({"name": relation.fullname, "id": relation['to'].content}); - } else */if(relation['to'].class == "isProducedBy") { - result['projects'] = this.parseProjects(result['projects'], relation); - } - } - } - } - - if(resData.hasOwnProperty("creator") && resData['creator'] != null) { - if(result['authors'] == undefined) { - result['authors'] = new Array(); - } - - let authors = resData['creator']; - let length = Array.isArray(authors) ? authors.length : 1; - - for(let i=0; i this.sizeOfDescription) { - result.description = result.description.substring(0, this.sizeOfDescription)+"..."; - } - - result.embargoEndDate = resData.embargoenddate; - - if(!Array.isArray(resData.publisher)) { - result.publisher = resData.publisher; - } else { - for(let i=0; i(); - } - - let countProjects = projects.length; - - projects[countProjects] = { - "id": "", "acronym": "", "title": "", - "funderShortname": "", "funderName": "", - "code": "" - } - - if(relation.title != 'unidentified') { - projects[countProjects]['id'] = - /*OpenaireProperties.getsearchLinkToProject() + */relation['to'].content; - projects[countProjects]['acronym'] = relation.acronym; - projects[countProjects]['title'] = relation.title; - projects[countProjects]['code'] = relation.code; - } else { - projects[countProjects]['id'] = ""; - projects[countProjects]['acronym'] = ""; - projects[countProjects]['title'] = ""; - projects[countProjects]['code'] = ""; - } - - if(relation.hasOwnProperty("funding")) { - let fundingLength = Array.isArray(relation['funding']) ? relation['funding'].length : 1; - - for(let z=0; z res.json()) - .map(res => res.total) - .do(res => { - this._cache.set(key, res); - }); - } - - numOfEntityDatasets(id: string, entity: string):any { - var parameters = ""; - - if(entity == "project") { - parameters = "projects/"+id+"/datasets/count"; - } - - let url = OpenaireProperties.getSearchAPIURLLast()+parameters+"?format=json"; - return this.numOfDatasets(url); - } - - numOfSearchDatasets(params: string):any { - let url = OpenaireProperties.getSearchAPIURLLast()+"datasets/count?format=json"; - if(params != "") { - url += "&q=" + params; - } - return this.numOfDatasets(url); - } -} diff --git a/portal-2/src/app/services/searchOrganizations.service.ts b/portal-2/src/app/services/searchOrganizations.service.ts deleted file mode 100644 index 6d55ab47..00000000 --- a/portal-2/src/app/services/searchOrganizations.service.ts +++ /dev/null @@ -1,207 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../shared/cache.service'; -import {OpenaireProperties} from '../utils/properties/openaireProperties'; -import {SearchResult} from '../utils/entities/searchResult'; -import {RefineResultsUtils} from './servicesUtils/refineResults.class'; - -@Injectable() -export class SearchOrganizationsService { - - constructor(private http: Http, public _cache: CacheService) {} - - parseResultsForDeposit(data: any): {"name": string, "id": string}[] { - let results: {"name": string, "id": string}[] = []; - - let length = Array.isArray(data) ? data.length : 1; - - for(let i=0; i [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "organization")]); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "organization")]); - } - advancedSearchOrganizations (params: string, page: number, size: number ):any { - let url = OpenaireProperties.getSearchResourcesAPIURL(); - var basicQuery = "(oaftype exact organization) " - url += "?query="; - if(params!= null && params != '' ) { - url +=" ( "+basicQuery+ " ) " +" and (" + params + ")"; - }else{ - url +=" ( "+basicQuery+ " ) "; - } - - url += "&page="+(page-1)+"&size="+size; - url += "&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - parseResults(data: any): SearchResult[] { - let results: SearchResult[] = []; - - let length = Array.isArray(data) ? data.length : 1; - - for(let i=0; i(); - } - - let countProjects = result['projects'].length; - - result['projects'][countProjects] = { - "id": "", "acronym": "", "title": "", - "funderShortname": "", "funderName": "", - "code": "" - } - - if(relation.title != 'unidentified') { - result['projects'][countProjects]['id'] = - /*OpenaireProperties.getsearchLinkToProject() + */relation['to'].content; - result['projects'][countProjects]['acronym'] = relation.acronym; - result['projects'][countProjects]['title'] = relation.title; - result['projects'][countProjects]['code'] = relation.code; - } else { - result['projects'][countProjects]['id'] = ""; - result['projects'][countProjects]['acronym'] = ""; - result['projects'][countProjects]['title'] = ""; - result['projects'][countProjects]['code'] = ""; - } - - if(relation.hasOwnProperty("funding")) { - let fundingLength = Array.isArray(relation['funding']) ? relation['funding'].length : 1; - - for(let z=0; z res.json()) - .map(res => res.total) - .do(res => { - this._cache.set(key, res); - }); - } - - numOfEntityOrganizations(id: string, entity: string):any { - // currently not used - if used fix entity comparison below - var parameters: string = ""; - if(entity == "organization") { - parameters = "organizations/"+id+"/organizations/count"; - } - - let url = OpenaireProperties.getSearchAPIURLLast()+parameters+"?format=json"; - return this.numOfOrganizations(url); - } - - numOfSearchOrganizations(params: string):any { - let url = OpenaireProperties.getSearchAPIURLLast()+"organizations/count?format=json"; - if(params != "") { - url += "&q=" + params; - } - return this.numOfOrganizations(url); - } -} diff --git a/portal-2/src/app/services/searchProjects.service.ts b/portal-2/src/app/services/searchProjects.service.ts deleted file mode 100644 index abcf601e..00000000 --- a/portal-2/src/app/services/searchProjects.service.ts +++ /dev/null @@ -1,282 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../shared/cache.service'; -import {OpenaireProperties} from '../utils/properties/openaireProperties'; -import {SearchResult} from '../utils/entities/searchResult'; -import {RefineResultsUtils} from './servicesUtils/refineResults.class'; - -@Injectable() -export class SearchProjectsService { - private sizeOfDescription: number = 270; - - constructor(private http: Http, public _cache: CacheService) {} - - searchProjects (params: string, refineParams:string, page: number, size: number, refineFields:string[] ):any { - - console.info("In searchProjects"); - - let link = OpenaireProperties.getSearchAPIURLLast()+"projects"; - - let url = link+"?"; - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page-1)+"&size="+size + "&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "project")]); - } - - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "project")]); - } - getProjectsforDataProvider (datasourceId: string, page: number, size: number ):any { - let url = OpenaireProperties.getSearchResourcesAPIURL(); - var basicQuery = "(oaftype exact project) " - url += "?query="; - if(datasourceId!= null && datasourceId != '' ) { - url +=" ( "+basicQuery+ " ) " +" and (collectedfromdatasourceid exact \"" + datasourceId + "\")"; - }else{ - url +=" ( "+basicQuery+ " ) "; - } - - url += "&page="+(page-1)+"&size="+size; - url += "&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - advancedSearchProjects (params: string, page: number, size: number ):any { - let url = OpenaireProperties.getSearchResourcesAPIURL(); - var basicQuery = "(oaftype exact project) " - url += "?query="; - if(params!= null && params != '' ) { - url +=" ( "+basicQuery+ " ) " +" and (" + params + ")"; - }else{ - url +=" ( "+basicQuery+ " ) "; - } - - url += "&page="+(page-1)+"&size="+size; - url += "&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - getProjectsForOrganizations (organizationId: string, filterquery: string, page: number, size: number, refineFields:string[] ):any { - let url = OpenaireProperties.getSearchResourcesAPIURL(); - var basicQuery = "(oaftype exact project) " - url += "?query="; - if(filterquery!= null && filterquery != '' ) { - url +="( ( "+basicQuery+ " ) and (relorganizationid exact \"" + organizationId + "\")"+" " + filterquery + ")"; - }else{ - url +=" (( "+basicQuery+ " ) " +" and (relorganizationid exact \"" + organizationId + "\"))"; - } - if(refineFields!= null && refineFields.length > 0 ) { - url +="&refine=true"; - for(let i=0; i< refineFields.length ; i++ ){ - url +="&fields="+refineFields[i]; - } - } - url += "&page="+(page-1)+"&size="+size; - url += "&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "project")]); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "project")]); - } - getFunders():any { - let url = OpenaireProperties.getSearchAPIURLLast()+"projects?refine=true&fields=funder&size=0"+ "&format=json";; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, res['refineResults']['funder']]); - } - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, res['refineResults']['funder']]); - - - } - - searchForProjectsObs(keyword:string, funderId:string):any { - let url = 'search?action=search&sTransformer=projects_openaire&query='+ - '%28oaftype+exact+project%29+and+%28%28projecttitle+%3D+%22'+keyword+'%22%29+or+%28projectacronym+%3D+%22'+keyword+'%22%29+or+%28projectcode+%3D+%22'+keyword+'%22%29%29+and+%28funder+exact+'+funderId+'%29&size=10&locale=en_GB&format=json'; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - return this.http.get(url).toPromise() - .then(request =>{ - return (request.json().response.results)?request.json().response.results.result:request.json().response.result; - - }) ; - } - parseResults(data: any): SearchResult[] { - let results: SearchResult[] = []; - - let length = Array.isArray(data) ? data.length : 1; - - for(let i=0; i(); - } - - let countOrganizations = result['organizations'].length; - - result['organizations'][countOrganizations] = { "name": "", "id": "" } - - result['organizations'][countOrganizations]['id'] = - /*OpenaireProperties.getsearchLinkToOrganization() + */relation['to'].content; - if(relation.legalshortname) { - result['organizations'][countOrganizations]['name'] = relation.legalshortname; - } else { - result['organizations'][countOrganizations]['name'] = relation.legalname; - } - } - } - } - } - if(resData.hasOwnProperty("fundingtree")) { - if(result['funders'] == undefined) { - result['funders'] = new Array< - {"funderShortname": string, "funderName": string}>(); - } - - let fundingLength = Array.isArray(resData['fundingtree']) ? resData['fundingtree'].length : 1; - - for(let z=0; z res.json()) - .map(res => res.total) - .do(res => { - this._cache.set(key, res); - }); - } - - numOfEntityProjects(id: string, entity: string):any { - //let url = OpenaireProperties.getSearchAPIURLLast()+params+(params.indexOf("?") == -1 ?"?":"&")+"format=json"; - var parameters: string = ""; - if(entity == "organization") { - parameters = "organizations/"+id+"/projects/count"; - } - - let url = OpenaireProperties.getSearchAPIURLLast()+parameters+ "?format=json"; - - return this.numOfProjects(url); - } - - numOfSearchProjects(params: string):any { - let url = OpenaireProperties.getSearchAPIURLLast()+"projects/count?format=json"; - if(params != "") { - url += "&q=" + params; - } - return this.numOfProjects(url); - } -} diff --git a/portal-2/src/app/services/searchPublications.service.ts b/portal-2/src/app/services/searchPublications.service.ts deleted file mode 100644 index 292abe90..00000000 --- a/portal-2/src/app/services/searchPublications.service.ts +++ /dev/null @@ -1,487 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../shared/cache.service'; - -import {OpenaireProperties} from '../utils/properties/openaireProperties'; -import {SearchResult} from '../utils/entities/searchResult'; -import {RefineResultsUtils} from './servicesUtils/refineResults.class'; - -@Injectable() -export class SearchPublicationsService { - private sizeOfDescription: number = 270; - - constructor(private http: Http, public _cache: CacheService) {} - - searchPublications (params: string, refineParams:string, page: number, size: number, refineFields:string[] ):any { - let link = OpenaireProperties.getSearchAPIURLLast()+"publications"; - - let url = link+"?"; - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page-1)+"&size="+size+"&format=json"; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "publication")]); - } - - return this.http.get(url) - .map(res => res.json()) - // .do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "publication")]); - } - searchPublicationById (id: string ):any { - - let url = OpenaireProperties.getSearchAPIURLLast()+"publications/"+id+"?format=json"; - let key =url+"-searchById"; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseResults(res)); - } - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseResults(res)); - } - - searchAggregators (id: string, params: string, refineParams:string, page: number, size: number ):any { - - let link = OpenaireProperties.getSearchAPIURLLast()+"publications"; - - let url = link+"?"+"&format=json"; - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page-1)+"&size="+size; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseRefineResults(id, res['refineResults'])); - } - - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseRefineResults(id, res['refineResults'])); - } - - searchPublicationsByDois (DOIs: string[], refineParams:string, page: number, size: number, refineFields:string[] ):any { - - let link = OpenaireProperties.getSearchAPIURLLast()+"publications"; - - let url = link+"?"+"&format=json&"; - var doisParams = ""; - - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; - } - if(doisParams.length > 0){ - url +="&"+doisParams; - - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page-1)+"&size="+size; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "publication")]); - } - - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "publication")]); - } - - advancedSearchPublications (params: string, page: number, size: number ):any { - let url = OpenaireProperties.getSearchResourcesAPIURL(); - var basicQuery = "(oaftype exact result) and (resulttypeid exact publication) "; - url += "?query="; - if(params!= null && params != '' ) { - url +=" ( "+basicQuery+ " ) " +" and (" + params + ")"; - }else{ - url +=" ( "+basicQuery+ " ) "; - } - - url += "&page="+(page-1)+"&size="+size; - url += "&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - searchPublicationsForEntity (params: string, page: number, size: number):any { - let link = OpenaireProperties.getSearchAPIURLLast(); - let url = link+params+"/publications"+ "?format=json"; - url += "&page="+(page-1)+"&size="+size; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - - searchPublicationsForDataproviders(params: string, page: number, size: number):any { - let link = OpenaireProperties.getSearchAPIURLLast(); - let url = link+params+ "&page="+(page-1)+"&size="+size + "&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - } -/* - searchPublicationsCSV (params: string, refineParams:string, page: number, size: number):any { - - let link = OpenaireProperties.getSearchAPIURLLast()+"publications"; - - let url = link+"?"; - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page-1)+"&size="+size+ "&format=json"; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseResultsCSV(res['results'])); - } - - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseResultsCSV(res['results'])); - } -*/ - - parseResults(data: any): SearchResult[] { - let results: SearchResult[] = []; - - let length = Array.isArray(data) ? data.length : 1; - - for(let i=0; i(); - } - - result['authors'].push({"name": relation.fullname, "id": relation['to'].content}); - } else */if(relation['to'].class == "isProducedBy") { - result['projects'] = this.parseProjects(result['projects'], relation); - } - } - } - } - - if(resData.hasOwnProperty("creator") && resData['creator'] != null) { - if(result['authors'] == undefined) { - result['authors'] = new Array(); - } - - let authors = resData['creator']; - let length = Array.isArray(authors) ? authors.length : 1; - - for(let i=0; i this.sizeOfDescription) { - result.description = result.description.substring(0, this.sizeOfDescription) + "..."; - } - - - result.embargoEndDate = resData.embargoenddate; - - results.push(result); - } - - return results; - } - - parseProjects(projects: { "id": string, "acronym": string, "title": string, - "funderShortname": string, "funderName": string, - "code": string }[], relation: any ) : { - "id": string, "acronym": string, "title": string, - "funderShortname": string, "funderName": string, - "code": string }[] { - if(projects == undefined) { - projects = new Array< - { "id": string, "acronym": string, "title": string, - "funderShortname": string, "funderName": string, - "code": string - }>(); - } - - let countProjects = projects.length; - - projects[countProjects] = { - "id": "", "acronym": "", "title": "", - "funderShortname": "", "funderName": "", - "code": "" - } - - if(relation.title != 'unidentified') { - projects[countProjects]['id'] = - /*OpenaireProperties.getsearchLinkToProject() + */relation['to'].content; - projects[countProjects]['acronym'] = relation.acronym; - projects[countProjects]['title'] = relation.title; - projects[countProjects]['code'] = relation.code; - } else { - projects[countProjects]['id'] = ""; - projects[countProjects]['acronym'] = ""; - projects[countProjects]['title'] = ""; - projects[countProjects]['code'] = ""; - } - - if(relation.hasOwnProperty("funding")) { - let fundingLength = Array.isArray(relation['funding']) ? relation['funding'].length : 1; - - for(let z=0; z res.json()) - .map(res => res.total) - .do(res => { - this._cache.set(key, res); - }); - } - - numOfEntityPublications(id: string, entity: string):any { - var parameters: string = ""; - if(entity == "project") { - parameters = "projects/"+id+"/publications/count"; - } - let url = OpenaireProperties.getSearchAPIURLLast()+parameters+"?format=json"; - return this.numOfPublications(url); - } - - numOfSearchPublications(params: string):any { - let url = OpenaireProperties.getSearchAPIURLLast()+"publications/count?format=json"; - if(params != "") { - url += "&q=" + params; - } - return this.numOfPublications(url); - } -/* - private quote(word: any): string { - return '"'+word+'"'; - } -*/ -} diff --git a/portal-2/src/app/services/searchSoftware.service.ts b/portal-2/src/app/services/searchSoftware.service.ts deleted file mode 100644 index 2001aaa6..00000000 --- a/portal-2/src/app/services/searchSoftware.service.ts +++ /dev/null @@ -1,364 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {OpenaireProperties} from '../utils/properties/openaireProperties'; -import {SearchResult} from '../utils/entities/searchResult'; -import {RefineResultsUtils} from './servicesUtils/refineResults.class'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../shared/cache.service'; -@Injectable() -export class SearchSoftwareService { - private sizeOfDescription: number = 270; - - constructor(private http: Http, public _cache: CacheService) {} - - searchSoftware (params: string, refineParams:string, page: number, size: number, refineFields:string[] ):any { - - let link = OpenaireProperties.getSearchAPIURLLast()+"software"; - - let url = link+"?"; - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+ (page-1) +"&size="+size+"&format=json"; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "software")]); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "software")]); - } - searchSoftwareById (id: string ):any { - - let url = OpenaireProperties.getSearchAPIURLLast()+"software/"+id+"?format=json"; - let key = url+"-searchById"; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseResults(res)); - } - - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseResults(res)); - } - - searchAggregators (id: string, params: string, refineParams:string, page: number, size: number ):any { - - let link = OpenaireProperties.getSearchAPIURLLast()+"software"; - - let url = link+"?"+"&format=json"; - if(params!= null && params != '' ) { - url += params; - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+(page-1)+"&size="+size; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => this.parseRefineResults(id, res['refineResults'])); - } - - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => this.parseRefineResults(id, res['refineResults'])) - } - - searchSoftwareByDois (DOIs: string[], refineParams:string, page: number, size: number, refineFields:string[] ):any { - let link = OpenaireProperties.getSearchAPIURLLast()+"software"; - let url = link+"?"; - var doisParams = ""; - - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; - } - if(doisParams.length > 0){ - url += "&"+doisParams; - - } - if(refineParams!= null && refineParams != '' ) { - url += refineParams; - } - url += "&page="+ (page-1) +"&size="+size+"&format=json"; - - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "software")]); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "software")]); - } - advancedSearchSoftware (params: string, page: number, size: number ):any { - let url = OpenaireProperties.getSearchResourcesAPIURL(); - var basicQuery = "(oaftype exact result) and (resulttypeid exact software) " - url += "?query="; - if(params!= null && params != '' ) { - url +=" ( "+basicQuery+ " ) " +" and (" + params + ")"; - }else{ - url +=" ( "+basicQuery+ " ) "; - } - - url += "&page="+(page-1)+"&size="+size; - url += "&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - return this.http.get(url) - .map(res => res.json()) - //.do(res => console.info(res)) - .map(res => [res['meta'].total, this.parseResults(res['results'])]) - .do(res => { - this._cache.set(key, res); - }); - } - searchSoftwareForEntity (params: string, page: number, size: number):any { - let link = OpenaireProperties.getSearchAPIURLLast(); - let url = link+params+"/software"+"?format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - - searchSoftwareForDataproviders(params: string, page: number, size: number):any { - let link = OpenaireProperties.getSearchAPIURLLast(); - let url = link+params+ "&page="+(page-1)+"&size="+size + "&format=json"; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }) - .map(res => [res['meta'].total, this.parseResults(res['results'])]); - } - - parseResults(data: any): SearchResult[] { - let results: SearchResult[] = []; - - let length = Array.isArray(data) ? data.length : 1; - - for(let i=0; i(); - } - - result['authors'].push({"name": relation.fullname, "id": relation['to'].content}); - } else */if(relation['to'].class == "isProducedBy") { - result['projects'] = this.parseProjects(result['projects'], relation); - } - } - } - } - - if(resData.hasOwnProperty("creator") && resData['creator'] != null) { - if(result['authors'] == undefined) { - result['authors'] = new Array(); - } - - let authors = resData['creator']; - let length = Array.isArray(authors) ? authors.length : 1; - - for(let i=0; i this.sizeOfDescription) { - result.description = result.description.substring(0, this.sizeOfDescription)+"..."; - } - - result.embargoEndDate = resData.embargoenddate; - - if(!Array.isArray(resData.publisher)) { - result.publisher = resData.publisher; - } else { - for(let i=0; i(); - } - - let countProjects = projects.length; - - projects[countProjects] = { - "id": "", "acronym": "", "title": "", - "funderShortname": "", "funderName": "", - "code": "" - } - - if(relation.title != 'unidentified') { - projects[countProjects]['id'] = - /*OpenaireProperties.getsearchLinkToProject() + */relation['to'].content; - projects[countProjects]['acronym'] = relation.acronym; - projects[countProjects]['title'] = relation.title; - projects[countProjects]['code'] = relation.code; - } else { - projects[countProjects]['id'] = ""; - projects[countProjects]['acronym'] = ""; - projects[countProjects]['title'] = ""; - projects[countProjects]['code'] = ""; - } - - if(relation.hasOwnProperty("funding")) { - let fundingLength = Array.isArray(relation['funding']) ? relation['funding'].length : 1; - - for(let z=0; z res.json()) - .map(res => res.total) - .do(res => { - this._cache.set(key, res); - }); - } - - numOfEntitySoftware(id: string, entity: string):any { - var parameters = ""; - - if(entity == "project") { - parameters = "projects/"+id+"/software/count"; - } - - let url = OpenaireProperties.getSearchAPIURLLast()+parameters+"?format=json"; - return this.numOfSoftware(url); - } - - numOfSearchSoftware(params: string):any { - let url = OpenaireProperties.getSearchAPIURLLast()+"software/count?format=json"; - if(params != "") { - url += "&q=" + params; - } - return this.numOfSoftware(url); - } -} diff --git a/portal-2/src/app/services/servicesUtils/refineResults.class.ts b/portal-2/src/app/services/servicesUtils/refineResults.class.ts deleted file mode 100644 index b01b3a4f..00000000 --- a/portal-2/src/app/services/servicesUtils/refineResults.class.ts +++ /dev/null @@ -1,62 +0,0 @@ - -import { Filter, Value} from '../../searchPages/searchUtils/searchHelperClasses.class'; -import { SearchFields} from '../../utils/properties/searchFields'; - - -export class RefineResultsUtils { - - - public static parse (data, fields:string[], entityType:string):Filter[] { - // var data = this.json.refineReuslts; - - var searchFields:SearchFields = new SearchFields(); - var filters:Filter[] = []; - if(data){ - for(let j=0; j res.json()) - .catch(err => { - console.log('Error: ', err); - return Observable.throw(err); - }); - } - -} diff --git a/portal-2/src/app/shared/cache.service.ts b/portal-2/src/app/shared/cache.service.ts deleted file mode 100644 index 15431f3e..00000000 --- a/portal-2/src/app/shared/cache.service.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { Inject, Injectable, isDevMode } from '@angular/core'; - -@Injectable() -export class CacheService { - static KEY = 'CacheService'; - - constructor(@Inject('LRU') public _cache: Map) { - - } - - /** - * check if there is a value in our store - */ - has(key: string | number): boolean { - let _key = this.normalizeKey(key); - return this._cache.has(_key); - } - - /** - * store our state - */ - set(key: string | number, value: any): void { - let _key = this.normalizeKey(key); - this._cache.set(_key, value); - } - - /** - * get our cached value - */ - get(key: string | number): any { - console.log("Cache get :"+key); - let _key = this.normalizeKey(key); - return this._cache.get(_key); - } - - /** - * release memory refs - */ - clear(): void { - this._cache.clear(); - } - - /** - * convert to json for the client - */ - dehydrate(): any { - let json = {}; - this._cache.forEach((value: any, key: string) => json[key] = value); - return json; - } - - /** - * convert server json into out initial state - */ - rehydrate(json: any): void { - Object.keys(json).forEach((key: string) => { - let _key = this.normalizeKey(key); - let value = json[_key]; - this._cache.set(_key, value); - }); - } - - /** - * allow JSON.stringify to work - */ - toJSON(): any { - return this.dehydrate(); - } - - /** - * convert numbers into strings - */ - normalizeKey(key: string | number): string { - if (isDevMode() && this._isInvalidValue(key)) { - throw new Error('Please provide a valid key to save in the CacheService'); - } - - return key + ''; - } - - _isInvalidValue(key): boolean { - return key === null || - key === undefined || - key === 0 || - key === '' || - typeof key === 'boolean' || - Number.isNaN(key); - } -} diff --git a/portal-2/src/app/shared/model/model.service.ts b/portal-2/src/app/shared/model/model.service.ts deleted file mode 100644 index 7d44a2b2..00000000 --- a/portal-2/src/app/shared/model/model.service.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; - -import { CacheService } from '../cache.service'; -import { ApiService } from '../api.service'; - -export function hashCodeString(str: string): string { - let hash = 0; - if (str.length === 0) { - return hash + ''; - } - for (let i = 0; i < str.length; i++) { - let char = str.charCodeAt(i); - hash = ((hash << 5) - hash) + char; - hash = hash & hash; // Convert to 32bit integer - } - return hash + ''; -} - -// domain/feature service -@Injectable() -export class ModelService { - // This is only one example of one Model depending on your domain - constructor(public _api: ApiService, public _cache: CacheService) { - - } - - /** - * whatever domain/feature method name - */ - get(url) { - // you want to return the cache if there is a response in it. - // This would cache the first response so if your API isn't idempotent - // you probably want to remove the item from the cache after you use it. LRU of 10 - // you can use also hashCodeString here - let key = url; - - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - // you probably shouldn't .share() and you should write the correct logic - return this._api.get(url) - .do(json => { - this._cache.set(key, json); - }) - .share(); - } - // don't cache here since we're creating - create() { - // TODO - } -} diff --git a/portal-2/src/app/shared/shared.module.ts b/portal-2/src/app/shared/shared.module.ts deleted file mode 100644 index a99fcdea..00000000 --- a/portal-2/src/app/shared/shared.module.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { NgModule, ModuleWithProviders } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { RouterModule } from '@angular/router'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { ApiService } from './api.service'; -import { ModelService } from './model/model.service'; - -const MODULES = [ - // Do NOT include UniversalModule, HttpModule, or JsonpModule here - CommonModule, - RouterModule, - FormsModule, - ReactiveFormsModule -]; - -const PIPES = [ - // put pipes here -]; - -const COMPONENTS = [ - // put shared components here -]; - -const PROVIDERS = [ - ModelService, - ApiService -] - -@NgModule({ - imports: [ - ...MODULES - ], - declarations: [ - ...PIPES, - ...COMPONENTS - ], - exports: [ - ...MODULES, - ...PIPES, - ...COMPONENTS - ] -}) -export class SharedModule { - static forRoot(): ModuleWithProviders { - return { - ngModule: SharedModule, - providers: [ - ...PROVIDERS - ] - }; - } -} diff --git a/portal-2/src/app/sharedComponents/bottom.component.html b/portal-2/src/app/sharedComponents/bottom.component.html deleted file mode 100644 index 8f1e61c3..00000000 --- a/portal-2/src/app/sharedComponents/bottom.component.html +++ /dev/null @@ -1,79 +0,0 @@ - - -

    diff --git a/portal-2/src/app/sharedComponents/bottom.component.ts b/portal-2/src/app/sharedComponents/bottom.component.ts deleted file mode 100644 index 3ae13c03..00000000 --- a/portal-2/src/app/sharedComponents/bottom.component.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Component } from '@angular/core'; -import 'rxjs/Rx'; - -@Component({ - selector: 'bottom', - templateUrl: 'bottom.component.html' -}) -export class BottomComponent { - -} diff --git a/portal-2/src/app/sharedComponents/cookie-law/cookie-law.component.ts b/portal-2/src/app/sharedComponents/cookie-law/cookie-law.component.ts deleted file mode 100644 index 3a72e7d0..00000000 --- a/portal-2/src/app/sharedComponents/cookie-law/cookie-law.component.ts +++ /dev/null @@ -1,148 +0,0 @@ -/** - * angular2-cookie-law - * - * Copyright 2016-2017, @andreasonny83, All rights reserved. - * - * @author: @andreasonny83 - */ - -import { - Component, - OnInit, - ViewEncapsulation, - HostBinding, - Input, - Output, - EventEmitter, - animate, - state, - trigger, - style, - transition, - AnimationTransitionEvent, -} from '@angular/core'; - -import { - DomSanitizer, - SafeHtml, -} from '@angular/platform-browser'; - -import { - CookieLawService, -} from './cookie-law.service'; - -// import { -// closeIcon, -// } from './icons'; - -export type CookieLawPosition = 'top' | 'bottom'; -export type CookieLawAnimation = 'topIn' | 'bottomIn' | 'topOut' | 'bottomOut'; -export type CookieLawTarget = '_blank' | '_self'; - -@Component({ - selector: 'cookie-law', - // encapsulation: ViewEncapsulation.None, - animations: [ - trigger('state', [ - state('bottomOut', style({ transform: 'translateY(100%)' })), - state('topOut', style({ transform: 'translateY(-100%)' })), - state('*', style({ transform: 'translateY(0)' })), - - transition('void => topIn', [ - style({ transform: 'translateY(-100%)' }), - animate('1000ms ease-in-out'), - ]), - - transition('void => bottomIn', [ - style({ transform: 'translateY(100%)' }), - animate('1000ms ease-in-out'), - ]), - - transition('* => *', animate('1000ms ease-out')), - ]) - ], - styleUrls: [ './cookie-law.css' ], - templateUrl: './cookie-law.html', -}) -export class CookieLawComponent implements OnInit { - public cookieLawSeen: boolean; - - @Input('learnMore') - get learnMore() { return this._learnMore; } - set learnMore(value: string) { - this._learnMore = (value !== null && `${value}` !== 'false') ? value : null; - } - - @Input('target') - get target() { return this._target; } - set target(value: CookieLawTarget) { - this._target = (value !== null && `${value}` !== 'false' && - (`${value}` === '_blank' || `${value}` === '_self') - ) ? value : '_blank'; - } - - @Input('position') - get position() { return this._position; } - set position(value: CookieLawPosition) { - this._position = (value !== null && `${value}` !== 'false' && - (`${value}` === 'top' || `${value}` === 'bottom') - ) ? value : 'bottom'; - } - - @Output('isSeen') - private isSeenEvt: EventEmitter; - - @HostBinding('attr.seen') - public isSeen: boolean; - - private animation: CookieLawAnimation; - private closeSvg: SafeHtml; - private currentStyles: {}; - private _learnMore: string; - private _target: CookieLawTarget; - private _position: CookieLawPosition; - - constructor( - private _service: CookieLawService, - private domSanitizer: DomSanitizer, - ) { - this.isSeenEvt = new EventEmitter(); - this.animation = 'topIn'; - this._position = 'bottom'; - this.cookieLawSeen = this._service.seen(); - } - - ngOnInit(): void { - if (typeof document !== 'undefined') { - this.animation = this.position === 'bottom' ? 'bottomIn' : 'topIn'; - - this.closeSvg = ' ' ; - - if (this.cookieLawSeen) { - this.isSeen = true; - } - - this.currentStyles = { - 'top': this.position === 'top' ? '0' : null, - 'bottom': this.position === 'top' ? 'initial' : null, - }; - } - } - - afterDismissAnimation(evt: AnimationTransitionEvent) { - if (evt.toState === 'topOut' || - evt.toState === 'bottomOut') { - this.isSeen = true; - this.isSeenEvt.emit(this.isSeen); - } - } - - public dismiss(evt?: MouseEvent): void { - if (evt) { - evt.preventDefault(); - } - - this._service.storeCookie(); - this.animation = this.position === 'top' ? 'topOut' : 'bottomOut'; - } -} diff --git a/portal-2/src/app/sharedComponents/cookie-law/cookie-law.css b/portal-2/src/app/sharedComponents/cookie-law/cookie-law.css deleted file mode 100644 index 17e09689..00000000 --- a/portal-2/src/app/sharedComponents/cookie-law/cookie-law.css +++ /dev/null @@ -1,77 +0,0 @@ -.cookie-law-wrapper a { - color: #bbb; - -webkit-transition: color .2s; - transition: color .2s; -} -.cookie-law-wrapper a:hover { - color: #fff; -} -.cookie-law-wrapper a:hover svg { - fill: #fff; -} -.cookie-law-wrapper { - background: #333; - color: #bbb; - display: block; - /*font-family: Helvetica Neue,Helvetica,Arial,sans-serif; - font-size: 15px; - font-weight: 200; - line-height: 20px;*/ - position: fixed; - bottom: 0; - left: 0; - width: 100%; - z-index: 999999999; - font-smooth: always; - -webkit-font-smoothing: antialiased; - text-align: center; -} -.dismiss { - display: block; - box-sizing: border-box; - padding: 10px; - position: absolute; - top: 0; - right: 10px; - text-decoration: none; - line-height: 20px; -} -.dismiss svg { - display: block; - fill: #bbb; - width: 20px; - height: 20px; - -webkit-transition: fill .2s; - transition: fill .2s; -} -.copy { - box-sizing: border-box; - padding: 10px 60px 10px 10px; -} -.copy span { - color: #fff; - /*font-weight: 400;*/ -} -.copy a { - text-decoration: underline; -} -.copy a:active, .copy a:hover { - outline: 0; -} - -@media (min-width: 600px) { - /* For bigger devices: */ - .copy { - padding: 20px 60px 20px 20px; - /*font-size: 18px; - line-height: 24px;*/ - } - .dismiss { - top: 10px; - right: 15px; - } - .dismiss svg { - width: 24px; - height: 24px; - } -} diff --git a/portal-2/src/app/sharedComponents/cookie-law/cookie-law.html b/portal-2/src/app/sharedComponents/cookie-law/cookie-law.html deleted file mode 100644 index ccccbba4..00000000 --- a/portal-2/src/app/sharedComponents/cookie-law/cookie-law.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - ` - }) - - export class ErrorMessagesComponent { - @Input() status: Array; - @Input() type: string; - - public errorCodes:ErrorCodes; - - constructor () {} - - ngOnInit() { - this.errorCodes = new ErrorCodes(); - console.info("ngOnInit"); - if(!this.status) { - this.status = [this.errorCodes.LOADING]; - } - } - - ngOnDestroy() {} - - public checkErroCode(code: number) { - return function(status: number) { - return (status == code); - } - } - } diff --git a/portal-2/src/app/utils/errorMessages.module.ts b/portal-2/src/app/utils/errorMessages.module.ts deleted file mode 100644 index 9f7315af..00000000 --- a/portal-2/src/app/utils/errorMessages.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {ErrorMessagesComponent} from './errorMessages.component'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule - ], - declarations: [ - ErrorMessagesComponent - ], - exports: [ - ErrorMessagesComponent - ] -}) -export class ErrorMessagesModule { } diff --git a/portal-2/src/app/utils/exportCSV.class.ts b/portal-2/src/app/utils/exportCSV.class.ts deleted file mode 100644 index c5e39a33..00000000 --- a/portal-2/src/app/utils/exportCSV.class.ts +++ /dev/null @@ -1,131 +0,0 @@ - - - -export class ExportCSVComponent { - stockData : any = - { - "columnNames": - ["Symbol", "Company", "Price"], - "export": -/* - [ - { - Symbol: "AAPL", - Company: "Apple Inc.", - Price: "132.54" - }, - { - Symbol: "INTC", - Company: "Intel Corporation", - Price: "33.45" - }, - { - Symbol: "GOOG", - Company: "Google Inc", - Price: "554.52" - }, - ], -*/ - - [ - [ - "AAPL", - "Apple Inc.", - "132.54" - ], - [ - "INTC", - "Intel Corporation", - "33.45" - ], - [ - "GOOG", - "Google Inc", - "554.52" - ], - ], - - - "columnDelimiter": ',', - "lineDelimiter": '\n' - }; - - data: any = this.stockData; - filename: string; - linkname: string = "Download CSV"; - - constructor () { - } - - ngOnInit() { - } - - public static convertArrayOfObjectsToCSV(args) { - console.info("convertArrayOfObjectsToCSV"); - - var result, ctr, keys, columnDelimiter, lineDelimiter, data; - - data = args.export || null; - - if (data == null || !data.length) { - return null; - } - - columnDelimiter = args.columnDelimiter || ','; - lineDelimiter = args.lineDelimiter || '\n'; - - //keys = Object.keys(data[0]); - keys = args.columnNames; - - result = ''; - result += keys.join(columnDelimiter); - result += lineDelimiter; -/* - data.forEach(function(item) { - ctr = 0; - keys.forEach(function(key) { - if (ctr > 0) result += columnDelimiter; - result += item[key]; - ctr++; - }); - result += lineDelimiter; - }); -*/ - - for(let line of data) { - ctr = 0; - for(let column of line) { - if (ctr > 0) result += columnDelimiter; - result += column; - ctr++; - } - result += lineDelimiter; - } - - return result; - } - - public static downloadCSV(data: any, filenameArg: string) { - console.info("downloadCSV"); - - var encodedData, filename, link; - - var csv = this.convertArrayOfObjectsToCSV(data); - if (csv == null) return; - - filename = filenameArg || 'export.csv'; - - if (!csv.match(/^data:text\/csv/i)) { - csv = 'data:text/csv;charset=utf-8,' + csv; - } - encodedData = encodeURI(csv); - - //link = document.createElement('a'); - link = document.getElementsByTagName('a'); - link[0].setAttribute('href', encodedData); - link[0].setAttribute('download', filename); - //document.body.appendChild(link); - link[0].click(); - //document.body.removeChild(link); - } -} diff --git a/portal-2/src/app/utils/fetchEntitiesClasses/fetchDataproviders.class.ts b/portal-2/src/app/utils/fetchEntitiesClasses/fetchDataproviders.class.ts deleted file mode 100644 index 1ef9125c..00000000 --- a/portal-2/src/app/utils/fetchEntitiesClasses/fetchDataproviders.class.ts +++ /dev/null @@ -1,291 +0,0 @@ -import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; -import { ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchUtilsClass } from '../../searchPages/searchUtils/searchUtils.class'; - -export class FetchDataproviders { - private errorCodes: ErrorCodes; - - public results =[]; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public sub: any; public subResults: any; - public CSV: any = { "columnNames": [ "Title", "Type", "Coutries", "Compatibility" ], - "export":[] - }; - public CSVDownloaded = false; - public csvParams: string; - - - constructor ( private _searchDataprovidersService: SearchDataprovidersService ) { - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - } - - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } - } - - public getResultsByKeyword(keyword:string, page: number, size: number){ - var parameters = ""; - if(keyword.length > 0){ - parameters = "q=" + keyword; - } - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - - this.subResults = this._searchDataprovidersService.searchDataproviders(parameters,null, page, size,[]).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Content Providers: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //ar errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - - public getNumForEntity(entity: string, id:string) { - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - if(id != "" && entity != "") { - - this._searchDataprovidersService.numOfEntityDataproviders(id, entity).subscribe( - data => { - this.searchUtils.totalResults = data; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - } - - public getNumForSearch(keyword: string) { - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this._searchDataprovidersService.numOfSearchDataproviders(keyword).subscribe( - data => { - this.searchUtils.totalResults = data; - this.searchUtils.status = this.errorCodes.DONE; - - if(this.searchUtils.totalResults == 0) { - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - -public getResultsForDeposit(id:string, type:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - if(id != "") { - - this._searchDataprovidersService.searchDataprovidersForDeposit(id,type, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Dataproviders forDeposit: [id:"+id+", type:"+type+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} -public getResultsBySubjectsForDeposit(subject:string, type:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - this._searchDataprovidersService.searchDataProvidersBySubjects(subject,type, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Dataproviders forDeposit: [subject:"+subject+", type:"+type+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - -} - public getResultsForEntity(entity:string, id:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - var parameters = ""; - - if(entity == "organization") { - parameters = "organizations/"+id; - } - - if(parameters != "") { - - this._searchDataprovidersService.searchDataprovidersForEntity(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Dataproviders for "+entity+": [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - } - - public getResultsForDataproviders(id:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this._searchDataprovidersService.getDataProvidersforEntityRegistry(id, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Dataproviders for Entity Registry: [Id:"+id+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} diff --git a/portal-2/src/app/utils/fetchEntitiesClasses/fetchDatasets.class.ts b/portal-2/src/app/utils/fetchEntitiesClasses/fetchDatasets.class.ts deleted file mode 100644 index 9e6916b6..00000000 --- a/portal-2/src/app/utils/fetchEntitiesClasses/fetchDatasets.class.ts +++ /dev/null @@ -1,253 +0,0 @@ -import {SearchDatasetsService} from '../../services/searchDatasets.service'; -import { ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchUtilsClass } from '../../searchPages/searchUtils/searchUtils.class'; -import {DOI} from '../../utils/string-utils.class'; -import {Subject} from 'rxjs/Subject'; - -export class FetchDatasets{ - private errorCodes: ErrorCodes; - - public results =[]; - public requestComplete: Subject; - - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - private sub: any; - private subResults: any; - - public csvParams: string; - - constructor ( private _searchDatasetsService: SearchDatasetsService ) { - - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this.requestComplete = new Subject(); - } - - - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } - } - - - public getResultsByKeyword(keyword:string, page: number, size: number){ - var parameters = ""; - if(keyword.length > 0){ - var DOIs:string[] = DOI.getDOIsFromString(keyword); - var doisParams = ""; - - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; - } - if(doisParams.length > 0){ - parameters += "&"+doisParams; - }else{ - parameters = "q=" + keyword; - } - } - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this.subResults = this._searchDatasetsService.searchDatasets(parameters,null, page, size, []).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Research Data: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - -public getNumForEntity(entity:string, id:string){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - - if(id != "" && entity != "") { - this._searchDatasetsService.numOfEntityDatasets(id, entity).subscribe( - data => { - this.searchUtils.totalResults = data; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getResultsForEntity(entity:string, id:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - var parameters = ""; - - if(entity == "project") { - parameters = "projects/"+id; - } - - if(parameters != "") { - - this._searchDatasetsService.searchDatasetsForEntity(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Research Data for "+entity+": [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getResultsForDataproviders(id:string, resultsFrom:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - var parameters; - if(resultsFrom == "collectedFrom") { - parameters = "datasets?fq=collectedfromdatasourceid exact "+'"'+id+'"'; - } else if(resultsFrom == "hostedBy") { - parameters = "datasets?fq=resulthostingdatasourceid exact "+'"'+id+'"'; - } - - if(parameters != "") { - - this._searchDatasetsService.searchDatasetsForDataproviders(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Research Data for Dataproviders: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getAggregatorResults(id:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this.subResults = this._searchDatasetsService.searchAggregators(id, '&fq=collectedfromdatasourceid exact "'+id+'"',"&refine=true&fields=resulthostingdatasource" , page, size).subscribe( - data => { - this.results = data; - this.searchUtils.totalResults = this.results.length; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - - this.requestComplete.complete(); - }, - err => { - console.log(err); - console.info("status: "+err.status); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - this.requestComplete.complete(); - } - ); -} - -} diff --git a/portal-2/src/app/utils/fetchEntitiesClasses/fetchOrganizations.class.ts b/portal-2/src/app/utils/fetchEntitiesClasses/fetchOrganizations.class.ts deleted file mode 100644 index 07cb4c61..00000000 --- a/portal-2/src/app/utils/fetchEntitiesClasses/fetchOrganizations.class.ts +++ /dev/null @@ -1,76 +0,0 @@ - import {SearchOrganizationsService} from '../../services/searchOrganizations.service'; - import { ErrorCodes} from '../../utils/properties/openaireProperties'; - import {SearchUtilsClass } from '../../searchPages/searchUtils/searchUtils.class'; - -export class FetchOrganizations { - private errorCodes: ErrorCodes; - - public results =[]; - - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - public sub: any; - public subResults: any; - - - - constructor ( private _searchOrganizationsService: SearchOrganizationsService ) { - - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - } - - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } - } - - - public getResultsByKeyword(keyword:string , page: number, size: number){ - var parameters = ""; - if(keyword.length > 0){ - parameters = "q=" + keyword; - } - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this.subResults = this._searchOrganizationsService.searchOrganizations(parameters, null, page, size, []).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Organizations: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - - -} diff --git a/portal-2/src/app/utils/fetchEntitiesClasses/fetchProjects.class.ts b/portal-2/src/app/utils/fetchEntitiesClasses/fetchProjects.class.ts deleted file mode 100644 index d31a3232..00000000 --- a/portal-2/src/app/utils/fetchEntitiesClasses/fetchProjects.class.ts +++ /dev/null @@ -1,209 +0,0 @@ -import {SearchProjectsService} from '../../services/searchProjects.service'; -import {ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchUtilsClass } from '../../searchPages/searchUtils/searchUtils.class'; - -export class FetchProjects{ - private errorCodes: ErrorCodes; - - public results =[]; - - public filters; // for getResultsForOrganizations - public funders:any = []; // for getResultsForOrganizations // this is filled with the initial query - before filtering - - public sub: any; - public subResults: any; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - - - constructor (private _searchProjectsService: SearchProjectsService) { - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - } - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } - } - - public getResultsByKeyword(keyword:string, page: number, size: number){ - var parameters = ""; - if(keyword.length > 0){ - parameters = "q=" + keyword; - } - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this.subResults = this._searchProjectsService.searchProjects(parameters, null, page, size, []).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Projects: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - - public getResultsForDataproviders(id:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this._searchProjectsService.getProjectsforDataProvider(id, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Projects for Dataproviders: [Id:"+id+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - - public getNumForEntity(entity: string, id:string) { - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - if(id != "" && entity != "") { - - this._searchProjectsService.numOfEntityProjects(id, entity).subscribe( - data => { - this.searchUtils.totalResults = data; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - } - - public getResultsForOrganizations(organizationId:string, filterquery:string, page: number, size: number, refineFields:string[]){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this._searchProjectsService.getProjectsForOrganizations(organizationId,filterquery, page, size,refineFields).subscribe( - data => { - this.searchUtils.totalResults = data[0]; // the results can be filtered so this number can be no total results - console.info("search Projects for Organization: [Id:"+organizationId+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - if(refineFields && refineFields.length > 0){ - this.filters = data[2]; - filterquery = decodeURIComponent(filterquery); - for(var i = 0; i < this.filters.length; i++){ - if(filterquery.indexOf(this.filters[i].filterId) !== -1){ - console.log("this.filters[i].filterId:"+this.filters[i].filterId); - for(var j = 0; j < this.filters[i].values.length; j++){ - console.log("this.filters[i].values[j].id:"+this.filters[i].values[j].id); - if(filterquery.indexOf(this.filters[i].values[j].id) !== -1){ - this.filters[i].values[j].selected = true; - } - } - } - } - } - - if(filterquery == ""){ - this.searchUtils.totalResultsNoFilters = this.searchUtils.totalResults; - this.funders = []; - for(var i = 0; i < this.filters.length; i++){ - console.log("this.filters[i].filterId:"+this.filters[i].filterId); - if(this.filters[i].filterId == "funder"){ - this.funders = (this.filters[i].values); - - } - } - console.log(" this.funders:"+ this.funders); - - } - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - - -} diff --git a/portal-2/src/app/utils/fetchEntitiesClasses/fetchPublications.class.ts b/portal-2/src/app/utils/fetchEntitiesClasses/fetchPublications.class.ts deleted file mode 100644 index 9e6959f1..00000000 --- a/portal-2/src/app/utils/fetchEntitiesClasses/fetchPublications.class.ts +++ /dev/null @@ -1,233 +0,0 @@ - -import {SearchPublicationsService} from '../../services/searchPublications.service'; -import {ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchFields} from '../../utils/properties/searchFields'; - import {SearchUtilsClass } from '../../searchPages/searchUtils/searchUtils.class'; -import {DOI} from '../../utils/string-utils.class'; -import {Subject} from 'rxjs/Subject'; - -export class FetchPublications { - private errorCodes: ErrorCodes; - - public results =[]; - - public requestComplete: Subject; - - // public filters =[]; - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - // public baseUrl:string = ""; - public sub: any; - public subResults: any; - public searchFields:SearchFields = new SearchFields(); - // public refineFields: string[] = this.searchFields.RESULT_REFINE_FIELDS; - // public fieldIdsMap=this.searchFields.RESULT_FIELDS; - //: { [key:string] :{ name:string, operator:string, type:string, indexField:string, equalityOperator:string }} = this.searchFields.PUBLICATION_FIELDS_MAP; - - public CSV: any = { "columnNames": ["Title", "Authors", "Publication Year", "DOI", - /*"Download From", "Publication type", "Journal",*/ - "Funder", "Project Name (GA Number)", "Access"], - "export":[] - }; - public CSVDownloaded = false; - public csvParams: string; - - constructor ( private _searchPublicationsService: SearchPublicationsService ) { - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - // this.baseUrl = OpenaireProperties.getLinkToSearchPublications(); - - this.requestComplete = new Subject(); - } - - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } - } - - public getResultsByKeyword(keyword:string, page: number, size: number){ - var parameters = ""; - if(keyword.length > 0){ - var DOIs:string[] = DOI.getDOIsFromString(keyword); - var doisParams = ""; - - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; - } - if(doisParams.length > 0){ - parameters += "&"+doisParams; - }else{ - parameters = "q=" + keyword; - } - } - - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this.subResults = this._searchPublicationsService.searchPublications(parameters,null, page, size, []).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Publications: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - -public getResultsForEntity(entity:string, id:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - var parameters = ""; - if(entity == "project") { - parameters = "projects/"+id; - } else if(entity == "organization") { - parameters = "organizations/"+id; - } - - if(parameters != "") { - this._searchPublicationsService.searchPublicationsForEntity(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - - console.info("search Publications for "+entity+": [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getResultsForDataproviders(id:string, resultsFrom:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - var parameters; - if(resultsFrom == "collectedFrom") { - parameters = "publications?fq=collectedfromdatasourceid exact "+'"'+id+'"'; - } else if(resultsFrom == "hostedBy") { - parameters = "publications?fq=resulthostingdatasourceid exact "+'"'+id+'"'; - } - - if(parameters != "") { - - this._searchPublicationsService.searchPublicationsForDataproviders(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Publications for Dataproviders: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getAggregatorResults(id:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this.subResults = this._searchPublicationsService.searchAggregators(id, '&fq=collectedfromdatasourceid exact "'+id+'"',"&refine=true&fields=resulthostingdatasource" , page, size).subscribe( - data => { - this.results = data; - this.searchUtils.totalResults = this.results.length; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - - this.requestComplete.complete(); - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - this.requestComplete.complete(); - } - ); -} - - -} diff --git a/portal-2/src/app/utils/fetchEntitiesClasses/fetchSoftware.class.ts b/portal-2/src/app/utils/fetchEntitiesClasses/fetchSoftware.class.ts deleted file mode 100644 index 9dbc37d6..00000000 --- a/portal-2/src/app/utils/fetchEntitiesClasses/fetchSoftware.class.ts +++ /dev/null @@ -1,253 +0,0 @@ -import {SearchSoftwareService} from '../../services/searchSoftware.service'; -import { ErrorCodes} from '../../utils/properties/openaireProperties'; -import {SearchUtilsClass } from '../../searchPages/searchUtils/searchUtils.class'; -import {DOI} from '../../utils/string-utils.class'; -import {Subject} from 'rxjs/Subject'; - -export class FetchSoftware{ - private errorCodes: ErrorCodes; - - public results =[]; - public requestComplete: Subject; - - public searchUtils:SearchUtilsClass = new SearchUtilsClass(); - private sub: any; - private subResults: any; - - public csvParams: string; - - constructor ( private _searchSoftwareService: SearchSoftwareService ) { - - this.errorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this.requestComplete = new Subject(); - } - - - - public ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - if(this.subResults){ - this.subResults.unsubscribe(); - } - } - - - public getResultsByKeyword(keyword:string, page: number, size: number){ - var parameters = ""; - if(keyword.length > 0){ - var DOIs:string[] = DOI.getDOIsFromString(keyword); - var doisParams = ""; - - for(var i =0 ;i < DOIs.length; i++){ - doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; - } - if(doisParams.length > 0){ - parameters += "&"+doisParams; - }else{ - parameters = "q=" + keyword; - } - } - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this.subResults = this._searchSoftwareService.searchSoftware(parameters,null, page, size, []).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Software: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } - -public getNumForEntity(entity:string, id:string){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - - if(id != "" && entity != "") { - this._searchSoftwareService.numOfEntitySoftware(id, entity).subscribe( - data => { - this.searchUtils.totalResults = data; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getResultsForEntity(entity:string, id:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - var parameters = ""; - - if(entity == "project") { - parameters = "projects/"+id; - } - - if(parameters != "") { - - this._searchSoftwareService.searchSoftwareForEntity(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Software for "+entity+": [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getResultsForDataproviders(id:string, resultsFrom:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - var parameters; - if(resultsFrom == "collectedFrom") { - parameters = "software?fq=collectedfromdatasourceid exact "+'"'+id+'"'; - } else if(resultsFrom == "hostedBy") { - parameters = "software?fq=resulthostingdatasourceid exact "+'"'+id+'"'; - } - - if(parameters != "") { - - this._searchSoftwareService.searchSoftwareForDataproviders(parameters, page, size).subscribe( - data => { - this.searchUtils.totalResults = data[0]; - console.info("search Software for Dataproviders: [Parameters:"+parameters+" ] [total results:"+this.searchUtils.totalResults+"]"); - this.results = data[1]; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - }, - err => { - console.log(err); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - } - ); - } -} - -public getAggregatorResults(id:string, page: number, size: number){ - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.LOADING; - - this.subResults = this._searchSoftwareService.searchAggregators(id, '&fq=collectedfromdatasourceid exact "'+id+'"',"&refine=true&fields=resulthostingdatasource" , page, size).subscribe( - data => { - this.results = data; - this.searchUtils.totalResults = this.results.length; - - //var errorCodes:ErrorCodes = new ErrorCodes(); - this.searchUtils.status = this.errorCodes.DONE; - if(this.searchUtils.totalResults == 0 ){ - this.searchUtils.status = this.errorCodes.NONE; - } - - this.requestComplete.complete(); - }, - err => { - console.log(err); - console.info("status: "+err.status); - //TODO check erros (service not available, bad request) - // if( ){ - // this.searchUtils.status = ErrorCodes.ERROR; - // } - //var errorCodes:ErrorCodes = new ErrorCodes(); - //this.searchUtils.status = errorCodes.ERROR; - if(err.status == '404') { - this.searchUtils.status = this.errorCodes.NOT_FOUND; - } else if(err.status == '500') { - this.searchUtils.status = this.errorCodes.ERROR; - } else { - this.searchUtils.status = this.errorCodes.NOT_AVAILABLE; - } - - this.requestComplete.complete(); - } - ); -} - -} diff --git a/portal-2/src/app/utils/helper/helper.component.ts b/portal-2/src/app/utils/helper/helper.component.ts deleted file mode 100644 index 66c3c70c..00000000 --- a/portal-2/src/app/utils/helper/helper.component.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Component, Input } from '@angular/core'; -import 'rxjs/Rx'; -import {HelperService} from './helper.service'; -import {OpenaireProperties} from '../properties/openaireProperties'; - -@Component({ - selector: 'helper', - template: ` -
    -
    -
    -
    -` -}) -export class HelperComponent { - texts=[]; - @Input() style:boolean = false; - @Input() position:string = 'right'; - @Input() styleName:string = ''; - sub:any; - - constructor ( - private _service: HelperService - ) { - } - - ngOnInit() { - if(OpenaireProperties.isHelperEnabled() && location){ - this.sub = this._service.getHelper(location.pathname).subscribe( - data => { - this.texts =(data && data.content && data.content[this.position] )? data.content[this.position]:[]; - }, - err => { - console.log(err); - - } - ); - } - } - ngOnDestroy() { - if(this.sub){ - this.sub.unsubscribe(); - } - } - - -} diff --git a/portal-2/src/app/utils/helper/helper.module.ts b/portal-2/src/app/utils/helper/helper.module.ts deleted file mode 100644 index 93752d19..00000000 --- a/portal-2/src/app/utils/helper/helper.module.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -// import { RouterModule } from "@angular/router"; - -import {HelperComponent} from './helper.component'; -// import {HelperServiceModule} from './helperService.module'; -import {HelperService} from './helper.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule, - // RouterModule//,HelperServiceModule - ], - declarations: [ - HelperComponent - ], - providers:[HelperService], - exports: [ - HelperComponent - ] -}) -export class HelperModule{ } diff --git a/portal-2/src/app/utils/helper/helper.service.ts b/portal-2/src/app/utils/helper/helper.service.ts deleted file mode 100644 index 8ebfd475..00000000 --- a/portal-2/src/app/utils/helper/helper.service.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../../shared/cache.service'; -import { OpenaireProperties } from '../../utils/properties/openaireProperties'; - -@Injectable() -export class HelperService { - constructor(private http: Http, public _cache: CacheService) {} - - getHelper (router: string):any { - console.info("get router helpText for : "+router); - - let url = OpenaireProperties.getHelperPageUrl() + '?q=' + router; - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)).map(res => res); - } - return this.http.get(url) - .map(res => res.json()) - .do(res => { - this._cache.set(key, res); - }); - - } - - - -} diff --git a/portal-2/src/app/utils/helper/helperService.module.ts b/portal-2/src/app/utils/helper/helperService.module.ts deleted file mode 100644 index 475fd82d..00000000 --- a/portal-2/src/app/utils/helper/helperService.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {HelperService} from './helper.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule - ], - declarations: [ - ], - providers:[ - HelperService -], - exports: [ - ] -}) -export class HelperServiceModule { } diff --git a/portal-2/src/app/utils/iframe.component.ts b/portal-2/src/app/utils/iframe.component.ts deleted file mode 100644 index 302f6431..00000000 --- a/portal-2/src/app/utils/iframe.component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {Component, ElementRef, Input} from '@angular/core'; -import { SafeResourceUrl, DomSanitizer } from '@angular/platform-browser'; -//Usage :: ` -@Component({ - selector: 'i-frame', - template: ` - - ` -}) -export class IFrameComponent { - public safeUrl: SafeResourceUrl; - @Input() url ; - @Input() width = '100%'; - @Input() height = '300'; - constructor(private sanitizer: DomSanitizer) { - } - ngOnInit() { - this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.url); - console.info("URL:" + this.safeUrl); - } -} diff --git a/portal-2/src/app/utils/iframe.module.ts b/portal-2/src/app/utils/iframe.module.ts deleted file mode 100644 index 702e5ab5..00000000 --- a/portal-2/src/app/utils/iframe.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {IFrameComponent} from './iframe.component'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule - ], - declarations: [ - IFrameComponent - ], - exports: [ - IFrameComponent - ] -}) -export class IFrameModule { } diff --git a/portal-2/src/app/utils/metaTags/openaireMetaTags.class.ts b/portal-2/src/app/utils/metaTags/openaireMetaTags.class.ts deleted file mode 100644 index 3b78aa42..00000000 --- a/portal-2/src/app/utils/metaTags/openaireMetaTags.class.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {Meta} from '../../../angular2-meta'; - -export class OpenaireMetaTags{ - - constructor (private _meta: Meta ) { - } - - updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } -} diff --git a/portal-2/src/app/utils/modal/alert.ts b/portal-2/src/app/utils/modal/alert.ts deleted file mode 100644 index c7155cd8..00000000 --- a/portal-2/src/app/utils/modal/alert.ts +++ /dev/null @@ -1,111 +0,0 @@ -import {Component, ViewEncapsulation, ComponentRef, ElementRef, Input, EventEmitter, Output} from '@angular/core'; -// import { DynamicComponentLoader} from '@angular/core'; - -import {Open} from './open.component'; - -@Component({ - selector: 'modal-alert', - template: ` - - - - `, - encapsulation: ViewEncapsulation.None, -}) -/** - * API to an open alert window. - */ -export class AlertModal{ - /** - * Caption for the title. - */ - public alertTitle:string; - /** - * Describes if the alert contains Ok Button. - * The default Ok button will close the alert and emit the callback. - * Defaults to true. - */ - public okButton:boolean = true; - /** - * Caption for the OK button. - * Default: Ok - */ - public okButtonText:string= 'Ok'; - /** - * Describes if the alert contains cancel Button. - * The default Cancelbutton will close the alert. - * Defaults to true. - */ - public cancelButton:boolean = true; - /** - * Caption for the Cancel button. - * Default: Cancel - */ - public cancelButtonText:string = 'Cancel'; - /** - * if the alertMessage is true it will show the contentString inside alert body. - */ - public alertMessage:boolean = true; - /** - * Some message/content can be set in message which will be shown in alert body. - */ - public message:string; - /** - * if the value is true alert footer will be visible or else it will be hidden. - */ - public alertFooter:boolean= true; - /** - * shows alert header if the value is true. - */ - public alertHeader:boolean = true; - /** - * if the value is true alert will be visible or else it will be hidden. - */ - public isOpen:boolean=false; - /** - * Emitted when a ok button was clicked - * or when Ok method is called. - */ - @Output() public alertOutput:EventEmitter = new EventEmitter(); - constructor( public _elementRef: ElementRef){} - /** - * Opens a alert window creating backdrop. - */ - open(){ - this.isOpen= true; - } - /** - * ok method closes the modal and emits modalOutput. - */ - ok(){ - this.isOpen = false; - this.alertOutput.emit(true); - } - /** - * cancel method closes the moda. - */ - cancel(){ - this.isOpen = false; - } -} diff --git a/portal-2/src/app/utils/modal/alertModal.module.ts b/portal-2/src/app/utils/modal/alertModal.module.ts deleted file mode 100644 index d39e168d..00000000 --- a/portal-2/src/app/utils/modal/alertModal.module.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {AlertModal} from './alert'; -import {ModalModule} from './modal.module'; - -@NgModule({ - imports: [ CommonModule, FormsModule, ModalModule ], - declarations: [ - AlertModal - ], - exports: [ - AlertModal - ] -}) -export class AlertModalModule { } diff --git a/portal-2/src/app/utils/modal/loading.component.ts b/portal-2/src/app/utils/modal/loading.component.ts deleted file mode 100644 index 55a5501e..00000000 --- a/portal-2/src/app/utils/modal/loading.component.ts +++ /dev/null @@ -1,56 +0,0 @@ -import {Component, ViewEncapsulation, ComponentRef, ElementRef, Input, EventEmitter, Output} from '@angular/core'; - -@Component({ - selector: 'modal-loading', - template: ` - -
    -
    - - -
    -
    -

    {{message}}

    -
    -
    -
    - -
    - -
    - - `, - encapsulation: ViewEncapsulation.None, -}) -/** - * API to an open alert window. - */ -export class ModalLoading{ - -@Input() public message:string ="Loading"; - - /** - * if the value is true alert will be visible or else it will be hidden. - */ - public isOpen:boolean=false; - /** - * Emitted when a ok button was clicked - * or when Ok method is called. - */ - @Output() public alertOutput:EventEmitter = new EventEmitter(); - constructor( public _elementRef: ElementRef){} - /** - * Opens a alert window creating backdrop. - */ - open(){ - this.isOpen= true; - } - - close(){ - this.isOpen = false; - } -} diff --git a/portal-2/src/app/utils/modal/loadingModal.module.ts b/portal-2/src/app/utils/modal/loadingModal.module.ts deleted file mode 100644 index 6edf5c4a..00000000 --- a/portal-2/src/app/utils/modal/loadingModal.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - - import {ModalLoading} from './loading.component'; -import {ModalModule} from './modal.module'; - -//helpers - -@NgModule({ - imports: [ CommonModule, FormsModule,ModalModule ], - declarations: [ - ModalLoading - ], - exports: [ - ModalLoading - ] -}) -export class LoadingModalModule { } diff --git a/portal-2/src/app/utils/modal/modal.module.ts b/portal-2/src/app/utils/modal/modal.module.ts deleted file mode 100644 index fd48478c..00000000 --- a/portal-2/src/app/utils/modal/modal.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* common components of modal components */ -import { NgModule } from '@angular/core'; -import {Open} from './open.component'; -@NgModule({ - imports: [ ], - declarations: [ - Open - ], - exports: [ - Open - ] -}) -export class ModalModule { } diff --git a/portal-2/src/app/utils/modal/open.component.ts b/portal-2/src/app/utils/modal/open.component.ts deleted file mode 100644 index fb9f011e..00000000 --- a/portal-2/src/app/utils/modal/open.component.ts +++ /dev/null @@ -1,57 +0,0 @@ -import {Directive, Input, HostBinding} from '@angular/core'; - -// todo: add animate -// todo: add init and on change -@Directive({selector: '[open]'}) -export class Open { - @HostBinding('style.display') - public display:string; - @HostBinding('class.in') - @HostBinding('attr.aria-expanded') - public isExpanded:boolean = true; - - @Input() - public set open(value:boolean) { - this.isExpanded = value; - this.toggle(); - } - - public get open():boolean { - return this.isExpanded; - } - - constructor() { - } - init() { - this.isExpanded = false; - this.display = 'none'; - } - toggle() { - if (this.isExpanded) { - this.hide(); - } else { - this.show(); - } - } - - hide() { - this.isExpanded = false; - this.display = 'none'; - if (typeof document !== 'undefined') { - let backDrop = document.getElementsByClassName("modal-backdrop"); - if(backDrop.length>0){ - document.body.removeChild(backDrop[0]); - } - } - } - - show() { - if (typeof document !== 'undefined') { - // let backDrop = document.createElement('div'); - // backDrop.className="modal-backdrop fade in"; - // document.body.appendChild(backDrop); - } - this.isExpanded = true; - this.display = 'block'; - } -} diff --git a/portal-2/src/app/utils/modal/selectModal.component.ts b/portal-2/src/app/utils/modal/selectModal.component.ts deleted file mode 100644 index 78330b76..00000000 --- a/portal-2/src/app/utils/modal/selectModal.component.ts +++ /dev/null @@ -1,79 +0,0 @@ -import {Component, ViewEncapsulation, ComponentRef, ElementRef, Input, EventEmitter, Output} from '@angular/core'; - -@Component({ - selector: 'modal-select', - template: ` -
    -
    - -
    - - `, - encapsulation: ViewEncapsulation.None, -}) -/** - * API to an open alert window. - */ -export class ModalSelect{ - -@Input() public message:string ="Loading"; -@Input() public options:string[] = []; - -public selected: string; - - /** - * if the value is true alert will be visible or else it will be hidden. - */ - public isOpen:boolean=false; - /** - * Emitted when a ok button was clicked - * or when Ok method is called. - */ - @Output() public alertOutput:EventEmitter = new EventEmitter(); - constructor( public _elementRef: ElementRef){} - /** - * Opens a alert window creating backdrop. - */ - open(){ - this.isOpen= true; - } - - close(){ - this.isOpen = false; - if(!this.selected) { - this.selected = this.options[0]; - } - this.alertOutput.emit(this.selected); - } - -} diff --git a/portal-2/src/app/utils/modal/selectModal.module.ts b/portal-2/src/app/utils/modal/selectModal.module.ts deleted file mode 100644 index 971a7dd7..00000000 --- a/portal-2/src/app/utils/modal/selectModal.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - - import {ModalSelect} from './selectModal.component'; -import {ModalModule} from './modal.module'; - -//helpers - -@NgModule({ - imports: [ CommonModule, FormsModule,ModalModule ], - declarations: [ - ModalSelect - ], - exports: [ - ModalSelect - ] -}) -export class SelectModalModule { } diff --git a/portal-2/src/app/utils/my-date-picker/directives/my-date-picker.focus.directive.ts b/portal-2/src/app/utils/my-date-picker/directives/my-date-picker.focus.directive.ts deleted file mode 100644 index 5508ea6c..00000000 --- a/portal-2/src/app/utils/my-date-picker/directives/my-date-picker.focus.directive.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Directive, ElementRef, Renderer, AfterViewInit, Input } from "@angular/core"; - -@Directive({ - selector: "[mydpfocus]" -}) - -export class FocusDirective implements AfterViewInit { - @Input("mydpfocus") value: string; - - constructor(private el: ElementRef, private renderer: Renderer) {} - - // Focus to element: if value 0 = don't set focus, 1 = set only focus, 2 = set focus and set cursor position - ngAfterViewInit() { - if (this.value === "0") { - return; - } - - this.renderer.invokeElementMethod(this.el.nativeElement, "focus", []); - - // Set cursor position at the end of text if input element - if (this.value === "2") { - let len = this.el.nativeElement.value.length; - this.el.nativeElement.setSelectionRange(len, len); - } - } -} \ No newline at end of file diff --git a/portal-2/src/app/utils/my-date-picker/directives/my-date-picker.input.auto.fill.directive.ts b/portal-2/src/app/utils/my-date-picker/directives/my-date-picker.input.auto.fill.directive.ts deleted file mode 100644 index ef1a1501..00000000 --- a/portal-2/src/app/utils/my-date-picker/directives/my-date-picker.input.auto.fill.directive.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { Directive, ElementRef, Renderer, Input, HostListener } from "@angular/core"; -import { IMyInputAutoFill } from "../interfaces/my-input-auto-fill.interface"; - -@Directive({ - selector: "[myinputautofill]" -}) - -export class InputAutoFillDirective { - @Input("myinputautofill") opts: IMyInputAutoFill; - - constructor(private el: ElementRef, private rndr: Renderer) {} - - @HostListener("keyup", ["$event"]) onKeyUp(evt: KeyboardEvent) { - if (!this.opts.enabled || evt.keyCode === 8 || evt.keyCode === 46) { - return; - } - - let val: string = this.getInputValue(); - let ews: boolean = this.endsWith(val, this.opts.separator); - let parts: Array = val.split(this.opts.separator); - let idx: number = parts.length - 1; - - if (val.indexOf(this.opts.separator + this.opts.separator) !== -1) { - return; - } - - if (!ews && (val.length === this.getPartLength(0) || val.length === this.getPartLength(0) + this.getPartLength(1) + this.opts.separator.length)) { - this.setInputValue(val + this.opts.separator); - } - else if (ews && parts[idx - 1].length < this.getPartLength(idx - 1) && this.isNumber(parts[idx - 1]) && (this.isDay(idx - 1) || this.isMonth(idx - 1))) { - this.setInputValue(this.insertPos(val, val.length - 2, "0")); - } - else if (parts[idx].length < this.getPartLength(idx) && this.isNumber(parts[idx]) && (Number(parts[idx]) > 3 && this.isDay(idx) || Number(parts[idx]) > 1 && this.isMonth(idx))) { - this.setInputValue(this.insertPos(val, val.length - 1, "0") + (idx < 2 ? this.opts.separator : "")); - } - } - - private endsWith(val: string, suffix: string): boolean { - return val.indexOf(suffix, val.length - suffix.length) !== -1; - } - - private insertPos(str: string, idx: number, val: string): string { - return str.substr(0, idx) + val + str.substr(idx); - } - - private getPartLength(idx: number): number { - return this.opts.formatParts[idx].length; - } - - private isNumber(val: string): boolean { - return val.match(/[1-9]/) !== null; - } - - private isDay(idx: number): boolean { - return this.opts.formatParts[idx].indexOf("d") !== -1; - } - - private isMonth(idx: number): boolean { - return this.opts.formatParts[idx].indexOf("m") !== -1 && this.opts.formatParts[idx].length === 2; - } - - private getInputValue(): string { - return this.el.nativeElement.value; - } - - private setInputValue(val: string): void { - this.rndr.setElementProperty(this.el.nativeElement, "value", val); - } -} \ No newline at end of file diff --git a/portal-2/src/app/utils/my-date-picker/index.ts b/portal-2/src/app/utils/my-date-picker/index.ts deleted file mode 100644 index 55613d2b..00000000 --- a/portal-2/src/app/utils/my-date-picker/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from "./services/my-date-picker.locale.service"; -export * from "./services/my-date-picker.util.service"; -export * from "./directives/my-date-picker.focus.directive"; -export * from "./directives/my-date-picker.input.auto.fill.directive"; -export * from "./my-date-picker.component"; -export * from "./my-date-picker.module"; -export * from "./interfaces/index"; \ No newline at end of file diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/index.ts b/portal-2/src/app/utils/my-date-picker/interfaces/index.ts deleted file mode 100644 index ab34b252..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -export * from "./my-date.interface"; -export * from "./my-date-range.interface"; -export * from "./my-day-labels.interface"; -export * from "./my-month-labels.interface"; -export * from "./my-month.interface"; -export * from "./my-calendar-day.interface"; -export * from "./my-week.interface"; -export * from "./my-options.interface"; -export * from "./my-locale.interface"; -export * from "./my-date-model.interface"; -export * from "./my-input-field-changed.interface"; -export * from "./my-input-focus-blur.interface"; -export * from "./my-weekday.interface"; -export * from "./my-calendar-view-changed.interface"; -export * from "./my-input-auto-fill.interface"; \ No newline at end of file diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-calendar-day.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-calendar-day.interface.ts deleted file mode 100644 index d554243a..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-calendar-day.interface.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IMyDate } from "./my-date.interface"; - -export interface IMyCalendarDay { - dateObj: IMyDate; - cmo: number; - currDay: boolean; - dayNbr: number; - disabled: boolean; -} \ No newline at end of file diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-calendar-view-changed.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-calendar-view-changed.interface.ts deleted file mode 100644 index 9b9baa5e..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-calendar-view-changed.interface.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IMyWeekday } from "./my-weekday.interface"; - -export interface IMyCalendarViewChanged { - year: number; - month: number; - first: IMyWeekday; - last: IMyWeekday; -} diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-date-model.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-date-model.interface.ts deleted file mode 100644 index 35aa7535..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-date-model.interface.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IMyDate } from "./my-date.interface"; - -export interface IMyDateModel { - date: IMyDate; - jsdate: Date; - formatted: string; - epoc: number; -} diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-date-range.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-date-range.interface.ts deleted file mode 100644 index e24b319b..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-date-range.interface.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { IMyDate } from "./my-date.interface"; - -export interface IMyDateRange { - begin: IMyDate; - end: IMyDate; -} diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-date.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-date.interface.ts deleted file mode 100644 index 99f00796..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-date.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface IMyDate { - year: number; - month: number; - day: number; -} diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-day-labels.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-day-labels.interface.ts deleted file mode 100644 index f2fcfa24..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-day-labels.interface.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IMyDayLabels { - [day: string]: string; -} \ No newline at end of file diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-input-auto-fill.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-input-auto-fill.interface.ts deleted file mode 100644 index 695afa92..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-input-auto-fill.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface IMyInputAutoFill { - separator: string; - formatParts: Array; - enabled: boolean; -} diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-input-field-changed.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-input-field-changed.interface.ts deleted file mode 100644 index c93530b6..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-input-field-changed.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface IMyInputFieldChanged { - value: string; - dateFormat: string; - valid: boolean; -} diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-input-focus-blur.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-input-focus-blur.interface.ts deleted file mode 100644 index 99678cbb..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-input-focus-blur.interface.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface IMyInputFocusBlur { - reason: number; - value: string; -} diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-locale.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-locale.interface.ts deleted file mode 100644 index 25d268ba..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-locale.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { IMyOptions } from "./my-options.interface"; - -export interface IMyLocales { - [lang: string]: IMyOptions; -} \ No newline at end of file diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-month-labels.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-month-labels.interface.ts deleted file mode 100644 index 0eede49b..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-month-labels.interface.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IMyMonthLabels { - [month: number]: string; -} \ No newline at end of file diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-month.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-month.interface.ts deleted file mode 100644 index 846a23eb..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-month.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface IMyMonth { - monthTxt: string; - monthNbr: number; - year: number; -} \ No newline at end of file diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-options.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-options.interface.ts deleted file mode 100644 index 89c26bea..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-options.interface.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { IMyDayLabels } from "./my-day-labels.interface"; -import { IMyMonthLabels } from "./my-month-labels.interface"; -import { IMyDate } from "./my-date.interface"; -import { IMyDateRange } from "./my-date-range.interface"; - -export interface IMyOptions { - dayLabels?: IMyDayLabels; - monthLabels?: IMyMonthLabels; - dateFormat?: string; - showTodayBtn?: boolean; - todayBtnTxt?: string; - firstDayOfWeek?: string; - sunHighlight?: boolean; - markCurrentDay?: boolean; - disableUntil?: IMyDate; - disableSince?: IMyDate; - disableDays?: Array; - enableDays?: Array; - disableDateRange?: IMyDateRange; - disableWeekends?: boolean; - showWeekNumbers?: boolean; - height?: string; - width?: string; - selectionTxtFontSize?: string; - inline?: boolean; - showClearDateBtn?: boolean; - alignSelectorRight?: boolean; - openSelectorTopOfInput?: boolean; - indicateInvalidDate?: boolean; - editableDateField?: boolean; - editableMonthAndYear?: boolean; - disableHeaderButtons?: boolean; - minYear?: number; - maxYear?: number; - componentDisabled?: boolean; - inputValueRequired?: boolean; - showSelectorArrow?: boolean; - showInputField?: boolean; - openSelectorOnInputClick?: boolean; - inputAutoFill?: boolean; - ariaLabelInputField?: string; - ariaLabelClearDate?: string; - ariaLabelOpenCalendar?: string; - ariaLabelPrevMonth?: string; - ariaLabelNextMonth?: string; - ariaLabelPrevYear?: string; - ariaLabelNextYear?: string; -} diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-week.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-week.interface.ts deleted file mode 100644 index be7bca16..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-week.interface.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { IMyCalendarDay } from "./my-calendar-day.interface"; - -export interface IMyWeek { - week: Array; - weekNbr: number; -} \ No newline at end of file diff --git a/portal-2/src/app/utils/my-date-picker/interfaces/my-weekday.interface.ts b/portal-2/src/app/utils/my-date-picker/interfaces/my-weekday.interface.ts deleted file mode 100644 index da1df557..00000000 --- a/portal-2/src/app/utils/my-date-picker/interfaces/my-weekday.interface.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface IMyWeekday { - number: number; - weekday: string; -} diff --git a/portal-2/src/app/utils/my-date-picker/my-date-picker.component.css b/portal-2/src/app/utils/my-date-picker/my-date-picker.component.css deleted file mode 100644 index 3c21416d..00000000 --- a/portal-2/src/app/utils/my-date-picker/my-date-picker.component.css +++ /dev/null @@ -1,461 +0,0 @@ -.mydp { - min-width: 30px; - border-radius: 2px; - line-height: 1.1; - display: inline-block; - position: relative; -} - -.mydp * { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - font-family: Arial, Helvetica, sans-serif; - padding: 0; - margin: 0; -} - -.mydp .selector { - margin-top: 2px; - margin-left: -1px; - position: absolute; - width: 252px; - padding: 0; - border: 1px solid #CCC; - border-radius: 2px; - z-index: 100; - animation: selectorfadein 0.1s; -} - -.mydp .selector:focus { - border: 1px solid #ADD8E6; - outline: none; -} - -@keyframes selectorfadein { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -.mydp .selectorarrow { - background: #FAFAFA; - margin-top: 12px; - padding: 0; -} - -.mydp .selectorarrow:after, -.mydp .selectorarrow:before { - bottom: 100%; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; -} - -.mydp .selectorarrow:after { - border-color: rgba(250, 250, 250, 0); - border-bottom-color: #FAFAFA; - border-width: 10px; - margin-left: -10px; -} - -.mydp .selectorarrow:before { - border-color: rgba(204, 204, 204, 0); - border-bottom-color: #CCC; - border-width: 11px; - margin-left: -11px; -} - -.mydp .selectorarrow:focus:before { - border-bottom-color: #ADD8E6; -} - -.mydp .selectorarrowleft:after, -.mydp .selectorarrowleft:before { - left: 24px; -} - -.mydp .selectorarrowright:after, -.mydp .selectorarrowright:before { - left: 224px; -} - -.mydp .alignselectorright { - right: -1px; -} - -.mydp .selectiongroup { - position: relative; - display: table; - border: none; - border-spacing: 0; - background-color: #FFF; -} - -.mydp .selection { - outline: none; - background-color: #FFF; - display: table-cell; - position: absolute; - width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - text-align: center; -} - -.mydp .invaliddate, -.mydp .invalidmonth, -.mydp .invalidyear { - background-color: #F1DEDE; -} - -.mydp ::-ms-clear { - display: none; -} - -.mydp .selbtngroup { - position: relative; - vertical-align: middle; - white-space: nowrap; - width: 1%; - display: table-cell; - font-size: 0; -} - -.mydp .btnpicker, -.mydp .btnclear { - height: 100%; - width: 30px; - border: none; - padding: 0; - outline: 0; - font: inherit; - -moz-user-select: none; -} - -.mydp .btnleftborder { - border-left: 1px solid #CCC; -} - -.mydp .btnpickerenabled, -.mydp .btnclearenabled, -.mydp .headertodaybtnenabled, -.mydp .headerbtnenabled { - cursor: pointer; -} - -.mydp .btnpickerdisabled, -.mydp .btncleardisabled, -.mydp .headertodaybtndisabled, -.mydp .headerbtndisabled { - cursor: not-allowed; -} - -.mydp .headerbtndisabled { - opacity: 0.4; -} - -.mydp .btnpicker, -.mydp .btnclear, -.mydp .headertodaybtn { - background: #FFF; -} - -.mydp .header { - width: 100%; - height: 30px; - background-color: #FAFAFA; -} - -.mydp .header td { - vertical-align: middle; - border: none; - line-height: 0; -} - -.mydp .header td:nth-child(1) { - padding-left: 4px; -} - -.mydp .header td:nth-child(2) { - text-align: center; -} - -.mydp .header td:nth-child(3) { - padding-right: 4px; -} - -.mydp .caltable { - table-layout: fixed; - width: 100%; - background-color: #FFF; - font-size: 14px; -} - -.mydp .caltable, -.mydp .weekdaytitle, -.mydp .daycell { - border-collapse: collapse; - color: #003366; - line-height: 1.1; -} - -.mydp .weekdaytitle, -.mydp .daycell { - padding: 5px; - text-align: center; -} - -.mydp .weekdaytitle { - background-color: #DDD; - font-size: 12px; - font-weight: bold; - vertical-align: middle; - max-width: 36px; - overflow: hidden; - white-space: nowrap; -} - -.mydp .weekdaytitleweeknbr { - width: 20px; - border-right: 1px solid #BBB; -} - -.mydp .daycell { - cursor: pointer; - height: 30px; -} - -.mydp .daycell div { - background-color: inherit; - vertical-align: middle; -} - -.mydp .daycell div span { - vertical-align: middle; -} - -.mydp .daycellweeknbr { - font-size: 10px; - border-right: 1px solid #CCC; - cursor: default; - color: #000; -} - -.mydp .inlinedp { - position: relative; - margin-top: -1px; -} - -.mydp .prevmonth { - color: #CCC; -} - -.mydp .nextmonth { - color: #CCC; -} - -.mydp .disabled { - cursor: default !important; - color: #CCC !important; - background: #FBEFEF !important; -} - -.mydp .sunday { - color: #C30000; -} - -.mydp .sundayDim { - opacity: 0.5; -} - -.mydp .currmonth { - background-color: #F6F6F6; - font-weight: bold; -} - -.mydp .currday { - text-decoration: underline; -} - -.mydp .selectedday div { - border: 1px solid #004198; - background-color: #8EBFFF !important; - border-radius: 2px; -} - -.mydp .headerbtncell { - background-color: #FAFAFA; - display: table-cell; - vertical-align: middle; -} - -.mydp .headerbtn, -.mydp .headerlabelbtn { - background: #FAFAFA; - border: none; - height: 22px; -} - -.mydp .headerbtn { - width: 16px; -} - -.mydp .headerlabelbtn { - font-size: 14px; -} - -.mydp, -.mydp .headertodaybtn, -.mydp .monthinput, -.mydp .yearinput { - border: 1px solid #CCC; -} - -.mydp .btnpicker, -.mydp .btnclear, -.mydp .headerbtn, -.mydp .headermonthtxt, -.mydp .headeryeartxt, -.mydp .headertodaybtn, -.mydp .selection { - color: #000; -} - -.mydp .headertodaybtn { - padding: 0 4px; - border-radius: 2px; - font-size: 11px; - height: 22px; - min-width: 60px; - max-width: 70px; - overflow: hidden; - white-space: nowrap; -} - -.mydp button::-moz-focus-inner { - border: 0; -} - -.mydp .headermonthtxt, -.mydp .headeryeartxt { - text-align: center; - display: table-cell; - vertical-align: middle; - font-size: 14px; - height: 26px; - width: 40px; - max-width: 40px; - overflow: hidden; - white-space: nowrap; -} - -.mydp .btnclear:focus, -.mydp .btnpicker:focus, -.mydp .headertodaybtn:focus { - background: #ADD8E6; -} - -.mydp .headerbtn:focus, -.mydp .monthlabel:focus, -.mydp .yearlabel:focus { - color: #ADD8E6; - outline: none; -} - -.mydp .daycell:focus { - outline: 1px solid #CCC; -} - -.mydp .icon-mydpcalendar, -.mydp .icon-mydpremove { - font-size: 16px; -} - -.mydp .icon-mydpleft, -.mydp .icon-mydpright { - color: #222; - font-size: 20px; -} - -.mydp table { - display: table; - border-spacing: 0; -} - -.mydp table td { - padding: 0; -} - -.mydp table, -.mydp th, -.mydp td { - border: none; -} - -.mydp .btnpickerenabled:hover, -.mydp .btnclearenabled:hover, -.mydp .headertodaybtnenabled:hover, -.mydp .tablesingleday:hover { - background-color: #8BDAF4; -} - -.mydp .monthlabel, -.mydp .yearlabel { - cursor: pointer; -} - -.mydp .yearinput, -.mydp .monthinput { - width: 40px; - height: 22px; - text-align: center; - font-weight: bold; - outline: none; - border-radius: 2px; -} - -.mydp .headerbtnenabled:hover, -.mydp .monthlabel:hover, -.mydp .yearlabel:hover { - color: #8BDAF4; -} - -@font-face { - font-family: 'mydatepicker'; - src: url('data:application/octet-stream;base64,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') format('truetype'); - font-weight: normal; - font-style: normal; -} - -.mydp .mydpicon { - font-family: 'mydatepicker'; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.mydp .icon-mydpright:before { - content: "\e800"; -} - -.mydp .icon-mydpleft:before { - content: "\e801"; -} - -.mydp .icon-mydpcalendar:before { - content: "\e802"; -} - -.mydp .icon-mydpremove:before { - content: "\e805"; -} diff --git a/portal-2/src/app/utils/my-date-picker/my-date-picker.component.html b/portal-2/src/app/utils/my-date-picker/my-date-picker.component.html deleted file mode 100644 index 9b7280e0..00000000 --- a/portal-2/src/app/utils/my-date-picker/my-date-picker.component.html +++ /dev/null @@ -1,61 +0,0 @@ -
    -
    - -
    - - -
    -
    -
    - - - - - - -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    - - -
    -
    -
    -
    - - - - - - - - -
    #{{d}}
    {{w.weekNbr}} -
    - {{d.dateObj.day}} -
    -
    -
    -
    diff --git a/portal-2/src/app/utils/my-date-picker/my-date-picker.component.spec.ts b/portal-2/src/app/utils/my-date-picker/my-date-picker.component.spec.ts deleted file mode 100644 index 3a9b7407..00000000 --- a/portal-2/src/app/utils/my-date-picker/my-date-picker.component.spec.ts +++ /dev/null @@ -1,2214 +0,0 @@ -/// - -import {ComponentFixture, TestBed} from '@angular/core/testing'; -import {By} from '@angular/platform-browser'; -import {DebugElement} from '@angular/core'; -import {MyDatePicker} from './my-date-picker.component'; -import {FocusDirective} from './directives/my-date-picker.focus.directive'; -import {InputAutoFillDirective} from './directives/my-date-picker.input.auto.fill.directive'; - -let comp: MyDatePicker; -let fixture: ComponentFixture; -let de: DebugElement; -let el: HTMLElement; - -let PREVMONTH: string = '.header tr td:first-child div .headerbtncell:first-child .headerbtn'; -let NEXTMONTH: string = '.header tr td:first-child div .headerbtncell:last-child .headerbtn'; -let PREVYEAR: string = '.header tr td:last-child div .headerbtncell:first-child .headerbtn'; -let NEXTYEAR: string = '.header tr td:last-child div .headerbtncell:last-child .headerbtn'; - -function getDateString(date:any):string { - return date.getFullYear() + '-' + ((date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1)) + '-' + (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()); -} - -function getElement(id:string):DebugElement { - return de.query(By.css(id)); -} - -function getElements(id:string):Array { - return de.queryAll(By.css(id)); -} - -describe('MyDatePicker', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [MyDatePicker, FocusDirective, InputAutoFillDirective], - }); - - fixture = TestBed.createComponent(MyDatePicker); - - comp = fixture.componentInstance; - - de = fixture.debugElement.query(By.css('.mydp')); - el = de.nativeElement; - }); - - it('set valid date', () => { - comp.selectionDayTxt = '2016-08-22'; - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection.nativeElement.value).toContain('2016-08-22'); - }); - - it('open/close selector', () => { - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - let selector = getElement('.selector'); - expect(selector).toBe(null); - - btnpicker.nativeElement.click(); - fixture.detectChanges(); - selector = getElement('.selector'); - expect(selector).not.toBe(null); - - btnpicker.nativeElement.click(); - fixture.detectChanges(); - selector = getElement('.selector'); - expect(selector).toBe(null); - }); - - it('select current day from the selector and clear', () => { - let date = new Date(); - comp.selectedMonth = {monthTxt: '', monthNbr: date.getMonth() + 1, year: date.getFullYear()}; - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let currday = getElement('.currday'); - expect(currday).not.toBe(null); - - currday.nativeElement.click(); - - let dateStr = getDateString(date); - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection.nativeElement.value).toContain(dateStr); - - fixture.detectChanges(); - let btnclear = getElement('.btnclear'); - btnclear.nativeElement.click(); - expect(selection.nativeElement.value).toContain(''); - }); - - it('select/unselect current day from the selector', () => { - let date = new Date(); - comp.selectedMonth = {monthTxt: '', monthNbr: date.getMonth() + 1, year: date.getFullYear()}; - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let currday = getElement('.currday'); - expect(currday).not.toBe(null); - - currday.nativeElement.click(); - - let dateStr = getDateString(date); - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection.nativeElement.value).toContain(dateStr); - - fixture.detectChanges(); - btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - - fixture.detectChanges(); - let selectedday = getElement('.selectedday'); - expect(selectedday).not.toBe(null); - - fixture.detectChanges(); - currday = getElement('.currday'); - expect(currday).not.toBe(null); - currday.nativeElement.click(); - - fixture.detectChanges(); - selectedday = getElement('.selectedday'); - expect(selectedday).toBe(null); - - fixture.detectChanges(); - selection = getElement('.selection'); - expect(selection.nativeElement.value).toBe(''); - }); - - it('select today button', () => { - let date = new Date(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let today = getElement('.headertodaybtn'); - expect(today).not.toBe(null); - - today.nativeElement.click(); - - let dateStr = getDateString(date); - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection.nativeElement.value).toContain(dateStr); - - fixture.detectChanges(); - let btnclear = getElement('.btnclear'); - btnclear.nativeElement.click(); - expect(selection.nativeElement.value).toContain(''); - }); - - it('select previous month', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let prevmonth = getElement('.header tr td:first-child .headerbtn:first-child'); - expect(prevmonth).not.toBe(null); - - prevmonth.nativeElement.click(); - - expect(comp.visibleMonth.monthTxt).toBe('Apr'); - expect(comp.visibleMonth.monthNbr).toBe(4); - expect(comp.visibleMonth.year).toBe(2016); - }); - - it('select next month', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let nextmonth = getElement(NEXTMONTH); - expect(nextmonth).not.toBe(null); - - nextmonth.nativeElement.click(); - - expect(comp.visibleMonth.monthTxt).toBe('Jun'); - expect(comp.visibleMonth.monthNbr).toBe(6); - expect(comp.visibleMonth.year).toBe(2016); - }); - - it('select previous month january change year', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let prevmonth = getElement(PREVMONTH); - expect(prevmonth).not.toBe(null); - - prevmonth.nativeElement.click(); - - expect(comp.visibleMonth.year).toBe(2015); - }); - - it('select next month december change year', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 12, year: 2016}; - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let nextmonth = getElement(NEXTMONTH); - expect(nextmonth).not.toBe(null); - - nextmonth.nativeElement.click(); - - expect(comp.visibleMonth.year).toBe(2017); - }); - - it('select previous month from selector', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - comp.parseOptions(); - - fixture.detectChanges(); - let prevmonth = getElement(PREVMONTH); - expect(prevmonth).not.toBe(null); - - prevmonth.nativeElement.click(); - expect(comp.visibleMonth.monthNbr).toBe(4); - expect(comp.visibleMonth.monthTxt).toBe('Apr'); - - prevmonth.nativeElement.click(); - expect(comp.visibleMonth.monthNbr).toBe(3); - expect(comp.visibleMonth.monthTxt).toBe('Mar'); - }); - - it('select next month from selector', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - comp.parseOptions(); - - fixture.detectChanges(); - let nextmonth = getElement(NEXTMONTH); - expect(nextmonth).not.toBe(null); - - nextmonth.nativeElement.click(); - expect(comp.visibleMonth.monthNbr).toBe(6); - expect(comp.visibleMonth.monthTxt).toBe('Jun'); - - nextmonth.nativeElement.click(); - expect(comp.visibleMonth.monthNbr).toBe(7); - expect(comp.visibleMonth.monthTxt).toBe('Jul'); - }); - - it('select previous year', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - comp.parseOptions(); - - fixture.detectChanges(); - let prevyear = getElement(PREVYEAR); - expect(prevyear).not.toBe(null); - - prevyear.nativeElement.click(); - fixture.detectChanges(); - let yearLabel = getElement('.headeryeartxt .headerlabelbtn'); - expect(yearLabel).not.toBe(null); - expect(yearLabel.nativeElement.textContent).toBe('2015'); - }); - - it('select next year', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - comp.parseOptions(); - - fixture.detectChanges(); - let nextyear = getElement(NEXTYEAR); - expect(nextyear).not.toBe(null); - - nextyear.nativeElement.click(); - - fixture.detectChanges(); - let yearLabel = getElement('.headeryeartxt .headerlabelbtn'); - expect(yearLabel).not.toBe(null); - expect(yearLabel.nativeElement.textContent).toBe('2017'); - }); - - it('test calendar year 2016 month one by one - next month button', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; - - comp.options = {firstDayOfWeek: 'mo'}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let monthlabel = getElement('.monthlabel'); - expect(monthlabel).not.toBe(null); - expect(monthlabel.nativeElement.textContent.trim()).toBe('Jan'); - - fixture.detectChanges(); - let yearlabel = getElement('.yearlabel'); - expect(yearlabel).not.toBe(null); - expect(yearlabel.nativeElement.textContent.trim()).toBe('2016'); - - comp.generateCalendar(1, 2016, true); - - let beginDate: Array = ['28', '1', '29', '28', '25', '30', '27', '1', '29', '26', '31', '28']; - let endDate: Array = ['7', '13', '10', '8', '5', '10', '7', '11', '9', '6', '11', '8']; - - let i: number = 0; - do { - fixture.detectChanges(); - let currmonth = getElements('.caltable tbody tr td'); - expect(currmonth).not.toBe(null); - expect(currmonth.length).toBe(42); - - expect(currmonth[0]).not.toBe(null); - expect(currmonth[0].nativeElement.textContent.trim()).toBe(beginDate[i]); - - expect(currmonth[41]).not.toBe(null); - expect(currmonth[41].nativeElement.textContent.trim()).toBe(endDate[i]); - - comp.nextMonth(); - - i++; - } while (i < 12) - }); - - it('test calendar year 2016 month one by one - previous month button', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 12, year: 2016}; - - comp.options = {firstDayOfWeek: 'mo'}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let monthlabel = getElement('.monthlabel'); - expect(monthlabel).not.toBe(null); - expect(monthlabel.nativeElement.textContent.trim()).toBe('Dec'); - - fixture.detectChanges(); - let yearlabel = getElement('.yearlabel'); - expect(yearlabel).not.toBe(null); - expect(yearlabel.nativeElement.textContent.trim()).toBe('2016'); - - comp.generateCalendar(12, 2016, true); - - let beginDate: Array = ['28', '1', '29', '28', '25', '30', '27', '1', '29', '26', '31', '28']; - let endDate: Array = ['7', '13', '10', '8', '5', '10', '7', '11', '9', '6', '11', '8']; - - let i: number = 11; - do { - fixture.detectChanges(); - let currmonth = getElements('.caltable tbody tr td'); - expect(currmonth).not.toBe(null); - expect(currmonth.length).toBe(42); - - expect(currmonth[0]).not.toBe(null); - expect(currmonth[0].nativeElement.textContent.trim()).toBe(beginDate[i]); - - expect(currmonth[41]).not.toBe(null); - expect(currmonth[41].nativeElement.textContent.trim()).toBe(endDate[i]); - - comp.prevMonth(); - - i--; - } while (i >= 0) - }); - - // options - it('options - dayLabels', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; - comp.options = {dayLabels: {su: '1', mo: '2', tu: '3', we: '4', th: '5', fr: '6', sa: '7'}, firstDayOfWeek: 'su'}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let ths = getElements('.caltable thead tr th'); - expect(ths.length).toBe(7); - for(let i in ths) { - let el = ths[i]; - expect(parseInt(el.nativeElement.textContent)).toBe(parseInt(i) + 1); - } - }); - - it('options - monthLabels', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; - comp.options = {monthLabels: { 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8', 9: '9', 10: '10', 11: '11', 12: '12' }}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let nextmonth = getElement(NEXTMONTH); - expect(nextmonth).not.toBe(null); - - for(let i = 1; i <= 12; i++) { - fixture.detectChanges(); - let monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(parseInt(monthLabel.nativeElement.textContent)).toBe(i); - nextmonth.nativeElement.click(); - } - }); - - it('options - date format', () => { - comp.options = {dateFormat: 'dd.mm.yyyy', indicateInvalidDate: true}; - - comp.parseOptions(); - - let value = {target:{value:'2016-08-22'}}; - comp.userDateInput(value); - expect(comp.invalidDate).toBe(true); - - fixture.detectChanges(); - let invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - value = {target:{value:'2016-08-2'}}; - comp.userDateInput(value); - expect(comp.invalidDate).toBe(true); - - value = {target:{value:'16.09/2016'}}; - comp.userDateInput(value); - expect(comp.invalidDate).toBe(true); - - value = {target:{value:'2016-08-xx'}}; - comp.userDateInput(value); - expect(comp.invalidDate).toBe(true); - - value = {target:{value:'16.09.999'}}; - comp.userDateInput(value); - expect(comp.invalidDate).toBe(true); - - value = {target:{value:'16.09.19999'}}; - comp.userDateInput(value); - expect(comp.invalidDate).toBe(true); - - value = {target:{value:'16.09.2016'}}; - comp.userDateInput(value); - expect(comp.invalidDate).toBe(false); - - comp.options = {dateFormat: 'dd mmm yyyy', indicateInvalidDate: true}; - - comp.parseOptions(); - - value = {target:{value:'2016-08-22'}}; - comp.userDateInput(value); - expect(comp.invalidDate).toBe(true); - - value = {target:{value:'22 Aug 2016'}}; - comp.userDateInput(value); - expect(comp.invalidDate).toBe(false); - }); - - it('options - show today button', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let headertodaybtn = getElement('.headertodaybtn'); - expect(headertodaybtn).not.toBe(null); - - btnpicker.nativeElement.click(); - - comp.options = {showTodayBtn: false}; - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - headertodaybtn = getElement('.headertodaybtn'); - expect(headertodaybtn).toBe(null); - - btnpicker.nativeElement.click(); - - comp.options = {showTodayBtn: true}; - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - headertodaybtn = getElement('.headertodaybtn'); - expect(headertodaybtn).not.toBe(null); - }); - - it('options - today button text', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; - comp.options = {todayBtnTxt: 'test text'}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let headertodaybtn = getElement('.headertodaybtn'); - expect(headertodaybtn).not.toBe(null); - expect(headertodaybtn.nativeElement.textContent).toBe('test text'); - }); - - it('options - first day of week', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; - comp.options = {firstDayOfWeek: 'tu'}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let first = getElement('.caltable thead tr th:first-child'); - expect(first).not.toBe(null); - expect(first.nativeElement.textContent).toBe('Tue'); - - let last = getElement('.caltable thead tr th:last-child'); - expect(last).not.toBe(null); - expect(last.nativeElement.textContent).toBe('Mon'); - }); - - it('options - sunday highlight', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; - comp.options = {sunHighlight: true}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let sunday = getElement('.sunday'); - expect(sunday).not.toBe(null); - - btnpicker.nativeElement.click(); - - comp.options = {sunHighlight: false}; - - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker.nativeElement.click(); - - comp.parseOptions(); - - fixture.detectChanges(); - sunday = getElement('.sunday'); - expect(sunday).toBe(null); - }); - - it('options - current day marked', () => { - comp.options = {markCurrentDay: true}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let currday = getElement('.currday'); - expect(currday).not.toBe(null); - - btnpicker.nativeElement.click(); - - comp.options = {markCurrentDay: false}; - - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker.nativeElement.click(); - - comp.parseOptions(); - - fixture.detectChanges(); - currday = getElement('.currday'); - expect(currday).toBe(null); - }); - - it('options - editable month and year', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; - comp.options = {editableMonthAndYear: true}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let montlabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(montlabel).not.toBe(null); - montlabel.nativeElement.click(); - - fixture.detectChanges(); - let monthinput = getElement('.monthinput'); - expect(monthinput).not.toBe(null); - - comp.userMonthInput({target:{value:'jan'}}); - - fixture.detectChanges(); - montlabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(montlabel).not.toBe(null); - expect(montlabel.nativeElement.textContent).toBe('Jan'); - - - fixture.detectChanges(); - let yearlabel = getElement('.headeryeartxt .headerlabelbtn'); - expect(yearlabel).not.toBe(null); - yearlabel.nativeElement.click(); - - fixture.detectChanges(); - let yearinput = getElement('.yearinput'); - expect(yearinput).not.toBe(null); - - comp.userYearInput({target:{value:'2019'}}); - - fixture.detectChanges(); - yearlabel = getElement('.headeryeartxt .headerlabelbtn'); - expect(yearlabel).not.toBe(null); - expect(yearlabel.nativeElement.textContent).toBe('2019'); - }); - - it('options - disable header buttons', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; - comp.options = { - disableHeaderButtons: true, - disableUntil: {year: 2016, month: 4, day: 10} - }; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let montlabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(montlabel).not.toBe(null); - expect(montlabel.nativeElement.textContent).toBe('May'); - - fixture.detectChanges(); - let prevmonth = getElement(PREVMONTH); - expect(prevmonth).not.toBe(null); - prevmonth.nativeElement.click(); - - fixture.detectChanges(); - montlabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(montlabel).not.toBe(null); - expect(montlabel.nativeElement.textContent).toBe('Apr'); - - fixture.detectChanges(); - let headerbtndisabled = getElements('.headerbtndisabled'); - expect(headerbtndisabled).not.toBe(null); - expect(headerbtndisabled.length).toBe(2); - - prevmonth.nativeElement.click(); - - fixture.detectChanges(); - montlabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(montlabel).not.toBe(null); - expect(montlabel.nativeElement.textContent).toBe('Apr'); - - fixture.detectChanges(); - let prevyear = getElement(PREVYEAR); - expect(prevyear).not.toBe(null); - prevyear.nativeElement.click(); - - fixture.detectChanges(); - let yearlabel = getElement('.headeryeartxt .headerlabelbtn'); - expect(yearlabel).not.toBe(null); - expect(yearlabel.nativeElement.textContent).toBe('2016'); - - btnpicker.nativeElement.click(); - - - comp.options = { - disableHeaderButtons: true, - disableSince: {year: 2016, month: 7, day: 10} - }; - - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - montlabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(montlabel).not.toBe(null); - expect(montlabel.nativeElement.textContent).toBe('May'); - - fixture.detectChanges(); - let nextmonth = getElement(NEXTMONTH); - expect(nextmonth).not.toBe(null); - nextmonth.nativeElement.click(); - - fixture.detectChanges(); - montlabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(montlabel).not.toBe(null); - expect(montlabel.nativeElement.textContent).toBe('Jun'); - - fixture.detectChanges(); - headerbtndisabled = getElements('.headerbtndisabled'); - expect(headerbtndisabled).not.toBe(null); - expect(headerbtndisabled.length).toBe(2); - - prevmonth.nativeElement.click(); - - fixture.detectChanges(); - montlabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(montlabel).not.toBe(null); - expect(montlabel.nativeElement.textContent).toBe('Jun'); - - fixture.detectChanges(); - let nextyear = getElement(NEXTYEAR); - expect(nextyear).not.toBe(null); - nextyear.nativeElement.click(); - - fixture.detectChanges(); - yearlabel = getElement('.headeryeartxt .headerlabelbtn'); - expect(yearlabel).not.toBe(null); - expect(yearlabel.nativeElement.textContent).toBe('2016'); - }); - - it('options - min year', () => { - comp.visibleMonth = {monthTxt: 'May', monthNbr: 5, year: 2016}; - comp.options = {minYear: 2000}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let yearlabel = getElement('.headeryeartxt .headerlabelbtn'); - expect(yearlabel).not.toBe(null); - yearlabel.nativeElement.click(); - - fixture.detectChanges(); - let yearinput = getElement('.yearinput'); - expect(yearinput).not.toBe(null); - - comp.userYearInput({target:{value:1999}}); - - fixture.detectChanges(); - let invalidyear = getElement('.invalidyear'); - expect(invalidyear).not.toBe(null); - - comp.userYearInput({target:{value:2000}}); - - fixture.detectChanges(); - yearlabel = getElement('.headeryeartxt .headerlabelbtn'); - expect(yearlabel).not.toBe(null); - expect(yearlabel.nativeElement.textContent).toBe('2000'); - }); - - it('options - max year', () => { - comp.visibleMonth = {monthTxt: 'May', monthNbr: 5, year: 2016}; - comp.options = {maxYear: 2020}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let yearlabel = getElement('.headeryeartxt .headerlabelbtn'); - expect(yearlabel).not.toBe(null); - yearlabel.nativeElement.click(); - - fixture.detectChanges(); - let yearinput = getElement('.yearinput'); - expect(yearinput).not.toBe(null); - - comp.userYearInput({target:{value:2021}}); - - fixture.detectChanges(); - let invalidyear = getElement('.invalidyear'); - expect(invalidyear).not.toBe(null); - - comp.userYearInput({target:{value:2020}}); - - fixture.detectChanges(); - yearlabel = getElement('.headeryeartxt .headerlabelbtn'); - expect(yearlabel).not.toBe(null); - expect(yearlabel.nativeElement.textContent).toBe('2020'); - }); - - it('options - disable until', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {disableUntil: {year: 2016, month: 10, day: 5}}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - comp.generateCalendar(10, 2016, true); - - fixture.detectChanges(); - let disabled = getElements('tr .disabled'); - expect(disabled).not.toBe(null); - expect(disabled.length).toBe(10); - - let firstDisabled = disabled[0]; - expect(firstDisabled.nativeElement.textContent.trim()).toBe('26'); - - let lastDisabled = disabled[disabled.length - 1]; - expect(lastDisabled.nativeElement.textContent.trim()).toBe('5'); - - fixture.detectChanges(); - lastDisabled.nativeElement.click(); - let selection = getElement('.selection'); - expect(selection.nativeElement.value).toBe(''); - - fixture.detectChanges(); - let selectableDays = getElements('.tablesingleday'); - expect(selectableDays).not.toBe(null); - expect(selectableDays.length).toBe(26); - - selectableDays[0].nativeElement.click(); - fixture.detectChanges(); - selection = getElement('.selection'); - expect(selection.nativeElement.value).toContain('2016-10-06'); - }); - - it('options - disable since', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {disableSince: {year: 2016, month: 10, day: 30}}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - comp.generateCalendar(10, 2016, true); - - fixture.detectChanges(); - let disabled = getElements('tr .disabled'); - expect(disabled).not.toBe(null); - expect(disabled.length).toBe(8); - - let firstDisabled = disabled[0]; - expect(firstDisabled.nativeElement.textContent.trim()).toBe('30'); - - let lastDisabled = disabled[disabled.length - 1]; - expect(lastDisabled.nativeElement.textContent.trim()).toBe('6'); - - fixture.detectChanges(); - lastDisabled.nativeElement.click(); - let selection = getElement('.selection'); - expect(selection.nativeElement.value).toBe(''); - - fixture.detectChanges(); - let selectableDays = getElements('.tablesingleday'); - expect(selectableDays).not.toBe(null); - expect(selectableDays.length).toBe(29); - - selectableDays[5].nativeElement.click(); - - fixture.detectChanges(); - selection = getElement('.selection'); - expect(selection.nativeElement.value).toContain('2016-10-06'); - }); - - it('options - disable days one by one', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {disableDays: [{year: 2016, month: 10, day: 5}, {year: 2016, month: 10, day: 10}]}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - comp.generateCalendar(10, 2016, true); - - fixture.detectChanges(); - let disabled = getElements('tr .disabled'); - expect(disabled).not.toBe(null); - expect(disabled.length).toBe(2); - - let firstDisabled = disabled[0]; - expect(firstDisabled.nativeElement.textContent.trim()).toBe('5'); - - let lastDisabled = disabled[1]; - expect(lastDisabled.nativeElement.textContent.trim()).toBe('10'); - }); - - it('options - enable disabled days one by one', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2017}; - comp.options = { - dateFormat: 'dd.mm.yyyy', - disableDateRange: {begin: {year: 2017, month: 1, day: 1}, end: {year: 2017, month: 1, day: 31}}, - enableDays: [{year: 2017, month: 1, day: 5}, {year: 2017, month: 1, day: 6}, {year: 2017, month: 1, day: 7}, {year: 2017, month: 1, day: 8}] - }; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - comp.generateCalendar(1, 2017, true); - - fixture.detectChanges(); - let disabled = getElements('tr .disabled'); - expect(disabled).not.toBe(null); - expect(disabled.length).toBe(27); - - let firstDisabled = disabled[0]; - expect(firstDisabled.nativeElement.textContent.trim()).toBe('1'); - - let lastDisabled = disabled[disabled.length - 1]; - expect(lastDisabled.nativeElement.textContent.trim()).toBe('31'); - - fixture.detectChanges(); - let alldates = getElements('.caltable .daycell'); - expect(alldates).not.toBe(null); - expect(alldates.length).toBe(42); - - fixture.detectChanges(); - let firstEnabled = alldates[10]; - firstEnabled.nativeElement.click(); - - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection).not.toBe(null); - expect(selection.nativeElement.value).toBe('05.01.2017'); - }); - - it('options - disable range', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {disableDateRange: {begin: {year: 2016, month: 10, day: 5}, end: {year: 2016, month: 10, day: 10}}}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - comp.generateCalendar(10, 2016, true); - - fixture.detectChanges(); - let disabled = getElements('tr .disabled'); - expect(disabled).not.toBe(null); - expect(disabled.length).toBe(6); - - let firstDisabled = disabled[0]; - expect(firstDisabled.nativeElement.textContent.trim()).toBe('5'); - - let lastDisabled = disabled[disabled.length - 1]; - expect(lastDisabled.nativeElement.textContent.trim()).toBe('10'); - btnpicker.nativeElement.click(); - - - comp.options = {disableDateRange: {begin: {}, end: {}}}; - - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - comp.generateCalendar(10, 2016, true); - - fixture.detectChanges(); - disabled = getElements('tr .disabled'); - expect(disabled).not.toBe(null); - expect(disabled.length).toBe(0); - }); - - it('options - disable today - today button disabled', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - - let date = new Date(); - comp.options = {disableDays: [{year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate()}]}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - comp.generateCalendar(10, 2016, true); - - fixture.detectChanges(); - let headertodaybtn = getElement('.headertodaybtn'); - expect(headertodaybtn).not.toBe(null); - expect(headertodaybtn.properties['disabled']).toBe(true); - - fixture.detectChanges(); - headertodaybtn.nativeElement.click(); - let selector = getElement('.selector'); - expect(selector).not.toBe(null); - - btnpicker.nativeElement.click(); - - comp.options = {disableDays: []}; - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker.nativeElement.click(); - comp.generateCalendar(10, 2016, true); - - fixture.detectChanges(); - headertodaybtn = getElement('.headertodaybtn'); - expect(headertodaybtn).not.toBe(null); - expect(headertodaybtn.properties['disabled']).toBe(false); - - headertodaybtn.nativeElement.click(); - - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection).not.toBe(null); - expect(selection.nativeElement.value).toBe(getDateString(date)); - }); - - it('options - disable weekends', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {firstDayOfWeek: 'mo', disableWeekends: true}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - comp.generateCalendar(10, 2016, true); - - fixture.detectChanges(); - let disabled = getElements('tr .disabled'); - expect(disabled).not.toBe(null); - expect(disabled.length).toBe(12); - - let firstDisabled = disabled[0]; - expect(firstDisabled.nativeElement.textContent.trim()).toBe('1'); - - let secondDisabled = disabled[1]; - expect(secondDisabled.nativeElement.textContent.trim()).toBe('2'); - - let lastDisabled = disabled[disabled.length - 1]; - expect(lastDisabled.nativeElement.textContent.trim()).toBe('6'); - - fixture.detectChanges(); - firstDisabled.nativeElement.click(); - let selection = getElement('.selection'); - expect(selection.nativeElement.value).toBe(''); - - fixture.detectChanges(); - secondDisabled.nativeElement.click(); - selection = getElement('.selection'); - expect(selection.nativeElement.value).toBe(''); - - fixture.detectChanges(); - let selectableDays = getElements('.tablesingleday'); - expect(selectableDays).not.toBe(null); - expect(selectableDays.length).toBe(21); - - selectableDays[0].nativeElement.click(); - - fixture.detectChanges(); - selection = getElement('.selection'); - expect(selection.nativeElement.value).toContain('2016-10-03'); - }); - - it('options - inline', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {inline: true}; - - comp.parseOptions(); - - fixture.detectChanges(); - let selector = getElement('.selector'); - expect(selector).not.toBe(null); - - fixture.detectChanges(); - let selectiongroup = getElement('.selectiongroup'); - expect(selectiongroup).toBe(null); - }); - - it('options - show clear date button', () => { - let date = new Date(); - comp.selectedMonth = {monthTxt: '', monthNbr: date.getMonth() + 1, year: date.getFullYear()}; - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let currday = getElement('.currday'); - expect(currday).not.toBe(null); - - currday.nativeElement.click(); - - fixture.detectChanges(); - let btnclear = getElement('.btnclear'); - expect(btnclear).not.toBe(null); - - btnclear.nativeElement.click(); - - comp.options = {showClearDateBtn: true}; - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - currday = getElement('.currday'); - expect(currday).not.toBe(null); - - currday.nativeElement.click(); - - fixture.detectChanges(); - btnclear = getElement('.btnclear'); - expect(btnclear).not.toBe(null); - btnclear.nativeElement.click(); - - btnclear.nativeElement.click(); - - - comp.options = {showClearDateBtn: false}; - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - currday = getElement('.currday'); - expect(currday).not.toBe(null); - - currday.nativeElement.click(); - - fixture.detectChanges(); - btnclear = getElement('.btnclear'); - expect(btnclear).toBe(null); - }); - - it('options - height', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {height: '50px'}; - - comp.parseOptions(); - - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection).not.toBe(null); - expect(selection.styles['height']).toBe('50px'); - }); - - it('options - width', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {width: '300px'}; - - comp.parseOptions(); - - fixture.detectChanges(); - expect(de).not.toBe(null); - expect(de.styles['width']).toBe('300px'); - - comp.options = {width: '20%'}; - - comp.parseOptions(); - - fixture.detectChanges(); - expect(de).not.toBe(null); - expect(de.styles['width']).toBe('20%'); - }); - - it('options - selection text font size', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {selectionTxtFontSize: '10px'}; - - comp.parseOptions(); - - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection).not.toBe(null); - expect(selection.styles['font-size']).toBe('10px'); - }); - - it('options - align selector right', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {alignSelectorRight: true}; - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - comp.parseOptions(); - - fixture.detectChanges(); - let alignselectorright = getElement('.alignselectorright'); - expect(alignselectorright).not.toBe(null); - - comp.options = {alignSelectorRight: false}; - - comp.parseOptions(); - - fixture.detectChanges(); - alignselectorright = getElement('.alignselectorright'); - expect(alignselectorright).toBe(null); - }); - - it('options - open selector top of input', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {openSelectorTopOfInput: true, height: '30px'}; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - let value: string = comp.getSelectorTopPosition(); - expect(value).not.toBe(null); - expect(value).toBe('32px'); - - btnpicker.nativeElement.click(); - - - comp.options = {openSelectorTopOfInput: false}; - - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - value = comp.getSelectorTopPosition(); - expect(value).toBe(undefined); - - - btnpicker.nativeElement.click(); - - comp.options = {}; - - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - value = comp.getSelectorTopPosition(); - expect(value).toBe(undefined); - }); - - it('options - indicate invalid date', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {indicateInvalidDate: true, dateFormat: 'dd.mm.yyyy'}; - - comp.parseOptions(); - - comp.userDateInput({target:{value:'2016-08-22'}}); - fixture.detectChanges(); - let invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'2016-08-xx'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'2016-08-99'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'10.10.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).toBe(null); - }); - - it('options - disableUntil input dates validation', ()=> { - comp.options = { - indicateInvalidDate: true, - dateFormat: 'dd.mm.yyyy', - disableUntil:{year: 2016, month: 11, day: 4} - }; - - comp.parseOptions(); - - comp.userDateInput({target:{value:'11.12.2015'}}); - fixture.detectChanges(); - let invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'11.06.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'04.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'05.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).toBe(null); - - comp.options = { - indicateInvalidDate: true, - dateFormat: 'dd.mm.yyyy', - disableUntil:{year: 0, month: 0, day: 0} - }; - - comp.parseOptions(); - - comp.userDateInput({target:{value:'11.12.2015'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).toBe(null); - }); - - it('options - disableSince input dates validation', ()=> { - comp.options = { - indicateInvalidDate: true, - dateFormat: 'dd.mm.yyyy', - disableSince:{year: 2016, month: 11, day: 22} - }; - - comp.parseOptions(); - - comp.userDateInput({target:{value:'08.12.2017'}}); - fixture.detectChanges(); - let invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'08.12.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'23.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'21.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).toBe(null); - - comp.options = { - indicateInvalidDate: true, - dateFormat: 'dd.mm.yyyy', - disableSince:{year: 0, month: 0, day: 0} - }; - - comp.parseOptions(); - - comp.userDateInput({target:{value:'11.12.2015'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).toBe(null); - }); - - it('options - disable weekends input date validation', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 11, year: 2016}; - comp.options = { - indicateInvalidDate: true, - dateFormat: 'dd.mm.yyyy', - disableWeekends: true, - firstDayOfWeek: 'mo' - }; - - comp.parseOptions(); - - comp.userDateInput({target:{value:'05.11.2016'}}); - fixture.detectChanges(); - let invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'06.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'12.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'13.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'19.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'20.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'26.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'27.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'04.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).toBe(null); - }); - - it('options - disableDays input date validation', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 11, year: 2016}; - comp.options = { - indicateInvalidDate: true, - dateFormat: 'dd.mm.yyyy', - disableDays: [ - {year: 2016, month: 11, day: 1}, - {year: 2016, month: 11, day: 3}, - {year: 2016, month: 11, day: 5}, - {year: 2016, month: 11, day: 7} - ], - firstDayOfWeek: 'mo' - }; - - comp.parseOptions(); - - comp.userDateInput({target:{value:'01.11.2016'}}); - fixture.detectChanges(); - let invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'03.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'05.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'07.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).not.toBe(null); - - comp.userDateInput({target:{value:'02.11.2016'}}); - fixture.detectChanges(); - invaliddate = getElement('.invaliddate'); - expect(invaliddate).toBe(null); - }); - - it('options - disable component', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {componentDisabled: true}; - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - - btnpicker.nativeElement.click(); - fixture.detectChanges(); - - let selector = getElement('.selector'); - expect(selector).toBe(null); - - fixture.detectChanges(); - let selection = getElement('.selection'); - - selection.nativeElement.value = '2016-11-14'; - - fixture.detectChanges(); - expect(selection.nativeElement.value).toContain(''); - }); - - it('options - editable date field', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {editableDateField: false}; - comp.parseOptions(); - - fixture.detectChanges(); - let selection = getElement('.selection'); - - selection.nativeElement.value = '2016-11-14'; - - fixture.detectChanges(); - expect(selection.nativeElement.value).toContain(''); - - comp.options = {editableDateField: true}; - comp.parseOptions(); - - fixture.detectChanges(); - selection = getElement('.selection'); - - selection.nativeElement.value = '2016-11-14'; - - fixture.detectChanges(); - expect(selection.nativeElement.value).toContain('2016-11-14'); - }); - - it('options - click input to open selector', () => { - - let selection: DebugElement, - selector: DebugElement; - - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {editableDateField: true}; - comp.parseOptions(); - - fixture.detectChanges(); - selection = getElement('.selection'); - - selection.nativeElement.click(); - - fixture.detectChanges(); - selector = getElement('.selector'); - expect(selector).toBe(null); - - comp.options = {editableDateField: false, openSelectorOnInputClick: true}; - comp.parseOptions(); - - fixture.detectChanges(); - selection = getElement('.selection'); - - selection.nativeElement.click(); - - fixture.detectChanges(); - selector = getElement('.selector'); - expect(selector).not.toBe(null); - }); - - it('options - input field value required', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {}; - comp.parseOptions(); - - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection).not.toBe(null); - expect(selection.properties['required']).toBe(false); - - comp.options = {inputValueRequired: true}; - comp.parseOptions(); - - fixture.detectChanges(); - selection = getElement('.selection'); - expect(selection).not.toBe(null); - expect(selection.properties['required']).toBe(true); - - comp.options = {inputValueRequired: false}; - comp.parseOptions(); - - fixture.detectChanges(); - selection = getElement('.selection'); - expect(selection).not.toBe(null); - expect(selection.properties['required']).toBe(false); - }); - - it('options - show selector arrow', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {}; - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let selectorarrow = getElement('.selectorarrow'); - expect(selectorarrow).not.toBe(null); - btnpicker.nativeElement.click(); - - - comp.options = {showSelectorArrow: false}; - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - selectorarrow = getElement('.selectorarrow'); - expect(selectorarrow).toBe(null); - btnpicker.nativeElement.click(); - - - comp.options = {showSelectorArrow: true}; - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - selectorarrow = getElement('.selectorarrow'); - expect(selectorarrow).not.toBe(null); - btnpicker.nativeElement.click(); - }); - - it('options - show input field', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; - comp.options = {}; - comp.parseOptions(); - - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection).not.toBe(null); - - - comp.options = {showInputField: false}; - comp.parseOptions(); - - fixture.detectChanges(); - selection = getElement('.selection'); - expect(selection).toBe(null); - - - comp.options = {showInputField: true}; - comp.parseOptions(); - - fixture.detectChanges(); - selection = getElement('.selection'); - expect(selection).not.toBe(null); - }); - - it('options - input auto fill', () => { - comp.options = {inputAutoFill: false}; - comp.parseOptions(); - - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection).not.toBe(null); - - fixture.detectChanges(); - selection.nativeElement.value = '2016-2-1'; - fixture.nativeElement.querySelector('.selection').dispatchEvent(new Event('keyup')); - - fixture.detectChanges(); - selection = getElement('.selection'); - expect(selection.nativeElement.value).toBe('2016-2-1'); - - - comp.options = {inputAutoFill: true}; - comp.parseOptions(); - - fixture.detectChanges(); - selection.nativeElement.value = ''; - - fixture.detectChanges(); - selection.nativeElement.value = '2016-1-'; - fixture.nativeElement.querySelector('.selection').dispatchEvent(new Event('keyup')); - - fixture.detectChanges(); - selection = getElement('.selection'); - expect(selection.nativeElement.value).toBe('2016-01-'); - - fixture.detectChanges(); - selection.nativeElement.value = '2016-01-9'; - fixture.nativeElement.querySelector('.selection').dispatchEvent(new Event('keyup')); - - fixture.detectChanges(); - selection = getElement('.selection'); - expect(selection.nativeElement.value).toBe('2016-01-09'); - }); - - it('options - show week numbers', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2017}; - comp.options = {showWeekNumbers: false}; - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let weekdaytitleweeknbr = getElement('.weekdaytitleweeknbr'); - expect(weekdaytitleweeknbr).toBe(null); - - fixture.detectChanges(); - let daycellweeknbr = getElements('.daycellweeknbr'); - expect(daycellweeknbr.length).toBe(0); - - btnpicker.nativeElement.click(); - - - comp.options = {showWeekNumbers: true}; - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - weekdaytitleweeknbr = getElement('.weekdaytitleweeknbr'); - expect(weekdaytitleweeknbr).not.toBe(null); - - fixture.detectChanges(); - daycellweeknbr = getElements('.daycellweeknbr'); - expect(daycellweeknbr.length).toBe(6); - - expect(daycellweeknbr[0].nativeElement.textContent.trim()).toBe('52'); - expect(daycellweeknbr[1].nativeElement.textContent.trim()).toBe('1'); - expect(daycellweeknbr[2].nativeElement.textContent.trim()).toBe('2'); - expect(daycellweeknbr[3].nativeElement.textContent.trim()).toBe('3'); - expect(daycellweeknbr[4].nativeElement.textContent.trim()).toBe('4'); - expect(daycellweeknbr[5].nativeElement.textContent.trim()).toBe('5'); - - fixture.detectChanges(); - let prevyear = getElement(PREVYEAR); - expect(prevyear).not.toBe(null); - prevyear.nativeElement.click(); - - fixture.detectChanges(); - daycellweeknbr = getElements('.daycellweeknbr'); - expect(daycellweeknbr.length).toBe(6); - - expect(daycellweeknbr[0].nativeElement.textContent.trim()).toBe('53'); - expect(daycellweeknbr[1].nativeElement.textContent.trim()).toBe('1'); - expect(daycellweeknbr[2].nativeElement.textContent.trim()).toBe('2'); - expect(daycellweeknbr[3].nativeElement.textContent.trim()).toBe('3'); - expect(daycellweeknbr[4].nativeElement.textContent.trim()).toBe('4'); - expect(daycellweeknbr[5].nativeElement.textContent.trim()).toBe('5'); - - prevyear.nativeElement.click(); - - fixture.detectChanges(); - daycellweeknbr = getElements('.daycellweeknbr'); - expect(daycellweeknbr.length).toBe(6); - - expect(daycellweeknbr[0].nativeElement.textContent.trim()).toBe('1'); - expect(daycellweeknbr[1].nativeElement.textContent.trim()).toBe('2'); - expect(daycellweeknbr[2].nativeElement.textContent.trim()).toBe('3'); - expect(daycellweeknbr[3].nativeElement.textContent.trim()).toBe('4'); - expect(daycellweeknbr[4].nativeElement.textContent.trim()).toBe('5'); - expect(daycellweeknbr[5].nativeElement.textContent.trim()).toBe('6'); - }); - - it('options - aria label texts', () => { - comp.selectedDate = comp.parseSelectedDate('2017-10-11'); - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - expect(btnpicker).not.toBe(null); - expect(btnpicker.nativeElement.attributes['aria-label'].textContent).toBe('Open Calendar'); - - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection).not.toBe(null); - expect(selection.nativeElement.attributes['aria-label'].textContent).toBe('Date input field'); - - fixture.detectChanges(); - let btnclear = getElement('.btnclear'); - expect(btnclear).not.toBe(null); - expect(btnclear.nativeElement.attributes['aria-label'].textContent).toBe('Clear Date'); - - - fixture.detectChanges(); - let prevmonth = getElement(PREVMONTH); - expect(prevmonth).not.toBe(null); - expect(prevmonth.nativeElement.attributes['aria-label'].textContent).toBe('Previous Month'); - - fixture.detectChanges(); - let nextmonth = getElement(NEXTMONTH); - expect(nextmonth).not.toBe(null); - expect(nextmonth.nativeElement.attributes['aria-label'].textContent).toBe('Next Month'); - - fixture.detectChanges(); - let prevyear = getElement(PREVYEAR); - expect(prevyear).not.toBe(null); - expect(prevyear.nativeElement.attributes['aria-label'].textContent).toBe('Previous Year'); - - fixture.detectChanges(); - let nextyear = getElement(NEXTYEAR); - expect(nextyear).not.toBe(null); - expect(nextyear.nativeElement.attributes['aria-label'].textContent).toBe('Next Year'); - - btnpicker.nativeElement.click(); - - comp.options = { - ariaLabelInputField: 'text 1', - ariaLabelClearDate: 'text 2', - ariaLabelOpenCalendar: 'text 3', - ariaLabelPrevMonth: 'text 4', - ariaLabelNextMonth: 'text 5', - ariaLabelPrevYear: 'text 6', - ariaLabelNextYear: 'text 7' - }; - comp.parseOptions(); - - fixture.detectChanges(); - btnpicker = getElement('.btnpicker'); - expect(btnpicker).not.toBe(null); - expect(btnpicker.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelOpenCalendar); - - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - selection = getElement('.selection'); - expect(selection).not.toBe(null); - expect(selection.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelInputField); - - fixture.detectChanges(); - btnclear = getElement('.btnclear'); - expect(btnclear).not.toBe(null); - expect(btnclear.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelClearDate); - - - fixture.detectChanges(); - prevmonth = getElement(PREVMONTH); - expect(prevmonth).not.toBe(null); - expect(prevmonth.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelPrevMonth); - - fixture.detectChanges(); - nextmonth = getElement(NEXTMONTH); - expect(nextmonth).not.toBe(null); - expect(nextmonth.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelNextMonth); - - fixture.detectChanges(); - prevyear = getElement(PREVYEAR); - expect(prevyear).not.toBe(null); - expect(prevyear.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelPrevYear); - - fixture.detectChanges(); - nextyear = getElement(NEXTYEAR); - expect(nextyear).not.toBe(null); - expect(nextyear.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelNextYear); - }); - - it('locale - use fr locale', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; - comp.locale = 'fr'; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let days = getElements('.caltable thead tr th'); - expect(days.length).toBe(7); - expect(days[0].nativeElement.textContent).toBe('Lun'); - expect(days[1].nativeElement.textContent).toBe('Mar'); - expect(days[2].nativeElement.textContent).toBe('Mer'); - expect(days[3].nativeElement.textContent).toBe('Jeu'); - expect(days[4].nativeElement.textContent).toBe('Ven'); - expect(days[5].nativeElement.textContent).toBe('Sam'); - expect(days[6].nativeElement.textContent).toBe('Dim'); - - fixture.detectChanges(); - let nextmonth = getElement(NEXTMONTH); - expect(nextmonth).not.toBe(null); - - fixture.detectChanges(); - let monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Jan'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Fév'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Mar'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Avr'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Mai'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Juin'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Juil'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Aoû'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Sep'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Oct'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Nov'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Déc'); - - fixture.detectChanges(); - let headertodaybtn = getElement('.headertodaybtn'); - expect(headertodaybtn).not.toBe(null); - expect(headertodaybtn.nativeElement.textContent).toBe('Aujourd\'hui'); - - fixture.detectChanges(); - let firstDayOfWeek = getElement('.caltable thead tr th:first-child'); - expect(firstDayOfWeek).not.toBe(null); - expect(firstDayOfWeek.nativeElement.textContent).toBe('Lun'); - - fixture.detectChanges(); - let sunday = getElement('.sunday'); - expect(sunday).not.toBe(null); - - comp.userDateInput({target:{value:'10/10/2016'}}); - expect(comp.invalidDate).toBe(false); - - fixture.detectChanges(); - let invaliddate = getElement('.invaliddate'); - expect(invaliddate).toBe(null); - }); - - it('selDate - initially selected date - string', () => { - let date: string = '2017-10-11'; - comp.selectedDate = comp.parseSelectedDate(date); - - comp.parseOptions(); - - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection).not.toBe(null); - expect(selection.nativeElement.value).toContain('2017-10-11'); - - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let selectedday = getElement('.selectedday div span'); - expect(selectedday).not.toBe(null); - expect(selectedday.nativeElement.textContent).toContain('11'); - - fixture.detectChanges(); - let monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel).not.toBe(null); - expect(monthLabel.nativeElement.textContent).toBe('Oct'); - - fixture.detectChanges(); - let yearLabel = getElement('.headeryeartxt .headerlabelbtn'); - expect(yearLabel).not.toBe(null); - expect(yearLabel.nativeElement.textContent).toBe('2017'); - }); - - it('selDate - initially selected date - object', () => { - let date: Object = {year: 2017, month: 10, day: 11}; - comp.selectedDate = comp.parseSelectedDate(date); - - comp.parseOptions(); - - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection).not.toBe(null); - expect(selection.nativeElement.value).toContain('2017-10-11'); - expect(comp.selectionDayTxt).toContain('2017-10-11'); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let selectedday = getElement('.selectedday div span'); - expect(selectedday).not.toBe(null); - expect(selectedday.nativeElement.textContent).toContain('11'); - - fixture.detectChanges(); - let monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel).not.toBe(null); - expect(monthLabel.nativeElement.textContent).toBe('Oct'); - - fixture.detectChanges(); - let yearLabel = getElement('.headeryeartxt .headerlabelbtn'); - expect(yearLabel).not.toBe(null); - expect(yearLabel.nativeElement.textContent).toBe('2017'); - }); - - it('defaultMonth - initially selected month', () => { - comp.selectedMonth = comp.parseSelectedMonth('2019-08'); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel).not.toBe(null); - expect(monthLabel.nativeElement.textContent).toBe('Aug'); - - fixture.detectChanges(); - let yearLabel = getElement('.headeryeartxt .headerlabelbtn'); - expect(yearLabel).not.toBe(null); - expect(yearLabel.nativeElement.textContent).toBe('2019'); - }); - - it('placeholder - placeholder text', () => { - comp.placeholder = ''; - - fixture.detectChanges(); - let selection = getElement('.selection'); - expect(selection).not.toBe(null); - expect(selection.properties['placeholder']).toBe(''); - - comp.placeholder = 'Select date'; - - fixture.detectChanges(); - selection = getElement('.selection'); - expect(selection).not.toBe(null); - expect(selection.properties['placeholder']).toBe(comp.placeholder); - - - }); - - it('locale - use id locale', () => { - comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; - comp.locale = 'id'; - - comp.parseOptions(); - - fixture.detectChanges(); - let btnpicker = getElement('.btnpicker'); - btnpicker.nativeElement.click(); - - fixture.detectChanges(); - let days = getElements('.caltable thead tr th'); - expect(days.length).toBe(7); - expect(days[0].nativeElement.textContent).toBe('Min'); - expect(days[1].nativeElement.textContent).toBe('Sen'); - expect(days[2].nativeElement.textContent).toBe('Sel'); - expect(days[3].nativeElement.textContent).toBe('Rab'); - expect(days[4].nativeElement.textContent).toBe('Kam'); - expect(days[5].nativeElement.textContent).toBe('Jum'); - expect(days[6].nativeElement.textContent).toBe('Sab'); - - fixture.detectChanges(); - let nextmonth = getElement(NEXTMONTH); - expect(nextmonth).not.toBe(null); - - fixture.detectChanges(); - let monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Jan'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Feb'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Mar'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Apr'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Mei'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Jun'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Jul'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Ags'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Sep'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Okt'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Nov'); - - nextmonth.nativeElement.click(); - fixture.detectChanges(); - monthLabel = getElement('.headermonthtxt .headerlabelbtn'); - expect(monthLabel.nativeElement.textContent).toBe('Des'); - - fixture.detectChanges(); - let headertodaybtn = getElement('.headertodaybtn'); - expect(headertodaybtn).not.toBe(null); - expect(headertodaybtn.nativeElement.textContent).toBe('Hari ini'); - - fixture.detectChanges(); - let firstDayOfWeek = getElement('.caltable thead tr th:first-child'); - expect(firstDayOfWeek).not.toBe(null); - expect(firstDayOfWeek.nativeElement.textContent).toBe('Min'); - - fixture.detectChanges(); - let sunday = getElement('.sunday'); - expect(sunday).not.toBe(null); - - comp.userDateInput({target:{value:'10-10-2016'}}); - expect(comp.invalidDate).toBe(false); - - fixture.detectChanges(); - let invaliddate = getElement('.invaliddate'); - expect(invaliddate).toBe(null); - }); - -}); - - - - - diff --git a/portal-2/src/app/utils/my-date-picker/my-date-picker.component.ts b/portal-2/src/app/utils/my-date-picker/my-date-picker.component.ts deleted file mode 100644 index 389a5be3..00000000 --- a/portal-2/src/app/utils/my-date-picker/my-date-picker.component.ts +++ /dev/null @@ -1,677 +0,0 @@ -import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ElementRef, ViewEncapsulation, ChangeDetectorRef, Renderer, forwardRef } from "@angular/core"; -import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; -import { IMyDate, IMyDateRange, IMyMonth, IMyCalendarDay, IMyWeek, IMyDayLabels, IMyMonthLabels, IMyOptions, IMyDateModel, IMyInputAutoFill, IMyInputFieldChanged, IMyCalendarViewChanged, IMyInputFocusBlur } from "./interfaces/index"; -import { LocaleService } from "./services/my-date-picker.locale.service"; -import { UtilService } from "./services/my-date-picker.util.service"; - -// webpack1_ -declare var require: any; -// declare var myDpStyles: string = require("./my-date-picker.component.css"); -// declare var myDpTpl: string = require("./my-date-picker.component.html"); -// webpack2_ - -export const MYDP_VALUE_ACCESSOR: any = { - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => MyDatePicker), - multi: true -}; - -@Component({ - selector: "my-date-picker", - styleUrls: ['my-date-picker.component.css'], - templateUrl: 'my-date-picker.component.html', - providers: [LocaleService, UtilService, MYDP_VALUE_ACCESSOR], - encapsulation: ViewEncapsulation.None -}) - -export class MyDatePicker implements OnChanges, ControlValueAccessor { - @Input() options: any; - @Input() locale: string; - @Input() defaultMonth: string; - @Input() selDate: string; - @Input() placeholder: string; - @Input() selector: number; - @Output() dateChanged: EventEmitter = new EventEmitter(); - @Output() inputFieldChanged: EventEmitter = new EventEmitter(); - @Output() calendarViewChanged: EventEmitter = new EventEmitter(); - @Output() calendarToggle: EventEmitter = new EventEmitter(); - @Output() inputFocusBlur: EventEmitter = new EventEmitter(); - - onChangeCb: (_: any) => void = () => { }; - onTouchedCb: () => void = () => { }; - - showSelector: boolean = false; - visibleMonth: IMyMonth = {monthTxt: "", monthNbr: 0, year: 0}; - selectedMonth: IMyMonth = {monthTxt: "", monthNbr: 0, year: 0}; - selectedDate: IMyDate = {year: 0, month: 0, day: 0}; - weekDays: Array = []; - dates: Array = []; - selectionDayTxt: string = ""; - invalidDate: boolean = false; - disableTodayBtn: boolean = false; - dayIdx: number = 0; - weekDayOpts: Array = ["su", "mo", "tu", "we", "th", "fr", "sa"]; - autoFillOpts: IMyInputAutoFill = {separator: "", formatParts: [], enabled: true}; - - editMonth: boolean = false; - invalidMonth: boolean = false; - editYear: boolean = false; - invalidYear: boolean = false; - - prevMonthDisabled: boolean = false; - nextMonthDisabled: boolean = false; - prevYearDisabled: boolean = false; - nextYearDisabled: boolean = false; - - PREV_MONTH: number = 1; - CURR_MONTH: number = 2; - NEXT_MONTH: number = 3; - - MIN_YEAR: number = 1000; - MAX_YEAR: number = 9999; - - // Default options - opts: IMyOptions = { - dayLabels: {}, - monthLabels: {}, - dateFormat: "", - showTodayBtn: true, - todayBtnTxt: "", - firstDayOfWeek: "", - sunHighlight: true, - markCurrentDay: true, - disableUntil: {year: 0, month: 0, day: 0}, - disableSince: {year: 0, month: 0, day: 0}, - disableDays: > [], - enableDays: > [], - disableDateRange: {begin: {year: 0, month: 0, day: 0}, end: {year: 0, month: 0, day: 0}}, - disableWeekends: false, - showWeekNumbers: false, - height: "34px", - width: "100%", - selectionTxtFontSize: "18px", - inline: false, - showClearDateBtn: true, - alignSelectorRight: false, - openSelectorTopOfInput: false, - indicateInvalidDate: true, - editableDateField: true, - editableMonthAndYear: true, - disableHeaderButtons: true, - minYear: this.MIN_YEAR, - maxYear: this.MAX_YEAR, - componentDisabled: false, - inputValueRequired: false, - showSelectorArrow: true, - showInputField: true, - openSelectorOnInputClick: false, - inputAutoFill: true, - ariaLabelInputField: "Date input field", - ariaLabelClearDate: "Clear Date", - ariaLabelOpenCalendar: "Open Calendar", - ariaLabelPrevMonth: "Previous Month", - ariaLabelNextMonth: "Next Month", - ariaLabelPrevYear: "Previous Year", - ariaLabelNextYear: "Next Year" - }; - - constructor(public elem: ElementRef, private renderer: Renderer, private cdr: ChangeDetectorRef, private localeService: LocaleService, private utilService: UtilService) { - this.setLocaleOptions(); - renderer.listenGlobal("document", "click", (event: any) => { - if (this.showSelector && event.target && this.elem.nativeElement !== event.target && !this.elem.nativeElement.contains(event.target)) { - this.showSelector = false; - this.calendarToggle.emit(4); - } - if (this.opts.editableMonthAndYear && event.target && this.elem.nativeElement.contains(event.target)) { - this.resetMonthYearEdit(); - } - }); - } - - setLocaleOptions(): void { - let opts: IMyOptions = this.localeService.getLocaleOptions(this.locale); - Object.keys(opts).forEach((k) => { - (this.opts)[k] = opts[k]; - }); - } - - setOptions(): void { - if (this.options !== undefined) { - Object.keys(this.options).forEach((k) => { - (this.opts)[k] = this.options[k]; - }); - } - if (this.opts.minYear < this.MIN_YEAR) { - this.opts.minYear = this.MIN_YEAR; - } - if (this.opts.maxYear > this.MAX_YEAR) { - this.opts.maxYear = this.MAX_YEAR; - } - - let separator: string = this.utilService.getDateFormatSeparator(this.opts.dateFormat); - this.autoFillOpts = {separator: separator, formatParts: this.opts.dateFormat.split(separator), enabled: this.opts.inputAutoFill}; - } - - getComponentWidth(): string { - if (this.opts.showInputField) { - return this.opts.width; - } - else if (this.selectionDayTxt.length > 0 && this.opts.showClearDateBtn) { - return "60px"; - } - else { - return "30px"; - } - } - - getSelectorTopPosition(): string { - if (this.opts.openSelectorTopOfInput) { - return this.elem.nativeElement.children[0].offsetHeight + "px"; - } - } - - resetMonthYearEdit(): void { - this.editMonth = false; - this.editYear = false; - this.invalidMonth = false; - this.invalidYear = false; - } - - editMonthClicked(event: any): void { - event.stopPropagation(); - if (this.opts.editableMonthAndYear) { - this.editMonth = true; - } - } - - editYearClicked(event: any): void { - event.stopPropagation(); - if (this.opts.editableMonthAndYear) { - this.editYear = true; - } - } - - userDateInput(event: any): void { - this.invalidDate = false; - if (event.target.value.length === 0) { - this.clearDate(); - } - else { - let date: IMyDate = this.utilService.isDateValid(event.target.value, this.opts.dateFormat, this.opts.minYear, this.opts.maxYear, this.opts.disableUntil, this.opts.disableSince, this.opts.disableWeekends, this.opts.disableDays, this.opts.disableDateRange, this.opts.monthLabels, this.opts.enableDays); - if (date.day !== 0 && date.month !== 0 && date.year !== 0) { - this.selectDate(date); - } - else { - this.invalidDate = true; - } - } - if (this.invalidDate) { - this.inputFieldChanged.emit({value: event.target.value, dateFormat: this.opts.dateFormat, valid: !(event.target.value.length === 0 || this.invalidDate)}); - this.onChangeCb(""); - this.onTouchedCb(); - } - } - - onFocusInput(event: any): void { - this.inputFocusBlur.emit({reason: 1, value: event.target.value}); - } - - lostFocusInput(event: any): void { - this.selectionDayTxt = event.target.value; - this.onTouchedCb(); - this.inputFocusBlur.emit({reason: 2, value: event.target.value}); - } - - userMonthInput(event: any): void { - if (event.keyCode === 13 || event.keyCode === 37 || event.keyCode === 39) { - return; - } - - this.invalidMonth = false; - - let m: number = this.utilService.isMonthLabelValid(event.target.value, this.opts.monthLabels); - if (m !== -1) { - this.editMonth = false; - if (m !== this.visibleMonth.monthNbr) { - this.visibleMonth = {monthTxt: this.monthText(m), monthNbr: m, year: this.visibleMonth.year}; - this.generateCalendar(m, this.visibleMonth.year, true); - } - } - else { - this.invalidMonth = true; - } - } - - userYearInput(event: any): void { - if (event.keyCode === 13 || event.keyCode === 37 || event.keyCode === 39) { - return; - } - - this.invalidYear = false; - - let y: number = this.utilService.isYearLabelValid(Number(event.target.value), this.opts.minYear, this.opts.maxYear); - if (y !== -1) { - this.editYear = false; - if (y !== this.visibleMonth.year) { - this.visibleMonth = {monthTxt: this.visibleMonth.monthTxt, monthNbr: this.visibleMonth.monthNbr, year: y}; - this.generateCalendar(this.visibleMonth.monthNbr, y, true); - } - } - else { - this.invalidYear = true; - } - } - - isTodayDisabled(): void { - this.disableTodayBtn = this.utilService.isDisabledDay(this.getToday(), this.opts.disableUntil, this.opts.disableSince, this.opts.disableWeekends, this.opts.disableDays, this.opts.disableDateRange, this.opts.enableDays); - } - - parseOptions(): void { - if (this.locale) { - this.setLocaleOptions(); - } - this.setOptions(); - this.isTodayDisabled(); - this.dayIdx = this.weekDayOpts.indexOf(this.opts.firstDayOfWeek); - if (this.dayIdx !== -1) { - let idx: number = this.dayIdx; - for (let i = 0; i < this.weekDayOpts.length; i++) { - this.weekDays.push(this.opts.dayLabels[this.weekDayOpts[idx]]); - idx = this.weekDayOpts[idx] === "sa" ? 0 : idx + 1; - } - } - } - - writeValue(value: Object): void { - if (value && value["date"]) { - this.updateDateValue(this.parseSelectedDate(value["date"]), false); - } - else if (value === "") { - this.updateDateValue({year: 0, month: 0, day: 0}, true); - } - } - - registerOnChange(fn: any): void { - this.onChangeCb = fn; - } - - registerOnTouched(fn: any): void { - this.onTouchedCb = fn; - } - - ngOnChanges(changes: SimpleChanges): void { - if (changes.hasOwnProperty("selector") && changes["selector"].currentValue > 0) { - this.openBtnClicked(); - } - - if (changes.hasOwnProperty("placeholder")) { - this.placeholder = changes["placeholder"].currentValue; - } - - if (changes.hasOwnProperty("locale")) { - this.locale = changes["locale"].currentValue; - } - - if (changes.hasOwnProperty("options")) { - this.options = changes["options"].currentValue; - } - - this.weekDays.length = 0; - this.parseOptions(); - - if (changes.hasOwnProperty("defaultMonth")) { - let dm: string = changes["defaultMonth"].currentValue; - if (dm !== null && dm !== undefined && dm !== "") { - this.selectedMonth = this.parseSelectedMonth(dm); - } - else { - this.selectedMonth = {monthTxt: "", monthNbr: 0, year: 0}; - } - } - - if (changes.hasOwnProperty("selDate")) { - let sd: any = changes["selDate"]; - if (sd.currentValue !== null && sd.currentValue !== undefined && sd.currentValue !== "" && Object.keys(sd.currentValue).length !== 0) { - this.selectedDate = this.parseSelectedDate(sd.currentValue); - setTimeout(() => { - this.onChangeCb(this.getDateModel(this.selectedDate)); - }); - } - else { - // Do not clear on init - if (!sd.isFirstChange()) { - this.clearDate(); - } - } - } - if (this.opts.inline) { - this.setVisibleMonth(); - } - else if (this.showSelector) { - this.generateCalendar(this.visibleMonth.monthNbr, this.visibleMonth.year, false); - } - } - - removeBtnClicked(): void { - // Remove date button clicked - this.clearDate(); - if (this.showSelector) { - this.calendarToggle.emit(3); - } - this.showSelector = false; - } - - openBtnClicked(): void { - // Open selector button clicked - this.showSelector = !this.showSelector; - if (this.showSelector) { - this.setVisibleMonth(); - this.calendarToggle.emit(1); - } - else { - this.calendarToggle.emit(3); - } - } - - setVisibleMonth(): void { - // Sets visible month of calendar - let y: number = 0, m: number = 0; - if (!this.utilService.isInitializedDate(this.selectedDate)) { - if (this.selectedMonth.year === 0 && this.selectedMonth.monthNbr === 0) { - let today: IMyDate = this.getToday(); - y = today.year; - m = today.month; - } else { - y = this.selectedMonth.year; - m = this.selectedMonth.monthNbr; - } - } - else { - y = this.selectedDate.year; - m = this.selectedDate.month; - } - this.visibleMonth = {monthTxt: this.opts.monthLabels[m], monthNbr: m, year: y}; - - // Create current month - this.generateCalendar(m, y, true); - } - - prevMonth(): void { - // Previous month from calendar - let d: Date = this.getDate(this.visibleMonth.year, this.visibleMonth.monthNbr, 1); - d.setMonth(d.getMonth() - 1); - - let y: number = d.getFullYear(); - let m: number = d.getMonth() + 1; - - this.visibleMonth = {monthTxt: this.monthText(m), monthNbr: m, year: y}; - this.generateCalendar(m, y, true); - } - - nextMonth(): void { - // Next month from calendar - let d: Date = this.getDate(this.visibleMonth.year, this.visibleMonth.monthNbr, 1); - d.setMonth(d.getMonth() + 1); - - let y: number = d.getFullYear(); - let m: number = d.getMonth() + 1; - - this.visibleMonth = {monthTxt: this.monthText(m), monthNbr: m, year: y}; - this.generateCalendar(m, y, true); - } - - prevYear(): void { - // Previous year from calendar - this.visibleMonth.year--; - this.generateCalendar(this.visibleMonth.monthNbr, this.visibleMonth.year, true); - } - - nextYear(): void { - // Next year from calendar - this.visibleMonth.year++; - this.generateCalendar(this.visibleMonth.monthNbr, this.visibleMonth.year, true); - } - - todayClicked(): void { - // Today button clicked - let today: IMyDate = this.getToday(); - this.selectDate(today); - if (this.opts.inline && today.year !== this.visibleMonth.year || today.month !== this.visibleMonth.monthNbr) { - this.visibleMonth = {monthTxt: this.opts.monthLabels[today.month], monthNbr: today.month, year: today.year}; - this.generateCalendar(today.month, today.year, true); - } - } - - cellClicked(cell: any): void { - // Cell clicked on the calendar - if (cell.cmo === this.PREV_MONTH) { - // Previous month day - this.prevMonth(); - } - else if (cell.cmo === this.CURR_MONTH) { - // Current month day - if date is already selected clear it - if (cell.dateObj.year === this.selectedDate.year && cell.dateObj.month === this.selectedDate.month && cell.dateObj.day === this.selectedDate.day) { - this.clearDate(); - } - else { - this.selectDate(cell.dateObj); - } - } - else if (cell.cmo === this.NEXT_MONTH) { - // Next month day - this.nextMonth(); - } - this.resetMonthYearEdit(); - } - - cellKeyDown(event: any, cell: any) { - // Cell keyboard handling - if ((event.keyCode === 13 || event.keyCode === 32) && !cell.disabled) { - event.preventDefault(); - this.cellClicked(cell); - } - } - - clearDate(): void { - // Clears the date and notifies parent using callbacks and value accessor - let date: IMyDate = {year: 0, month: 0, day: 0}; - this.dateChanged.emit({date: date, jsdate: null, formatted: "", epoc: 0}); - this.onChangeCb(""); - this.onTouchedCb(); - this.updateDateValue(date, true); - } - - selectDate(date: IMyDate): void { - // Date selected, notifies parent using callbacks and value accessor - let dateModel: IMyDateModel = this.getDateModel(date); - this.dateChanged.emit(dateModel); - this.onChangeCb(dateModel); - this.onTouchedCb(); - this.updateDateValue(date, false); - if (this.showSelector) { - this.calendarToggle.emit(2); - } - this.showSelector = false; - } - - updateDateValue(date: IMyDate, clear: boolean): void { - // Updates date values - this.selectedDate = date; - this.selectionDayTxt = clear ? "" : this.formatDate(date); - this.inputFieldChanged.emit({value: this.selectionDayTxt, dateFormat: this.opts.dateFormat, valid: !clear}); - this.invalidDate = false; - } - - getDateModel(date: IMyDate): IMyDateModel { - // Creates a date model object from the given parameter - return {date: date, jsdate: this.getDate(date.year, date.month, date.day), formatted: this.formatDate(date), epoc: Math.round(this.getTimeInMilliseconds(date) / 1000.0)}; - } - - preZero(val: string): string { - // Prepend zero if smaller than 10 - return parseInt(val) < 10 ? "0" + val : val; - } - - formatDate(val: any): string { - // Returns formatted date string, if mmm is part of dateFormat returns month as a string - let formatted: string = this.opts.dateFormat.replace("yyyy", val.year).replace("dd", this.preZero(val.day)); - return this.opts.dateFormat.indexOf("mmm") !== -1 ? formatted.replace("mmm", this.monthText(val.month)) : formatted.replace("mm", this.preZero(val.month)); - } - - monthText(m: number): string { - // Returns month as a text - return this.opts.monthLabels[m]; - } - - monthStartIdx(y: number, m: number): number { - // Month start index - let d = new Date(); - d.setDate(1); - d.setMonth(m - 1); - d.setFullYear(y); - let idx = d.getDay() + this.sundayIdx(); - return idx >= 7 ? idx - 7 : idx; - } - - daysInMonth(m: number, y: number): number { - // Return number of days of current month - return new Date(y, m, 0).getDate(); - } - - daysInPrevMonth(m: number, y: number): number { - // Return number of days of the previous month - let d: Date = this.getDate(y, m, 1); - d.setMonth(d.getMonth() - 1); - return this.daysInMonth(d.getMonth() + 1, d.getFullYear()); - } - - isCurrDay(d: number, m: number, y: number, cmo: number, today: IMyDate): boolean { - // Check is a given date the today - return d === today.day && m === today.month && y === today.year && cmo === this.CURR_MONTH; - } - - getToday(): IMyDate { - let date: Date = new Date(); - return {year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate()}; - } - - getTimeInMilliseconds(date: IMyDate): number { - return this.getDate(date.year, date.month, date.day).getTime(); - } - - getDayNumber(date: IMyDate): number { - // Get day number: su=0, mo=1, tu=2, we=3 ... - let d: Date = this.getDate(date.year, date.month, date.day); - return d.getDay(); - } - - getWeekday(date: IMyDate): string { - // Get weekday: su, mo, tu, we ... - return this.weekDayOpts[this.getDayNumber(date)]; - } - - getDate(year: number, month: number, day: number): Date { - // Creates a date object from given year, month and day - return new Date(year, month - 1, day, 0, 0, 0, 0); - } - - sundayIdx(): number { - // Index of Sunday day - return this.dayIdx > 0 ? 7 - this.dayIdx : 0; - } - - generateCalendar(m: number, y: number, notifyChange: boolean): void { - this.dates.length = 0; - let today: IMyDate = this.getToday(); - let monthStart: number = this.monthStartIdx(y, m); - let dInThisM: number = this.daysInMonth(m, y); - let dInPrevM: number = this.daysInPrevMonth(m, y); - - let dayNbr: number = 1; - let cmo: number = this.PREV_MONTH; - for (let i = 1; i < 7; i++) { - let week: Array = []; - if (i === 1) { - // First week - let pm = dInPrevM - monthStart + 1; - // Previous month - for (let j = pm; j <= dInPrevM; j++) { - let date: IMyDate = {year: y, month: m - 1, day: j}; - week.push({dateObj: date, cmo: cmo, currDay: this.isCurrDay(j, m, y, cmo, today), dayNbr: this.getDayNumber(date), disabled: this.utilService.isDisabledDay(date, this.opts.disableUntil, this.opts.disableSince, this.opts.disableWeekends, this.opts.disableDays, this.opts.disableDateRange, this.opts.enableDays)}); - } - - cmo = this.CURR_MONTH; - // Current month - let daysLeft: number = 7 - week.length; - for (let j = 0; j < daysLeft; j++) { - let date: IMyDate = {year: y, month: m, day: dayNbr}; - week.push({dateObj: date, cmo: cmo, currDay: this.isCurrDay(dayNbr, m, y, cmo, today), dayNbr: this.getDayNumber(date), disabled: this.utilService.isDisabledDay(date, this.opts.disableUntil, this.opts.disableSince, this.opts.disableWeekends, this.opts.disableDays, this.opts.disableDateRange, this.opts.enableDays)}); - dayNbr++; - } - } - else { - // Rest of the weeks - for (let j = 1; j < 8; j++) { - if (dayNbr > dInThisM) { - // Next month - dayNbr = 1; - cmo = this.NEXT_MONTH; - } - let date: IMyDate = {year: y, month: cmo === this.CURR_MONTH ? m : m + 1, day: dayNbr}; - week.push({dateObj: date, cmo: cmo, currDay: this.isCurrDay(dayNbr, m, y, cmo, today), dayNbr: this.getDayNumber(date), disabled: this.utilService.isDisabledDay(date, this.opts.disableUntil, this.opts.disableSince, this.opts.disableWeekends, this.opts.disableDays, this.opts.disableDateRange, this.opts.enableDays)}); - dayNbr++; - } - } - let weekNbr: number = this.opts.showWeekNumbers && this.opts.firstDayOfWeek === "mo" ? this.utilService.getWeekNumber(week[0].dateObj) : 0; - this.dates.push({week: week, weekNbr: weekNbr}); - } - - this.setHeaderBtnDisabledState(m, y); - - if (notifyChange) { - // Notify parent - this.calendarViewChanged.emit({year: y, month: m, first: {number: 1, weekday: this.getWeekday({year: y, month: m, day: 1})}, last: {number: dInThisM, weekday: this.getWeekday({year: y, month: m, day: dInThisM})}}); - } - } - - parseSelectedDate(selDate: any): IMyDate { - // Parse selDate value - it can be string or IMyDate object - let date: IMyDate = {day: 0, month: 0, year: 0}; - if (typeof selDate === "string") { - let sd: string = selDate; - date.day = this.utilService.parseDatePartNumber(this.opts.dateFormat, sd, "dd"); - - date.month = this.opts.dateFormat.indexOf("mmm") !== -1 - ? this.utilService.parseDatePartMonthName(this.opts.dateFormat, sd, "mmm", this.opts.monthLabels) - : this.utilService.parseDatePartNumber(this.opts.dateFormat, sd, "mm"); - - date.year = this.utilService.parseDatePartNumber(this.opts.dateFormat, sd, "yyyy"); - } - else if (typeof selDate === "object") { - date = selDate; - } - this.selectionDayTxt = this.formatDate(date); - return date; - } - - parseSelectedMonth(ms: string): IMyMonth { - return this.utilService.parseDefaultMonth(ms); - } - - setHeaderBtnDisabledState(m: number, y: number): void { - let dpm: boolean = false; - let dpy: boolean = false; - let dnm: boolean = false; - let dny: boolean = false; - if (this.opts.disableHeaderButtons) { - dpm = this.utilService.isMonthDisabledByDisableUntil({year: m === 1 ? y - 1 : y, month: m === 1 ? 12 : m - 1, day: this.daysInMonth(m === 1 ? 12 : m - 1, m === 1 ? y - 1 : y)}, this.opts.disableUntil); - dpy = this.utilService.isMonthDisabledByDisableUntil({year: y - 1, month: m, day: this.daysInMonth(m, y - 1)}, this.opts.disableUntil); - dnm = this.utilService.isMonthDisabledByDisableSince({year: m === 12 ? y + 1 : y, month: m === 12 ? 1 : m + 1, day: 1}, this.opts.disableSince); - dny = this.utilService.isMonthDisabledByDisableSince({year: y + 1, month: m, day: 1}, this.opts.disableSince); - } - this.prevMonthDisabled = m === 1 && y === this.opts.minYear || dpm; - this.prevYearDisabled = y - 1 < this.opts.minYear || dpy; - this.nextMonthDisabled = m === 12 && y === this.opts.maxYear || dnm; - this.nextYearDisabled = y + 1 > this.opts.maxYear || dny; - } -} diff --git a/portal-2/src/app/utils/my-date-picker/my-date-picker.module.ts b/portal-2/src/app/utils/my-date-picker/my-date-picker.module.ts deleted file mode 100644 index a638a905..00000000 --- a/portal-2/src/app/utils/my-date-picker/my-date-picker.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CommonModule } from "@angular/common"; -import { FormsModule } from "@angular/forms"; -import { NgModule } from "@angular/core"; -import { MyDatePicker } from "./my-date-picker.component"; -import { FocusDirective } from "./directives/my-date-picker.focus.directive"; -import { InputAutoFillDirective } from "./directives/my-date-picker.input.auto.fill.directive"; - -@NgModule({ - imports: [CommonModule, FormsModule], - declarations: [MyDatePicker, FocusDirective, InputAutoFillDirective], - exports: [MyDatePicker, FocusDirective, InputAutoFillDirective] -}) -export class MyDatePickerModule { -} diff --git a/portal-2/src/app/utils/my-date-picker/services/my-date-picker.locale.service.ts b/portal-2/src/app/utils/my-date-picker/services/my-date-picker.locale.service.ts deleted file mode 100644 index 44c209e9..00000000 --- a/portal-2/src/app/utils/my-date-picker/services/my-date-picker.locale.service.ts +++ /dev/null @@ -1,232 +0,0 @@ -import { Injectable } from "@angular/core"; -import { IMyLocales, IMyOptions } from "../interfaces/index"; - -@Injectable() -export class LocaleService { - private locales: IMyLocales = { - "en": { - dayLabels: {su: "Sun", mo: "Mon", tu: "Tue", we: "Wed", th: "Thu", fr: "Fri", sa: "Sat"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "May", 6: "Jun", 7: "Jul", 8: "Aug", 9: "Sep", 10: "Oct", 11: "Nov", 12: "Dec" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "Today", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "he": { - dayLabels: {su: "רא", mo: "שנ", tu: "של", we: "רב", th: "חמ", fr: "שי", sa: "שב"}, - monthLabels: { 1: "ינו", 2: "פבר", 3: "מרץ", 4: "אפר", 5: "מאי", 6: "יונ", 7: "יול", 8: "אוג", 9: "ספט", 10: "אוק", 11: "נוב", 12: "דצמ" }, - dateFormat: "dd/mm/yyyy", - todayBtnTxt: "היום", - firstDayOfWeek: "su", - sunHighlight: false - }, - "ja": { - dayLabels: {su: "日", mo: "月", tu: "火", we: "水", th: "木", fr: "金", sa: "土"}, - monthLabels: {1: "1月", 2: "2月", 3: "3月", 4: "4月", 5: "5月", 6: "6月", 7: "7月", 8: "8月", 9: "9月", 10: "10月", 11: "11月", 12: "12月"}, - dateFormat: "yyyy.mm.dd", - todayBtnTxt: "今日", - sunHighlight: false - }, - "fr": { - dayLabels: {su: "Dim", mo: "Lun", tu: "Mar", we: "Mer", th: "Jeu", fr: "Ven", sa: "Sam"}, - monthLabels: {1: "Jan", 2: "Fév", 3: "Mar", 4: "Avr", 5: "Mai", 6: "Juin", 7: "Juil", 8: "Aoû", 9: "Sep", 10: "Oct", 11: "Nov", 12: "Déc"}, - dateFormat: "dd/mm/yyyy", - todayBtnTxt: "Aujourd'hui", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "fi": { - dayLabels: {su: "Su", mo: "Ma", tu: "Ti", we: "Ke", th: "To", fr: "Pe", sa: "La"}, - monthLabels: {1: "Tam", 2: "Hel", 3: "Maa", 4: "Huh", 5: "Tou", 6: "Kes", 7: "Hei", 8: "Elo", 9: "Syy", 10: "Lok", 11: "Mar", 12: "Jou"}, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Tänään", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "es": { - dayLabels: {su: "Do", mo: "Lu", tu: "Ma", we: "Mi", th: "Ju", fr: "Vi", sa: "Sa"}, - monthLabels: {1: "Ene", 2: "Feb", 3: "Mar", 4: "Abr", 5: "May", 6: "Jun", 7: "Jul", 8: "Ago", 9: "Sep", 10: "Oct", 11: "Nov", 12: "Dic"}, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Hoy", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "hu": { - dayLabels: {su: "Vas", mo: "Hét", tu: "Kedd", we: "Sze", th: "Csü", fr: "Pén", sa: "Szo"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Már", 4: "Ápr", 5: "Máj", 6: "Jún", 7: "Júl", 8: "Aug", 9: "Szep", 10: "Okt", 11: "Nov", 12: "Dec" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "Ma", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "sv": { - dayLabels: {su: "Sön", mo: "Mån", tu: "Tis", we: "Ons", th: "Tor", fr: "Fre", sa: "Lör"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Maj", 6: "Jun", 7: "Jul", 8: "Aug", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Dec" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "Idag", - firstDayOfWeek: "mo", - sunHighlight: false - }, - "nl": { - dayLabels: {su: "Zon", mo: "Maa", tu: "Din", we: "Woe", th: "Don", fr: "Vri", sa: "Zat"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Mei", 6: "Jun", 7: "Jul", 8: "Aug", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Dec" }, - dateFormat: "dd-mm-yyyy", - todayBtnTxt: "Vandaag", - firstDayOfWeek: "mo", - sunHighlight: false - }, - "ru": { - dayLabels: {su: "Вс", mo: "Пн", tu: "Вт", we: "Ср", th: "Чт", fr: "Пт", sa: "Сб"}, - monthLabels: { 1: "Янв", 2: "Фев", 3: "Март", 4: "Апр", 5: "Май", 6: "Июнь", 7: "Июль", 8: "Авг", 9: "Сент", 10: "Окт", 11: "Ноя", 12: "Дек" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Сегодня", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "uk": { - dayLabels: {su: "Нд", mo: "Пн", tu: "Вт", we: "Ср", th: "Чт", fr: "Пт", sa: "Сб"}, - monthLabels: { 1: "Січ", 2: "Лют", 3: "Бер", 4: "Кві", 5: "Тра", 6: "Чер", 7: "Лип", 8: "Сер", 9: "Вер", 10: "Жов", 11: "Лис", 12: "Гру" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Сьогодні", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "no": { - dayLabels: {su: "Søn", mo: "Man", tu: "Tir", we: "Ons", th: "Tor", fr: "Fre", sa: "Lør"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Mai", 6: "Jun", 7: "Jul", 8: "Aug", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Des" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "I dag", - firstDayOfWeek: "mo", - sunHighlight: false - }, - "tr": { - dayLabels: {su: "Paz", mo: "Pzt", tu: "Sal", we: "Çar", th: "Per", fr: "Cum", sa: "Cmt"}, - monthLabels: { 1: "Oca", 2: "Şub", 3: "Mar", 4: "Nis", 5: "May", 6: "Haz", 7: "Tem", 8: "Ağu", 9: "Eyl", 10: "Eki", 11: "Kas", 12: "Ara" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Bugün", - firstDayOfWeek: "mo", - sunHighlight: false - }, - "pt-br": { - dayLabels: {su: "Dom", mo: "Seg", tu: "Ter", we: "Qua", th: "Qui", fr: "Sex", sa: "Sab"}, - monthLabels: { 1: "Jan", 2: "Fev", 3: "Mar", 4: "Abr", 5: "Mai", 6: "Jun", 7: "Jul", 8: "Ago", 9: "Set", 10: "Out", 11: "Nov", 12: "Dez" }, - dateFormat: "dd/mm/yyyy", - todayBtnTxt: "Hoje", - firstDayOfWeek: "su", - sunHighlight: true - }, - "de": { - dayLabels: {su: "So", mo: "Mo", tu: "Di", we: "Mi", th: "Do", fr: "Fr", sa: "Sa"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mär", 4: "Apr", 5: "Mai", 6: "Jun", 7: "Jul", 8: "Aug", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Dez" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Heute", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "it": { - dayLabels: { su: "Dom", mo: "Lun", tu: "Mar", we: "Mer", th: "Gio", fr: "Ven", sa: "Sab" }, - monthLabels: { 1: "Gen", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Mag", 6: "Giu", 7: "Lug", 8: "Ago", 9: "Set", 10: "Ott", 11: "Nov", 12: "Dic" }, - dateFormat: "dd/mm/yyyy", - todayBtnTxt: "Oggi", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "it-ch": { - dayLabels: { su: "Dom", mo: "Lun", tu: "Mar", we: "Mer", th: "Gio", fr: "Ven", sa: "Sab" }, - monthLabels: { 1: "Gen", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Mag", 6: "Giu", 7: "Lug", 8: "Ago", 9: "Set", 10: "Ott", 11: "Nov", 12: "Dic" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Oggi", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "pl": { - dayLabels: { su: "Nie", mo: "Pon", tu: "Wto", we: "Śro", th: "Czw", fr: "Pią", sa: "Sob" }, - monthLabels: { 1: "Sty", 2: "Lut", 3: "Mar", 4: "Kwi", 5: "Maj", 6: "Cze", 7: "Lip", 8: "Sie", 9: "Wrz", 10: "Paź", 11: "Lis", 12: "Gru" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "Dzisiaj", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "my": { - dayLabels: {su: "တနင်္ဂနွေ", mo: "တနင်္လာ", tu: "အင်္ဂါ", we: "ဗုဒ္ဓဟူး", th: "ကြသပတေး", fr: "သောကြာ", sa: "စနေ"}, - monthLabels: { 1: "ဇန်နဝါရီ", 2: "ဖေဖော်ဝါရီ", 3: "မတ်", 4: "ဧပြီ", 5: "မေ", 6: "ဇွန်", 7: "ဇူလိုင်", 8: "ဩဂုတ်", 9: "စက်တင်ဘာ", 10: "အောက်တိုဘာ", 11: "နိုဝင်ဘာ", 12: "ဒီဇင်ဘာ" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "ယနေ့", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "sk": { - dayLabels: { su: "Ne", mo: "Po", tu: "Ut", we: "St", th: "Št", fr: "Pi", sa: "So" }, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Máj", 6: "Jún", 7: "Júl", 8: "Aug", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Dec" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Dnes", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "sl": { - dayLabels: { su: "Ned", mo: "Pon", tu: "Tor", we: "Sre", th: "Čet", fr: "Pet", sa: "Sob" }, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Maj", 6: "Jun", 7: "Jul", 8: "Avg", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Dec" }, - dateFormat: "dd. mm. yyyy", - todayBtnTxt: "Danes", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "zh-cn": { - dayLabels: {su: "日", mo: "一", tu: "二", we: "三", th: "四", fr: "五", sa: "六"}, - monthLabels: { 1: "1月", 2: "2月", 3: "3月", 4: "4月", 5: "5月", 6: "6月", 7: "7月", 8: "8月", 9: "9月", 10: "10月", 11: "11月", 12: "12月" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "今天", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "ro": { - dayLabels: {su: "du", mo: "lu", tu: "ma", we: "mi", th: "jo", fr: "vi", sa: "sa"}, - monthLabels: { 1: "ian", 2: "feb", 3: "mart", 4: "apr", 5: "mai", 6: "iun", 7: "iul", 8: "aug", 9: "sept", 10: "oct", 11: "nov", 12: "dec" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Astăzi", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "ca": { - dayLabels: {su: "dg", mo: "dl", tu: "dt", we: "dc", th: "dj", fr: "dv", sa: "ds"}, - monthLabels: {1: "Gen", 2: "Febr", 3: "Març", 4: "Abr", 5: "Maig", 6: "Juny", 7: "Jul", 8: "Ag", 9: "Set", 10: "Oct", 11: "Nov", 12: "Des"}, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Avui", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "id": { - dayLabels: {su: "Min", mo: "Sen", tu: "Sel", we: "Rab", th: "Kam", fr: "Jum", sa: "Sab"}, - monthLabels: {1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Mei", 6: "Jun", 7: "Jul", 8: "Ags", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Des"}, - dateFormat: "dd-mm-yyyy", - todayBtnTxt: "Hari ini", - firstDayOfWeek: "su", - sunHighlight: true - }, - "en-au": { - dayLabels: {su: "Sun", mo: "Mon", tu: "Tue", we: "Wed", th: "Thu", fr: "Fri", sa: "Sat"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "May", 6: "Jun", 7: "Jul", 8: "Aug", 9: "Sep", 10: "Oct", 11: "Nov", 12: "Dec" }, - dateFormat: "dd/mm/yyyy", - todayBtnTxt: "Today", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "am-et": { - dayLabels: {su: "እሑድ", mo: "ሰኞ", tu: "ማክሰኞ", we: "ረቡዕ", th: "ሐሙስ", fr: "ዓርብ", sa: "ቅዳሜ"}, - monthLabels: { 1: "ጃንዩ", 2: "ፌብሩ", 3: "ማርች", 4: "ኤፕረ", 5: "ሜይ", 6: "ጁን", 7: "ጁላይ", 8: "ኦገስ", 9: "ሴፕቴ", 10: "ኦክተ", 11: "ኖቬም", 12: "ዲሴም" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "ዛሬ", - firstDayOfWeek: "mo", - sunHighlight: true - } - }; - - getLocaleOptions(locale: string): IMyOptions { - if (locale && this.locales.hasOwnProperty(locale)) { - // User given locale - return this.locales[locale]; - } - // Default: en - return this.locales["en"]; - } -} diff --git a/portal-2/src/app/utils/my-date-picker/services/my-date-picker.util.service.ts b/portal-2/src/app/utils/my-date-picker/services/my-date-picker.util.service.ts deleted file mode 100644 index 98b51bca..00000000 --- a/portal-2/src/app/utils/my-date-picker/services/my-date-picker.util.service.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { Injectable } from "@angular/core"; -import { IMyDate } from "../interfaces/my-date.interface"; -import { IMyDateRange } from "../interfaces/my-date-range.interface"; -import { IMyMonth } from "../interfaces/my-month.interface"; -import { IMyMonthLabels } from "../interfaces/my-month-labels.interface"; - -@Injectable() -export class UtilService { - isDateValid(dateStr: string, dateFormat: string, minYear: number, maxYear: number, disableUntil: IMyDate, disableSince: IMyDate, disableWeekends: boolean, disableDays: Array, disableDateRange: IMyDateRange, monthLabels: IMyMonthLabels, enableDays: Array): IMyDate { - let returnDate: IMyDate = {day: 0, month: 0, year: 0}; - let daysInMonth: Array = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - let isMonthStr: boolean = this.getDatePartIndex(dateFormat, "mmm") !== -1; - - if (dateStr.length !== dateFormat.length) { - return returnDate; - } - - let separator: string = this.getDateFormatSeparator(dateFormat); - - let parts: Array = dateStr.split(separator); - if (parts.length !== 3) { - return returnDate; - } - - let day: number = this.parseDatePartNumber(dateFormat, dateStr, "dd"); - let month: number = isMonthStr ? this.parseDatePartMonthName(dateFormat, dateStr, "mmm", monthLabels) : this.parseDatePartNumber(dateFormat, dateStr, "mm"); - let year: number = this.parseDatePartNumber(dateFormat, dateStr, "yyyy"); - - if (day !== -1 && month !== -1 && year !== -1) { - if (year < minYear || year > maxYear || month < 1 || month > 12) { - return returnDate; - } - - let date: IMyDate = {year: year, month: month, day: day}; - - if (this.isDisabledDay(date, disableUntil, disableSince, disableWeekends, disableDays, disableDateRange, enableDays)) { - return returnDate; - } - - if (year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0)) { - daysInMonth[1] = 29; - } - - if (day < 1 || day > daysInMonth[month - 1]) { - return returnDate; - } - - // Valid date - return date; - } - return returnDate; - } - - getDateFormatSeparator(dateFormat: string): string { - return dateFormat.replace(/[dmy]/g, "")[0]; - } - - isMonthLabelValid(monthLabel: string, monthLabels: IMyMonthLabels): number { - for (let key = 1; key <= 12; key++) { - if (monthLabel.toLowerCase() === monthLabels[key].toLowerCase()) { - return key; - } - } - return -1; - } - - isYearLabelValid(yearLabel: number, minYear: number, maxYear: number): number { - if (yearLabel >= minYear && yearLabel <= maxYear) { - return yearLabel; - } - return -1; - } - - parseDatePartNumber(dateFormat: string, dateString: string, datePart: string): number { - let pos: number = this.getDatePartIndex(dateFormat, datePart); - if (pos !== -1) { - let value: string = dateString.substring(pos, pos + datePart.length); - if (!/^\d+$/.test(value)) { - return -1; - } - return parseInt(value); - } - return -1; - } - - parseDatePartMonthName(dateFormat: string, dateString: string, datePart: string, monthLabels: IMyMonthLabels): number { - let pos: number = this.getDatePartIndex(dateFormat, datePart); - if (pos !== -1) { - return this.isMonthLabelValid(dateString.substring(pos, pos + datePart.length), monthLabels); - } - return -1; - } - - getDatePartIndex(dateFormat: string, datePart: string): number { - return dateFormat.indexOf(datePart); - } - - parseDefaultMonth(monthString: string): IMyMonth { - let month: IMyMonth = {monthTxt: "", monthNbr: 0, year: 0}; - if (monthString !== "") { - let split = monthString.split(monthString.match(/[^0-9]/)[0]); - month.monthNbr = split[0].length === 2 ? parseInt(split[0]) : parseInt(split[1]); - month.year = split[0].length === 2 ? parseInt(split[1]) : parseInt(split[0]); - } - return month; - } - - isDisabledDay(date: IMyDate, disableUntil: IMyDate, disableSince: IMyDate, disableWeekends: boolean, disableDays: Array, disableDateRange: IMyDateRange, enableDays: Array): boolean { - for (let obj of enableDays) { - if (obj.year === date.year && obj.month === date.month && obj.day === date.day) { - return false; - } - } - - let dateMs: number = this.getTimeInMilliseconds(date); - if (this.isInitializedDate(disableUntil) && dateMs <= this.getTimeInMilliseconds(disableUntil)) { - return true; - } - - if (this.isInitializedDate(disableSince) && dateMs >= this.getTimeInMilliseconds(disableSince)) { - return true; - } - - if (disableWeekends) { - let dayNbr = this.getDayNumber(date); - if (dayNbr === 0 || dayNbr === 6) { - return true; - } - } - - for (let obj of disableDays) { - if (obj.year === date.year && obj.month === date.month && obj.day === date.day) { - return true; - } - } - - if (this.isInitializedDate(disableDateRange.begin) && this.isInitializedDate(disableDateRange.end) && dateMs >= this.getTimeInMilliseconds(disableDateRange.begin) && dateMs <= this.getTimeInMilliseconds(disableDateRange.end)) { - return true; - } - return false; - } - - getWeekNumber(date: IMyDate): number { - let d: Date = new Date(date.year, date.month - 1, date.day, 0, 0, 0, 0); - d.setDate(d.getDate() + (d.getDay() === 0 ? -3 : 4 - d.getDay())); - return Math.round(((d.getTime() - new Date(d.getFullYear(), 0, 4).getTime()) / 86400000) / 7) + 1; - } - - isMonthDisabledByDisableUntil(date: IMyDate, disableUntil: IMyDate): boolean { - return this.isInitializedDate(disableUntil) && this.getTimeInMilliseconds(date) <= this.getTimeInMilliseconds(disableUntil); - } - - isMonthDisabledByDisableSince(date: IMyDate, disableSince: IMyDate): boolean { - return this.isInitializedDate(disableSince) && this.getTimeInMilliseconds(date) >= this.getTimeInMilliseconds(disableSince); - } - - isInitializedDate(date: IMyDate): boolean { - return date.year !== 0 && date.month !== 0 && date.day !== 0; - } - - getTimeInMilliseconds(date: IMyDate): number { - return new Date(date.year, date.month - 1, date.day, 0, 0, 0, 0).getTime(); - } - - getDayNumber(date: IMyDate): number { - let d: Date = new Date(date.year, date.month - 1, date.day, 0, 0, 0, 0); - return d.getDay(); - } -} \ No newline at end of file diff --git a/portal-2/src/app/utils/number-utils.class.ts b/portal-2/src/app/utils/number-utils.class.ts deleted file mode 100644 index bc6e25ce..00000000 --- a/portal-2/src/app/utils/number-utils.class.ts +++ /dev/null @@ -1,31 +0,0 @@ - -export class NumberUtils{ - - - - public static roundNumber(num: number):any { - console.log("Trying to round number: "+ num); - var roundNum = null; - if(num >= 1000000){ - num=num/1000000; - num= Math.round(num); - roundNum = { "number": num, "size": "mi" }; - }else if( num >= 10000){ - num=num/1000; - num= Math.round(num); - roundNum = { "number": num, "size": "K" }; - }else if (num >= 100) { - num=num/100; - num= Math.round(num); - num=num*100; - roundNum = { "number": num, "size": "" }; - }else{ - roundNum = { "number": num, "size": "" }; - } - console.log("Rounded number: "+ roundNum.number + " "+ roundNum.size); - return roundNum; - } - - - -} diff --git a/portal-2/src/app/utils/paging.module.ts b/portal-2/src/app/utils/paging.module.ts deleted file mode 100644 index dbf53c87..00000000 --- a/portal-2/src/app/utils/paging.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import {pagingFormatterNoLoad} from './pagingFormatterNoLoad.component'; - -import {PagingFormatter} from './pagingFormatter.component'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule, RouterModule - ], - declarations: [ - pagingFormatterNoLoad, - PagingFormatter, - - - ], - exports: [ - pagingFormatterNoLoad, - PagingFormatter, - - - ] -}) -export class PagingModule { } diff --git a/portal-2/src/app/utils/pagingFormatter.component.ts b/portal-2/src/app/utils/pagingFormatter.component.ts deleted file mode 100644 index f199aaa9..00000000 --- a/portal-2/src/app/utils/pagingFormatter.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {Router} from '@angular/router'; -import {DomSanitizer} from '@angular/platform-browser'; -//Usage Example -import {RouterHelper} from './routerHelper.class'; - -@Component({ - selector: 'paging', - template: ` - - - - ` -}) - -export class PagingFormatter { - @Input() currentPage: number = 1; - @Input() size: number=10; - @Input() totalResults: number = 10; - @Input() baseUrl:string=""; - @Input() parameterNames:string[]; - @Input() parameterValues:string[]; - - public routerHelper:RouterHelper = new RouterHelper(); - - constructor ( private _router: Router, private sanitizer:DomSanitizer) { - } - - ngOnInit() { - - } - getTotalPages(){ - var i:number =parseInt(''+(this.totalResults/this.size)); - return (((this.totalResults/this.size) == i )? i :(i+1)) ; - } - - // onPage(pageNum: number){ - // return this.sanitizer.bypassSecurityTrustUrl( this.baseUrl+((this.baseUrl.indexOf("?") > -1 )?'&':'?')+ "page=" + (pageNum)); - // - // } -} diff --git a/portal-2/src/app/utils/pagingFormatterNoLoad.component.ts b/portal-2/src/app/utils/pagingFormatterNoLoad.component.ts deleted file mode 100644 index 2ae49f49..00000000 --- a/portal-2/src/app/utils/pagingFormatterNoLoad.component.ts +++ /dev/null @@ -1,76 +0,0 @@ -import {Component, Input, Output, EventEmitter} from '@angular/core'; - - -//Usage Example - -@Component({ - selector: 'paging-no-load', - template: ` - - - ` -}) - -export class pagingFormatterNoLoad { - @Input() public currentPage: number = 1; - // @Input() public navigateTo: string; - @Input() public term: string=''; - @Input() public size: number=10; - @Input() public totalResults: number = 10; - // @Input() public params; - - @Output() pageChange = new EventEmitter(); - - constructor () { - } - - ngOnInit() { - console.info("In paging -- CurrentPage:"+this.currentPage+" "+"total Pages = "+this.getTotalPages() +" Results num:"+this.totalResults); - } - getTotalPages(){ - var i= this.totalResults/this.size; - var integerI=parseInt(''+i); - return parseInt(''+((i==integerI)?i:i+1)); - } - onPrev(){ - this.currentPage=this.currentPage-1; - this.pageChange.emit({ - value: this.currentPage - }); - - } - - onNext(){ - - this.currentPage=this.currentPage+1; - this.pageChange.emit({ - value: this.currentPage - }); - } - onPage(pageNum: number){ - - this.currentPage=pageNum; - this.pageChange.emit({ - value: this.currentPage - }); - } -} diff --git a/portal-2/src/app/utils/pipes/claimsDatatable.pipe.ts b/portal-2/src/app/utils/pipes/claimsDatatable.pipe.ts deleted file mode 100644 index d05ca549..00000000 --- a/portal-2/src/app/utils/pipes/claimsDatatable.pipe.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Pipe, PipeTransform} from '@angular/core' - - -@Pipe({ - name: 'claimsDatatable' -}) -export class ClaimsDatatablePipe implements PipeTransform { - - transform(array: any[], args: any[]): any { - let query: string = args[0]; - let counter:any = args[1]; - let active: any = args[2]; - - active.page = 1; - - if (query) { - var result = array.filter(row=>this.filterAll(row, query)); - counter.count = result.length; - return result; - } - return array; - } - - filterAll(row: any, query: string) { - if(row.userMail.indexOf(query) > -1) { - return true; - } - if(row.targetType != 'project' && row.target.title.indexOf(query) > -1) { - return true; - } - if(row.sourceType != 'project' && row.source.title.indexOf(query) > -1) { - return true; - } - if(row.date.indexOf(query) > -1) { - return true; - } - - if(row.curatedBy != null && row.curatedBy.indexOf(query) > -1) { - return true; - } - - if(row.curationDate != null && row.curationDate.indexOf(query) > -1) { - return true; - } - - return false; - } -} diff --git a/portal-2/src/app/utils/pipes/contentProvidersDatatable.pipe.ts b/portal-2/src/app/utils/pipes/contentProvidersDatatable.pipe.ts deleted file mode 100644 index 2484e7aa..00000000 --- a/portal-2/src/app/utils/pipes/contentProvidersDatatable.pipe.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { Pipe, PipeTransform} from '@angular/core'; -import { Filter, Value} from '../../searchPages/searchUtils/searchHelperClasses.class'; -import { SearchUtilsClass } from '../../searchPages/searchUtils/searchUtils.class'; -import { ErrorCodes} from '../properties/openaireProperties'; - -@Pipe({ - name: 'contentProvidersDatatable' -}) -export class ContentProvidersDatatablePipe implements PipeTransform { - - transform(array: any[], args: any[]): any { - if(array.length > 0) { - let searchUtils: SearchUtilsClass = args[0]; - let filters:Filter[] = args[1]; - - - var errorCodes:ErrorCodes = new ErrorCodes(); - searchUtils.status = errorCodes.LOADING; - - var result = array.filter(row=>this.filterAll(row, searchUtils.keyword.toLowerCase(), filters)); - - let oldTotal = searchUtils.totalResults; - - searchUtils.totalResults = result.length; - - var errorCodes:ErrorCodes = new ErrorCodes(); - searchUtils.status = errorCodes.DONE; - if(searchUtils.totalResults == 0 ){ - searchUtils.status = errorCodes.NONE; - } - - if(oldTotal != searchUtils.totalResults) { - args[3].detectChanges(); - } - return result; - } - return []; - } - - filterAll(row: any, query: string, filters:Filter[]) { - let returnValue: boolean = false; - - if(query) { - if(row.title.name.toLowerCase().indexOf(query) > -1) { - returnValue = true; - } - - if(row.type.toLowerCase().indexOf(query) > -1) { - returnValue = true; - } - - if(row.countries && row.countries.length > 0) { - for(let country of row.countries) { - if(country.toLowerCase().indexOf(query) > -1) { - returnValue = true; - break; - } - } - } - - if(row.compatibility && row.compatibility.toLowerCase().indexOf(query) > -1) { - returnValue = true; - } - - if(row.organizations && row.organizations.length > 0) { - for(let organization of row.organizations) { - if(organization.name.toLowerCase().indexOf(query) > -1) { - returnValue = true; - break; - } - } - } - - if(!returnValue) { - return false; - } - } - - for (let filter of filters){ - if(filter.countSelectedValues > 0){ - for (let value of filter.values){ - if(value.selected == true){ - - // make it generic in future commit - let field:string = ""; - if(filter.title == "Type") { - field = "type"; - } else if(filter.title == "Compatibility Level") { - field = "compatibility"; - } - - if(row[field] == value.name) { - returnValue = true; - if(filter.filterOperator == "or") { - break; - } - } else { - if(filter.filterOperator == "and") { - return false; - } - returnValue = false; - } - } - } - if(!returnValue) { - return false; - } - } - } - - return true; - } -} diff --git a/portal-2/src/app/utils/pipes/safeHTML.pipe.ts b/portal-2/src/app/utils/pipes/safeHTML.pipe.ts deleted file mode 100644 index 5912a07c..00000000 --- a/portal-2/src/app/utils/pipes/safeHTML.pipe.ts +++ /dev/null @@ -1,13 +0,0 @@ -//our root app component -import { Pipe, PipeTransform} from '@angular/core' - -import { DomSanitizer } from '@angular/platform-browser' - - -@Pipe({ name: 'safeHtml'}) -export class SafeHtmlPipe implements PipeTransform { - constructor(private sanitized: DomSanitizer) {} - transform(value) { - return this.sanitized.bypassSecurityTrustHtml(value); - } -} diff --git a/portal-2/src/app/utils/piwik/piwik.service.ts b/portal-2/src/app/utils/piwik/piwik.service.ts deleted file mode 100644 index c3c17746..00000000 --- a/portal-2/src/app/utils/piwik/piwik.service.ts +++ /dev/null @@ -1,70 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response, Headers, RequestOptions, URLSearchParams} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import {Location} from '@angular/common'; - -import {OpenaireProperties} from '../properties/openaireProperties'; -import {StringUtils} from '../string-utils.class'; - - -@Injectable() -export class PiwikService { - private piwikbaseUrl:string = ""; - constructor(private http: Http, private location: Location ) {} - - trackView (title):any { - - var ua = this.getUserAgent(); - var referrer = this.getReferrer(); - if(typeof location !== 'undefined'){ - var url = OpenaireProperties.getPiwikBaseURL()+"&rec=1&url="+StringUtils.URIEncode(location.href)+"&action_name="+StringUtils.URIEncode(title)+ - ((ua != null && ua.length > 0)?('&ua='+StringUtils.URIEncode(ua)):'')+ - ((referrer != null && referrer.length > 0)?('&urlref='+StringUtils.URIEncode(referrer)):''); - console.log("Piwik - View: " + url); - - return this.http.get( url); - // .do(request => console.info("Piwik request completed" )); - - } - } - trackDownload (downloadURL):any { - var ua = this.getUserAgent(); - var referrer = this.getReferrer(); - var url = OpenaireProperties.getPiwikBaseURL()+"&rec=1&url="+StringUtils.URIEncode(downloadURL)+"&download="+StringUtils.URIEncode(downloadURL)+ - ((ua != null && ua.length > 0)?('&ua='+StringUtils.URIEncode(ua)):'')+ - ((referrer != null && referrer.length > 0)?('&urlref='+StringUtils.URIEncode(referrer)):''); - console.log("Piwik - trackDownload: "+url); - - return this.http.get( url) - .do(request => console.info("Piwik request completed" )); - - } - private getUserAgent(){ - if (typeof navigator !== 'undefined') { - console.log("navigator.userAgent:" + navigator.userAgent); - return navigator.userAgent; - - }else{ - return null; - } - } - private getReferrer(){ - var referrer = ""; - if (typeof document !== 'undefined') { - console.log("document.referrer:" + document.referrer); - referrer = document.referrer; - - } - if((referrer == null || referrer.length == 0)&&typeof localStorage !== 'undefined'){ - - referrer =localStorage.getItem('previousRoute'); - } - return referrer; - } - parse(data:any){ - } - -} diff --git a/portal-2/src/app/utils/piwik/piwikService.module.ts b/portal-2/src/app/utils/piwik/piwikService.module.ts deleted file mode 100644 index 0cfe47e3..00000000 --- a/portal-2/src/app/utils/piwik/piwikService.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {PiwikService} from './piwik.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule, - - ], - declarations: [ - - ], - providers: [ PiwikService ], - exports: [ - - ] -}) -export class PiwikServiceModule{ } diff --git a/portal-2/src/app/utils/piwik/previousRouteRecorder.guard.ts b/portal-2/src/app/utils/piwik/previousRouteRecorder.guard.ts deleted file mode 100644 index ae62b524..00000000 --- a/portal-2/src/app/utils/piwik/previousRouteRecorder.guard.ts +++ /dev/null @@ -1,17 +0,0 @@ - -import { Injectable } from '@angular/core'; -import { CanDeactivate, Router} from '@angular/router'; -import {Observable} from 'rxjs/Observable'; - -@Injectable() // do not forget to register this class as a provider -export class PreviousRouteRecorder implements CanDeactivate { - constructor(private router: Router) { - } - canDeactivate(component: any): Observable | boolean { - if (typeof localStorage !== 'undefined') { - console.log("In PreviousRouteRecorder : "+this.router.url ); - localStorage.setItem('previousRoute', this.router.url); - } - return true; - } -} diff --git a/portal-2/src/app/utils/properties/openaireProperties.ts b/portal-2/src/app/utils/properties/openaireProperties.ts deleted file mode 100644 index e4c1bc94..00000000 --- a/portal-2/src/app/utils/properties/openaireProperties.ts +++ /dev/null @@ -1,389 +0,0 @@ -export class OpenaireProperties { - private static productionMode:boolean = false; - - //base url - private static baseLink = "https://demo.openaire.eu"; - - //landing Pages - private static baseSearchLink="/"; - private static searchLinkToPublication = "search/publication?articleId="; - private static searchLinkToProject = "search/project?projectId="; - private static searchLinkToDataProvider = "search/dataprovider?datasourceId="; - private static searchLinkToDataset = "search/dataset?datasetId="; - private static searchLinkToOrganization = "search/organization?organizationId="; - //Search pages - private static searchLinkToPublications = "search/find/publications"; - private static searchLinkToDataProviders = "search/find/dataproviders"; - private static searchLinkToProjects = "search/find/projects"; - private static searchLinkToDatasets = "search/find/datasets"; - private static searchLinkToSoftware = "search/find/software"; - private static searchLinkToOrganizations = "search/find/organizations"; - private static searchLinkToPeople = "search/find/people"; - public static searchLinkToCompatibleDataProviders = "search/content-providers"; - public static searchLinkToCompatibleDataProvidersTable = "search/content-providers-table"; - public static searchLinkToEntityRegistriesDataProviders = "search/entity-registries"; - public static searchLinkToEntityRegistriesDataProvidersTable = "search/entity-registries-table"; - public static searchLinkToJournals = "search/journals"; - public static searchLinkToJournalsTable = "search/journals-table"; - - //Advanced Search for pages - public static searchLinkToAdvancedPublications = "search/advanced/publications"; - public static searchLinkToAdvancedProjects = "search/advanced/projects"; - public static searchLinkToAdvancedDatasets = "search/advanced/datasets"; - public static searchLinkToAdvancedSoftware = "search/advanced/software"; - public static searchLinkToAdvancedDataProviders = "search/advanced/dataproviders"; - public static searchLinkToAdvancedOrganizations = "search/advanced/organizations"; - public static searchLinkToAdvancedPeople = "search/advanced/people"; - - - private static metricsAPIURL = "https://beta.services.openaire.eu/usagestats/"; - private static framesAPIURL = "https://beta.openaire.eu/stats3/"; - - private static loginAPIURL = "http://rudie.di.uoa.gr:8080/dnet%2Dopenaire%2Dusers%2D1.0.0%2DSNAPSHOT/api/users/authenticates" - //"http://scoobydoo.di.uoa.gr:8080/uoa-user-management-1.0.0-SNAPSHOT/api/users/authenticates"; - private static loginAPIURL_pm = "https://beta.services.openaire.eu/uoa-user-management/api/users/authenticates"; - - private static claimsAPIURL = "http://scoobydoo.di.uoa.gr:8080/dnet-claims-service-2.0.0-SNAPSHOT/rest/claimsService/"; - private static claimsAPIURL_pm = "https://beta.services.openaire.eu/claims/rest/claimsService/"; - - private static searchAPIURLLAst_pm = "https://beta.services.openaire.eu/search/v2/api/"; - private static searchAPIURLLAst = "https://beta.services.openaire.eu/search/v2/api/"; -// private static searchAPIURLLAst = "http://scoobydoo.di.uoa.gr:8080/dnet-functionality-services-2.0.0-SNAPSHOT/rest/v2/api/"; - - private static searchResourcesAPIURL_pm = "https://beta.services.openaire.eu/search/v2/api/resources"; - private static searchResourcesAPIURL = "https://beta.services.openaire.eu/search/v2/api/resources"; - // private static searchResourcesAPIURL = "http://scoobydoo.di.uoa.gr:8080/dnet-functionality-services-2.0.0-SNAPSHOT/rest/v2/api/resources"; - - - private static csvAPIURL_pm = "https://beta.services.openaire.eu/search/v2/api/";//publications?format=csv - // private static csvAPIURL = "http://rudie.di.uoa.gr:8080/dnet-functionality-services-2.0.0-SNAPSHOT/rest/v2/api/";//publications?format=csv - - private static csvAPIURL = "https://beta.services.openaire.eu/search/v2/api/";//publications?format=csv - - private static searchCrossrefAPIURL = "https://api.crossref.org/works"; - // private static searchDataciteAPIURL = "https://search.datacite.org/api"; - private static searchDataciteAPIURL = "https://api.datacite.org/works"; - - private static searchOrcidURL = "https://pub.orcid.org/"; - - // Identifiers - private static pmidURL = "http://www.ncbi.nlm.nih.gov/pubmed/"; - private static doiURL = "https://dx.doi.org/"; - private static cordisURL = "http://cordis.europa.eu/projects/"; - private static pmcURL = "http://europepmc.org/articles/"; - private static handleURL = "http://hdl.handle.net/"; - - // Zenodo's url - private static zenodo = "https://zenodo.org/"; - // Open access link - private static openAccess = "https://www.openaire.eu/support/faq#article-id-234"; - // Open access repository link - private static openAccessRepo = "https://www.openaire.eu/support/faq#article-id-310"; - // FP7 link - private static fp7Guidlines = "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme"; - // H2020 link - private static h2020Guidlines = "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020"; - // ERC Guidlines - private static ercGuidlines = "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf"; - // helpdesk link - private static helpdesk = "https://www.openaire.eu/support/helpdesk"; - - private static uploadService_pm = "https://demo.openaire.eu/upload"; - private static uploadService = "http://scoobydoo.di.uoa.gr:8000/upload"; - - private static vocabulariesAPI ="https://beta.services.openaire.eu/provision/mvc/vocabularies/"; - - private static piwikBaseUrl =" https://analytics.openaire.eu/piwik.php?idsite=6"; - private static enablePiwikTrack:boolean = false; - - private static loginUrl ="http://mpagasas.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/openid_connect_login"; - private static loginUrl_pm ="https://beta.services.openaire.eu/uoa-user-management/openid_connect_login"; - - private static logoutUrl ="https://aai.openminted.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo="; - private static logoutUrl_pm ="https://aai.openminted.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo="; - - private static cookieDomain =".di.uoa.gr"; - private static cookieDomain_pm =".openaire.eu"; - - private static feedbackmail ="openaire.test@gmail.com"; - - private static helperPageUrl ="http://scoobydoo.di.uoa.gr:16000/api/page/route"; - private static enableHelper:boolean = false; - - public static getBaseLink():string{ - return this.baseLink; - } - - //landing Pages' getters - public static getsearchLinkToPublication():string{ - return this.baseSearchLink + this.searchLinkToPublication; - } - public static getsearchLinkToDataset():string{ - return this.baseSearchLink + this.searchLinkToDataset; - } - public static getsearchLinkToProject():string{ - return this.baseSearchLink + this.searchLinkToProject; - } - - public static getsearchLinkToOrganization():string{ - return this.searchLinkToOrganization; - } - public static getsearchLinkToDataProvider():string{ - return this.searchLinkToDataProvider; - } - //searchPages - public static getLinkToSearchPublications():string{ - return this.baseSearchLink + this.searchLinkToPublications; - } - public static getLinkToSearchProjects():string{ - return this.baseSearchLink + this.searchLinkToProjects; - } - public static getLinkToSearchDataProviders():string{ - return this.baseSearchLink + this.searchLinkToDataProviders; - } - public static getLinkToSearchCompatibleDataProviders():string{ - return this.baseSearchLink + this.searchLinkToCompatibleDataProviders; - } - public static getLinkToSearchCompatibleDataProvidersTable():string{ - return this.baseSearchLink + this.searchLinkToCompatibleDataProvidersTable; - } - public static getLinkToSearchEntityRegistries():string{ - return this.baseSearchLink + this.searchLinkToEntityRegistriesDataProviders; - } - public static getLinkToSearchEntityRegistriesTable():string{ - return this.baseSearchLink + this.searchLinkToEntityRegistriesDataProvidersTable; - } - public static getLinkToSearchJournals():string{ - return this.baseSearchLink + this.searchLinkToJournals; - } - public static getLinkToSearchJournalsTable():string{ - return this.baseSearchLink + this.searchLinkToJournalsTable; - } - public static getLinkToSearchDatasets():string{ - return this.baseSearchLink + this.searchLinkToDatasets; - } - public static getLinkToSearchSoftware():string{ - return this.baseSearchLink + this.searchLinkToSoftware; - } - public static getLinkToSearchOrganizations():string{ - return this.baseSearchLink + this.searchLinkToOrganizations; - } - public static getLinkToSearchPeople():string{ - return this.baseSearchLink + this.searchLinkToPeople; - } - - //Advanced searchPages - public static getLinkToAdvancedSearchPublications():string{ - return this.baseSearchLink + this.searchLinkToAdvancedPublications; - } - public static getLinkToAdvancedSearchProjects():string{ - return this.baseSearchLink + this.searchLinkToAdvancedProjects; - } - public static getLinkToAdvancedSearchDataProviders():string{ - return this.baseSearchLink + this.searchLinkToAdvancedDataProviders; - } - public static getLinkToAdvancedSearchDatasets():string{ - return this.baseSearchLink + this.searchLinkToAdvancedDatasets; - } - public static getLinkToAdvancedSearchSoftware():string{ - return this.baseSearchLink + this.searchLinkToAdvancedSoftware; - } - public static getLinkToAdvancedSearchOrganizations():string{ - return this.baseSearchLink + this.searchLinkToAdvancedOrganizations; - } - public static getLinkToAdvancedSearchPeople():string{ - return this.baseSearchLink + this.searchLinkToAdvancedPeople; - } - - // Services - APIs' getters - // public static getSearchAPIURL():string{ - // return this.searchAPIURL; - // } - // Services - APIs' getters - public static getCsvAPIURL(): string { - if(this.productionMode){ - return this.csvAPIURL_pm; - }else{ - return this.csvAPIURL; - } - // return this.csvAPIURL; - } - - public static getFramesAPIURL(): string { - return this.framesAPIURL; - } - - public static getMetricsAPIURL(): string { - return this.metricsAPIURL; - } - - public static getLoginAPIURL(): string { - if(this.productionMode){ - return this.loginAPIURL_pm; - }else{ - return this.loginAPIURL; - } - // return this.loginAPIURL; - } - - public static getSearchAPIURLLast():string{ - if(this.productionMode){ - return this.searchAPIURLLAst_pm; - }else{ - return this.searchAPIURLLAst; - } - // return this.searchAPIURLLAst; - } - //query using full query: - // - public static getSearchResourcesAPIURL():string{ - if(this.productionMode){ - return this.searchResourcesAPIURL_pm; - }else{ - return this.searchResourcesAPIURL; - } - // return this.searchResourcesAPIURL; - } - public static getSearchAPIURLForEntity(entityType:string):string{ - var suffix = ""; - if(entityType == "project"){ - suffix="projects/"; - }else if(entityType == "publication"){ - suffix="publications/"; - }else if(entityType == "dataset"){ - suffix="datasets/"; - } else if(entityType == "software"){ - suffix="software/"; - }else if(entityType == "organization"){ - suffix="organizations/"; - }else if(entityType == "dataprovider"){ - suffix="datasources/"; - }else if(entityType == "person"){ - suffix="people/"; - } - return (this.productionMode?this.searchAPIURLLAst_pm:this.searchAPIURLLAst) + suffix; - } - - public static getClaimsAPIURL():string{ - if(this.productionMode){ - return this.claimsAPIURL_pm; - }else{ - return this.claimsAPIURL; - } - } - public static getSearchCrossrefAPIURL():string{ - return this.searchCrossrefAPIURL; - } - public static getSearchDataciteAPIURL():string{ - return this.searchDataciteAPIURL; - } - public static getSearchOrcidURL():string{ - return this.searchOrcidURL; - } - - // Identifiers' getters - public static getPmidURL():string{ - return this.pmidURL; - } - public static getDoiURL():string{ - return this.doiURL; - } - public static getCordisURL():string{ - return this.cordisURL; - } - public static getPmcURL():string{ - return this.pmcURL; - } - public static getHandleURL():string{ - return this.handleURL; - } - - // Zenodo's getter - public static getZenodoURL():string{ - return this.zenodo; - } - // Open access getter - public static getOpenAccess():string{ - return this.openAccess; - } - // Open access repository getter - public static getOpenAccessRepo():string{ - return this.openAccessRepo; - } - // FP7 link getter - public static getFP7Guidlines():string{ - return this.fp7Guidlines; - } - // H2020 link getter - public static getH2020Guidlines():string{ - return this.h2020Guidlines; - } - // ERC Guidlines getter - public static getERCGuidlines():string{ - return this.ercGuidlines; - } - // helpdesk link getter - public static getHelpdesk():string{ - return this.helpdesk; - } - - - //upload service for bulk claim - upload csv file - public static getUploadServiceUrl():string{ - if(this.productionMode){ - return this.uploadService_pm; - }else{ - return this.uploadService; - } - } - //vocabularies API - public static getVocabulariesAPI():string{ - return this.vocabulariesAPI; - } - public static getPiwikBaseURL():string{ - return this.piwikBaseUrl; - } - public static isPiwikTrackEnabled():boolean{ - return this.enablePiwikTrack; - } - public static getLoginURL():string{ - if(this.productionMode){ - return this.loginUrl_pm; - }else{ - return this.loginUrl; - } - } - public static getLogoutURL():string{ - if(this.productionMode){ - return this.logoutUrl_pm; - }else{ - return this.logoutUrl; - } - } - public static getCookieDomain():string{ - if(this.productionMode){ - return this.cookieDomain_pm; - }else{ - return this.cookieDomain; - } - } - public static getFeedbackMail():string{ - return this.feedbackmail; - } - public static getHelperPageUrl():string{ - return this.helperPageUrl; - } - public static isHelperEnabled():boolean{ - return this.enableHelper; - } - -} -export class ErrorCodes { - public LOADING = 0; - public DONE = 1; - public NONE = 2; - public ERROR = 3; - public NOT_AVAILABLE = 4; - public OUT_OF_BOUND = 5; - public NOT_FOUND = 6; -} diff --git a/portal-2/src/app/utils/properties/searchFields.ts b/portal-2/src/app/utils/properties/searchFields.ts deleted file mode 100644 index 42589c28..00000000 --- a/portal-2/src/app/utils/properties/searchFields.ts +++ /dev/null @@ -1,159 +0,0 @@ -export class SearchFields { - //main Entities - //RESULTS - //Used for datasets and publications - //In case Datasets should display different fields, use seperate tables for fields - public RESULT_REFINE_FIELDS = [ - "relfunder", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id", - "relproject","resultacceptanceyear", - "resultbestaccessright", "instancetypename", "resultlanguagename", "community","resulthostingdatasource"]; - - public RESULT_ADVANCED_FIELDS:string[] = ["q","resulttitle","resultauthor","resultpublisher","instancetypename", - "resultlanguagename", "community","relprojectid", "relfunder", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id", - "resultdateofacceptance","resultbestaccessright","pid","resulthostingdatasourceid","collectedfromdatasourceid", "relorganizationid"]; - public RESULT_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["resulttitle"]:{name:"Title", type:"keyword", param:"title", equalityOperator: "="}, - ["resultauthor"]:{name:"Author", type:"keyword", param:"author", equalityOperator: "="}, - ["resultpublisher"]:{name:"Publisher", type:"keyword", param:"publisher", equalityOperator: "="}, - ["pid"]:{name:"PID", type:"keyword", param:"pid", equalityOperator: " = "}, - ["resulthostingdatasourceid"]:{name:"Hosting Content Provider", type:"entity", param:"hostedBy", equalityOperator: " exact "}, - ["resulthostingdatasource"]:{name:"Content Provider", type:"refine", param:"hostedBy", equalityOperator: " exact "}, - ["instancetypename"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - // ["instancetypenameid"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - ["resultlanguagename"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - // ["resultlanguageid"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - ["community"]:{name:"Community", type:"refine", param:"community", equalityOperator: " exact "}, - ["relproject"]:{name:"Project", type:"refine", param:"project", equalityOperator: " exact "}, - ["relprojectid"]:{name:"Project", type:"entity", param:"project", equalityOperator: " exact "}, - ["relfunder"]:{name:"Funder", type:"refine", param:"funder", equalityOperator: " exact "}, - ["relfundinglevel0_id"]:{name:"Funding Stream", type:"refine", param:"funderlv0", equalityOperator: " exact "}, - ["relfundinglevel1_id"]:{name:"Funding Substream level 1", type:"refine", param:"funderlv1", equalityOperator: " exact "}, - ["relfundinglevel2_id"]:{name:"Funding Substream level 2", type:"refine", param:"funderlv2", equalityOperator: " exact "}, - ["resultacceptanceyear"]:{name:"Publication Date", type:"keyword", param:"year", equalityOperator: " exact "}, - ["resultdateofacceptance"]:{name:"Publication Date", type:"date", param:"date", equalityOperator: " within "}, - ["resultbestaccessright"]:{name:"Access Mode", type:"vocabulary", param:"access", equalityOperator: " exact "}, - // ["resultbestaccessright"]:{name:"Access Mode", type:"refine", param:"access", equalityOperator: " exact "}, - ["collectedfrom"]:{name:"Content Provider", type:"refine", param:"datasource", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - }; - - //PROJECT - - public PROJECT_REFINE_FIELDS:string[] = ["funder","fundinglevel0_id","fundinglevel1_id", - "fundinglevel2_id","projectstartyear","projectendyear","projectecsc39"]; - public PROJECT_ADVANCED_FIELDS:string[] = ["q","projectacronym","projecttitle","projectkeywords", - "funder", "fundinglevel0_id","fundinglevel1_id", "fundinglevel2_id", - "projectstartdate","projectenddate","projectecsc39", - "projectcode_nt","relorganizationid", "collectedfromdatasourceid"]; - public PROJECT_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["projectacronym"]:{name:"Acronym", type:"keyword", param:"acronym", equalityOperator: "="}, - ["projecttitle"]:{name:"Title", type:"keyword", param:"title", equalityOperator: "="}, - ["projectkeywords"]:{name:"Keywords", type:"keyword", param:"keywords", equalityOperator: "="}, - - ["funder"]:{name:"Funder", type:"refine", param:"funder", equalityOperator: " exact "}, - ["fundinglevel0_id"]:{name:"Funding Stream", type:"refine", param:"funderlv0", equalityOperator: " exact "}, - ["fundinglevel1_id"]:{name:"Funding Substream level 1", type:"refine", param:"funderlv1", equalityOperator: " exact "}, - ["fundinglevel2_id"]:{name:"Funding Substream level 2", type:"refine", param:"funderlv2", equalityOperator: " exact "}, - ["projectstartyear"]:{name:"Start Year", type:"year", param:"startyear", equalityOperator: " exact "}, - ["projectendyear"]:{name:"End Year", type:"year", param:"endyear", equalityOperator: " exact "}, - ["projectstartdate"]:{name:"Start Date", type:"date", param:"startdate", equalityOperator: " within "}, - ["projectenddate"]:{name:"End Date", type:"date", param:"enddate", equalityOperator: " within "}, - ["projectecsc39"]:{name:"Special Clause 39", type:"boolean", param:"sc39", equalityOperator: " exact "}, - ["projectcode_nt"]:{name:"Project Code", type:"keyword", param:"code", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - - }; - - //DATAPROVIDERS - - public DATASOURCE_REFINE_FIELDS:string[] = ["datasourcetypeuiname", "datasourceodlanguages", "datasourceodcontenttypes", - "datasourcecompatibilityname"]; - public DATASOURCE_ADVANCED_FIELDS:string[] = ["q", "datasourceofficialname", - "datasourceenglishname","datasourceodsubjects", "datasourcetypename","datasourceodlanguages", - "datasourceodcontenttypes", "datasourcecompatibilityname","relorganizationid", "collectedfromdatasourceid"]; - - public DATASOURCE_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["datasourceofficialname"]:{name:"English name", type:"keyword", param:"officialname", equalityOperator: "="}, - ["datasourceenglishname"]:{name:"Title", type:"keyword", param:"engname", equalityOperator: "="}, - ["datasourceodsubjects"]:{name:"Subject", type:"keyword", param:"subjects", equalityOperator: "="}, - ["datasourcetypeuiid"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["datasourcetypeuiname"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["datasourcetypename"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - ["datasourceodlanguages"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - ["datasourceodcontenttypes"]:{name:"Content", type:"refine", param:"content", equalityOperator: " exact "}, - ["datasourcecompatibilityid"]:{name:"Compatibility Level", type:"refine", param:"compatibility", equalityOperator: " exact "}, - ["datasourcecompatibilityname"]:{name:"Compatibility Level", type:"vocabulary", param:"compatibility", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - }; - - public COMPATIBLE_DATAPROVIDER_FIELDS:string[] = ["datasourcetypeuiid","datasourcecompatibilityname"]; - public ENTITY_REGISTRIES_FIELDS:string[] = ["datasourcetypename","datasourcecompatibilityname"]; - public JOURNAL_FIELDS:string[] = ["datasourcetypeuiid","datasourcecompatibilityname"]; - - //ORGANIZATION - - public ORGANIZATION_REFINE_FIELDS:string[] = ["organizationcountryname"] - public ORGANIZATION_ADVANCED_FIELDS:string[] = ["q", "organizationlegalname","organizationlegalshortname","organizationcountryname"]; - - public ORGANIZATION_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["organizationlegalname"]:{name:"Legal Name", type:"keyword", param:"name", equalityOperator: "="}, - ["organizationlegalshortname"]:{name:"Legal Short Name", type:"keyword", param:"shortname", equalityOperator: "="}, - ["organizationcountryname"]:{name:"Country", type:"vocabulary", param:"country", equalityOperator: "="}, - // ["organizationcountryname"]:{name:"Country", type:"refine", param:"country", equalityOperator: "="} - }; - public ORGANIZATION_INDEX:string[] = ["organizationcountryname"]//,"organizationeclegalbody"]; - public ADVANCED_SEARCH_ORGANIZATION_PARAM:string[] = ["q","contenttype","compatibility","country","type"]; - public ORGANIZATION_INDEX_PARAM_MAP:{ [key:string]:string } = {["organizationlegalname"]:"contenttype", ["organizationlegalshortname"]:"type", - ["organizationcountryname"]:"country"};//,["organizationeclegalbody"]:"type"}; - public ORGANIZATION_FIELDS_MAP: { [key:string]:{ name:string, operator:string, type:string, indexField:string , equalityOperator:string}} ={ - ["q"]:{name:"All fields",operator:"op", type:"keyword", indexField:null, equalityOperator: "="}, - ["contenttype"]:{name:"Legal Name",operator:"cn", type:"keyword" , indexField:"organizationlegalname", equalityOperator: "="}, - ["compatibility"]:{name:"Legal Short Name",operator:"cm", type:"keyword", indexField:"organizationlegalshortname", equalityOperator: "="}, - ["country"]:{name:"Country",operator:"cu", type:"vocabulary", indexField:"organizationcountryname", equalityOperator: " exact "}, - ["type"]:{name:"Type",operator:"tp", type:"refine", indexField:"organizationeclegalbody", equalityOperator: " exact "}, - - }; - - - - public HIDDEN_FIELDS:string[] = ["fundinglevel0_id","fundinglevel1_id","fundinglevel2_id", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id"]; - - public DEPENDENT_FIELDS: { [key:string]:string } = {["fundinglevel0_id"]:"funder", - ["fundinglevel1_id"]:"fundinglevel0_id", ["fundinglevel2_id"]:"fundinglevel1_id", ["relfundinglevel0_id"]:"relfunder", - ["relfundinglevel1_id"]:"relfundinglevel0_id", ["relfundinglevel2_id"]:"relfundinglevel1_id"}; - - - public ADVANCED_SEARCH_OPERATORS:[{name:string, id:string}] = [{name:"AND",id:"and"},{name:"OR",id:"or"},{name:"NOT",id:"not"}]; - - constructor (){ - } - getFieldName(fieldId:string,fieldType:string):string{ - if(fieldType == "publication" || fieldType == "dataset" || fieldType == "software"){ - return this.RESULT_FIELDS[fieldId].name; - }else if(fieldType == "project"){ - return this.PROJECT_FIELDS[fieldId].name; - }else if(fieldType == "organization"){ - return this.ORGANIZATION_FIELDS[fieldId].name; - }else if(fieldType == "datasource" || fieldType == "dataprovider"){ - return this.DATASOURCE_FIELDS[fieldId].name; - }else{ - return "UNDEFINED"; - } - } -} -class FieldDetails{ - name:string; - type:string; - param:string; - equalityOperator:string; - } diff --git a/portal-2/src/app/utils/properties/searchFields_new.ts b/portal-2/src/app/utils/properties/searchFields_new.ts deleted file mode 100644 index e89edcd1..00000000 --- a/portal-2/src/app/utils/properties/searchFields_new.ts +++ /dev/null @@ -1,164 +0,0 @@ -export class SearchFields { - //main Entities - //RESULTS - //Used for datasets and publications - //In case Datasets should display different fields, use seperate tables for fields - public RESULT_REFINE_FIELDS = ["instancetypename", "resultlanguagename", "community","relproject", "relfunder", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id", - "resultacceptanceyear","resultbestlicense"];//,"collectedfrom"]; - - public RESULT_ADVANCED_FIELDS:string[] = ["q","resulttitle","relperson","resultpublisher","instancetypenameid", - "resultlanguageid", "community","relprojectid", "relfunder", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id", - "resultacceptanceyear","resultbestlicenseid","pid","resulthostingdatasourceid","collectedfromdatasourceid","relpersonid"]; - public RESULT_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["resulttitle"]:{name:"Title", type:"keyword", param:"title", equalityOperator: "="}, - ["relperson"]:{name:"Author", type:"keyword", param:"author", equalityOperator: "="}, - ["resultpublisher"]:{name:"Publisher", type:"keyword", param:"publisher", equalityOperator: "="}, - ["pid"]:{name:"PID", type:"keyword", param:"pid", equalityOperator: " = "}, - ["resulthostingdatasourceid"]:{name:"Hosting Data Provider", type:"entity", param:"hostedBy", equalityOperator: " exact "}, - ["relpersonid"]:{name:"Person", type:"entity", param:"person", equalityOperator: " exact "}, - ["instancetypename"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["instancetypenameid"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - ["resultlanguagename"]:{name:"Language", type:"refine", param:"lang", equalityOperator: " exact "}, - ["resultlanguageid"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - ["community"]:{name:"Community", type:"refine", param:"community", equalityOperator: " exact "}, - ["relproject"]:{name:"Project", type:"refine", param:"project", equalityOperator: " exact "}, - ["relprojectid"]:{name:"Project", type:"entity", param:"project", equalityOperator: " exact "}, - ["relfunder"]:{name:"Funder", type:"refine", param:"funder", equalityOperator: " exact "}, - ["relfundinglevel0_id"]:{name:"Funding Stream", type:"refine", param:"funderlv0", equalityOperator: " exact "}, - ["relfundinglevel1_id"]:{name:"Funding Substream level 1", type:"refine", param:"funderlv1", equalityOperator: " exact "}, - ["relfundinglevel2_id"]:{name:"Funding Substream level 2", type:"refine", param:"funderlv2", equalityOperator: " exact "}, - ["resultacceptanceyear"]:{name:"Year", type:"year", param:"year", equalityOperator: " exact "}, - ["resultbestlicense"]:{name:"Access Mode", type:"refine", param:"access", equalityOperator: " exact "}, - ["resultbestlicenseid"]:{name:"Access Mode", type:"vocabulary", param:"access", equalityOperator: " exact "}, - ["collectedfrom"]:{name:"Content Provider", type:"refine", param:"datasource", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - }; - - //PROJECT - - public PROJECT_REFINE_FIELDS:string[] = ["funder","fundinglevel0_id","fundinglevel1_id", - "fundinglevel2_id","projectstartyear","projectendyear","projectecsc39"]; - public PROJECT_ADVANCED_FIELDS:string[] = ["q","projectacronym","projecttitle","projectkeywords", - "funder", "fundinglevel0_id","fundinglevel1_id", "fundinglevel2_id", - "projectstartyear","projectendyear","projectecsc39", - "projectcode","relorganizationid", "collectedfromdatasourceid"]; - public PROJECT_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["projectacronym"]:{name:"Acronym", type:"keyword", param:"acronym", equalityOperator: "="}, - ["projecttitle"]:{name:"Title", type:"keyword", param:"title", equalityOperator: "="}, - ["projectkeywords"]:{name:"Keywords", type:"keyword", param:"keywords", equalityOperator: "="}, - - ["funder"]:{name:"Funder", type:"refine", param:"funder", equalityOperator: " exact "}, - ["fundinglevel0_id"]:{name:"Funding Stream", type:"refine", param:"funderlv0", equalityOperator: " exact "}, - ["fundinglevel1_id"]:{name:"Funding Substream level 1", type:"refine", param:"funderlv1", equalityOperator: " exact "}, - ["fundinglevel2_id"]:{name:"Funding Substream level 2", type:"refine", param:"funderlv2", equalityOperator: " exact "}, - ["projectstartyear"]:{name:"Start Year", type:"year", param:"startyear", equalityOperator: " exact "}, - ["projectendyear"]:{name:"End Year", type:"year", param:"endyear", equalityOperator: " exact "}, - - ["projectecsc39"]:{name:"Special Clause 39", type:"boolean", param:"sc39", equalityOperator: " exact "}, - ["projectcode"]:{name:"Project Code", type:"keyword", param:"code", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - - }; - - //DATAPROVIDERS - - public DATASOURCE_REFINE_FIELDS:string[] = ["datasourcetypeuiname", "datasourceodlanguages", "datasourceodcontenttypes", - "datasourcecompatibilityname"]; - public DATASOURCE_ADVANCED_FIELDS:string[] = ["q", "datasourceofficialname", - "datasourceenglishname","datasourceodsubjects", "datasourcetypeid","datasourceodlanguages", - "datasourceodcontenttypes", "datasourcecompatibilityid","relorganizationid", "collectedfromdatasourceid"]; - - public DATASOURCE_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["datasourceofficialname"]:{name:"English name", type:"keyword", param:"officialname", equalityOperator: "="}, - ["datasourceenglishname"]:{name:"Title", type:"keyword", param:"engname", equalityOperator: "="}, - ["datasourceodsubjects"]:{name:"Subject", type:"keyword", param:"subjects", equalityOperator: "="}, - ["datasourcetypeuiid"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["datasourcetypeuiname"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["datasourcetypeid"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - ["datasourceodlanguages"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - ["datasourceodcontenttypes"]:{name:"Content", type:"refine", param:"content", equalityOperator: " exact "}, - ["datasourcecompatibilityid"]:{name:"Compatibility Level", type:"vocabulary", param:"compatibility", equalityOperator: " exact "}, - ["datasourcecompatibilityname"]:{name:"Compatibility Level", type:"refine", param:"compatibility", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - - }; - - public COMPATIBLE_DATAPROVIDER_FIELDS:string[] = ["datasourcetypeuiid","datasourcecompatibilityid"]; - public ENTITY_REGISTRIES_FIELDS:string[] = ["datasourcetypeid","datasourcecompatibilityid"]; - - //ORGANIZATION - - public ORGANIZATION_REFINE_FIELDS:string[] = ["organizationcountryname"] - public ORGANIZATION_ADVANCED_FIELDS:string[] = ["q", - "organizationlegalname","organizationlegalshortname","organizationcountryid"]; - - public ORGANIZATION_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["organizationlegalname"]:{name:"Legal Name", type:"keyword", param:"name", equalityOperator: "="}, - ["organizationlegalshortname"]:{name:"Legal Short Name", type:"keyword", param:"shortname", equalityOperator: "="}, - ["organizationcountryid"]:{name:"Country", type:"vocabulary", param:"country", equalityOperator: "="}, - ["organizationcountryname"]:{name:"Country", type:"refine", param:"country", equalityOperator: "="} - }; - public ORGANIZATION_INDEX:string[] = ["organizationcountryname"]//,"organizationeclegalbody"]; - public ADVANCED_SEARCH_ORGANIZATION_PARAM:string[] = ["q","contenttype","compatibility","country","type"]; - public ORGANIZATION_INDEX_PARAM_MAP:{ [key:string]:string } = {["organizationlegalname"]:"contenttype", ["organizationlegalshortname"]:"type", - ["organizationcountryname"]:"country"};//,["organizationeclegalbody"]:"type"}; - public ORGANIZATION_FIELDS_MAP: { [key:string]:{ name:string, operator:string, type:string, indexField:string , equalityOperator:string}} ={ - ["q"]:{name:"All fields",operator:"op", type:"keyword", indexField:null, equalityOperator: "="}, - ["contenttype"]:{name:"Legal Name",operator:"cn", type:"keyword" , indexField:"organizationlegalname", equalityOperator: "="}, - ["compatibility"]:{name:"Legal Short Name",operator:"cm", type:"keyword", indexField:"organizationlegalshortname", equalityOperator: "="}, - ["country"]:{name:"Country",operator:"cu", type:"vocabulary", indexField:"organizationcountryname", equalityOperator: " exact "}, - ["type"]:{name:"Type",operator:"tp", type:"refine", indexField:"organizationeclegalbody", equalityOperator: " exact "}, - - }; - - //PERSON - public PERSON_REFINE_FIELDS:string[] = []; - public PERSON_ADVANCED_FIELDS:string[] = ["q","personsecondnames","personfirstname","personfullname"]; - public PERSON_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["personsecondnames"]:{name:"Surname", type:"keyword", param:"surname", equalityOperator: "="}, - ["personfirstname"]:{name:"First Name",type:"keyword", param:"name", equalityOperator: "="}, - ["personfullname"]:{name:"Full name", type:"keyword", param:"fullname", equalityOperator: "="} - }; - - - public HIDDEN_FIELDS:string[] = ["fundinglevel0_id","fundinglevel1_id","fundinglevel2_id", - "relfundinglevel0_id","relfundinglevel1_id,relfundinglevel2_id"]; - - public DEPENDENT_FIELDS: { [key:string]:string } = {["fundinglevel0_id"]:"funder", - ["fundinglevel1_id"]:"fundinglevel0_id", ["fundinglevel2_id"]:"fundinglevel1_id", ["relfundinglevel0_id"]:"relfunder", - ["relfundinglevel1_id"]:"relfundinglevel0_id", ["relfundinglevel2_id"]:"relfundinglevel1_id"}; - - - public ADVANCED_SEARCH_OPERATORS:[{name:string, id:string}] = [{name:"AND",id:"and"},{name:"OR",id:"or"},{name:"NOT",id:"not"}]; - - constructor (){ - } - getFieldName(fieldId:string,fieldType:string):string{ - if(fieldType == "publication" || fieldType == "dataset"){ - return this.RESULT_FIELDS[fieldId].name; - }else if(fieldType == "project"){ - return this.PROJECT_FIELDS[fieldId].name; - }else if(fieldType == "organization"){ - return this.ORGANIZATION_FIELDS[fieldId].name; - }else if(fieldType == "datasource"){ - return this.DATASOURCE_FIELDS[fieldId].name; - }else{ - return "UNDEFINED"; - } - } -} -class FieldDetails{ - name:string; - type:string; - param:string; - equalityOperator:string; - } diff --git a/portal-2/src/app/utils/properties/searchFields_old.ts b/portal-2/src/app/utils/properties/searchFields_old.ts deleted file mode 100644 index 9c74982a..00000000 --- a/portal-2/src/app/utils/properties/searchFields_old.ts +++ /dev/null @@ -1,164 +0,0 @@ -export class SearchFields { - //main Entities - //RESULTS - //Used for datasets and publications - //In case Datasets should display different fields, use seperate tables for fields - public RESULT_REFINE_FIELDS = ["instancetypename", "resultlanguagename", "community","relproject", "relfunderid", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id", - "resultacceptanceyear","resultbestlicense"];//,"collectedfrom"]; - - public RESULT_ADVANCED_FIELDS:string[] = ["q","resulttitle","relperson","resultpublisher","instancetypenameid", - "resultlanguageid", "community","relprojectid", "relfunderid", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id", - "resultacceptanceyear","resultbestlicenseid","pid","resulthostingdatasourceid","collectedfromdatasourceid","relpersonid"]; - public RESULT_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["resulttitle"]:{name:"Title", type:"keyword", param:"title", equalityOperator: "="}, - ["relperson"]:{name:"Author", type:"keyword", param:"author", equalityOperator: "="}, - ["resultpublisher"]:{name:"Publisher", type:"keyword", param:"publisher", equalityOperator: "="}, - ["pid"]:{name:"PID", type:"keyword", param:"pid", equalityOperator: " = "}, - ["resulthostingdatasourceid"]:{name:"Hosting Data Provider", type:"entity", param:"hostedBy", equalityOperator: " exact "}, - ["relpersonid"]:{name:"Person", type:"entity", param:"person", equalityOperator: " exact "}, - ["instancetypename"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["instancetypenameid"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - ["resultlanguagename"]:{name:"Language", type:"refine", param:"lang", equalityOperator: " exact "}, - ["resultlanguageid"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - ["community"]:{name:"Community", type:"refine", param:"community", equalityOperator: " exact "}, - ["relproject"]:{name:"Project", type:"refine", param:"project", equalityOperator: " exact "}, - ["relprojectid"]:{name:"Project", type:"entity", param:"project", equalityOperator: " exact "}, - ["relfunderid"]:{name:"Funder", type:"refine", param:"funder", equalityOperator: " exact "}, - ["relfundinglevel0_id"]:{name:"Funding Stream", type:"refine", param:"funderlv0", equalityOperator: " exact "}, - ["relfundinglevel1_id"]:{name:"Funding Substream level 1", type:"refine", param:"funderlv1", equalityOperator: " exact "}, - ["relfundinglevel2_id"]:{name:"Funding Substream level 2", type:"refine", param:"funderlv2", equalityOperator: " exact "}, - ["resultacceptanceyear"]:{name:"Year", type:"year", param:"year", equalityOperator: " exact "}, - ["resultbestlicense"]:{name:"Access Mode", type:"refine", param:"access", equalityOperator: " exact "}, - ["resultbestlicenseid"]:{name:"Access Mode", type:"vocabulary", param:"access", equalityOperator: " exact "}, - ["collectedfrom"]:{name:"Content Provider", type:"refine", param:"datasource", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - }; - - //PROJECT - - public PROJECT_REFINE_FIELDS:string[] = ["funderid","fundinglevel0_id","fundinglevel1_id", - "fundinglevel2_id","projectstartyear","projectendyear","projectecsc39"]; - public PROJECT_ADVANCED_FIELDS:string[] = ["q","projectacronym","projecttitle","projectkeywords", - "funderid", "fundinglevel0_id","fundinglevel1_id", "fundinglevel2_id", - "projectstartyear","projectendyear","projectecsc39", - "projectcode","relorganizationid", "collectedfromdatasourceid"]; - public PROJECT_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["projectacronym"]:{name:"Acronym", type:"keyword", param:"acronym", equalityOperator: "="}, - ["projecttitle"]:{name:"Title", type:"keyword", param:"title", equalityOperator: "="}, - ["projectkeywords"]:{name:"Keywords", type:"keyword", param:"keywords", equalityOperator: "="}, - - ["funderid"]:{name:"Funder", type:"refine", param:"funder", equalityOperator: " exact "}, - ["fundinglevel0_id"]:{name:"Funding Stream", type:"refine", param:"funderlv0", equalityOperator: " exact "}, - ["fundinglevel1_id"]:{name:"Funding Substream level 1", type:"refine", param:"funderlv1", equalityOperator: " exact "}, - ["fundinglevel2_id"]:{name:"Funding Substream level 2", type:"refine", param:"funderlv2", equalityOperator: " exact "}, - ["projectstartyear"]:{name:"Start Year", type:"year", param:"startyear", equalityOperator: " exact "}, - ["projectendyear"]:{name:"End Year", type:"year", param:"endyear", equalityOperator: " exact "}, - - ["projectecsc39"]:{name:"Special Clause 39", type:"boolean", param:"sc39", equalityOperator: " exact "}, - ["projectcode"]:{name:"Project Code", type:"keyword", param:"code", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - - }; - - //DATAPROVIDERS - - public DATASOURCE_REFINE_FIELDS:string[] = ["datasourcetypeuiname", "datasourceodlanguages", "datasourceodcontenttypes", - "datasourcecompatibilityname"]; - public DATASOURCE_ADVANCED_FIELDS:string[] = ["q", "datasourceofficialname", - "datasourceenglishname","datasourceodsubjects", "datasourcetypeid","datasourceodlanguages", - "datasourceodcontenttypes", "datasourcecompatibilityid","relorganizationid", "collectedfromdatasourceid"]; - - public DATASOURCE_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["datasourceofficialname"]:{name:"English name", type:"keyword", param:"officialname", equalityOperator: "="}, - ["datasourceenglishname"]:{name:"Title", type:"keyword", param:"engname", equalityOperator: "="}, - ["datasourceodsubjects"]:{name:"Subject", type:"keyword", param:"subjects", equalityOperator: "="}, - ["datasourcetypeuiid"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["datasourcetypeuiname"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["datasourcetypeid"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - ["datasourceodlanguages"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - ["datasourceodcontenttypes"]:{name:"Content", type:"refine", param:"content", equalityOperator: " exact "}, - ["datasourcecompatibilityid"]:{name:"Compatibility Level", type:"vocabulary", param:"compatibility", equalityOperator: " exact "}, - ["datasourcecompatibilityname"]:{name:"Compatibility Level", type:"refine", param:"compatibility", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - - }; - - public COMPATIBLE_DATAPROVIDER_FIELDS:string[] = ["datasourcetypeuiid","datasourcecompatibilityid"]; - public ENTITY_REGISTRIES_FIELDS:string[] = ["datasourcetypeid","datasourcecompatibilityid"]; - - //ORGANIZATION - - public ORGANIZATION_REFINE_FIELDS:string[] = ["organizationcountryname"] - public ORGANIZATION_ADVANCED_FIELDS:string[] = ["q", - "organizationlegalname","organizationlegalshortname","organizationcountryid"]; - - public ORGANIZATION_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["organizationlegalname"]:{name:"Legal Name", type:"keyword", param:"name", equalityOperator: "="}, - ["organizationlegalshortname"]:{name:"Legal Short Name", type:"keyword", param:"shortname", equalityOperator: "="}, - ["organizationcountryid"]:{name:"Country", type:"vocabulary", param:"country", equalityOperator: "="}, - ["organizationcountryname"]:{name:"Country", type:"refine", param:"country", equalityOperator: "="} - }; - public ORGANIZATION_INDEX:string[] = ["organizationcountryname"]//,"organizationeclegalbody"]; - public ADVANCED_SEARCH_ORGANIZATION_PARAM:string[] = ["q","contenttype","compatibility","country","type"]; - public ORGANIZATION_INDEX_PARAM_MAP:{ [key:string]:string } = {["organizationlegalname"]:"contenttype", ["organizationlegalshortname"]:"type", - ["organizationcountryname"]:"country"};//,["organizationeclegalbody"]:"type"}; - public ORGANIZATION_FIELDS_MAP: { [key:string]:{ name:string, operator:string, type:string, indexField:string , equalityOperator:string}} ={ - ["q"]:{name:"All fields",operator:"op", type:"keyword", indexField:null, equalityOperator: "="}, - ["contenttype"]:{name:"Legal Name",operator:"cn", type:"keyword" , indexField:"organizationlegalname", equalityOperator: "="}, - ["compatibility"]:{name:"Legal Short Name",operator:"cm", type:"keyword", indexField:"organizationlegalshortname", equalityOperator: "="}, - ["country"]:{name:"Country",operator:"cu", type:"vocabulary", indexField:"organizationcountryname", equalityOperator: " exact "}, - ["type"]:{name:"Type",operator:"tp", type:"refine", indexField:"organizationeclegalbody", equalityOperator: " exact "}, - - }; - - //PERSON - public PERSON_REFINE_FIELDS:string[] = []; - public PERSON_ADVANCED_FIELDS:string[] = ["q","personsecondnames","personfirstname","personfullname"]; - public PERSON_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["personsecondnames"]:{name:"Surname", type:"keyword", param:"surname", equalityOperator: "="}, - ["personfirstname"]:{name:"First Name",type:"keyword", param:"name", equalityOperator: "="}, - ["personfullname"]:{name:"Full name", type:"keyword", param:"fullname", equalityOperator: "="} - }; - - - public HIDDEN_FIELDS:string[] = ["fundinglevel0_id","fundinglevel1_id","fundinglevel2_id", - "relfundinglevel0_id","relfundinglevel1_id,relfundinglevel2_id"]; - - public DEPENDENT_FIELDS: { [key:string]:string } = {["fundinglevel0_id"]:"funderid", - ["fundinglevel1_id"]:"fundinglevel0_id", ["fundinglevel2_id"]:"fundinglevel1_id", ["relfundinglevel0_id"]:"relfunderid", - ["relfundinglevel1_id"]:"relfundinglevel0_id", ["relfundinglevel2_id"]:"relfundinglevel1_id"}; - - - public ADVANCED_SEARCH_OPERATORS:[{name:string, id:string}] = [{name:"AND",id:"and"},{name:"OR",id:"or"},{name:"NOT",id:"not"}]; - - constructor (){ - } - getFieldName(fieldId:string,fieldType:string):string{ - if(fieldType == "publication" || fieldType == "dataset"){ - return this.RESULT_FIELDS[fieldId].name; - }else if(fieldType == "project"){ - return this.PROJECT_FIELDS[fieldId].name; - }else if(fieldType == "organization"){ - return this.ORGANIZATION_FIELDS[fieldId].name; - }else if(fieldType == "datasource"){ - return this.DATASOURCE_FIELDS[fieldId].name; - }else{ - return "UNDEFINED"; - } - } -} -class FieldDetails{ - name:string; - type:string; - param:string; - equalityOperator:string; - } diff --git a/portal-2/src/app/utils/routerHelper.class.ts b/portal-2/src/app/utils/routerHelper.class.ts deleted file mode 100644 index fecaf296..00000000 --- a/portal-2/src/app/utils/routerHelper.class.ts +++ /dev/null @@ -1,34 +0,0 @@ - - - -export class RouterHelper { - //Use this class function to create queryParams Objects in format {key1:value1} or {key1:value1,key2:value2,key3:value3,...} for multiple parameters - constructor(){} - // Link - public createQueryParam(key:string,value:string){ - var obj ={}; - obj[key]=value; - return obj; - - } - public createQueryParamsPaging(keys:string[],values:string[],pageParameter:string,pageValue:number){ - var obj = this.createQueryParams(keys, values); - obj[pageParameter] = ""+pageValue; - return obj; - - } - public createQueryParams(keys:string[],values:string[]){ - var obj ={}; - if(!keys || !values || keys.length != values.length){ - return obj; - }else{ - for(var i=0; i< keys.length; i++){ - obj[keys[i]]=values[i]; - } - } - return obj; - - } - - -} diff --git a/portal-2/src/app/utils/showDataProviders.component.ts b/portal-2/src/app/utils/showDataProviders.component.ts deleted file mode 100644 index 2ac5b7ae..00000000 --- a/portal-2/src/app/utils/showDataProviders.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import {Component, Input} from '@angular/core'; - -@Component({ - selector: 'showDataProviders', - template: ` - -
    - No content providers available -
    -
    - - -
    - ` -}) - -// Possibly should be deleted. Not used anywhere. -export class ShowDataProvidersComponent { -@Input() dataProviders: { "name": string, "url": string, "type": string, "websiteUrl": string, - "organizations": {"name": string, "url": string}[]}[]; - -constructor () { -} - -ngOnInit() {} -} diff --git a/portal-2/src/app/utils/staticAutoComplete/ISVocabularies.service.ts b/portal-2/src/app/utils/staticAutoComplete/ISVocabularies.service.ts deleted file mode 100644 index 0894a71d..00000000 --- a/portal-2/src/app/utils/staticAutoComplete/ISVocabularies.service.ts +++ /dev/null @@ -1,116 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {AutoCompleteValue} from '../../searchPages/searchUtils/searchHelperClasses.class'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import { CacheService } from '../../shared/cache.service'; -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; - -@Injectable() -export class ISVocabulariesService { - private api =OpenaireProperties.getVocabulariesAPI(); - constructor(private http: Http, public _cache: CacheService) {} - - getVocabularyByType(field:string,entity:string):any{ - console.log("getVocabulary field: "+ field + " for entity: "+ entity); - var file = ""; - var vocabulary = ""; - if( field == "lang"){ - // file="languages.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:languages.json"; - return this.getVocabularyFromService(vocabulary); - }else if ( field == "type" && (entity == "publication")){ - // file = "publicationTypes.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:publication_resource.json"; - return this.getVocabularyFromService(vocabulary); - - }else if ( field == "type" && (entity == "dataset")){ - // file = "dnet:dataCite_resource.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:dataCite_resource.json"; - return this.getVocabularyFromService(vocabulary); - - }else if( field == "access" && (entity == "publication" || entity == "dataset")){ - // file= "accessMode.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:access_modes.json"; - return this.getVocabularyFromService(vocabulary); - - } else if( (field == "type") && (entity == "dataprovider")){ - // file = "dataProviderType.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:datasource_typologies.json"; - return this.getVocabularyFromService(vocabulary); - - } else if( field == "compatibility" && (entity == "dataprovider")){ - // file = "dataProviderCompatibility.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:datasourceCompatibilityLevel.json"; - return this.getVocabularyFromService(vocabulary); - - } else if( field == "country" ){ - // file = "countries.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:countries.json"; - return this.getVocabularyFromService(vocabulary); - - } - return null; - - } - // getVocabularyFromFile (file:string):AutoCompleteValue[] { - // var lang = JSON.parse(JSON.stringify(require('../utils/vocabularies/'+file))); - // return this.parse(lang["terms"]); - // } - getVocabularyFromService (vocabularyName:string):any { - let url = this.api + vocabularyName; - console.log(url); - let key = url; - if (this._cache.has(key)) { - return Observable.of(this._cache.get(key)); - } - // return this.http.get(url).toPromise() - // .then(request => - // { - // request = request.json()['terms']; - // var results:AutoCompleteValue[] = this.parse(request); - // console.log("Get vocabulary : "+ vocabularyName+ " - get " +results.length+ "results"); - // return results; - // }); - return this.http.get(url) - .do(res => console.log(res)) - .map(res => res.json()) - .map(res => res['terms']) - .do(res => console.log(res)) - .map(res => this.parse(res)) - .do(res => console.log(res)) - .catch(this.handleError) - .do(res => { - this._cache.set(key, res); - }); - - } - - parse (data: any):AutoCompleteValue[] { - var array:AutoCompleteValue[] =[] - for(var i = 0; i < data.length; i++){ - var value:AutoCompleteValue = new AutoCompleteValue(); - value.id = data[i].englishName;//data[i].code; - value.label = data[i].englishName; - array.push(value); - } - - return array; - - } -private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } -} diff --git a/portal-2/src/app/utils/staticAutoComplete/staticAutoComplete.component.ts b/portal-2/src/app/utils/staticAutoComplete/staticAutoComplete.component.ts deleted file mode 100644 index 46f7ec5a..00000000 --- a/portal-2/src/app/utils/staticAutoComplete/staticAutoComplete.component.ts +++ /dev/null @@ -1,300 +0,0 @@ -import {Component, ElementRef, Input, Output, EventEmitter, OnChanges, SimpleChange} from '@angular/core'; -import {Value} from '../../searchPages/searchUtils/searchHelperClasses.class'; -import {ISVocabulariesService} from './ISVocabularies.service'; -import {RefineFieldResultsService} from '../../services/refineFieldResults.service'; -//Usage example -// - -@Component({ - selector: 'static-autocomplete', - styleUrls: ['../autoComplete.component.css'], - host: { - '(document:click)': 'handleClick($event)', - }, - template: ` - - - {{showItem(item)}} - - - - - -
    -
      -
    • - Loading... - {{results}} results found: - No results found -
    • -
    • - {{showItem(item)}} -
    • -
    -
    -
    - - ` -}) -export class StaticAutoCompleteComponent implements OnChanges{ - @Input() placeHolderMessage = "Search for entries"; - @Input() title = "Autocomplete"; - @Output() addItem = new EventEmitter(); // when selected list changes update parent component - @Output() selectedValueChanged = new EventEmitter(); // when changed a method for filtering will be called - @Output() listUpdated = new EventEmitter(); // when changed a method for filtering will be called - @Input() public list = []; // the entries resulted after filtering function - @Input() public filtered = []; // the entries resulted after filtering function - @Input() public selected = []; // the entries selected from user - @Input() public keywordlimit = 3; // the minimum length of keyword - @Input() public showSelected = true; // the minimum length of keyword - @Input() public multipleSelections:boolean = true; - @Input() public allowDuplicates:boolean = false; - @Input() public selectedValue:string = ''; - @Input() public vocabularyId:string ; - @Input() public fieldName:string ; - @Input() public entityName:string ; - @Input() public fieldId:string ; - - @Input() public keyword = ''; - @Input() public type = 'search' //search, result, context, project - public warningMessage = ""; - public infoMessage = ""; - public showLoading:boolean = false; - public tries = 0; - public showInput = true; - public sub; - public done = false; - public results = 0; - public focus:boolean = false; - public currentFieldId: string ; - constructor ( private _vocabulariesService: ISVocabulariesService,private _refineService: RefineFieldResultsService, private myElement: ElementRef) { - this.currentFieldId=this.fieldId; - - } - ngOnDestroy(){ - if(this.sub && this.sub != undefined){ - this.sub.unsubscribe(); - } - } - - ngOnChanges(changes: {[propKey: string]: SimpleChange}) { - if(this.currentFieldId!=this.fieldId){ //this is going to be called when - this.currentFieldId=this.fieldId; - this.initialize(); - } - } - private initialize(){ - - this.showInput = true; - if(this.list == undefined || this.list.length == 0){ - this.showLoading = true; - - if(this.vocabularyId){ - // this.list = this._vocabulariesService.getVocabularyByType(this.vocabularyId, this.entityName); - // this.afterListFetchedActions(); - this.sub = this._vocabulariesService.getVocabularyByType(this.vocabularyId, this.entityName).subscribe( - data => { - this.list = data; - this.afterListFetchedActions(); - - }, - err => { - console.log(err); - this.warningMessage = "An Error occured..." - } - ); - }else if(this.fieldName && this.entityName){ - // this.list = this._refineService.getRefineFieldResultsByFieldName(this.fieldName,this.entityName); - this.sub = this._refineService.getRefineFieldResultsByFieldName(this.fieldName,this.entityName).subscribe( - data => { - this.list = data; - this.afterListFetchedActions(); - - }, - err => { - console.log(err); - this.warningMessage = "An Error occured..." - } - ); - }else{ - this.showLoading = false; - - } - }else{ - this.afterListFetchedActions(); - } - - } - public updateList(list){ // used in claim context autocomplete - this.list = list; - this.afterListFetchedActions() - } - private afterListFetchedActions(){ - this.showLoading = false; - this.getSelectedNameFromGivenId(); - this.listUpdated.emit({ - value: this.list - }); - if(this.list == null || this.list.length == 0 ){ - this.warningMessage = "No results available"; - return; - } - this.done = true; - if(this.keyword != ""){ - this.filter(); - } - - } - filter() { - this.focus = true; - if(this.done){ - this.infoMessage = ""; - this.filtered = []; - if(this.keyword == ""){ - var cut = 10; - if(this.list.length < 5){ - cut = this.list.length; - } - this.results = this.list.length; - this.filtered =this.list.slice(0, cut); - this.tries = 0; - this.warningMessage = ""; - // } else if(this.keyword && this.keyword.length < this.keywordlimit){ - // this.tries++; - // if(this.tries == this.keywordlimit -1 ){ - // this.warningMessage = "Type at least " + this.keywordlimit + " characters"; - // this.tries = 0; - // } - }else{ - this.tries = 0; - this.warningMessage = ""; - this.filtered = this.list.filter(function(el){ - return el.label.toLowerCase().indexOf(this.keyword.toLowerCase()) > -1; - }.bind(this)); - var cut = 10; - if(this.filtered .length < 5){ - cut = this.list.length; - } - this.results = this.filtered.length; - this.filtered =this.filtered.slice(0, cut); - } - } - } - remove(item:any){ - var index:number =this.checkIfExists(item,this.selected); - if (index > -1) { - this.selected.splice(index, 1); - } - if(!this.multipleSelections && this.selected.length == 0 ){ - this.showInput = true; - this.selectedValue = ""; - this.selectedValueChanged.emit({ - value: this.selectedValue - }); - - - } - } - select(item:any){ - // console.log("select"+this.selected.length + item.id + " "+ item.label); - - if(this.multipleSelections){ - var index:number =this.checkIfExists(item,this.selected); - if (index > -1 && !this.allowDuplicates) { - this.keyword = ""; - this.filtered.splice(0, this.filtered.length); - return; - } - else{ - this.selected.push(item); - this.keyword = ""; - this.filtered.splice(0, this.filtered.length); - this.addItem.emit({ - value: item - }); - } - }else{ - this.selected.splice(0, this.selected.length); - this.selected.push(item); - this.filtered.splice(0, this.filtered.length); - this.keyword = ""; - this.showInput = false; - this.selectedValue = item.id; - this.selectedValueChanged.emit({ - value: this.selectedValue - }); - - } - - } - private checkIfExists(item:any,list):number{ - - if(item.concept && item.concept.id ){ - - for (var _i = 0; _i < list.length; _i++) { - let itemInList = list[_i]; - if(item.concept.id == itemInList.concept.id){ - return _i; - } - } - }else if(item.id){ - for (var _i = 0; _i < list.length; _i++) { - let itemInList = list[_i]; - if(item.id == itemInList.id){ - return _i; - } - } - } - return -1; - - } - showItem(item:any):string{ - - if (item.name){ //search - return item.name; - }else if( item.concept && item.concept.label){ //context - return item.concept.label; - }else if (item.label){ //simple - return item.label; - } - - } - truncate(str:string, size:number):string{ - if(str == null){return "";} - return (str.length > size)?str.substr(0,size)+'...':str; - } - private getSelectedNameFromGivenId(){ - if(this.list == null ){ - return; - } - this.showInput = true; - for( var i = 0; i < this.list.length; i++){ - if(this.list[i].id == this.selectedValue){ - this.selectedValue = this.list[i].label; - this.selected.push(this.list[i]); - this.showInput = false; - return; - - } - } - } - - handleClick(event){ - var clickedComponent = event.target; - var inside = false; - do { - if (clickedComponent === this.myElement.nativeElement) { - inside = true; - } - clickedComponent = clickedComponent.parentNode; - } while (clickedComponent); - if(!inside){ - this.focus =false; - this.filtered.splice(0, this.filtered.length); - } - } - -} diff --git a/portal-2/src/app/utils/staticAutoComplete/staticAutoComplete.module.ts b/portal-2/src/app/utils/staticAutoComplete/staticAutoComplete.module.ts deleted file mode 100644 index 1c876a15..00000000 --- a/portal-2/src/app/utils/staticAutoComplete/staticAutoComplete.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {StaticAutoCompleteComponent} from './staticAutoComplete.component'; -import {RefineFieldResultsServiceModule} from '../../services/refineFieldResultsService.module'; -import {ISVocabulariesService} from './ISVocabularies.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule, RefineFieldResultsServiceModule - ], - declarations: [ - StaticAutoCompleteComponent - ], - exports: [ - StaticAutoCompleteComponent - ], - providers:[ ISVocabulariesService] -}) -export class StaticAutocompleteModule { } diff --git a/portal-2/src/app/utils/string-utils.class.ts b/portal-2/src/app/utils/string-utils.class.ts deleted file mode 100644 index ece1ce3e..00000000 --- a/portal-2/src/app/utils/string-utils.class.ts +++ /dev/null @@ -1,129 +0,0 @@ -export class Dates { - public static isValidYear(yearString){ - // First check for the pattern - if(!/^\d{4}$/.test(yearString)) - return false; - var year = parseInt(yearString, 10); - - // Check the ranges of month and year - if(year < 1000 || year > 3000 ) - return false; - return true; - } - //format YYYY-MM-DD - public static isValidDate(dateString:string) - { - // First check for the pattern - if(!/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(dateString)) - return false; - - // Parse the date parts to integers - var parts = dateString.split("-"); - var day = parseInt(parts[2], 10); - var month = parseInt(parts[1], 10); - var year = parseInt(parts[0], 10); - if(!this.isValidYear(parts[0])){ - return false; - } - - // Check the ranges of month and year - if( month == 0 || month > 12) - return false; - - var monthLength = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]; - - // Adjust for leap years - if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) - monthLength[1] = 29; - - // Check the range of the day - return day > 0 && day <= monthLength[month - 1]; - - } - public static getDateToday():Date{ - var myDate = new Date(); - return myDate; - - } - public static getDateToString(myDate:Date):string{ - var date:string = myDate.getFullYear()+ "-" ; - date+=((myDate.getMonth() + 1)<10)?"0"+(myDate.getMonth() + 1):(myDate.getMonth() + 1) ; - date+="-"; - date+= (myDate.getDate() <10 )? "0"+myDate.getDate():myDate.getDate() ; - return date; - - } - public static getDateXMonthsAgo(x:number):Date{ - var myDate = new Date(); - myDate.setMonth(myDate.getMonth() - x); - return myDate; - - } - public static getDateXYearsAgo(x:number):Date{ - var myDate = new Date(); - myDate.setFullYear(myDate.getFullYear() - x); - return myDate; - - } - public static getDateFromString(date:string):Date{ - - var myDate = new Date(); - myDate.setFullYear(+date.substring(0,4)); - myDate.setMonth(+date.substring(5,7)-1); - myDate.setDate(+date.substring(8,11)) - return myDate; - - } - -} - -export class DOI{ - - public static getDOIsFromString(str:string):string[]{ - var DOIs:string[] = []; - var words:string[] = str.split(" "); - - for(var i=0; i< words.length; i++){ - if(DOI.isValidDOI(words[i]) && DOIs.indexOf(words[i]) == -1){ - DOIs.push(words[i]); - } - } - return DOIs; - } - public static isValidDOI(str:string):boolean{ - - var exp1 = /\b(10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?!["&\'<>])\S)+)\b/g - var exp2 = /\b(10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?!["&\'<>])[[:graph:]])+)\b/g - if(str.match(exp1)!=null || str.match(exp2)!=null){ - // console.log("It's a DOI"); - return true; - } - return false; - - } -} -export class StringUtils{ - public static quote(params: string):string { - return '"'+params+'"'; - } - - public static unquote(params: string):string { - if(params.length > 2 && (params[0]=='"' && params[params.length-1]=='"') || (params[0]=="'" && params[params.length-1]=="'")){ - params= params.substring(1, params.length-1); - } - return params; - } - public static URIEncode(params: string):string { - return encodeURIComponent(params); - } - public static URIDecode(params: string):string { - return decodeURIComponent(params); - } - public static b64DecodeUnicode(str) { - return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) { - return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); - }).join('')); - } - - -} diff --git a/portal-2/src/assets/Home_24white.svg b/portal-2/src/assets/Home_24white.svg deleted file mode 100644 index db4e815d..00000000 --- a/portal-2/src/assets/Home_24white.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/portal-2/src/assets/OA DISCOVER_A.png b/portal-2/src/assets/OA DISCOVER_A.png deleted file mode 100644 index e8c097c5df496bee6074c83ba25e1dda4f68b165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24028 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 P0#&ZGm% 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 CXvnPq diff --git a/portal-2/src/assets/OA DISCOVER_B.png b/portal-2/src/assets/OA DISCOVER_B.png deleted file mode 100644 index 26d484664af1b90cfcdf92e99d30553b0da25465..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39239 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 diff --git a/portal-2/src/assets/closedAccess.png b/portal-2/src/assets/closedAccess.png deleted file mode 100644 index b1d033cee919e1a13057cce679875fedb0d65b0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3607 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 Ef-cvre*gdg diff --git a/portal-2/src/assets/common/Home-icon.png b/portal-2/src/assets/common/Home-icon.png deleted file mode 100644 index 6648060e3a1d5f12df6a71df6085ccfdc3d885dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3119 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 JPDHLkV1kx9)Jp&W diff --git a/portal-2/src/assets/common/Logo_Horizontal.png b/portal-2/src/assets/common/Logo_Horizontal.png deleted file mode 100644 index 797a31bf0c08ba7276e93a6dc92d3acbf34050af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12549 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 diff --git a/portal-2/src/assets/common/Logo_Horizontal_white_small.png b/portal-2/src/assets/common/Logo_Horizontal_white_small.png deleted file mode 100644 index e8a3a6acc61a79cdf51c77fbeeb8294dc065f0e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4630 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 M07*qoM6N<$g4Tq*yZ`_I diff --git a/portal-2/src/assets/common/Symbol.png b/portal-2/src/assets/common/Symbol.png deleted file mode 100644 index b58e78dca843ac5148a5ddbc6ad9001d21dd531b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8018 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 P`%8}0Gt;fncEbE0A^aOC diff --git a/portal-2/src/assets/common/custom.css b/portal-2/src/assets/common/custom.css deleted file mode 100644 index b9f88055..00000000 --- a/portal-2/src/assets/common/custom.css +++ /dev/null @@ -1,1111 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Josefin+Sans|Raleway|Roboto|Roboto:900|Roboto+Condensed|Roboto+Mono|Roboto+Slab'); -@import url('https://fonts.googleapis.com/css?family=Open+Sans:300,400'); -@import url('https://fonts.googleapis.com/css?family=Merriweather|Merriweather+Sans'); -@import url('https://fonts.googleapis.com/css?family=Roboto+Slab'); -@import url('https://fonts.googleapis.com/css?family=Lora'); -@import url('https://fonts.googleapis.com/css?family=Raleway|Raleway+Dots'); - - -body { -font-family: 'Open Sans', sans-serif!important; -font-family: Raleway, sans-serif!important; -font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif!important; -font-size: 14px; -font-weight:normal!important; -} -h1, .uk-h1, h2, .uk-h2, h3, .uk-h3 { - font-family: 'Open Sans', sans-serif !important; - text-transform:none!important; - font-weight:300; -} -h4, .uk-h4, h5, .uk-h5 { - font-family: 'Open Sans', sans-serif !important; - font-weight:bold; -} - -h6, .uk-h6 { - font-family: 'Open Sans', sans-serif !important; - font-weight: normal; -} -h2, .uk-h2 { - font-size:36px; -} - -a, .uk-link { - color: #2D72D6; -} -a:hover, .uk-link:hover{ -color: #D53B23; -} - -.uk-badge, .badge, a.badge { border-radius: 2px;} - - -.hero_to_top { -} -.image-front-topbar { - margin-top:-40px; -} - -.tm-header { -/*padding-top:40px;*/ -} - -.tm-toolbar { -border-top: 5px solid #05007A; -position:relative; -color: #fff; -padding-top: 0px; -padding-bottom:0px; -background:rgba(255,255,255, 0.0); -z-index:10000; -/*background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0)), url(/images/toolbar_bg.png);*/ - -} -.tm-toolbar .forimage { -background:rgba(255,255,255, 0.4); -} - -.uk-section-overlap { - /*margin-top:-40px!important;*/ -} -.uk-sticky{ -} - -.tm-header .uk-navbar-left {position:relative;z-index:9999!important;} -.tm-header .uk-logo {padding: 5px 10px 10px 10px; position:relative;z-index:1000!important;} -.tm-header .uk-navbar-transparent{ - /* background:rgba(255,255,255, 0.7);*/ - padding-top:4px; -} -.inner { - left:0px; - background-color: #05007A; - margin-top:-5px; -} -.tm-toolbar .uk-container { -padding-right:0px; -} - -.tm-toolbar ul.uk-subnav.uk-subnav-line{ - margin-top:-10px; - background-color: #05007A; - padding:10px 10px 0px 0px; - transform: skew(25deg); - margin-right:10px; -} - -.tm-toolbar .uk-subnav-line li { - padding:5px 25px 5px 25px; - /*transition: background 0.2s;*/ - /* display:inline-block;*/ - font-family:Roboto!important; - font-weight:900!important; - text-transform:uppercase!important; - font-size:12px!important; - opacity:1!important; - display:inline-block; -} -.tm-toolbar .uk-subnav-line > :before { - content: none; - display: block; - /* display: inline-block*/ - height: 10px; - vertical-align: middle -} - -.uk-subnav-line > :nth-child(n + 2):before { - margin-right: 10px; - border-left: 0px ; -} - -.tm-toolbar .uk-subnav-line li a{ - display: block; - text-decoration:none; - transform: skew(-25deg); - font-family:Roboto:900!important; - text-transform:uppercase!important; - font-size:13px!important; - opacity:1!important; - color:#fff!important; -} - - -.tm-toolbar .uk-subnav-line li:hover { - color:#05007A!important; - background:#fff; - display: block; -} - - -.tm-toolbar .uk-subnav-line .uk-active .home-hover li:hover, -li.uk-active.home-hover -{ - background:#05007A!important; -} - -.tm-toolbar .uk-dotnav, .tm-toolbar .uk-subnav { - margin-bottom:0px!important; -} - -.tm-toolbar .uk-subnav-line li a:hover, -.tm-toolbar .uk-subnav-line li:hover a { - display: block; - color:#05007A!important; -} - -.movetotop .uk-slidenav-position{ - /*top:-130px; - z-index:5;*/ -} - -.uk-navbar-container:not(.uk-navbar-transparent) { - background: #fff; - box-shadow: 2px 15px 50px rgba(41, 44, 61, .1); -} - -.uk-navbar-sticky { - box-shadow: 2px 15px 50px rgba(41, 44, 61, .1); -} - -.navbar .nav>li>.dropdown-menu, .uk-navbar-dropdown -{display: none; -position: absolute; -z-index: 1020; -box-sizing: border-box; -width: 200px; -padding: 25px; -background: #fff; -color: #4F5260; -border-radius: 2px; -box-shadow: 2px 15px 50px rgba(41, 44, 61, .1) -} - - -/* -.uk-light a, .uk-light .uk-link, -.uk-section-primary:not(.uk-preserve-color) a, .uk-section-primary:not(.uk-preserve-color) .uk-link, -.uk-section-secondary:not(.uk-preserve-color) a, .uk-section-secondary:not(.uk-preserve-color) .uk-link, -.uk-tile-primary:not(.uk-preserve-color) a, .uk-tile-primary:not(.uk-preserve-color) .uk-link, -.uk-tile-secondary:not(.uk-preserve-color) a, .uk-tile-secondary:not(.uk-preserve-color) .uk-link, -.uk-card-primary.uk-card-body a, .uk-card-primary.uk-card-body .uk-link, .uk-card-primary>:not([class*='uk-card-media']) a, -.uk-card-primary>:not([class*='uk-card-media']) .uk-link, .uk-card-secondary.uk-card-body a, -.uk-card-secondary.uk-card-body .uk-link, .uk-card-secondary>:not([class*='uk-card-media']) a, -.uk-card-secondary>:not([class*='uk-card-media']) .uk-link, .uk-overlay-primary a, .uk-overlay-primary .uk-link, -*/ -.uk-navbar-container:not(.uk-navbar-transparent) a, .uk-navbar-container:not(.uk-navbar-transparent) .uk-link, -.uk-offcanvas-bar a, .uk-offcanvas-bar .uk-link, .tm-toolbar a, .tm-toolbar .uk-link { - color: #292C3D -} - - -.uk-navbar-container:not(.uk-navbar-transparent) a, .uk-navbar-container:not(.uk-navbar-transparent) .uk-link, -.uk-offcanvas-bar a, .uk-offcanvas-bar .uk-link, .tm-toolbar a, .tm-toolbar .uk-link { -/*color:#292C3D; -color: #245BCC; -color: #2D72D6; -*/ -/* -font-size: 14px; -line-height: 18px; -*/ -} - -/*footer*/ -.footer-license { -font-size:11px!important; -line-height:16px!important; -} -.footer-license .uk-section-primary:not(.uk-preserve-color) a{ - color: #128DD5!important; - font-size:11px!important; -line-height:16px!important; - -} -.footer-license a:hover { - color: #D33A24; -} - -.uk-light .uk-navbar-nav>li>a, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a, .uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a, .uk-card-primary.uk-card-body .uk-navbar-nav>li>a, .uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a, .uk-card-secondary.uk-card-body .uk-navbar-nav>li>a, .uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a, .uk-overlay-primary .uk-navbar-nav>li>a, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a, .uk-offcanvas-bar .uk-navbar-nav>li>a, .tm-toolbar .uk-navbar-nav>li>a { -color:#292C3D;} - -.uk-light .uk-navbar-nav>li.uk-active>a, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a, .uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a, .uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a, .uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a, .uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a, .uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a, .uk-overlay-primary .uk-navbar-nav>li.uk-active>a, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li.uk-active>a, .uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a, .tm-toolbar .uk-navbar-nav>li.uk-active>a -color:#292C3D;} - -.uk-light .uk-navbar-nav>li>a::before, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a::before, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a::before, -.uk-card-primary.uk-card-body .uk-navbar-nav>li>a::before, -.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a::before, . -uk-card-secondary.uk-card-body .uk-navbar-nav>li>a::before, -.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a::before, -.uk-overlay-primary .uk-navbar-nav>li>a::before, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a::before, -.uk-offcanvas-bar .uk-navbar-nav>li>a::before, .tm-toolbar .uk-navbar-nav>li>a::before { - -background-color: #128DD5; -} -.uk-navbar-nav>li>a::before { -/*height:2px;*/ -background-color: #128DD5!important; -} -.uk-light .uk-navbar-nav>li:hover>a, .uk-light .uk-navbar-nav>li>a:focus, .uk-light .uk-navbar-nav>li>a.uk-open, -.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a, -.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus, -.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open, -.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a, .uk-card-primary.uk-card-body .uk-navbar-nav>li>a:focus, -.uk-card-primary.uk-card-body .uk-navbar-nav>li>a.uk-open, -.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a, -.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:focus, -.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a.uk-open, -.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a, -.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:focus, -.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a.uk-open, -.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a, -.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:focus, -.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a.uk-open, -.uk-overlay-primary .uk-navbar-nav>li:hover>a, .uk-overlay-primary .uk-navbar-nav>li>a:focus, -.uk-overlay-primary .uk-navbar-nav>li>a.uk-open, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li:hover>a, -.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a:focus, -.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a.uk-open, -.uk-offcanvas-bar .uk-navbar-nav>li:hover>a, .uk-offcanvas-bar .uk-navbar-nav>li>a:focus, -.uk-offcanvas-bar .uk-navbar-nav>li>a.uk-open, .tm-toolbar .uk-navbar-nav>li:hover>a, -.tm-toolbar .uk-navbar-nav>li>a:focus, .tm-toolbar .uk-navbar-nav>li>a.uk-open { -color: #128DD5; -} - -.uk-light .uk-navbar-nav > li:hover > a, .uk-light .uk-navbar-nav > li > a:focus, -.uk-light .uk-navbar-nav > li > a.uk-open, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li:hover > a, -.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a:focus, -.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a.uk-open, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li:hover > a, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a:focus, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a.uk-open, -.uk-card-primary.uk-card-body .uk-navbar-nav > li:hover > a, .uk-card-primary.uk-card-body .uk-navbar-nav > li > a:focus, -.uk-card-primary.uk-card-body .uk-navbar-nav > li > a.uk-open, .uk-card-primary > :not([class * ='uk-card-media']) .uk-navbar-nav > li:hover > a, -.uk-card-primary > :not([class * ='uk-card-media']) .uk-navbar-nav > li > a:focus, -.uk-card-primary > :not([class * ='uk-card-media']) .uk-navbar-nav > li > a.uk-open, -.uk-card-secondary.uk-card-body .uk-navbar-nav > li:hover > a, .uk-card-secondary.uk-card-body .uk-navbar-nav > li > a:focus, -.uk-card-secondary.uk-card-body .uk-navbar-nav > li > a.uk-open, .uk-card-secondary > :not([class * ='uk-card-media']) .uk-navbar-nav > li:hover > a, -.uk-card-secondary > :not([class * ='uk-card-media']) .uk-navbar-nav > li > a:focus, -.uk-card-secondary > :not([class * ='uk-card-media']) .uk-navbar-nav > li > a.uk-open, -.uk-overlay-primary .uk-navbar-nav > li:hover > a, .uk-overlay-primary .uk-navbar-nav > li > a:focus, -.uk-overlay-primary .uk-navbar-nav > li > a.uk-open, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav > li:hover > a, -.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav > li > a:focus, -.uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav > li > a.uk-open, -.uk-offcanvas-bar .uk-navbar-nav > li:hover > a, .uk-offcanvas-bar .uk-navbar-nav > li > a:focus, -.uk-offcanvas-bar .uk-navbar-nav > li > a.uk-open, .tm-toolbar .uk-navbar-nav > li:hover > a, -.tm-toolbar .uk-navbar-nav > li > a:focus, .tm-toolbar .uk-navbar-nav > li > a.uk-open { - color: #128DD5!important; -} -.uk-light .uk-navbar-nav>li.uk-active>a, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a, .uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a, .uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a, .uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a, .uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a, .uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a, .uk-overlay-primary .uk-navbar-nav>li.uk-active>a, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li.uk-active>a, .uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a, .tm-toolbar .uk-navbar-nav>li.uk-active>a { - color: #128DD5!important; -} -.uk-light a:hover, .uk-light .uk-link:hover, -.uk-section-primary:not(.uk-preserve-color) a:hover, .uk-section-primary:not(.uk-preserve-color) .uk-link:hover, -.uk-section-secondary:not(.uk-preserve-color) a:hover, .uk-section-secondary:not(.uk-preserve-color) .uk-link:hover, -.uk-card-primary.uk-card-body a:hover, .uk-card-primary.uk-card-body .uk-link:hover, -.uk-card-primary>:not([class*='uk-card-media']) a:hover, .uk-card-primary>:not([class*='uk-card-media']) .uk-link:hover, -.uk-card-secondary.uk-card-body a:hover, .uk-card-secondary.uk-card-body .uk-link:hover, -.uk-card-secondary>:not([class*='uk-card-media']) a:hover, .uk-card-secondary>:not([class*='uk-card-media']) .uk-link:hover, -.uk-overlay-primary a:hover, .uk-overlay-primary .uk-link:hover, -.uk-navbar-container:not(.uk-navbar-transparent) a:hover, .uk-navbar-container:not(.uk-navbar-transparent) .uk-link:hover, -.uk-offcanvas-bar a:hover, .uk-offcanvas-bar .uk-link:hover, .tm-toolbar a:hover, .tm-toolbar .uk-link:hover { - color: #128DD5!important; -} - -.uk-navbar-dropdown-nav>li.uk-active>a { - color: #128DD5!important; -} -.uk-light .uk-navbar-nav > li > a:active, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li > a:active, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li > a:active, -.uk-card-primary.uk-card-body .uk-navbar-nav > li > a:active, .uk-card-primary > :not([class * ='uk-card-media']) .uk-navbar-nav > li > a:active, -.uk-card-secondary.uk-card-body .uk-navbar-nav > li > a:active, .uk-card-secondary > :not([class * ='uk-card-media']) .uk-navbar-nav > li > a:active, -.uk-overlay-primary .uk-navbar-nav > li > a:active, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav > li > a:active, -.uk-offcanvas-bar .uk-navbar-nav > li > a:active, .tm-toolbar .uk-navbar-nav > li > a:active { - color: #292C3D!important; -} - -.uk-light .uk-navbar-nav > li.uk-active > a, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav > li.uk-active > a, -.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav > li.uk-active > a, -.uk-card-primary.uk-card-body .uk-navbar-nav > li.uk-active > a, .uk-card-primary > :not([class * ='uk-card-media']) .uk-navbar-nav > li.uk-active > a, -.uk-card-secondary.uk-card-body .uk-navbar-nav > li.uk-active > a, -.uk-card-secondary > :not([class * ='uk-card-media']) .uk-navbar-nav > li.uk-active > a, -.uk-overlay-primary .uk-navbar-nav > li.uk-active > a, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav > li.uk-active > a, -.uk-offcanvas-bar .uk-navbar-nav > li.uk-active > a, .tm-toolbar .uk-navbar-nav > li.uk-active > a { - color: #292C3D!important; -} -.uk-light .uk-navbar-nav>li>a:active, .uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active, .uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active, .uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active, .uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active, .uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active, .uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active, .uk-overlay-primary .uk-navbar-nav>li>a:active, .uk-navbar-container:not(.uk-navbar-transparent) .uk-navbar-nav>li>a:active, .uk-offcanvas-bar .uk-navbar-nav>li>a:active, .tm-toolbar .uk-navbar-nav>li>a:active { -color:#128DD5!important; -} - -.uk-navbar-dropdown-nav { - font-size:14px; -} -.uk-navbar-nav>li>a, .uk-navbar-item, .uk-navbar-toggle, .navbar .brand, .navbar-search, .navbar .nav>li>a { - font-size: 14px; - font-family: Roboto; - font-family: "Merriweather", serif; - font-family: 'Merriweather Sans', sans-serif; - font-family: 'Roboto Slab', serif; - font-size: 16px; - line-height: 23px; -text-transform:none; -color: rgba(0, 0, 0, 0.8)!important; - font-weight: 500 !important; -} -.uk-nav-default .uk-nav-header, -.uk-navbar-dropdown-nav .uk-nav-header { -color: #245CCF; -font-size:14px; -} - -.sidemenu .uk-h3{ - -padding-bottom: 15px; -font-weight: 300; -text-transform: none; -color:#040067; -} -.sidemenu .uk-nav, .uk-nav ul, .dropdown-menu { -font-weight: 300; -font-size: 14px; -color: #80828B; - -} -.sidemenu ul>li>ul, .sidemenu ul>li>ol, .sidemenu ol>li>ol, .sidemenu ol>li>ul{ -padding-left: 40px; -} -.sidemenu ul>li>ul a { -color: #80828B!important; -color: rgba(99, 104, 114, 0.8)!important; -} -.sidemenu ul>li>ul a:hover { -color: #D53B23!important; -} -.uk-nav-header:not(:first-child) {margin-top:10px;} -.uk-navbar-dropdown, .navbar .nav>li>.dropdown-menu { - background:#fff; -} -.uk-nav>li>a, -.uk-navbar-dropdown-nav>li>a, -.uk-navbar-dropdown-nav .uk-nav-sub a { - color:#292C3D; - font-weight:300; - padding:4px 0; -} -.uk-section-secondary:not(.uk-preserve-color) h3, -.uk-section-secondary:not(.uk-preserve-color) h3 a, -.uk-section-secondary:not(.uk-preserve-color) a:hover { color:#444!important;} - - -.uk-article-title { -font-size: 38px; -line-height: 1.1; -} - -.uk-text-meta { -font-size: 14px; -line-height: 1.4; -color: #90929D; -font-family: PT Serif; -font-weight: 400; -text-transform: none; -letter-spacing: 0; -font-style: italic; -} -.uk-card-default .uk-card-title { -color: #292C3D !important; - -} -.uk-light .uk-text-meta, .uk-section-primary:not(.uk-preserve-color) .uk-text-meta, .uk-section-secondary:not(.uk-preserve-color) .uk-text-meta, .uk-card-primary.uk-card-body .uk-text-meta, .uk-card-primary>:not([class*='uk-card-media']) .uk-text-meta, .uk-card-secondary.uk-card-body .uk-text-meta, .uk-card-secondary>:not([class*='uk-card-media']) .uk-text-meta, .uk-overlay-primary .uk-text-meta, .uk-navbar-container:not(.uk-navbar-transparent) .uk-text-meta, .uk-offcanvas-bar .uk-text-meta, .tm-toolbar .uk-text-meta{ -color: #90929D; -} - -.uk-text-primary {color: #040067!important;} -.uk-text-secondary {color: #00a0de!important;} -.uk-section-primary { - background: #040067; -} -.uk-section-secondary { - background: #00a0de; -} -.first_page_section { - /*position: relative;*/ - } -.first_page_section .uk-section>:last-child { -position: relative; -top: 50%; -transform: translateY(-50%); -} - -.first_page_section .first_page_banner_headline { - /*position: relative;*/ - font-family: 'Open Sans', sans-serif; - font-weight: 300; - color:#fff; - -} -.first_page_panel h3.uk-h1 { - color:#fff; -} -.first_page_panel { - border: 0px solid #e5e5e7!important; - padding:20px 20px!important; -/*width:100%!important;*/ - font-size:24pt!important; - padding:20px!important; - color:#fff; -} -.first_page_panel .banner_text_bottom { - font-size:20pt; - padding:20px; -} -.mainHdr {background-color: rgb(4, 0, 103)!important; -} - - -/*tabs*/ -.wk-tab::before { - content: ""; - position: absolute; - bottom: 0; - left: 20px; - right: 0; - border-bottom: 1px solid #e5e5e5; -} -.wk-tab>li.wk-active>a { -border-color: transparent transparent #1678CB transparent !important; -background:tranparent; -border-bottom: 2px solid #1678CB; -} -.wk-tab>*>a { - display: block; - text-align: center; - padding: 9px 20px; - color: #444!important; - border-bottom: 2px solid transparent; - font-size: 12px; - text-transform: uppercase; - -webkit-transition: color 0.1s ease-in-out; - transition: color 0.1s ease-in-out; - line-height: 20px; -} - -.wk-tab>li.wk-open>a, .wk-tab>li>a:focus, .wk-tab>li>a:hover { -border-color: transparent transparent #1678CB transparent !important; -background: transparent!important; -color: #1678CB!important; -outline: 0 -} - -.serviceicon .wk-panel h3{ text-transform: uppercase!important; font-weight: 700; font-size:12px; -} -.serviceicon .wk-panel:hover h3{ - color: #D53B23!important; -} -.serviceicon .wk-margin, -.serviceicon .wk-panel-teaser, .serviceicon .wk-panel-title {margin-bottom:10px;} -.serviceicon *+.wk-margin {margin-top:10px;} - -.key_message { - color: #128DD5!important; -} -.larger-font { - font-size:120%; -} - -.nspArt h4.nspHeader { -font-family: 'Open Sans', sans-serif !important; -font-weight: 400; -font-size: 16px; -margin: 0; -padding: 5px 0 5px 0; -} -.nspArt p, .nspArt ul, .nspArt ol, .nspArt dl, .nspArt pre, .nspArt address, .nspArt fieldset, .nspArt figure { - margin-top: 0px; - margin-bottom: 8px; -} -.nspArt p.nspText {margin-bottom:15px;} -.readon , .readon:link{ - margin: 0; - border: 1px solid #eaeaea; - overflow: visible; - font: inherit; - color: inherit; - text-transform: none; - display: inline-block; - box-sizing: border-box; - padding: 0 25px; - vertical-align: middle; - font-size: 13px; - line-height: 40px; - text-align: center; - text-decoration: none; - -webkit-transition: .1s ease-in-out; - transition: .1s ease-in-out; - -webkit-transition-property: color, background-color, border-color, box-shadow; - transition-property: color, background-color, border-color, box-shadow; - font-family: Roboto; - font-weight: normal; - text-transform: uppercase; - border-radius: 2px; - background-color: #fff; - color: #5b5b5b; - box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.07); -} - -.readon:hover{ -background-color: #fff; -color: #00a0de; -box-shadow: 0 6px 50px rgba(0, 0, 0, 0.05); -} -.banner_text_white {font-weight: 300; font-size: 28px; color:white;} - - -/*custom classes */ -.partner_slider .wk-link-reset, .partner_slider .wk-link-reset a, .partner_slider .wk-link-reset a:focus, -.partner_slider .wk-link-reset a:hover, .partner_slider .wk-link-reset:focus, .partner_slider .wk-link-reset:hover { -color: black; -} -.dark-divider hr, .dark-divider .uk-hr { -border-top: 1px solid #6c6c6c; -} - -/*events*/ -.calendar h3{text-transform:none; font-weight:300; margin-bottom:5px; margin-top:5px;} -.mod_events_latest_table td { - padding-top:5px; - padding-bottom:5px; -} -.mod_events_latest_table td p{ - margin-bottom:10px; - margin-top:0px; -} - -.mod_events_latest_date { - width: 18%; - float: left; - position: relative; - color:#757575; - color:#fff; - font-size:12px!important; - background: #9c9c9c; - font-weight:400; - /* - border-radius: 1px; - -moz-border-radius: 1px; - -webkit-border-radius: 1px; - border: 1px solid #757575; - -moz-box-shadow: 0px 0px 3px #757575; - -webkit-box-shadow: 0px 0px 3px #757575; - box-shadow: 0px 0px 3px #757575; - */ - margin-right:8px; - margin-top:5px; - text-align:center; - padding:10px 0px; - line-height:20px; - -} -.mod_events_latest_date .larger_font { - font-size:28px!important; - font-weight:700!important;} - -.mod_events_latest_time { - //float: left; - position: relative; - width: 75%; - overflow:visible; - line-height:14px; - font-weight:400; - font-size:12px; - padding: 5px 0px; - margin-bottom: 8px; - text-transform:none; -} -.mod_events_latest_time { - font-size:12px; -} -.mod_events_latest_table td .content{ - font-size:12px!important; - font-weight:300; - text-transform:none; -} -.mod_events_latest_table td .hdr{ - font-size:14px!important; - line-height: 16px; - font-weight:400!important; - text-transform:none; -} -.mod_events_latest_rsslink a { -color: #767779; - -} -.mod_events_latest_rsslink{ -padding: 30; -line-height: 1.625; -background: 0; -color: #767779; -position: relative; -padding-right: 27px; -margin: 0; -border: 0; -overflow: visible; -font: inherit; -display: block; -box-sizing: border-box; -vertical-align: middle; -font-size: 13px; -display:inline-block; -text-decoration: none; --webkit-transition: .1s ease-in-out; -transition: .1s ease-in-out; --webkit-transition-property: color, background-color, border-color, box-shadow; -transition-property: color, background-color, border-color, box-shadow; -font-family: Roboto; -font-weight: normal; -text-transform: uppercase; -border-radius: 2px; -background-origin: border-box; -} -.mod_events_latest_rsslink a:hover { -color: #00a0de; - -} -.mod_events_latest_rsslink:hover::before { -background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2223%22%20height%3D%2211%22%20viewBox%3D%220%200%2023%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%2300a0de%22%20points%3D%2217%201%2022%205.5%2017%2010%20%22%3E%3C%2Fpolyline%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%2300a0de%22%20x1%3D%220%22%20y1%3D%225.5%22%20x2%3D%2222.4%22%20y2%3D%225.5%22%3E%3C%2Fline%3E%0A%3C%2Fsvg%3E"); -background-position: 100% 50%; - -} -.mod_events_latest_rsslink::before{ -content: ""; -position: absolute; -top: 0; -bottom: 0; -right: 0; -width: 22px; -background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2223%22%20height%3D%2211%22%20viewBox%3D%220%200%2023%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23767779%22%20points%3D%2217%201%2022%205.5%2017%2010%20%22%3E%3C%2Fpolyline%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23767779%22%20x1%3D%220%22%20y1%3D%225.5%22%20x2%3D%2222.4%22%20y2%3D%225.5%22%3E%3C%2Fline%3E%0A%3C%2Fsvg%3E"); -background-repeat: no-repeat; -background-position: calc(100% - 5px) 50%; --webkit-transition: background-position .2s ease-out; -transition: background-position .2s ease-out; -} -.mod_events_latest_callink a, .mod_events_latest_callink a:hover{ - color: #fff!important; -} -.mod_events_latest_callink { -padding:0px; - margin:10px 0px; - background-color: #00a0de; - color: #fff!important; - display: inline-block; - box-sizing: border-box; -padding: 0 25px; -vertical-align: middle; -font-size: 13px; -line-height: 40px; -text-align: center; -text-decoration: none; --webkit-transition: .1s ease-in-out; -transition: .1s ease-in-out; --webkit-transition-property: color, background-color, border-color, box-shadow; -transition-property: color, background-color, border-color, box-shadow; -font-family: Roboto; -font-weight: normal; -text-transform: uppercase; -border-radius: 2px; -background-origin: border-box; -} - -.mod_events_latest_callink:hover { -background-color: #008ec5; -color: #fff!important; -} -/* news pro */ -.nspLinks ul li h4 { -font-weight: 400; -font-size: 16px; -line-height: 18px; -} -.nspLinks ul li p { - text-transform:none; - font-size: 14px; - font-weight:300; - margin:10px; -} -.readon-button{ -text-transform: none; -font-size: 14px; -line-height: 20px; -font-weight: 300; -font-family: 'Open Sans', sans-serif !important; -} -.readon-button:hover { -} -.newsletter .uk-h2 {font-size:28px!important;} -.newsletter .uk-icon { -padding-left: 10px; -padding-bottom: 15px; -vertical-align: middle; -} -.newsletter .el-title{ -display: inline-block; -fill: currentcolor; -margin-bottom:0; -} - -.newsletter .acymailing_mootoolsbutton a:link, -.newsletter .acymailing_mootoolsbutton a:visited { -background:none!important; -border:none!important; -text-shadow:none!important; -color: rgba(255, 255, 255, 0.5)!important; -font-size: 14px; -font-weight: 300; -line-height: 20px; -} - -.newsletter .acysubbuttons input.button, .newsletter .acysubbuttons .button { -padding: 0 15px!important; -line-height: 30px; -font-size: 13px; -border-radius: 2px; -margin: 0; -border: 0; -overflow: visible; -font-family: Roboto; -font-weight: normal; - -color: inherit; -text-transform: none; -display: inline-block; -box-sizing: border-box; -vertical-align: middle; -text-align: center; -text-decoration: none; --webkit-transition: .1s ease-in-out; -transition: .1s ease-in-out; --webkit-transition-property: color, background-color, border-color, box-shadow; -transition-property: color, background-color, border-color, box-shadow; -font-family: Roboto; -font-weight: normal; -text-transform: uppercase; -background-origin: border-box; -box-shadow: 0 3px 12px rgba(0, 0, 0, 0.07); -} - -.newsletter .acysubbuttons input.button:hover, .newsletter .acysubbuttons .button:hover { -color:#444; -background-color:#fff!important; -background-image:none!important; -} - -.newsletter .acysubbuttons input.button:hover, .newsletter .acysubbuttons .button:hover, -.newsletter .acysubbuttons button.validate:hover, .newsletter .acymailing_mootoolsbutton a:hover, -.newsletter .acymailing_mootoolsbutton a:active { -box-shadow:none!important; --moz-box-shadow:none!important; --webkit-box-shadow:none!important; -color: #00a0de!important; -box-shadow: 0 6px 50px rgba(0, 0, 0, 0.05)!important; -} -.acymailing_module a.acymailing_togglemodule { -font-size: 14px; -font-weight: 300; -color: rgba(255, 255, 255, 0.5)!important; -} - - -/*login button */ -#btl .btl-panel > span .btl-dropdown { border:3!important;} - -#btl .btl-panel > span{ - border: 0px!important; - background-color: transparent!important; - color:#444!important; - padding-right:30px; - padding-left:6px; - height:0px!important; - line-height:20px!important; - margin:0px !important; - box-shadow: 0px 0px 0px; - border-radius:0px!important; - display: inline-table!important; - text-transform:none!important; - font-size: 14px; - font-family: 'Roboto Slab', serif; - font-size: 16px; - line-height: 23px; - font-weight: 500 !important; -} -.loginLink { -text-transform:none!important; -color: rgba(0, 0, 0, 0.8)!important; -} - -/*.btl-panel { - background: url(../images/key_login.png) right 40% no-repeat; -}*/ -#btl-panel-login >span { - border: 5px solid #d0d0d0!important; -} -.uk-navbar-item .btlogin{ color: red!important; -} - -#btl .btl-panel > #btl-panel-profile { -color: #040067!important; -font-size: 13px !important; -font-family: Roboto; -} - -.btl-content-block { --webkit-font-smoothing: antialiased; -background-attachment: scroll; -background-clip: border-box; -background-color: rgb(255, 255, 255); -background-image: none; -background-origin: padding-box; -background-size: auto; -border-bottom-left-radius: 2px; -border-bottom-right-radius: 2px; -border-top-left-radius: 2px; -border-top-right-radius: 2px; -box-shadow: rgba(41, 44, 61, 0.0980392) 2px 15px 50px 0px; -box-sizing: border-box; -color: rgb(79, 82, 96); -display: none; -height: auto; -margin-top: 0px; -padding-bottom: 25px; -padding-left: 25px; -padding-right: 25px; -padding-top: 25px; -position: absolute; -text-align: left; -text-rendering: optimizeLegibility; -} - -#btl-content #btl-content-profile #module-in-profile ul li img, -#btl-content #btl-content-profile #module-in-profile ul li a {padding-right: 5px!important;} - -#btl-content #btl-content-profile #module-in-profile ul li a { --webkit-font-smoothing: antialiased; --webkit-text-decoration-skip: objects; -/*background-color: rgba(0, 0, 0, 0);*/ -box-sizing: border-box; -color: rgb(41, 44, 61); -cursor: pointer; -display: block; -font-family: Roboto; -font-size: 14px; -font-weight: 300; -height: auto; -line-height: 20px; -list-style-image: none; -list-style-position: outside; -list-style-type: none; -padding-bottom: 6px; -padding-left: 0px; -padding-right: 0px; -padding-top: 6px; -text-align: left; -text-decoration: none; -text-rendering: optimizeLegibility; -width: auto; -} - -#module-in-profile ul li a:hover { -color: #128DD5 !important; -} - -/*FAQs*/ - -.searchifaq label { -font-family: Roboto, sans-serif; -font-weight:500; -font-size:16px; -color: #040067; -} -.btn, -.buttonifaq{ -margin-top:10px; -background-color: #fff; - color: #5b5b5b; - box-shadow: 0 3px 12px rgba(0,0,0,0.07); - display: inline-block; - border:none; - box-sizing: border-box; - padding: 0 25px; - vertical-align: middle; - font-size: 13px; - line-height: 40px; - text-align: center; - text-decoration: none; - -webkit-transition: .1s ease-in-out; - transition: .1s ease-in-out; - -webkit-transition-property: color,background-color,border-color,box-shadow; - transition-property: color,background-color,border-color,box-shadow; - font-family: Roboto; - font-weight: normal; - text-transform: uppercase; - border-radius: 2px; - background-origin: border-box; - } -.buttonifaq:hover{ background-color: #fff; - color: #00a0de; - box-shadow: 0 6px 50px rgba(0,0,0,0.05); -} -.ifaq h5.ifaq-item-header { -margin-bottom:10px; -margin-top:10px; -} -.ifaq-tpl-clean_blue_arrow .collapse-open .ifaq-item-header { -font-weight:normal; -} -.ifaq .uk-tab>*>a, .ifaq .nav-tabs>li>a { -text-align:left; -color: #2D72D6; -} -.ifaq .nav-tabs>li>a:hover { - border-color:transparent; - color: #D53B23; -} - -.ifaq .nav>li>a:hover, .ifaq .nav>li>a:focus { background:none;} - -.ifaq-tpl-clean_blue_arrow .ifaq-panel { -box-shadow:none; - border-bottom: 1px solid #eee; - -} - -.ifaq-tpl-clean_blue_arrow .ifaq-collapsible > a { -display: block; padding: 1px 0 1px 0px; -background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%236C6D74%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%3E%3C%2Frect%3E%0A%20%20%20%20%3Crect%20fill%3D%22%236C6D74%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E"); -background-repeat: no-repeat; -background-position: 98% 50%; -} - -.ifaq-tpl-clean_blue_arrow .ifaq-collapsible { - text-shadow:none; - background:transparent; - box-shadow:none; - border-bottom: 1px solid #eee; -} -.ifaq-tpl-clean_blue_arrow .collapse-open, .ifaq-tpl-clean_blue_arrow .collapse-open > a { - background: transparent; - background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%236C6D74%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E"); -background-repeat: no-repeat; - background-position: 98% 50%; -} -.ifaq-tpl-clean_blue_arrow .collapse-close:hover { - background:transparent; -} - -.ifaq-tpl-clean_blue_arrow .ifaq-collapsible > a:hover { -background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%236C6D74%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%3E%3C%2Frect%3E%0A%20%20%20%20%3Crect%20fill%3D%22%236C6D74%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E"); - background-repeat: no-repeat; - background-position: 98% 50%; -} - -.ifaq-tpl-clean_blue_arrow .collapse-open > a:hover { -background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%236C6D74%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E"); -background-repeat: no-repeat; -background-position: 98% 50%; -} - -/*widget accordion */ -.wk-accordion, .wk-text-left {display:block!important;} - - -.faq .wk-accordion-title { - text-transform:none; - font-weight: 400; - font-size:16px; -} - -/* for DISCOVERY PORTAL */ -.discoverHrd {background-color: #f25f30!important;} - -.search_box_bg .uk-input, .search_box_bg .uk-input:focus { -background-color: rgba(255, 255, 255, 1.0)!important; -color: rgba(0, 0, 0, 1.0)!important; -} -.search_box_bg .uk-input::placeholder{ -color: rgba(0, 0, 0, 0.6)!important; -} - -.search_box_bg.uk-text-background{ -background-color: rgba(255, 255, 255, 0.7)!important; -font-size:28px!important; -font-weight: 500; -} -.search_box_bg .uk-grid-divider>:not(.uk-first-column)::before { -border-left-color: rgba(255, 255, 255, 0.6)!important; -} - -/*tags */ -.uk-label-arrow{ - display: inline-block; - height: 21px; - margin: 0 10px 0 0; - padding: 0 7px 0 14px; - white-space: nowrap; - position: relative; - - background-color: #5A9EDA; - - color: white; - font: normal 11px/21px Arial, Tahoma, sans-serif; - text-decoration: none; - - border-top: 1px solid #5A9EDA; - border-bottom: 1px solid #5A9EDA; - border-right: 1px solid #5A9EDA; - border-radius: 1px 3px 3px 1px; -} -.uk-label-arrow:before { - content: ''; - position: absolute; - top: 5px; - left: -6px; - width: 10px; - height: 10px; - - background-color: #5A9EDA; - border-left: 1px solid #5A9EDA; - border-bottom: 1px solid #5A9EDA; - border-radius: 0 0 0 2px; -} -.uk-label-arrow:before { - -webkit-transform: scale(1, 1.5) rotate(45deg); - -moz-transform: scale(1, 1.5) rotate(45deg); - -ms-transform: scale(1, 1.5) rotate(45deg); - transform: scale(1, 1.5) rotate(45deg); -} -.uk-label-arrow:after { - content: ''; - position: absolute; - top: 7px; - left: 1px; - width: 5px; - height: 5px; - background: #FFF; - border-radius: 4px; - border: 1px solid #5A9EDA; -} -.uk-label-arrow a:hover { - color: #FFF; - text-shadow: -1px -1px 0 rgba(153,102,51,0.3); -} -.featurednews.uk-card-default { -background: rgba(255,255,255, 0.6)!important; -color: black; -} - -.omtd_secondary > .uk-section-default, -.omtd_secondary.uk-section-default{ - background:#E7F3F2!important; -} \ No newline at end of file diff --git a/portal-2/src/assets/common/ec_logo_inv_small.png b/portal-2/src/assets/common/ec_logo_inv_small.png deleted file mode 100644 index 60f14621a60281349a0fbda91a36181a7abc0d10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4060 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[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; -}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
    a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:l.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("',t,e)};s.onerror=function(){return a(640,320)},s.onload=function(){120===s.width&&90===s.height?r?a(640,320):(r=!0,s.src="//img.youtube.com/vi/"+o+"/0.jpg"):a(s.width,s.height)},s.src="//img.youtube.com/vi/"+o+"/maxresdefault.jpg",t.stopImmediatePropagation()}}}},"lightbox"),t.mixin({events:{showitem:function(t){var e,i=this,o=this.getItem();if(e=o.source.match(/(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/)){var s=e[2],r=function(t,e){return i.setItem(o,'',t,e)};n({type:"GET",url:"http://vimeo.com/api/oembed.json?url="+encodeURI(o.source),jsonp:"callback",dataType:"jsonp"}).then(function(t){return r(t.width,t.height)}),t.stopImmediatePropagation()}}}},"lightbox")}}function qt(t){if(!qt.installed){var e=t.util,i=e.$,n=e.each,o=e.pointerEnter,s=e.pointerLeave,r=e.Transition,a={};t.component("notification",{functional:!0,args:["message","status"],defaults:{message:"",status:"",timeout:5e3,group:null,pos:"top-center",onClose:null,clsClose:"uk-notification-close"},created:function(){a[this.pos]||(a[this.pos]=i('
    ').appendTo(t.container)),this.$mount(i('
    \n \n
    '+this.message+"
    \n
    ").appendTo(a[this.pos].show())[0])},ready:function(){var t=this,e=parseInt(this.$el.css("margin-bottom"),10);r.start(this.$el.css({opacity:0,marginTop:-1*this.$el.outerHeight(),marginBottom:0}),{opacity:1,marginTop:0,marginBottom:e}).then(function(){t.timeout&&(t.timer=setTimeout(t.close,t.timeout),t.$el.on(o,function(){return clearTimeout(t.timer)}).on(s,function(){return t.timer=setTimeout(t.close,t.timeout)}))})},events:{click:function(t){i(t.target).closest('a[href="#"]').length&&t.preventDefault(),this.close()}},methods:{close:function(t){var e=this,i=function(){e.onClose&&e.onClose(),e.$el.trigger("close",[e]).remove(),a[e.pos].children().length||a[e.pos].hide()};this.timer&&clearTimeout(this.timer),t?i():r.start(this.$el,{opacity:0,marginTop:-1*this.$el.outerHeight(),marginBottom:0}).then(i)}}}),t.notification.closeAll=function(e,i){n(t.instances,function(t,n){"notification"!==n.$options.name||e&&e!==n.group||n.close(i)})}}}function Yt(t){function e(i){return t.getComponent(i,"sortable")||i.parentNode&&e(i.parentNode)}function i(){var t=setTimeout(function(){return r.trigger("click")},0),e=function(i){i.preventDefault(),i.stopPropagation(),clearTimeout(t),u(r,"click",e,!0)};c(r,"click",e,!0)}if(!Yt.installed){var n=t.mixin,o=t.util,s=o.$,r=o.docElement,a=o.extend,l=o.getDimensions,h=o.isWithin,c=o.on,u=o.off,d=o.offsetTop,f=o.pointerDown,p=o.pointerMove,g=o.pointerUp,m=o.promise,v=o.win;t.component("sortable",{mixins:[n.class],props:{group:String,animation:Number,threshold:Number,clsItem:String,clsPlaceholder:String,clsDrag:String,clsDragState:String,clsBase:String,clsNoDrag:String,clsEmpty:String,clsCustom:String,handle:String},defaults:{group:!1,animation:150,threshold:5,clsItem:"uk-sortable-item",clsPlaceholder:"uk-sortable-placeholder",clsDrag:"uk-sortable-drag",clsDragState:"uk-drag",clsBase:"uk-sortable",clsNoDrag:"uk-sortable-nodrag",clsEmpty:"uk-sortable-empty",clsCustom:"",handle:!1},init:function(){var t=this;["init","start","move","end"].forEach(function(e){var i=t[e];t[e]=function(e){e=e.originalEvent||e,t.scrollY=window.scrollY;var n=e.touches&&e.touches[0]||e,o=n.pageX,s=n.pageY;t.pos={x:o,y:s},i(e)}})},events:(w={},w[f]="init",w),update:{write:function(){var t=this;if(this.clsEmpty&&this.$el.toggleClass(this.clsEmpty,!this.$el.children().length),this.drag){this.drag.offset({top:this.pos.y+this.origin.top,left:this.pos.x+this.origin.left});var e=d(this.drag),i=e+this.drag[0].offsetHeight;e>0&&ewindow.innerHeight+this.scrollY&&setTimeout(function(){return v.scrollTop(t.scrollY+5)},5)}}},methods:{init:function(t){var e=s(t.target),i=this.$el.children().filter(function(e,i){return h(t.target,i)});!i.length||e.is(":input")||this.handle&&!h(e,this.handle)||t.button&&0!==t.button||h(e,"."+this.clsNoDrag)||(t.preventDefault(),t.stopPropagation(),this.touched=[this],this.placeholder=i,this.origin=a({target:e,index:this.placeholder.index()},this.pos),r.on(p,this.move),r.on(g,this.end),v.on("scroll",this.scroll),this.threshold||this.start(t))},start:function(e){this.drag=s(this.placeholder[0].outerHTML.replace(/^
  • $/i,"div>")).attr("uk-no-boot","").addClass(this.clsDrag+" "+this.clsCustom).css({boxSizing:"border-box",width:this.placeholder.outerWidth(),height:this.placeholder.outerHeight()}).css(this.placeholder.css(["paddingLeft","paddingRight","paddingTop","paddingBottom"])).appendTo(t.container),this.drag.children().first().height(this.placeholder.children().height());var i=l(this.placeholder),n=i.left,o=i.top;a(this.origin,{left:n-this.pos.x,top:o-this.pos.y}),this.placeholder.addClass(this.clsPlaceholder),this.$el.children().addClass(this.clsItem),r.addClass(this.clsDragState),this.$el.trigger("start",[this,this.placeholder,this.drag]),this.move(e)},move:function(t){if(!this.drag)return void((Math.abs(this.pos.x-this.origin.x)>this.threshold||Math.abs(this.pos.y-this.origin.y)>this.threshold)&&this.start(t));this.$emit();var i="mousemove"===t.type?t.target:document.elementFromPoint(this.pos.x-document.body.scrollLeft,this.pos.y-document.body.scrollTop),n=e(i),o=e(this.placeholder[0]),r=n!==o;if(n&&!h(i,this.placeholder)&&(!r||n.group&&n.group===o.group)){if(i=n.$el.is(i.parentNode)&&s(i)||n.$el.children().has(i),r)o.remove(this.placeholder);else if(!i.length)return;n.insert(this.placeholder,i),~this.touched.indexOf(n)||this.touched.push(n)}},scroll:function(){var t=window.scrollY;t!==this.scrollY&&(this.pos.y+=t-this.scrollY,this.scrollY=t,this.$emit())},end:function(t){if(r.off(p,this.move),r.off(g,this.end),v.off("scroll",this.scroll),!this.drag)return void("mouseup"!==t.type&&h(t.target,"a[href]")&&(location.href=s(t.target).closest("a[href]").attr("href")));i();var n=e(this.placeholder[0]);this===n?this.origin.index!==this.placeholder.index()&&this.$el.trigger("change",[this,this.placeholder,"moved"]):(n.$el.trigger("change",[n,this.placeholder,"added"]),this.$el.trigger("change",[this,this.placeholder,"removed"])),this.$el.trigger("stop",[this]),this.drag.remove(),this.drag=null,this.touched.forEach(function(t){return t.$el.children().removeClass(t.clsPlaceholder+" "+t.clsItem)}),r.removeClass(this.clsDragState)},insert:function(t,e){var i=this;this.$el.children().addClass(this.clsItem);var n=function(){e.length?!i.$el.has(t).length||t.prevAll().filter(e).length?t.insertBefore(e):t.insertAfter(e):i.$el.append(t)};this.animation?this.animate(n):n()},remove:function(t){this.$el.has(t).length&&(this.animation?this.animate(function(){return t.detach()}):t.detach())},animate:function(t){var e=this,i=[],n=this.$el.children().toArray().map(function(t){return t=s(t),i.push(a({position:"absolute",pointerEvents:"none",width:t.outerWidth(),height:t.outerHeight()},t.position())),t}),o={position:"",width:"",height:"",pointerEvents:"",top:"",left:""};t(),n.forEach(function(t){return t.stop()}),this.$el.children().css(o),this.$updateSync("update",!0),this.$el.css("min-height",this.$el.height());var r=n.map(function(t){return t.position()});m.all(n.map(function(t,n){return t.css(i[n]).animate(r[n],e.animation).promise()})).then(function(){e.$el.css("min-height","").children().css(o),e.$updateSync("update",!0)})}}});var w}}function Rt(t){if(!Rt.installed){var e,i=t.util,n=t.mixin,o=i.$,s=i.doc,r=i.fastdom,a=i.flipPosition,l=i.isTouch,h=i.isWithin,c=i.pointerDown,u=i.pointerEnter,d=i.pointerLeave;t.component("tooltip",{attrs:!0,mixins:[n.togglable,n.position],props:{delay:Number,container:Boolean,title:String},defaults:{pos:"top",title:"",delay:0,animation:["uk-animation-scale-up"],duration:100,cls:"uk-active",clsPos:"uk-tooltip",container:!0},computed:{container:function(){return o(!0===this.$props.container&&t.container||this.$props.container||t.container)}},connected:function(){var t=this;r.mutate(function(){return t.$el.removeAttr("title").attr("aria-expanded",!1)})},disconnected:function(){this.hide()},methods:{show:function(){var t=this;e!==this&&(e&&e.hide(),e=this,s.on("click."+this.$options.name,function(e){h(e.target,t.$el)||t.hide()}),clearTimeout(this.showTimer),this.tooltip=o('").appendTo(this.container),this.$el.attr("aria-expanded",!0),this.positionAt(this.tooltip,this.$el),this.origin="y"===this.getAxis()?a(this.dir)+"-"+this.align:this.align+"-"+a(this.dir),this.showTimer=setTimeout(function(){t.toggleElement(t.tooltip,!0),t.hideTimer=setInterval(function(){t.$el.is(":visible")||t.hide()},150)},this.delay))},hide:function(){this.$el.is("input")&&this.$el[0]===document.activeElement||(e=e!==this&&e||!1,clearTimeout(this.showTimer),clearInterval(this.hideTimer),this.$el.attr("aria-expanded",!1),this.toggleElement(this.tooltip,!1),this.tooltip&&this.tooltip.remove(),this.tooltip=!1,s.off("click."+this.$options.name))}},events:(f={blur:"hide"},f["focus "+u+" "+c]=function(t){t.type===c&&l(t)||this.show()},f[d]=function(t){l(t)||this.hide()},f)});var f}}function Ut(t){function e(t,e){return e.match(new RegExp("^"+t.replace(/\//g,"\\/").replace(/\*\*/g,"(\\/[^\\/]+)*").replace(/\*/g,"[^\\/]+").replace(/((?!\\))\?/g,"$1.")+"$","i"))}function i(t,e){for(var i=[],n=0;ni[t]?n.ratio(e,t,i[t]):e}),e},cover:function(e,i){var n=this;return e=this.fit(e,i),t.each(e,function(t){return e=e[t]0||navigator.pointerEnabled&&navigator.maxTouchPoints>0,de=ue?le?"touchstart":"pointerdown":"mousedown",fe=ue?le?"touchmove":"pointermove":"mousemove",pe=ue?le?"touchend":"pointerup":"mouseup",ge=ue&&he?"pointerenter":"mouseenter",me=ue&&he?"pointerleave":"mouseleave",ve=ue&&le?"touchcancel":"pointercancel",we=L("transition","transition-end"),ye=L("animation","animation-start"),be=L("animation","animation-end"),$e={reads:[],writes:[],measure:function(t){return this.reads.push(t),F(this),t},mutate:function(t){return this.writes.push(t),F(this),t},clear:function(t){return q(this.reads,t)||q(this.writes,t)}};Y.prototype={positions:[],position:null,init:function(){var t=this;this.positions=[],this.position=null;var e=!1;this.handler=function(i){e||setTimeout(function(){var n=Date.now(),o=t.positions.length;o&&n-t.positions[o-1].time>100&&t.positions.splice(0,o),t.positions.push({time:n,x:i.pageX,y:i.pageY}),t.positions.length>5&&t.positions.shift(),e=!1},5),e=!0},Gt.on("mousemove",this.handler)},cancel:function(){this.handler&&Gt.off("mousemove",this.handler)},movesTo:function(t){if(this.positions.length<2)return!1;var e=X(t),i=this.positions[this.positions.length-1],n=this.positions[0];if(e.left<=i.x&&i.x<=e.right&&e.top<=i.y&&i.y<=e.bottom)return!1;var o=[[{x:e.left,y:e.top},{x:e.right,y:e.bottom}],[{x:e.right,y:e.top},{x:e.left,y:e.bottom}]];return e.right<=i.x||(e.left>=i.x?(o[0].reverse(),o[1].reverse()):e.bottom<=i.y?o[0].reverse():e.top>=i.y&&o[1].reverse()),!!o.reduce(function(t,e){return t+(R(n,e[0])R(i,e[1]))},0)}};var xe={};xe.args=xe.created=xe.events=xe.init=xe.ready=xe.connected=xe.disconnected=xe.destroy=function(e,i){return e=e&&!t.isArray(e)?[e]:e,i?e?e.concat(i):t.isArray(i)?i:[i]:e},xe.update=function(e,i){return xe.args(e,t.isFunction(i)?{write:i}:i)},xe.props=function(e,i){return t.isArray(i)&&(i=i.reduce(function(t,e){return t[e]=String,t},{})),xe.methods(e,i)},xe.computed=xe.defaults=xe.methods=function(e,i){return i?e?t.extend(!0,{},e,i):i:e};var ke,Ce,Te,_e,Se,Ee=function(t,e){return T(e)?t:e},Ae={x:["width","left","right"],y:["height","top","bottom"]},Oe={};i(function(){var e,i,o,s=0,r=0;"MSGesture"in window&&(_e=new MSGesture,_e.target=document.body),n(document,"click",function(){return Se=!0},!0);var a=function(t){var e=t.velocityX>1?"Right":t.velocityX<-1?"Left":t.velocityY>1?"Down":t.velocityY<-1?"Up":null;e&&void 0!==Oe.el&&(Oe.el.trigger("swipe"),Oe.el.trigger("swipe"+e))};n(document,"MSGestureEnd",a),n(document,"gestureend",a),n(document,de,function(t){o=t.touches?t.touches[0]:t,e=Date.now(),i=e-(Oe.last||e),Oe.el=Vt("tagName"in o.target?o.target:o.target.parentNode),ke&&clearTimeout(ke),Oe.x1=o.pageX,Oe.y1=o.pageY,i>0&&i<=250&&(Oe.isDoubleTap=!0),Oe.last=e,!_e||"pointerdown"!==t.type&&"touchstart"!==t.type||_e.addPointer(t.pointerId),Se=t.button>0}),n(document,fe,function(t){o=t.touches?t.touches[0]:t,Oe.x2=o.pageX,Oe.y2=o.pageY,s+=Math.abs(Oe.x1-Oe.x2),r+=Math.abs(Oe.y1-Oe.y2)}),n(document,pe,function(){Oe.x2&&Math.abs(Oe.x1-Oe.x2)>30||Oe.y2&&Math.abs(Oe.y1-Oe.y2)>30?Te=setTimeout(function(){void 0!==Oe.el&&(Oe.el.trigger("swipe"),Oe.el.trigger("swipe"+et(Oe.x1,Oe.x2,Oe.y1,Oe.y2))),Oe={}},0):"last"in Oe&&(isNaN(s)||s<30&&r<30?Ce=setTimeout(function(){var e=t.Event("tap");e.cancelTouch=it,void 0!==Oe.el&&Oe.el.trigger(e),Oe.isDoubleTap?(void 0!==Oe.el&&Oe.el.trigger("doubleTap"),Oe={}):ke=setTimeout(function(){ke=null,void 0!==Oe.el&&(Oe.el.trigger("singleTap"),Se||Oe.el.trigger("click")),Oe={}},300)}):Oe={},s=r=0)}),n(document,ve,it),n(window,"scroll",it)});var De=!1;n(document,"touchstart",function(){return De=!0},!0),n(document,"click",function(){De=!1}),n(document,"touchcancel",function(){return De=!1},!0);var Ie=Object.freeze({win:Xt,doc:Gt,docElement:Qt,isRtl:Jt,isReady:e,ready:i,on:n,off:o,transition:s,Transition:Zt,animate:r,Animation:Kt,isJQuery:a,isWithin:l,attrFilter:h,removeClass:c,createEvent:u,isInView:d,getIndex:f,isVoidElement:p,Dimensions:ee,query:g,Observer:re,requestAnimationFrame:ae,hasPromise:ce,hasTouch:ue,pointerDown:de,pointerMove:fe,pointerUp:pe,pointerEnter:ge,pointerLeave:me,pointerCancel:ve,transitionend:we,animationstart:ye,animationend:be,getStyle:M,getCssVar:j,fastdom:$e,$:Vt,bind:m,hasOwn:v,promise:w,classify:y,hyphenate:b,camelize:$,isString:k,isNumber:C,isUndefined:T,isContextSelector:_,getContextSelectors:S,toJQuery:E,toNode:A,toBoolean:O,toNumber:D,toList:I,toMedia:N,coerce:B,toMs:P,swap:H,ajax:t.ajax,contains:t.contains,each:t.each,Event:t.Event,extend:t.extend,map:t.map,merge:t.merge,isArray:t.isArray,isNumeric:t.isNumeric,isFunction:t.isFunction,isPlainObject:t.isPlainObject,MouseTracker:Y,mergeOptions:U,position:V,getDimensions:X,offsetTop:G,flipPosition:tt,isTouch:nt}),Ne=function(t){this._init(t)};Ne.util=Ie,Ne.data="__uikit__",Ne.prefix="uk-",Ne.options={},Ne.instances={},Ne.elements=[],function(t){var e=t.data;t.use=function(t){if(!t.installed)return t.call(null,this),t.installed=!0,this},t.mixin=function(e,i){i=(k(i)?t.components[i]:i)||this,e=U({},e),e.mixins=i.options.mixins,delete i.options.mixins,i.options=U(e,i.options)},t.extend=function(t){t=t||{};var e=this,i=t.name||e.options.name,n=ot(i||"UIkitComponent");return n.prototype=Object.create(e.prototype),n.prototype.constructor=n,n.options=U(e.options,t),n.super=e,n.extend=e.extend,n},t.update=function(i,n,o){if(void 0===o&&(o=!1),i=u(i||"update"),!n)return void rt(t.instances,i);if(n=A(n),o)do{rt(n[e],i),n=n.parentNode}while(n);else st(n,function(t){return rt(t[e],i)})};var i;Object.defineProperty(t,"container",{get:function(){return i||document.body},set:function(t){i=t}})}(Ne),function(t){t.prototype._callHook=function(t){var e=this,i=this.$options[t];i&&i.forEach(function(t){return t.call(e)})},t.prototype._callReady=function(){this._isReady||(this._isReady=!0,this._callHook("ready"),this._callUpdate())},t.prototype._callConnected=function(){var e=this;this._connected||(~t.elements.indexOf(this.$options.el)||t.elements.push(this.$options.el),t.instances[this._uid]=this,this._initEvents(),this._callHook("connected"),this._connected=!0,this._initObserver(),this._isReady||i(function(){return e._callReady()}),this._callUpdate())},t.prototype._callDisconnected=function(){if(this._connected){this._observer&&(this._observer.disconnect(),this._observer=null);var e=t.elements.indexOf(this.$options.el);~e&&t.elements.splice(e,1),delete t.instances[this._uid],this._initEvents(!0),this._callHook("disconnected"),this._connected=!1}},t.prototype._callUpdate=function(t){var e=this;t=u(t||"update"),"update"===t.type&&(this._computeds={});var i=this.$options.update;i&&i.forEach(function(i,n){if("update"===t.type||i.events&&~i.events.indexOf(t.type)){if(t.sync)return i.read&&i.read.call(e,t),void(i.write&&i.write.call(e,t));i.read&&!~$e.reads.indexOf(e._frames.reads[n])&&(e._frames.reads[n]=$e.measure(function(){i.read.call(e,t),delete e._frames.reads[n]})),i.write&&!~$e.writes.indexOf(e._frames.writes[n])&&(e._frames.writes[n]=$e.mutate(function(){i.write.call(e,t),delete e._frames.writes[n]}))}})}}(Ne),function(e){var i=0;e.prototype.props={},e.prototype._init=function(t){t=t||{},t=this.$options=U(this.constructor.options,t,this),this.$el=null,this.$name=e.prefix+b(this.$options.name),this.$props={},this._uid=i++,this._initData(),this._initMethods(),this._initComputeds(),this._callHook("created"),this._frames={reads:{},writes:{}},t.el&&this.$mount(t.el)},e.prototype._initData=function(){var e=this,i=t.extend(!0,{},this.$options.defaults),n=this.$options.data||{},o=this.$options.args||[],s=this.$options.props||{};if(i){o.length&&t.isArray(n)&&(n=n.slice(0,o.length).reduce(function(e,i,n){return t.isPlainObject(i)?t.extend(e,i):e[o[n]]=i,e},{}));for(var r in i)e.$props[r]=e[r]=v(n,r)?B(s[r],n[r],e.$options.el):i[r]}},e.prototype._initMethods=function(){var t=this,e=this.$options.methods;if(e)for(var i in e)t[i]=m(e[i],t)},e.prototype._initComputeds=function(){var t=this,e=this.$options.computed;if(this._computeds={},e)for(var i in e)at(t,i,e[i])},e.prototype._initProps=function(e){var i=this;this._computeds={},t.extend(this.$props,e||this._getProps());var n=[this.$options.computed,this.$options.methods];for(var o in i.$props)ct(n,o)&&(i[o]=i.$props[o])},e.prototype._initEvents=function(t){var e=this,i=this.$options.events;i&&i.forEach(function(i){if(v(i,"handler"))lt(e,t,i);else for(var n in i)lt(e,t,i[n],n)})},e.prototype._initObserver=function(){var e=this;if(!this._observer&&this.$options.props&&this.$options.attrs&&re){var i=t.isArray(this.$options.attrs)?this.$options.attrs:Object.keys(this.$options.props).map(function(t){return b(t)});this._observer=new re(function(){var t=e._getProps();i.some(function(i){return!ut(t[i],e.$props[i])})&&e.$reset(t)}),this._observer.observe(this.$options.el,{attributes:!0,attributeFilter:i.concat([this.$name,"data-"+this.$name])})}},e.prototype._getProps=function(){var t,e,i={},n=this.$el[0],o=this.$options.args||[],s=this.$options.props||{},r=n.getAttribute(this.$name)||n.getAttribute("data-"+this.$name);if(!s)return i;for(t in s)if(e=b(t),n.hasAttribute(e)){var a=B(s[t],n.getAttribute(e),n);if("target"===e&&(!a||0===a.lastIndexOf("_",0)))continue;i[t]=a}if(!r)return i;if("{"===r[0])try{r=JSON.parse(r)}catch(t){console.warn("Invalid JSON."),r={}}else if(o.length&&!~r.indexOf(":")){l={},l[o[0]]=r,r=l;var l}else{var h={};r.split(";").forEach(function(t){var e=t.split(/:(.+)/),i=e[0],n=e[1];i&&n&&(h[i.trim()]=n.trim())}),r=h}for(t in r||{})e=$(t),void 0!==s[e]&&(i[e]=B(s[e],r[t],n));return i}}(Ne),function(t){var e=t.data;t.prototype.$mount=function(t){var i=this.$options.name;if(t[e]||(t[e]={}),t[e][i])return void console.warn('Component "'+i+'" is already mounted on element: ',t);t[e][i]=this,this.$el=Vt(t),this._initProps(),this._callHook("init"),document.documentElement.contains(t)&&this._callConnected()},t.prototype.$emit=function(t){this._callUpdate(t)},t.prototype.$emitSync=function(t){this._callUpdate(u(t||"update",!0,!1,{sync:!0}))},t.prototype.$update=function(e,i){t.update(e,this.$el,i)},t.prototype.$updateSync=function(t,e){this.$update(u(t||"update",!0,!1,{sync:!0}),e)},t.prototype.$reset=function(t){this._callDisconnected(),this._initProps(t),this._callConnected()},t.prototype.$destroy=function(t){void 0===t&&(t=!1);var i=this.$options.el;i&&this._callDisconnected(),this._callHook("destroy"),i&&i[e]&&(delete i[e][this.$options.name],Object.keys(i[e]).length||delete i[e],t&&this.$el.remove())}}(Ne),function(e){var i=e.data;e.components={},e.component=function(i,n){var o=$(i);return t.isPlainObject(n)?(n.name=o,n=e.extend(n)):n.options.name=o,e.components[o]=n,e[o]=function(i,n){for(var s=arguments.length,r=Array(s);s--;)r[s]=arguments[s];return t.isPlainObject(i)?new e.components[o]({data:i}):e.components[o].options.functional?new e.components[o]({data:[].concat(r)}):Vt(i).toArray().map(function(t){return e.getComponent(t,o)||new e.components[o]({el:t,data:n||{}})})[0]},e._initialized&&!n.options.functional&&$e.measure(function(){return e[o]("[uk-"+i+"],[data-uk-"+i+"]")}),e.components[o]},e.getComponents=function(t){return t&&(t=a(t)?t[0]:t)&&t[i]||{}},e.getComponent=function(t,i){return e.getComponents(t)[i]},e.connect=function(t){var n;if(t[i])for(n in t[i])t[i][n]._callConnected();for(var o=0;o',We='',ze='',qe='',Ye='',Re='',Ue='',Ve='',Xe='',Ge='',Qe='',Je='',Ze='',Ke='',ti='',ei={},ii=new DOMParser;return Ne.version="3.0.0-beta.22",function(t){t.mixin.class=He,t.mixin.modal=je,t.mixin.position=Le,t.mixin.togglable=Me}(Ne),function(t){var e,i,o,s=null,r=0;Xt.on("load",t.update).on("resize",function(e){o||(ae(function(){t.update(e),o=!1}),o=!0)}).on("scroll",function(n){null===s&&(s=0),s!==window.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 b+xTk$@ZU+LBx}MC00000NkvXXu0mjf9Z&b} diff --git a/portal-2/src/assets/datasource.png b/portal-2/src/assets/datasource.png deleted file mode 100644 index 54417be8fcc6457e4c8659264bf803ddc035152d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4186 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 diff --git a/portal-2/src/assets/discover-custom.css b/portal-2/src/assets/discover-custom.css deleted file mode 100644 index 4e77b00a..00000000 --- a/portal-2/src/assets/discover-custom.css +++ /dev/null @@ -1,515 +0,0 @@ - -.tm-toolbar .uk-subnav-line .custom-discover-li { - color:#05007A !important; - background:#fff; - display: block; -} -.tm-toolbar .uk-subnav-line .custom-discover-li a{ - color:#05007A !important; -} - -.custom-discover-toolbar ul.uk-subnav.uk-subnav-line{ - background-color: #f25f30 !important; - } - - .custom-discover-toolbar .inner { - background-color: #f25f30 !important; - } - - .custom-discover-toolbar{ - border-top-color:#f25f30 !important; - } -.custom-footer{ - position:relative; - bottom:0; - left:0; -} -.custom-external { - background: rgba(0, 0, 0, 0) url("/assets/external-link.svg") no-repeat scroll left 10%; - min-height: 15px; - background-size: 15px 15px; - padding-left: 16px; -} -h2 .custom-external { - min-height: 20px; - background-size: 20px 20px; - padding-left: 21px; - background: rgba(0, 0, 0, 0) url("/assets/external-link.svg") no-repeat scroll left center; - -} - -.pseudo-external{ - padding-left: 16px; -} - -.custom-navbar-toggle-icon, .custom-user-mini-panel{ - color:#444 !important -} -.custom-user-mini-panel a{ - color:rgb(36, 91, 204); -} -.custom-main-content{ - min-height: 550px; -} - -.custom-autocomplete .uk-nav-autocomplete > li > a:hover { - background: #00a8e6 none repeat scroll 0 0; - box-shadow: 0 0 5px rgba(0, 0, 0, 0.05) inset; - color: #FFF; - outline: medium none; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1); -} - -.custom-autocomplete .uk-nav-navbar > li > a { - color: #444; -} -.custom-description-list-horizontal{ line-height:200%} -.uk-alert-default { - background: #fff none repeat scroll 0 0; - border: 1px solid #ddd; - border-radius: 4px; - color: #444; - height: 30px; - max-width: 100%; - padding: 4px 6px; - -} -.custom-hidden-dropdown-menu {position:static !important;} -.searchFilterBoxValues {overflow:auto; max-height:200px; } -.selected-filters-box {margin:5px; background-color:#F8F8F8; } -.search-form {margin:5px; } -.clickable { cursor:pointer; } -.search-filters .uk-accordion-title{ - font-size: 14px; - line-height: 18px; -} -.search-results { - min-height: 1100px; -} -.searchPaging { - min-height: 46px; -} -.helper-left-right { - margin-top: 75px; - max-width: 20%; -} - -.errors-in-searchTableView{ - margin-top: 75px; -} - -@media (min-width: 960px) { - .float-children-right-at-medium > * { - float: right; - } -} - -@media (max-width: 959px) { - .margin-small-top-at-small { - margin-top: 10px !important; - } -} - -.other-results { - min-height: 300px; -} -.OPEN { - background: rgba(0, 0, 0, 0) url("/assets/unlock.svg") no-repeat scroll right top; - padding-right: 25px; - min-height: 20px; - background-size: 20px 20px; - font-weight: 400; - text-transform: none; -} - - -.EMBARGO, .CLOSED, .RESTRICTED { - background: rgba(0, 0, 0, 0) url("/assets/lock.svg") no-repeat scroll right top; - padding-right: 25px; - min-height: 20px; - background-size: 20px 20px; - font-weight: 400; - text-transform: none; -} - -.sc39 { - background: rgba(0, 0, 0, 0) url("/assets/sc39.png") no-repeat scroll right center; - padding-right: 24px; -} - -.projectIcon { - display: inline-table; -} - -.dateFilter .mydp{ - margin-top:5px; -} - - -/*.tooltip { - max-width: none; - background: rgba(100, 100, 100, 1); -}*/ -.tooltip-custom-font-size { - font-size: 120%; -} - -.custom-select-mini{ - max-width:170px !important; -} -.custom-icon { - line-height: unset; -} -/*.custom-tab-content-large{ - min-height: 800px; -} - */ -.custom-tab-content { - min-height: 250px; -} - -.custom-dataTable-content { - min-height: 600px; -} - -.custom-html-table-height { - height: 500px; -} - - - - -.filterItem span { -display: inline-flex; -} -.filterItem .filterName { -max-width: 71%; - -} -.browseFilters .filterItem .filterName { -max-width: 68%; -} - -.filterItem .filterNumber { -width: 20%; -} -.filterItem span { - -white-space: nowrap; -} -.browseFilters .filterItem span div { - /*min-width: 45px;*/ -} -.filterItem span div { -overflow: hidden; -text-overflow: ellipsis; -/*min-width: 81px;*/ -} - -.browseFilters{ -overflow-y: auto; -overflow-x: hidden; -max-height:265px; -} - - - -.custom-offcanvas-close { - position: relative; - right: 0; - top: 0; -} -.uk-link{ - color: #292C3D !important; -} -.uk-breadcrumb > :last-child > * { - color:#cbcbcb !important; -} -.uk-breadcrumb .uk-active a{ - color: #767779 !important; -} - -.publicationTitleIcon { - background: url("/assets/publication.png") no-repeat; -} -.datasetTitleIcon { - background: url("/assets/dataset.png") no-repeat; -} -.projectTitleIcon { - background: url("/assets/project.png") no-repeat; -} -.organizationTitleIcon { - background: url("/assets/organization.png") no-repeat; -} -.datasourceTitleIcon { - background: url("/assets/datasource.png") no-repeat; -} -.entityTitleIcon{ - background-repeat: :no-repeat; - content: ''; - display: inline-block; - height: 36px; - width: 42px; - vertical-align: middle; -} -.entityIcon{ - height: 15px; - width: 20px; - -} -/*.uk-tab{ - border-bottom: 1px #cbcbcb solid; -}*/ -.label-underCuration{ - background: #fef5d2 !important; -} - -.label-blue { - background:#d4f3ff; - color:#00a0de -} -.label-green { - background:#d1f6e8; - color:#01a566 -} -.label-yellow { - background:#fef5d2; - color:#cca607 -} -.label-red { - background:#fef0ef; - color:#f54f43 -} -.label-grey{ - background: #f8f8f8; - color: #666; -} -.label-orange{ - background: #fef5d2; -color: #f0506e; - -} - -.label-OPEN, .label-open { -background: #F25F2F; -color: #fff; } -.label-CLOSED, .label-EMBARGO, .label-RESTRICTED, .label-closed { -background: #0F0F0F; -color: #fff } - -.label-publication{ - background: #4687E6; - color: #fff} - -.label-dataset -{ background: #1e906c; -color: #fff} - -.label-project -{ background: #d0307f; -color: #fff} - -.label-dataprovider -{ background: #00a0de; -color: #fff} - -.label-organization -{ background: #fbcd0d; -color: #414141} - - - -.uk-tab { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -ms-flex-wrap: wrap; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; - margin-left: -20px; - padding: 0; - list-style: none; - position: relative; -} -.uk-tab::before { - content: ""; - position: absolute; - bottom: 0; - left: 20px; - right: 0; - border-bottom: 1px solid #e5e5e5; -} -.uk-tab-left::before { - border-bottom: none !important; -} -.mainPageSearchForm{ - background-image: url("./home2.jpeg"); background-color: rgb(255, 255, 255); box-sizing: border-box; min-height: calc(100vh - 412.767px); -} - -.searchForm, .generalSearchForm{ - background-image: url('./search_general_3.jpg'); box-sizing: border-box; height: 250px; -} -.publicationsSearchForm{ - background-image: url('./search_pubs_1.jpg'); box-sizing: border-box; height: 250px; -} -.projectsSearchForm{ - background-image: url('./projects_search.jpg'); box-sizing: border-box; height: 250px; -} -.organizationsSearchForm{ - background-image: url('./search_organizations.jpg'); box-sizing: border-box; height: 250px; -} -.datasetsSearchForm{ - background-image: url('./search_data.jpg'); box-sizing: border-box; height: 250px; -} -.softwareSearchForm{ - background-image: url('./search_data.jpg'); box-sizing: border-box; height: 250px; -} -.datasourcesSearchForm, .compatibleDatasourcesSearchForm, - .compatibleDatasourcesTableSearchForm { - background-image: url('./providers_search.jpg'); box-sizing: border-box; height: 250px; -} - .journalsSearchForm, .journalsTableSearchForm{ - background-image: url('./search_journals.jpg'); box-sizing: border-box; height: 250px; -} -.entityRegistriesSearchForm, .entityRegistriesTableSearchForm { - background-image: url('./search_registries.jpg'); box-sizing: border-box; height: 250px; -} - -.divider-table tbody td, .uk-table th { - border-bottom: 1px solid #E5E5E5; - } - - #feedback { - float: left; - position: fixed; - top: calc(50% - 47px); - right: 0; - z-index: 10000; - display: block; - - } - - #feedback a { - background: #666; - border-radius: 5px 0 0 5px; - box-shadow:none; - border: none!important; - display: block; - padding: 20px 12px; - transition: all .2s ease-in-out; - opacity:0.5; - - } - - #feedback a:hover { - padding-right: 20px; - } - -.descriptionText{ - Padding-left: 25px !important; - Border-left: 10px solid #fafafa; - display: inline-block; - position: relative; - top: calc(-0.1 * 1em); - vertical-align: middle; - margin-right: 10px; - border-left: 8px solid #e5e5e5; - margin-top: 8px; - -} - - -/* -li span { - display: inline-flex; -} - -.item span { - width: 100px; - margin-left: 1em; - white-space: nowrap; -} - -.item span div { - overflow: hidden; - text-overflow: ellipsis; -}*/ - -.custom-offcanvas-bar{ - background: grey !important; - width:100% !important; - -} -.custom-offcanvas-bar .filtersModal{ - color:grey !important; - -} -.list-horizontal{ - display: flex; - } -.list-horizontal span{ - margin-right:5px; - padding-left: 0px !important; - -} -.list-horizontal-line span { - margin-right: 5px; - border-right: 1px solid #f1f1f1; - padding-right: 5px; - -} - -.list-horizontal-line > span:last-child { - border-right:none; -} -body { - font-family: Raleway, Arial, sans-serif !important; -} -html { - color: #444 !important; -} - -h2, h4{ - font-weight: 400; - text-transform: none; -} -.linkdropdown{ - min-width:250px; -} -.uk-button-action{ - background-color: #D6352B; - color: #fff -} -.uk-pagination>.uk-active>* { - color: #fff !important; - background-color: #296EE9 !important; - -} -.uk-pagination>*>* { - color:#666 !important; -} -h2, .uk-h2{ - font-size:28px !important; -} -.app-box { - border: #e5e5e5 solid 1px; -} - -.uk-subnav-line li:hover .home-icon svg #home{ - fill: #05007A !important; - -} - svg #home{ - fill: white !important; - -} -.tm-toolbar .uk-subnav-line li a:hover, .tm-toolbar .uk-subnav-line li:hover a{ - display: block; - color: #d4d4d4 !important; -} - -.tm-toolbar .uk-subnav-line li:hover {display: block;} /* remove the others*/ - -.helper-grid>*{ - padding-left: 25px !important; -} diff --git a/portal-2/src/assets/external-link.svg b/portal-2/src/assets/external-link.svg deleted file mode 100644 index c291d7e2..00000000 --- a/portal-2/src/assets/external-link.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/portal-2/src/assets/favicon.ico b/portal-2/src/assets/favicon.ico deleted file mode 100644 index 151eca1baaa93b204ded4693423dac971f11d08d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32988 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 NnkCRIfj^D}{tq}S<$C}C diff --git a/portal-2/src/assets/formImage.jpg b/portal-2/src/assets/formImage.jpg deleted file mode 100644 index 16ca30fa4a94e9384c4bc39e33d685a6ca7ff5e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112058 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�*?^?nsD=1UVzCo_QIjcM0*aS`xbpY4PzhL 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

      CFR^a21L65)iC%!| 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 PP8yq!aOds&pC|tZ404Cn diff --git a/portal-2/src/assets/home.jpeg b/portal-2/src/assets/home.jpeg deleted file mode 100644 index 655e923c9d088f3fa1b1f0c660a32ed0c97dba6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373503 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 z 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 z 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

      A`+h4DRJ&VMk6d))Rtj!fJ7=vN^~M?2 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�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 RyyPnBUrm0YqlM5k|Jfsy_e}r* diff --git a/portal-2/src/assets/home2.jpeg b/portal-2/src/assets/home2.jpeg deleted file mode 100644 index 628aff7da36aec6e390034731685d683b98ae584..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267070 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%0DGrmh0ys#%uBU58=*70u`?tCIipi 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

      !xQNuk8X{{Xun(pSXZ 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�pmEM(Py%i@;ru&Q-rsm|Acw2x+`SqpnV$OXS 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 z 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�tTdUPoX|T$j;HX(JivhvioAiODijo^JjCmjA_D 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 diff --git a/portal-2/src/assets/jquery/jquery.min.js b/portal-2/src/assets/jquery/jquery.min.js deleted file mode 100644 index e8364758..00000000 --- a/portal-2/src/assets/jquery/jquery.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; -}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="

      AINY`MAAs?o-mtHPUI?)NaM`Hm!1=G;V3R(L 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 Cs!&M) diff --git a/portal-2/src/assets/globe_tech.jpg b/portal-2/src/assets/globe_tech.jpg deleted file mode 100644 index 46f3c645520e02cb9da009cba598660d91ffecd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270491 zcma&O1zc25`!>GR(%lV9Hwz005=%EOEg{m<9Rh-YA}x)C%1R?8C?z0*bSRQi2B0Dc z3X%f)&Mx|Wp5OC-e((SFbM|mzX3m_s=DzN0?wRB7H@`nXL^ZFvyFwtky22152n2!y z$&1Cs9AU_2O37i<`Sn zcz}y(xRIGtxTll6GfYL9OYy40Rc}9UmmmkOtKMEdfeKfZVA#SHz%k~s1dI!tB*;?< zriytg*F{4Vm%49&3zv+zw3w459L^;xD-K7<$jZV+xuhiFQWBD2lNEy_6l7!-q~y5% z{DXm~1vtAZm}qGIc@{WRg8g}^(9lrvP-$`BfGZMkd3kwE8B$VWAca_9m`{+yRWYAH zp1&n%xCA-{xcddU`}%NUN_24a4GvO*ftsGZg14Wc;Xeic*Vgj(#=I9cbzqQ*%fG7e zUsDH~h55Nin79P`1_wB~faE-XGlRDKzdz`2LT9Ic()k4kcwyhu*-661%f;KpCnyj= z2>+)>er~=&zJYGO|4Y&T+{WULc>s7_g$n`h0Cfj14PU2VOp&@8N-%Io+}Yh(LDI$9 zK^`F^DJJWHa1c8uhmaAIcX5;!bCq#*I0tu>lXaGN{aem|%a4$ilTy`C*N~P`*Mh?} z<>ckmq%|}(G~k-5^5>*g;eYe$`UD0!_&B-zeYQJz_Mg1!|JS?<>H#heLB0WIzP?_6 zyBX?lD{!f+W4e_Lm!PG)kF#%Rpb(7fpEgiX4Gwbi4G2W}0@DHgK?$br>k|~L?3$b#OvBi^)nk$co8HBAmn=5l*sVPEH6% zXF0g5EW+6l_9wsdzqRw3!GJ5^eg9Q6xV*HJi>n-5OiEH-UJMR*kri{4lyw%9cZ54R z!DZ!~;cz%i0#wo2NdbW878Ll$Kvcbg{v3I^V>+pVmxIq0fTozUi>pJhR}f734^t>g zV0yooJ4lT^I?E{W@8yAGr?a;GQ>3Yj|38KQZ{?h&!Ibl_yx=6rJ;=-DPv-ysI?71P z%1TK}OP>4RYx%c8Y~}yWsQFw34yS(;aEfPSoyTsa3K&}2re6L5QOkA&tlW@Vbf80dih83r3TFI>T1lN+~g$v zy#=Ab(jCP4IY@!?djWD20>#J2C%}gi5I~8c;73XXg%XjHk&uv*kdRT4VgFH)QBYD* zQjpQo($UeuLr-ML#T;x7YMH6;ZQ?x zsd4bAaentgnnC>taBy(2Z-U+7LU8c#37~{TI1pUC|8WO`gNwaG1;NF^$HBuTz{3MO zTwGFc9YT#yK*J4(s?r)ez~~75rRZbScrr{F9!NKIJF4@(4*32d))c|FoypHw+~@=< z0P^GG;}PQHf+IWvP&73jJ~s_q)tJD+A4dB-r`1e z(;g>=o!|2iGCWW{YCLL)3gipDXNTVcpINzPqoy9wR5~9_hKvulic3$eQdN*%of!F$ z3S8#OCeS7|Fy~B#n?)gdO8n7K5d&d3-E$g2CSFsB4%*2&nq?~5(}byY0;d*9rpZ;w z=T7GMBp#(Vt`KVxGllzvrjqOlMX49|N0yqK50kZqYJod6LKJ9fB(5fRv?dIhq2ugq z!h~<8%SBWw2{s+DRi@AgkvR&Hd7|*BbsU?xSf(H|rEttcxRa(JQ_*H*9uPC^U$BQ% zGF9TBaM1)vl4yE}Fu3vGPSvpYIiguW8l_4cQ1^c&hGTP+Bjf%@38iO6a{MdZ-)F$l z1RjuZ@SxrQd=#h*4hrwTRR&)W=Q&yknhIg?2OW3Md9K`6Oll2EMmnnADZ%*XzCH5ZU&JQ3mFLG@o`Tj zPUQ2xjI(&E#V}+p2%8fw!}rjuQf0YClm3tiKq#3Vhw4Gm6Y=3zo(R%we?UGIr|T(R z0WexSp!6modgGEh<&X?yH!S9c2gCvmZQ`P@g480(`_ubHbc88c)GPbk*i}W4>%`WC zCQ^R@HFz>)mYSQlt~G)joO5F$aAU#;0RGu{ap-PgHhLN)wT^wp*=Ec%Q;J88>~G?# z#NtQ-`V9(Rs{?JqV@g8GRAO$U;3zy34319V=lK7GCI;d`$lT z1y2C~|F@HzmGQ6sV~S&f1AbIh(UqWY_hH&btqBkFJWM0~$=}CCWJ-lZ!8GWIv(V^d zQLQI~vR0{rTyriovE&%EP=_etSd*Bk#F<##^wv^cDoJz(H60CfiVTUusYEC9Yhr%D z3S9uIJ>yy>^ypw7mvSjaYhs=Unsxbcjn39YvIbSE3`6un)K#!DZnJbgZZpYj>Pl51 zl9D*IunG%-@u4Y6aw-Ias7^UOev%U;2}(@Yk3$FH&+7(tu7b>f?ut~ZBJx2*`yj|{ z-64E#OaNA-h$>lOGOz(VOsR!opro%%!4;wb zHco-g0buIb=KzZY2x2S}z-OJ_--KhFP^yrkiHDzrgwx$3rX%w-!NC}371l%nFlUDL zuV(&tLm|RKhc}Lk#wYl9h@fcb-_8KV828j!!oRlo*WODpIsa0C1;#)l{wW>UI|{d) z`>$bQOJLVLGj`l!v@oWOS|rI7hHvI$NTS&==osV^;9EJu4Q`0`KcRA|oQWmRHFi(; z%D0G>AqA8OwN}><7vxRa5~9@%MHj$4h;cli=je!XH1VyZNQfGPtevf-l87GlOj0GF ziSC-PaHX5_-%e$Css%MjHn`zD{3M~#+?uFar&`CHmsBTJjZ{Z94sFgR##MRZo>aVo zH1k0asKWBPVR^Wk@aUer!9lb=ixd91q#Nj)m{-GK3c(-%fzy#;NEs!`?8d7#V&Lp0 zl#&>SpD^bR{^0RAAfLlBxQNj90JA@vF)#6%mD1gU)5W6z-#QB7v`(;VVW<{^TI)C- zeJMNv4TYt5W44$SO)mT-btcRPm4V1`(c=OB#2UmOi~HO3XQxfLXH2{c%+WgfKPZ$O zW2RGQhDw0!130jNMnB7dwcfL`fSDrCkfHpCm-oSI;|oKTATn^07?PNzXnOD<8F-ow z0W!`2n+;PZr1%q1dL_;p_Sc8YYmCg7B5?+2sxnw7pe#oGNnE^|n9w))jSUi3QTSd$ zTMrExA_&UObUK5Z;IUqd@dRPD3%_=r~d9;9yaV)#L_Ss*V#1UUh~5 z9OK0Qs|V%Anh&<=aXBz8{fG5TF`W-u%KgWf$K1{9LY@C5TSuv&N^##Yu&y zx0M1I5wzN7u}`&Sa;Z?NSzMUzpp(pNtdqz^casXU5djLpSQiAeVu2H6l9{<&k|idi z2_Eg937Lc#;sFcbrqof7(IG?=VpU248V42=tBD6ma>9wj&!8o7PRKK5rX_LGFc9QT zc!QFXMcYdPnS)N}HPgb{U^HM@>_$;?#;Hl;fW$#x_~RC>V^Tf-uqllY1OSiOP*{~z z3Qy&}0qlny^nQ#jFeO3E$jtuQ6=>Z*Mu;&4(BNvoPh$KcN#0q*n-PK3H)SBg80?;# zMPqCd~w{HGwoXdPgB;3)tejO@W$FNSf?xS0c>W1v1C4Pe9~8;3!97t5*twwnRC zLID>)N2}K2@&Ob_gQ#69u_)#=PMC5H#o=osa99CVX2!bJbCnv>FQRm*GgP^2k@(ff zL^Bk>L2*8V-V9KUtn9B1j&-MjOh61_>L@%GsLU5gJ(6UX%o0t2sp66wPB7-^&uJx&T{Qg~ z*a7kce_}{>L2AlysK_{OrzHIt7yXw6Y|4M%K|3MB>WtP9%W~XKE|3djX`oE-UI6hm z%;5~yj4!!?9$^zgWX0{a?o#-+Eh?(7}GujNG_ zWm7p1=_K=86G>^7a`nNuNz~X_AQ2OwdGHJD;b?nW1E6-Edq8o@CCQ~UybbINfEEN2 zzyx$QTwDyva!e5c@6G}R7#g@GR`P01k>LTbF!so5 z0yHT+0fR9B_{6IM%dM0i_#&nNb?YRMHvWuobqJf_l>OtZa_og82h8a z$bb-~hZ)cT(d&;)WQdUpLQuQpjY*L;F{5j9OAu7f>+TsOF=Xy!z(r|@KB0lRl7 zpcGPjVy66_5J?JBE$2~&;}d%js>y~!Ge|q}Gr2-b4Pk`g#Jr&mvl=UnJ%Dbxf%LW3 zAf}t3LXLCAlyZO5!S;O|V5tR808|`AKR^N(SfhbG3xw9d3D6Q=3^E=!9iM=k(gP`i z;;sZl9_z*gjYSqX;Q$c5Rbl+)2#u*BswQ|w6CMmfMyq2#jsUhQ18fp0Q-uN6Q4j*q zOTdgXu>+rUjLo`}IU(_Yo5WxWPQb_$Psa@;1_GE?CmouOr;`p`z&IQ$ys#Yl#~n`n zu@@vTmzaNumFx@$KrUw#i5Z{#$7lr0JZI6OlykDC2u~K?9r`!8l)Rc9=NS^FqY%h8bUr7LaxiPs2aD9({tpJ z8A5=p)q15WOnrWW_YaonObvr68l7EUnb+q=?~&s(OBHA^3pe5G;+ar6R1rm)fh{)n zBNF8k1mRm_>Z^+8t4g7ng78i<;ZHL4jzbFUfrPBY`2zYcA%=Z9z?(9G%NXOt!0nul zKMB0$xK3(SN@A*%h8S{iK5sA;4^p7cl0H5aO^fXBh@#hIX;nzF`3VL$_uCLI5M^&nUo)BIDcuZqP*x z2+``}c;nn(qQULwz{>(--i5qJ;oyLH3?0dX8014HYupE5kiZ$oRkFKY}c^k_n7)e07}cfHUq#M4Lr>K%6ir;!ohDa!0!{@ng&t z;E07enh9WgcEO%S9WoDk1aQo{5O*>fV8)sd8O$){%+H>IgaH*&Z}8X8T9#tG=^u=+ zR!51EQoxk^ka7MPN;)IesuYhi#|-+z1gO}Vg2K3M3`!VR2#FxUoc-a0aEMPfq)w2k zjdcFh4NX221-l2yu)lZujQV^;`D?3-KU4_5%>Fd9&8+Jnt`3;gu3TZ|eYL;LOrh=T z%oF(KH>7;F>=~lgTp_+ic;a^1_KLFlR^Ij7MN7n6^ed-boWCLBdl$ZmPPFHcUcVCZ zWWIaWP0oh-KAWOEZzhksDjP2CujQGh^K%xp4~KR6wU}mk*D_pvsdg?p=334Un$Y$Q zTfJI;SemKqSbaM(5s{r+mf8I@$4$59dl%1}6}Fmdc9NuXW%f5SCb}&sN?eHIvoZaW?SmXP zjUlG$D-G0vm;Lb8RoBFRPOBVyMJ{+AxLN&%)U_L#uNkNHo!m00=(8m@c-^Y25Gia^ z*&fo=>8U=}SkfL)B7D)(ri}Ew1o6(L0A_*S&oot`nG7@pc%7Rw)sGizY=cZ@2UK4{ zSIylo!`QDR9YM#;zkk2C61wF{8QG1r{4`!# zyKbusQ`dLzkDUr{SU&K#5JQ*;jJ{uceg1H3Ur~D`>#~BA_HRglmYS$CZ)nTQYO9dD z%~fKfjTc)?s*?qar5|0KYUdb6H>iwT#8=QN7(V6tIB*|Is(68vdQddUEIks*Ws;KJ zs&LycJE{yRUeZ>DiqnOl&B@JB!kNP3;FqLU=^#k2_5o?8DM%7Mgaq+4og5u2H+CH` z+QZXvghmq^LiAEq87^v}K@j4Mu|@BZONpkl5XI?$E=MB>0mFJpv@^!@Arh(DQ3$nf zs+b>d0`nSgLOu{tv@&>*Cj2xl^-Fk3LsR3bnbjz*n=zF<$QLH`xa2x!j0(81pLGP~ z6bMxV(SpR`xHkgJ708G4P_~sM;14;b|AzKB=>8d-u3;`ivGG8l zs{W31ur}EQ+$HduG7u#^`bsLya1$t|2yDFPk9^XTr=knseS?-Z4>1>UW==R~`FOH^-6)J05c|h)pBA0^a5n zY(?g2>UQ$=#O;G#*QAGrZX1tx^ZSJpncv?2TIefpOsp%~FH7hYO>rP|DP`e+ z_tQsB4khItzb0>CZ>`aS%N#i$n3>WM!xEgl`n!y5;UU(2Y=uJ#dS*YwvPEjC^}Mr9 z!f@C98?L5k(CVI#Zb%qh`9&J)(|l;Y-8fwoaAAGo?#6G3L%(mxJS*8D)G~vfm7lsd z2h!TQ%J_3ehIu0G%XND`9$L+(^Pjy1>63^tMqRws{@) zpdx5(H*%-y!bP-aGot3ijL!F6dog&hph~q5|Nfz)u^xAH-MSk`;M6eWaeHtf!$x)1 zWEv$cgSbJx?pn6->##dns>QR3=IWn^uP#66Y@_%%xQpAi)I$939_M&#?&Ypct(y7| ztV{j-WG!0pteu@sK!^*ir_vQ`|v!u>+59(~VZ zsxv9Qv9Ch8)zz~%cC*aKq=j){@{^~rQO>VEF_i-QEje0GzZEH`0ZMq*6x4GrTZsMX zLG{jgudfTHSu-6Z-tSUAOH3%6frUP zgDeXNl2>t8Gs12$NTjd9ci<~xnVYN*N@;vFkMIkx`*M_5EY#_9{75OPus-RMYCrt- zRj}!UmfO{LX&y4xYu}T!mDK~J4c6q(hwsWgVvoBrI?@*6V_o?Re{<#7zxbSD5v@VJ z^vJ9uRi1HcK>)!`BbIZB#;thYU4Lo*@+_;nNx}NW2r%2yC5PuWqv5{aUy4u zRv!NTiPgBZq$NQ4n0Xf!CMK^E$8Ug}0Q~h`>&KayM&R~Rq&@z!$izD?>!6tIctbGe+(&l%iAd0>eqQi2ey?|iMbn28NJ`THq4J7 zEj3n$s=afK2sIvG^Xp;_6SqYT7ZXjmd(el+&#r>b!GhZ?Ox#LrN+vt?jIGLU)`@-WKGB%8=7y6X(=z0=ZY)zZ1=wQ zOGFap)XW^lY*=wb4%zr+)iq5$lYL*-##?Io{KszyTbA>Dn*>zv<+zAcn)e&lfKTTG zj;3cL4EHGgJ*qBqKB_)|2m04F$^4in_X;bNCCILn5|$9)Cde_PIQ3*N-D-V4*=A~| ztx~$P`SmJi*y_2o$#l3+vr*hrkjIyBg>!}w54hS#TrXHJLM5Sz9Z`=GZk`^E1J!gyZ5w3}J)hH-p z?aKs_Cl)o8^UTo;jXFHN7{RLgE zd5OD}OsV(z0?TrMkC>*vtk$ZH*)=0e|CL{tvf3kinc%Wx+(rzQslNDh8wldV=SYZ(Y0ZePbjmll@cN!U>;g#S!IkJjbt`$8DEx ze{;~vF#B;t?_d-3PRKI!4dLqO>`?yQXvx45g+dQ-|S}Xh3yz=G5(z*c7`Exm|s^2@X zBRP20lR>!7`Dq*R0Mm;ksv7Z+iN7{3?$u2vTX1MM(mn221XyA}TuUzGCNN8Dge4P96Z%Fg~HMx4NjMsyOH`(srE?~Nxw!d(% zdB9%k$T^Wmop)4ifV~daZ*%Wj^@AnKiz(LjV$bx$%*}}#oMVD=$-Xkop#iE z6LBrzVItM?qkYHWl?P-`9{H68c&y&v@U2(L5bb!=BMzU?x;1O~8zM06*;vdk1X~dv z$*kSORj3yHHh6naGbL?)G25O}NoPqY_mDi@YsYQtOK z>VCB8@Vf5*=#h&{qIy%`kctgNZD*H$dZ6!Ob7A=xvFi_RZ)tCd3koz7mbn@{y(gbj z&wK9CE#YRZmwvo1jjw&5YD0kykejH+y(UrtvY|)p{VyVfsvaMDhFf zo6+wLKaH7wyY&cKBy4W^H)1 zKXsAKsS7vX6Y1$ss_iS^A}tmW!LrJ1;cXyEMrev0bHX zoeSk^7JJ#nIW<1*wwL!zWI&otF;nA}%4Ddh=Fjj&3xkxx%)#AG+Q|nMoa}1z$+k@= zF9`?ss5a%`4tk^MEwHz#eUU2GTc0k6)XLWh(314}*v|jTv9SJ8#PVWd73t4(Yy#h#kBMQ^nT)~S$omm%$t z)`=nKJrm*}ECu*O=@YOK>H;FEQP)^95N=Es zFjb{Nxxwfmz=3-})jq}Q#Eijo>bcPcB7SsxcH>l!#_1T_bOhmWZyd94dm?Zbmz=jx8rF2qLrI579*Q_kW zU>HpUb3zX0fyEFY`t0_PgaFZ~aLkNN?>HU^AZCFL*)3Npsf)&u!;V~cA+xezJ`OvW z<&Je@!FkAo2|EHEkqGfccFR!5>Y|0dF0{Nk{IBVU6Egp{w{iY>xBTNd=XAV^w!TiPfsGt_Wjrj-<46kz}vRC&19`OR625B)j{m^Q4s* zAN;t0>^ejpn-48UFji!JydWh3TXb7p`x$slcKR;Cz2z{BLp3IMNHK%aisv_^@e}vy zI#5gA4^O;~^L8w*u+tu`TSkqFhZpZv&^#*{JE?Gwdqru~CW0H2A$TXAAFl!u83n5u z+|1iATfZmr;zDm~O52#Z`m4*&J6Bb@zi5S13P5Ljk;>W?Ke(b z3aipAm8bp(Cqq8v+H zW~(URsuS=gE=khsZoEw)N6t*nv8;VPqDB91*fUpckB>v`?wt)A2kiUGA+Ihhr;_Cv zX64tVl+bc5f6%s~PqVNIxBiv$`LhROqi~td*zSi9pMovcZ0Z^5_s2h|aCkg;6UH(k z5_fET0OP~mntg<~DiQuI)N^a8Kw@WdaCQICr>$*g>dSR5-_W17WjE+c(n!UnXlw$q z&z=5;JZPx%b?-yPP)W@^6; z7g~qsgbXP)+VL5r@-9UFdS$heug-airh2t|>?XN{tGViz!QkEM2bnc4n zge-m*T*!g7)|nqJyLEp)Y|Y#))>V+!iFcrlXH{wkGlVn~${1?v9h{L#_j z9px3K5wDfzB2EVuF^V14nr}rIm@-58we=_Usovzxfn6I`jG}a79wQhW< zm&kBEzZAHrKPk~N`XbHy(e`zrS2XrKWXmMWy-VjF(=w+A320F_mxk$Mr}9 z<&zq_I~BS?a?Mx2hiNy}7qWQ!^hinxNcC$IaO&gBkqU^+kV;)`D)8`oUwQcJ*2Zhg z<>K`snxfm9Y0FXi`8NvhSCKv9O>aLXI=!&<8{#Q(d8U5USG?DSY5jirwX0fvLuw|k zAC^d1*1p)eF7}44rXmy9&dk9j%#7+G;d318Z*OzO6+<2>b7*;nJcv3e4Cjd$`O$J; zCOIBT5&rDFoeU*Qezf^dp9o1#Rtt)E9y11|pV_bN%D7&>S1G{wp`NB|g-NPx=*`yv zrvnpD%GLmRM0Bp7#FyDxo3~~3Og-Y+AKzOp$aPL$Up>q_w*ByM#|!9o=M2vPKGWR1 zRn~ytkk%^u@U$H72G6AiX4|AdeZA8@#=7IsMaNUIjSC%Lczg+7F2LC0hV~ntCn+W} zKVT1ESX6nov~hRFR_yzNRe<&B;_X`-w3*e_`bCso`E1*tJvu^NvPws8uJeUlg>f}# z_&zvo=}en`Lv3;+Zecw2O_#s_iMjEm!S;}kBHrH19SX0rRal+e^FHbp-sZb6g76k* z&`hAHX<_Kx&mwiZv$`ZJ zjWx@-d4>5mB=f`es^h?5HrGdgIf@InZ{1F2RL{S`^73u}yot?XPQtJ@e$M;L>y5YH z<`@}#Q}ZcUxTIWgb^Ph5_eDsodz9~{e}oFd|i4OS8Cg2k-|KEefV>$Ny(R0 z%ATh8PB!{)^?ljpdG0Mr30!vZv<~|X2`o2xxW`L`XYu6-`C5)H>A{fAJ9i|N7kFNdssy)laoi{iZuA-8c>AWFCoSH?icx7u ziRZ%F?V{n9$DR+8$apOa?DRJecq;q|0=~oP`xg&+Y728jguHDkxUM-_#l3tg{xS?@JWlm!Td>FP5(K+l#9`KB}wRl zVQr`7yDdtu)Ghs*p1n<;HhEV4+`n|@xQ+2(&L_&;<<|zEf_8Mx{)mT={`wW}{Mx~R zS6TFQgQ(p{U3y>VJIV<7{e4&T#E3aC*{iFH1`AK{4Iv=PQp|{;(F`MpxnZT8jvIf{%PCq7Q8(U%iv`3G zT{M_zO$~?a5`@1EDB!a!S4F>=pvR*`R;qxA&yP|%)a?$9wAGv{=%R||H#8HjN zCLp9VFe8$|MXOe2pdBiy>?dF^ps`?~(+y|_RX1AwhK?#8n8b^=M5}{^I{bOKhWH6@ zCYfnjoHV@LGkKg;dA0iUd2v8^%FB&cqd#vjZ-Q5C3^_Q2wr4;)1(f0ipb3W4Npm3L zW}plxe|kSZSVW@E1ZJNRU}m`+TtGt+WFG1)yAWQCgzM&y#!1yk=N*?Mt^`w->X;b} z%mxM1ob||l{&dWY;(tsl{!cLn7Hoi(S=gy$Gopw|%#1KZ>CgI|KiB`vGXo7Mvxf7{ z056%7-@c#8&X}p=7Q%H|ng98Gi4b33sh(tZt8gK+GV^Nd&$Y)3#P^w_g)^2`ah_H= zvukd!oli|Pd=XOp6`>DZPIbRbamBmp#Pp%$vWv^d5x8vFdx)@{em3C&$@05zEh2*b zLP4%;`-hqv7Gurd4SAWjz4r#W2m8912yT*jX&XDaZY)~JEQt?OEbf_n9-U;nDpX~X zGC95V>5aNbTlZy4r_pWp%)i$l0Jgh5X)AxS3{qS(rG)v<0Mi(1uSeB;52)1$AI{$w&B`>?wMZ)}5J^gzEQv%goOf|}k&~9>@@6E7 zls8kS=98MlCc|N^o}RRSKq*~^e6X0cwqevcW;=;bt#d3V`7L4a@&IXQYJ7{^^EK+o z@Pnh7j<<7yV5m@&#I{{+k+1#K0V`qYNXi{+x>#Z%F4Po^3ta9 z=~T^IpRb{Yk$sabthrP6`+d9er<}Q7yV7+xV2JyQVWTj=i`i=L%(L-^UsN7is*AMr z{5;4iGj|L8>T*6{zqDFg?~q;A)=nfXM|nia$+yG&na0LTsfVJ}#Q3<{6}17I9f_K1 z^t(H@QCCb>z5Ckq3ib|veU?A`!Ef66#?ijtsL{mP&Ig&O&cS)1%4hoZ*8Xf0v*FL# zw}I`E?`*RzOOn2`%0)JOKdp;;qDf)m+%_7Wj8>N`i~AY0soA09YLl|QqS}!K)%79JZ+B%j;c};ni&y?^RXj=Fr&cOYYFW zIj1{gew-q~H}y4`wI+pK_@j1W7E{(-e4z-b)xhMUn9qwY(wXe7&4A?3>av<`3-`o) zN^{(9xA!T=ALY|&#<@1MQ5i85U$)EQOyoy3|1f3jZ zSA0K(6)NeyNP(A7jb2flj`x(K+)|9B)VCN(TDt4j^YPLpbCr4?(a@L2*+O5;ejJm% z2`P*WE$nC)t!!|;cY5~|i8WsW&Wi`TutgAyv7QuR*m9hp4$!qw@-V44V&-Vhx%%re zr~8EacF6h2``xn46C=gLU2{x_y=^4Qx$m{79zJXS_O`8!Hm=Zrj;?MXP3hTn7FLI6 zKIXwUK5P%{o%7}E>7O{_Fp{n3?!CCmRHpUwb-s^j!NUG*D9LKQl}T&U6;_z?^eg=b zGgn`Z4BTN4JUHsPG-`P>rTmj)+Zwe(GX1ah)lYLBZ%5!|E%g;euXYrg#Z@)+0`?Af zc24zJH!G6LmF=S9g>5f&OyG+U3cj9w%%Ref$nN`guY{pr-9PS4m5u)WGG@k2-jCiB zQJkD%>H|My?~CL~|JeHxS?3(}j-Tz~-YSv6?5d~MrRp%_IbyNbuGhj|v2WeI#H+r# z<1PCm^{D%*%#ZCG%s*MTTNzubR3<9oSVJryKYeW7$Q-fN`@`ysm-6fd8vLh`%>frc zOltE^*|{bKp9>?K@~1B+QnGAWekh!_c26JD>ee{m2ljD3F+F&!Z?8|gt{uMW^sW7l ze!-J>i$V29vR{=7gx!CfyTCYKUg6f3niOD+dZ5AR@^S9Y#IKxpV~@5L7A{pVLJwM$ zrmCio#1DEy!t*{D!Cxsh>{4%Ml0G_M{z=hua5yVK$_Sh8e_JK+N;gO$U!FmLfZ?#K zVBO)!j-$o;&A7)->ELsREknXqJFe%+tZC(&Hs8gKmVH)DiUbU!sM8dvn~Tv4@iLbv zUWKhrtnV_-UCh&rde4>0i(?^DJHSJDYcx{LF1$kfEI`&Ys%6V&nMBdw;(YM!ECJle0NS$wRX9-*~fFjVmvN zgcNKjCU;Ytv2H7E+MbAptq25sO1ewlW?7PCCxh$)bpNYQn+)*LdPM_B3zCN ze#-YErq8_zlP#~>eWpZwd32zS(DFt6#mP3RWsOh4*6BQ8l@C|>*&4Dv`GacB4muXcwc+{QT6#K-kR>&WT^wP!cYOaXL;LK zbW;Uxe_6eCk^TX*Amh?wsz}Xm>z+mD-gXp(Z(eZ~?n^>6Z~YK<$(`O>@aC5gHHfCZ zy5~1A^G@OE{DF6bhh3?0*scX6SsD^xt1N$&(7;#iJmW=WB0j zXITgj*bh1NWPRLyfTi3bpq@H7{6In@!3yUI zrdhDE1&Ued2-ds-VG5SgHDL586i0?S+7O1sge9@+l^-lRWa`CK2D7j&?;mxFk*Ej% ztT0E8bAQ8%R~l+{}zX6T8yw!i~5)McH|+{)i*WD0uzzP&p-0 zVMd?+#ZcYX3^q+dPc>NzeCc1l+(Eqlco`ZYJ!)$kXMDZ%dhn?Tzfq9b+=0`&=Ki+x z=VoivuF~b@F$zU_)Mxl;#?LqCQJkjky?UkV&n{&p$Cm|dE1+JqFnwP#z0ily zUwOLUoA_&!Kl|}37xjp1Dy=~^b8{-K_dkCre((PH_5=2++>h@JITkoC!t-x#Bl;ue z=*`~Tn5^0uCwX`-aUrmtP>}rkd-ci!gBuUqk2R%~$)! zMFbL$e?s@3=Io)$Vh*mJ7wiA#An>@}w;aEngSu~g&-BW~)Wayc z!m7uPi&!*t8e{vEMcovJrfMEsm=IN<{naFTzPWC|`xks#h2o|}&(}zc%-N)q(R#{v z7gml9YRG$~Me`d)T8s?%eeUo~DIF&*EW#NyTVF2NH=*VgFQDgQi5{(yyjdNDlcMDIorp;>(e3=D*ma)r7v_)5hwMB|W)-=_PJ>MR? zxDne>)B12}TxsNi3u9O1!>zgd20S5>doyV}qD>(Tyqm+;{^lR2hQ@0O*k+fm zEDr{^-MzypRI`H)SxwnEe%4^Uli9`TLGGJIKk|Xu%VPB2kc39tkE5ePV#F^O-qyhz zoa(go@@cwdL5w7XsNz#YN56}@x*NfDY#C*?r^BAVAuIJ`U}8FRsKA$XhplwVd55aV z>kdu~zHLdGoxse~@3BLT_xgH28ToQ-pu(@-yPhzXxLVM$7UEZ@Wt9bD8lOgnY#vf+ zo3FgFZe8l3>2G87o6=nAgZ)olS4ZxPa_@!eCea7%QP zO>XYqo>ib_jE*+&M`zfb#I3P~=Bnn7 zu=}?|PunBvlo9ViaO3UQeLKwz@sj(Z$IL_*OMFyxITy7r=ojpAOt)K@w5_AG$?fiq zj4eD25PKS?66d^R2g^^MO54%+s4TavF18-`)pek#Vs+$ld(x2%4-7~4TLjh1qLlne z;W7CZ{oS?mA!{PeUmPdrpCr9zMlWqt2mZ_-KYEp>S=#^nTv$HGn^2wY()9c6;&$h4 zQcpeaElAxv(hqX7tBM?5D)O99v336S?)mDY1@=I$Yh@BCycUDTOIaWQoio!~m~8yB z>cMD};5Q>%k*YUgpGNwCZmp``FCDfZu%=(>5n-(k;{0M8HG2g{o7HydnUYb3U%LlN z4-xSF++e9&`E7GXXO|2-iulCVU-v|s1g8-JP67=1(?=KXX+NFjr@NYp<7y=kYX6*W zSO40nVZfsZo5z8HIpNn$OYSW41hASQPAmPdvqi8bNb%&sz4RC7-n@mK`vo+zg-4s~ z%tEs5Z-|OYMzznV?`4VRj-&z=(Yej$i%d3bt=rr09Ypl#gmRV{H3J6HtlI@}mn!v8 z$=+W++QnULn`oC|Ms!JCMtnb6;g8yN9#C{niTTj5 z#a|`E*SBub@t2~cm&%bAzxHiafz#5~Wg^*+{re9awia?-9KO_s`HOY=829_xWKm%>_heq`SyULNpKOd-wMar(Zq2@NR$qr{@KlvV{kmKJ^cC>Uk1(R|3o~ zCv5nxDF-i}OMOQ8pqxMXeD{aK^CEAvSfKl#!jxOfT27m6PLK?H^@^WEm<`nsCU=ZP zs@6hm?kfZY7q2Y)z5cAb@13e5RI>6LGN6?a+jG$7g7gXx+PF09?z8yh+U~O7^uc4V zCfla>q0iu}b}|pQqt*NKJxW)R+DFcLb~AfiKd*`0D2$KV{1p+Vtjk_wn=ILQ&ux~Y z>D;CA9>d!`*S;7#W^uPMP43^$t=mf$UZi7qaxRRqbEwU)YRN+Qox9nXjZ1LvNp$ub4jelpXbY-Rb^(b?2a6ag@lfaYz3}ny zKA&DR1#d1d+*~Yfy28I@`B%SO#|w2{mfRASbX`^BL!UC1oygeh*is)Qr-Z@fXi|aFIZYj~?&g^PEVjSe ztPDLm5L~eF5$Gy78BI-IIpWx-o9VGnsnq3jd33lG{Trh9&Ox7LGB8+vcK_pBz4^() z2NOs9-!~p<)kzKrUyQ95(8O!{CG)DM??7NnrA)eHQEIw!)BGLZgPavsGEoDz>>~0{ zxhKgtKl-l`@7B&WUy&~_)BI$=*-}CpU?leBr`fxajL-sxYsQ-k>uduk(|WybALYJv zebW;EnnLmydVAj`8$u)GKlf)z$=;!4e%5T>+WIB%r={A}@gxrgJ#DFe@3|rQdJVf; ziH?b#$lF~G3E?x^3D41X)(qpD)v~)4u;vO5LyqUK8Wekn zA=!Hkhh~k=^*!mUiZ+xShKs>Vqmk*;-$L$&&7YfHZ+OIe;!$n)F*!?ld(XS95}P8a_kW^35Lbeu`bM#@8xh*!>3tO2F@FcJgZnT9gE7a9Dv=jTK2KdF0#lK zu9|<+e+<7s?x$0IqL`!`bz|K8UE772wBHcBSsJ0Hmjo;LCl8G~+Hw|Oc*YQJABn1X zKQ!9a(WdaKRp!@-oIDk(&Tz~{tPGZk4XBBkij-(tk>h9BsjDI^!ikF+FjLE_ToN-e zvEa+mHM}R5wG~Rmn&FOUM?C`Mjd7qrQP|mSFry7rCz#lFz%0pD5e7F+X;p8b6Fkm@ zXQmK3nHNl{Ya$ZBVFCz{0u9RLPK1piI!;A{Pi;h}`nAT8YiF{vT#6s_C8G>}I@#0^ zOlpb-EC>gOx70ROL1a`FCJVmsu}*)!Do8>K*5DnPP_?1(cK!-Qq)ZP#1%$JQIEQ(n{XHRPkLan!Ozz62Ur3lQTIr^f_L*;cvq#1?@=!mX3!0%49a~qtl#~lO#r)DEQ#^;yWnZ%BzGVK? zwx}rlgQnizEc-jt&j;*;UoI32f8Ec!dj8zLeBK6wGBTNUt1l&Cme1mH?Be`#ZG)p} z^9M$YhhIiMF6)^!H+?SCdTBnl<jq5=mBCxDgG1M;_&h{qd zE|($fu>rLIFnPM>D_nfi7{SO5cXR%WL502Y7b6v{`pw{H2q~XOW7ZMHKssKb0hhtX zN14HQH;Et4NE;6&vx|zYGDXi%c-9bD-zD&NYl(;cc+}@%t4n$)y-HAh#%$~I0&%`F zJtrkB?L?`dq8cpvinx^1g}qOcTZTts<&^UssZjdh`rKYaoRAcRz^CY;CN7UG>U6{H zbh-41^PJ{T$t!xZv};dR$RcY_g`!+NY7w{s;db#_`cn%O8k_!g+ zdofZ^l&$=VIo7UAxDea5%6j=nvKoKiKK9mG0!Br`LlVl!*M!}Et>5Y^aUgT#ef!yQ zL-BMie=k2GR?4^1mQLPz!ogOsOSy<}s(~FL%jvp`Q|q)(NwF%rkmIDnQ&Qs4?X`)N zPzTlZb*-_@u96oo&1dCy)g$X%h=|fUXkxwEy*Ql381fP?`yArlCIt|^-G0=|<@azO z^*oT!(0WVp+KofNC^eFk+h7J%{qP+lyeHH;<$gMeOG_ZexPo||ti1x+v5#PVTw#z; zt+CWhDzxKG7qD(>A#a@Y#**FMCjJ5BHU;O;K17Oi3>}c}F3P@_E89!Z)k)R0^h>GH6R4IG?X|!W}wR>w2V}Z}NVpV)XartU;K~ zbk3qPT%f8Iq1)KJ<2}08>K_znjX#rR&7g?iPUO4x;YkQfcj;Jjv>39T-2G=wrCjNa z$&GHz^2M;>8=wzLaAW$RMfF~$n>|WN;x7gq^G+Q*tNhCFwoT1Bk1=@gzZ(HTwu6TU(Y#kf6EfNU`WX{EgI|Z^tiPN!cCk1Y{e#u z-;f~E3l4MtixKPDnlpTyxnS{~R&(4H;h-H@wz&o|sf=oF#`)Y^Cm-{|b}#+frOw57 zrgg8RlxJYQQOWhW>AhqC7f|B*`>UZAV%@Aj817Tm(fa3Ckn84MSqm1f>EB=jb<>63? z@B`@cuO>-tb+e)Xs0tonTN^5JlA+oVGP z$lEzM6%V5QJjknnUZ|GAfHWPM2UP_ii!C&_c=TVftPW;}gAIL!3>_qR2603;B5$B` z;OUoaz3}pFh`R+sw2vpTd}{Av(Pv62j*A(mABoU)NllFOSy~!6Slcr7T~``PVVrR~ z=EcnjkO)u?c=;FOt<=X{Mfqx7KCa&G*ox7~D$xtmpb}nnISeSK0hdd{4Eg=u$nxx1 zpl!`X{YYjvI*eYAz!V8SpP$?+;heuIH8Xt>yP*|c6Pv>Q3T#CcHliS{?@wkrc7Dfy z9Zn%KId~CqkvxDM+RD_J-Zx^lGBRbwe6Fp)kRXm#rG?{FAsDjB!&aV?dJ&P7I8|54 zjhyF9Ue-}5Hv1z?Pu1Ql^%z^jlZA*aYGe6~wk2sPKR-OWQ>(lJEUEVO8_!@uWDivZ zuqjoNNNg|MgpH8fHBwv-(`_!drHyC~*_gKf;kjmkkyms|YM{o(-~Y(wyqsM~QAhd1 znu-=U)j1VAo8*JKawo&|(yXFTg5v}3Kz+%zacj~O!Ji~dQJ!skiiV{4@1!jrG$DXL z`VX%~f3#@!fgTQZ$l?mvN0hwkz`<)KOu71$Se_f;0)f&Ia8LlmG=|U6S$zphC@_Gh z0756gVi1gd&{`~;{u0pbt;-})p_Xuf6W)>DsWGJRUFAn>p7d@*R4NTyr@ zjNz3(zX5ptuW~0vFR!#Qfx#@$xjqBL3(ikoQ`_18i{& zkTxHOJ^BFDp9~H~|G)RNFQa%|_Fv!x6c?vJe~P&b^p(#qiZFpK$@c)<4M>4v0kq>k zG9RD-fz0`j2~88B1UQYC08Rfd zUfTY{tp5v|vH)uRzXu7xzl*lcw=t3vDXAc%)McLiVgCN#a-`E?(!`Vt(ZW;*gIWSVNb%yvSyhWORD$=^U z&v^D-waiS-WOw=Ll~GoED)fvd53>-wJhN-2E=`K^|BgTB2=|#>@uLCJ#lO2fnO%}6^mZfjkt6$yHy4VmKS`@N z+5)q{oUKkIlTfGbV*&GzDdz8n^5_H9-tipittKl;DXnaI5)L!MIu7qxKg-O;UK1Ow zDbAo$CXw`0BNcyAxDaQ`snD_Z4eWklL&zf!Tk7ld;`WFwI zR5Z}e(LL4Z@q+RiUFbb#Kvki%xEV>%`eZ+wC{pChu^j89?FD)Lt%ekm9!w0*-IU}D zq1mC-K#<-G&J=1IOj_T4Pc&|9RJH@zu(Hd3eG%?wsa^rSFKOss$^rky$T4h_>YZ*c zMS;{>GRfdY0!% zZR+@U+>~5$#FjrL$Zb`JgaB>3R!O$%)6pD~XJi@Pw4j|vGTC?rMO+0?qc!Yg5TvTv zihj{x!7oR3J07cFs!XuEb5akIjD4G{@3N78_6@h0tCxkTf!LcxTTQHg{)kx--F_f> zXnaw_G`5{$!ja!%io&kBqx}LxmPO~*RYwzY zuM^)cwO~A{8J=tmIVXcD)&!+x`mm+p9xkP2*_=%yJL7`XT~T-?%WoU%(!&Kj2YV=n zmM9<4Tip1dO?Y%6F=(VFXuVX*XUFwhwk;bfuiRrUox=yz_F`|!?eKt-bVk(XTgd=Z zhpx)~zHhtRp-vNel3vVPG^bkof>TPO^5S+hUie2)lj53aL6AsS)oUUGG9ig~@aiR( zS1wIo?@DsFTo2Q-^AA}v6{VxlFQ?pMuHJT0GO(>jHnnGHv@SMoueZ+b(g}*ri(-!~ zUl;wX5bPgni{J?QlunMt_P$@jA0B^j*L~BHIdB*~D&;CkhHa>53Bh)jri^YYf{9!K2zv&E)rGgG~dXkMPm#---#oRGtg>CM|bv(V7y zEb3>?viZj4U~|d{gUx;CJ!^}cVO8BV$RAkW(rjV(Z|Xjwrt8?2%?(An&xMM;3JU>d zduEekeSR>sW{kfm9~@G@s`_{n8RIrPDOzXqCXyo3Bx3Gm`wb58_8|_7s|x9?l@k=r zUvCR_abCU1pvVw~-u4Xk+v2O^`7rrPezupUnt`Ce3Vo)%8L*|)W`nms{rJTLHg355 znbw)Mb{{E=D1NV6?!Yf;KsLCL;laqIN-~yPlLhGyWWFD_$E7Jx@iH>~__7(3RI=2s zjn}J14kDlO+>m1>@^!M%V_&tUSqc{tXz(Bgpgr@I&n(Muw?Ws?By&<_Q_YQOvvr`7 zDvj9pZsN6DQ)6XGUi9C58STxQbV`p89|7u4zoK=fCL_80yf7RO-N*qpO|=oCbei{v z3fIVMBa7@ZxP?FMcABGq(6TU%>0b={da3wt$|=u?R$BAa;&P76X>dgOzN7XLrgNbu z;u#26aRL3`rF{`t`p=d6TDP%E9n-gKwbmU?`6wZ|gmDMT=N~_S<>s!9$X1*^J39PI z;K$;^;zbs)Z)du>Pw0|J*=!|D`F(tL=Gr@(E}=&D{Wbh?B{S@WO0wVmHZV;uwHTC5 zRD-9Yhe$5S(RXe@5qxKmb2C{Q!3aG}7jm0yS2sCZXqr&sx|~$NExgs-GccRW7i=N7 zWtnvPW|NcA$;ve8sFHPlT|?gIX1FECV)1>O)Iv2^?QFqqNJ=u+%Z=6d=7PIIDfCui ztauh?Y{uHZdPUjbpLT+$y)cL!1AaMl@)v_4|DZR7v_kZ}*bAvOb3w6*JnW-hA!r*^ zN|bx#tGzZxlJNAB+7AY1KL)YGJJS`T-ESRF-U06dZ2?NG#TPvs9~iWkw`8`0o|~I! zJx>>MFD)wS#H(torI+fUYNtdh*?;|QE*Tf={r^3s8z>UQ?tdS;o*Ur zydPhn9jlWH!X&t#Znt*?{Psso=u->UU`XW_9A0eBSG3E87?1h5_Y z*yGQiYGiAp*sGqSUvCz3irKkG@A?@NvE`Bllu?ty_C}ZQp;TyDjb0%ScNs-6r+x;~ z-?va9xy%WY$ea^N5Va*<{UZd`t%fJ=TQyNz=@7U0v0PkE;!? z%ps_6N)9tky>1#(-&w`;*1PE(2RA!KEqNt5i(U93ixBto-e;n-Ie2IXO`3TQRv*X{ zm{(1gPF~Ued{gn`^6^7K-p#Q|n+1blqvCzH=tJxzUVH1ljY?WJdmA@;OLWwo#sT$N z<>9;$*@i>^(79!w#Xxu8P)wcnSl2~WVlx|mF{e)EFFU4%FS?&nmT~5(ezNsBS4L(M z=O9#qSwbm5FC843BrCaTOj;_G3%k@^YMWzbTGU1gjRVL&)wRiJTf`c`OUuEhv!N0} zA}HWxCCP`8S$0cGF8MdkVr2>rqepJQqsqB_+6rEMW>Nhy^L~}jwt>Dd%f+|dM}piM zToOO%Q?F;pxp$lpetIg6m|r{eOlAt@TEsWFA{_+Seuk!MPi#JxP%0LcEwU9OG5mm|J^W~KCSJ2h)X4J4EUaElx5o=er?vp#x(^n;OUR=$x6g9 z03sOcKWCI}KG0Q`0SVF@7?3BuCIgH#_GL^7%)s@yj26RIwdk|?PhEWmTLnc$z)vKA zA8H8z!x+y6fbq86)bn4H4|V{-0}usm04E>NS^iTZ0@knB|9pGE{G37FA(26-h?gpn z3Al^L@EWiR{R@%*OchiAe(ayD=^v>3f2=PcKKsw0$G7vp&;I)eJnRWZ@*AFDjJ>yy z%UjpKGuEOURN^|1b(sj5;v(kYAF4zHem9WZS7g=I+IzxZsVeyqtfBFF;K?989{rBj zIa#q8tsbOZ>4B~6*9HvDA*HIzctwqq-&qZ+)GdOHTLyB}qo1x%W7)+R=SssM?#xYE;>fb?BcuHfC^5cuFaVnuf7mXj>CH_haC=Mtt6OLkkPq zXsPHrj2>n@HqQB;1=)$6NO{CJC1G;i;L{I+G1U67H{IQ1M(EDiN!f^KVX3PcKJY^*P$M#?(uQmwx z2S#e4(7U&or(VKG7UGG~QNt>SyF+c98*f4bbHY#e$A?Eux#L))-5Q}^tg{?RXBF~D z`c#>A;N;?+z`7924PX09kzyk5ZyCHsObavV`!hm3+ryLGPXcP(sMn)U3gH5U&t zjaXSg*}}zUb*Zd~Lovf@*T8qZHCo&26Kj5xYvbRCho<{N7Fltbsx zaZj2Cc+ARAj+li^y?otU-Yzk zqZx~1Md^7UcNjoUpf!1m7O!Y-N1`FkEu>d}c2C5foWwJ_dNxEnCVx!+=~I%7%l(le z2Guqf4(U0n-BII$`jBodqHz4^gx~X6IBR2IuutFQt_$RV|MT02e&qu(($}2o+b*_Ykd%1VRZCyI~ePdfP(7`|*pM%ABlbf3bGlaeZC_%oPRIV7os zf|UAy3oVG^d>Jt$#jUOMbl}pM&pjs%ZQ9fvFaBkafzoB5X?}f&*7L@sO=yRnXQB%+nAiJ7VruAN#B_*vzBXjz;2U)c4 z`Rx024Qad`a6%52MjiY6;4!%!MnWzfiGIvKm3DW_KN&WD(FoQo^x6op{4wB2G3cBA zav_!E6a&8$W;@W~P9<1MmpwYmZ87K#nUquw43@I2l>A-)@#ZroCwogh!hzIR@^UGB z=QrCx9jET%Fx{(C;9X~a*FZu)F_!Q8o6#PtsN_B8HslH1X^^9Sgp;t<%jK8lA1m6< z$*uJgY6K!7EQTilL@LyNk5z_l_G%~F?DgU~6si3-yX+uUd0^xiwXmM{JW=!Y(do+U zavl{jSj(<4Sbw5FZuOA+FNTI@>3F>aCs}dMFsg(+BN!k z&qurnEdu+tv^ufA4klup7skTtITsSHs~$Gc7nw+<3dZjryhUQV72mM&EjgqVD%)Yk z1mWE$5$Kt_(k+M^`3aSM|5KNN%7@I(!>mxA#bTCA1Zv0*fP&X#pWF8g*9v zX{)e5D}M~(tXC1wY?b&;V%$!EzWei31mfVX-_mmB#%=NZtjg+oK5!Xr;bQ8amF|@e zug{!J{SD$hYre|9pQ7C+yg&K)%Wyb7pP;;0k2X6nUFy@)vzH5KzBkE4G#LyZB8lXm zJ-qKIRy5=uEEmXPrpaoY`k1Wj7E&W_{W2b(EH%Lby(0}1N94O1YJTkR%b8QIm^kn= zy(4=PXN7MV3i`oo^m3u2No=|4a?ahnW6vORWe5(QiGZW8_EsW$V15KV-lmkNIxh9; z043!;w`!xb>tcxeWy#AdB)R4Tq{mI|-L!E0TPrvIvJgU6uYJAYAw#3cyeCgq+z`qI z=jP%BGz0AMf|EK1rYRs>!zS{T*b&wppO{#*x`?>?^9r{lXj|w7q{?VhT<6fTi%6Z3rCFdSq5$n$eyb@1xS8CNycTQMVpgaBcX6(nL&EyQQV* z&CzM{y2UX~ky6V_F}Qa~chX$b0Zda+>GqTIy1kIQu4t#bxw4+iXgaDEc=_x+Ca|xL zXAtr+6D~9`tPyFUI$AHUm>BFF$)nQ4mq8R{em{dV>)ZFWvq?4x)Z2VC_9q;H+eSO( zu=jytaf=DUcw;~C5l?NJ(y~;J3{xS!H{Pb*gw^g+R823sRv$4m>)|3aD-DCybkldC z#QC_G!n%Rj(fTYoY82}ooDX&l2C^}8?H~4ime)&+OlKu?z(SZQ@tl^IKN4pr{ZMId zPnn;#=W6R1_=$Q}6q!GT2=oj#8K2hB$uHKgd%F8B)`-P~M7rf?Zg`ZwPd-gEgm48W z(n*-w_xfstR9V?`s1Hy&0>N?m@e{oNaX)XS{(;-!?4J{XaW`;SLL$&U z{&(}=Jw6!#0s=b7mz`hr=~G{7o0nst%CH|=ChP$2viIpP?8?iF(OH z1$BEDlWf%4Y3*6H{qi3h2}vbc+UoV|Or@foAT6cJa4BBJDUSCJ*1it(Ef+Pysd>Kp z&=zm8-*9T@1i8VDOcd8h*ob0xzglpk{)#;0wDpm@r8G7f%{D1w`l`4$ASq|aiB;9- zmv%3(hkX*{&v(K?cd~)?@!6NYHG_^u-G11<{O=P!vlPQD9~TSJ6veyBZ1(;LQ20^T zc}A|*MJ77hI`QELUI$-%mB%FJCT`QSG2nGDna~(De0B9Yu|1Z39HooQk3jsHFUy*V)$D0V;#n6^!gH3nen% z$}v`@)qkNYJvb0LyHe~`b3UBL={YFyov?n)jz={L?#R6rLO_S*{j9Jri-8eGMZ|1? zI1+vcJ-akALin*l@Rpp!b_cfYS9NN@uX@~{{2`g!>c`(^P!aU()1x39wGKR$P}1d| z+SF=3--d86s%W-cCiaYao(}GqAb0rN8vJiG426--jt`7@TwY1h;$}aYIiven**_G= zTmxQ*^$v!Ra<|5EMV50j&eaS@3Uvrd2)Q0`kAUnPM?Ta+)|s1oT{s}N-VZ8--6VP` zO`T*sE$FR?hW*kc_0NLx3?|+^UAdh0cf%T^$RGdIhOWyUvvY7)6bAbWm7?liH5($q z1R9m;r;MS=;9M9}^Y?ck`YTte@fQo*yS$2u-@O$wy6RsfzB>E(V67qR-xIxHc1 z!xnU%I~-+S@yTu!KRt|><|hYU`hxAQ8dkrgS$x>!2SMsK%yv5V&5nK{TMCLzNTCjkjXi7M8sK!~Uh;{;?84k=I`g&Fg_Q z2;@w8BP+{<$>x6PrwsFZjB~Sd(gpps=4>ZK=l3UWYf?sKGrM^N9Kyt$;&(U$s?@ct z6W2b~QofIe5&8wExA@g$KCQmz!%;V5wio=$#GhO@-alAF2;+n-an`0YMhly^=;%+* zxt)I@9HgU@lTErmBLkEZujXfrJYguOLBmfld(^kg=mLk?j_w98AFF|9GnTLIqR1Yl z(UZBHveYjf@`jD3td7jMG-__P-@u_$XAXuE9$5WJzMD85SA}x-3JQ|$*Vl%-!WHHL z-l7vanmk%l7P@P3b0)%{SfrFc%h#c9K6(U@BF-V#uxlftTM*I!79`C-VcZ;E$ldBR z)-h*FQNLYtYrJM7(JMdFP|5t0!GW1PulU+}mhQJXmCOm+e(F4bcf(+j#(i7JX^Cxl{@$IYiImU4ajEw#ktL>BWsxedM$ zbJg;W8}}VfgC<2j9rGB3Bm3Z(+TP_vbq$lop(2{P#!*%uc}B`gatck1L0RY(3Nim) zDx1#95+m+je*26?^9gL&x4mVtwtC$ib$)NK;hpE&jJ}E8@5`GjA4|Y<7ahz=kM+NZ z-SWS&+wu$;mk!arRhMvg@!7SW+csB6wf=5zlo0jL4Shm1a&VYbxpf^9fxE{eo2&W^ zdxbD0yfxz4WDBiy_?2R-Mr<;cjR;7(DXFh5au>|{7lUKtg6r9Gl4p>>^#1w5zHh-g z4_vgpTG!#AzJW;E3B=@Re2?)LWBa%|HahS{!P46}UxgXSdeUT3i^f(+I{OLlWuB+M z8qLSOA3n5IP<@c6HB=y-VZ^-I#K(NVH;ZPeG0=YFE`Vsk;JG(O$c)bPbd_;znOpoL z#j`8R94q>V2+FVNW&RE^C_g2=-QNtbNwo@&GnqfS@)gakxILO$$?4*cWDiWfm!)5x%?m{hX({+nsmDN9VEkZB@}zwgJRm$BdDEz{4c6<>K@fDb$i zf~3pmhtSST2&OZ|kgRSYGYh+n-zroLX@rUwttm&-zA#G3KC+UpQ+K%YOD#s$&0^jl zHLM@T%f8zrrN|!6(=cm*VTSM5f4T@ zcqN{0oIVkx0j1C#{Z@2I2VG0k*!tC!WhvQ82Lc^8)KS>0*mO*ISBd&}v>@4rCu8TE zaY#kXHPqrW#t*!T#zxb5v`LGF*Tk`RO}^!mk`8RzZHPBOp!&+mw)Lum6K7`EQ*LT9 zY(q%hw_2>tFB77zCiGOJ!i-p(r}rhyh#g}e424ZI<;}aKXF*W8vwk=B(Fx%jr$L`@ zQ@2wmo$NMk!O~)gXG~>@S*>7ix7d=AEUN%Umz7HFGzGYqqEVR7f`NP%E(+b2Zy=Sr zuR7XfB0Jdb#r%_-kfqVJ-PWQLBe$y%%Gdg%fpDBYvWZ`_i*a&&!blQ%zAzuV;zKh# zZXhJ3od~XgCUNFFT&KMCJmE#LHdFayFKCBh{qPfv`!hdQEnUsxyRSKZrdXPEh6U>% zC?(2n(^#xlaPw6wV`o^DnXoK|E<&pxc~-aR9J3C7u-7#|JFUp)@DR`xPb-!%@<%S% zPEE`-sO;&0HQo+`hCXN*QKXGIesVBds>M2LdT4im%&H4(i&Vf z?t4aqN#y`bB!=NFM=A07jqGiaGzY+esp%4HLbC4keM$Q2H0_gvF^go6IJCA%& zxv$JS*#8n6CNpL}waV)qOyH8A)K>lE_TLu(Avynq7-0q*^J}#Upga7if;aZBN{qx9 zRZx`gi;9WK#2|8dKlk+^)|Zc1A0FZH0pgqptoJljk2rx*^Z$-h04Q=>0Dt+nvH0IU z{L|Ohe=+o+Yg>L_kZJSW{f7N+6|jEQ6Y*Gr$elLm(<0`OLpgMICLS3ZbdA;X+!BH#oezyf2z+}@CEm)b<&I9#Xq@=5k3K%#X9Zn4k-rOviRoo*H68uFO%eIcb_{gGe`T?CFhj3mX=iHD! z(fGKIE*coxb%%%^RtG+$jOB%<-Uso(b z+nfVals?gfN}8aT?v*RVED^>5TpNaSKQ_g&jU8A!Sj7Ks=ozKWv zn-YxYF$3vyw7%JyC#5)AX$fDFUQp{)q)K|JdMC@q zDJ-7owfkGRn#J7>h+LQL0#~##<~JU2__0+$@9zY*gg#x-XTMx!^OBO6XOJ2m<^4%P zPV&QFkZ!pwTuql(y1nt-BZ-X0)Th$L_Xg&5tD@|x?B7&H$zRgexiOZG{ub_@$cbP2 zlgrjK+1>MK?KKmpUsJmm%uhiaDYUc10d7YMnJ!uAUePQ*RPc%87jL@FllzN7azg-Y zXC)roNV{~Giig}=z(Nq!uMXTp)`PuaE~^vhwi{^#a@*FPIjDfkiOP5$+;y5w7^*d$`voSOmm;eY;&rh0|&Z zSh+~#j>#RT(=M)ND0H79oV!C)j#Lg+D>Hr`Qh3%qu4}J{R@`liaM2pqFdIHjUwhC@ zKii`57GkqA15cW;d(j5`}Y-8wXA44fgwGgTyzB7m`CR7y8RLsdMg*Lv1^DG_LV) z#u(lqu=?JVzL&-~ggc`uRre=`V8h@&$@T!!g}~dJ`1pNYMm-m`)#jTZmf^U!t8tq) z_|JHTR}j|F?M*)lleF0^G2`|Yqx_a{J8#Bu6V;eN_#nkz+7R55K16RxvN>hArziMT zl$bQuq_dFTX7F{S<%{pLqRcW+T2JBV#pd8Cmd#??Orwk$wDI{N7&23Bl@Yt~Ma0;w zD%+fOJC>3Lda|b6tag1Y*nq#W?WFon59DYT+gi={OJmJUo!fF3)bRX^KgbI+F$Qt* z0T_%$c=V?tHTl*rlhIet|4rt#YU{R;IUz`UlBO5+a`aEKYlt?o;v!(_+Xm+&CJUi@ zTbJHkhXK5;%nj-M#7}sFxCS7&6^2AqPKlD2G4+FU)MrM{U6j)@RA&A0Vo$7Ejxx z2yiA~*qw8<|LiI&TQAF~Fz65!w;)y%|1Fu^t9{m1B@DOTR!-P3Hm$!#)+nK=V<=z3 z#mKH`GFg5#6*}S@EV$Q!DXO1lKrZ~k*hf;U*vUb8Z&ECe>)1TlmyE~q5#&bU^$?G{ z&FebG$!259$!2y%H>1RbL&<-t)kml6*V#3u`!srpuHW0y{UG}^k*(nz%s!3I7}ImC zCL{4Eze$a<((~NRaW|bhrb(})8+^JR%e#K)VXotcT{?oo2;yhH=2u#vV7Uo`uz>3A zq;2l(#Qi`plUt|SZAqNkaHCsZQ({!u^Sg)39b)_EH*`zzHP1lU-G$R%4C12Se=%t1 zG%9YgQ;d?-@+v2cgqyZBg@td+v|ffOSRPN+IMS`AfVqL}?>fH>PwO+~{2W7o$Kb2_=1@ zHM<8s^zc~gZIgfaM9q-Pr5-Z9yKVe2{JnqA@zcXD^uFF`bh(yu=Av}MmO{_(T40pT zj2ID5-AMc3zttrWgT=7jE(ZemYu5oYpMOVNClY{X6eSxo8aVdemX-}^b8$U5s|2~F zS}*Af))&b=4r{rdrC`-773HA$-Y4xW!*J2=4HK)N$=Y`*w|Vr6g6X4%fw1D+@G@8i z-gVsiY!!l`vX0->=Gh}3(qj3pLz1lluNRUq!#?bAvvdm;BNm%>vaNz&(WDE4KWaF} z&}Z10P9&P3LPnfN=(c>3?DSGy>COSXOvpi2g z!}hpRKW4IVNcW-m^w8U%n82YbnTfzSckl%saFz;|b0kOS#7kzes1MKBr}c3q`Lua~ z2p3Vp5@}GLXcsj-00P|2^#%gKt-t`V2>9Ht0%+tOe2vDXvNM(`V|eZ?iw&%HpXu~}yqJFaV!DT%!v;_S(Whbn zZb!*~$90f%U>K3SHxC0WJ{Y~_xYQFEX+^whx)hJg@i0b}6R8DRR0z|`fWdJ&(Syu{ zPVU#8+_N8IOy5(dz5wWGAguj=XU}V#RKEXYKmd0QtRMpXHo!;^eTn$LV_xY0efJ^L zN6LC;<2Q8v0Pt_XolXp4l}@IN#dE9@2l7Hh`S8wpW^R zYlh__St^AQ-5EQD3hONaXWy4WRb5(OVfg4!R+@X>SliKIjip}YWP}6RuO_Aza(;#ccS%ghs6eDN+_Kqt$lmEi@0~<$t1RR6V_`@iDZv; zmrtPS!h4dOiad^WWaoyu`#&$S&q_Tx8q2O|ayQ$~8Ux<-IjUtu)~uNt-+d#;%#ba- zXu97wvZ6oFV*Jhl%F9b1^yXW+>)WoIdG)IHK*D{%DxiQG_e-M5Rb@f0s$^^E(E2Xk za?{n9sNSW-ceuz{FVx3$%+Xst{+?gKDfe=p>^{Ef#!D0OPf6-ce7Zx8Aht{wTb55D z&Csb9+uy#}G2HLDn$ZY!^Ot{Anz7NENOu4KrStTUt#x@~V9 z$K315eHJ7d}OP$EO_7({fv@faC>V zsnqIB?XZ0{D(bIi$J=+RP>qrr`hJiQ*RU`^Hx)FZcd#6m!!rWq)wy5Gp1Ah18M$F#I*TCj|8rT8~)eXA^wEmVG_T6VP zkTHq&XXvEMErJO5TO*62!Je@-mTlG+b^GsY{6GCqrE8+Fu9cRw0V!4)_^oG7Xq9=kQ=Eh9F|kd7 z&vnP0m07N|*!KL<^X&6Mw|G{o9%LYVh_}je3ldE-%KJ%iln+cd8V{O7;7cCuS_BWJ zR_AEyM#I=^k_+VWteC{yUr}?<%9&=%vu_eSl4HKT-D!Je0-HZ5iWc7|>>px# zwnnquj|h>*?nSwep@<_aCGm0^ds`cvp+7yS2Y!2a_z|tI3a(;T>E1T+9U>|{s>e2q z*^l`zsI?J3eKgV!PR;Zx=Sz&^m$Zv%#ff0QrKuWN`djhf`I;D`_FY83Zq2mF_CbB4*_2u}} zQ24l&OvsGIOEC9O1#)mRR7Gf$$AEcp*H^5YeyJcV{alPr%@Y*@$D!nHwP=e5c^sOQ z91`T`P1Jux$vwxRf2{%RoXX^ieT%Ccl(5zMP<&J6V4n%fx5!FJPeg!Mq*D94$C@FB z3m&)l=YH;R@Yv4I+_EQZn(82%7#2MusB<~r`PS^vkoXDm_%8;f5Q4`7wr_6YyB~Ld zeeGiUNAi()PO+_7{rSk7?ZeWUfSvALN8z9FiF6Xp2e$tH7cJ6otiFzH{N!!>3cN=R<)#I8`=57P!Jl zF#bB@UF#r5UN-S@8tBAYKX$ElM!CTPuPLOR6wcn!! zBD>%=K15@iK0m+d_S{$UYOtTjIaQQ_>)xC5zZg&+jh`NTjmAX#f3~|)Lsc+6x!U8) zq<76+myBK%HSyyslsbb65^Gk)(3ZYS1@k5|jNG_fuGMpAm-A3VscqG!*BeAg-vOzs*fm4xDgO)AZdc5twG@!e*YU zfX&H|Zf5*1#w>EBZNK{1%VCk@41|TR(<^HJuJ^dZYIde!DGuE>Lf@Dbey@;i^>T4- zoyOmRfpI>FqkPRQrDC@Dyft-4$r<_p)+zq12&B@tWPF|EwA_j=mZxaCzs*YK5}LBF z+71PDkZZK@12fJ&Jd+yEW)hW6X9)8A%*obfKbtXVl8dhXFRx-&R->L5(}YZhU*&&m z9*cMjS?i?e>D%RdcFvI7jgJgzGA$`VD}>gGZZgPuDyTEdZR05(OPI~pS!oRH+Xzy; zHBQFoD#5>VGpMYlVpv%3Td!nyd=uRA=hLw?N6XUEB0u-7TU6bIvB#i*bqUyjI!R?m ziwgqq^ z`Z(68Jw5R4)31t5iPO3%U1U=aH91@#Kbv;bu8XFMFN-UwXlA(aU;(|Kt%z2cRKQt* z84l}cF|r)>(4~4a=F4xEN&KK?Pb3;5fVw^7&D6|!{FKu4HO-xYjW@ezIc`)1hqFA5 zDse^DA}pFMMg1zp2MeY?&X&S_tx+*OL{-Syp!Z0=@8fG=$g1+yewA6XIOVCz>$2xb zU;ZH<`3&tKu2f6l2-O<(XlBEI$GQQBuKvq<71PiE<-K|!@9}nP%k%!rT!g@OAAQbC zoSX+TF)5FMaEFay_thI?_+PjKCag|xX@LkQU#2*vErtPH{|kHnr8^l8jLCo9+*{fQ z7f$%0f#2{yUa-+VA$Z-t`5I&NHHPUI%po9%@d2<&D4x0u)>pakk{6-cnBf3b^7Y9k zkjP#D@y@*L0g%WbU$I^(zey{?AS+TPnht;OPz2;U;A+ri`aBE_UPpmor~FUsNCu>~ zf2q*C92fY>e~w4sp3VQB2lBsX1+rof5Eobfefz&(!wY0r?-0IKGwxGX4i@8M!pl~= zt(DeTuZF-BF3FlbF^Vtvd#EJ_XnfoyPr6ou5Jg+2mTUP|06_-5*vVD!Bzm*noWlpb zj{LSfqxi_|E>1YbzBf7Qw=*3tA1j-Qr2@H)iF?m;sMV@o8WXb(4+u82*Y*s-%3W`n zt98t_-v;PT;43N>xx`F7{_A$6uV~_m%yu5`pRm-lFIF$sSF_d#js^|cW<485#$SLC zB9@Y{KLPx{mna_-kG~klB}pd=7dSW7j|Z*;4ch_{)i!0wcL&jP$%{t5&%@Aj46>~b)XL92$kb60(Kzp4 zqKn57tZRN@x;%#q&Ma8Spoz0-r4^f)@1~L9>HG6Lk$*kRGd6I&@ zi%{pq`$E-WJepY!i7FgKMu!xnNkW$pbk}lfbgOYIbp^U*syq3m7;(-91R z*0xKT(X$nUKi~nSQfv+Mpv~e&3CcjfRkIOpFSkE-aW*|FY44ME?4+Ae#%Gdl`s;q2 zdU*(vIjuxr#m57^sN~8muMa8DjUn1H_P}m-{AqP6KD5|Jl6qVyg#RxFT__G=einm4 zoVvg#g5PEEK}LjT+F6b0;=#&AcCmh{i>0GqlO+P}wtX*M{=?dppBGd((v{GgiZ=qm zz>6f4#OsCPq!mJVKnBqwX@{yrOLVM-y>(035;QBc1L;0Ao}lgC#9pJEP;Vi{ErPEd zs(&DG7w^IVPUyAM@sCsN&3;nO5cpUJjh6V({N{$M{di(b07TW^K`mdYs1V`I z_wnN_yY?^hR#ssiqMCVMsmDdfce!-tH_w|XZDeVgAjQw4{~U_dbN4ZGGv zv}47#CR&SqMe6nj$$BCYT>WGb6f*8Lm3r-q)_3I0T`7!TkyCQ@y<0ig3r}6ub?0(3 zStMA$B!>yd+TB$@^0LHZca7nuzIDXQ7`-(zej^Z_i!`^bzm)m`AOaB zi~9ojQe!DOdFL0`W#6rmrh@yML6Gl0i91mziBf_BbEFM7M59uOhs1TJ)Ns_Ky~}7) ze=#ve!;P0njtp!U8T)WBVeKCEBCYnUR`Ri|ZVYj9!7lw{qL89{R90O`2(>9 z8PeWhE(H+{6$7z+^G{#T2X!KDQDPF$U-;K7d`2Ih>;@wD{$d=qdw9$$b?m`J=OX&$Cb!z&A+LRbER-E0 zcDIeC;5RM^q=BoIc_+Qcb?O<<^W&a9c<@v*8vl+nF>$edxb@=gWzI;*A#72{^Xyga zhL%|}>P&jJWt*@i9Uh3Tu0&Dr-?+Rw(#2$FtgAb#x;W-uDmgQys`~>rsfhlW;*e`n z65s&&qpT*5fM~(2D9S2$o{o#hX*7#9J{}Op>hWc47bDdCblF6CRR!qRA7wm-Hfw8i z=oz3|p9X6%+!$Z*%sE3|*xT7uW4C015^V^^O5p5HrAj>=ML)N|pcslCHklz6>RQq~ zRt_Os6RO{}#UUEpL_k&c)4}P4jOHVaNQ-iNESGuNa;%L6irp4&q<{6Ha5gq=h)Xf# z>5@sis}w0$ zr#vwFk?;jm)`Q8eZ$tXLrtoHikI8C}B9M?OF(OH)rgCoOK1k!~n{P2ACb9DuESdT* z*@gD{@Lq=kIWg+=lQK*h57+6*H;hB^8Gh3&ZozLt17CQJRaj@IQ;a~M>`LVnyOnf2>e6cDFTR`-bdEBX1HoW*!TqIFi1wG< z$S_RY(wKhW&|X2M7p^=Qs3dTZa0!6lt`Gu#NxK<5?u zY8=r$K`iB$jdU~Lsq`^hs4_mt?)~#$8H`HV@Y(g~0D+feJ2XqjkztyFs#YV5`ljYT z^_L8+vn8YEf3+^Bo3P%+{k@BOze|WR7XCEp%cLeNgPDpQM(X%~k)6tu8kh_QgCHz`D9q zG=q{^&GQ!!+VB8W;U~Ws_$l6hIMBSD1g1^vnJ@PwAc6g6VBkLHy!XlM1u783fYxo# zd@M{!)H7kMGY_8PJTmc95Xzlj{lz0#aim>4Ij%T0_GsNA+mEqepNer^j8m#YIHQ&k z=Vh`Z1F^p4cF)u*Wb5oMVtJmje6IpAFc48b8?3)RR)@!vXTtF)^)~{JvfCPCH@+a_)1sBOhdE zTsliFKMYw_Y&fxE9UESJ>j59+KK?0{Ad&TrSMV#lW$7gYU$qiXT5R6_huIsGc4mkB5UMh#Q@E$;EPDru@k@x!M!69dkRpK`Ar*n^r%Fh5$r(8tfrjiH=AZ7~OV!H8httQ8_t%c~s1qu7x;||3@?|%Ys~-^OtZyC( z@%<5;7?jGOQ|W(e#`^n1uhqUC+FgxPaIFUf#mSW&{QKk@_n2tM;|^pHW3DOLRsoz5 z+EEluwA|)lT4Af!e^KTw(t@P%5BW0-wSg%$ZV_fB{`Y}5+)T-}O9zwm?E!s>Hq&aS z2YL}{XwmdsLzFj`JX$bPLrAeM+UtGxPEy0>$3*!07`8wib*Fz0s#TJIPz zL$D0W)zi#n%BmvMrUIK5)5R*pZLTLmo-cBn@GG`B59)WIY8x<-RdpuzC7j30rku%N ztaHg2It+xEe@xq#_ZB9uwRCqj+UfQY%i*xxIFffZ*!AMu6qp_q_(IC)>j#w`j34!( zCu2x|;pHIAw7hNlW8VIdFH)$Bc__P#?yE?Wbla6s{mrZ&w-Uln<4B=qF?EHuHdnde zee-MEYl2psXadox=15TnY7@2 z3LU`>G1&W<>o_a@y6bN!&B-CBcU9&(R&-Ja41XoA>Y+nRZ~C`6usj#wW#$th!lmro zvbFSuYDd+pjz4Q*C-``rnLVXZou1^O$M+S`UMg!5OLQr#TqpuF>Ksl^XF5OSa)f4K z>DOMn<*Okj3sa;nH$XKD3qbK0mC2hNE`y8i?o#=-J6aiFCMAX3%~NvN(J2y+4BLTk zDqRtwLfloI+Gcj~0TWGtevC;&)CPG_jo&Z1=);9(j}!+Vs!C21E(fzOm%N-+zx;DjtK~V^?pi{Lw{j$sR{I0S zIaP<9huHDevH1b$XVQm}kDKhTSFfJ$9JtL+HL!5*v@@CeTWf!G49^cj#@bcXeGQ#a< z7iAG~hds_dL5e`d-Cb64p<1M_DuXUZgQzNQq_X7~ynS}P7^lSWgx4O9WlGVPfx&5g zpr$guyLa%H=!FlX5fS_CB!8h6F<>q@u+p0K3kReS(^^>cBUVUZ4_m@sbrYC0oym;b zF05R^XLduBaW)vFFf2G-lI?vFttYXy9&~^A@&?aCrzwD#@a?`yDAiV(Y9(P&^j4-w zGGg;>Y{9TMdH;&bLZii%iejBQ`wSJ}LyFEZ= z6uvlo#I{l2G6KDMuS>*_9Z%VATQok{xvE-oT{L|#7d z3Lhi`-#;zG+%|0QUl>moTYo*!1@|w$Tv8=^!`oqj60g@;YSkd1Oo1MjGFQSn6X!Ys z5@{8x+$wPKVOK@M@eDACF(qtuVnE89Dq>P&slWO?U838X-i5-1l2=z^W`XWlfvwOY zM95O0np7*Vy^aUc<1%7eFMIJ-qaj(2XuF8c|{av~I43s|_bevxpnCEg(bVyYw_lgzkCD#?zz6j%vGf%IU5y-g|j~fyY?u4XO zD8yxGq;2oinCL>t;%v&@IJJ=ri##|Z{NJKoRIq};%|i)a$StdNSw9reIDzb*0hFvt z@0p^Lt?GZY4&G?z1bPy3pPw*ZauuNRz~wZPbe%6uF(vspQK>!&yackjk6S=K0?>3o zui%S86&7SbkYW8Fk@n=q;upMDSMjEE?DED}i7qJy5MH;~EA9WM={TR~qnZLTuv-l6 zpBBuJ^2Yug&4P~2kk6u0Cj)e6<8GDXGE5_>>)`@k?b|0|_u`+n~bko+s}1q)7)7Nm|naNWeW=Knl_zgQ>q#cYd}>9K}o+g^169J zQ1jD!{&d|d&{Z#$s##EaBk*Js)=r7)Vk{z>K;+qj;3IrEt;99D3R#7uU!?_q{dsO) zLPb$AslRY?%$}eVsNZ@fnvn&UFdNasLE~~wQ9BUd!0x(gbK5_;(0R%Bl z*Hb$$Lzjvq6;E?_)fiMa4UtA1H3lWFVAT&z*bPR<)g6xtc-)n*h_dzeZ@I2Ssjc^5 z=YCyD*wa&3p&qXbpZ0669Z=k|sz2>?$>gYGNYMBc+*RnfxGKOjNRDsdCU(*pPS$t1XM8k#BbF z2DB3ENB!^(>1tV>PcCzExx{Z0BZ}MQNfzE14`hCQ6{oblA}NM}7qFq}jKh?6(BOHX z?|roV&==7b(_Qg%+xj|<8T3vrLo25QJxWY}AJKN&K(x0E@jF7mb25Zd0X-Ex0K?#E z13P1fQWs3PcGEi-&2KvSh{SmWcenHoCM^cnN~o?WbLB)Fph`PrWx_lyD`)FoyFTs^ z5|eQ0Yk_{$$)Npg-@!cR9#~}xt`4PpU5BvLf)22u<8no1`JtU3Spr+V`-jsSY-4|1 zdnPU1jUEz=28H-sg>+pRjNiFL@&-4%4^A&OuH53R>;^m6MA?~sYN_0-3A&{~48n#( za#$_A_r0YAZ_qIG^2u%*C{Jm&X;}xpWDiQ4NVZ?p`Z_p*mzQUngMuXDTRVq{j$EA$ zuCir6m?X-mGL#>3xmyfT`0n>IC5x=!E2;c?TxZ9vxecF~TFRRLIlkS`=CSWd$1XY~2l2+o$N6^tg}h zdHv&YvNz;!SkZ65WMs|#)ef!l*$OyI=^gYp13OwuRGh%i@dg|2fX2L48)@X*qu-)pS*S{*8^+ePN!N_OD1J#qy#{M9UQi|0-C!j;XQ7 z3SZ^2=9PQ`>J?Of`@S3rOW;!c-f)c5->~lR^Ujee132=~?A6bzZeL`w=q1*g45Oe%F0hXD(p?`g2>Q8O#cxRR22i%hj9?NlE9Efj=T!PRCSl ze|LGUBS!(3^XGQJrW0~0Q&|w@0T&?~Z*TuOo z$48V?U@1sv>Z6oYrg>am7habP#v#Mp#=zZIw337L6-FOLmm1NDBVS|Fl(c^5ZojDGTPtjdAN9eP}eYNXj) zg+Wdoug*5m?)tNtJ_3A*&@0jL8oE!Aoc><_b5cGL{^@etq+9c6)0(yTtJ&EmBhO>J zZbibv{kM2F9uo=qiC=5Ohu?JPZHi~#EA|e-`D9w!7M{%=0c*{fbCgw{D})s-S00_d z(BHBH&bN3wjUZ^SMwx#X=J+Tsg0kG#pSR4vo6bcc{z3LQ!jR^iaD#GAyz zezU(m|7-UL&&VI?4TM=OD_H?q zfqh>CeYW3T*Xn<8@fSB;GrZpwmD#!sj1i{P90;!ek&Zq8V!5K0i?gDFDxK?)0^Jnx z2Bn8cXU1T@R?9Atxv`E#KN-inSd}#83YE8r~o|FOI*C5xk8s65D z?>iO^A|49Xm5Q{e`L7BoIs?#SZGWSuHN+_M34fo}t5Up7j!O~8^8G==((Sal(mbyE z?(}^(D21F^PhXCc?=D4yFpCjAqDr4sKC|RGDaOEgNpoPod2<75N*H@No>)0Uz_bU7 z7_N}aJ6SXwQF zd9YHET*tkZn#a3jdIKV83DW=pM(dF(W*k&q?-|htELB`P6N}G&z?~cu8iIW3Lb6yG zpG%f<&lRhuMWwV*am2mVG*IOaO{T|5ML(k#$nXvLc|jF{nnkY+$>97{)`ZTCpjL$8 z=KDDL%YAIcAsPXj-|8POlT;~HRWunf%a7)2zrtZ-kX{|Ho^k zn`D#Z!+H&vu9Iw?e4O}I6S6@4vn?RmUcARmPAZp%$&&ro0WDMhDh+^ePwMOGgzo=n zHaf@m3?K{*74XX?;C7BF4aD}(bhS4H^jR}@ScW6u(gIls+kBQ+fYR$%Lz8{Qf{qHP zHL_0L*Yp!~+B3ZvWbcq5&&a_%PxdR-H=qkJ3hRyhS-$)k0U*?#U9li{4#@-X4hu+v z9cznW0h=h#Z1ZirfU&-u=lOkmnE2<>&j2tts`8d!mlP0f;hcb<`!rGVU(fTuZM!|B zx+igF^#5Gf?|@EQn|Q{77Vy^jIycGPZ=r3fk1jPWQ}Gy25x7lI8_Y{NH1*nUCFA8_ zZz}rTmopCf7$O|uuy%vp!aO{`(Lh?SB5T`P@56jiOGNGAUk}cJkappmiiM2044QwM z^svg5#36R#ucw7alSw#k80pd6&WP*{hWPB1*(_&i?Z4TVW1YO1+2DhkVr_?nCb-ij zqVSlD5q)DD>?yZ(%XYzn*CKf9jK8>>x|wx|kZuL646u7`&7Lq!`YS;PFGJ6OCh zXXXh_(`MK&u=P5BJ@-GP8>8&(9k-CJT|?JB3!+?#v2y|ktd=c>HVUO-t?s|B{Zfl1 zi9Gxrj_gE?wVj6Q7cc6{1rbdk2eD?Xmsz`^xGs2B@+7ani%E0KU&qX&$cl_CFXptvkV9f-K|;MTO}oB0 zhBTKiA0^KCwB2&e(Cr2@isex2o$0kSesJvvozko#{6yNW>pu5srQ5sZ?9>v1%~;n>#24Sb-C;9s{9gxx zgL&z3^!;wM)ju*sLsp%{4Gg^wS90OqMjM+ZeyB&SZpqVsd1GLF=Q#YVDruxG8 zcD_*J1_s_CzmFH08RZLZ&>W;tOw*Maz?@2=rol1K4v?N?xBdmU3wK^jMG?1|8Z259FI-32oa4I5^Jt{c5$y~DE z%&vpCZW(Tz%1aeiE}5uKZJO}nNRzx~z}2$LwrRtce_6P_Y(Tq1npqDOu(~bstsoTD zV_dPc)bc#n=>C6U?3`w|-E<`QQ1XiLsBM>@8v&$K`7%Vq@_I|T+I!^Ip=0~Cw zeJj3n%ZUmidM^YB%82zWpE>wL7<&pPk8`?KzE#NAuz1=256KGbgUz~l)B)8>&ks_u zac@oIB?+rZ>4?i|L+6`jCR| z4r^0D#BtU(7YuJmsDd$uL=|c=5|ad{Gu=43n2D)8;^DAh)*Qe*|I@6yn}atcxA%U7 zs8w*sgV&vX)}e7^r0KA&dD@hI6vyejELz#F=4_z>@|jF!ye+oZtf7|iac0ZQGk~g$ zx^vlZD*1vwab!qTR9Ew7zkHyPB|@l=er(h7ifL=6yZqFAQeFQCLs+Xjwj)_*XhKr3gmGn}U=5=b-QRG5FCZazPS~Y505Jn}reubL0z7(zW z`UOblA9vZM0us5!pg)%I>1achQ{Dw)J#y^+(&Ccug@!w>2L&K-QJoWtq%@LgY zPR+HyrrO9n6`?%?^=@itHMY7?A@6K%v&e+f+z7+>;eY5u)}6WZmhQ0@)V-ZYps?va zCeha08vTt;2;F_P0n5IpMhV=I?ve^TZ^Clccr>LIt@++I9Qa6KS&>$J;I(L6+x;1- zEk>p*>t-ICRK&Aopr-WA%w5mOh++ui_4HKZYO?V9a`L)sb$&^r>41i2yf>TL#tM-n z+wNb!@vn}8x35(TDxNds0j2qlcquP5Wi|pR6iUTfw^mb_i7Pyq)(e{k$u`(tG&VSW z0ofX##@37)W;iQ8Gs}ROuST#sVI*tBD`Z$|2eXzkh22I4XvEVALG@&Y8r5Wl1m7vT zCN*~z&m_|YG`Yh-62%Fn z#UL|VisQLIdhF)v+MEMUg)YlZj9@voD0=;Oy!Ak$9?3=qPx5Q&H|>(-{DP{tL#54p zJ%&9jPBSlgW_rmW0NkAE9WSMsyR?PpBikEK*P`Xghn3zvj?+H=) zCJ0^(1E>x#RZ-KzfT#qZ_MVawOle6#{B=U@iw5V5a;2#$$|nu@Pxg_r0Ins~aXNmzYRO;R+z|VU%Yh>|=N@-q|B6*h5#%j}|l_I0%%c7Oi-b_4u z>V4ite-e6_w)v=6tk|DPS)Mc>VBxB;2m>~*uyhU$u^1|s_fyUSIKczv>wtvCTcRgY zhm-~^D*tzC_jIoZoYkQ|C15T8djjt7sLlc5#}@?D20&S(6Pe`8+d0(C!%u_=NfB{^ zDe5CR?YenWS>n>YZKH+`$(uGuZ}Bw<81p|_PbUclR$M%5?Yw<}8|${5yBo$ow7pU@ zuq>JXBPelYma`rrPo1>uvGEyYLRkcfq&H55Hpw__MJ&;Dbg6EDYq-e=%C!~3!vQ8;nS;eZ*A(&zG%zR4O$n1jU;Ei4U*GlCFl22c2wt{Tmw$t ziNx1L_jiL5vI6lXbFwcMJ#!ULX5|!q)LMM=+1YcysBAZ+Qg1&-xGMVWJfP))+;~3d z`|QET{%Vn#kLur11S2vLb14hIF<6k@I2h2Xh`Ogu19R<%W3ZR99W6q+x$G?3$-OC3 zGef8|LPsT(ZGwPX~+;vr3UyW1`U%MBP<+7T3 z42xFt(vh&^W)_y&XzdU0H(w2KTE6Bj^tC5xj2^t@FX3H&F zYo~G~f~?j&a)Vo8^8V;r_Kk|cW8W?E znl7BEU7UFT+Hu)F`Fb%Z*9OAnozM)SO!Nas((ck5ssaMpd? z@f}BNaf?mULl3R-$~VM`5X1%A$Zl(TUQ00o)!#Zu4ypB?sO2z`eVdZL9KJO6W@Uy&p3e-H>zV*E_Keh=6H% z>k^^;TXNodH%pEF)DzxQx-2SxnjB0oxjsgD1YZ`O=>{W1<}5$Q+B$%T7DEI>$#=5u zGs5hHrG5-<3@kxs2hyhluWE(;ulA_j+Wn_1=8vT2+AG=z3Px|}ow{>JAK88l+~xh= zxD&@Vmp(u3tSX5*4%E4lYIE{B6AG+zm_E@tr&4T~+!iu?Wd`qHOpx{V`7<|nw5Mdq zz&+s77Y}CVtCn4M^SUDala=|S^eq8fEL-KJ0X2G>lmthQ?MGaAH+$m>T^q#G-hK`( z-re(Jw7$RBk(X#wgoX&?E{1g<2=MW{$^|lV>lBg@J7AqyCTF{Uz;fbgg8k*Dns(*o za~QP>u?=;Rh1a1#dc5ho`&&Dw`Hm_Wu?R(SYG)&y4k=2ZVpBQNu<)kO)WnY9_;}{_ z7kmWqe*(kLE}%~P##uS7Lu&Cwz%C9?JIjE6M#=i4OqurImrr(f$9F6}Hs;>` z!D0BDp!Xw9Dj})V*Y^=hn;R%?n$h?WCnJU;LK8mM$R=qEzMc%?=0j21R<@o^MY+*y zbA#9li8!+~3#JO)4i(!pksFjNQa#Y2D7pD;qqhcFPQ18icH%%Hs^{YNL4Ipv=<%Gw zKV8^_%f&?!=jSZE=a?Vn=d6}^EPk_6I$Oo%;qD!9Ci>hWWo+hHz*0HC|K$9Wz42x= z`Y^Ity3Ib&Tppet5nu%6!pW1LUAw~kxS-nHQe!kgmd$>`)u&9z0JaKa&ab^y2B&DW zw34+^GYm}!R#CirZzpVP4I%{a`OAJ=YWQuw~4%SBYe@m%ls1i5?T2z znzhkF6S=mIl1oR0Rqmy}DntC7%0f{^TVock(>%c}=^Li?17anPj*;pzoD_bwo_r2> zr#Q}jHjq9?XNu=R^@>`J9@`s&=*=W$vUK0WqE2Q8u!)H5;1pYR3cp!SOhMV#!aOUr zTH*pJ%*jCfqY@KN^oIU3wFa7Y(fW!ZRkp^e4_<&dJqEg`X8h23M!V&FU-hj$+fVx( zr~a1RLetWCg^5>K2`#!dGuf#O)evC^)Mw`~$NpCRJo=r}IobI$IERsqe!<#zI8cNF z3UXfmIoNDLaBHN8f0pedA~{YbRAQX<$eI{+Ib=Ccw+&l7OFP2;;?K4N^V-hOA+n zR~@Y^*>)!$d$4L%@-Ec5n@&>1d~-yJk4Mpoxm(tgff02!3rgX>Tr^{?kII>}4pip@BweZk%jKu?x) z`DA9ANjIdaIBFh~p=k)KuPW4G($5I+k#t&Uj4mX6QB!BAUqbWht;W7erMzdUj1f~< z{=G)~q|PBai;Mee0c+ZFv&8^aWYcICXW@@$6%_?^%!LJVXcbIsc%l$qzSQy6nrQvF zBxma+Kp2uZy(JN(1;`*C9YiIX4FVLSKvZHCD$nuWgMetpXKWUFnch@%Ad-vz`K}o+ zzjKL=v+yd!`}2Dy(`R8B@3HbpD^RC|{+;3F2dXRq>DhnYt-wD}NT*NF2jnsSA;A9{ z@y_yDgvF5Dyn&WHAWuQ-mH*u6>7=q(Gx1FDBTk*}PP@K@dgL0hcm{vlT>_~dE?SYo_ybdGbH@cLHIcVg;`Sa z(2wWK-Q-sguhYPiSo~$-{l7vcKVTxq`s%&s}aO)K;$PwhOH>IE@(Qbn|kl8is#hDdQsP` z0&1Y0wlxAT5Pew+&{!TVKK z^obynu?vo~d(A4J-)9FBK2Y)CnVOEigRkqla1!cLhAju!b*0jmIMIS(-cRi($(yNIKC$(k{P!WyYFQ0IVV zS7#vEA;sqjiP-V;c5Wh9Unz;tY~Cs(Z}OFK$b)4&UEND(zxNy&x&B&RTI!nf<7)@Q zmORvrh6}!1b|Uw1Zyfl+u3d$sq?8PaIFF4|l+q|aehLLn^v1>KYKG$b`O=q0ahn1* zol;Vb`Xl{l-N5-{0XX5;&^T8C{4Iy_Jcjn-UYOpqx+BO}s3uf!r@hqY&M4Ko*x#}D zkME(l5vN;n)jiPqrAYN=vWK}HUFCqF`&g!zJygfyT4+5>-&-UdU)NErGHaE8Cy)}A zqZK4e^#-3eSuhFAvT2-^uy)U$m$gg_Vq`*?w7+g08Zmd&e`{|)o{=tODesv_JCY2V z@U#i}1YK?cI>3IA)S7#xq^!fGJuuu9vQVCFrY!v|m1WCzyIafNRO@ML;o3F z)-Oq4snRcnra0d zFG?M#8a<|7J6Hy{3_$;fbY=9L$|DC`N-9K2N??PTij|ZOPWin2aCWaob?DWgtLukd z|Ej+_Svo%I8S}gUL!uw9nPh7H9qkZ~`SA?3(fD$^rCa^huhvq_!HDb6io$hKS>nn= zyP3H&yL`S44~?H3Q$5QdCdyQxehSRJJU?U!Io^ z#lAepbC9n+!5Z_eccH!f$pd6pRs3}J#f+_{EZcGr_f#c$tPBi)@{1!XEtvQwbKt0%NZL^blTowDB-4x z6uRViDGZFH^0?@~#qVDu4_3qZPWCI7b!f)?u_!$c<3lH-``&eV0B8Gt3+uOv<1lmy zzXrCI!w>;Go2m(q8Wg~;HUFhniwWE8QWECt`S}_X_xX2TlxVljrOKZ@m#?d;>{f0eV_v~CkQEbMH`C2iUca_~OF7i&=}%T2ym=&CjzWEeRRlB%{AcADyFYw$3n z5VMKQnb3O2cRM#G;arrn_O&rrxEz|t`KfU#p3w^ORpwwre>U-dKs8BK97S&8a{$2zN98QXY{wbE~mtM(aL>{6^&3>UQbW@Pt{wzBVhX?a0O{q5)?`Cy0^v)9-Z7Tis>>0s!0SE|u% zSGxZ}1cpXUCt4GNx@qLQDa@2epXj%onJ(XuK6my3A3}Vf{m}u%(G?tu;wT9-4^1mQ~F19I*F0a_=HTH{p9cq+<3x+@6u~)$q1}- z-vcn2l(yZYs)UfSB4K6l$6oI&$+ARw7jzvbzdB))?p$nW^Z+zFF*f)U-uEHkYFF`n z#4J4u!g1M0kf+|$E{>F9PCflyZj@%f#AfH4CMG6@w;sZTx~&<7hQ+O9-#&Q8@z0s1 z6iqC()CoQ{0T)LkucN z0E?}yex+hz^M$RNz3f{_wxQGsRI}CM3^ZIqu^A{~Ier+5Qb`OgTcl(qXG)wCE|DPW zFo9~3v!D^(ZgL>l03(TGJv>R}fXQPTiNs-h%cYMA z^t1@>AzcxC{|58fxs`cHbF~7REky%R0?6ZoC!8;**kDCG_m*$;H9%wb6;d7 zwA2ZM?voKr8zjf-IhuW4a~1n(UCJIpJJjDh%&cPTw?G7p9txApAx08#=HKQj8y$D2 zsRHh%{3Xm7hSRQ-Iw(bF)P$!v?a_QT=-nHycyXJ<=PUG`@g-SpFYn`mYZJF>FlfOT znX)r$^rQ11L(^@4Z_B4JCxAJ_F~f5OeUZ`?y!yTin_bn(9gXu-s&TPh-AILKoQgiK z_jhct-ML4}H?MxoEgOO~z}s1iqKdCOY;g#`h2Azz^*n<6`^I6hLM=?!z*>aHjmZAJ zVQpf;PA>N*mFZnJHRaExFX2q@={+k??i>Si3lCd}bpp;!T3h!Kb!uc&U4r)=no>fF ze>_ZeCykQVx&#D6>76fgd0S%b>JYXnceb{JpbYs{aqn9h3Sa?#&m>Utz~2zT{IbqH zYW$32%nQPKl41r}&wb07=G^4Vc3SC#8%ZN?ebMzRy?xyg^0{EEKnUyV7k$f0@Xe#* zL#3l>ihFK16*E>&)9Q`XqN(nU2@KPSoPz2r$*)h(7jWYJYD^%pZn4vZeLy`tm#ul3 zl*$DT?esgKppRs{=53*hwVd4tj?*Soq33teLZ}`6R0?$ttf%hB57-xXYODP5-s*oO zhWi~{ELN#JA|3O8g6!d!1Wg<^Fro80y$s5^67=HD@~W9N>y}zp9SD_x*e|wIieHRN zHkUxGv$arzxA z(?c_I>fh7h^>1_d8z>kht+bx*ir{EoR<#eeR`=sp&Btt%?Hep@kea8Kl!Z4{PF+)U zF@nJ2HqG7Jj*WHw3Q7DPc(E(WZuE1FR)fPP=xohXv0#Z%e!F&(<7v0-{YR;dQNt}| zZk@SK-tAFX&~V7DM_CF-a2_7%txQtCIBm#fwa3w%!MKO=?3Gasmgh0CMQ8lpRR$%y zb=;AJ&B>CRw~Y;xvpmOrzrg!~R1ZdX#@h?}sa9C$uf_HTr3#P7D4W-is+KFL(lv!` z%q08-0#h1^cPrd?akVJkuk^Gd6Uw6piu>RTnXb6=Z(W(VDFrLF!e zg+{f1bXBDU?-Tl|y&~GpY;%k>9dJ1MRc%wl$dnvtd{N>L*ACwj0h3CuE)TTiYN~q5Zk(<9Xo?+teVMUrxl&$+6b9518bKWE(U)bbm?f z8Q+Dz_vLa=t(wXMZuMYFN1Y(8ZO>bmnh>FRVtN}i#9HrtS(u+4v}eA~EMQ)b?lrgt zh^y9+jt*qoc!*Z^?n<2LrAL2*MTcFJNz`&i-U0K`WP??0P+Zo`E6}!<8h`t}v^9(_jXi4*s@8$(k9;fE zbROH{5)J{|F@tPB8GbUj+=^S= zkoQg2CxyR~@xuGsz96A*0-3{sN?v zUC39V#%zU(>3BAp{K}E*mC;E1)-9%_-VY{b#sss-xMUaQn*D^84EBl&52f0Z<)cNN zQ~@nDVE=W1>J6VtN0G9j&vlq{kpRLJNO?t zuCR{Dn}?*A9e|AULOvBs5iE9YmgLWXJ3`|NUOR|fKfz=(8#19q@4kh-YT=s-kPY3% zOU0R-L5A?&g+!OwX_&JvQQhvF#h~;~MY%64Lxrgsv{_{yM*RYOV?MUJZ&aZ*8VaSJ z<+}kF1t68I93WWv{9F>I@#~2R0!jo6w7)RA^QAhD+B>M1@W&q`I0lQ?-hGGO6_kn#JZac1XZf?pIc7^=VJKd|aXuT{T)-h?2tk7Zt!H zM&@=xmF{B0di{pzn{NKTQKmC@K(-DkUuwql4a0J9hwT%|xF@SVr; zE01G1U1m}=0kDHHO-JH{^e-}tBHJ_dZ?N~tF8(LQIFV)EG=Bn+Ao?@AVgjUL8Eqhe z3q&@a0UGdG7%2-SGS_>cLK(n-PS3*9@{zY>BH$B1!WIa~0<;cm=o|11BxPx4kb$#A zhRXAo4dl~wz@HZWZ2Q|+i*nM}f=Ei1Vfm|DNYb!3EZm;qfD}Xq*q{80uu!3#h@92r!yaBQ-$|H8cQW&o!+?Ag;Z62k;9Kmh}g0w7vN(rW8y2HENySzqW9Loz6^!TAyJXwGwZ9 znKrQh`)}K`l%zz& z+@ioQ-P*XkXP`TO+h*Z92lMshf7tDJJXxDd6&{+C8dTNcs<;o1L<^TM4Gz(4r?=w1 zFM+8?_K`9epi4p%Muht&E>pO;u0r3nQw{sF5&(;wtAf10;^%$XD~58!f)ZtZ zoN@PE>u6DtDZg+jDA7rn%PRSVkx=X_T#GWck|UIz1r+_JKd-?Yd0(2MzV(2u+|%J@ z*N`F%7bMj=ShnDA;m{PlC0bi?srr7>=^Gen%UQk%BbMAV+8Eikwh@K;;<%C*KFG~D zU#*5V!r`N1xbg|*<`IkpSznCTQGbzV`W-JF{Z-?w3MH#=!pKN=(=9d{c&+e5?jr2+l6sIlKejlQ*sFpP8o4Pw?2RNABovC;|4RhRaX%@bt; z-;s^6v5qIo1=mE&Jqrh*PmDt4MWnEcFdNNzFCThA+YOjfXl*!<|Loo6BmSDKc#TDTJjxcTiQ zUI~j!Y;5?m-V2Gd$)||(V$o`w;D-BRJZ>20`S`jH{L(@M>F&)wMvgx?wF@0d%iRY_ zNlk;tdIo=t=3%gk*xJAn^gH_ozTac{)R@P^E0jNr8o9Qr_M7W0U*n_d zZLp#4D>Zse)+!`yPif4pxMePN@MVMY(neMFwxU0eLUY`8SU1p3ih}*5ckpblIobbp zOVKiKpc5Y%d7zRTl-(_-CNN-bb(Xwx=!)HR&r*Qb&&YM<+CrZ#Hf8Y6_iMSsW9Kne9!ec=H=Z({a>H5fQvpf{BYaxJHq!6RJuO)v(4TMJ*RQKrY!?hSv@ zoVS;ADSUlSMDJ7uBNaDl<6P5=V#wXe;$7b>9Bul2!YlH<-m+plR?s;EmHLSqq#yOZ zA;k(b3WV+ZZkx--r}4cVVU7@FquR)G6?d3gOiI?ak3AKOct`&n(R-wLB0@`gdOo$G z7|Vxgn-TLxBSf0MRIob8+vT#bFo%2!)jlimYK>vBN*DXCDp~l}m$zZVGs5AkvqVIf zp`&_mjy>E8@a~_Mb1x5s9~^B>Uq~n)0rw{#Vblk&XgNvQvO3~`Z-u4j@|e}gS>@T@Pz;T#j__f= zWO5beIQA=`Wp&R|)ui}y>r|nqlXpND0XKv;=6vWkHoj~=t2kbbEz&dZ?oL%{>eb|A z&vMuhM)P&2b>cDCo9EmCn3JFZhv3H@=eKBAk(qZP5K8^2U| z%%Uz^0Q4ijB%@jP_`n4QRZtIU<&f{z`}3zb{j`r`VzJdagXC=!#wauz)8O4 zT%6f3EQJ5tnzLS8`|Z?s3+Dc(vRNc2XdzIZZ=2>w#j%1E4S7*&@kTZ@$T;RI`NL2=<_Dcn@`D@QhA>3* zYp_w!V}JEmaR%w~&Ozuo*?PH!JiJLpR6XQexYAj->C53BMOfujZ2BPP*0RzE9o8y8J`_pa7tSJ3(fOl@BT(wT1{`;Z11%<>;}oSc)MHvaU^Qy{ z(@gYuht#V6j@1iEr=3teO0Z^a&33EAsnC}*pb&-aKgZTM{U(Jq(B__vbGIaa5}ch{ zq)DTt+^d>4TeVCQv&2;N&R+UOI92QcdtvNE*tXb}dViwF^-s!g%^#;^+I&v)TeFh% znoGLIDOJIY*iv<+iKKMuvQx96S_NqbAN;f^$p#c;XG0%X^?;_0nTcft5>_6Pd!D_H zSE9_DEY(u%wSQK(D^-n*94qXlVJa4%k*06A$P!%A!7_Zm%le$i(FZ~UBPaZ_@N}<; zP>ZLYD#?C^h<$zl&6tAn@t5TmAcE=`E;p)L{~TB6;#+=WobFk12Kg%v=j44>blXx5 z{EPh9XYKExRB;@Bw&Vswz>2rM{I%YZU1?Z`TEOtl3^Y`y`sMZzaH3m47zJYG`+cZJL{0xxw|BH13 zNBM=o?lvIp86Qbue--)HaL4l8?}^k44G~}u2iqv*A63U5&D`#p!xVm09wvuW#6MvT ztoWb<)Exkiqcr^t0RIr$u7r|kmO-gw(WJIRURy{F0B*1FKjkj70~ohxK)Mt8;PH=~ z2tat;^USy2KiyK1jR1D^r5@v;|HsGfnfNd9`H#k!3WPpGAt}HKK2UrT{%_aki60Ak z``gkQDasD|4RZhGCU!hrnS(-?KidkF#JXs?@y>LcM(2@|0scnDgo(ePSy$WNOiMVAC;K4tn&J#BEJU{JOxV1H!uckXMVB= zx#sX%w~i&djj0HIkL?1a)Ec=nXJto0l|%o4&qeNe3u&5J+9F$ROzFXX*j=zT(dlE_ z1Rk(rBuee;V@_oS0rD10Fm>#_!F(e`R=yGr0id3I^Sv_zZsp>&iIWj zxF{Y#WBR)7X+OluO)#vK>!v&idI>AuCyqQK(Y&AA)uGMtbXl)Ndiq6^iuq`gp-k^# ztM;w=!{x!WWmQ`ep7CK!-59*m4BC!#x_yaYiYQ>;rU-V3pPQq2&nAH9=&qUVT%31a zzWT~pXOxp--I!sG>~B(kf_@uCzHjJ5+?=^7Niidc{Ri#FG8+Iq*S zq_^E9qpJ(j&ro=%St|T?z;`8qcgE}9`Nl>vQMxJe(d%1VGZIHTio^X8@@^q?q@kZj zm0l|YG2p_$Jk?7E#@$-_xN36%C%1 z!8doluz1RNB*ba2zh;yo*J{3ZIXRH4U-y0=EWw3a@p1EN5Mc#*L8tF4clFxBOQ-Xq z%sFLwG-cR}5?+~jWkX9Kvvqvo>M8OUZD4VnVCJL39gX_pq1!W+N-Ddk*!8+*=%ZK0 zQyZY_aet=6uPtzC*CeC4?^(B>ot7Yr7lWtj(I*PD8%yog1>$DLiHPw8J#y?2K1*H$ z(x>RdY%b#1-oJk&I2iCc?ojl3-J5jSuW**RjCBeo^xle?|QQ)9=34Xdca|m@> z`)Jc@$9Sh7;hV^>=xG^Osb;Z<`ZR{^cZOks+3=fBH5YHs*n-tk3YvEMnJ5zr(}*Oz z*cxYHkhQsiiHQg4v5D_Yk~1tl3_8QmWtCZWw@D0dwzuXHne`b$^38q?kOp- z?$g_VF>i;vBpbz~y6|6vBh0U&@Jn88Uupz5wde^rX@*r=dVqWyrpuTn1%HG%#2AH~3ig}cSYO9MlsNmmma_t@7H=W*7L(4Uw zhu<~+%1brWc0H?$ft}#vB47QDDD81G`G7d>;Ok+J$a}#Q zL3FdcQ9WPzYdCmCv7u-uv-jSX%dl?s=v!oJ(r2(0RcPd-_U~xD; ze{#t+;GesCd*!`h(0L&szUty#aa5y})p>r|-hMU}AB(k!Ew1J~3chGw?f>}FT3BG~ z{E?^Gfu0qz`I#QldpKW@1EJ=TwHWsot()%wPco{lIgG}R>($smdN@?54oh!)?`$5T z|Mf_iTyvn%o0C#&?OyEyC&t^lIvyBKX+CUAf_p3*KYodgcZ1(3KBVju+tm<_4yAbf z@}S|`5jCU!4urlN|;=BT@9~TbmlEh-6lbZhQ8T97Y z!isbhllf*b6OUw5%#cY=c(VaI`;&u=oaNW?j1^l10Srt$eR1qxPEM$u za*}X9x$o;>-owwBVo0G5+DE-JidLkAEM@+$r%v(k&&?OHHIxbHtG6v@<)RR!mHLIUk_NffYUpaoyk;8Z>n1JpX9%^)Wc(V9 z!rbmnHWg=%Xx+(d6+!U!v8YF3Ho`-MmbG_Lj)p`)BLv$gN2^7hRQJZq07FM3#JCTh6oy6A(`-DYTq{gcM zXpNiQb%Jh@sKb4cO^wx&`F8cL0tOgtY+))J2kk8Z6=Rk^yh@t*^HC=NX8#cZccGwtOvnk_B6`bckeJ=a@E|tbm&%txddH&rq&!y5m2)wy+42S{(S*yQi*`R2g5K z$%9V=zR){*c21qu?CA#$Do*$RMT5JliDUU)?F=U>T3PhQ9@!61YADiG3XL7OrSTe( z(TDn!-9!P1j+fh;o~T6)op*+lRy|*3+)JF~+6`)kz(%YYuH9K_&><@}+FQ1FMPwY< z0w`oN>!7BGpv46J_p=%z=kxJY6Y}{uEbv=_mf6s*hjl08N>gNVn{4dkV-LQ$-}H)T|`Kw?Iqewy>AQpf3pQL5K1mj&)b(Pa#FUeqFfI-n?)eYIgL zu}DB9C)pMwDS-2$W?o*!hmxUx}zIqw8hTwPN$ ziTR~5L8uF& zfE_PFSrh!z>@!Rh-0+;wUn+f8`Gu7bjpAroDUu4yGeY$t^|tzneGlM&jIV* z9HPnAgU*};R z*^*qb6pN#BX#Nj^ZIdxd7o$)riYY28Dy?S)96d_Pze0B8ha@$Y~UYQ+$Qif z%e^oCBqikWQ`;~1p{-#n2uHU4U0BFvnX28-+?gwI2 zi{>>^B1pIuxg5W)iBhFyYt-C6#6FUorjyj_TE+Zo`^bRMlXuHT;dOEbKH+Y7JUJ)F z1QH7+ItdSLId9zi7W<|oUN(zW?Cbe(iV6QU&NZ9pP+PEws^YR@R(L~X#x}IFyzsZ} zLx@nsU$m)}uh#H*=o9xP&1BkGu>s(JBA!x;&K)Ep$T&9as*f6!I2zj$;MxDaC~6}s zo{iEC&2?=d@_}Es?YX)zQc={nqM-cYeA6~p2_BQ=r0(?QH7#UV3O&eq_GRkQ@xl_-a-0kbj2CjD!H=QpV(ma#!o^M9J z_;m6F!_(q~UC#5?l%mc~dq0Kp?InAf+lJW&%~RjP3E#aFkjlL}^tq9b0=8n8?accd zJz+fhQGd|f3uZ2&OTzGBoq~15-JEQd{mikGQ;ropa|$I^k8NnZz{GI)I#sbpTWmRH z_{97#TK=(VwYCzjvaV9OubbG}hvi;!+e^*q^VOjag{a6pGaAjK@eB%L%@0rp6^ZJv zl!0_@U(LIdkNuG^&6dn!)uoqR`tZRe<|+uoYu1eu}#f^)|9 zVBDq^byc;Gkyfvl(5fH?b^62DypCZ;r;w|=_rdhryMM&KDe@Eeg9{yKv|YI)GZdSj zNr^uRN6l6p&Q|~Up-*k%v6HXvo^9o=#ugP-KJt}Rge0B^^f+Z!`1Ccy+t{pq0cw=V zi;L;J17cQJ^|CaYgP0kH_1xI%h@D*QXBSroVX!pYvS*url#j{MDNFJG9NYIUBA4ME zSQMu^Wi`z|RkhTNJgc4u=o>PpU%xzc=4J4ukFtVJMGrC)5}@sUAe}3c6}joIPeGIm zsy|l7nmek7gMXXK_iyd)FdLcC7?M02lIZRHxUVi=5Ciw4fI)) z94ze^V}EW~x3=h|O4=C4)_(Ehl%5p<6eqnu(1;xvY|L~5PuF|dyv$BgOmN$Of^vIG zKW{c$EDaWC24n{HE`P@x&Ta}jOjAAwW~Asc6Vs|XO?S#emVU;Mqs!_|7DbM#-@AV7 z9dq_1ptKp9Ky^N*^?o2jvxB=Cq&-X{cxSf2wc=0fbQ#bQN9A+6=Ca(sW4{)>yK(HF z)y`ifS%&dwEQ9+^cDNhj(SGk+%jg+9N6!!&l_2vTlEdZ;wrG^!c%4vNnp zA2a_J8!O9?z^{()%3fPY=tPwQRebu~Rc+GIuCSMG+gmKXrmyF8!>}O9N_|Q7jR)WO z3p$NU%PdndyQ@$rV%|y`Q$kHy85@0~uRpKCY5p^1vM%MiO?#T#rVik$joUJ#k!eIfz5H=~P>SvKE@}YU)NP5a-#Y{UmnFXW zjhzTf;q$_xz7H0cgfW4xc&->m8cAkHV^eG*J(TZd6hR+8J`h4?D{ukmjdmT*B3 zQ9aPdz@dX#WeES>j!kS`#M5rQOra>Q#7FB~dwzq9l|xhZMuG!NtDN#%usUbO6A-Q$ zrdWm>0XUSW47=T*z{EchnCqYB09^&z#u9~|yuM7Uj8mGaq*Q}vgDm3xL(SlBI2JOl zB>yY8U6_qX2^VAt?VQWYM2Mx%>5O9Mj8%CmlDuW( zuk<9k$&&K|b7zSErO#6R&%-jKrqv{=#L zi?oJZoivum#CjL89c%0$yvJLL7XZJp&u7lCq!SSFrr}#sK%XThpuU_O&_KhPeFGS(Fk&QjdW$ z;>HE1)^Y~&TW!IsHPWlhl!})#39Zo9_bG1~ZK>P8y9L@0SGY|ScZ2;>Pu=kuzr*&^ zr8Akq8awrWEJ3*z<#!JGFYJ0YSK6k_P5Kui;`jFLqZSJIjR(pn-v3eMIFx!R!ti`Z zWh#B@S6Y^SyY0JUBSBjFxe%kLTX&5)9smpm%o<7t0sa5`| zK~T?0>C5}O%$4MH4&_<|dMUJ+el)4a=$x#tAUV2*@g}p5u1Pyr$9Ser_f69Kp~2yO zDFOa+d>#-&CJ}jF)~HWH+iD;Cf|XuU8AI9j64>m2Bup2ZkEmjjCE@2M#Fg`{M~_Z6 zm)FXd2i4>lebZzM*UQ~$HaVE_0(qk0CT_{0E&kGXInS_iFor^7|LJJJ z5)T2Dg#a%1DPUQnCDA;uccbg;mu3I+HjZVkm6sBYl{Yck&5uC|-_4#4BJSQRNpuKf zgLDoK$Ts$Jyq!y+AZ((KM2JMzAsh@SPKB3mNR1nacT=;P?{n~^qn7TQ-v}DsuhKBP zZ;D3r&1{%6sm~t@I3f^QA`w<8{hTI#_<6xwATgD|IjYR%XAWHS1#VF%1%6zT^t40p zW(rjBN#?jW*WhX0_g;g%)-atHlOPZGHWIj6V=2lcs< z#gDu0cX$?S@inWmxJ=G?3=49J@7ycDZ53(%T*zs8XlL`%t!(ubMG3MD?-iHlh}c@f zMBU*{9y&Kk8>ZF@(LNDhoz~PdinenV}oA#^I_eF9QS)`UmGkk8ZjS^sN*1* zzBP)J+Y-4rqpjX!cwO84gzUVmY<-1m-Pb_md(EmUZojzX^-qiO@7q{yg`e~8v(>At zN5=*}mvk(;#!u;X7u4{2adK2a92b*}ex4kZghp;lu;l~UO4d1Z_QZ|`=9mnjUw<$&4ysgL$_ON-i(>_ z$JmlCFDO@g&WJ19PV)f$20dXXrv|ZQa?QXK6eZ4NgtWS9K3HE zyum@7nS~x3*0nkfd+D5P?dJ&X?d{!U)@(0%Q@2)3(dKr7hp!}06^30qBjW^zI3GrQ zF$d`DIt8fxxJs+xZVR`*{;{aZ#(j5Js+6;}jsAT9QzrNT7=E159P!ez>oHeM?>D-) zPbm{9Q(9NbP^6VZV@s+xK67z}x7nO7tE`&8OG3@Q3$z5w za`Ah?O06vh&0fQ?ofRkVM4fhxTMf^Co&n&gZTgp4s$M!mK|MTDLkk~eqB4Jl@9kHd zT+K;do$EHs4OK}{OE%ZEErF9wB!Z#eH>|hJ)tbo~#E41`Qw3Om+}}hWk0Gtg7aT-RM!z5Z9>^W7=1Pm| zY4Qe4qV}3TIp!c@qe%``OsFTVGsHMz_%twIW4RDpIp8DuTh=cfEeH<4KCO zqiGakhHh3#B%F0pV*t|WWfs;a7%?+L>dttEWsPdD+#m|{MHnjwYm}M>V$(Ku%i-~H z3(I67{-qqXFt46tWvM~jUONui{8T$f9i?~Sf*o%hNgp>AQnujDW?W-LGMPy3sJcE@GQ@YZf3q z_y`&?{b}7hdQuTkF|fONshsw)t}u-^bIXJ`y%+3%b7zY_+xmj-V-7AZoqvWf&JP9# zH1(ju8E@x4BxvjGn^%?6X0k8N7t?{vYc5I~UMd-5O<#Yif#Ul8>d1KhhLlkKzy}clP@^xCv{*S2Dc*@f&eG2i!_0CrB zZvd8nt9|j}p!z0ILLv~?MXq^b-S!Wd*Y*Bxq2_S(gMVC3a8qB)g3x7&7f(zXaW7S+ zSew5Ww+|>^c%D_xo|Xjhfz*;~9oO4|Ud<87j-J3f9$Bjx z59W#4IcKF|m2Gy2+b|>^1GX?4%2|ITO;Syq!tZ*XhNOm@KE=OD9gfPO8T9XyR6;#$ zSmbZ7;I)!WO+hEG9{x~J$v*CRPQUx3SvY+%xg0@#$ew<17ne!#l@U~%>!Gb2R5inEVr3&WlZ)=|}c%Q`UAYf5mw;SxrZ_>(&S&_lH zkvGWI)KwHop{2`6s*p!?RAj~aIguq!WSel<$=0H=p_SBI{6LrRClzYaxhkoQ~mXp>dtAcxt7S+)H^L#MJ~cOqT&1 z0pI~CzO#Q`n2F$x#&}JPbt-NfQ%)2udk=;B(m<4#^SP{x*zX<9Im61%E1b+cc~|>% zD2+ouPI!JhU$fYlSnT_u%bajvP~x%sW9XeQ0fVC)O8avbTQ(t!~iC0@GX(%I?6vHEK<{(6*vyB$KUuF-Q=xWI^S>X7(o zPw{n=!V$is-xMKdx25t7p(no#pLF2hVX%{e?In>kYwE5&A$zD(z2;M;BKe{tomX~Y zSxH(&&jdASEH#|%3YkU%4!_U#!yMok#0L?wTbSlXu+oXHBOS~Uox^3j!_u7TC``8& zBt;lpX2z2be}H-t>$t6Ra%Qw1pvDkld zlu(TCLvUV|NR^TMSxWCn^#R`U*uNBqZN-EwgMQgFsA&#b3IM}+U#0RKLmU5NS;+tP z^&bBZ>;M?x_3tt5zjSdZ#sGi^`EgCMC%b4bCeZ#hziYfwoll4!2X2A$xBy9g( z$?f7Z?tL-cLIW^j5tkAk&p^BQD_d^?ylliJ3vh+T-SCSpt$@Hwx6%!g zWrE`l@vC^*s=2kn%-&1Q`q9g}fdRdb=TD^lf#n9znn!7OpHPE?3IP2SOFM1fFFSzE zYjU#QXc{^1{J2ISSCLqtT>S98=2ga|MCq^K#@hA2Xjr{AG|7mxn=3&z;*EQplVX(6 znGg_UxHS<_fRz0Cf)KsqX(n3)zzSKnZB36NxLZVa>llHt!2FVMzoEzw3-TDU^?-FONpcGc^ z931_cp|@Jf`z18G++vYGm}i{n{*WcA&c5TlU1F#El2@iBKJfG}+8MpOG+6 zHmNtv!|f#zITQiZ@C>OT&&*b6X%aGY-m>pq-zwMnxGbv3cM7-ue6yT4f(me|0)A z*U#_1zWpv231u*UGg9hoP#!c!UE_!PAic5C>1VGQ#IF+^tEOhTyfkP8(K2H)`^_HA z(Q{ha)-*HtH7k-pW&YIiIqPkXPQ{>q-HWL$U2nyWaT@NGd~$J?#;Naa99^+jD@n=T ze6Wf+l#S|!aWMM$9LnAM?Yg;*rKQR(wquBRujx=75_CqpbU!mbQkUlJ8e8&4PR_~U z&qG^m6PH1@)f<*F-6Qpl-#hCcf;a<_q8!DhN$6roD>dw9LVuN~04o}nwg1YK_~)_G z)Mt7xHO{t_fD!5nzhoq_#rodX^!Jg)Yt9W)zEQFGn(s-=1HGJ&T{Eb{b!D89#(C6E zCX{;YhRL?6*R0H{CIr#v2balNH|FOil3Hds58{^--@ihWV&fBw@vj_*wpPB&zPv#M z*j?i6Pq}I)8QpXULEui_T2AGAC1)a?0>4evcTIhG%j>i6&A6{KHU3A)$^TOk8VoFoI6Acs4);$7RtrPe-ZCyq0hIS zxDTdVfo*b^g-iCqG*PCZUc|>r;D0LE8}excQm^} zX!Jchr={3?=3i{#D}Soz7xRmJ9~4{~KQ6Wu?o@!{yhr#EB3~Is=Y9=X_J*g0kJE)G z6Nb0@bA^> zX^wZrsR+R3VJbetH8i?K+LXg$4a@@<4jJsq@l=W^Y4lu>-ld>(8pBlA_c%U*61{Ur z!-X0;&muzZ7t!+;WIS;{rqSBJOHsI89Vf_Em{cN&n3_ZAUxhj|HxS%@`Wi)?Dx7LE z?xg6lYoAKIg>xkFHBR28*(j!@#OLWJpOuZiJ}+0tnCu8o^Emzabw@Oexw$IeAk?zU zLT5dNoOT+~==&G_$NJyGR-J^o%IxEw z%%Du{0TY?G@VA*5aCCE6U(Z{R#3{DIWGB7F;=vGc)9HB(TG?BY1V16;C#9jrnWyeG zN^T!&zq^L|nx$>{k|xR3XOR^@2GPGYJFrcuo}-^$sqE_VnWb*LcW${#v9gvy?KXAJ z(Zb62Ww%7RXonUV7O}m0`gAmYAh}*iHtXGU=zlP3r}SvMRO$qqxwc#D6V*4>)J~rM zDZMpuL>SvO`Et=-&)Q*UKWT+LtaPL(xOfYyDq&%@XlmbPio)SdxV-LZkm{TOObO91 z9Sm7Nb4y-l_7j!#A%n!)?R&GBp(v-RvUjZ>BwX#SGgE148C)?}-A5<9JeWonG15Pc zTPe+Ix->JgE0wqxSJtUJn}XH}Q&Ejqb6sKmp6c*Lg^&hzv1X#z`|O=qom}(_O*={% zZ-FXnu=i4xgfQuNtWD0Jy}AsWR30vt-TWY?3d4yD-342S&0=-X+5)7CzeaA|?DXqP zfXqE+bJ>0rJ2~s%r)xm{-BPfKMHxtu#XcM2sq$c+wLQD0kQ++liZd3X;sV_0*&=_| zO=pzmS(^F95-ImIvRwrg3GtZ~c$R387R@;F`L1=26!3b2w7=N^SRLc|X9vV`BY&nx zd;1q}q3Bn3jI)yJXEloTT5yGPjgzkkxC>p~>|y|(%(QPrt`8X+9ji#$o~b`Q90}R? zyK~+%KlJd(A9HT2yC8r1$cg545C?NrMOo~ps;a+en_%A7&UQ&VJFNY|e6Lwm+7m&q z;9F=I*d!Rd{;zOtNTwRsVx6}ihx&>>w$Yk*%i@EJ5X0g^J-?pe#e6LAekb1>U z#k!08uX>^wza(}+N`YVsIj3_>2`^k`TBo3wG|L88o~&P?^(`FFXc#3l44yLN&K4-v zaU2;9Vu``?RgiXGuUw!^tU<4F+xnutkM*qMkcQ+*`25X`dv3Q}MbHk0;MGS+ZjCT| z>{41^jjw2aew=tS;K0~J3=t=Tq!W2>=_3yeQAoRemv$>fTbY~6pLop{LvyrP4s`ta zq(HY$pX6Zg8$+Xmhn1c%qXW!F;c~$ZF71hZm{I9wKaO*uCsQ*yInMhtA4FNt$SJjl z&+wq?mnxw&WQ<8SxtvaXKezU4-?;wSnBgoBQm4kka+j?SGPNYETqo5YTmoZlhYT@a zD5=!^LgXBB_sQ}K5Ocx`A$UY{DdsfrDN-@^sL*%i=gvR$*M%HM?7n3;BHjmx3XQShCFbUmA zKPuKM>W~a{PB}c1dul4h*YpxAlr02{E4RFiFBaH*T_xy%3%^tAlYlHmsCUZr>T5T|7sg zuni^~!|gMpbV{^{xUZ(@o~Pg0k}(-!;sNasM-$vJjc6-d+z@0Q4!@t(CIF06s!{vI zs8{wZ#VDPSP2*Mf6uxxnqiZcPfC_9roeoR|iH|bBy+@x;A6O`-M}xhF0x@yYJTxvT zG}90uBJ(6S6k{ws0vI`tfRlhJK>ni>Bm&fy|HPRoDbE&@)?lR~9bKB?VB8Kal^M5F&v0_#)@uAoBmu5HKSu6k3*U zJNwoKlWPseb~#J&dVr6q$gKahUX^x0vP0KT3zDtXe4QK0-aA_9(i6*BrHZU$lhbVv z;}O*C>=oC=+&FJ*(ZK@cTyeG-p1uX;Vtf+}bQfS~uQR{pi^*5U)?YQtR)(F!oT>W= z>l_G08m~MQm&fE&a_}3DA1R-6f&E*2JjE_02jE8Il0$#6m(^r}T~ePc zE9qYwIQ(-i2@O#H!8k_wrQw@xNU3>u!6oL|>FCy!A2 zda9t<1`)_%Y%Us4OR8B1s!Jhat$6*HC>pTN+~G?(u|r3TH(v6cT}c)uao3^j5dO$H z9Ib=t9k0qFXD4Mj&Y)L8sz?iGu|E0Pt!$(zw_F@?vwS^4Po+&=Gi+43em*7JszcPO zBG7J~bH^LmRzTYNyC!ter*lL7?a5%4UCsPQ3B{29BnY3|ONNC{?vH6UF7;^z+cqp~ zoWVJ41*!o7aj9G`&E~p50LaxrHvYs#;;Z(S;Zju$t;Z7DV0xXQq53Nq>Kg+vtla^Y zwV1L*0DB6z!FsUar9`xP7YUaiZOGQox$xX&I?W{roF9zaNO(FCWy-_S`I*z{#f3*4v%jy3Cve?wU@%`XS$^|}m29P++;|nabRSdRyNA^!2wpf4=`}_& z&E2o+v(3Kn@pa(!uMz}r!ArJeO-9;WmV}CPvxVn|$BnW(Hv;bCxRPZMLUr4goAM`Q zTP}{QOG!fhf|SNV0vr{z5{8rGX84YgU4iY$PyMue0eBG|4f& zEV$bDGd+$e!Pz^&>pBI2=6Z+2-k{m^Lm72l7M0$9z`N0}%6|E6{kojSer7aL3zVa- zXEtacq53$J-Gr*yaN(quVC3hm(l1ZOcq`MpD!)^ghH>(WdPD)4gl^eh0Wu%D8)NL` z>QOR&OQT!&eRO7fv}R1*g^TJWg)3P3)3c*zHTpoyL9ZHaolR!DwO-*GCrcHsX5T;@ zV0Py+8`6OtBD6gv5A>8olhkzvWSlt^!SZPd*YZojNi^1DI=&X__I$BEPc)p>Y47D5 z%s(#mLt;p>RfP?;+on?Zc0D@iuSV~}6z;N{|DxI3*nr;8V8rL0Y`yNR@Wa~n#=WRJ zy0sTA>%XC<;{17Rw6dl2TPVAm4iQPq&OxWAZ9nvM!dX_}nz7&*@!sVDYfOznKKf3?6E!Qi=|06S}V*!a;gxA}U zHZO7xyJXcG^suGz4$;vrl3m;f@h|l^pq66TOv)o^nJ$~%w3SkxElM{WN+QoUim9Uhc<}aHiqhN89!d(0%*09){g54J4Ua^-tJFrH7mdg@ z2bGS2;S_V8+&1ZBm#;s{huTp_$$KW{MTn-rC1{vO*+P))ZybgA{g3kp+sVNxA5zKZ zfp@!*JZ}K;BxLLIlW#IXSHc$%AvsF88SQ(1Tb&23#Zraup-JFI_o zYe$T@ec`!oK#7ESk<@V8)Q*v3IV+o|1gI-}w;QLVCi*WH3Da0pbm4{jxsOubbh4BA zA^26JG2af8lQ-kHD)5~IdvKVG7&Tx1_C|UOIy6Dmb-rpB#UsTLY#wJv6(#%=E)3%* z%V`PnH!;B*p7s9VK~Jnl?U`yAuy8R^@2Z8O{tiFjRsfWOHEOG23Wvy}WGvJ-qCmZ5 zK`yp@{PxQ9)zPJPZxpPVORas+>npAaK9f_~A4 zd)IEUrJC>b<~lUX3%FTU-Pm1HNN{%yO&nr+=@5zuvsrs#q7Gcu{YnHWgz*m zmM7LbZahm8*6`$OOns5FE?c`;?$Yl?}s88LTQ}+%bu$C(KmyqDma`5%=eW+=p}*jjZswO zAn>y54R?*7M?nxCf8XzT{RqFA7vU37q4fY ztPBn^2<=*2FC9vnxBKyFRa<=!d_s$j|8!_39(OZ2_PXiYFYwj--{ZcP>}f4wdnW$% zJ6!-xD0=k=UnXBRDj>Iw&G zn`>jfpb-nC`#hFjEv(|j{kUp{o@JjqV*&ttcyHQ7T!tu;eMvkhJ~Gum-~6S-x-tn? zrFwBJP^#s)o=EGu?6O#WvERts+US?m4NZD2G4a~IjHR0Kck)+s51F4|Jp%R5%aO2& zmbc~8kD!OJNNHJJ!qmxX`C0Qr!c9D*CIMakH@WXB@*lY~X2g!FHL?|XnsYwd^#j^I zGA)K{>@Cd*Fx>nW@5=-f-_iQiOim+WZQn5(C;1ysW6RC^G?}8P8Dp(SeQ1aG zW$-mRYVH>h($7=bYN1I*$+1vL+i|F3yo0b7MKSG6=AAR8pxHr^+;6mv2>c@I6F63q z7``wK{we`1>}1{dia*Jdta#z3VQWSf6l5i=$!Yp6GT$L(kr@AdI*OU zHgEx&cn!%kr_A^lvd0;j!bk4nLoy!=@&d;i=@FZ@|DJIB0nb&QZrkG9F&mj%eNOzu z4ttqX2DO6uSMfIl2JqMPC*MLfum7=WB6s9~^5TgnW6@9E0c};% zrNpv0QaTCz=-B)sXm_Q=?~I~>E<6o1E;%&xGY!wju$Ne|L(xy<{_iWKw0VM9;7+?& zphL6Hk;B*E>UAP0%GXun8BGWhc~NP&aB=dnBiLNvfcv;b7j}Rk>6)svxPM93=#mA zt)6e*S}jX$<)kvQKTf+ZEbVm2JX{KFarT~c`&Qk*G4Wk6dHMs;diLk^Uh$&CJ$~(h z?|~K`v*VaVoJg*Nf&0$gZT*x~EP3TFv~wumqDgG{fN5z7XYm{YO52owPyuf=c_!~& zoIY%uZBTPX9`d0IR~^U&7NmEgRlY0=`Fcyq4b^3W&uWytMxSsVou@TP@#aHh`)hMqBT&ZnloD0bJa zEls<WX#*Y7R^@GovRG&_8bT8 z5je6^7d&D-21P85b{?y#qQF!Id}U!>FD$Lk}CK`PxyHwa3Xpma$$NDG4jqeBoC$uVklh;-)|HBq{|89BNc z%>aM~+eb<^y zlq_x^`jUf&{!zVoBMJIchMM;DGSH=bLvgMllZkdutJUwrp~)~9=^u!#i)u1;NVwsi zkZsTzbp%0R-xvi0nI|8E1Uq>iPPA2cV+unKTo2Vfff1;STS25|;dcDCUa<7|)pFEf z(QxOzHF%hB`};Z%#RGvS`z!x&^j@9qnLqUfG)YiSvLBqAw^it1e;3LqiwxQz{J~WE zpe2gy*StM%jw)Q(2j30}yve-saNK=&CY^i-s6qzvfq-s{@Wjy#YhO2qr5@Td_FLat z)!XoobEYAio}y3DU&H2?s!4cBk#e3QnAktq^vBAG*yXb~sH%x}9$Dq$K5)2=Zt~37 zj^Q<61{J#YdzJUx_q@v4pA0eW|5z5&aq4}q+}i6>Zkaxahkc1wCwDxpMbgd27nOMX zCdPd+`)09opLKU;u*=d*JqWrBcDmYgug#kf^b9I(Ya^4i62Eb~Kj68tyL=_KM)KFG zf@aKbEB3lI^&bwJh>*C=#kfPVwya6V@hKS7lUwQI;J_0+v~})bRrRhQJUmg`XL+D! zV-U8H+RTRtrtC4uh=(n$m!!Bqb)tD|RkChib>iWcPZDMj3fkx7GLLbcH+`2fH(hW& z?K;fk4)m29$jLIg!ftmwMH8}quVLqLNumc7yNN&nr9)0CwY_5<4-s?? zI}Mq#l9SsPGmw1%{C=tcaME!&i8is6^U-!#V{|Hvzwrg}Jyz;%J++6Rv%)Fw6Z}Z+IqA(>e&)z!f_Et}>YCoifCW55Xu$;be-PDM* zz~3*;)59Vl98{*NbKockt78>g}L+jH6R0dbyGq-^Q?XwaoztXFy@u8y{} zI+!82_GjE)gGq&}?b%IKc>c_OmHhg&azL3`wMgG$&J8Xl|9sA2AeosmLT!fN^daiB zly7YwW)ZJbrGT096&Taf9L?*U>cSH;b68S(m)g?JbmP!&-&9caYxo&P;9*!M(Q-HU=@-ruvj$*vT8bNp->!04H)u^YofKWVyJ{>Wl41DY3YX%L54DN?8 z$A~JmS$Ltv({79W<4eBj325`t+t5<)3wrOuWg9BbUR5Ze8dFNmweW^f0ftizcS5&~ z3^D(3QZMxUFndb00{UYZT|0F1Y&0doN#%Pvh=Le&Xenv$U6F6wVfe&-zei=Z!;=Vq zyWbLtZ^lrCZ_~sng1?*9JZ?6*;^p8LQ+u7U5C}OioA6oj4wjD(Yo>eqGm$w#UMDCfUToRvPu*KkcJ(T?UZ|jV(q7)-q zR%Q16tww~};Ui8D^B^5VIsdFOfpPW0y43{7ke4Vj=8xqg$n_f#DtBk8xmTMW#Kbfz#{psFS|y4@+gB+o zi@|#eq`5_xk|J8B8kKlzfp*z672!_Fqr)NHS$@m81xU9RozgYsnl+`{^qfad{y8x# zdmi7frWK?hVEcon)8-vk$AAOFiiKsocZq*`qoijotuWT%JbR0p*yG4kzr+||*Fc!I zPKHOxJ?-CQWB|#IrLL$zV9{7XA^-~@;sT}4Ris6~1S=Hu=LG>OKy+-S9(Ro9;U2ikIw8!s=!2EO^LZRkGYGW zRuy>$Oo$S}UDM*q@3v*Ql{O4aq>?}FkiKR+mTMrdxeD4DQ`Z$qVjyLOP+8~1QOtY? zY;*Uo^Ybg!wZnVC`#?CnX7xM(|?)rD^u-t@A(ioVicj_;;y(s_@1}bTM(U5!b zm|V9#HTt@2mNCFX~vMGHRij%!PKiiZ-_2^OfrKq_>2D~{iE_nWKHtk{aPUgW4@ zla(}8%C@}R3G#ykBx)H>pA3I3-O14aB;VsXp=@!QGbj|!@CU^z^jLNc@JY~=v`I-Bb zTFolYixnpDaP755C+4BC40DKCz>2lusE0t{-n6S(dBAK9mr;WyK3%=mq> zd()YbI62)+-@W@RX_PspP4e-x6l|tRcoZiM>tkqVJ;Y*jx`jUo#Uy=k1BHSQKRl!% zdibAK7#zjj{PfV?vM{>Opi3oE7$JleBe(|GwZsYy`Tr$~Nd9XIypQV&d-({)@|Lm~ zn|F$QQIjt$>KxHKS3(F*)uqNO#uc8#VK07;SByjOU$x<-`ozy40$k6fw;y<7M;5Ur zM%1JKs5;xvkvkD?pwzHK{Qrp&$&Xl)=A&AIQ5LWNX_2Jf+I?Mf{Rp8A87>MnJ=*uB z`tijy7U^-jVv--RxuyRtb4OY0c#>nq#ealNLXlU+&Xf50p~d(=XhZdb6~0iz9(*7e zrNBWvEXLc$|7!WA7+H)D>BlON4-`~9)_MgeBoEMnTv znEpEx+;gN5;oK{X-@BnZKIRO7eCO>sli3q|{Scd&k5m+19TIKBBjpr&B+P|Cbl<@@ zdn){ReYTLow8*6Oy$Yudw2VQY!c^N$M^XEAa-C<2oCSn~{$y>xL5HLvm1m%P?~n?+ zuY+8Z;b}2MG{M+5p33<91%aPQe%dj}yAMylZi|s$YYagXY96Xz`@D}Z3|3?77Zx{+ zd7D@Lu%OwiN`2wAr9L9f4015O+W%&&aov9Q!sd`$E}-phiToC9;(6*DEX924>qbA= z8Pe4LX?fPc57j*UjKA+2)2x)C@jN(s;G*p?ratJZt>`8_(GzC2yytX&d^K9M8Z3{Z z`-ekG8#FADt(u%5pkcygX;Od#O+miA!{-aU6Y=%vYQuJEo0v4QS;>_YHSb%sY7qZ2 z9M(K^Qj)S67p#PSO<8uOZ{ii|kReEFRvvpYr@?po6x#^+xM$kpbzD>Ci5x$SRCS-p zVX7a=q0d-?(z;HUoS-WR+d9#kD=rOmCiRJ~uX42k!uC(?!$Q|DRG$i{-1SRNSKj1- zUNls4sqQw*W{UfPgfGA+o{7;x8JlflD20)YHvSW$P1$A{W>vI}k8f}6Yibp>vj`;r z%{jclX!ez`i-c6OBD%u)2GX)&()6?#F>ZeQOq%y$-^#6bru zCNLtJ*e>KoWJdry+jFPybt-*VQ3>#!un2+#p<`r3sZgJ>F^d*DPD+)b7(6wM9kD0b zWXsFFrSp|)phdRJ=j%RI+0Oxf`WG~>bb3-65@VML!gC;2@oThMl|2T@Y0b!#?*6w5 z{mHvUjW3bUgC8RnG0$5V>db!mVZ^qa&3(Q2g$l2`baixhgxIE9 zd1sqh6@3s7-LqiaSWJE$wa~0PQy4Dy5Y}?;I;J?G=}o6jJkx!9;B6}_O*3r;%MpwC z6r=SJ*P!{c1%GgNK|HU&c=qNDyJnwf3H_%LCff2lBRG+maRL!S55f!S0LY=veXlhxCke?k^q2^#FH~j{paea`%_1Y zAHUJ@lD@Huzh;E4w_uYQ$y*R@EojiPT=ls{;$t43Q*U6KfR)o=u+qsvC12!v(=~Ou z&*^iIld5iEs+~3MBYLBfs~NqzO|yiHmj(B*uG2eWU*C>Qs}>G~R+5!(4w34uEgE?v z$Y^1^ayt#y82I*T%F4AD(Nxrv0U zw)9ESB=h?W3JvzXNb&OMODeWfFg}A>Ed_eEIk^~Qit|7(DpxAZ1MkxSrxJwUo*)OU z*;g-_=HtH@a`&FF5qCn=_7$)yaCF@Q;8}$KZ8%?{NHPCdkbBX2*)cSxDoWz%b)!;J z)#1hDWu=d{cTb(?LdJP8qoXntY^jCl#1wQQfgXHjh-acom~V_-T?G7!4J`F?EV*az zJzk%1Ad0r(7(lu;N(2dftVVU@XvrM8nW7Q*5(4`^z&TCP^J~VuS}Def3bE4)Iaw=g zEO$S>qj^L!*VQTOe$*Qd4^D0?>e#SMq|ly+G@Vaay&kb|46L0yn^72vy#^lj6eYWw z_h%myywTuN>I*x$$+b6oJ`2>0)t}DL{N~S6& zq(~MzrTydjN0em|xNN zjjJ~_{;9`rt88|`z7eUu^8FI(1$8=Dc`msUr|qLjval9`;MSxSGYGm|hq zu>K3a2`U5U%(*V-L4H{hM9#J!>A?#6hx~V=vTd)QxNh(gns_K;gG^LE#Q$;@SFiW1 z@Ek7ASFBBSH7t|KhIl5w_Zd^-o^(0lp0xAx;Yi@O>B@QdBT?LA&vq*GZpO{jr@B&^ z!^nK^$vs<@<9xDkeV%G5;QD+r(IjOxmJPD5(Q}Z0gCz)$bzW4T7X;AAHO6)$ zvhB)|U4G-2A}yy?VYtVLkf^QCN2k}}I(w$9&dnTV-~VD!;D-w#z{qVsvxF#! zhjHMc6?k12Py_00R4@R8z!CV1Lp@qa`<9vICH-%p;?MiK;Pg2_;WGok=#G!&qqYGQ z;LODK)c{q~YoSLFMTE(2y}ZzF=_v{4!K(vhP6mV?`WZ6VO+Am{zt zjOle~;}rQt3?X28q4~~WH{eY+|Jn-x$|WLCh4q659CqW2@ZY{9Oc8@MXJ>B#dp_iS z_sJW8gZ9=IhHlm4qln^@7S3S-NQ=YyOWC}?msCKpI=x!LY6?kOZ^BPl zu}>@08In{v_ooS{^3B09Ty>i$z}f@3pzxyDN0qY`PWpn>y|Lo#;PnU42%gV!YOx^K z!g$%i$&YJGB}tDbNC-S$2VX6>5I2Zm$wmuGej8?W@d8e9uF_!kEIJx(w*6&VACFIn z_aMx#q~u|)s@vovS^J(ywb#CsB~peJrM0}A9Jfg}#p<;u6%C>iy{ReHE%>F=-c4!| z6N&SJ*a_BM&#RN)N(%44l`)-FOe92=i8t^|CF&>_?%jUYYO)Azt};c>)X8|shS}l; ze%cTQfjoSMAdA$bDOWRwFJdYt*UX#5Ef@N-48Q58y$GyZNZXrkqVX3Hh&WtbE8!W4 zwDJds$87$2a(3tJH^a{MPGFKnZ*sj0%>CMIw+zIxUeDc~@NIH_WNt0frUX#EY#`6mifQPi>CnZyFO}jY+k(dhA+)@qd@g;e&c*`^%pa3?or_I^ zG^vCsJ~?8Fs9tK`RV-EAKnefhye~EV+#uZG1$8;<`K?J^r-EV>+eWUdyY5@{%Tk72T8i&iN$A|? zafs4cZ4dK<11>xJr}I4(X4I2~pj;e(hHuc?^hBpm@*In*GhaARxupvNI;<{X3NDj7 zI)>j>dBxdi6Gx*aQ+9DAGZqj=x0h`2BPu}i8` zLJ<3%Ha-3c*=xQw+%n{J>TCAdW*r*Rl$g1&GE=9_zQ0|&O7?~C-Mp|W=huJUOSkYi zHHX^c|0StDJPiDbl|8!Dh`$<-FaJLqhR*ri+Ji^Dkj38FhTZVz`_joywf|%V4t8oF zSpSP+F?G|2SE~8{U7k_Ai2qOby!oH};ShO&ZFRrEP6=>)!GYo8q<<88^OW?{bG9g( z$7fiw5q2Ox;(vUj=g9xv`5%gixk*m}oA1K}S~yu*Gh;L6HJG zcgr}fy~HO5waQNnZ`Zl-As%n_jmWog*SVfwVk_F#I)8r}u<5-mrG??B6n-hjBAfz8 zDITTc=G&KydgH*zaR_wYQp3m}SVm!4P5MSZdAzM4txp688)&Fc>G+x$yT$oy^)lnw{qx27FRQdOl9*4-Csqv6I)oA3c(UsaV*d1t znO_4Q9-md^IBc}G45Q3L@Om$(XHUMfQcp*0on_k>qs#YyXpyU^Msy&Na;#D^ufe)3Ldg3&VuX_@7r(_-TgXK<_8L%3-=e=fR zB8MekZQ$=oKHCIU+P!{2;78LxXpybJDrZD|M*gonwnl`mCB4?tV>^CZZh*?kL{`8t zW`sRio)10LWqWC{zS0Ks7Xq@b3tF}d{Za>$2!R6gm+|XHTa~T2j``d7#a{26u&>Wv z#g>tSa5I}8vYrzvTLZ3$t|rW` zPVGr;j{HN!Pst#JF?|Hxl)EXEdLbVICNW*e0XOfeTm7lik{p<6cVj}%z1p!irim`& zvoGq7Gu!s^!m$&a>iL{6Iw@MS|N~UW1t0P7eB@G9y z010jxF{LB}RDX&09rwd?ywYwUdTTj*C@G)7N#)oe>hG6o=Jvz zEme=`t-GZdxsfx^=wG$9CzW65OctOo=DnoY;FH zAu}_7cW&E^NGT-q6Re3*BscmA6V4kwJE|RUCP|v@Iz|s*{25p3a+}X6e3B08bzo=N z^x0JvB|fFzgF#DR)7ECSlUagA9VnDbMgp8ps@>^&iC3Fm7+J+s6DJtWX_Z`TIN7G;t#O0re*Kjm>T239e~%MN z^Ww&$5wuI5aq?um<#Y2{7K|W4>&&P`aO6}%;)2}%_p>t4%C%8PM{d@)^^8RyzS&f| zXD2m9Z3seFd$wpYH0K(xB2wLmtw6j))td{J=7Ti18>6*Lj!4|!JgC1L%%Q^KW5nJ5STXS1WxYo=(aMYlh+8?42yB%cNEe3$&uS# z6VEU?H4o0BtP3B}2o4Fc-j$4!s1szE&o|f@`&1~ACSNqwQCggXQ0ZoR>j6eF_q-=V zDL>?~V;w0+wJT2DrZRcozi2ZuM3{XxsuIaqb~EjBk215_(Q-q@Z=Xnsq|NGv=tBXP zOtWa9)vI9Jn(L_Zo+L;AwYKC_FG;*9`bYgP!B+MX!4KY%y0U!n_uw3Flvw;hLxmVx z0CWY1`;s79L>t7XGevH-XkEh7oj8-w$&OBJqOiFUR;<@)G25lc*2o$u(WKgU@{zO% z0akrMC5cn>Ei5Z1p|MdMZEuI@?;uSE5N~#j=lbls_IS<51gX24Wc9gzEqfwJ$4kO| zQo9-ylnT!OVZhTL{BZ&fdL6snTr`Bg(WGEzS3Kl~Kd}nD%^@(!;EtvRbzNn=KGsE& z-%!GA4^4!zn_nzt>?e9gu07zre$s$o*(W;JX635A3D04 zvVF2o}1;=)~gT*h6>ulQ+#Yy zvMr3+ZLx0`$}i~obGjc?a#E-f<0~}4a3x;DvbF?26WMmeV^{vOV%EeZGd7k7u-#nX zJECeonPZ6*dKH1O_=`0wVHSrytINmON~+>H940!JJA~Xl zj!mQ^*`BcS#eTQim9Cn6F&m)IKi6j>jD@?Ve~Lu5#hfJBGF@DMu561tagugwWwGcu z5I-E(;;m{t=tuh9ALdo@==Qf^3S8ga>EA>ulXi6Z(zne`po^GNB?SqGu}|snCDs?} z2n}rC+6`un|A%w1GoNh)3d0+v2>R6IW4ze7>lMdRs^P|t4ZF0A7pg*p)&kJ;Y!1N&`tgMPIKFODJXV(L0lId7e zW%X{Zjp3?0QrZukOdGtz_2Lo znxk2op+U7Xa>j7Hx-;q9-|+innXZ6x-b0`1t-Zpcgu~R|i*w?I74WA5=a#Dc~>LxYfgO{kUa3!LUkp}NS#zGiS0j}(muFNR8XusnOSZBB`uCJ z?z@cnb>GU0fnzX_e|ZqWB@e3i@Rqa7`1IWlfu z8M?YQr06Uy1^9<2I%7}f?366u8wxCkdww>7H#sbTi%L5D_JcRYlPTysNN3LXEL!_? z#MD`AYeuFtry+5yLu>1FmoYG=Zf@x6{{p)<~;cc6KT=Gp0boHIi7Av#D?KTJD~F%P0LM z%%S-=J2c+t7U-g=e?CQ3@y1>{E2@k6J@dktq6vYwY0~fk17*I4GOu`o^%z2ye1rY( zqnAtN%@pKx#89Q(bkWfYSr?t$o8Nh(__eQGq5W$rQG&rA8NkVRrMga^lz4O}8;e2_ z%?A9F2%hIdiR7ArCnZY!aY+fxvC27#pxX4L5>lb^h|Mp>8-bH~pnQAa56fQ8TH{NG zGR>3{2nVmLMz#%%ek|te7wW#Ze=oTn#C#2n!N%`A^Kt*z^T$^G2`xjT|2Oo2ZP#qQ zrHh!db`lm*dEbwnf5YbRct5Zh1mL_n!?E7M`LEaWL5T9dF^Rt%aer)8ydQwy+qq~m z#|vSFpwNGM@W+EUUvNL+sQ!GL`1S`!YA8o2uA9bNY}^ikLxf9LA%wsAg?2MkpDz6o zZ~7yVAt549jd$jwxJ^H?w=C~%vD&Zm?1lX-6HMisU~cmSi&3vB&PbAu{A3wB4=D== zR?2DM1>or%exgte_$V_(j*}dPpC7G=n;)(9wd5rNx7glMF}(2GE`>Dk%_a>-_<4}@gd9Z~^Jdoowb zxGH3&#nas@x;JLK&6&Dn9Y@R7XsaG|&mIKXS|ujFso`w;MxKp=H)v1L1m>8<|JUuD zH6KZGT~4w|yh$%&EUM|L0S?-s7^PcV`S;{rdfZw*KM4|qiRELqD z{;+##{8;ZFPDIH7kKY{rc}ZYK3T1ZHx9DecMy@TMu~TE8hvMPA1^O=;YV6 zvw@2w!!G`|i(t82&DarVV@yV1dPP8xC(l*o*1P;;?M?UUEi3k~hB~QZYNKyrrtuH? zso)*C4F7N{tTLhl?yX?lg7%dZ1{m?_U!85hVZkP9#NOYNQ!FNJ*xxD@C|xAVmj!{- zqH;BY{N$g8f@ja!5~e2q9890spz!y)>L3|8(vh6}q${zP?e+H_O}ADVp_LFK5%ilH z)SHd(;}u6-X2cJ7x67y64<)D@Jo6-umJ6KzdYzoA>|66rbj~*H>6cBQLN{Oi_{L5c z4|=6W7$;W({+;iJ9Ud)&D=T+-oNoH}A`%U()K@opFJs(#??u*y1nQm`h)&qPv7dPS zX^bU0;-;yOeM;Y_c_u8yp)K~VZ%E(1; zdon+_Yu~R`2>zKO9ZrU300%~k*@EzOytUI%M+?xVeqk&`|G|ta$MlwbP3K3D5F442 z_9THI=C@dhWo@N=yE$92($FQ)*#pI(Z7_1|GQvN%CyM!8{{VFIPF8^S%K+_{zcvp1 zy%zU{tOfqO7USZ{TRGfiOQk5y})j7~YVv;G{w z4mny4hrYPGW_3D6KieD9zkg)Ht+KqOyc^AGsO3v^0Lm7Y+1U`>p7ur|cbnKS!SynORhBubj!|CkA{P#peqy5gVq>*Q6hfEm>x-CY1We-xHt^xk; zmje)eR60D~OBQx*7HN3Yn|@*>MR5*oo>wC_OG;r2q_bFNnmv~@;F=NLxz6Ux55u{n zI7mZ9d$?Z2t*VAn+MTTQy9x00wu`m}7K`rf8AwqgCy{yyTbk;5iJ({Ry3T@7FJ4fY znvxSa9VPDBHU;D67byr9XA4g0cdzwCdzz6^(#S+4vlAY?d=M$!j7P;(;f{g(-<2n^ zGK@PnpGjp^)t5&|^oi4r!pD*>wiX?w%3mKQ@FH{5`PH(0~R{0{O{f z9W15ly#F?jZii4`$JTZGG=W@n?w5txA&0D%t~5#;n7|XjIm{EY?ADYB$TyNglpW*6{S8fAuq1_%QdudVlPB~y1jh=>UDQrgWKd{P=v3` ztW{&CIJ?@pgnj%NbSz3Tu76kMWo+k**%_VE?P1eItuiI;jM`bpevaY(6rK;_<%v=f z1jmmi`RBr5D(n<1CIPpHlEYfsomKsX`Ye-QRA?4;0_x&QrMx-Xe{7ek3AyGs*1O1G0P}o(ERo<+>%X1)ZJ%^Z!U;cK2T0?Ed z^pYw%M%dJwOm1V2fxy!2r9%eGaDdhE~C(2KX(L~+ZMu{d#S3_L5S~95*1D^xh z;-i7+{OMhKLYIXG2G?f&BlJHUi329ncQjCti3^IN5Jz&AFu`li z)I;fS;tqDzq2Fx;o|BduZOv5Zg)JPQI$XS`o0GAg4Sd7uS5%TBVk>hWF6qK=_+Chv zn4x@I68^&aMqenlL(WsLfq$m|M;Y9G&@$%R zpx`^Tx%k24hzuUPUtAe*{cUZ@qWWacA(2Su?tBf~tQF`kANun{LCrkouBB;&v_;qX zJ#|Lwm1u_}f!V8G^XHP3Zt4aTJ>M%ZZacZjORl}kmwD$6pZtj(Fp^%gu6cG&VR_9^ z90PH87+&qdiq#@}yhm9Il=sg7nX%zS+=%>W@S8;2VvV_44Uk%Ep5p$Kg1wOq-!9;0 zXKDQ2E9_@Y$tS6Zqkzq0fzZj_v#>L6an&XtVtO#wSShdSDcx=Py3TtcD7NJ!a_V=x zTkD!VPN4O{!p#gTq9uyJ?crDm6&TKKm~ljVP?^N5`KYtzKl@zqZ*y13z}%ZBv2LCKo$3koW$hBSp833zvPaP0Ue_Zl5ctV0$2Q5;O?%SS zZ%~pOhD2LfTFQLx@C?~Ae(mV36>rK=IRosh;N&z~)6W197pmg^S$5VO`?C{JD{3(b zJEt)3k9{4SqpX+JyS%BHKEC!fZ0PGH!Y!6h--$KSvk95izp&{9Xy71sTd$%Y1~P;z z$WkPqS1c<(EQpR{~*EhkJ@xX>^ji=a7oWJ1G-PT9VWwgIr|F1BguL0GE zCuUJ21kfxV*Cr<}!yojPcE?J#7uvFeL@p_Ay51$dkihv8xb8g_c;9y{CM{I|Fyc2f z{m_L^rg+h*^c7x^{qbwJ}PFYk|NZs__c7L?+(+1b6<*o zm;Sc3aZLR-z|9*F9b^7rA-CMPiLT&Xu%Ybio+Re~YnE-sQo9Dx>`B zQX9wKd%(Lw3|GRQ&$(NcZL-#d*MT*!jww+_V^8E)=~fj6Lud=pZoJf-PIR7^vc6X3sg!ERR?jCFInW8!OMu`IRz9B*c+zJjao_ zkKgzu;MrC0Yuab^yaB?ULv}bXKwRI=Q*ezqsU;_SQUHlrakim;*rHQ; zg>(PcvRBe+7EqS@U5lCBNu{BIBt)Ogo(wYF>Y+u9eoCaPBltr;7Gl3y;snplRb^MQ zT?c{(jq`igXU(cBJbJcRi3Te_OeL(WQYMM2Q^r9|!xowY)cIzoYu7%-U)+)C%YYp! zQ5K?U7@~S1ah2KnaEzjr^8i3kWIv*7%!8%-8;1i8&C57##WUOjiQ?^u1vqy=zH_;A zUIH;RzIXmtlt~7mpN({z$2Mgp9H^OO-a=iW!3P`cqk7i$!h^=PP(MGaxa3s=@ z(MGc=b;td|I)dqMMR2Jno=Wpmc<5N*Xdh>?dLz6GOqjhyMQ8coJE!4h1{;_C} zTkW4UB9@$+Igl~0E02|R+Y$(|@^?j14xkLgUE;HVb>jch_T z0=6v6EWBbK@DRo`S8cEI?c`?hs==AC0IIx0GgZ}-<6t@3Y?J1W(`WEmlY0lpX=_(3 zjQ^DE*5m1u3l9Z_Xz#jv*zQTCtTL&C+VhiJQ7wHpmpTChtJZtX3LmmK@{1U?st z5#wgbvoW;9=V)5em_v0?k&I#Hj+Wp7`c*4w2!oYScSbL@dO1JqGmvb7Fdar)ED!>| z1NeG{ZN*GwaTXD0j!WD%`?PtO#nw#6S_B1)XE$w;$=xzpL)V(b2}*=iUO!TIp8*O7 z3VeTQBS{y9wy0&g*SC!;IyBI2^Y$M-mpBb+NUTSx$<<|X7x-mU5f4~1lI`UUroGCS z&hIdxe&4g10t@W1AvQxAZVad26-Ahck&AN6K%ibSAtw!GzUz!ny=jF15{G6R&*eQi zoEHIVeZx9oz-45>d@IBc0bmkDMgb3VuuGJaKE1<-JTWCTQ-0$`4A-n3?$TD?5OC=0 zJ}{J|wMOloDh*M0XS6w!+Q9{IRk}<|Pv669;+r^P0iXI*jYO5T_*Q-M7;v7Ju5rD* z)0*C!2VRduKk6-hE;1tU^M(1+-TdM}e9NP@g9@rJXRkmGFMXLNgwaHS*Cs?H5&2qe z9DPa9qGCrGtQaZXlY2E&9Hp;QKhcLW4RVuGBs>yAJzVGqp%^vNzZ-zsb^j*Rlqbu!W-Dc#uw_y?DDpEJd~ zCt9Zo_^{RTWfW$fuHA>GVZTSd7w^j&K;Y|^h%nBl#eIT`vacebREwQ>N6C*1V#0lT)ZW^_xfAQ3=L>;+UcfX82u39o%wzqZh znfUCl7Y>$137$-!QW9z)3^|(3b2tY!Mf^Rg>B)<^Ckw^UB~UQO`>uU3-Hyv{3$ z2R_$2zlte3Y^(9IFhPO?!-|@U14AH2VK{0L z*VJg(V)4}9Ak2Vb8$V07?W8Bg<&D+Q+FG6sxv(OcIGIZHVm$vsk$N_4pk+zuVDTdV z&eD`~ZMdLvBzU9EgI!BKL*mQKo`qg=ASa5bDD>~@2xGg3N^OUVPgxRKMhPdl$=iN) z6t9YIX@6sYqgvNv0=Q%~T~u>GHPhf2 zJ$e+xi5|B6M(LuNB)q@sLqhmN8_kT16qvaQ2vIw|8>vxdQTyOblARvn*|vb$gE7E) zWg$7qg-mJwn|u9RN+YX`ZwPzn7=2pE=nR(@=MQWIl_#(29*2OkmB3toWvF%; z7lxENI?v}HR7O4d^Km&Kr>QYEOtCT_3qmzDl=6kgOD$w9_rh7515;1x^OR`;8xsZo zVUJI{u)t?=8gUY_1auz3~cQKBD8E;(NG z<<;G9QNTaZMqQr7aMUB6*P(L(PR3IcTESitR&>MD*4RX#lFsETmejlV zA+G!7iaxKIC1#!F%#w*Xg?pU%%@cJ@Us~7We=`YeQ61 zb|`0-1p$R(PkTjCkAPe|B_oDrI{Sq!VEgZa3mUYYHuELB11L}mxqOp8nqbPBTuzb6!;X5vXl`xR8{C_c|nkI zDWU~*u1nG3b7qM}ZbtOZnE=k{Q%+^{L=~_LG@u@xBE$kfu*+ODq zsl{Roq{UTHzNafs@Ls+)hu%h=`vRxtr8oRf`WWVu;-R`8VIXub{$l-(V=3{E&vkXB z7n26SQDwx|4g9hHaC+t9bw${$fGTg~#4mnL;Vs830Xr+;$$9ctE*#^WS`l|?v+I@# zUC8d7o^DKO_3b>jLNn!uzh}_BggFczQpqGLkvP@S9aO61pkwn$n9OM@@CT;PjqLi8 zii-c?#G(Gqmgm=m!~{7Z1F3M}RXY}gnZ^eob8U$QOePZbtW9+8o%qv&Ay37d~k z9o!RM*62+X@0i~nPJuj2SKR&_iOMvKDa8i%wH~~FO)2fe*yo0p!&bS2sa)o0e{+g8 z`u6ra3k4YI6-?XNzWX9vQ{Dj{=}h0Wipjj_Jw)~M(EZX+^ye6O@y)A=M_#71E2cuF zWJ9V(Vp}@eqB32>U$Z?R7WUh(t}#(rK&E{vO&q(x(SU9eHtzXCJA^)~pnR3&ofgj9 zBC+!+uX4hEKWnph{iiRRX$2yY&N(8F3fFf5+Mgxx2wVY~b;A3HQf{x4) z0hZABpPcIzjHhaW<3h01MCXAJ0m#Ik<;YM2lilG50Kq8J0o7U9^i(^zo{IAjFr@_-QkapMz%X57tI=>VF7fh%aa|xXoagaw zX$sa&89xLbXd){3C0Z@=go?)UZ^q;_-G9dmCAMS>k&bdw#C-1P9M>)bXJp1N0R-p; z*fLxur>(co8*8|U!Fje#yLAlW`wMiZ!M4mi14fo9fI}~oqaUR1P4(;U zoI)j`y9eZ~=kQyLPQleJ|3V~|${CndO5eTxe>A;kJe&U?_N}chl$P47rD{`qk5*B8 zZ=&|5V(+S=W@>M-cPL84tQniyB%#D6h&{sZ&i}fv>%sSYk_UN`^Of)C_#DUaR=#-k zn)< z4lYc+`8ZIdTB7bma^LY@Ov&p60eyX7tQrF<{kQ-B|>wYd`HzdsYu&lWBFj%T$vJ4OiCgDc7mN8F*N-me^N zd1H#cr*NoBPO<4W5?N_G5`hA(D^7`u$|xD|19F;UL6vGzCjNY_e04vTs8C0~lAex( zk`>>Ol9bIsNr2z63U56sPA9finAC!14Wc@<1H-R>#_H zd)pnRiA}%d%!14&BAUZA-b@o5K7JKdYzG=(x6nt1nU*o}Nq@CYYwKKwx^e<_Gwz-l2v1e3`d?;x721%G z;=xH9`sE3nrkDO9QO%%Zz{rTG{{q(k@9;oB)4AVc6(Ut-8kEd9@#ISB;ayq^dqXcd zBBi5g=p^<9OWep63SP3kauL#xXmaAGA{$vv|dw@jZ1*wLFR5pC1`LmY zIzB3gD-?|{+zEONurl3CxCnElV(`(qh!E`Em62Eh>!Kj$H-!6dRTlak+EKuGiE*o*{N6ce7x8sUdUsedmn}nWoiE`e|*3Z{#76 z{9Dxcvk{Mlz2Q6(i|maqcTab-%PFbOS1jn3aXWW zca*C0Etpa0L}lkLA6jd7m8 zw#+lHecxwUOq+)v(wruS^5{`#sw3axmS?4@L8r{x2!7EcN1WfiSL%6gCF3K58@`|W z`u`+;Z2yKso>$nq_6+-#Eidl8?7Y6@`_$T-?#|yt=MI`#0qCD>;w_V7zm6JCglzuw zd>zY@y3vtOZwiXjUFI6V zHgvCRaA)pafw)y)MBtjA?8Xla$HeVVSZ$tUUM&g%)JLYhLYKA9U;E!i3qiY&<0n|h z2gagYF-Uj#JEbzEYl7?OdpF`svs3UkYbqO#CVF#Nu+YOB32OdfK}|o2X>_zg2hQt? zyjq`=)%L1eZ4`OJ;S~lG!K?iqJba;1{|Na&Au~<(cU+x_^QIc_a7UgPM-{9d| z4A8RNJ7+TE)7NMSZVLa%E0JldFfcSFbVrSuq$y&5-_%e7LAP(J8SS$|r_+@d&S49x5qG^T&8sUHMbj0jGfx-m5S}(5C(y zt{l?dg6jBLnNYI6e8D@?Hi{JX<7d$q;Qw(Sp13ny9^JOf$cmshRt{?*sb*qs2o3*f zklsAJ!Px(-uG-BnxOzit5PO77C6`K^-Pd{*$dq&PcG?6juuJ_&0$9IxF5sp1lakkt zpRu#3cx$fxKpBhh^JvS-j`Q)nD=&iIz32AT7oAhlk=$7=+-e5_-L-T>-^>?DpZL6} z-&GvM;F;P4I?BRRPgWC3liHN&GHg7OkyEM32JSy{Uvo+-8e9^n5Po~|+4ViuE6@kd zB)c z%I->Or+Cm`-jiV|oou}s%{1C4RIKdsQ=VEcaA+~8<~TKV3dNKwBI=iqAPH%Rm@-dP zHmDErohJMIgUwYX*^1uR{aFy*-b&MfSt?UbiZVOhMH5h{)VDQ1X6rwKbP?J2=!B~I zHT8xKL0Pr&mrr`$x$wrU&ol0g`{wt1F@+>~+y8CP2$0RN18WLof6S!H;znUKrI zm&Qzo}p4reGF19V1-s6e^Mi!rpCA2dMoD%&nD=bN7qT+D0#fn>6`{ zlsXPmMJ~orF0H`R=P)W1o%dS6O}YbNZqZaQ_vnR;<+|nb=pGh({0;72;$`Tx@gNoQ z9+asI;_q@>{CY!<*05(mz%FiuRF{Kt1X&-*J$$F-ywr+&(vQ z*jZTDDL zTeGR1WLu#A^AqQbf)CmSx18Eyl6px?hsVcW(nimfOH!D`zw)OW zl}1;b)$+ZuA&D_ub32yt0OlU74y2pwZcX<8IeAt_Rb*k#7P@S9`_YFQ0{y}}zSeSC zoB&$(F#Uy5%F&F*9!6_G2Xe$WRT3zN@4cw^n1i8KVBEaQ&M8<)R78_hI%=L%Q8tP? z!+%o=3|vqhOF1C(q;Gq10$HG~?{M*(@{;OuNsB|+m>kUa?R@c^k`Vs8-!u{zzt1bc z(hr#oGu=S7EVZo4Ol=36Q6-UPdchR=qxt#qpv#d9;G#|~4;1L7Nv1G-9*=V|GIz1wsjQrK1BHNkExEX~3;EQ;RsO|$hAolxqKyyzxD8SClH#b? zvxQ1N2g6``3ZrsC*Kg5W0Rorv?D$*|HZdUdHF|z!JC}8VQqK!bfjWi(@U#)k73c-dXgn zm8|PV(MIfeOd7-}C5>K3z3nknjm1su&(hq#e@?y$pkF?X3j>&=OGDxdhd|V4UrzzZ z8WJG}4`13B%@+efgltr3uO*jI8ebqLU7S-Y`N^1@7m<3(N&DxpAnCdi@&d3M#VWSW z%zo7E<58A`-XOR}rSjJGIHopNQV@(XIT1`HFKlf7Coyy|x&6+wUgWA5u(g*{ zRSMfPu)HWkFuAkP1$$`Q2HLh(oDpRr6a# zN2@p0KXq?yv#$d9Is6&p%V&MAsoGq4mGH6llcI3^`TF#w_B~;3`Rw~ed-74`?;l0s zleScQ>Jh@8ITdB^vpsKB)FG+I#k-D#qlKeQxDjELWQxfh-`BCwn?%M(`r5Vx^`>z#`zE;dU)Uc$Q9O^n|V3btZ&xLYL zVYmAAscia!BkjhAjL+?SsxV6J3?8AokxrH)dfRp6M_{U>;9PtgMOYZuOCgfV=lL&E z{QikAn9q-U-6Se`8*cAVm(9*6VFcbm7B$|>_|Kkl2WSpklFx5kk@mPIbTX+AC&@2Q z-F#5PK9Q$Z*c;xg{qw6~i~gMsl%rO1PqUNl;)F_?P0X;B%jq)IUJMP{)XKHm|9o8Y zWOJ^VvzO`b^PyQ7KkMIo**rzJLz?>TRDg6gSjNZlZ)RJl#b_IFrl%e()L+Eb;Zx`;OD_w_ToI7CgX^y| z?D4EzZ`~;7d}$OcaZ*@*Y@9*hR8O+U#1p>qM*WWkLj~726eMsJjY=eCZ?ihQVAImQ zcAE8(qOPCQICNiIf>dqaRh>Y@9Umw9+k1dK+G821uB9D4*M9tHU{x`uQeeqytz%;P z9%hI=KJ-JCCE80ygJa0@MmO8-pMStachltC!TRayaH!7^N#v(D!7m z`6F2t&YP!91O$2o@f^&0e6XhY#p6QC>)?63Tcr*Lc{zU#lxn%ugGO@<>uU6mXcDVV zZ%tV44TMUZaNzVDWc4p0DRCLkW9{O@S+LTnkZb15+ATj!9p6%HkR7$0L-sklpxq7l&TeNpbiDl*Nl&BKbReM`?7a#{ zkDmGpxo>_5U5d9kt-{W_Sb~0I*LySNVUK7D36D&MnO%SFSh2N$&+43DhG_;n6Z_Ie zP&USypupoB&5NT>kEN^ZwZ;<9t)9R6Arg`yj#bOw&u(2Jaf##mZZmUaH+lKJVRl>0 zSIS41wq2RRrZQSd{Wwqkp%LXAtN5th+A*IXpEbZ%DKosm9rf$tR$z+%7+c_nFf8^| zrBgKkT7pNngaJ^R}Ju9_=%!q-sn4q-g4v<$7uw z8D;}LFBy?LjkTmsuu)3ZdggbvmIXP(ef8WDn>)>rS!(Do?0iGoHL6xqppo}AbFZfU z<~U@qmzz;a2iQjE9*pzZ0;q(*DM_@o63!>lc51E32Jhauc)!E{skQ}0Uiq??R@Y02 zk9c_+?$m+7L=28*x{0&2Qjnc#j|{pzt+fzRKK$|vdje$t#^diH${;9BCcf2QoD%b_ zKMdxQw9>F)KWayq3dC7|bl;j*P@vr?^#gdOsG!erM z<1(hL0j9_iz(uHZrMEZt3oFK3k;M20J z(*baxPa}{Vdt=oi#V*2u)2J`AKZq zW=tMJuxD~C#IslqW24KiKk~4cdjTQoH=%8*5^Cw1tWxtnob=f-rB||hgd(3gMLDcW zcm><@=D3D*q#lLziR145cmz<5Uuj(ryf(_{!liwm|Qp)Jp>e%1eB~-Rc{9Rt=0))$6iV?SmdG~v%a4DbiBaC7w(2h zr)~n795Nm`+{G{Fu8|F_aWT&S{SzG92T(F#cft|I3^cCEJ>2X`?m ztuDgywgJZE=2f*f@6NY64vpq5BiEe*{J;Us>1yPn1E%LM*pc9>{RGqIWyy7sI`Veh-Zo#2>!lOW zT~OOpKrr#W@-|14`wUABpU&z()icBi_@GkDh{?b_rafZBFH}KT7xUJHgm{3>far1G z>E%>!cT-|^bEPgVYT!UaY$~qMLuXZ1uW4Qs{`kqz59nI|w+!^kSD9Vvn|zr{e4!MJ z|836Ovkok%Jk5f8-G+R)pN7)sjbQ%w7f3o}o~C)xbn#kZ7q%{b4;SYpEU_OF?|3_5 zrxBOzcJ~b?vnA<&o)S$pzG8)$JLXeC&MJP{^#}+9T~5S!_`u*a>n>%R?0??g%5V3a zML_K>M;gTqQ_SCZ-$XI-F)mmjwtY0ELmfoG<>Tj|lz?{ zFqYtnp_Gwzw?>UXi=vw_Yrwyit`UfVMh*4Q>(u-hBwZh0&(6^;3agSzG(ZSwBK`E|7vJ&Ns;cf+YJQ}1D{E6;*Hy>H zBgM0lw1VO;D5Z0Ry6j^xDXftxE)-lEkR#LQhtlD|3rOQU{5<^A`Pai~v=+V+8j=ze zdvcQjOFCFGbJSaMZn=|otlMjD5s2fiAvfsHu(GSxRfBVqm zRre+@k9y5!%VEp)xMOH2-F~~O=s$vOZi_ZgC>`&MiH^|Ck9)i(9&m4=15wM*Q#Af@ z4N$FXx{0jRn%)pDR}8Atgqjg1Mh6sq74f(~I2?NtHbKGLn^@{Xvc*#^k{G{d+T`)* zCca67wrz#eaOrlu?5Kdj7;zD%`Zpm`Ey&&3ZtMVzK{+V!Q+qaKc#>N2O7HgkBfb^e zoBC~D|IiKoP0)CxO=>qx4+rv#2#Wmm_s8qJkDKp^C}!w`xx2OK3=d`@Tp@JS#o~@< zg&Vz|5om;KyX)bJa5R#EX9J zINBLSLT9G3_r}Ws#qHB%K*4S!WjAsNr*Gg_N=@9_GKDBx7u)m1NY#1kmFtxc9EDTW z$`qyw6_6W)OAwIi4B0KSM3giss`f8Uw|Q-~j%)CU?$U$@BN;O3b2F6Uda4O=z&U%w zc(CJwIK5S7OKVxQ8(_(|_c_(svoJRP&ZsNyCwPF=cWo;EJCs)sqJJgKf&RJ9J6tt1 ztR0c+BW(27ygvI^%$MTy*i3M1Z_ z>W@oI85DeXI!QeO9F@&6gIyVkQ3L#;G-v#$rzedGs3a^@X#%7}rx0(@dh%ulTwzyi8K}zunINeJ~PbXL+(@TeIn@ zKh>WkjCH&(@ATxIBhBY2g7AX-k1`3L-G8F}s^WRy^z*kr^%Eiqt3LLmFn(IlW&AW) zA{l|V9>gUOI*XffyzPCe9${65*F}0?Ocy?W_1$}0@mEKcH){)E_9fM7y#6-t9~#F3 zcUDIyZLt@^`r1K1vbpfa1!3=K-M6X=6%RRxz8Ze5kai?Wa3(M;dp%=3&7ws~XcES7 zUiL%C@+H!=Bz9p@$Gbo!OAo#rK2yq~S1_o0R=_20YF&YIq*O+$8$31qS}9mc=&T;2 z&ZQnBU!~F$uK&oCgObIrzz2W0lt$!t$>{Ev=DAnPIpk2067q`b?~@B_yAsn|fX?gs zvTM(_P2+M=EOGVwnx`|bsuoYnV=v1SFUv$lg~jo<9}#J)`q>L}pvUqvjAOLt3($IfhBzFD`bWn@$3zvu$U!?%x6BQHQ(;z-nG}HN6DK2r@yp}gs zw@I-#dhF#n{hW=5MkmI?1&(K9Mdx0L_ShXGaWxh-i|Q$YYy00LZ5`o?jcl#=rppxo z8ALt)*!Y6tvih<#aoQ_E6T#HCD5hksQ>m~%Q!vvq8sjM@E@W?SD692T35esSygxUF+hCCg4r}vp5s&wl+HpC#ADGit44~+GTjE@1due9)#QA z&p(`5FBG7d@|Lezq*F2?iD#^v0`k?y+Wiv-5G^JDa;ndDepOVgnC6YEh^T?p!yJ33q{-9yT#EGJ`{Igv@Z=-^%C4HqU; zQh7I&Ilgk{8sBmJv15F`VQ)h_LW6&pF14vI0uVt zf+?y|H_46Sf7yLJ@gvTE1eSv*`1fuGQ~&Or^w4>|sQs}~COmdP!rJ#C$Uvrpe$@h} z9_N)?pUQ+#&4=iTFZ#Oo2n?<4wp=->o(Au9C!m?sMD^?a@o&3ZS=<0{!$~Mc%--hg zq0=Y67rCVRjlX8}I_#gW#Ns;|+$q(-;MCSK7#(EK)s#ES00D$CaoeHtYrF7M{aM|EWiR)Y!E?3}R!O#r(Tk31 z(%Bp?&+Ae;=*4Z^v2<_1+GQ6uSc`+6qkJ4OZfaqx`j{#$hMR`4Y4U>5sIq@7ql=rK zE}`j6jrj{boCm|SD&yjVk{$@&099$hXg!>`ZR zYqfll;$4erufC>I>jD^dlvQ%+c1>3f??CA_-U1zV8|WznMQl|J`> zO1U7G=sK?8)_ei3fri0)0spjxk6VSdgpurLlo%EirGLICz74s_KoU%jOX!fwl0_yUD|IEAwO!J{i!~b>ng+TS62;Zw%X~Jy)~Y%i0A&$yP8v8z*4Hcx z*kDnbtvPQmCiBo6W0ufTp{OgMuPk`BW1f@SS!UFvUgP}8)ymORP};!?7E(fUC9eC% z(|P6Yv>S59Zwc<5sz(l|dJIf`&$aEW{e*HM7p&(_bP~rS@8PIIEo!xm}qtpJi$`oDMz-pqN}AUIj%5+E*s^KhYXZ9vH+#SCZ)gn53xM|^t9 z1g)c7l9JvE^0|~r`i~$(Z~j7agU0kf0`ruXOWovKEtVsE5PTHt){7CSUmHnV^Uq`N z=xliUxwk@$a_=UQ5D2*ex^p#69=Avw!*lY)41%4#nIx{F!)gZ;8Ix=6i*tUr42Rq4 zCvSZdxSM4!kWCvOy_2zDb7#s)#gnmeu#(1IgM2-f`v#!pE@;fi`quV|bY){nud4>b z;s=#?R;i{58z)D^UWM2ixtFu9N6lz%x6H7s z?EeVLaUoCLBX$Ao<$yDW;OdjXJXo(=%Tb1|iFo>J(9;2*T$t0zbZq&LOId-+!K2(U zT#oy}EbWrk@zPOSf(bhxNS zT63K77pn^!6W#za%NXWQP%|B**H+?cGigws@H!s?vHG)QL#8d1dtK!p)3dw{ghG6x z=h18G;jv$@wa%-S=j|&l06QdVLHP~AEXvL2^GWO$ubFs5pOm&@x2CT?wn`6m{Eqec zvC*&?QqD4kShWfKn~+{-Y-HUs@Ef~rkQ9lr4bt^aFskl85d-2B;GV&UX2sF2LQOCw zA=wXUt?6BtSNzjw#$gaED3V`|+|OKeT%-s$HjPPV%^+4aE98?aHPUOu)&E;&FUNjr zY^r#7T%7jev!S~naNE7)?6c%?t=Q*-Eb0aZ_T2>WQ%RYZXts$N&YLh$a> zI(z>CkTI5Qq&2}P;eFkBf9A&O>qLIX`^ooi+*KGteKw?`Kf`=)a^EzMBm^*ZJ?>hJ zjHE3qrPQFNV{!rKUcs&;Y76P#8l@JUGbHSDPvc>}MBK@R>&JCcP&Uy@*i2&$*f0D) zg2Rxoj{6^$7e^Dc2;es+T^^R<6#&E9uv%}Qb(6%yCBRw75U&{U*uEJteqokC=iJPM z#IapyS}||PJ-obU;(23NEfz9p;G_x^vAd{-?g#0q?41QW+KZmJUeC@p>qi5klhKwt zkD6+NoI^KfyDFnhpm}vpLpLEr-#$R^{n(iN`l)NrNP95HoY?f%x7Q}=e1YaLMJ6uD zkJd2L4JPPp;}p{*c6P!a}`pD6t&iAH#7;&3hS?xb#9#vMf-#Bf9=nnY~G|~bO>j( z8CJYc$;(QnIB-a|BFBPqsMcifpNX5rho+{fy04qVG>(DgL`i7dAletBl(quD+)4Q$ z9zV*(4>X9z#!_@kordt19N8@>HtV>3Y1y%w5!4zP7|oiLX+pG1BYp`dTrk zXp)N&8j)9{I~Ead`;F{o>fB%_w5+l#%Y9naJt12_%5DGq#={-+F*!0UhHAkfj61)@ zExx3${p-4N9pEgb#SYa3MI>V2%D;X0sAp~$b>Q$r7OWOm^uS327?UB&$@gPme%qDI zGC>+gokCdMR3uXegOhscuTYN;4&sHo;b5Gvc!PRBgtjUC6yjM=`S9`Xr(Q2n_x;-U z`@n6(MCnoFxBBAsb(NXOhncutVCv_lB1P@Uk?Fq@D%k-30+46Bg}phNxNzNaM~oRU z*Wh5+CJOC$7dszcu3J9eJfFt!y-$f;leOUb*~a52o2&>5yEY6MF!A5R(TgJTI#<%? z=PASnr4!ESVWR$@zIgn-Pybxjw;Jmy)22!u6c0o7qq+{vPH6=-va*tfvbF|O%Buw+ zoJz#WN@Cm@4i(l-;q zO4bwH>~CRYbDx7Sj-2}qng{7UUzkVl1w}NNThYs%z6%l>{C(hF=%TkN$-qpTVU`qm;6R`)POTdRIMY=2 z!0S-XfE0k3cfETrl;e6X`Yj?Mt6v-pMANL`jJ6;5w1S~gn3*#Mhb%vL)N*nr;R2c7 z=McHM+R8k|#`*<+^*cF8&&rsft&)jFLCY>#Ps?0e@?dUFsq)OJn3NHwkbZ0~_v`V5 z@ccfuzIe{2S@`dBb<_{mRjtQRO=M0^m2FV8Pvl^!o6ebpdi#ERIa!*JYHtBgkdYzY zB>t(2!3DbIIj33H6?f@AF?f3tWng&EmmO`~7!)tC)0WltpjnGeG>=@YiGG4%dbhzR zNIGc$6;Je!78~rNU$!=Y4o^+8$?;lQgE%TwTiiTF%HZ*{nqRVFNWryafB5dpbL!gP zo^Iu>`NeTwvim8qp~+Fg~F zy=%6_-1kD?oMFsOHbW0cMJ+3tqQqFZJvW{Pz# zsp@z7H~QrtNI!m)#Jg>*@sD-6CdDTQ)J=*HTPU94%{6Y%UNWswN5ztP68Eb{sE4nW zeo*--h?k|ZIM{Rre^*cvLhfn%Pg2q+2s|NrsB65FWQX)pj}ZBSXcBA&q|53omwYHQ z{Ai&;SmmIa=UA{SubZjwE=*J$S*BDRSro4OQT3s&kE(U0Alv;)$l`Z^XD7Vh0T3ns?`(_=i@+{trOt*hCK zWMhx`3BY~7^=uXK%EFQ@i-si7;L%6DyO%DZf3YGbiF+uU3?Id7HwblxVaNlhRWIH0 zxKIYO++;6=eq&ArsJAr-t+{7-du z$GpCk*mYyrv{riC6C5vn!cRtQ1zN96k=C&V+ejpb*7dCrNbDfU=8P~AhYs#xJjt64K-abHE!E}K*e2w zw603W-Rce16F&dP$^J}T2F=l)gyIqncA8h>4gC|T>hO4hQ?b<>|5=Oq$9x-uQX0ct z0>xTjqpg9`yf!Ji=h=C@Bi>bDFxkr%y@OXcfS3f`3JZM3&gS1|FNbj8^Y*0QU$J5& z&DvjybIz*UkZwx8d4t1VTbiWc8H+@(T)t{ICHj0kCNVUaBcR*F7C80EE)7JLw$L$l ziG=Mc26`u(a!vpOgoITdnDWDoLnZ2hqgHI!`laPvReyW-vWhpPT9*_uw9+Hz zqlXTrhVoaO1)Z+_o7=DR4=I}Abds8;x29DAN7EST8+dyTd+$XM+ic|cpJas>Dp#+Q zY;3v@9`^cN`qZhVA<$XQOj~960tkaOkN^nD#JDrS)MAtm(hMWkt@TKAJC;rj;65_H z%mTc*kF6^BrN&fZoZUI^0i|c^xn@ReI>3;%culjbY-1!%k{+CVWbZTYaoqgQ&eqk& zctDtdtElSuk&rJ>K@NF{%VYbN^c#VQ*od{Ot325oyC&js6_}G^Z*89T^25t5vLPR@ zeIcPY;e-&v7k{W$Q}3HxJ-}{rF(TU4=+?el=coDLBAR^tZOy!Lf=%_0xcyHXY%ros zWKd+h%=3ULCyH-DiRI@!HDt}qFy^UzTYU(e57ja6T^>D>NBquq73iPAuIAi98O(L* zbCZx;H?kAX?IL)_>Hv{HsO`C|u-`PBalJbYJmTd@&bfGGTynVU zs5~2;r+pn!HkC6_E4ywa%$Ez}1R=Lv`BS(C23>S&!UXr0Xt3DKfh!7$CsTfFxe651 zklp<|j0;t)kGtt#Z!AYQMhvLu>7?jnG~W}&1h>ejof!Nx3R)T-@M8FT(Ma|`uLfk! zePI3N+8*r}iHrT=86?{o>p~YT9u5}oLD`GFt<~;Lf8>~Fr>m>z%Tu1$f`EYdX3;_O z_FX(N04U?^yryz3MrIh^NTX6QF6n|*7{wJUCV*NNJL8b!f7b@(uIdXNZTQbtVN>_^ur91*CF493z(W(wyQ|3D&-5PO3h0Rlmh$ehfwoi7v^#%y$yGc{(m^ys&Sq`4!22 zSNiB5bEMz?l;LZ?*KFckvv|oWrmw3N4-)J>9h!pKG0FI;r;tv>EUpK?<1E90r)%z_*h~_~lNZFm+ec4t)5=stw;755!b# zj!PRjFZ9K~f0YKjF7qAIY@{bx=(>Nqh9Fi*fSH?^x39|T)u-fp@J8=fvHva-$B&VA zv~H>1^O2;7jtAAW;woZPdxdeE`TBPnT{+H^@&2(q+6qBw2~t4Wl4Ynbk}}TD3}Q)z zQ)e6zyAbo6icM7#ql(9J*;v_F6D94EnW9WH*{G>&<9ANZ#c5?36Ga8~-yTy4h-WR5 zvDz?rB9%w6GLqiZ9bUYqxj+E?p?!A0p6?+=T~dG+Wl*d;CPdJud?bx?)in2?$h5ds zgnYt(1k^{Etz^|+%jYzICE+RQ>rdAB5gBIS9b>Pcgc`fO(DH6CdmQP!ALq3v znbYzGH}O5#W5U~4{}K4O^^XQn6$6*n&a^W0NR2$834w+OL(^{7Q|PI#tVb#2Bw?@S z%Fe0b-N_#Vz7G$QI5hg)AucM{k-$bVr#TfT&8|ukZlYzyrckNRXJ`Lo-6|aa2Jq!` z5yktAu7lw>(g92zZtxrb`LuoA!2r4g#GS$AS|EPOPc(r6?7B~T;1l55*huc70Lw@? zzTyT_y(F}SRjq0#!()_;uv!d#762$cyA%;k_&1{lsOat>60&eT4;tE+pcTAe=NQn~ zTMzPC@#N_@i`t@ra9+A7{1`@}M`58Fq{HfRY&je^{sNptudQ58Zn6C#>N;7G*=*DOO%j)3Fmc!BF%XlHpxze}67VDqY? zsw0eHKNvP}-MYSKVJYb)S;u*N6}AzG8DK}P?+N&;#b#C57|G<8{yD_fYLavdff?|=N=tM))boq3?V3yN|fQnEdGv9dd)W5nU~myf%OzgZQ-uH4#Oc>6_1M%4D&wPSqE`gY0YB^6=gR_la0EKbFWfao?zB#lFG`dc}emG%aQ^zGk3)e{FN)%S3EI?2S`D`{>m7fhZyb zNvnjg%?Zb*f;#g+ZN9tW>Xd+cD%+*3>_;_sXxX}Pp7*#sP`#?JHl zD|t;UeCn#zX5I`*flmc$z{i5GXvsMG@vYRPOgzI5C^(g(M>ZLY<1lW>Stlhu7;!R} zo+D3O4NCB=p|HtOl1{29ILk4sHmW_cCE{CeXgd;JS?%*>nBJ_z&E`9ZQZ2D;fYr*A zq>4ppQ(~7;rlhmK@cr2N3#sOU2Cu>ri_GJQO}uVF7IXp6tKTeZz!xX8pEq(%=j)_1Rsy( zKUs61{TlwrU?XP0Cxsao4a}Govp1tzP{jnpQaU0GMRPW51t!zEw z_VJ{l`6>u%9_*TZ*{7M))0E-w?GX-OdxmgdzoP5$r`xhleaqov`6Cz1YV~?~VtNAl zYoK@nNcRJSigx7fm6q4;^e87(Pp14MDlSbglftgb4Y|kEsWJ00lX2&$%I3O|C8jb=Oyb&g^Um$?SjkrkYfPsaW#(M@v3DBrA;Q;SXz8B`80I5W+zl)#}0C}xv6 zi_>4rZM2&1sfnLzc9l=2SbDSBOU$YdE$}Tvwvf@c6YH;bC|ws8C1)jWvFp~jzSN3s zv{5*_0_wY-ns|Yvd|NhV0^W%$lm;ukF1 zToY@TUE3tpx6M;roR4ov1LU4M{+;YkD3_cIt&mKb4j-wgMya4mYCWo#dJGTo&CN&H zO`RO%CBu$O4IhHD#8AFKXPj`$u&2SUg`CS>P{?IjNo|@rPLxkyH)n>2AJEA0&Czhq zTa?@br@&R~Auqb8?2@QfBg-g0%iy36aGrr?oLSth7m3O1mPvvt8et9YA}4p2&4-uk zYAzoE`U2s$O|~Z@@hq@~ex(sd7X(fWgw%8>pyg%{s7MFfySS_NVq9j~8$S|~YMGLT zt|P?7RUpizFKI&MXz*du6hU7|^grbPH&}Xnl#vJ$%&=nBQTVdy{4HSZA; z2z+?>mZ10kQyQC(ub=uo6euRAiq<9k2X8_N)<3?nUm}05sH#T^!&kRN<4K|DXyQVCa;_Jj{}(1fG11Ux?D|O( zy6ou>ikS7@*cM9sM<}u338lUt-}^!yhT{D#hE%+{^`it|;xZDMmgULZIDFIOtoA^4 zC`0gBo+nqcCiz2N3Bvq`#awX|A-YhqbeiO!nq0|+9)yKE^!Ky`$GH+D{>n~8rA9yc zoR0s_<_RoY8pLsWklM_RgD_1&PtF9 zzqAv#g(j}UcgFGW!KYa8yZuEN9b_Dm<+wi3bhLWA5_7l`t4p^^+9#6GP#V<*JHQVB2h9{rN@r<9(U2Xq55hi6sR_OaMJuWCd+{C=OpZo)!_Iwd*>it7_yjDJVvK0i(p4)%WkvPj zc8TiaEdJVoHvU;1rvXm$T{m2L3o%=5BGWz$Tz9<7dOcbB@GES=Y}7&!Ro~$y0K)a6 z;-hoa7jzh1nm|L8U}#5ujwp-^9n9hl{n6qQr7}I+xgE?fhf|WNtOUT*gA*DS0xbAP z`=&oK^?t~~5P;-UAWa{FVK5hHOWi2uuz)+Rc4u|XdS4UvJc5erYZ=_2Gu{AmT>;4U z$7rwzQMAkZxUqw+w|Jgd=ygnJI5wWUHoPBEEs6uF1~YJBWoh@k>x`C5en) znE^fq(4e<|{0Xq=btRd&uMJJZrmhKVg_fb5>$jHo}bUxybFj#8hJFXt$7`~^wexx&P zDh<|L0-4cC>pBD6^HgAH18;S%$i|mp6+9x(qaq}xtt7^}+y=y(&Z0{d*w*U7b7{4r zu8e@EH3uTj0!U_|Yy5z4V$VEOxpMbWyXU~4&IX8=k`jE(SUM`Z;${b~Z_V+DN_P9k z7&{Q48{Bs%@_pSuT|hKlyOH6s%=;SX82h8jKhHW|KSUk=^3IyKGS+TP#j3DFE z8cFiZJ7<4&&R_fZJ0>8Df`x|9@%t?Bw5D6VncTGg;cTY!!j}}zL7zTO5YQFf<$NH! z2lLneH51*c>Me@%56aO)YrJwd*pQ43j<@yMRikkd%Dg!e1Sg3kb*WQG=lMl<2g6L@ zeq!0)-QmsB5puL}6wG0M(guF4bSS~dabpBx6tit`qu4{@fIA>M{xY;aITc>}t<9k*=3m}^Y4?A7np zR=Jd+)0fTlWlsM%OXSzRcv<&x&3i-7|Gs38TH_Ia>&f-`0ulmJQj#Vv+abWxKm|rR<&*5wL*iWW z-Vs^$oL&LVbzt6j73no=>ij_o`Qh-X?`_;j3$d1~ho0w#Z@4I-4cbn5UK5@5^&8}M zh1{?TX!YfTa-yZSPq?N*u2@_E+^6HguyI4XpnuW={P;+UTjw&rCO}=va%PAR@rrRi zc03-oR{qBpbp1U7&IGI$G=2F~5Pjpp*)?CXf!6zh>$wI+2d zvfwN(LeP0Pwc@65vf-HGYhVqkB_1 zFykcO+=BWD7#G1k%+{zt{Uau7@lqXU0+FHhdNEO9)X2MJIHaT_uLg)-BHwAuk(&;@ z<@&-H>ngsIK`>?U`p951d(epkXh;{QX;Bi1JL}++xvF&RKi=ienK{LIi1HBOmf;P% z7wdiDvXu&QGr^B9+F|c)aD_>Vb88yAXt`G@XWbkIZ-Tug6K9Kj88MfWFcl@3!|`yPS7uh;=mpOfTM{#iFYvnnaUn#Cd6 z5+lgpPYA}ot=C=6AHuzu8v=hTn`UUfX%{DYa>Ta^SYYIyE3?IvUF&@ON1>Rk)u+Ut z6lD%w`U_lZ_3^Xrb)W6wId`b|?&sL74JipJzf?R*k+z0Jghhm3%>Ag|2PA{esV|@e zkD3T9(1zC>);{2rb>4~83^!g}_5|fh{zI&BbJiVlM9|BeyZmsrE0n4MI3PG4oTPI9 z(H;F=b*u-E*A}urd!18E+B6NpBB}`T=24i8Hu1d-VtBK1SwGiKnz@#1OIKs3f~ztS zSf^qoyYJODoBwNZugplRA2k_WB#{I|p+MQO4b?JRViCTf7xQzeGku*31LI3ik4>lX0ErKh~i>!ZhqdpOZ~ko7Qr(qp5yxy07)G0);`1r)g1;IH|o0>(J6r(@Xj1NtnQKgkG!ipRh-;U)Y%v zC;E>QF#U;G?&0sK67D5DUpHOCjDKqSn%hHxvzE!R6oB@L55GHKM4DXX6ec;wEr-#W z_%kE*stS*fZJ{FUrA5!g+D$s<9UHEAlUUubcah0Rfgw*iMR>4gnV6E%>c&rIw&rqZBLf1RC!BOC#0j71neUbdsXpl;9FShM z5|e@nmyFL7&nI#RtwE57Ls13~WCY*2t&JqVA`$otZmN4a7=DW@Uyk={-fQa6iB2gn z_Pq2>F>Djr(s7H)sNVKkqF=#-Cn>uJx%M~Vb*5!#4u&o8^BkBM6KC59$Uokz#hQUk zb6)%?7%c}2Spb@M2yeENmW*^vcIIEQ^t=nO20f%At6N*|vHgq@^XUhC=9prXGxiq) z<>(b}v}t)93!JwvK6irHPqKCAkFtut~QR^J8A~o~+gFxY-N$iz7f-cSDY3?R+Etp6kYrquyBjiooXNQ6$rU1>XL#*E5y4 zx)(>)BoBJLhW#n+rm;ZXNn^dsHljQFP3k4i+SIq7ho=At+#A@w9^0qHC6r-wLDN~k z?H@5LT#ZrVvBTctgkiFqhG*H0u)VK$0{iiRVB>f}H{EbC6^5zy8v*g`gI{gsimtt0 zJPOF^Dt7brAJxm=EV}hY0S^{08IA{!4+=&EL_a?2>(jk2!q!h|rPiEtmr_&1YxPlG zq=a%f)f~7x-zQk)!)M$fvumyK3XM^E*htnj^6DQsfz;^Bjai?Mbkc+?du`ptr)kF{r&S~9~9q9Z;T51w6xa><|Q^Y z+@#^7voqY|E!dkmV;t9`x-FhAA3ZUJNnp)H_y+b3T#e2O3x>>m0}=cK-v^VPQLxf_ zTzFLF_p4Ri8wK5t-O0!}b}j9}!LaFTKjYgn(n=BZijli*AbCmrl7r7?j58qA`IlQ! zs95*+TGm$sdq?v7-T7^{!z1AmkR(_4;^^X5hGjq+8%650nNq90FS_|QXo9|~{PKBB zQ>2$E_(Z7Qn+Rhwqf!*{j(E;1y&%pjT>@E3UXgk*hnBW6VX98}_KGqc{# zlgt4VVrwswp)ePSIGv{ORZ`zp2P#sFaIU5 zEc>RBL|SCa^ZKDVCi!Z{xpm0rU>P(4c;Vw?AjsB82UTiyAz_T~Poo`FP1sozR7@hf z`Bpyucy(s>LeHqKbr**y$SeZHQi)dd-JxQc%g-*x<6rqLFtR1vq9;gS3%>7mm`(g@ zl1D6~>@CoCO-Pwq$u;>)j?;SCz2;;``9!F(g{Q5!o5eEY&rz*uYsI7QW1V_uJbhEI zSx$P!5`zqiH~CAU*5ST#*8+f0kxhe?!hd@AFV@&++E?;d~!QSeQ~ zBG7UsFooeHXs@H+@81ospVfqDF0xb*HxBi^Oi>AIU58HTx>z_ir4Uz85aDwM7{s0`!Z0% z&p@{DB5Pfo>+eL{)1iB+QCl4`t?s=-_=NE+^FlwkMgtEWCqwd{8gKLQDD66pdRGiX zy!T9MvGAReD6FJ3Z~A-|jum^(Wq@&Sw&0!l;*&b0BKi}M)w-rCzVD(HNco+lnD76fqq06|uzwR+`FzT~aQYXdS1BT1 zhDq_7-oy4oN|}fYGw&S>_dwM~5YhOlcrkN8*h@q_w9getM|OB$yb@toQ}OA1^m^HigX&I z0D8tIY0?_v*%8#%d+TI+P^rA#j5eyW`)qIa9p=bCK3p|j*#GtG>2G`7LBl2dfyHCp z=pdBJ(UGg9SJC@Q9CxUQwV_T6mD-*vmIc{??hqVNV^F2_(H9_1@0|+2 zSLq=G*XV**(|bSv+ER-2tR#-^xF$N%U&wGmhxFTTjAUm^+nkYM`X`iijbz>3zeqju z+%wS(jb2F{Y5}1#QJqO`;aPYuCCm*qKUHJi>sxSybV7)(jW zJcvDO*U2kGGxe%~1Oi&O?#X-%Q;AoZS@`h_tEoot{R5uLn8M>(zo`C)Xg&Hsh!56W zN=qq{O7Y`CUti&kKYXb6^2>jK*5kJXfAF?n$io)`kKexh_@j*cp(EELt=M~7k;0E; zxj*PKynZB)m+9P6@KRssWIn|JxdT2?i?07KQG5L#w)MKd@$=7g!lXy|k|bG&=%1^f z^&S>ID1FuUmd1um@pF=`0}CF|f)>Ul3J*>wDt}AH>$LxIS`nIr|6{atP4Nn!UNOGg zTZd^rKgM5&X=IoM9@4`98|9QQYxJ07h1YzR4JT5->vd6DA7;FJ@Q>duxp%F*OU7 za(^`_8Sdu92bH++eU_$$mp5+WW(t{Vg*O#*hMD%=J$;Yz(#?GRWAd`>z=Sz>9VLD{ z7>kx*7%oLj*;G$FcrfA>EyYOA$||+C@Tz(6VKDh+`jQztauBfEFn8H8XlwzS9kBg8 zMT-ATzQQJFll>MN&aS-G#h)8@qpqFU0PAkA9FBFW z!;O`0m|2XVV!ZGtV|EpxWL#XXMy30)(B3*4_Ds^BrqcIh#pBxBHHYn_Fy*|8`^I5& zY8-hdiN`frL|Fd#jzi%W7JL;9g<{?jBs(!9yR1M^A~g zprvxaK^>ROuNM+0B@rQ;cf8Q_ibYEsE7c!I$A-oZ1}T=TZw#9*jN90OKNcI_4(Ne? zqVv~VTs~D=Kp^TP^JN84)ohaTat?Dm1mlYr058 z@2uJ>GSi~Z=y-0Z(PK8*j%B$aTQshc5Qo)T2hcma!6T|e6KVlnbI}j24~ymwiCk7r z+k7jkX7+5kYm;KrxMp*q5;+AV@ar>CS^e!;(VJ4^gObc@7KDA=XQMo*vJ$C4e;m)B zwETw#RodFqZuW6*Ab*=*GcnIqZ}wb1uJ3F(oBpca8^SX?^om`51zuBpiq11zwMel| zJCnS#{{4WuuHb~j))!|H54btlKb@Z?EB6d<54p3jWF`;YwnI1F{BvPJ`mV}coD-aG z=H#~;I;a*$xSbeK9^Ph#$HPaYgA^a2=Z%MfcO4w|j4f5swgD+HCS5=1DZwdoOL{_9 z#h~aS`%FYmC)|Y+&7J!ZKSIe6amg}p^U6B0;A{y$_zW9T0%Q6#ebz{pskiQ7fG4w= zyB9`Y(}Oc2vE;$)vsXDKE%sI;$a0;+Nsrmdv7_-)cyHRUkb7%EFSW?~jL$JzL+;Oy zQ_P)%Aa3{6($f53G)}|OE`8>%)Hy&K_+4s+Spo1VP<8}YiX6l4Od&!7PWnM3)hijCM9!fiqC}t z%Eee_0sSW!`B=4H5rwj7YcWd0W??Tw6H_TfjP*r$o&3J*kaP$f^cEWBt(t>>=Y1nG1tbK(dqy z$+5>pkT?S?)gy1x4+4`+P`oDhU*A?xy}~ZR7W>SBfCnAX?Ko|i@vkF1vlyfkawEHhD>knv3`G2x+cY4pZEt1WW9LPG>-o~4iA&d zZ9~eHcM_eyGEH^2`K0CLC3DZ{=qTR`373949T5e9M3bT~Xw0owGA$^Q8F83+7Dlc$ zx=5ENY}nras{RxOg!btQ<_T-gCk@lw+~h5-ZBi-ttDM?o*du#=GEN z`p7SaA=k};BAfnCT>I<1v@<}loa)tAo>Gi~V>RHx82l;KOq@Ymmm#9TuWo?GXh{hp zenIMV>?MTx((UTXpwN6P(|A|usxsqb=mi`ZeW$FEUWE(XNtovpV~mpuva_d6khGXO zt7O-8^chX_Y+lGV&%Ut1^z3l*Su1=qYywM`ieeoHGLs#9JHVTh6mSEJ2QDulFuPUY z--fDY9YkkIa`A%o9{aR3Pi#%dg1CUS_WpqXA>lLTMc0FJ%S0Fb>7JRsa&5R3Di+}q zI|4R_YCkJXk)zXK-Bqr5Ta=ZE0^L6^H%-!W{n*r{?XT@(CZ4qB1Qu*`a|(?FZ$iJ^ z4?aBf7NxuNH2yyHHx?!>pxo?qMqyIJX{vvr)a;c1cf}zf-eLoE0p80b&t*ZTsye91 z-hCcpCmN>^NRo(NUmU1&r^f6qVynu{7`HtIc9&rZHB$?En3L7X$`{oGGLTaSvBC(4 z^8O!Xg9#eMvM+|Rcl$q>kh=W*eHL`?&b|W!@sX?1O5&S?t!6I7N@#NI)>h&p8~k*A z>*hcm!dq*HuX~)ugHz)v_Y~f0?NU7J6qCFgGci6z+uwk91{UG|E+*w;u|A$sF_O1X z`>ma$d=(aR+K>w9&ZBSu@>UUyoL+9Y3ov2jk+j_=g%W zYE<_soA6kEPnUj|!;}BO?K<+=*Q~f3st`~R)H8iQ8cOFhaLCo+gv^Z9Egf+a0}OTH zyL~TKlhYsT>@uBqeegrf%{OPpmlycW5HF(8&<d zjfjCasgM55h&}u1U0?a-*_x!s`ot}E2`9R@{5?Ded$7eV)$YwRxb2vD(*)@Oh}o|j zQM-Lnd&nE{EJsd~{Gr!9XOgQcEtF)8fHkG?(x%#@un?ZqDP!Gjwbi8um>`4XZnLNH zq>RX13GIiUJ557oa6u}XIH{RYRwuFT;zU!6EftbRvyQR}BFL>odJ7P6)rM2gWHub0 zo4jpJF8!B)9QTAfr_-X+5z%h|I=OEAy?z79;+<`lJ)xbfr7|ep6o-xSvL~`ynG!1HNs1RRJy{sV} z5@da_$d?0ZNQ$k0$7SMuZhVSv*VgIU4ciA8$7p*d$fM4D%L&=MWvfskjI`c4@Qlf2~$bTyac zzSx_`h;#BLL7hed;w|xM_^@-~w(YRYi8DH-p+{%9iUopY>*!eOy(f3KxP(%~bGRDW4 zB_09*)%Nl~@TzOLq{TxwHhWE}pp;4zsF~xmr$W_cviBPWOnxJPl13(z(*=<0-qbU@ zWJ*a%>pgr8Ymm>ZmmXGxi!+af2q_Em$d^5Ok1KiP5IH5rm zmd+GS^tMm~K}k?!&2-Yc(+&@;Wv?ToK ztcW|gIIrRl>>B9slk}`@^)NG$xQ*v#n6C7IoB6e;+)5k*&YdD!Cvj{Lt6IxFbg-XX z{}Y4co#)gqnwKZq$RUl@ChD)Du#)f``|SSjJ7Sq>#p_PSr<=N3NlI+Npv9sbeYPR9 zA2rg2r&f-bBwb@xEq2WIqRkMtcKA=%@U-n}dHpYz7~2B>rd$Kjcj2)6n;m_1k^)%; zV8K=V$QjxC_KuuYfA%lsDfD_vj4yVgSZ_xuJnYqnKK6tM?pvQvu#@?PN}}QH|48t^ zJUGVuxORBl#UnaxO$UvWb!Xbv_*EMxrRFXf0lKZvYlQnJ6=%iaj}1G_f-WXr7eUgG zTuF}T6>|AmSnSKxDs(#k%D+y%qVH(ge(1Ry=s1dofKPNSWq_py!)7qP#V9-&c~u=J zrJBW?6V$S1?<>26E!+@R?G777*;%Ow zh_U7rChL=nBFp){Y{5*P^9=9Oi3V53|M&;mfnj?)uW9$K6WJiszm$`5eqO%x@-IN2v$ zvI1UoP#H!GZ4( z7tGy{G_>{Lf6P=S1MmXfeG3tlJul#^UGVzQ*O&6o(jjiLw?9v-Mx|Oj=gDcdw`|%H!F%|Xs+U$) zHXF8bQBkkdk|iTozdxE!ZzkaK=2IXACl?x!QS1$ZwW7=IM(ebyr!So)_JzX(0Pl_G z57{pN(cf}OV^f0ZRT$KAc+-zjmnz-LWs4m$Nz1y*O|_g?&3p9P~e%dv&f=+Q9Bv|`v$ zK%M9QqtEy1h)_uyw@->x8qc=YW_xk-R(un#Gn%s0Y08a;q|J+$6`wck^MK12}I;Xdl1u z?_JkYr*TFG3Mwe^_%6d}iABp;>^W`WaQ$v$zIb%{Pw$!~!RYvF1DS32faOSa#edjB zE%G?>MK5NRvqphtoc%QS2t#5&y!h~RT;Tr`UU3m1b+q}|bUsAAo@5@tw^fxnM83m+ zzT(5H2l(*nzYt3{OjVWXD~sm$hmJ4v^vDJ9B7`1o>}x!-6;1dPjqmBkLt(Ls_~vet z=e!c6&hI!Aof9pU@QK1 z)YdyLkt;z^Qz8+X$0bH{AHV#iN5}inQHiQpz7{85^SWOY_ywk=TA3kE3XVG~{#eYe zE86y&9v>AJlQVOwaxta!YEHjp(e43_b0s6_@0U8h-^wfdtb_LpKeOVSs+eqlhLsZW z;wQW`{t1#EILhi~?ddK39zF7wNwSHOv}pfu+bMCer2=FvUy0~GwRf#MD@i&ZQ_;F! z)|fhv{f1mr5O%1TDGqp=NA+!ph>3vU7hys$)AXHuVmn;^$Ye;~U-#o52(g zg92Vfn-=_HL&~&?zI=%O8yPWRUaBfblMz~2?4tW@T$7n9 zI;Mg%3X*X9NnQuN5g$6mwHKRlR*mZHy_A;$ms8z5iPt#?uD307bH{M8s{JE6mE*#E zJYFF%YpjFVeQ$vP@A>76snp@G-(()kUM6!$wT3;i>r)kp<9J_(;NVC!YDWE2xHcFRglHF;J~$7FzT+o6XE(OYK5OHY&4iU@ZGv(w96^>r66ZrzLgRZ6kgR zk#zvt!bS8AehGea<2Y<9Zst18z$hJ@s53?>sd7onE%cgQ_^{rWs+x*|si>;EhIdND zagU4gpn%#hxh$A5B&}sBJ8Ky%tR7WO|8{4y@}sNx5)gJ(ksWTlQ*&rTgtO)i<;iBX zqD|wD%l6kTSO6N;z3-AlrAd3N5Vb9~1tGJbO}$5lXye%{lFJ8A?n_v7+ z5-w~K^r{snc-PS4RWA9dcz41<(W!`1_*f!+i~O;nm982Jdy!6mMgx#JydtIIKt^ z;c>0>6s0=Vu_W)8_8VziH|Fg78SFL7UV}c#&g=RSo>0yGu6dDQ%wWJR==*9}S_b^d zn2~u7E6V6yoo(qr5N&6BP8q_CslLlOrEC3c5k6lwsW+rO{2Yr$Ek1^N1f1MO1jtZb z;LatSchxZPcfZ%uSnb5=FiNLjo+soFJ<*QGN&DUvvLE%QEcm!5+TZ6?nL!wCP}2ym z!vYQShMRbSBQqf^%&0k?^%b4LDy~{xxl=IHkCx$Q8#}|tHb*hCV)URL+Mm+arJ+Pd zN*!r%=?>y6pp}h{Czc-cRArkVV$1)ac#qS><4eaxlQ<({k2~%p)6KlH)M+N-Ct`mB zPPL$=ya90!%9X*+?gBP}Re>&J9OlQ0fFHF~3tvrATolW4jZZ}Ru7B$&RSt!%`3`5Q zPa__0Pf}EC)GloBQPfc%)y^CB2rS$flu9|j?FgbMz~6f?6d(}USYT*5pU++VfT)p< z)pia0fML3NH@U?^ER^;RRR}e2WbXSlG*IKnWx!fsQFIvebv`UUQT#npt?*X4Md!fY zr2em177qMMtqSt-${EDqOijSjTA0J#B{2VSP6W(jbJsUkW3=d&Om#JnVR#C#k*C1|3)kf z7{tBduv<=T-G=mbYOcR1l2**Zy({_aLg7poLiSmD-$WG9n$46L-!PC?*1@ncTZm|? zMixSY`;@A9L6;1!e8|2wLkW&;h{lZtNz>w?>i`nS2a|cgOY0Dy61&S&>lwRrgX^K- zLRHCs8Qt~T9~FxKspa<bt1f*cNiiWrYBcKQoA8vB-nT{)+R(sDKU>_lr{1k4}w)(ixwvU4mA z#7fP`TFEDP!?7m(%8oDo;12=DftxZ6qU*v{QolDY60KKlY}eVPS^1MClitLM@a(yU zLauZ-K_5ku7b3f+N_c;(s|K|4v;rdfhC@}Izug`T7ExKiFy1ek&BS~ad?XhiU1N%KCJF|@kfzTQGvq7HLBOHa zq^0|gP7W3#u74Hu_4UFd7`PJ$nuUZI3TMpm%h78k4RB>s6A^E|9Y7g-V=q{|N@PMj z4D_FO_)Ci4>GVQ}UfxkovIBuPSu?-l@8O=mB-CSk#rUOGxfoYeH~U)1)e(7*x9`!A#YTsfj#BpOjCz*I$`k0>r!ED zK{eVZO1cSyov3#%=T*BuGYX99zM_&+F}G%F^qWv$hSN7{?E&cy@iVM0cpMm2k#~Pt z$O!b?d9EBrPID+?v$@oslvS2CbRaO|DERy<6?;h7XX}?Q9`HGwWSWgSuKagh${FGc zV?qBvmxs<#F(x_~gk{bPop&j`J zjO>eBu8rrPe5uZPRe-$;a#4&ZTdOrCf#_#;pZI!GVm|*d+V%4)HBFs^v+1WH)j!t5 z2H&|Py6%?lF8N<{^qew~XQow?t=U*I%d}2P^2t3W;EB|D%o|+XUF0)5y>!HHs~}XE z0@uOf?_m9g?`G|&j*!@&+ovTKaU9XCNpIN2Y7i^_ipa&;`HX8m6=&ehR+R!u8s0fyuKc1x6Xiyqeg zVIFu;ul?qEH7)s*8x_mig#Obfl-jKBdY56d1T$r9?;n8bGZT zFq9gQwtS}gWVbEO;JiH`Fo+U+SalYRb6~Uvdi#}6qBlU2!F%QWL9N2*OLy#0sR=@~ zX`yn4ubcaY&`JnInl-h~^ra-q)VtiBM|rRGqu|`KU<^;>d~?ZLoJztxd{fAm&+GBK zUWZz#UDMBs{6IKZ@52-G4lb|C-THj7=EMTmA5}}<{BUI4%(`ykf-CZ<{eeuX{V#-X zjRM`#Cl>bijMwHe<*@_%TTYP3mcTK5Za_0(0(B}suy^P6CJNq9QkiU+$lwD2?z%}k zFhLJsh-4Cpd&$YsNz3%#{{AT3Ci@^?#cPsWmkTVF--{`&iYw0$pNPdRgMfG~>gZyt z-^-uZ4ylt^KW~c}Td%VTvC6Z~a+7*WLBRl(6m>Cfs_YUl+?KgDiL^0?`Axz_7ti^j zGK4ytngH)7UO(X1!&1&h7w-iCM!~UzCiu_gq>P-gw@?7yTq_FbLvXr(D<#gJOJfj z9vYn--aMIsJ${2cLdT1Vk&CGT7|m^gOUJe?a|1Q=%IrfaTrJ-Td46^haQV!Q*F1X4 zB~NZ^tA2An7L}uBZcmjVM|1L=%z>b1TwqNgJ>l~no$4Q3&+U(7;kJ=RQI zGNER8>g%g7A44*w1J@SVZgldN`T0OXzCGI8WL|d7iI0A$wy|xhz&%4_SHx}(_UvDR zQn<+udZPZ*_(iJe(woHf2V9SO5kEf66?F_NF_{uCwc%%d>(*+?qgCAXs+s4!umJC% zvZ#ZL%@typ{o27r-x!gk@g;3*_!Enqr$jFaymvs>?&F?CK_izI-|{7lEp+{E0()xq z=VGH2K$VC;H*O_M_Fwj45;uTW9-aY#L!sGlo3|f~p15=nXG`dvgMg?M+qWfe4+5W` zfpJJkjP2*4sI1^Sa$nit2Z(cjI=bN-eEjq7bZ1D=rlEkMqxAp8KWYEJ_-C!0>hNOo zh|dQ{8ELb9cC;_F-ZK`?wD7Bd(&+!@KkCq2!HrKYvc}OVCZ|3u`s5Y9CYf+9C0=Rq zox=%6hGX8PuqU<=)dEi&Yy6GO*W8&5A^8{c@j+0Y_GQPLRnD2lMT1io2#U`zrhrCU z;o1F86PV+o4ymNG4G`=UEx)HIWb^F)Jpnt-BGufcqKLgRXi-N{gJYJ*wZui5e>HMm zUU?R=CuzZWBZBcCVPHVhiV^decJ}Jc4;4ibFfg5p?i^IHTO4tV@(oTEaJKbw})q`U3^iTg>nWO$k)aKZFw}LU^S~R7_f+;cz5}K`ha#T|%AA z>yxeBS0bZ}gwL2qh#kYjV<4tWyN+w3d~*on+!Dq8D!REoP{N(ZS2{QreaYk7{%U`9 z^+Qc7|C=v65_cQw-cDZo$0ub6l@`zly2{$*$^eKUZXtG>Cy?wIeJpU+0!&3pn}rX( zsjahT8WLLA=;|~yBzTfn>BaML>NOMo1S7cACRw{Ermy#m0D5Q zlLPrLm@(huJ6NB{e9oJ?WffQiqtN3I3EK-xm^|cWa2eisjVN;8w;QE?S)YgcuXS_T zp7_;&t(!_<{BhGEU{chAFrp`p?|n~ra1*s<@URB+%!T>pd4Pl#!y_(UBE8Fz*$uY3!y z^_kflXgfj{=h%H|Yd(?w*+3of>z}@meB+Q9hkvI2(a(G2`2QA3Js!-k?TL1XgsR=g zD}Pa3|1duAbTn3$;d!#|#36g;u=_ltZf z@Qxof-tlY5o8m+Je=isEf54~y*u*r%%8w+f;k*4%$L<1j(7;jji*@;V0kD}p@ZR^e zDD)BsU$x@f2;l;NkrBXkA9jbH^Jcs>7_G7g#6ZE@6%u^eB>8AGw`g07v39+ynT6QY zhRmBk>jNQWnHEihgQH4h0#WywqvnVeG!x_UK-;v~22X#m*i5;E#SG*&r2_DkdX|;FgnzlNZKB$yc23(Wp6wZ<)8fMd zKTf!iYzO!p6l}%Rb$4XPo3uk9SmQDQv|Ug8{{TJg<%57R~at)=k7*)edv!-E6+-$2oh_@CVa zVYW~Pn_}92LD?j41;!6iKkf&a`qLayUCdW0b@6ev)~i$om+lGH)>vh^G_}2#77moS ziDw*Fo%45A{XUTSSOoeB{<4OQRldDy@yfdznCuz|S9DCxVkFF!>FU^9ih;dXXvTwB zubPiZNQRKR>a((R*L2?Bq}4yg_Y09MF!Nh2Yy3Q^;s=h#{_yuMeP$qkH5oB{B86@o zy&dx!TsGXPo^R|(4Oa}c*%n!nC)S^Sg5;8@h-v+%ox8Bx!B?BL(MteJ%17kj*3y%U$#pr7&ej&!$gn;)+lXggI<(GNX8Al4 z^BNPwKJ%_S#*#2snArY^xU+?Z#bnRey#Kdpftfj+OA_{I<0{BrazmnV#+Sm5#V#B2 z`1z%Mxlj{EZ=`=i$|=~j12-SjxO;F5cuqe{Ki|Q+-hn_A910%4OL|(9Wh0k(F5q90 zC}0~_9)V@`o zvv@e0Q)&KMD<5CFC1`6tty1)Cb7uf`z;}(Ex91mk&nj(9pb?A~^h-1WeMd4cj`*K1 z_FS39L=ANw6{|~-@_-;bp&wemH=h@fG|i9H-%gWn7coA*)HE_{ykqO-Cf5FYU|iL3 zKzq24p#s>tTaNZ6bN@d~on>6pZ~X2N6buxRl$7q2P7&$OkwaPd|?$3RFuIqg} z+w(5i(uyuVDfg&2AmW(8k;6x#e9vUCoFe%4m~8xIXACoy4+vCtrpxrY@rR1B5X(uS zjk;tF?8jmuzx(h(g0*XVDs)A#j~8Il+z9TAv@$%YX7Ax*F=S1q=dbZ68Q--iTKzfJ+MX&o`t8R7HTbfb2IGSTgca zoJZrY!Bii(m?+voil1D_Gfp;#xdF<3(;Xprs-j2D~g2=<+?zB`iszD4RvfV^?BN z%r(tOOK!#D)>|<%o&IK!;Sl{<&QtpOy?cdQ$pKrC2c|a3snb1+AOXvB4raZT&M{)* zL3|%T@PvG`TG@3l7iwrTSI!jX?imbChOL@k+}HpP0FS3$fypw{zc$n9nk<)Y==H{Q z4-EDP#ZJpg>|O`&&0+~;B2N#2e~#4j)>l)*Vg|og^!A!L52PlXItc2s66=b@>l?hO znqRh7y72sOtHJKmZ(GGriufqDOD3M42BWBqZAt(L(;yG;_z6xL=>)irXgOFR1 zWe8m<+@vmX@L57GO4X$!Hek^(-^z%auC4g=@ZPls%ChL$;5>#sS9|$mb9qV+RaA{W zVNwGArZ7QuR7LhUv-CdT?yFr7IapnAM}Du6cjN%d$@SFhu}utKX=Czr?Q9@f>fv*k zl_e^)q9vfdMgGXJf;at2Pbg$%ctpGbJ~ekMbnH$>xwJ9<5J`8US4p=Xq&an3XGg0JxKn}}W?o~ZF$2ouUJfA^hPMWswg(wO5G@(|GuLkBi?i1ZfG8<+afXetH=Y5TzKL znvS~AX@E-^JbCHI^1fN}shPlJ#jbVt@?JoOmsZ%{j4i7c*~BGF`?GLlJkT79El9yH z|L@h@a-;0O9P7X?9d-~Uk`SBfQ_0#Rk;A3cgGuDKE`>*^RHq1)yu9%0{Za&~sEC?> zl4V+N?LtP~pS-VS;Onr$Ect|r;g`nF)&pv&{xk`Z4PQl*zuMvYpLxg=_qid1URW#Kpq~biN(ZbQ9{&?BbKG0Bx)W zNReaN9<{!OhHh@4EI=70=6W-_2C|GD6i=?_ zSa)dmET((Bm>U_g(_Fo6amX&ym_k#je5EfRF`LS7?eCs?3i)>h2sd$JQK0jRY49j` z-sc!=&yZu;((t1ySsdp`i(YUE*xsjwXJYr4tdqotE1P^-<;8xi8OKqicGgDjZX3vdmE- zcRgBie;LAqgzm*@^6Z&le~)yz3jcm1Oz{1MaC@4750;tEgkFbGhmbaxW6J(UHBji^8sy~}f2f1590xp2xVR+28 za(7)Be+?WAjeCuGqM%o5l0BuozyA%_XV9lD)$@iq`G?pVBY zUkgfdvWeXa=5@5Ml(<{UHR$wXOsBni|7Mw_-nOHN)Gl0GJ@`(8kmoVMpTpipZB#7=q)DI*Bqrk4B{HvMUniNZ(ivLgZ8T`MRkJFl0 zpcHLzkePX!{kpRd!;t=h15uUD^?#C2{r@NVG+6#`$*0g2muBwmTRIRgXyszxKg6z- zGSn;m@ce$i*d1qm#9M*#)dN@o&t1lTb9#p1=c3}8BvP+> zjNmr{a1^4#zBwCYPVwW9ADCL)j8HgY5SSVoTw3$2 zc=p(?r-lESXx>pII2#`_X2nvAZ#BECwKqBE9tfAE56%6v^6LIybDe8QU{g~eof*0wjk?OM$E)g z=WKjS0mCj+ip+78k$lcU5`dI9a>{g4K5Iz}IkbPupN;7JN{qw@6x#ypuBg6MFGNB; zhPx=%vt!l#p^oFBezofeqO1jvvkr|kk1Q)_y6Q)6bWVJx3a0cnbGF%Txk6n{mYmY&@^5ud>of^GdDP8E};?oC|B&ej32~-ZVfTT|Xiy6zTc@e~`(c5D5 zvBxvMZPqgO_BlQaKmQT%M_omLW3JSU%tDh)_IL&7dVKw=ugM`q)XNAVkR^Aw!o>TF z)jSVBx~|raC$#J_Ud%1BW1n+W;+7T50>qAGJv!r4^7C|;YK!g8ADDeAq0G%blm1gH zFavoN?p9(%p#JTkIx4;6o(bcq$am&FjdtE9gLu#Q*q$bA!Xzc`afD)~?dtQfV2WR) z9}-eP&DFMh+bX`8O&IT3p^ zc)N&!2FIHOqr7yF_SQS5sL@zdD5$aJYViiF&Anq(zI;&$0hCPbXM0h*dANhV{~F1^@mstD^^#sew z&%jxPV`}81DZrxkv-+Thz1FTpzWlQzQ3t-zRfu&r2VG~eu|9FJKNS((d%6_7eFxv- zhA$odFLdTsQ)xwqub3nL@QkOD)kJKl>6Ocu6gmRocTZo<{EuhnRTS|@{#2d2X09%& zw)LX?B1+V~ggJD{t`4q>boUJQwN0pM;!2B^f$yod?|`+HkBhmbLhill&$vfq&XZbf zyG=z%rlRr+s!v2+{8pT$l*>Z-gNOrb73yv! z=kPk-t@F-~o?Q16y^MfQTgyFAKoDooo%KQfbaPXNXJIo==)Ha#%_UoL`Z^@@#u638x zZ&1EV6)a^_;d<3qgfUGGCL>|u{)=@dx1?(lOg5WF`vDg7O*iR9X}>iRA18zjpVian zHAO>=LJk-9+om87+7J$I09Zp65nKDl$O&dp!!v79s9Dv&Cq*vQx9&RlLwtJ6)z?2k zB}1Q7izW3+lq1&JAm9-6SwbDa*O9x=&EEyFf29i!ZUL=4j4BA2l2>Rba$X(7b1u)x zgaT{&u^1iKe*|1xm z@p$ZZo2<`59M`rI$=VV`Vh$PHPy_FEN@&Y(B$5bQA0)qK)6wj?QZ)Mu8A<_bKHxd1 zVpJr8_Tk3M74CP`6c0MZ3Q%fps44e>bo(7!qWp8jQwK88euMWo?^-=S_xd(I=-xl7jCmbV zZIWI0vP3Qfd~Sg+@D1|_O$`me?wu7zUF;9ZHnoUDHB5Yy@?G1)#)>4d42SfSCSS|e z9kat!6Y{u;Zx?zjt63ZNy9S>NPj{4QBCsOoKqR)xZP84fEf?6&ug8?`bWre-EmE2wFnZMMS#tP}qDTgrS&^oa0#}3K!sX6qGh6tu zUHBl|@K9Ql;nMJA+ae$hUDhK5bN|U2O-ucIGR4(;?zukwhP7vNb1U8h@+z zq3hCU@cJbHwR0wnLb=;#vJE`NKN4=SFGzNqPNAm_UUp+69ii|IZt?nHzmlHrb$iRf z+PF_M#+AvVFx@JOs9Ky3brIRv_a?TF&mD!82ck6Ke_~$qo3x!ZY%IZrkXd5s9=zQ} zoZguEoj*F^`*0nt3Ci4DHmso0wRuV7g0hf6xJ)KHX*4f8`;YW$z2t$g2ECW^@hph6 zSh5%0Etm}9r7r8WVbETXqP7y~43=Il;sxV@Y4Ac$&P8ju6I^eDbjCxAUz9)o)^LQd z)`zI4cdoVHc=P#)4!nEKea$q zxp6K}mKtQIKbp_3cas`X5WAkp?nT(33jrVE(S$;f!2w~^>snUxT%q|Ua!+kf4Sbmh z)N2ry@eST!61D>ryZF5qFsvrT%6lp=Qflpj02@wj^e|(Wb!Q&0@YVWk^5h>u5C;Cu{9FK11+e%> zU^Gz{7-zPj#xerp}?gEDe^f#{UZN&V7P z9$@sW1|sCStaBr@*ttT3J$L%swqZ6f=YLsPBzZ~cIq!{+r)4q*2_X*T@Z+i;{{y9n zRT&b4FU471^ewliJN}z&fV}F8&tiCSt_ft2n`9E-o8)}=Hdr#%?R&+qp9>Cl zYmlOrd+F%V~ko8z;M^^|iKmn<&kK? zBIe}MSNOYs9_h`e5Db4{kpe&jmQXrj1w_@?yZLu{;`_4xY;mazxY|MNd<%!b0HvnW zg^N5AI2zSyjvZnNvr}kfk$8mfUEFyi^xAus#!TGe;x0z_pFMscSaTte3{RD3T?bsuj_B{ zOe1>71*>JQ?p%e31%wB>S3c3Rt;d@I7LmP6H`z(BR;wY~p`rMdfuH_%=J(riX=kRk zOBFsi#ngqC;HAYy-6Wgey9>99pn!~XLmd+#JP%%Za>&sMz+kRnYP7A?NZj?%U+x;; zdN0p~eNslj>?c8gO&!C`O7GHyL-8fx(h>1eYhz$cPedzNauvtHXURWOuV@i}YP3-= zQ<&U{;+_m2ny#B(oVhw-z5X2*c&nCp4QM`(7{1lozc|_$y$)-;k=qabN1$1RoeW)w z*a$$(*z}-{uHzTa*_!ftMseU|ijQA>Qz=q(-D&dtOrQ|XOEQa-$5Y0CRK;Dq#UvNY zXZNcRmG1QSViKFMdfa(w(c2M####{&(#xJDNLsMKUP{D;c&lU8Xrzr6(l|1Iy6wyaMZ~Mc!X26>3ffJK*kmpL}D8z@kea49uIV-0E`g%aGbiwVd zH8^e4>xFU*=bM!izUR%V#spO$Qc1uaqP?ef7V5|Mi# z-Yl4D9gZK0&Cy?r_juI&}V#-L?5TC~B3xUy@{0@;%rFGPiG^AKRYj0!U|dl@(0 z>72|Ztr(hiafw)On`+{(p5|(c``H=DH>|V^VN`)>!G}%i#iWm1#1?C}b#mxs6&%cx z<3GqHiNwIC>Jx8TGGpMzkrtn!M$;SZE^dg4{94O^$A4$7Jcir-a9|k{%3$*g+;dSB z`QF(LLj=_oDi}lPDkawsWL-N-(~l7SQ~WM`uBg8b z+d2)y*p^v$)Z}2HM_uh>W2_==>D!1NA1}Oi3a{&WG=XNIGyO*}tRPhJ$X&A+A})r+ zx7VSru45K1T93`E5c|h($^WuK*cXYU)ClQGi8HiwN;(?i1zudLz1%g-RS26wo3FZVgtF zD`ZQ^!>Tlqb~^9PLr(Ws;_lS9W91Ku%o`S*e>SdrP!!UWkg7vo(2^}`=E3E{@J+ki zN^t#kkD;GXSMvNe^>mP&(5-aMEjya=vger4@+!Qi^&f#=UPZo zLybXL>_dgm_6{PmnTukWC^!0}Y&SZPH^fh(IKBUl`+^1&xJe&>VfY%j{-8w{ey=XD zB7_g2z%ICDRZ!t_BXVJ58*jS`Z+%Xf#qgy}gCll|!|-=AkN&QV^#f-88(xt#&)B1@ zcn(hkjUUrtaymU6SZxo5D!n4=Mbh)de#fw&NI&AAr@Ijn7#TQ&+zt>bC8epbRAF;T z-*l8&=be_8b)a-fliJsVaP|KFBXw=G2F8;rA)4)?@?P*7P z7F-L8{-o`Z_jWTLXmmi$w z)@LDP_#b=9ZfuT6y55J)x(kNR6Oatn;T`J5TavAOIkFPYAj`M4u6rYVPg*?&+v4iwT@Jlz}1pah~c$L8LlfP&a3G-4CKAN zav&#)R;ACs*B$M+#CAY%T0GSF&V0lvo%6Y z?Lm>V@aRlBXa>+minvU6vgXZuI+bhPNe*{fO5rzVYv}4PV zEPVM2*m-vDSuVB;~xFtNoNKy}1HEgM?@rSr?ZU z(0pK{KQ5g z`0$71k3#X9`5-vTBfSm(Vzs(6h-hP|YU|O;yHVR=Pz(8$o&#FGuuOz-PbRd}H)2_2 zU*;8XFxfB$k;={3{v*I!@?yh(FgqXKz?Sh1nBtedsEFl%1RY)N__CLVn1dc4Kzl|N zOT?`W^nN- z4tPUP3f)~=v7dMY&xhjJ7h?Ct#mF7r<0D*@zm?JiMEO%)Qrtz9o_-cF4mDyk*oiA` zxnqzhLimoBeVUg2H$hgh-PWroOds?`I7IM=u-H!1u2=~#`E0$?2Nc_hy(iY1CX|T# zy8C8IpNjQeb#d*T_zjhNhA;8yFE7upwNjegs^!%`hFY!Oo5eZMOZtPID5+Xqolv+h z!j-C3vN`v@o>WqC%lY+|+bR4QFnl-tQT%_@9uRFcmBs=A<--aMJXyRsj>HHLzh;b3 zT<#1~FptSeW@zkCP+%V#1JkxEav7bZ3AsHyX58wq&^4P$$aOP?`d$`-n*(Yp9_?y^ zGo|IFPGuj*WL&;NI`1~NXk;rWi21&nKc-5gvwWZa<3s3t>R?+|XoO-5eOg`|$Ysv0 z>e}V9F!>z72GUQEoZ>8S!TDeLHGJ?0C}c*_m8Wywe|z=$to-Bsj33{qG38`R{|IU` z6T+5NuB&9pgk$-6v?-o`aUlkRih_~yPw26pf>AF#Hix5w*aQDGs~ps--0ez{ zF(W2H?O5Ml@=eW`&R8>wyZy>1L#0B*12hE%dZ^U9ANDZB;W?q#$||Tn8-+@>cve%n zQWw(1lP9m=>gflYEN3emsBZX}^7R(6(M0Z_`51G#&B&boBRF;Yy^Kp(hF@VPx}D)e z2Nqme-pazLldE2_zh4!1rW@aywIt_>RYG?zO-^JO2RFv@?++^-WWlc$_f-&8s&+yD z2of)l5zg^Z3L|pYWbZVa2emap0{*dInLaTWjkE`wORn%&7O%-n=lkvY935d%IkeI> zFb{wbK!+@MXWvNWNcpQ*kRN5yHgG$+U$;Gg!Wj7&k3Un=t_Ps?y$ak(CUZD zcEHu?mx(@CL8GYYA{634D*xu}*fxe*Fv4vz@o^lRnbn8ijRYXJE#Suq#yUgLCl}6O zhNP{C6G~6bMxYHozWK|yrSMi4%y+MOYn*1_%c+v1Tm$Wbg4`anKSYKvHEV!Lk>NTC z{IBqujsz=e{x%FRhaMLlrHFUj{Jbg$_pQdd&wZ?bh^Z=} z>fQB7hL-)F;E?4Y#i|MgYrU7h7M)xrTnau2Kc}7OR!H5BOu{hC2!3*ar>4WzZ!< z)BxbD7{KPOyo8_hlF*C!Ur$ya3g=$S+1^UCaqgUSp`B7=8D#;?t&V)2!p#q4K@pV~ zRTu9<1ouB2^a6x*_)>wHOiXn0mgzHn{a*Cf>EEU0IVanHN~A*_tv69a??EjS z4^OQO$1xD0)pHi^HVy0!b|{)A9FlBn34N}LrjnRR-T_ADY>a~j-mhy>-w82Gk0`1L zNryq*fFuUhtFTPe)J1UrN1m5WuVl^jFq?SVN6To^Ph5kpD%2u4b{>m zw{wvbT1eV>5bCPyqZODL((opPnR+Rh6R0io#h!#w9+9NMPniC;Bym`rzjH5WN_Q`0 z=O>tgFxW7=HBGDTDk0%f-v)z?PN$z4NDO>B&^O?P0f@=GUPG)eD{=i3P0A_haIm%7Kp}{bFHKY41~M z*M+WjKJ7i42I^w9Ys-D1i*2ygov8SN5(fw;OX~^HC;_JPs zLTi!vW)UZjoE~2h_M+L`XT=+w%a(P-vkyyKh-yOBO6NV#eB8XBO1yzc+7D0x>RvLx z|8{9E+~_e8sVQ!|uE)CmN$QrkDkX>{#U(&0NVL?U`&XOoFj2S=$IrD>pY`Q%H%>19 z=7?vx-vWHV9J34A3y0?U_T`Z68boDz1cwB1_LxsmC=IRfMi9;q`dt38?Sew>uOXkmfH6XQ0efDW z8~sYM}wHPH}ur^O#R zydsp*B9sK|`Z6Ek1nKkoRI+N<8t6LI>Szwj`5WLR;`BVc19YGty}5RuPR7AkZ)_qeO>i_*lN`?P%j8daDeFI*WEdKW>$+$TGcq-ocGx2{9_$ z&1?DPzFz5H!jKQZvS$>DUu)XO)r`iRbt$@dEdSE~e$090Q95aLW3@?|Qb9W}+QhWG z8$zyXD$sGX;A6@Xn*-{HC`~1znUvdBox{%%FD9k*zYsk95(TC-_-#1Q53!>cz{`l{ z*`gfn?xW)66L-pmAG3UX$Nr%BEwQ2deXccSWtAI=E1&XF_i9v)`uU~Rw*NRbvk3$Ax%R~&Hl(T@0nNR zXP?lXfJVnFis%z~-AAp|h5dro{mFA4k1!~rURP}>J1`L)+~>uou=#v=xF~Zt(_Ojl zkzY$3!iIb?^Xrw{ji-#zlNdfBWa3uW-x<_}5l%+${zB{VMB`ZmKxE#2trr-UpVmFA zr0_NOm3t=}|_9G);JchPK_>^qiG9P;|Lq^~#E{^LfE z{_r=VSuS;DS5Y)rp&6F0N2#xQq=s4F(ilZ13OKgk!g*yWtQe9}aKV*xde?>qxg2Ek zYC|u4gmb#o`ToGyG(ApEjAi|>q~wiTXA*^Hi}SZ&uT25f<6o;9Puk6no63@S;IF#- zfeUwkIM5d@ot#jEx$rxJWUI!^189A!M?*tbtE8ntaVFbx>@`>#KJoQwZ{=MIft7dVFJ7wB`rw(^5R{b_GQsUUiyeM; zI+Jd#yFx8~B~kdsA}OC)yt2oOh{(5eem9%g9Uj}0{@&@8U5a{;^zBsyyr;s?r>P_m zlo(FtR$Ddi3&ILoEb+|1>#$g5qyD!?)u?nwbdJyqSdM|;RLzzQUL!|t-rtUyKFwAL z)~Pl#uKl~pHM8lm|9e0K*?FN@b$qeyNQz_#KU}r72ld8qtqcz2<2qfhQ`zOcX1d(Z zw)iaBZ*;{x{C5)~PFNzt*tQL8^-AnVvbUOeP*?AdO=$C`aTyv=qsond?jicm>#bl@-m;e?zGSKPyO2#jUkE)%N6d#v??yZ1bc?`LRbfxy3G?uEwU;eiReb(} zdGHqo^xi)kGP_KoTX0Y95y`x7=!X13JC4aSvb(so8e_vOM8p(^S@;vfmb79$DG4W!zi`3Tp{o6Y@PkD4#^$kg&t2#pi+(6&+aq1eJyu5{M}`Aj9%4He+-~4 z*^5b6bX=_Qy?mA8qPt$C(kjZlBf?~KL>JB2t{K-k9(<97X{*)?2f&tod-34HbXFv4 z8N!X}W*VaAv(!V!Li{C&swi{1E??j^LjkMt#4 zOHAr#gPftP=wMabE1isp%q9sG^`eF(zCd(XwmD6sbv7u7YV;9BL{yjdhl&nt;%yo! z&sk6mlYBzN8U3@Ww0WjhuGn1}y5Yn;*Q>NowSTt9gJ}W$<(t*zenE7TgA|@&7UTtD zUl(5eBN%#v9*pH;E(tadB2M3tkneKK3pfL{1n*mx;n@J5v6bu7##ymk0aGw1O$;HAw4HsXU#uQg@~-8%!Ijr>LnJm-k_WWWzsK1U_BS{5 zbbk7&-eybENYpo_H>cUsm7T$x0{50e-U*clL|dWT8-NB?PRTMmQ9}O1qYWh zcs^#l54<=^&&p&_!@=&1mjNNbq8*^~rI6=&aRYQev0E%o>T&zfVxh`3&DnB3(`*FrFIqru&2B265#8BJt6*{QUCWg~y3td)wc6 ze$bOHbz{Gp-(*iRE|i0vS5aROZ2LXQJ$Q*TkpBE|Z*aLCA%A}F3cR$R8Gr~BN*+Ug zx7okhM_z>a9&PjYaL!GxnMEiv71FlS&g4`q#fPTxurERQ^5&6C71T!!YMg+A!8Hz@ z{FJS1lBD|TkZi@|mF08(iuQ?gG6=p?0<7VDhPVXY}WYOU{8GU#DO! z!B+QdMg7huMI7a?ZZqQ*Irlp(F>1(kH_Wbk-{7YMspU`}9HO%10`V1dZN&AiJ?hCD z^P%~1{;Bk!*_1Tyw#FALunPW(RnqD{WUUWEZL);leZgK+lQJzlOzLI+{nAyz!FF+J z^n6>6bg+osdjAZ1;ulM_$Z$^b+k3Bl|M$OhSbLzWDPrP|#4ZbF3GvWPzD)DbWmg*1 zd)?4<$In#4^To9rHBbd%A0Y~0zwj$*rt7EL&%P16R!2uZjyGr>PzN;ytOh7X&*L6E z?Kg#7+T#n;$+G_%XMn7SG}`Jy!+o|oe#Ln)zV7yGcntKc17BfQm#rr?iY}G{CbdRDe-l{()e5@n#EJ}ymwx*I5Z{@)Qcs}6i(H~i&@MNCf zDtNv${uD>y0n<_JltaP;Vk)0_QtfA+RzE!2wu$I$9sd`0zZ)TzOUvK$|S6zS5~>FPbxNmKijYYqzS~wF_(I=w;q!M`qdd=N?Hsl}ZC>U5(@NfSHAYG{ zL$rZDZ+1z1#T^69R=l#qqeA&GcZH(7AOG;;6bv&|c$D?TSdwtJGxIsj_QtJfS(L-6 zzk(QY4U%Qdej<5T;Unn<{85Wu*vGHH8RlFizFsU^)%Y~dIb?I0Hq*p{-?DQfb0WYW z2oRsTazLjLzDC0k4qk&x<8xCHTQ~K;hIq4t#W4c+ds8lcOmcBmKG`6?Azm8vOi+Z6 z{N+atsAu075H;Rdr|e$0JwQ>loS_HLA$ z(J5$}l?!T2yEJSnp@>HkP^PS`Ms)3YIe)5(2T>oGTJ`MRjL9FIb_AO`OPM}OX#a0@ zFQ+>oY1UDo;I|^1p8RfVTB9N{Gx(^j{YIYfZ!YR~+SGHv#t@#*9J`w2AhekAZCHV~ zeY#tYjB6@LDD~iUvavtW;iGKnbBAViqjp&6*=;5U6q*@NvA_lXxV9OFhpzuXqnFOv zG(mMJ-J<&^dN4~QDcRHPLtlmk6= z99lb5Lomd8G(U{HMLL;paVHSeC)i^qTwuP$YDf7zm?`_wEkt~2e?Hrtvq~Px^Cx)X z5Xq1JvES!bS66CsrLe4X2-7Gii2pv#e>;dLM&=klC(`oAqj6ZzPN|YRrSMpm7IVZ# z)rYBDd1>V5QGsd74cHvaW*a1!;wqQu(@Oqaok<6cF@j@qf9EVGLXU}a#yF3W6q*A~D1oH$Y4lg? z-E3?_j24Uo>W((}01`lhgvh>_<(uG?1B1jXg-zLf^liIjZxOo9#82x$O8EIC?JTtA zqMF}b-kq;?S*p;GXY@@S8i-wGo!>rV_W!`{lk+~>i1%2Rv~QOcb#{Je?kl_&LGM(U zyY01K&>Mu{Bkr=0IXb>%irMN(_A>~=EO`WWDEzi$HJ{71Y1>o+>H87YD5~!O-F}>h zPIuN%#H~K`UeYD0JLoDzew#oWodasyyB7CM{xW%?x;1`aui;~eChF86Ey}1gnU(cF zW+(Drz*;$D$ z&W+`jg&|7TkrB&$?P3w!e{M%^EEZ(yZ7MR%tThO4WK4!8jh0USb`fV|SAeDzs;hw? zXB?c>gO4)?RlX>`>=y{q&O?AV2Sve^eg;;V5#kEziB59~YTWV+ysLCO1GhzjTzOj; z7@4tf{#(hGY)QAm_oK-PkwfJKH-!EV$zFqjS#Znt1HK~z$P=%a)k`M31Dfykqjadu z1)Sd2Xm%7Eu1FSF(8`RJHPQC}3`6#(eqBcEu51jqBwIcVlCNVL>lzI~M7L-JQ3Wz# zQv(#n`^$9YZ3;9k3#gC#kG&Ugru^T&ygAZ|^Ce%KULRJZqKIb z>Iz_<4;+-|qG-;*iKLuRj<0F`$n@E?&~(dc-#jlla4(4CBHwZpEB0)DVc!EPlGCW_f&q}!Fyi$^r<*|5u45%u$a$84vyL$4BUdS+1vMF zt{o72PeDV!IKf7zK!=ih=As^hF+P>URvwjn>tlPvL}t-8aZPED0m+%3CxMn(X!FdN zfc{pbu@~x#jJ7*N0sM(XSRtHrrqp3LLgIDE4KRB@MATVoF{8MSy@2GiCq)c-NW-97_`}2(34co}tQAB2N(m+vaz*WLh#=AYB4I>#~^}EkL z>L9_`A-6&d921LnFaAho4{XE6xc?)_x=!p2+7162j-pvAh_Ufqf-o;!1!GSeo?)n| z4nYl>4J#%$WN+{r24FydfoFweq;A!t{yVnw0PjC9Xo--(4cX^~0FZt)K9;c4lo3b>V>SEXGy4ax<0H)`c+?ZJMs*PNQ3f(o_7VG{nA+HSSBTivLih@Xz{XdbJ-xut6C z>UKPkI$Ap=hn)jEg&eaiM@?4$5rn{t6o<~jrzI5K_aHHq1!0O+Y-25jjAiCOC=Mm( zFaD0tf;2>6Zyg7@6*96jdvWrDYRc1H0=KAuY?C^WZ|fXiFHo(hd1=3j1mxz9$X>-Z zME6ABs-_P#SN#4ZCS53fUanLm`aNhpuvxRV2kLQ3^(`FM{H?mKUTS6G8$j~+LKG4% zw_JPB(xLXpHW(-YcHUY@T{~DG>L1I-1DV04PY0xhIY{;`eGKn;{wf$XO9i#gmUe%^ zUToTpe-hjftE>_9`gl|``czOY^qJ7MTQz8rmN%()wL+p_{ssTu>E#u}(9w4h^vGz& zA~!3;*QJ^r+{GNgvlnSqIco=P8Z~tUS=!aYCK2x93u(6QBItq9xE1uXBz~dUNM&s4 z+_qI*23>}Y7>)Y~vUS`bg~&7`ZIC<)7je&Y`#x8?Rk*xtL}lp`od&!iib(rCK41P= zgs~8T1ETEL%vN5C(XP|>zPaS{{lhO@~DnZomvsYjP?_b#Zb)= zT|*C*cgDEMhZ9(jVRPH?q)H0PDz12T&!otG^}Q?Fd9X6zPawCW#T2G(w`OwOpJ!q} zZ4hdjzt1aktApd)mh+N~%+AY;iY_w;+otCw9{6j6HWJh=cR}QOAtfiFlz;smeb^Gu z^^d@N5BL`a<z9=L{db~d6+HI|+gv~(^7BD)|+ZS`XV$jqqF@8q=JEn$2y`KuBZ5Sw$~f&WttZ(rMvg~zxiuU6FT zXu#5^d>hK0lKSr6>88F+eDZI!A?`lHJ~bugqXWbreeeCZuMojK`iX}gT{XV39fAX` z85kZZj@__y5kA{Vx(^BO2nU&(9rJU@KF4!v+Nm8nifNju(cW%CY>km!_r=Pmk=vc- z{@;R;Is=lBSi%j523ZvULEH3qmlvdO+()m>Gw7em^Lmnd{;%I7_6p_QC_O^s_5b z2VMR~@=zS{vZsJoqDgw{zD3}(RTT?C$N9FEjX6&}4;#fKmQC9=m#_k?sJTR&*>e_W z;X)ocSEaX=n+QhPSpj6`9(~y@R8t0UZSJt&JE*!4vPJ{`(wXg8J+?YtRMP7KeBj{j z?iOG6f?1y+rANQ(Grz1Pi{onyWHOJ*`a<*IO3U?1!4GY^;&o1soGNG?aqldSf13K9 zS_MO(e@~D8+42`mYbz`ksB1Ec!*f%d!`>fmD~K0Yuv#G*FwbvSC7HC%G4=bp35f$8 z;$OOII|A*+&009tYCJ~&!{1rj#MW&BMesD2ptkudGl?iJMrRkFD^<%Yo%l%2;iY58 zR2m+oKKB~%OQ#4*cMT2>8E|s8QfG5`1u~NH+Nn@pZ_)k>D7=ZRbA8p|J7YH&*uqQ- z;*O_CA(wfg6mb{lD=8b%-hH+pf#h1E*e9&Oa>P!`GtvAWg$R&?ezVX_aBl z^|oe9^D^vM(X)kp(Q_ht-!Hpu7IlxtDwiXXUcO5$?QpFH$+FZ(K6nRyca7i0)p&r< zzGi3f}*s(sBWYGYd$@vHE5VnXdO7aWLn5SCamQ~;NYYcT2vx`z9VVoZuV@d^lD=KfvHUu z>`)}YlC-O^kIOdq_5f%VZI1p<6L9$3kE(V2>(a+hehDVzNv8`|=^1TJEoQF}i$N1h zD*ub5vy5u;fBZg*0+IsKrF0|RASfu^9TP@K4e1!6AR>&A7$K$7E#Mdf2GR{m!$yy0 z#OVCq`~B~8uImX8uERN8JLB_?*BknwxQ)4Xgv*GHvdmoe&o$9hdH_m$l zTKN4nv6PB^?!7^kog%=>*aiT{dcZanqRVtgmZB6qTgm!$>^V=ydn!?tWrR&o`)FA= zEEF3{{u{0h(<$w5;l);3q}MG`^=$yX&QNT zMr;}{zSJ(%;FnhEtnj;{)FSQzK5`tu2(}fzmj=mW86oZCypED$zzn{D{n?&ISST(E zi)y2b8;$%!-AsxpCn5|@w4`n##(raVEBsz*5HiLSJ$gbg{T*m1Zb)c&|NlB*QZWxZ zNFOjyP;=t1|D*b-5#l>vA4r%VJeI<1J@_Az)Z>d`63$YOohsbEI#udMlQTQ1Bc)!w zcl!eVOGvBxlJ-T1)E~k(sRZMUL{TqjUy$n&2>m7e{GE_O?eSE3Tq;q?D`_bbsNMrD zErNxz4;0`cEvlpnZjzP&V|d+|=i)G+bQFo&R{FUx$Xx-?HB9s!Mn z{EKMye@o&-T{L+~IXxf%y^^Q(^ zBL03+F!S(2NhezbdBnc?OP@qKS7sMuJ03?f{Urv!xgmm2Ew@)giMXzjyBf>(%8*X{v+^7?TW6x`g{jn^A*nz*bE%5{Ext*2&yDs0!G{Hl1@5+ zHP~b|WEm{ZRbZE4*;Tq3kNQs&^Ut>2;lkDN=rtP;yK4Wn zwU>A`(1L9i)~ubRb-MB&0f39}jyk6lSFO1#7CJs6W5AkF{=q`xkjK!M`|&c}rNvA9 zf*;H5xrpWhO;VhHEk`CT{+BBYtak{t2r~OOqrLspK1|^3iK-x0@~lOsJ4##yZu%f? zj6{^i>S0rV*H6@nHJDOL7=>Qo^NR`_-}3v9Ak{u^z%#14C3K+r-I9H*+HwR(dH3O7 zVxxOP;jcb77n5sx9^#wu>l=gKx*(<9v_bQg?K#1)t31k)7|^I>F47+3Atv}SYnyrTO>N+=PB4^ zy_Sk$G$y$>8%)USQlaWpH8@8h6}?NjK&1wHn+B#GFI^O0P6sJ$7c=yJQcZG3r{z_v zuGR@PjxP^_^Gamht1DB_+*$ZG_r`0!?hO1jIzyq-r?R$>uz2anng2E4t8d!5r!&c_Nqi4< zBp(`DW#LJtTHLeu?0Q2!<@noLE$m3Q*{#VPt$ErDv$2mGW@kUGN=|aJS2l1GxdwqA zhU`Hu=8Sz~Tm$D%YFNrICX%^km)F)EG}PA;Jkb%QqZAj1W-E5aQmw9H-8UApt~7(2 z0HMCKYnQ~LFJIfuRa+t5P-PGHfY#h5HM~n|X`cKa0hHoGqNg)`+#BT;dQronk0~$R zoIFnE8SWTc+T3`nfpr)Yc$bO}wY-lGmuGLR)rxfw-0PJLNPV5KZ-HIt&&5`#wZ|T> z+8&Kbptsg?IG8owNvM}zcD;FavJrLn;jF?>(W?@xtz&sI-sZB1TC4@~J=kT?mj;Jf zZ0X>A$C~c^hevyHGCOZ2H?sa@&R@ujL-;{R3bW`u`O*U(Z)?qF3#{0Fc+F#vGwj02 zwCSlypFZ7|bMR*3o>H{q^Y_6-q)r)D6e*AW5pcj?^Qz%~U{}~^B;T+y7`5tq6i zkvg4r`<@@?;&t7$C}! zl9+4xhG8brYC(K6wEG8D`R&~UMHRCaCek34JhRZ?9Q=#gTB(LiyDwsMJDi1{w{7Fm z$R*PxBQWTmQLKAw|Ep*}G|2a6v;arB;&?ZU0_TR@y{3vL(nVbSUDd*_>j-kw5DE0m z&a&HQ@F9al2L&kxLXBs#|MVrS`-(>wp-jW1rEe+?+NZn$#LlWX#YZcKJT3ZrNudwP z$%O8=L6eC&M^HA{>aPawguqGTfG-cw_a@3=zTkG>;JTzKE1g;j%1vji&ro{q0vGf9)g9C0f+qmx zg#^Y@c}83}-^ay{&eYcoaGfZ{DP)7ZM)>vbx|jM)(sG@@s`&QjFpo6(18(z@xG4e z*M9&o4eln|^mRcqxVnVE7aD%X2gb|<@kAt=fu$+YI_7E!W5VOaw%?~c|b$?irIr>^_!!1bred~7)%pXp6OWA-%e=*ITL8|B{{d3z)i;idSV z)q!SELQ~4+*f*CDmvN=JWm`+}iTR#hlcD&uK;dq(2IlYv_-h(eJUA!7Q!)8{h@^hH zPLzD19WB831d{o<@_H8TI(A9QEesh$5!`7AI92tFHrmUECqyZqgzhLnA#zInv?#A!F zUW5X$!kN2deS>W_!29&H?5%bGCjgR1wnf{Y2Q50Ao7uot@$DwUWxoMev#D1);}Kw) z^)>eu7iYvn4aA6N=ifPHkad)++#Y$KTvZfLEV^zbs*l{zR3XD)9#5=OZ?&MNQJ; z*#^spHfa$b{0Z01MWh7ND$BVakEBSw2lh@F2tADFewdwgMoJu-Q1mkg6!$;`0b{Ia zWX;MpT+fyN`OX*Gtw&xMEtKZ*T)AaDvA=0wzi!P~e|Yi?kC0DyNlp*$o#<^8s-4Zs zdA4fxwex1O5`dxD7m}g$YR&SFakF*@PPe9y^OIy z2EoT7*CtlObJo3kbV5ym#R2xIryV}{!2(VhKTxIqa71=^^U1MK~Mu9w|iy9+ZRwA0hm<38%=6WlC1>Sz6y0RpSG2 zmI_p6jn11pmwrbyG*g;GJJRChX2gKH$4wf1InmFc`)_rw&KsEVc@wp-5bD1>T_5yl zeEl~T49(=YxX4lTYDP6pjeL8*d(@>DAP}4}(-(k98$nL7l_+IlS)ZdRY4S&=mx{0B zTU2^>Q?&7a1rdO$3F=@D#=GAaTH1GxF&g)7{3ep>2{Q?Av~_^mck~f&nSMSn$E>2- zDKhD|(%07YhtInVT8p76GUl%kOq9;~L2kS$Ee(hk+N*EP)J9q&G=lgUa(S&OGx%pAt#{3> zMn&cMR10WrO2a~Zml22Xu~|ly6zBD3OR?);A=7G{EKM{eMkW1IRT4TL?V~tFVauXA?at_)d@?a z$e7}?P8l4^y95<*JFyGl=xXD#{v9oG%!N>{Qt1EYavo(YZ9+eO$iSW7RzNzGok;oX;=r8Z@2zfeG0VaIfRweWbNF(_$TVX=)&} zeC7|J$-Gv6?#g5wNw%oEiBbmSa0m?~`uT3Uso*58 z%>>3`SM8F~&Sd+0P>;SVGMreRY}WqwQMp1&@^|40?{tX2CfR1^RVk!xDH>zhYR>|5 zgFwCk-d}@Q572s2WhpO>R#`^ca$FG|i7dp%tqn}MLe}Wyho|+Yl{iVP6@tt+qB56s z?=89oWRfWG_$2kh`r>RQ=rKm+bTX2H`_-38)OD5DbqkKI#Z&^AcJLDAbJjlE8leOc zFHWj92nAn;MMw+o-jqhxjBjqg$0b-VWd29c_=3(rG(*NwwDm(B%qECvYN)P-fBOCM zV6}^F4E({Z#KrY+zUoP}ixJ;+hw-pw3|qL?uU)MzE#3t@4E~Oz;YhiLofivC*H6Jf z`_eM`AyyO6So$rEx1IZshu{L%6@?yV!>F_v;gBBNso?OfNa6Vl^r9Ml(3e%6imn(= z{wmK^e_07J^R?~W%qa2|V>6Sg@vhiS8S`c9m$ zE~*Z>H~!}yt~yX0I~NrLYs8l_PA?ZSwwvpVd$1Ahq)kPr*G)Y`u%8Cv+vf(k*6ZtN+s@%fFrJ4gFr+RZn>uB!dK~M@PP10V|KjdNuccd(b;k zE3gK=z+;~bxc&rUj}9y)z@LN{V#@iNH%Z^i0++S12wOd4RW!eBgi;%=O5VxN^?)l) zPg7HK-+QmS{pjsA)O32Ccf_`>$$tdKi88@S@-i8UjVpNL8!(d`Bgga=6cl{KZFxs~@dDMrl03 z_re?n5?GAyS$~Y5#A`v0FajY%qA#WDe`D@*Kj~&Hc{-gH{e(pP#RH1_B+LX)-#vDJ zN6Y?!adWe`8JG8Nc9ST`Fadd_jCY}!t#S(TUZo(C(YIih-nxZDLuLJv=l^^zut zT{9snC_-x6j&t&gyw~hTnZH~wXzyTi`(*SB2%7{bVkl8n!B-Ah5dsIPW4rfl;{6vi zj_m-DYyDC$47)()Dp@f@=HL`HkaYA0;Kn}xb$D<<{D_Sf)u8Ld^vw0wY&hp zEy&Sf$^Nx3Tx36=Qm}cbPmi*F5Wm+dqe5v*T`}@t`(0iB_yFTJXS+>79=_1O;(#7N z3TPl%0ql=(KXw|h4y$FhS^}Cn+pAZ#bkn7>zi$$m_n(H_f~4HM5r5v6HL$lfTOJ+U zhI`o6j4w3SsGi|6UlP5>ao1|h8_e07(bR5V=0^NS;E`B|!fXJ6HLQ}q1QHsrJPF$M zGnGdw%ONi2*s_6rkL*9A1Btuixj>i-pkNrQO1Hd>J!}lNVQkyxT>ctIr9$>pmb%iG z&j=j99JD*pz^_l`6?`#KYcd(hoZxMhD=IQ5A`)nO8k`pc>f33 z-;?{%w+N@+wMtS~(?)6PTjgCWWcqLO`m<11f03P=md0J19<#l{B?qu=lEP!PFCodS zzDQHpi63-7N+l(t4VFpPfFEi-(x?8*X93m55-QscT0ca>)#A8oCFT7p5_&mfZ zEMgtCXf9ZwnF4$Dk2N~Cz<2JadZy&C6?c%*(U8Pg4xgdA!AE0BWS~rY6 z)r-kg=-7Ain0~G6xlfFO8lDRN@sYW-Fk!#DsQ9PEfD_1bFIE0ljdGwh~(eNtJpl_P=YPNY@~j+gJTC~JyEUzC7AiJcgQ-g+6eb9!^W zWF9u*X-AD_3rJmx@ZOisos-=zZ4QkV7q%99--c7SQxA(S?99-g4ROxCe|yq%Ds+mV zK&I!iIJwWGB`Tj9Y?2#8LM@Eff>z|##X!`V#TR$3qLW<7ayk^(4e8<9tpIO}2OF}WP1vf{_P?$U^z@YZja zq)uo5WZ#&(_OlBYG^>K=`=&`Xlk>5TOE-M2Fq4N~Wr+=qBQl?x!4xy-#NO=B?&lxF zJ$R;DKmnTf5;Gdhv8{thX=2h+I;K)pz8sCy)Ssg7o*+>ZQ~&D;iai;_}4+ z`7{K$mtKxXKD%H@aBKBAINg~=1RpSK_G$uExg045uBuOMEwZp|)3>|V|C{T|B%C?V zpGbD)2%{g+%w25b$R4<;&8jKnHmHxc``R6sY5dusl-+#0|Gt-_0tYmp;o2L?tX2k! zK&lk^DtZT>*?~a$Q(K33w;|M*-uYfP86@JkpAZ&iqI2c45O!Z{bQZkpugM>*`B6@~ zjc<4;^}gN4hN-EwQT&X)=Z1p)B5dMEe|aU%Mf;75pO685&5xD}j<3SH&TWIQ0^3JV zlkEQ^Xe)=$l_1^ypIv*S6lRuc3RndU@^o{;gsfsDU+ZCP*z9r2-QMT&b%2z95x%Eg zahPr#cGt@H{Yv0Ob-LxG$wh_oqvG#IUR#9a7;IYb+^{9IBc-1Bk ze?yhRp703i-u>)?1{j%n@eV-t_d#HlMowVRfo5Hpg2mB4zvlsWkMeS_Vb@=dxW_Z7 zl4UKxwjU=ZzT7Ut+RptxDI-~-qwhLg>qpm`E8(ax_IA?T(agiMvEI68W47B4y>o9m z3NxQpEE2TCn40}PaCF0W8jd&UK;D&=$?g9LnELBT2DHl1waQX*cot=WLE1Xgv0G;X zvCp6H^^&uGP8?VfyCf7@T^(J}?!}L;{TUG*PW_pQmCn{JlL>E`E8T|7s(#Oq>|o^& z&dwJSInfqQ_|pd)oX$v-*9#p2YTUY8Wy>FP_&t)Q=%DE2tOYWbj#Zm`!A8J=FGxGm z|NQar%}*vKNu;cNbAP4#@9%i|rW;>U(|DHV=+P)&+)FP!r}=Eqz(pqQ%LV+gml@tz zH}OyRnEKl`syqanW75u}(=Ljv1)9^byZo?)JlofCx4 z<3VT&!PDvAk;eWwMZ2{7OtQ=c6Lej*C)_s$EAwN_bB+`qaFk2$*cnb%CgBHRA$zg) z9Sq>SPdo4lerpsKnsMH?;LU7wcA?$u|6{=8*m-8p$8Xhed{sM*6OQF!luq8YvzdnW z%c;ORSk@(b2+^Eu{|DaCOiU?HQZSsq6m zLY}v}8e?#Nh1qM`A4qt71vreVSxzdy>F9rm9B&XEW z%cq+9vqy2`GcumWW_d;CB>K-234OmU3nI85XS91;f5O9$gD)eBuvoWpi_W~r7u;H$ zfm$g)Qxp^wpl>7Io|bErRKT9e$u&!B+RwYmGG}}Y4EA-D(RF7Y*u*(ucocM^%5nS!w zPEISePhJuV%7}X7XTw$Gpg#DJOgRKbJ-$;Zo&k-)AWSj2}u9{q)s{Gp-}(-tmRC4 zi&QsmkZ=FE^as&B%US>Xn=9u0#Xp5|@w)a-&l6uA&et?dJYQoHAKPUozaU^6_^HQZ z@rR3n?^VSdtYUs6xYwnNL(=TYoIE2I!mHx%nyz#eYZxARR3*FjT2S04$H;iWvW@qe zp%@~dX;}5Gn4^!Xdvwmd(K-y)Jr-Ao>-HJ>Q&4TLf%$~0gI}5F$gYGce&1z=oiTZ@ zjSe>s7~5(cpEen8!>$<{jn-XUeiw=n02ccA7nnw_jyafXrnVJRqoWgm+B)g2tq^a^ zco<7OxL9z?55WG^!DV}Oa!(w0NU7QRzQExdx1ji7LCuzG&@+vpAh!Od!LMfM^3#Z@ zhQM(+|Dbfv^3}b#_J!5AI<-Bc8RSf;+}W*Za}VpytDsUp`pJz_{!*Tfn5v=ay~$soFew; zTw0h%@QHgYKyB=ohL1dj9v^Dw|07VVgK6Ihw&UObJ1z5X9xKOOu6%RIwj~NT`{dgG zQv9Bq=b5}BYa<0T^I3+AQMa%62et|nJ+ zYQ2uS*!^QI#@9D}akpf|Tgf3|S6|VWBOTr00LoKVO#0cIVNQz(Wq7hq=Y3;wNyQ>= z0}}!XAdWA#`@56*L>Wu^;zPJTdx*YzgW>*Yp#PRd_O!Z&+Dis%K}E<7(iZ5ENn2Ze zY5de6`{S?9H#uVTo{>#zqT*1d2VWu)A(VwDWi~C3;IL9XHhFs6200U7_g0Ez(IcdJ zx<_O(x(j}dc2If!o8ZhAwJpQ4BGG{6my`@gvKf9{+Sl7)u` z)esnti~G`r-V5aWUVRjAOGj>kFRv|VQuiAbk@QMGRgB?LQ~n6*JTWu>@Doos_g=e* zMXp$>7~NzjgtxuuyL(=6EZxt*20m?~$6E3g=t6-`u*4u=nLeVX{j>E_v80ImX#>*U zE7ZZb?G?N95Z*vE1RMi0U`N+_mm;gxyPE3rum>*lp6f@$?6#_)YOhm^@ymTAaxLjfu-vcCF)BFM_jr@(kEJ765M7V8}KJr}-Z z0)!Mw%j}Sg5uw0i4!ZD8P{Y_1R`<{Ll$*t^OO7hmN4|Yf3rMz~f;4R?fo&$)MvQ;n z=w->p-}W)-cu~v7U#h4kV6et|fila^-4|bQcT;s-Xr0f^aQqqWSH7-;miFRIi$O

  • a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:l.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n(" - ` -}) -export class IFrameComponent { - public safeUrl: SafeResourceUrl; - @Input() url ; - @Input() width = '100%'; - @Input() height = '300'; - constructor(private sanitizer: DomSanitizer) { - } - ngOnInit() { - this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.url); - console.info("URL:" + this.safeUrl); - } -} diff --git a/portal-4cli/src/app/utils/iframe.module.ts b/portal-4cli/src/app/utils/iframe.module.ts deleted file mode 100644 index 702e5ab5..00000000 --- a/portal-4cli/src/app/utils/iframe.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {IFrameComponent} from './iframe.component'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule - ], - declarations: [ - IFrameComponent - ], - exports: [ - IFrameComponent - ] -}) -export class IFrameModule { } diff --git a/portal-4cli/src/app/utils/metaTags/openaireMetaTags.class.ts b/portal-4cli/src/app/utils/metaTags/openaireMetaTags.class.ts deleted file mode 100644 index 3b78aa42..00000000 --- a/portal-4cli/src/app/utils/metaTags/openaireMetaTags.class.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {Meta} from '../../../angular2-meta'; - -export class OpenaireMetaTags{ - - constructor (private _meta: Meta ) { - } - - updateDescription(description:string){ - this._meta.updateMeta("description", description); - this._meta.updateProperty("og:description", description); - } - updateTitle(title:string){ - var _prefix ="OpenAIRE | "; - var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title); - this._meta.setTitle(_title ); - this._meta.updateProperty("og:title",_title); - } - updateUrl(url:string){ - this._meta.updateProperty("og:url", url); - } -} diff --git a/portal-4cli/src/app/utils/modal/alert.ts b/portal-4cli/src/app/utils/modal/alert.ts deleted file mode 100644 index c7155cd8..00000000 --- a/portal-4cli/src/app/utils/modal/alert.ts +++ /dev/null @@ -1,111 +0,0 @@ -import {Component, ViewEncapsulation, ComponentRef, ElementRef, Input, EventEmitter, Output} from '@angular/core'; -// import { DynamicComponentLoader} from '@angular/core'; - -import {Open} from './open.component'; - -@Component({ - selector: 'modal-alert', - template: ` - - - - `, - encapsulation: ViewEncapsulation.None, -}) -/** - * API to an open alert window. - */ -export class AlertModal{ - /** - * Caption for the title. - */ - public alertTitle:string; - /** - * Describes if the alert contains Ok Button. - * The default Ok button will close the alert and emit the callback. - * Defaults to true. - */ - public okButton:boolean = true; - /** - * Caption for the OK button. - * Default: Ok - */ - public okButtonText:string= 'Ok'; - /** - * Describes if the alert contains cancel Button. - * The default Cancelbutton will close the alert. - * Defaults to true. - */ - public cancelButton:boolean = true; - /** - * Caption for the Cancel button. - * Default: Cancel - */ - public cancelButtonText:string = 'Cancel'; - /** - * if the alertMessage is true it will show the contentString inside alert body. - */ - public alertMessage:boolean = true; - /** - * Some message/content can be set in message which will be shown in alert body. - */ - public message:string; - /** - * if the value is true alert footer will be visible or else it will be hidden. - */ - public alertFooter:boolean= true; - /** - * shows alert header if the value is true. - */ - public alertHeader:boolean = true; - /** - * if the value is true alert will be visible or else it will be hidden. - */ - public isOpen:boolean=false; - /** - * Emitted when a ok button was clicked - * or when Ok method is called. - */ - @Output() public alertOutput:EventEmitter = new EventEmitter(); - constructor( public _elementRef: ElementRef){} - /** - * Opens a alert window creating backdrop. - */ - open(){ - this.isOpen= true; - } - /** - * ok method closes the modal and emits modalOutput. - */ - ok(){ - this.isOpen = false; - this.alertOutput.emit(true); - } - /** - * cancel method closes the moda. - */ - cancel(){ - this.isOpen = false; - } -} diff --git a/portal-4cli/src/app/utils/modal/alertModal.module.ts b/portal-4cli/src/app/utils/modal/alertModal.module.ts deleted file mode 100644 index d39e168d..00000000 --- a/portal-4cli/src/app/utils/modal/alertModal.module.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {AlertModal} from './alert'; -import {ModalModule} from './modal.module'; - -@NgModule({ - imports: [ CommonModule, FormsModule, ModalModule ], - declarations: [ - AlertModal - ], - exports: [ - AlertModal - ] -}) -export class AlertModalModule { } diff --git a/portal-4cli/src/app/utils/modal/loading.component.ts b/portal-4cli/src/app/utils/modal/loading.component.ts deleted file mode 100644 index 55a5501e..00000000 --- a/portal-4cli/src/app/utils/modal/loading.component.ts +++ /dev/null @@ -1,56 +0,0 @@ -import {Component, ViewEncapsulation, ComponentRef, ElementRef, Input, EventEmitter, Output} from '@angular/core'; - -@Component({ - selector: 'modal-loading', - template: ` - -
    -
    - - -
    -
    -

    {{message}}

    -
    -
    -
    - -
    - -
    - - `, - encapsulation: ViewEncapsulation.None, -}) -/** - * API to an open alert window. - */ -export class ModalLoading{ - -@Input() public message:string ="Loading"; - - /** - * if the value is true alert will be visible or else it will be hidden. - */ - public isOpen:boolean=false; - /** - * Emitted when a ok button was clicked - * or when Ok method is called. - */ - @Output() public alertOutput:EventEmitter = new EventEmitter(); - constructor( public _elementRef: ElementRef){} - /** - * Opens a alert window creating backdrop. - */ - open(){ - this.isOpen= true; - } - - close(){ - this.isOpen = false; - } -} diff --git a/portal-4cli/src/app/utils/modal/loadingModal.module.ts b/portal-4cli/src/app/utils/modal/loadingModal.module.ts deleted file mode 100644 index 6edf5c4a..00000000 --- a/portal-4cli/src/app/utils/modal/loadingModal.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - - import {ModalLoading} from './loading.component'; -import {ModalModule} from './modal.module'; - -//helpers - -@NgModule({ - imports: [ CommonModule, FormsModule,ModalModule ], - declarations: [ - ModalLoading - ], - exports: [ - ModalLoading - ] -}) -export class LoadingModalModule { } diff --git a/portal-4cli/src/app/utils/modal/modal.module.ts b/portal-4cli/src/app/utils/modal/modal.module.ts deleted file mode 100644 index fd48478c..00000000 --- a/portal-4cli/src/app/utils/modal/modal.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* common components of modal components */ -import { NgModule } from '@angular/core'; -import {Open} from './open.component'; -@NgModule({ - imports: [ ], - declarations: [ - Open - ], - exports: [ - Open - ] -}) -export class ModalModule { } diff --git a/portal-4cli/src/app/utils/modal/open.component.ts b/portal-4cli/src/app/utils/modal/open.component.ts deleted file mode 100644 index fb9f011e..00000000 --- a/portal-4cli/src/app/utils/modal/open.component.ts +++ /dev/null @@ -1,57 +0,0 @@ -import {Directive, Input, HostBinding} from '@angular/core'; - -// todo: add animate -// todo: add init and on change -@Directive({selector: '[open]'}) -export class Open { - @HostBinding('style.display') - public display:string; - @HostBinding('class.in') - @HostBinding('attr.aria-expanded') - public isExpanded:boolean = true; - - @Input() - public set open(value:boolean) { - this.isExpanded = value; - this.toggle(); - } - - public get open():boolean { - return this.isExpanded; - } - - constructor() { - } - init() { - this.isExpanded = false; - this.display = 'none'; - } - toggle() { - if (this.isExpanded) { - this.hide(); - } else { - this.show(); - } - } - - hide() { - this.isExpanded = false; - this.display = 'none'; - if (typeof document !== 'undefined') { - let backDrop = document.getElementsByClassName("modal-backdrop"); - if(backDrop.length>0){ - document.body.removeChild(backDrop[0]); - } - } - } - - show() { - if (typeof document !== 'undefined') { - // let backDrop = document.createElement('div'); - // backDrop.className="modal-backdrop fade in"; - // document.body.appendChild(backDrop); - } - this.isExpanded = true; - this.display = 'block'; - } -} diff --git a/portal-4cli/src/app/utils/modal/selectModal.component.ts b/portal-4cli/src/app/utils/modal/selectModal.component.ts deleted file mode 100644 index 78330b76..00000000 --- a/portal-4cli/src/app/utils/modal/selectModal.component.ts +++ /dev/null @@ -1,79 +0,0 @@ -import {Component, ViewEncapsulation, ComponentRef, ElementRef, Input, EventEmitter, Output} from '@angular/core'; - -@Component({ - selector: 'modal-select', - template: ` -
    -
    - -
    - - `, - encapsulation: ViewEncapsulation.None, -}) -/** - * API to an open alert window. - */ -export class ModalSelect{ - -@Input() public message:string ="Loading"; -@Input() public options:string[] = []; - -public selected: string; - - /** - * if the value is true alert will be visible or else it will be hidden. - */ - public isOpen:boolean=false; - /** - * Emitted when a ok button was clicked - * or when Ok method is called. - */ - @Output() public alertOutput:EventEmitter = new EventEmitter(); - constructor( public _elementRef: ElementRef){} - /** - * Opens a alert window creating backdrop. - */ - open(){ - this.isOpen= true; - } - - close(){ - this.isOpen = false; - if(!this.selected) { - this.selected = this.options[0]; - } - this.alertOutput.emit(this.selected); - } - -} diff --git a/portal-4cli/src/app/utils/modal/selectModal.module.ts b/portal-4cli/src/app/utils/modal/selectModal.module.ts deleted file mode 100644 index 971a7dd7..00000000 --- a/portal-4cli/src/app/utils/modal/selectModal.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - - import {ModalSelect} from './selectModal.component'; -import {ModalModule} from './modal.module'; - -//helpers - -@NgModule({ - imports: [ CommonModule, FormsModule,ModalModule ], - declarations: [ - ModalSelect - ], - exports: [ - ModalSelect - ] -}) -export class SelectModalModule { } diff --git a/portal-4cli/src/app/utils/my-date-picker/directives/my-date-picker.focus.directive.ts b/portal-4cli/src/app/utils/my-date-picker/directives/my-date-picker.focus.directive.ts deleted file mode 100644 index 5508ea6c..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/directives/my-date-picker.focus.directive.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Directive, ElementRef, Renderer, AfterViewInit, Input } from "@angular/core"; - -@Directive({ - selector: "[mydpfocus]" -}) - -export class FocusDirective implements AfterViewInit { - @Input("mydpfocus") value: string; - - constructor(private el: ElementRef, private renderer: Renderer) {} - - // Focus to element: if value 0 = don't set focus, 1 = set only focus, 2 = set focus and set cursor position - ngAfterViewInit() { - if (this.value === "0") { - return; - } - - this.renderer.invokeElementMethod(this.el.nativeElement, "focus", []); - - // Set cursor position at the end of text if input element - if (this.value === "2") { - let len = this.el.nativeElement.value.length; - this.el.nativeElement.setSelectionRange(len, len); - } - } -} \ No newline at end of file diff --git a/portal-4cli/src/app/utils/my-date-picker/directives/my-date-picker.input.auto.fill.directive.ts b/portal-4cli/src/app/utils/my-date-picker/directives/my-date-picker.input.auto.fill.directive.ts deleted file mode 100644 index ef1a1501..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/directives/my-date-picker.input.auto.fill.directive.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { Directive, ElementRef, Renderer, Input, HostListener } from "@angular/core"; -import { IMyInputAutoFill } from "../interfaces/my-input-auto-fill.interface"; - -@Directive({ - selector: "[myinputautofill]" -}) - -export class InputAutoFillDirective { - @Input("myinputautofill") opts: IMyInputAutoFill; - - constructor(private el: ElementRef, private rndr: Renderer) {} - - @HostListener("keyup", ["$event"]) onKeyUp(evt: KeyboardEvent) { - if (!this.opts.enabled || evt.keyCode === 8 || evt.keyCode === 46) { - return; - } - - let val: string = this.getInputValue(); - let ews: boolean = this.endsWith(val, this.opts.separator); - let parts: Array = val.split(this.opts.separator); - let idx: number = parts.length - 1; - - if (val.indexOf(this.opts.separator + this.opts.separator) !== -1) { - return; - } - - if (!ews && (val.length === this.getPartLength(0) || val.length === this.getPartLength(0) + this.getPartLength(1) + this.opts.separator.length)) { - this.setInputValue(val + this.opts.separator); - } - else if (ews && parts[idx - 1].length < this.getPartLength(idx - 1) && this.isNumber(parts[idx - 1]) && (this.isDay(idx - 1) || this.isMonth(idx - 1))) { - this.setInputValue(this.insertPos(val, val.length - 2, "0")); - } - else if (parts[idx].length < this.getPartLength(idx) && this.isNumber(parts[idx]) && (Number(parts[idx]) > 3 && this.isDay(idx) || Number(parts[idx]) > 1 && this.isMonth(idx))) { - this.setInputValue(this.insertPos(val, val.length - 1, "0") + (idx < 2 ? this.opts.separator : "")); - } - } - - private endsWith(val: string, suffix: string): boolean { - return val.indexOf(suffix, val.length - suffix.length) !== -1; - } - - private insertPos(str: string, idx: number, val: string): string { - return str.substr(0, idx) + val + str.substr(idx); - } - - private getPartLength(idx: number): number { - return this.opts.formatParts[idx].length; - } - - private isNumber(val: string): boolean { - return val.match(/[1-9]/) !== null; - } - - private isDay(idx: number): boolean { - return this.opts.formatParts[idx].indexOf("d") !== -1; - } - - private isMonth(idx: number): boolean { - return this.opts.formatParts[idx].indexOf("m") !== -1 && this.opts.formatParts[idx].length === 2; - } - - private getInputValue(): string { - return this.el.nativeElement.value; - } - - private setInputValue(val: string): void { - this.rndr.setElementProperty(this.el.nativeElement, "value", val); - } -} \ No newline at end of file diff --git a/portal-4cli/src/app/utils/my-date-picker/index.ts b/portal-4cli/src/app/utils/my-date-picker/index.ts deleted file mode 100644 index 55613d2b..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from "./services/my-date-picker.locale.service"; -export * from "./services/my-date-picker.util.service"; -export * from "./directives/my-date-picker.focus.directive"; -export * from "./directives/my-date-picker.input.auto.fill.directive"; -export * from "./my-date-picker.component"; -export * from "./my-date-picker.module"; -export * from "./interfaces/index"; \ No newline at end of file diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/index.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/index.ts deleted file mode 100644 index ab34b252..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -export * from "./my-date.interface"; -export * from "./my-date-range.interface"; -export * from "./my-day-labels.interface"; -export * from "./my-month-labels.interface"; -export * from "./my-month.interface"; -export * from "./my-calendar-day.interface"; -export * from "./my-week.interface"; -export * from "./my-options.interface"; -export * from "./my-locale.interface"; -export * from "./my-date-model.interface"; -export * from "./my-input-field-changed.interface"; -export * from "./my-input-focus-blur.interface"; -export * from "./my-weekday.interface"; -export * from "./my-calendar-view-changed.interface"; -export * from "./my-input-auto-fill.interface"; \ No newline at end of file diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-calendar-day.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-calendar-day.interface.ts deleted file mode 100644 index d554243a..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-calendar-day.interface.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IMyDate } from "./my-date.interface"; - -export interface IMyCalendarDay { - dateObj: IMyDate; - cmo: number; - currDay: boolean; - dayNbr: number; - disabled: boolean; -} \ No newline at end of file diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-calendar-view-changed.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-calendar-view-changed.interface.ts deleted file mode 100644 index 9b9baa5e..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-calendar-view-changed.interface.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IMyWeekday } from "./my-weekday.interface"; - -export interface IMyCalendarViewChanged { - year: number; - month: number; - first: IMyWeekday; - last: IMyWeekday; -} diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-date-model.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-date-model.interface.ts deleted file mode 100644 index 35aa7535..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-date-model.interface.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IMyDate } from "./my-date.interface"; - -export interface IMyDateModel { - date: IMyDate; - jsdate: Date; - formatted: string; - epoc: number; -} diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-date-range.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-date-range.interface.ts deleted file mode 100644 index e24b319b..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-date-range.interface.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { IMyDate } from "./my-date.interface"; - -export interface IMyDateRange { - begin: IMyDate; - end: IMyDate; -} diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-date.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-date.interface.ts deleted file mode 100644 index 99f00796..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-date.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface IMyDate { - year: number; - month: number; - day: number; -} diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-day-labels.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-day-labels.interface.ts deleted file mode 100644 index f2fcfa24..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-day-labels.interface.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IMyDayLabels { - [day: string]: string; -} \ No newline at end of file diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-input-auto-fill.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-input-auto-fill.interface.ts deleted file mode 100644 index 695afa92..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-input-auto-fill.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface IMyInputAutoFill { - separator: string; - formatParts: Array; - enabled: boolean; -} diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-input-field-changed.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-input-field-changed.interface.ts deleted file mode 100644 index c93530b6..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-input-field-changed.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface IMyInputFieldChanged { - value: string; - dateFormat: string; - valid: boolean; -} diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-input-focus-blur.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-input-focus-blur.interface.ts deleted file mode 100644 index 99678cbb..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-input-focus-blur.interface.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface IMyInputFocusBlur { - reason: number; - value: string; -} diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-locale.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-locale.interface.ts deleted file mode 100644 index 25d268ba..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-locale.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { IMyOptions } from "./my-options.interface"; - -export interface IMyLocales { - [lang: string]: IMyOptions; -} \ No newline at end of file diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-month-labels.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-month-labels.interface.ts deleted file mode 100644 index 0eede49b..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-month-labels.interface.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IMyMonthLabels { - [month: number]: string; -} \ No newline at end of file diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-month.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-month.interface.ts deleted file mode 100644 index 846a23eb..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-month.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface IMyMonth { - monthTxt: string; - monthNbr: number; - year: number; -} \ No newline at end of file diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-options.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-options.interface.ts deleted file mode 100644 index 89c26bea..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-options.interface.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { IMyDayLabels } from "./my-day-labels.interface"; -import { IMyMonthLabels } from "./my-month-labels.interface"; -import { IMyDate } from "./my-date.interface"; -import { IMyDateRange } from "./my-date-range.interface"; - -export interface IMyOptions { - dayLabels?: IMyDayLabels; - monthLabels?: IMyMonthLabels; - dateFormat?: string; - showTodayBtn?: boolean; - todayBtnTxt?: string; - firstDayOfWeek?: string; - sunHighlight?: boolean; - markCurrentDay?: boolean; - disableUntil?: IMyDate; - disableSince?: IMyDate; - disableDays?: Array; - enableDays?: Array; - disableDateRange?: IMyDateRange; - disableWeekends?: boolean; - showWeekNumbers?: boolean; - height?: string; - width?: string; - selectionTxtFontSize?: string; - inline?: boolean; - showClearDateBtn?: boolean; - alignSelectorRight?: boolean; - openSelectorTopOfInput?: boolean; - indicateInvalidDate?: boolean; - editableDateField?: boolean; - editableMonthAndYear?: boolean; - disableHeaderButtons?: boolean; - minYear?: number; - maxYear?: number; - componentDisabled?: boolean; - inputValueRequired?: boolean; - showSelectorArrow?: boolean; - showInputField?: boolean; - openSelectorOnInputClick?: boolean; - inputAutoFill?: boolean; - ariaLabelInputField?: string; - ariaLabelClearDate?: string; - ariaLabelOpenCalendar?: string; - ariaLabelPrevMonth?: string; - ariaLabelNextMonth?: string; - ariaLabelPrevYear?: string; - ariaLabelNextYear?: string; -} diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-week.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-week.interface.ts deleted file mode 100644 index be7bca16..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-week.interface.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { IMyCalendarDay } from "./my-calendar-day.interface"; - -export interface IMyWeek { - week: Array; - weekNbr: number; -} \ No newline at end of file diff --git a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-weekday.interface.ts b/portal-4cli/src/app/utils/my-date-picker/interfaces/my-weekday.interface.ts deleted file mode 100644 index da1df557..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/interfaces/my-weekday.interface.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface IMyWeekday { - number: number; - weekday: string; -} diff --git a/portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.css b/portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.css deleted file mode 100644 index 3c21416d..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.css +++ /dev/null @@ -1,461 +0,0 @@ -.mydp { - min-width: 30px; - border-radius: 2px; - line-height: 1.1; - display: inline-block; - position: relative; -} - -.mydp * { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - font-family: Arial, Helvetica, sans-serif; - padding: 0; - margin: 0; -} - -.mydp .selector { - margin-top: 2px; - margin-left: -1px; - position: absolute; - width: 252px; - padding: 0; - border: 1px solid #CCC; - border-radius: 2px; - z-index: 100; - animation: selectorfadein 0.1s; -} - -.mydp .selector:focus { - border: 1px solid #ADD8E6; - outline: none; -} - -@keyframes selectorfadein { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -.mydp .selectorarrow { - background: #FAFAFA; - margin-top: 12px; - padding: 0; -} - -.mydp .selectorarrow:after, -.mydp .selectorarrow:before { - bottom: 100%; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; -} - -.mydp .selectorarrow:after { - border-color: rgba(250, 250, 250, 0); - border-bottom-color: #FAFAFA; - border-width: 10px; - margin-left: -10px; -} - -.mydp .selectorarrow:before { - border-color: rgba(204, 204, 204, 0); - border-bottom-color: #CCC; - border-width: 11px; - margin-left: -11px; -} - -.mydp .selectorarrow:focus:before { - border-bottom-color: #ADD8E6; -} - -.mydp .selectorarrowleft:after, -.mydp .selectorarrowleft:before { - left: 24px; -} - -.mydp .selectorarrowright:after, -.mydp .selectorarrowright:before { - left: 224px; -} - -.mydp .alignselectorright { - right: -1px; -} - -.mydp .selectiongroup { - position: relative; - display: table; - border: none; - border-spacing: 0; - background-color: #FFF; -} - -.mydp .selection { - outline: none; - background-color: #FFF; - display: table-cell; - position: absolute; - width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - text-align: center; -} - -.mydp .invaliddate, -.mydp .invalidmonth, -.mydp .invalidyear { - background-color: #F1DEDE; -} - -.mydp ::-ms-clear { - display: none; -} - -.mydp .selbtngroup { - position: relative; - vertical-align: middle; - white-space: nowrap; - width: 1%; - display: table-cell; - font-size: 0; -} - -.mydp .btnpicker, -.mydp .btnclear { - height: 100%; - width: 30px; - border: none; - padding: 0; - outline: 0; - font: inherit; - -moz-user-select: none; -} - -.mydp .btnleftborder { - border-left: 1px solid #CCC; -} - -.mydp .btnpickerenabled, -.mydp .btnclearenabled, -.mydp .headertodaybtnenabled, -.mydp .headerbtnenabled { - cursor: pointer; -} - -.mydp .btnpickerdisabled, -.mydp .btncleardisabled, -.mydp .headertodaybtndisabled, -.mydp .headerbtndisabled { - cursor: not-allowed; -} - -.mydp .headerbtndisabled { - opacity: 0.4; -} - -.mydp .btnpicker, -.mydp .btnclear, -.mydp .headertodaybtn { - background: #FFF; -} - -.mydp .header { - width: 100%; - height: 30px; - background-color: #FAFAFA; -} - -.mydp .header td { - vertical-align: middle; - border: none; - line-height: 0; -} - -.mydp .header td:nth-child(1) { - padding-left: 4px; -} - -.mydp .header td:nth-child(2) { - text-align: center; -} - -.mydp .header td:nth-child(3) { - padding-right: 4px; -} - -.mydp .caltable { - table-layout: fixed; - width: 100%; - background-color: #FFF; - font-size: 14px; -} - -.mydp .caltable, -.mydp .weekdaytitle, -.mydp .daycell { - border-collapse: collapse; - color: #003366; - line-height: 1.1; -} - -.mydp .weekdaytitle, -.mydp .daycell { - padding: 5px; - text-align: center; -} - -.mydp .weekdaytitle { - background-color: #DDD; - font-size: 12px; - font-weight: bold; - vertical-align: middle; - max-width: 36px; - overflow: hidden; - white-space: nowrap; -} - -.mydp .weekdaytitleweeknbr { - width: 20px; - border-right: 1px solid #BBB; -} - -.mydp .daycell { - cursor: pointer; - height: 30px; -} - -.mydp .daycell div { - background-color: inherit; - vertical-align: middle; -} - -.mydp .daycell div span { - vertical-align: middle; -} - -.mydp .daycellweeknbr { - font-size: 10px; - border-right: 1px solid #CCC; - cursor: default; - color: #000; -} - -.mydp .inlinedp { - position: relative; - margin-top: -1px; -} - -.mydp .prevmonth { - color: #CCC; -} - -.mydp .nextmonth { - color: #CCC; -} - -.mydp .disabled { - cursor: default !important; - color: #CCC !important; - background: #FBEFEF !important; -} - -.mydp .sunday { - color: #C30000; -} - -.mydp .sundayDim { - opacity: 0.5; -} - -.mydp .currmonth { - background-color: #F6F6F6; - font-weight: bold; -} - -.mydp .currday { - text-decoration: underline; -} - -.mydp .selectedday div { - border: 1px solid #004198; - background-color: #8EBFFF !important; - border-radius: 2px; -} - -.mydp .headerbtncell { - background-color: #FAFAFA; - display: table-cell; - vertical-align: middle; -} - -.mydp .headerbtn, -.mydp .headerlabelbtn { - background: #FAFAFA; - border: none; - height: 22px; -} - -.mydp .headerbtn { - width: 16px; -} - -.mydp .headerlabelbtn { - font-size: 14px; -} - -.mydp, -.mydp .headertodaybtn, -.mydp .monthinput, -.mydp .yearinput { - border: 1px solid #CCC; -} - -.mydp .btnpicker, -.mydp .btnclear, -.mydp .headerbtn, -.mydp .headermonthtxt, -.mydp .headeryeartxt, -.mydp .headertodaybtn, -.mydp .selection { - color: #000; -} - -.mydp .headertodaybtn { - padding: 0 4px; - border-radius: 2px; - font-size: 11px; - height: 22px; - min-width: 60px; - max-width: 70px; - overflow: hidden; - white-space: nowrap; -} - -.mydp button::-moz-focus-inner { - border: 0; -} - -.mydp .headermonthtxt, -.mydp .headeryeartxt { - text-align: center; - display: table-cell; - vertical-align: middle; - font-size: 14px; - height: 26px; - width: 40px; - max-width: 40px; - overflow: hidden; - white-space: nowrap; -} - -.mydp .btnclear:focus, -.mydp .btnpicker:focus, -.mydp .headertodaybtn:focus { - background: #ADD8E6; -} - -.mydp .headerbtn:focus, -.mydp .monthlabel:focus, -.mydp .yearlabel:focus { - color: #ADD8E6; - outline: none; -} - -.mydp .daycell:focus { - outline: 1px solid #CCC; -} - -.mydp .icon-mydpcalendar, -.mydp .icon-mydpremove { - font-size: 16px; -} - -.mydp .icon-mydpleft, -.mydp .icon-mydpright { - color: #222; - font-size: 20px; -} - -.mydp table { - display: table; - border-spacing: 0; -} - -.mydp table td { - padding: 0; -} - -.mydp table, -.mydp th, -.mydp td { - border: none; -} - -.mydp .btnpickerenabled:hover, -.mydp .btnclearenabled:hover, -.mydp .headertodaybtnenabled:hover, -.mydp .tablesingleday:hover { - background-color: #8BDAF4; -} - -.mydp .monthlabel, -.mydp .yearlabel { - cursor: pointer; -} - -.mydp .yearinput, -.mydp .monthinput { - width: 40px; - height: 22px; - text-align: center; - font-weight: bold; - outline: none; - border-radius: 2px; -} - -.mydp .headerbtnenabled:hover, -.mydp .monthlabel:hover, -.mydp .yearlabel:hover { - color: #8BDAF4; -} - -@font-face { - font-family: 'mydatepicker'; - src: url('data:application/octet-stream;base64,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') format('truetype'); - font-weight: normal; - font-style: normal; -} - -.mydp .mydpicon { - font-family: 'mydatepicker'; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.mydp .icon-mydpright:before { - content: "\e800"; -} - -.mydp .icon-mydpleft:before { - content: "\e801"; -} - -.mydp .icon-mydpcalendar:before { - content: "\e802"; -} - -.mydp .icon-mydpremove:before { - content: "\e805"; -} diff --git a/portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.html b/portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.html deleted file mode 100644 index 9b7280e0..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.html +++ /dev/null @@ -1,61 +0,0 @@ -
    -
    - -
    - - -
    -
    -
    -
    - - - - - -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    - - -
    -
    -
    -
    - - - - - - - - -
    #{{d}}
    {{w.weekNbr}} -
    - {{d.dateObj.day}} -
    -
    -
    -
    diff --git a/portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.spec.ts b/portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.spec.ts deleted file mode 100644 index 83801d58..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.spec.ts +++ /dev/null @@ -1,2209 +0,0 @@ -// // -// -// import {ComponentFixture, TestBed} from '@angular/core/testing'; -// import {By} from '@angular/platform-browser'; -// import {DebugElement} from '@angular/core'; -// import {MyDatePicker} from './my-date-picker.component'; -// import {FocusDirective} from './directives/my-date-picker.focus.directive'; -// import {InputAutoFillDirective} from './directives/my-date-picker.input.auto.fill.directive'; -// -// let comp: MyDatePicker; -// let fixture: ComponentFixture; -// let de: DebugElement; -// let el: HTMLElement; -// -// let PREVMONTH: string = '.header tr td:first-child div .headerbtncell:first-child .headerbtn'; -// let NEXTMONTH: string = '.header tr td:first-child div .headerbtncell:last-child .headerbtn'; -// let PREVYEAR: string = '.header tr td:last-child div .headerbtncell:first-child .headerbtn'; -// let NEXTYEAR: string = '.header tr td:last-child div .headerbtncell:last-child .headerbtn'; -// -// function getDateString(date:any):string { -// return date.getFullYear() + '-' + ((date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1)) + '-' + (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()); -// } -// -// function getElement(id:string):DebugElement { -// return de.query(By.css(id)); -// } -// -// function getElements(id:string):Array { -// return de.queryAll(By.css(id)); -// } -// -// describe('MyDatePicker', () => { -// beforeEach(() => { -// TestBed.configureTestingModule({ -// declarations: [MyDatePicker, FocusDirective, InputAutoFillDirective], -// }); -// -// fixture = TestBed.createComponent(MyDatePicker); -// -// comp = fixture.componentInstance; -// -// de = fixture.debugElement.query(By.css('.mydp')); -// el = de.nativeElement; -// }); -// -// it('set valid date', () => { -// comp.selectionDayTxt = '2016-08-22'; -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection.nativeElement.value).toContain('2016-08-22'); -// }); -// -// it('open/close selector', () => { -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// let selector = getElement('.selector'); -// expect(selector).toBe(null); -// -// btnpicker.nativeElement.click(); -// fixture.detectChanges(); -// selector = getElement('.selector'); -// expect(selector).not.toBe(null); -// -// btnpicker.nativeElement.click(); -// fixture.detectChanges(); -// selector = getElement('.selector'); -// expect(selector).toBe(null); -// }); -// -// it('select current day from the selector and clear', () => { -// let date = new Date(); -// comp.selectedMonth = {monthTxt: '', monthNbr: date.getMonth() + 1, year: date.getFullYear()}; -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let currday = getElement('.currday'); -// expect(currday).not.toBe(null); -// -// currday.nativeElement.click(); -// -// let dateStr = getDateString(date); -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection.nativeElement.value).toContain(dateStr); -// -// fixture.detectChanges(); -// let btnclear = getElement('.btnclear'); -// btnclear.nativeElement.click(); -// expect(selection.nativeElement.value).toContain(''); -// }); -// -// it('select/unselect current day from the selector', () => { -// let date = new Date(); -// comp.selectedMonth = {monthTxt: '', monthNbr: date.getMonth() + 1, year: date.getFullYear()}; -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let currday = getElement('.currday'); -// expect(currday).not.toBe(null); -// -// currday.nativeElement.click(); -// -// let dateStr = getDateString(date); -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection.nativeElement.value).toContain(dateStr); -// -// fixture.detectChanges(); -// btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// -// fixture.detectChanges(); -// let selectedday = getElement('.selectedday'); -// expect(selectedday).not.toBe(null); -// -// fixture.detectChanges(); -// currday = getElement('.currday'); -// expect(currday).not.toBe(null); -// currday.nativeElement.click(); -// -// fixture.detectChanges(); -// selectedday = getElement('.selectedday'); -// expect(selectedday).toBe(null); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// expect(selection.nativeElement.value).toBe(''); -// }); -// -// it('select today button', () => { -// let date = new Date(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let today = getElement('.headertodaybtn'); -// expect(today).not.toBe(null); -// -// today.nativeElement.click(); -// -// let dateStr = getDateString(date); -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection.nativeElement.value).toContain(dateStr); -// -// fixture.detectChanges(); -// let btnclear = getElement('.btnclear'); -// btnclear.nativeElement.click(); -// expect(selection.nativeElement.value).toContain(''); -// }); -// -// it('select previous month', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let prevmonth = getElement('.header tr td:first-child .headerbtn:first-child'); -// expect(prevmonth).not.toBe(null); -// -// prevmonth.nativeElement.click(); -// -// expect(comp.visibleMonth.monthTxt).toBe('Apr'); -// expect(comp.visibleMonth.monthNbr).toBe(4); -// expect(comp.visibleMonth.year).toBe(2016); -// }); -// -// it('select next month', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let nextmonth = getElement(NEXTMONTH); -// expect(nextmonth).not.toBe(null); -// -// nextmonth.nativeElement.click(); -// -// expect(comp.visibleMonth.monthTxt).toBe('Jun'); -// expect(comp.visibleMonth.monthNbr).toBe(6); -// expect(comp.visibleMonth.year).toBe(2016); -// }); -// -// it('select previous month january change year', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let prevmonth = getElement(PREVMONTH); -// expect(prevmonth).not.toBe(null); -// -// prevmonth.nativeElement.click(); -// -// expect(comp.visibleMonth.year).toBe(2015); -// }); -// -// it('select next month december change year', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 12, year: 2016}; -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let nextmonth = getElement(NEXTMONTH); -// expect(nextmonth).not.toBe(null); -// -// nextmonth.nativeElement.click(); -// -// expect(comp.visibleMonth.year).toBe(2017); -// }); -// -// it('select previous month from selector', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let prevmonth = getElement(PREVMONTH); -// expect(prevmonth).not.toBe(null); -// -// prevmonth.nativeElement.click(); -// expect(comp.visibleMonth.monthNbr).toBe(4); -// expect(comp.visibleMonth.monthTxt).toBe('Apr'); -// -// prevmonth.nativeElement.click(); -// expect(comp.visibleMonth.monthNbr).toBe(3); -// expect(comp.visibleMonth.monthTxt).toBe('Mar'); -// }); -// -// it('select next month from selector', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let nextmonth = getElement(NEXTMONTH); -// expect(nextmonth).not.toBe(null); -// -// nextmonth.nativeElement.click(); -// expect(comp.visibleMonth.monthNbr).toBe(6); -// expect(comp.visibleMonth.monthTxt).toBe('Jun'); -// -// nextmonth.nativeElement.click(); -// expect(comp.visibleMonth.monthNbr).toBe(7); -// expect(comp.visibleMonth.monthTxt).toBe('Jul'); -// }); -// -// it('select previous year', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let prevyear = getElement(PREVYEAR); -// expect(prevyear).not.toBe(null); -// -// prevyear.nativeElement.click(); -// fixture.detectChanges(); -// let yearLabel = getElement('.headeryeartxt .headerlabelbtn'); -// expect(yearLabel).not.toBe(null); -// expect(yearLabel.nativeElement.textContent).toBe('2015'); -// }); -// -// it('select next year', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let nextyear = getElement(NEXTYEAR); -// expect(nextyear).not.toBe(null); -// -// nextyear.nativeElement.click(); -// -// fixture.detectChanges(); -// let yearLabel = getElement('.headeryeartxt .headerlabelbtn'); -// expect(yearLabel).not.toBe(null); -// expect(yearLabel.nativeElement.textContent).toBe('2017'); -// }); -// -// it('test calendar year 2016 month one by one - next month button', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; -// -// comp.options = {firstDayOfWeek: 'mo'}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let monthlabel = getElement('.monthlabel'); -// expect(monthlabel).not.toBe(null); -// expect(monthlabel.nativeElement.textContent.trim()).toBe('Jan'); -// -// fixture.detectChanges(); -// let yearlabel = getElement('.yearlabel'); -// expect(yearlabel).not.toBe(null); -// expect(yearlabel.nativeElement.textContent.trim()).toBe('2016'); -// -// comp.generateCalendar(1, 2016, true); -// -// let beginDate: Array = ['28', '1', '29', '28', '25', '30', '27', '1', '29', '26', '31', '28']; -// let endDate: Array = ['7', '13', '10', '8', '5', '10', '7', '11', '9', '6', '11', '8']; -// -// let i: number = 0; -// do { -// fixture.detectChanges(); -// let currmonth = getElements('.caltable tbody tr td'); -// expect(currmonth).not.toBe(null); -// expect(currmonth.length).toBe(42); -// -// expect(currmonth[0]).not.toBe(null); -// expect(currmonth[0].nativeElement.textContent.trim()).toBe(beginDate[i]); -// -// expect(currmonth[41]).not.toBe(null); -// expect(currmonth[41].nativeElement.textContent.trim()).toBe(endDate[i]); -// -// comp.nextMonth(); -// -// i++; -// } while (i < 12) -// }); -// -// it('test calendar year 2016 month one by one - previous month button', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 12, year: 2016}; -// -// comp.options = {firstDayOfWeek: 'mo'}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let monthlabel = getElement('.monthlabel'); -// expect(monthlabel).not.toBe(null); -// expect(monthlabel.nativeElement.textContent.trim()).toBe('Dec'); -// -// fixture.detectChanges(); -// let yearlabel = getElement('.yearlabel'); -// expect(yearlabel).not.toBe(null); -// expect(yearlabel.nativeElement.textContent.trim()).toBe('2016'); -// -// comp.generateCalendar(12, 2016, true); -// -// let beginDate: Array = ['28', '1', '29', '28', '25', '30', '27', '1', '29', '26', '31', '28']; -// let endDate: Array = ['7', '13', '10', '8', '5', '10', '7', '11', '9', '6', '11', '8']; -// -// let i: number = 11; -// do { -// fixture.detectChanges(); -// let currmonth = getElements('.caltable tbody tr td'); -// expect(currmonth).not.toBe(null); -// expect(currmonth.length).toBe(42); -// -// expect(currmonth[0]).not.toBe(null); -// expect(currmonth[0].nativeElement.textContent.trim()).toBe(beginDate[i]); -// -// expect(currmonth[41]).not.toBe(null); -// expect(currmonth[41].nativeElement.textContent.trim()).toBe(endDate[i]); -// -// comp.prevMonth(); -// -// i--; -// } while (i >= 0) -// }); -// -// // options -// it('options - dayLabels', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; -// comp.options = {dayLabels: {su: '1', mo: '2', tu: '3', we: '4', th: '5', fr: '6', sa: '7'}, firstDayOfWeek: 'su'}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let ths = getElements('.caltable thead tr th'); -// expect(ths.length).toBe(7); -// for(let i in ths) { -// let el = ths[i]; -// expect(parseInt(el.nativeElement.textContent)).toBe(parseInt(i) + 1); -// } -// }); -// -// it('options - monthLabels', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; -// comp.options = {monthLabels: { 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8', 9: '9', 10: '10', 11: '11', 12: '12' }}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let nextmonth = getElement(NEXTMONTH); -// expect(nextmonth).not.toBe(null); -// -// for(let i = 1; i <= 12; i++) { -// fixture.detectChanges(); -// let monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(parseInt(monthLabel.nativeElement.textContent)).toBe(i); -// nextmonth.nativeElement.click(); -// } -// }); -// -// it('options - date format', () => { -// comp.options = {dateFormat: 'dd.mm.yyyy', indicateInvalidDate: true}; -// -// comp.parseOptions(); -// -// let value = {target:{value:'2016-08-22'}}; -// comp.userDateInput(value); -// expect(comp.invalidDate).toBe(true); -// -// fixture.detectChanges(); -// let invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// value = {target:{value:'2016-08-2'}}; -// comp.userDateInput(value); -// expect(comp.invalidDate).toBe(true); -// -// value = {target:{value:'16.09/2016'}}; -// comp.userDateInput(value); -// expect(comp.invalidDate).toBe(true); -// -// value = {target:{value:'2016-08-xx'}}; -// comp.userDateInput(value); -// expect(comp.invalidDate).toBe(true); -// -// value = {target:{value:'16.09.999'}}; -// comp.userDateInput(value); -// expect(comp.invalidDate).toBe(true); -// -// value = {target:{value:'16.09.19999'}}; -// comp.userDateInput(value); -// expect(comp.invalidDate).toBe(true); -// -// value = {target:{value:'16.09.2016'}}; -// comp.userDateInput(value); -// expect(comp.invalidDate).toBe(false); -// -// comp.options = {dateFormat: 'dd mmm yyyy', indicateInvalidDate: true}; -// -// comp.parseOptions(); -// -// value = {target:{value:'2016-08-22'}}; -// comp.userDateInput(value); -// expect(comp.invalidDate).toBe(true); -// -// value = {target:{value:'22 Aug 2016'}}; -// comp.userDateInput(value); -// expect(comp.invalidDate).toBe(false); -// }); -// -// it('options - show today button', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let headertodaybtn = getElement('.headertodaybtn'); -// expect(headertodaybtn).not.toBe(null); -// -// btnpicker.nativeElement.click(); -// -// comp.options = {showTodayBtn: false}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// headertodaybtn = getElement('.headertodaybtn'); -// expect(headertodaybtn).toBe(null); -// -// btnpicker.nativeElement.click(); -// -// comp.options = {showTodayBtn: true}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// headertodaybtn = getElement('.headertodaybtn'); -// expect(headertodaybtn).not.toBe(null); -// }); -// -// it('options - today button text', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; -// comp.options = {todayBtnTxt: 'test text'}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let headertodaybtn = getElement('.headertodaybtn'); -// expect(headertodaybtn).not.toBe(null); -// expect(headertodaybtn.nativeElement.textContent).toBe('test text'); -// }); -// -// it('options - first day of week', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; -// comp.options = {firstDayOfWeek: 'tu'}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let first = getElement('.caltable thead tr th:first-child'); -// expect(first).not.toBe(null); -// expect(first.nativeElement.textContent).toBe('Tue'); -// -// let last = getElement('.caltable thead tr th:last-child'); -// expect(last).not.toBe(null); -// expect(last.nativeElement.textContent).toBe('Mon'); -// }); -// -// it('options - sunday highlight', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; -// comp.options = {sunHighlight: true}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let sunday = getElement('.sunday'); -// expect(sunday).not.toBe(null); -// -// btnpicker.nativeElement.click(); -// -// comp.options = {sunHighlight: false}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker.nativeElement.click(); -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// sunday = getElement('.sunday'); -// expect(sunday).toBe(null); -// }); -// -// it('options - current day marked', () => { -// comp.options = {markCurrentDay: true}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let currday = getElement('.currday'); -// expect(currday).not.toBe(null); -// -// btnpicker.nativeElement.click(); -// -// comp.options = {markCurrentDay: false}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker.nativeElement.click(); -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// currday = getElement('.currday'); -// expect(currday).toBe(null); -// }); -// -// it('options - editable month and year', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; -// comp.options = {editableMonthAndYear: true}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let montlabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(montlabel).not.toBe(null); -// montlabel.nativeElement.click(); -// -// fixture.detectChanges(); -// let monthinput = getElement('.monthinput'); -// expect(monthinput).not.toBe(null); -// -// comp.userMonthInput({target:{value:'jan'}}); -// -// fixture.detectChanges(); -// montlabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(montlabel).not.toBe(null); -// expect(montlabel.nativeElement.textContent).toBe('Jan'); -// -// -// fixture.detectChanges(); -// let yearlabel = getElement('.headeryeartxt .headerlabelbtn'); -// expect(yearlabel).not.toBe(null); -// yearlabel.nativeElement.click(); -// -// fixture.detectChanges(); -// let yearinput = getElement('.yearinput'); -// expect(yearinput).not.toBe(null); -// -// comp.userYearInput({target:{value:'2019'}}); -// -// fixture.detectChanges(); -// yearlabel = getElement('.headeryeartxt .headerlabelbtn'); -// expect(yearlabel).not.toBe(null); -// expect(yearlabel.nativeElement.textContent).toBe('2019'); -// }); -// -// it('options - disable header buttons', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 5, year: 2016}; -// comp.options = { -// disableHeaderButtons: true, -// disableUntil: {year: 2016, month: 4, day: 10} -// }; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let montlabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(montlabel).not.toBe(null); -// expect(montlabel.nativeElement.textContent).toBe('May'); -// -// fixture.detectChanges(); -// let prevmonth = getElement(PREVMONTH); -// expect(prevmonth).not.toBe(null); -// prevmonth.nativeElement.click(); -// -// fixture.detectChanges(); -// montlabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(montlabel).not.toBe(null); -// expect(montlabel.nativeElement.textContent).toBe('Apr'); -// -// fixture.detectChanges(); -// let headerbtndisabled = getElements('.headerbtndisabled'); -// expect(headerbtndisabled).not.toBe(null); -// expect(headerbtndisabled.length).toBe(2); -// -// prevmonth.nativeElement.click(); -// -// fixture.detectChanges(); -// montlabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(montlabel).not.toBe(null); -// expect(montlabel.nativeElement.textContent).toBe('Apr'); -// -// fixture.detectChanges(); -// let prevyear = getElement(PREVYEAR); -// expect(prevyear).not.toBe(null); -// prevyear.nativeElement.click(); -// -// fixture.detectChanges(); -// let yearlabel = getElement('.headeryeartxt .headerlabelbtn'); -// expect(yearlabel).not.toBe(null); -// expect(yearlabel.nativeElement.textContent).toBe('2016'); -// -// btnpicker.nativeElement.click(); -// -// -// comp.options = { -// disableHeaderButtons: true, -// disableSince: {year: 2016, month: 7, day: 10} -// }; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// montlabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(montlabel).not.toBe(null); -// expect(montlabel.nativeElement.textContent).toBe('May'); -// -// fixture.detectChanges(); -// let nextmonth = getElement(NEXTMONTH); -// expect(nextmonth).not.toBe(null); -// nextmonth.nativeElement.click(); -// -// fixture.detectChanges(); -// montlabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(montlabel).not.toBe(null); -// expect(montlabel.nativeElement.textContent).toBe('Jun'); -// -// fixture.detectChanges(); -// headerbtndisabled = getElements('.headerbtndisabled'); -// expect(headerbtndisabled).not.toBe(null); -// expect(headerbtndisabled.length).toBe(2); -// -// prevmonth.nativeElement.click(); -// -// fixture.detectChanges(); -// montlabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(montlabel).not.toBe(null); -// expect(montlabel.nativeElement.textContent).toBe('Jun'); -// -// fixture.detectChanges(); -// let nextyear = getElement(NEXTYEAR); -// expect(nextyear).not.toBe(null); -// nextyear.nativeElement.click(); -// -// fixture.detectChanges(); -// yearlabel = getElement('.headeryeartxt .headerlabelbtn'); -// expect(yearlabel).not.toBe(null); -// expect(yearlabel.nativeElement.textContent).toBe('2016'); -// }); -// -// it('options - min year', () => { -// comp.visibleMonth = {monthTxt: 'May', monthNbr: 5, year: 2016}; -// comp.options = {minYear: 2000}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let yearlabel = getElement('.headeryeartxt .headerlabelbtn'); -// expect(yearlabel).not.toBe(null); -// yearlabel.nativeElement.click(); -// -// fixture.detectChanges(); -// let yearinput = getElement('.yearinput'); -// expect(yearinput).not.toBe(null); -// -// comp.userYearInput({target:{value:1999}}); -// -// fixture.detectChanges(); -// let invalidyear = getElement('.invalidyear'); -// expect(invalidyear).not.toBe(null); -// -// comp.userYearInput({target:{value:2000}}); -// -// fixture.detectChanges(); -// yearlabel = getElement('.headeryeartxt .headerlabelbtn'); -// expect(yearlabel).not.toBe(null); -// expect(yearlabel.nativeElement.textContent).toBe('2000'); -// }); -// -// it('options - max year', () => { -// comp.visibleMonth = {monthTxt: 'May', monthNbr: 5, year: 2016}; -// comp.options = {maxYear: 2020}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let yearlabel = getElement('.headeryeartxt .headerlabelbtn'); -// expect(yearlabel).not.toBe(null); -// yearlabel.nativeElement.click(); -// -// fixture.detectChanges(); -// let yearinput = getElement('.yearinput'); -// expect(yearinput).not.toBe(null); -// -// comp.userYearInput({target:{value:2021}}); -// -// fixture.detectChanges(); -// let invalidyear = getElement('.invalidyear'); -// expect(invalidyear).not.toBe(null); -// -// comp.userYearInput({target:{value:2020}}); -// -// fixture.detectChanges(); -// yearlabel = getElement('.headeryeartxt .headerlabelbtn'); -// expect(yearlabel).not.toBe(null); -// expect(yearlabel.nativeElement.textContent).toBe('2020'); -// }); -// -// it('options - disable until', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {disableUntil: {year: 2016, month: 10, day: 5}}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// comp.generateCalendar(10, 2016, true); -// -// fixture.detectChanges(); -// let disabled = getElements('tr .disabled'); -// expect(disabled).not.toBe(null); -// expect(disabled.length).toBe(10); -// -// let firstDisabled = disabled[0]; -// expect(firstDisabled.nativeElement.textContent.trim()).toBe('26'); -// -// let lastDisabled = disabled[disabled.length - 1]; -// expect(lastDisabled.nativeElement.textContent.trim()).toBe('5'); -// -// fixture.detectChanges(); -// lastDisabled.nativeElement.click(); -// let selection = getElement('.selection'); -// expect(selection.nativeElement.value).toBe(''); -// -// fixture.detectChanges(); -// let selectableDays = getElements('.tablesingleday'); -// expect(selectableDays).not.toBe(null); -// expect(selectableDays.length).toBe(26); -// -// selectableDays[0].nativeElement.click(); -// fixture.detectChanges(); -// selection = getElement('.selection'); -// expect(selection.nativeElement.value).toContain('2016-10-06'); -// }); -// -// it('options - disable since', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {disableSince: {year: 2016, month: 10, day: 30}}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// comp.generateCalendar(10, 2016, true); -// -// fixture.detectChanges(); -// let disabled = getElements('tr .disabled'); -// expect(disabled).not.toBe(null); -// expect(disabled.length).toBe(8); -// -// let firstDisabled = disabled[0]; -// expect(firstDisabled.nativeElement.textContent.trim()).toBe('30'); -// -// let lastDisabled = disabled[disabled.length - 1]; -// expect(lastDisabled.nativeElement.textContent.trim()).toBe('6'); -// -// fixture.detectChanges(); -// lastDisabled.nativeElement.click(); -// let selection = getElement('.selection'); -// expect(selection.nativeElement.value).toBe(''); -// -// fixture.detectChanges(); -// let selectableDays = getElements('.tablesingleday'); -// expect(selectableDays).not.toBe(null); -// expect(selectableDays.length).toBe(29); -// -// selectableDays[5].nativeElement.click(); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// expect(selection.nativeElement.value).toContain('2016-10-06'); -// }); -// -// it('options - disable days one by one', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {disableDays: [{year: 2016, month: 10, day: 5}, {year: 2016, month: 10, day: 10}]}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// comp.generateCalendar(10, 2016, true); -// -// fixture.detectChanges(); -// let disabled = getElements('tr .disabled'); -// expect(disabled).not.toBe(null); -// expect(disabled.length).toBe(2); -// -// let firstDisabled = disabled[0]; -// expect(firstDisabled.nativeElement.textContent.trim()).toBe('5'); -// -// let lastDisabled = disabled[1]; -// expect(lastDisabled.nativeElement.textContent.trim()).toBe('10'); -// }); -// -// it('options - enable disabled days one by one', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2017}; -// comp.options = { -// dateFormat: 'dd.mm.yyyy', -// disableDateRange: {begin: {year: 2017, month: 1, day: 1}, end: {year: 2017, month: 1, day: 31}}, -// enableDays: [{year: 2017, month: 1, day: 5}, {year: 2017, month: 1, day: 6}, {year: 2017, month: 1, day: 7}, {year: 2017, month: 1, day: 8}] -// }; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// comp.generateCalendar(1, 2017, true); -// -// fixture.detectChanges(); -// let disabled = getElements('tr .disabled'); -// expect(disabled).not.toBe(null); -// expect(disabled.length).toBe(27); -// -// let firstDisabled = disabled[0]; -// expect(firstDisabled.nativeElement.textContent.trim()).toBe('1'); -// -// let lastDisabled = disabled[disabled.length - 1]; -// expect(lastDisabled.nativeElement.textContent.trim()).toBe('31'); -// -// fixture.detectChanges(); -// let alldates = getElements('.caltable .daycell'); -// expect(alldates).not.toBe(null); -// expect(alldates.length).toBe(42); -// -// fixture.detectChanges(); -// let firstEnabled = alldates[10]; -// firstEnabled.nativeElement.click(); -// -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// expect(selection.nativeElement.value).toBe('05.01.2017'); -// }); -// -// it('options - disable range', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {disableDateRange: {begin: {year: 2016, month: 10, day: 5}, end: {year: 2016, month: 10, day: 10}}}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// comp.generateCalendar(10, 2016, true); -// -// fixture.detectChanges(); -// let disabled = getElements('tr .disabled'); -// expect(disabled).not.toBe(null); -// expect(disabled.length).toBe(6); -// -// let firstDisabled = disabled[0]; -// expect(firstDisabled.nativeElement.textContent.trim()).toBe('5'); -// -// let lastDisabled = disabled[disabled.length - 1]; -// expect(lastDisabled.nativeElement.textContent.trim()).toBe('10'); -// btnpicker.nativeElement.click(); -// -// -// comp.options = {disableDateRange: {begin: {}, end: {}}}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// comp.generateCalendar(10, 2016, true); -// -// fixture.detectChanges(); -// disabled = getElements('tr .disabled'); -// expect(disabled).not.toBe(null); -// expect(disabled.length).toBe(0); -// }); -// -// it('options - disable today - today button disabled', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// -// let date = new Date(); -// comp.options = {disableDays: [{year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate()}]}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// comp.generateCalendar(10, 2016, true); -// -// fixture.detectChanges(); -// let headertodaybtn = getElement('.headertodaybtn'); -// expect(headertodaybtn).not.toBe(null); -// expect(headertodaybtn.properties['disabled']).toBe(true); -// -// fixture.detectChanges(); -// headertodaybtn.nativeElement.click(); -// let selector = getElement('.selector'); -// expect(selector).not.toBe(null); -// -// btnpicker.nativeElement.click(); -// -// comp.options = {disableDays: []}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker.nativeElement.click(); -// comp.generateCalendar(10, 2016, true); -// -// fixture.detectChanges(); -// headertodaybtn = getElement('.headertodaybtn'); -// expect(headertodaybtn).not.toBe(null); -// expect(headertodaybtn.properties['disabled']).toBe(false); -// -// headertodaybtn.nativeElement.click(); -// -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// expect(selection.nativeElement.value).toBe(getDateString(date)); -// }); -// -// it('options - disable weekends', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {firstDayOfWeek: 'mo', disableWeekends: true}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// comp.generateCalendar(10, 2016, true); -// -// fixture.detectChanges(); -// let disabled = getElements('tr .disabled'); -// expect(disabled).not.toBe(null); -// expect(disabled.length).toBe(12); -// -// let firstDisabled = disabled[0]; -// expect(firstDisabled.nativeElement.textContent.trim()).toBe('1'); -// -// let secondDisabled = disabled[1]; -// expect(secondDisabled.nativeElement.textContent.trim()).toBe('2'); -// -// let lastDisabled = disabled[disabled.length - 1]; -// expect(lastDisabled.nativeElement.textContent.trim()).toBe('6'); -// -// fixture.detectChanges(); -// firstDisabled.nativeElement.click(); -// let selection = getElement('.selection'); -// expect(selection.nativeElement.value).toBe(''); -// -// fixture.detectChanges(); -// secondDisabled.nativeElement.click(); -// selection = getElement('.selection'); -// expect(selection.nativeElement.value).toBe(''); -// -// fixture.detectChanges(); -// let selectableDays = getElements('.tablesingleday'); -// expect(selectableDays).not.toBe(null); -// expect(selectableDays.length).toBe(21); -// -// selectableDays[0].nativeElement.click(); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// expect(selection.nativeElement.value).toContain('2016-10-03'); -// }); -// -// it('options - inline', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {inline: true}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let selector = getElement('.selector'); -// expect(selector).not.toBe(null); -// -// fixture.detectChanges(); -// let selectiongroup = getElement('.selectiongroup'); -// expect(selectiongroup).toBe(null); -// }); -// -// it('options - show clear date button', () => { -// let date = new Date(); -// comp.selectedMonth = {monthTxt: '', monthNbr: date.getMonth() + 1, year: date.getFullYear()}; -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let currday = getElement('.currday'); -// expect(currday).not.toBe(null); -// -// currday.nativeElement.click(); -// -// fixture.detectChanges(); -// let btnclear = getElement('.btnclear'); -// expect(btnclear).not.toBe(null); -// -// btnclear.nativeElement.click(); -// -// comp.options = {showClearDateBtn: true}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// currday = getElement('.currday'); -// expect(currday).not.toBe(null); -// -// currday.nativeElement.click(); -// -// fixture.detectChanges(); -// btnclear = getElement('.btnclear'); -// expect(btnclear).not.toBe(null); -// btnclear.nativeElement.click(); -// -// btnclear.nativeElement.click(); -// -// -// comp.options = {showClearDateBtn: false}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// currday = getElement('.currday'); -// expect(currday).not.toBe(null); -// -// currday.nativeElement.click(); -// -// fixture.detectChanges(); -// btnclear = getElement('.btnclear'); -// expect(btnclear).toBe(null); -// }); -// -// it('options - height', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {height: '50px'}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// expect(selection.styles['height']).toBe('50px'); -// }); -// -// it('options - width', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {width: '300px'}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// expect(de).not.toBe(null); -// expect(de.styles['width']).toBe('300px'); -// -// comp.options = {width: '20%'}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// expect(de).not.toBe(null); -// expect(de.styles['width']).toBe('20%'); -// }); -// -// it('options - selection text font size', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {selectionTxtFontSize: '10px'}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// expect(selection.styles['font-size']).toBe('10px'); -// }); -// -// it('options - align selector right', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {alignSelectorRight: true}; -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let alignselectorright = getElement('.alignselectorright'); -// expect(alignselectorright).not.toBe(null); -// -// comp.options = {alignSelectorRight: false}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// alignselectorright = getElement('.alignselectorright'); -// expect(alignselectorright).toBe(null); -// }); -// -// it('options - open selector top of input', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {openSelectorTopOfInput: true, height: '30px'}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// let value: string = comp.getSelectorTopPosition(); -// expect(value).not.toBe(null); -// expect(value).toBe('32px'); -// -// btnpicker.nativeElement.click(); -// -// -// comp.options = {openSelectorTopOfInput: false}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// value = comp.getSelectorTopPosition(); -// expect(value).toBe(undefined); -// -// -// btnpicker.nativeElement.click(); -// -// comp.options = {}; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// value = comp.getSelectorTopPosition(); -// expect(value).toBe(undefined); -// }); -// -// it('options - indicate invalid date', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {indicateInvalidDate: true, dateFormat: 'dd.mm.yyyy'}; -// -// comp.parseOptions(); -// -// comp.userDateInput({target:{value:'2016-08-22'}}); -// fixture.detectChanges(); -// let invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'2016-08-xx'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'2016-08-99'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'10.10.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).toBe(null); -// }); -// -// it('options - disableUntil input dates validation', ()=> { -// comp.options = { -// indicateInvalidDate: true, -// dateFormat: 'dd.mm.yyyy', -// disableUntil:{year: 2016, month: 11, day: 4} -// }; -// -// comp.parseOptions(); -// -// comp.userDateInput({target:{value:'11.12.2015'}}); -// fixture.detectChanges(); -// let invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'11.06.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'04.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'05.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).toBe(null); -// -// comp.options = { -// indicateInvalidDate: true, -// dateFormat: 'dd.mm.yyyy', -// disableUntil:{year: 0, month: 0, day: 0} -// }; -// -// comp.parseOptions(); -// -// comp.userDateInput({target:{value:'11.12.2015'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).toBe(null); -// }); -// -// it('options - disableSince input dates validation', ()=> { -// comp.options = { -// indicateInvalidDate: true, -// dateFormat: 'dd.mm.yyyy', -// disableSince:{year: 2016, month: 11, day: 22} -// }; -// -// comp.parseOptions(); -// -// comp.userDateInput({target:{value:'08.12.2017'}}); -// fixture.detectChanges(); -// let invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'08.12.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'23.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'21.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).toBe(null); -// -// comp.options = { -// indicateInvalidDate: true, -// dateFormat: 'dd.mm.yyyy', -// disableSince:{year: 0, month: 0, day: 0} -// }; -// -// comp.parseOptions(); -// -// comp.userDateInput({target:{value:'11.12.2015'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).toBe(null); -// }); -// -// it('options - disable weekends input date validation', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 11, year: 2016}; -// comp.options = { -// indicateInvalidDate: true, -// dateFormat: 'dd.mm.yyyy', -// disableWeekends: true, -// firstDayOfWeek: 'mo' -// }; -// -// comp.parseOptions(); -// -// comp.userDateInput({target:{value:'05.11.2016'}}); -// fixture.detectChanges(); -// let invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'06.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'12.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'13.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'19.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'20.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'26.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'27.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'04.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).toBe(null); -// }); -// -// it('options - disableDays input date validation', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 11, year: 2016}; -// comp.options = { -// indicateInvalidDate: true, -// dateFormat: 'dd.mm.yyyy', -// disableDays: [ -// {year: 2016, month: 11, day: 1}, -// {year: 2016, month: 11, day: 3}, -// {year: 2016, month: 11, day: 5}, -// {year: 2016, month: 11, day: 7} -// ], -// firstDayOfWeek: 'mo' -// }; -// -// comp.parseOptions(); -// -// comp.userDateInput({target:{value:'01.11.2016'}}); -// fixture.detectChanges(); -// let invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'03.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'05.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'07.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).not.toBe(null); -// -// comp.userDateInput({target:{value:'02.11.2016'}}); -// fixture.detectChanges(); -// invaliddate = getElement('.invaliddate'); -// expect(invaliddate).toBe(null); -// }); -// -// it('options - disable component', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {componentDisabled: true}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// -// btnpicker.nativeElement.click(); -// fixture.detectChanges(); -// -// let selector = getElement('.selector'); -// expect(selector).toBe(null); -// -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// -// selection.nativeElement.value = '2016-11-14'; -// -// fixture.detectChanges(); -// expect(selection.nativeElement.value).toContain(''); -// }); -// -// it('options - editable date field', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {editableDateField: false}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// -// selection.nativeElement.value = '2016-11-14'; -// -// fixture.detectChanges(); -// expect(selection.nativeElement.value).toContain(''); -// -// comp.options = {editableDateField: true}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// -// selection.nativeElement.value = '2016-11-14'; -// -// fixture.detectChanges(); -// expect(selection.nativeElement.value).toContain('2016-11-14'); -// }); -// -// it('options - click input to open selector', () => { -// -// let selection: DebugElement, -// selector: DebugElement; -// -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {editableDateField: true}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// -// selection.nativeElement.click(); -// -// fixture.detectChanges(); -// selector = getElement('.selector'); -// expect(selector).toBe(null); -// -// comp.options = {editableDateField: false, openSelectorOnInputClick: true}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// -// selection.nativeElement.click(); -// -// fixture.detectChanges(); -// selector = getElement('.selector'); -// expect(selector).not.toBe(null); -// }); -// -// it('options - input field value required', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// expect(selection.properties['required']).toBe(false); -// -// comp.options = {inputValueRequired: true}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// expect(selection.properties['required']).toBe(true); -// -// comp.options = {inputValueRequired: false}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// expect(selection.properties['required']).toBe(false); -// }); -// -// it('options - show selector arrow', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let selectorarrow = getElement('.selectorarrow'); -// expect(selectorarrow).not.toBe(null); -// btnpicker.nativeElement.click(); -// -// -// comp.options = {showSelectorArrow: false}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// selectorarrow = getElement('.selectorarrow'); -// expect(selectorarrow).toBe(null); -// btnpicker.nativeElement.click(); -// -// -// comp.options = {showSelectorArrow: true}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// selectorarrow = getElement('.selectorarrow'); -// expect(selectorarrow).not.toBe(null); -// btnpicker.nativeElement.click(); -// }); -// -// it('options - show input field', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 10, year: 2016}; -// comp.options = {}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// -// -// comp.options = {showInputField: false}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// expect(selection).toBe(null); -// -// -// comp.options = {showInputField: true}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// }); -// -// it('options - input auto fill', () => { -// comp.options = {inputAutoFill: false}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// -// fixture.detectChanges(); -// selection.nativeElement.value = '2016-2-1'; -// fixture.nativeElement.querySelector('.selection').dispatchEvent(new Event('keyup')); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// expect(selection.nativeElement.value).toBe('2016-2-1'); -// -// -// comp.options = {inputAutoFill: true}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// selection.nativeElement.value = ''; -// -// fixture.detectChanges(); -// selection.nativeElement.value = '2016-1-'; -// fixture.nativeElement.querySelector('.selection').dispatchEvent(new Event('keyup')); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// expect(selection.nativeElement.value).toBe('2016-01-'); -// -// fixture.detectChanges(); -// selection.nativeElement.value = '2016-01-9'; -// fixture.nativeElement.querySelector('.selection').dispatchEvent(new Event('keyup')); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// expect(selection.nativeElement.value).toBe('2016-01-09'); -// }); -// -// it('options - show week numbers', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2017}; -// comp.options = {showWeekNumbers: false}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let weekdaytitleweeknbr = getElement('.weekdaytitleweeknbr'); -// expect(weekdaytitleweeknbr).toBe(null); -// -// fixture.detectChanges(); -// let daycellweeknbr = getElements('.daycellweeknbr'); -// expect(daycellweeknbr.length).toBe(0); -// -// btnpicker.nativeElement.click(); -// -// -// comp.options = {showWeekNumbers: true}; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// weekdaytitleweeknbr = getElement('.weekdaytitleweeknbr'); -// expect(weekdaytitleweeknbr).not.toBe(null); -// -// fixture.detectChanges(); -// daycellweeknbr = getElements('.daycellweeknbr'); -// expect(daycellweeknbr.length).toBe(6); -// -// expect(daycellweeknbr[0].nativeElement.textContent.trim()).toBe('52'); -// expect(daycellweeknbr[1].nativeElement.textContent.trim()).toBe('1'); -// expect(daycellweeknbr[2].nativeElement.textContent.trim()).toBe('2'); -// expect(daycellweeknbr[3].nativeElement.textContent.trim()).toBe('3'); -// expect(daycellweeknbr[4].nativeElement.textContent.trim()).toBe('4'); -// expect(daycellweeknbr[5].nativeElement.textContent.trim()).toBe('5'); -// -// fixture.detectChanges(); -// let prevyear = getElement(PREVYEAR); -// expect(prevyear).not.toBe(null); -// prevyear.nativeElement.click(); -// -// fixture.detectChanges(); -// daycellweeknbr = getElements('.daycellweeknbr'); -// expect(daycellweeknbr.length).toBe(6); -// -// expect(daycellweeknbr[0].nativeElement.textContent.trim()).toBe('53'); -// expect(daycellweeknbr[1].nativeElement.textContent.trim()).toBe('1'); -// expect(daycellweeknbr[2].nativeElement.textContent.trim()).toBe('2'); -// expect(daycellweeknbr[3].nativeElement.textContent.trim()).toBe('3'); -// expect(daycellweeknbr[4].nativeElement.textContent.trim()).toBe('4'); -// expect(daycellweeknbr[5].nativeElement.textContent.trim()).toBe('5'); -// -// prevyear.nativeElement.click(); -// -// fixture.detectChanges(); -// daycellweeknbr = getElements('.daycellweeknbr'); -// expect(daycellweeknbr.length).toBe(6); -// -// expect(daycellweeknbr[0].nativeElement.textContent.trim()).toBe('1'); -// expect(daycellweeknbr[1].nativeElement.textContent.trim()).toBe('2'); -// expect(daycellweeknbr[2].nativeElement.textContent.trim()).toBe('3'); -// expect(daycellweeknbr[3].nativeElement.textContent.trim()).toBe('4'); -// expect(daycellweeknbr[4].nativeElement.textContent.trim()).toBe('5'); -// expect(daycellweeknbr[5].nativeElement.textContent.trim()).toBe('6'); -// }); -// -// it('options - aria label texts', () => { -// comp.selectedDate = comp.parseSelectedDate('2017-10-11'); -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// expect(btnpicker).not.toBe(null); -// expect(btnpicker.nativeElement.attributes['aria-label'].textContent).toBe('Open Calendar'); -// -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// expect(selection.nativeElement.attributes['aria-label'].textContent).toBe('Date input field'); -// -// fixture.detectChanges(); -// let btnclear = getElement('.btnclear'); -// expect(btnclear).not.toBe(null); -// expect(btnclear.nativeElement.attributes['aria-label'].textContent).toBe('Clear Date'); -// -// -// fixture.detectChanges(); -// let prevmonth = getElement(PREVMONTH); -// expect(prevmonth).not.toBe(null); -// expect(prevmonth.nativeElement.attributes['aria-label'].textContent).toBe('Previous Month'); -// -// fixture.detectChanges(); -// let nextmonth = getElement(NEXTMONTH); -// expect(nextmonth).not.toBe(null); -// expect(nextmonth.nativeElement.attributes['aria-label'].textContent).toBe('Next Month'); -// -// fixture.detectChanges(); -// let prevyear = getElement(PREVYEAR); -// expect(prevyear).not.toBe(null); -// expect(prevyear.nativeElement.attributes['aria-label'].textContent).toBe('Previous Year'); -// -// fixture.detectChanges(); -// let nextyear = getElement(NEXTYEAR); -// expect(nextyear).not.toBe(null); -// expect(nextyear.nativeElement.attributes['aria-label'].textContent).toBe('Next Year'); -// -// btnpicker.nativeElement.click(); -// -// comp.options = { -// ariaLabelInputField: 'text 1', -// ariaLabelClearDate: 'text 2', -// ariaLabelOpenCalendar: 'text 3', -// ariaLabelPrevMonth: 'text 4', -// ariaLabelNextMonth: 'text 5', -// ariaLabelPrevYear: 'text 6', -// ariaLabelNextYear: 'text 7' -// }; -// comp.parseOptions(); -// -// fixture.detectChanges(); -// btnpicker = getElement('.btnpicker'); -// expect(btnpicker).not.toBe(null); -// expect(btnpicker.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelOpenCalendar); -// -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// expect(selection.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelInputField); -// -// fixture.detectChanges(); -// btnclear = getElement('.btnclear'); -// expect(btnclear).not.toBe(null); -// expect(btnclear.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelClearDate); -// -// -// fixture.detectChanges(); -// prevmonth = getElement(PREVMONTH); -// expect(prevmonth).not.toBe(null); -// expect(prevmonth.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelPrevMonth); -// -// fixture.detectChanges(); -// nextmonth = getElement(NEXTMONTH); -// expect(nextmonth).not.toBe(null); -// expect(nextmonth.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelNextMonth); -// -// fixture.detectChanges(); -// prevyear = getElement(PREVYEAR); -// expect(prevyear).not.toBe(null); -// expect(prevyear.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelPrevYear); -// -// fixture.detectChanges(); -// nextyear = getElement(NEXTYEAR); -// expect(nextyear).not.toBe(null); -// expect(nextyear.nativeElement.attributes['aria-label'].textContent).toBe(comp.options.ariaLabelNextYear); -// }); -// -// it('locale - use fr locale', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; -// comp.locale = 'fr'; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let days = getElements('.caltable thead tr th'); -// expect(days.length).toBe(7); -// expect(days[0].nativeElement.textContent).toBe('Lun'); -// expect(days[1].nativeElement.textContent).toBe('Mar'); -// expect(days[2].nativeElement.textContent).toBe('Mer'); -// expect(days[3].nativeElement.textContent).toBe('Jeu'); -// expect(days[4].nativeElement.textContent).toBe('Ven'); -// expect(days[5].nativeElement.textContent).toBe('Sam'); -// expect(days[6].nativeElement.textContent).toBe('Dim'); -// -// fixture.detectChanges(); -// let nextmonth = getElement(NEXTMONTH); -// expect(nextmonth).not.toBe(null); -// -// fixture.detectChanges(); -// let monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Jan'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Fév'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Mar'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Avr'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Mai'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Juin'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Juil'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Aoû'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Sep'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Oct'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Nov'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Déc'); -// -// fixture.detectChanges(); -// let headertodaybtn = getElement('.headertodaybtn'); -// expect(headertodaybtn).not.toBe(null); -// expect(headertodaybtn.nativeElement.textContent).toBe('Aujourd\'hui'); -// -// fixture.detectChanges(); -// let firstDayOfWeek = getElement('.caltable thead tr th:first-child'); -// expect(firstDayOfWeek).not.toBe(null); -// expect(firstDayOfWeek.nativeElement.textContent).toBe('Lun'); -// -// fixture.detectChanges(); -// let sunday = getElement('.sunday'); -// expect(sunday).not.toBe(null); -// -// comp.userDateInput({target:{value:'10/10/2016'}}); -// expect(comp.invalidDate).toBe(false); -// -// fixture.detectChanges(); -// let invaliddate = getElement('.invaliddate'); -// expect(invaliddate).toBe(null); -// }); -// -// it('selDate - initially selected date - string', () => { -// let date: string = '2017-10-11'; -// comp.selectedDate = comp.parseSelectedDate(date); -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// expect(selection.nativeElement.value).toContain('2017-10-11'); -// -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let selectedday = getElement('.selectedday div span'); -// expect(selectedday).not.toBe(null); -// expect(selectedday.nativeElement.textContent).toContain('11'); -// -// fixture.detectChanges(); -// let monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel).not.toBe(null); -// expect(monthLabel.nativeElement.textContent).toBe('Oct'); -// -// fixture.detectChanges(); -// let yearLabel = getElement('.headeryeartxt .headerlabelbtn'); -// expect(yearLabel).not.toBe(null); -// expect(yearLabel.nativeElement.textContent).toBe('2017'); -// }); -// -// it('selDate - initially selected date - object', () => { -// let date: Object = {year: 2017, month: 10, day: 11}; -// comp.selectedDate = comp.parseSelectedDate(date); -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// expect(selection.nativeElement.value).toContain('2017-10-11'); -// expect(comp.selectionDayTxt).toContain('2017-10-11'); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let selectedday = getElement('.selectedday div span'); -// expect(selectedday).not.toBe(null); -// expect(selectedday.nativeElement.textContent).toContain('11'); -// -// fixture.detectChanges(); -// let monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel).not.toBe(null); -// expect(monthLabel.nativeElement.textContent).toBe('Oct'); -// -// fixture.detectChanges(); -// let yearLabel = getElement('.headeryeartxt .headerlabelbtn'); -// expect(yearLabel).not.toBe(null); -// expect(yearLabel.nativeElement.textContent).toBe('2017'); -// }); -// -// it('defaultMonth - initially selected month', () => { -// comp.selectedMonth = comp.parseSelectedMonth('2019-08'); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel).not.toBe(null); -// expect(monthLabel.nativeElement.textContent).toBe('Aug'); -// -// fixture.detectChanges(); -// let yearLabel = getElement('.headeryeartxt .headerlabelbtn'); -// expect(yearLabel).not.toBe(null); -// expect(yearLabel.nativeElement.textContent).toBe('2019'); -// }); -// -// it('placeholder - placeholder text', () => { -// comp.placeholder = ''; -// -// fixture.detectChanges(); -// let selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// expect(selection.properties['placeholder']).toBe(''); -// -// comp.placeholder = 'Select date'; -// -// fixture.detectChanges(); -// selection = getElement('.selection'); -// expect(selection).not.toBe(null); -// expect(selection.properties['placeholder']).toBe(comp.placeholder); -// -// -// }); -// -// it('locale - use id locale', () => { -// comp.selectedMonth = {monthTxt: '', monthNbr: 1, year: 2016}; -// comp.locale = 'id'; -// -// comp.parseOptions(); -// -// fixture.detectChanges(); -// let btnpicker = getElement('.btnpicker'); -// btnpicker.nativeElement.click(); -// -// fixture.detectChanges(); -// let days = getElements('.caltable thead tr th'); -// expect(days.length).toBe(7); -// expect(days[0].nativeElement.textContent).toBe('Min'); -// expect(days[1].nativeElement.textContent).toBe('Sen'); -// expect(days[2].nativeElement.textContent).toBe('Sel'); -// expect(days[3].nativeElement.textContent).toBe('Rab'); -// expect(days[4].nativeElement.textContent).toBe('Kam'); -// expect(days[5].nativeElement.textContent).toBe('Jum'); -// expect(days[6].nativeElement.textContent).toBe('Sab'); -// -// fixture.detectChanges(); -// let nextmonth = getElement(NEXTMONTH); -// expect(nextmonth).not.toBe(null); -// -// fixture.detectChanges(); -// let monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Jan'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Feb'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Mar'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Apr'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Mei'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Jun'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Jul'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Ags'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Sep'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Okt'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Nov'); -// -// nextmonth.nativeElement.click(); -// fixture.detectChanges(); -// monthLabel = getElement('.headermonthtxt .headerlabelbtn'); -// expect(monthLabel.nativeElement.textContent).toBe('Des'); -// -// fixture.detectChanges(); -// let headertodaybtn = getElement('.headertodaybtn'); -// expect(headertodaybtn).not.toBe(null); -// expect(headertodaybtn.nativeElement.textContent).toBe('Hari ini'); -// -// fixture.detectChanges(); -// let firstDayOfWeek = getElement('.caltable thead tr th:first-child'); -// expect(firstDayOfWeek).not.toBe(null); -// expect(firstDayOfWeek.nativeElement.textContent).toBe('Min'); -// -// fixture.detectChanges(); -// let sunday = getElement('.sunday'); -// expect(sunday).not.toBe(null); -// -// comp.userDateInput({target:{value:'10-10-2016'}}); -// expect(comp.invalidDate).toBe(false); -// -// fixture.detectChanges(); -// let invaliddate = getElement('.invaliddate'); -// expect(invaliddate).toBe(null); -// }); -// -// }); diff --git a/portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.ts b/portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.ts deleted file mode 100644 index 389a5be3..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/my-date-picker.component.ts +++ /dev/null @@ -1,677 +0,0 @@ -import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ElementRef, ViewEncapsulation, ChangeDetectorRef, Renderer, forwardRef } from "@angular/core"; -import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; -import { IMyDate, IMyDateRange, IMyMonth, IMyCalendarDay, IMyWeek, IMyDayLabels, IMyMonthLabels, IMyOptions, IMyDateModel, IMyInputAutoFill, IMyInputFieldChanged, IMyCalendarViewChanged, IMyInputFocusBlur } from "./interfaces/index"; -import { LocaleService } from "./services/my-date-picker.locale.service"; -import { UtilService } from "./services/my-date-picker.util.service"; - -// webpack1_ -declare var require: any; -// declare var myDpStyles: string = require("./my-date-picker.component.css"); -// declare var myDpTpl: string = require("./my-date-picker.component.html"); -// webpack2_ - -export const MYDP_VALUE_ACCESSOR: any = { - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => MyDatePicker), - multi: true -}; - -@Component({ - selector: "my-date-picker", - styleUrls: ['my-date-picker.component.css'], - templateUrl: 'my-date-picker.component.html', - providers: [LocaleService, UtilService, MYDP_VALUE_ACCESSOR], - encapsulation: ViewEncapsulation.None -}) - -export class MyDatePicker implements OnChanges, ControlValueAccessor { - @Input() options: any; - @Input() locale: string; - @Input() defaultMonth: string; - @Input() selDate: string; - @Input() placeholder: string; - @Input() selector: number; - @Output() dateChanged: EventEmitter = new EventEmitter(); - @Output() inputFieldChanged: EventEmitter = new EventEmitter(); - @Output() calendarViewChanged: EventEmitter = new EventEmitter(); - @Output() calendarToggle: EventEmitter = new EventEmitter(); - @Output() inputFocusBlur: EventEmitter = new EventEmitter(); - - onChangeCb: (_: any) => void = () => { }; - onTouchedCb: () => void = () => { }; - - showSelector: boolean = false; - visibleMonth: IMyMonth = {monthTxt: "", monthNbr: 0, year: 0}; - selectedMonth: IMyMonth = {monthTxt: "", monthNbr: 0, year: 0}; - selectedDate: IMyDate = {year: 0, month: 0, day: 0}; - weekDays: Array = []; - dates: Array = []; - selectionDayTxt: string = ""; - invalidDate: boolean = false; - disableTodayBtn: boolean = false; - dayIdx: number = 0; - weekDayOpts: Array = ["su", "mo", "tu", "we", "th", "fr", "sa"]; - autoFillOpts: IMyInputAutoFill = {separator: "", formatParts: [], enabled: true}; - - editMonth: boolean = false; - invalidMonth: boolean = false; - editYear: boolean = false; - invalidYear: boolean = false; - - prevMonthDisabled: boolean = false; - nextMonthDisabled: boolean = false; - prevYearDisabled: boolean = false; - nextYearDisabled: boolean = false; - - PREV_MONTH: number = 1; - CURR_MONTH: number = 2; - NEXT_MONTH: number = 3; - - MIN_YEAR: number = 1000; - MAX_YEAR: number = 9999; - - // Default options - opts: IMyOptions = { - dayLabels: {}, - monthLabels: {}, - dateFormat: "", - showTodayBtn: true, - todayBtnTxt: "", - firstDayOfWeek: "", - sunHighlight: true, - markCurrentDay: true, - disableUntil: {year: 0, month: 0, day: 0}, - disableSince: {year: 0, month: 0, day: 0}, - disableDays: > [], - enableDays: > [], - disableDateRange: {begin: {year: 0, month: 0, day: 0}, end: {year: 0, month: 0, day: 0}}, - disableWeekends: false, - showWeekNumbers: false, - height: "34px", - width: "100%", - selectionTxtFontSize: "18px", - inline: false, - showClearDateBtn: true, - alignSelectorRight: false, - openSelectorTopOfInput: false, - indicateInvalidDate: true, - editableDateField: true, - editableMonthAndYear: true, - disableHeaderButtons: true, - minYear: this.MIN_YEAR, - maxYear: this.MAX_YEAR, - componentDisabled: false, - inputValueRequired: false, - showSelectorArrow: true, - showInputField: true, - openSelectorOnInputClick: false, - inputAutoFill: true, - ariaLabelInputField: "Date input field", - ariaLabelClearDate: "Clear Date", - ariaLabelOpenCalendar: "Open Calendar", - ariaLabelPrevMonth: "Previous Month", - ariaLabelNextMonth: "Next Month", - ariaLabelPrevYear: "Previous Year", - ariaLabelNextYear: "Next Year" - }; - - constructor(public elem: ElementRef, private renderer: Renderer, private cdr: ChangeDetectorRef, private localeService: LocaleService, private utilService: UtilService) { - this.setLocaleOptions(); - renderer.listenGlobal("document", "click", (event: any) => { - if (this.showSelector && event.target && this.elem.nativeElement !== event.target && !this.elem.nativeElement.contains(event.target)) { - this.showSelector = false; - this.calendarToggle.emit(4); - } - if (this.opts.editableMonthAndYear && event.target && this.elem.nativeElement.contains(event.target)) { - this.resetMonthYearEdit(); - } - }); - } - - setLocaleOptions(): void { - let opts: IMyOptions = this.localeService.getLocaleOptions(this.locale); - Object.keys(opts).forEach((k) => { - (this.opts)[k] = opts[k]; - }); - } - - setOptions(): void { - if (this.options !== undefined) { - Object.keys(this.options).forEach((k) => { - (this.opts)[k] = this.options[k]; - }); - } - if (this.opts.minYear < this.MIN_YEAR) { - this.opts.minYear = this.MIN_YEAR; - } - if (this.opts.maxYear > this.MAX_YEAR) { - this.opts.maxYear = this.MAX_YEAR; - } - - let separator: string = this.utilService.getDateFormatSeparator(this.opts.dateFormat); - this.autoFillOpts = {separator: separator, formatParts: this.opts.dateFormat.split(separator), enabled: this.opts.inputAutoFill}; - } - - getComponentWidth(): string { - if (this.opts.showInputField) { - return this.opts.width; - } - else if (this.selectionDayTxt.length > 0 && this.opts.showClearDateBtn) { - return "60px"; - } - else { - return "30px"; - } - } - - getSelectorTopPosition(): string { - if (this.opts.openSelectorTopOfInput) { - return this.elem.nativeElement.children[0].offsetHeight + "px"; - } - } - - resetMonthYearEdit(): void { - this.editMonth = false; - this.editYear = false; - this.invalidMonth = false; - this.invalidYear = false; - } - - editMonthClicked(event: any): void { - event.stopPropagation(); - if (this.opts.editableMonthAndYear) { - this.editMonth = true; - } - } - - editYearClicked(event: any): void { - event.stopPropagation(); - if (this.opts.editableMonthAndYear) { - this.editYear = true; - } - } - - userDateInput(event: any): void { - this.invalidDate = false; - if (event.target.value.length === 0) { - this.clearDate(); - } - else { - let date: IMyDate = this.utilService.isDateValid(event.target.value, this.opts.dateFormat, this.opts.minYear, this.opts.maxYear, this.opts.disableUntil, this.opts.disableSince, this.opts.disableWeekends, this.opts.disableDays, this.opts.disableDateRange, this.opts.monthLabels, this.opts.enableDays); - if (date.day !== 0 && date.month !== 0 && date.year !== 0) { - this.selectDate(date); - } - else { - this.invalidDate = true; - } - } - if (this.invalidDate) { - this.inputFieldChanged.emit({value: event.target.value, dateFormat: this.opts.dateFormat, valid: !(event.target.value.length === 0 || this.invalidDate)}); - this.onChangeCb(""); - this.onTouchedCb(); - } - } - - onFocusInput(event: any): void { - this.inputFocusBlur.emit({reason: 1, value: event.target.value}); - } - - lostFocusInput(event: any): void { - this.selectionDayTxt = event.target.value; - this.onTouchedCb(); - this.inputFocusBlur.emit({reason: 2, value: event.target.value}); - } - - userMonthInput(event: any): void { - if (event.keyCode === 13 || event.keyCode === 37 || event.keyCode === 39) { - return; - } - - this.invalidMonth = false; - - let m: number = this.utilService.isMonthLabelValid(event.target.value, this.opts.monthLabels); - if (m !== -1) { - this.editMonth = false; - if (m !== this.visibleMonth.monthNbr) { - this.visibleMonth = {monthTxt: this.monthText(m), monthNbr: m, year: this.visibleMonth.year}; - this.generateCalendar(m, this.visibleMonth.year, true); - } - } - else { - this.invalidMonth = true; - } - } - - userYearInput(event: any): void { - if (event.keyCode === 13 || event.keyCode === 37 || event.keyCode === 39) { - return; - } - - this.invalidYear = false; - - let y: number = this.utilService.isYearLabelValid(Number(event.target.value), this.opts.minYear, this.opts.maxYear); - if (y !== -1) { - this.editYear = false; - if (y !== this.visibleMonth.year) { - this.visibleMonth = {monthTxt: this.visibleMonth.monthTxt, monthNbr: this.visibleMonth.monthNbr, year: y}; - this.generateCalendar(this.visibleMonth.monthNbr, y, true); - } - } - else { - this.invalidYear = true; - } - } - - isTodayDisabled(): void { - this.disableTodayBtn = this.utilService.isDisabledDay(this.getToday(), this.opts.disableUntil, this.opts.disableSince, this.opts.disableWeekends, this.opts.disableDays, this.opts.disableDateRange, this.opts.enableDays); - } - - parseOptions(): void { - if (this.locale) { - this.setLocaleOptions(); - } - this.setOptions(); - this.isTodayDisabled(); - this.dayIdx = this.weekDayOpts.indexOf(this.opts.firstDayOfWeek); - if (this.dayIdx !== -1) { - let idx: number = this.dayIdx; - for (let i = 0; i < this.weekDayOpts.length; i++) { - this.weekDays.push(this.opts.dayLabels[this.weekDayOpts[idx]]); - idx = this.weekDayOpts[idx] === "sa" ? 0 : idx + 1; - } - } - } - - writeValue(value: Object): void { - if (value && value["date"]) { - this.updateDateValue(this.parseSelectedDate(value["date"]), false); - } - else if (value === "") { - this.updateDateValue({year: 0, month: 0, day: 0}, true); - } - } - - registerOnChange(fn: any): void { - this.onChangeCb = fn; - } - - registerOnTouched(fn: any): void { - this.onTouchedCb = fn; - } - - ngOnChanges(changes: SimpleChanges): void { - if (changes.hasOwnProperty("selector") && changes["selector"].currentValue > 0) { - this.openBtnClicked(); - } - - if (changes.hasOwnProperty("placeholder")) { - this.placeholder = changes["placeholder"].currentValue; - } - - if (changes.hasOwnProperty("locale")) { - this.locale = changes["locale"].currentValue; - } - - if (changes.hasOwnProperty("options")) { - this.options = changes["options"].currentValue; - } - - this.weekDays.length = 0; - this.parseOptions(); - - if (changes.hasOwnProperty("defaultMonth")) { - let dm: string = changes["defaultMonth"].currentValue; - if (dm !== null && dm !== undefined && dm !== "") { - this.selectedMonth = this.parseSelectedMonth(dm); - } - else { - this.selectedMonth = {monthTxt: "", monthNbr: 0, year: 0}; - } - } - - if (changes.hasOwnProperty("selDate")) { - let sd: any = changes["selDate"]; - if (sd.currentValue !== null && sd.currentValue !== undefined && sd.currentValue !== "" && Object.keys(sd.currentValue).length !== 0) { - this.selectedDate = this.parseSelectedDate(sd.currentValue); - setTimeout(() => { - this.onChangeCb(this.getDateModel(this.selectedDate)); - }); - } - else { - // Do not clear on init - if (!sd.isFirstChange()) { - this.clearDate(); - } - } - } - if (this.opts.inline) { - this.setVisibleMonth(); - } - else if (this.showSelector) { - this.generateCalendar(this.visibleMonth.monthNbr, this.visibleMonth.year, false); - } - } - - removeBtnClicked(): void { - // Remove date button clicked - this.clearDate(); - if (this.showSelector) { - this.calendarToggle.emit(3); - } - this.showSelector = false; - } - - openBtnClicked(): void { - // Open selector button clicked - this.showSelector = !this.showSelector; - if (this.showSelector) { - this.setVisibleMonth(); - this.calendarToggle.emit(1); - } - else { - this.calendarToggle.emit(3); - } - } - - setVisibleMonth(): void { - // Sets visible month of calendar - let y: number = 0, m: number = 0; - if (!this.utilService.isInitializedDate(this.selectedDate)) { - if (this.selectedMonth.year === 0 && this.selectedMonth.monthNbr === 0) { - let today: IMyDate = this.getToday(); - y = today.year; - m = today.month; - } else { - y = this.selectedMonth.year; - m = this.selectedMonth.monthNbr; - } - } - else { - y = this.selectedDate.year; - m = this.selectedDate.month; - } - this.visibleMonth = {monthTxt: this.opts.monthLabels[m], monthNbr: m, year: y}; - - // Create current month - this.generateCalendar(m, y, true); - } - - prevMonth(): void { - // Previous month from calendar - let d: Date = this.getDate(this.visibleMonth.year, this.visibleMonth.monthNbr, 1); - d.setMonth(d.getMonth() - 1); - - let y: number = d.getFullYear(); - let m: number = d.getMonth() + 1; - - this.visibleMonth = {monthTxt: this.monthText(m), monthNbr: m, year: y}; - this.generateCalendar(m, y, true); - } - - nextMonth(): void { - // Next month from calendar - let d: Date = this.getDate(this.visibleMonth.year, this.visibleMonth.monthNbr, 1); - d.setMonth(d.getMonth() + 1); - - let y: number = d.getFullYear(); - let m: number = d.getMonth() + 1; - - this.visibleMonth = {monthTxt: this.monthText(m), monthNbr: m, year: y}; - this.generateCalendar(m, y, true); - } - - prevYear(): void { - // Previous year from calendar - this.visibleMonth.year--; - this.generateCalendar(this.visibleMonth.monthNbr, this.visibleMonth.year, true); - } - - nextYear(): void { - // Next year from calendar - this.visibleMonth.year++; - this.generateCalendar(this.visibleMonth.monthNbr, this.visibleMonth.year, true); - } - - todayClicked(): void { - // Today button clicked - let today: IMyDate = this.getToday(); - this.selectDate(today); - if (this.opts.inline && today.year !== this.visibleMonth.year || today.month !== this.visibleMonth.monthNbr) { - this.visibleMonth = {monthTxt: this.opts.monthLabels[today.month], monthNbr: today.month, year: today.year}; - this.generateCalendar(today.month, today.year, true); - } - } - - cellClicked(cell: any): void { - // Cell clicked on the calendar - if (cell.cmo === this.PREV_MONTH) { - // Previous month day - this.prevMonth(); - } - else if (cell.cmo === this.CURR_MONTH) { - // Current month day - if date is already selected clear it - if (cell.dateObj.year === this.selectedDate.year && cell.dateObj.month === this.selectedDate.month && cell.dateObj.day === this.selectedDate.day) { - this.clearDate(); - } - else { - this.selectDate(cell.dateObj); - } - } - else if (cell.cmo === this.NEXT_MONTH) { - // Next month day - this.nextMonth(); - } - this.resetMonthYearEdit(); - } - - cellKeyDown(event: any, cell: any) { - // Cell keyboard handling - if ((event.keyCode === 13 || event.keyCode === 32) && !cell.disabled) { - event.preventDefault(); - this.cellClicked(cell); - } - } - - clearDate(): void { - // Clears the date and notifies parent using callbacks and value accessor - let date: IMyDate = {year: 0, month: 0, day: 0}; - this.dateChanged.emit({date: date, jsdate: null, formatted: "", epoc: 0}); - this.onChangeCb(""); - this.onTouchedCb(); - this.updateDateValue(date, true); - } - - selectDate(date: IMyDate): void { - // Date selected, notifies parent using callbacks and value accessor - let dateModel: IMyDateModel = this.getDateModel(date); - this.dateChanged.emit(dateModel); - this.onChangeCb(dateModel); - this.onTouchedCb(); - this.updateDateValue(date, false); - if (this.showSelector) { - this.calendarToggle.emit(2); - } - this.showSelector = false; - } - - updateDateValue(date: IMyDate, clear: boolean): void { - // Updates date values - this.selectedDate = date; - this.selectionDayTxt = clear ? "" : this.formatDate(date); - this.inputFieldChanged.emit({value: this.selectionDayTxt, dateFormat: this.opts.dateFormat, valid: !clear}); - this.invalidDate = false; - } - - getDateModel(date: IMyDate): IMyDateModel { - // Creates a date model object from the given parameter - return {date: date, jsdate: this.getDate(date.year, date.month, date.day), formatted: this.formatDate(date), epoc: Math.round(this.getTimeInMilliseconds(date) / 1000.0)}; - } - - preZero(val: string): string { - // Prepend zero if smaller than 10 - return parseInt(val) < 10 ? "0" + val : val; - } - - formatDate(val: any): string { - // Returns formatted date string, if mmm is part of dateFormat returns month as a string - let formatted: string = this.opts.dateFormat.replace("yyyy", val.year).replace("dd", this.preZero(val.day)); - return this.opts.dateFormat.indexOf("mmm") !== -1 ? formatted.replace("mmm", this.monthText(val.month)) : formatted.replace("mm", this.preZero(val.month)); - } - - monthText(m: number): string { - // Returns month as a text - return this.opts.monthLabels[m]; - } - - monthStartIdx(y: number, m: number): number { - // Month start index - let d = new Date(); - d.setDate(1); - d.setMonth(m - 1); - d.setFullYear(y); - let idx = d.getDay() + this.sundayIdx(); - return idx >= 7 ? idx - 7 : idx; - } - - daysInMonth(m: number, y: number): number { - // Return number of days of current month - return new Date(y, m, 0).getDate(); - } - - daysInPrevMonth(m: number, y: number): number { - // Return number of days of the previous month - let d: Date = this.getDate(y, m, 1); - d.setMonth(d.getMonth() - 1); - return this.daysInMonth(d.getMonth() + 1, d.getFullYear()); - } - - isCurrDay(d: number, m: number, y: number, cmo: number, today: IMyDate): boolean { - // Check is a given date the today - return d === today.day && m === today.month && y === today.year && cmo === this.CURR_MONTH; - } - - getToday(): IMyDate { - let date: Date = new Date(); - return {year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate()}; - } - - getTimeInMilliseconds(date: IMyDate): number { - return this.getDate(date.year, date.month, date.day).getTime(); - } - - getDayNumber(date: IMyDate): number { - // Get day number: su=0, mo=1, tu=2, we=3 ... - let d: Date = this.getDate(date.year, date.month, date.day); - return d.getDay(); - } - - getWeekday(date: IMyDate): string { - // Get weekday: su, mo, tu, we ... - return this.weekDayOpts[this.getDayNumber(date)]; - } - - getDate(year: number, month: number, day: number): Date { - // Creates a date object from given year, month and day - return new Date(year, month - 1, day, 0, 0, 0, 0); - } - - sundayIdx(): number { - // Index of Sunday day - return this.dayIdx > 0 ? 7 - this.dayIdx : 0; - } - - generateCalendar(m: number, y: number, notifyChange: boolean): void { - this.dates.length = 0; - let today: IMyDate = this.getToday(); - let monthStart: number = this.monthStartIdx(y, m); - let dInThisM: number = this.daysInMonth(m, y); - let dInPrevM: number = this.daysInPrevMonth(m, y); - - let dayNbr: number = 1; - let cmo: number = this.PREV_MONTH; - for (let i = 1; i < 7; i++) { - let week: Array = []; - if (i === 1) { - // First week - let pm = dInPrevM - monthStart + 1; - // Previous month - for (let j = pm; j <= dInPrevM; j++) { - let date: IMyDate = {year: y, month: m - 1, day: j}; - week.push({dateObj: date, cmo: cmo, currDay: this.isCurrDay(j, m, y, cmo, today), dayNbr: this.getDayNumber(date), disabled: this.utilService.isDisabledDay(date, this.opts.disableUntil, this.opts.disableSince, this.opts.disableWeekends, this.opts.disableDays, this.opts.disableDateRange, this.opts.enableDays)}); - } - - cmo = this.CURR_MONTH; - // Current month - let daysLeft: number = 7 - week.length; - for (let j = 0; j < daysLeft; j++) { - let date: IMyDate = {year: y, month: m, day: dayNbr}; - week.push({dateObj: date, cmo: cmo, currDay: this.isCurrDay(dayNbr, m, y, cmo, today), dayNbr: this.getDayNumber(date), disabled: this.utilService.isDisabledDay(date, this.opts.disableUntil, this.opts.disableSince, this.opts.disableWeekends, this.opts.disableDays, this.opts.disableDateRange, this.opts.enableDays)}); - dayNbr++; - } - } - else { - // Rest of the weeks - for (let j = 1; j < 8; j++) { - if (dayNbr > dInThisM) { - // Next month - dayNbr = 1; - cmo = this.NEXT_MONTH; - } - let date: IMyDate = {year: y, month: cmo === this.CURR_MONTH ? m : m + 1, day: dayNbr}; - week.push({dateObj: date, cmo: cmo, currDay: this.isCurrDay(dayNbr, m, y, cmo, today), dayNbr: this.getDayNumber(date), disabled: this.utilService.isDisabledDay(date, this.opts.disableUntil, this.opts.disableSince, this.opts.disableWeekends, this.opts.disableDays, this.opts.disableDateRange, this.opts.enableDays)}); - dayNbr++; - } - } - let weekNbr: number = this.opts.showWeekNumbers && this.opts.firstDayOfWeek === "mo" ? this.utilService.getWeekNumber(week[0].dateObj) : 0; - this.dates.push({week: week, weekNbr: weekNbr}); - } - - this.setHeaderBtnDisabledState(m, y); - - if (notifyChange) { - // Notify parent - this.calendarViewChanged.emit({year: y, month: m, first: {number: 1, weekday: this.getWeekday({year: y, month: m, day: 1})}, last: {number: dInThisM, weekday: this.getWeekday({year: y, month: m, day: dInThisM})}}); - } - } - - parseSelectedDate(selDate: any): IMyDate { - // Parse selDate value - it can be string or IMyDate object - let date: IMyDate = {day: 0, month: 0, year: 0}; - if (typeof selDate === "string") { - let sd: string = selDate; - date.day = this.utilService.parseDatePartNumber(this.opts.dateFormat, sd, "dd"); - - date.month = this.opts.dateFormat.indexOf("mmm") !== -1 - ? this.utilService.parseDatePartMonthName(this.opts.dateFormat, sd, "mmm", this.opts.monthLabels) - : this.utilService.parseDatePartNumber(this.opts.dateFormat, sd, "mm"); - - date.year = this.utilService.parseDatePartNumber(this.opts.dateFormat, sd, "yyyy"); - } - else if (typeof selDate === "object") { - date = selDate; - } - this.selectionDayTxt = this.formatDate(date); - return date; - } - - parseSelectedMonth(ms: string): IMyMonth { - return this.utilService.parseDefaultMonth(ms); - } - - setHeaderBtnDisabledState(m: number, y: number): void { - let dpm: boolean = false; - let dpy: boolean = false; - let dnm: boolean = false; - let dny: boolean = false; - if (this.opts.disableHeaderButtons) { - dpm = this.utilService.isMonthDisabledByDisableUntil({year: m === 1 ? y - 1 : y, month: m === 1 ? 12 : m - 1, day: this.daysInMonth(m === 1 ? 12 : m - 1, m === 1 ? y - 1 : y)}, this.opts.disableUntil); - dpy = this.utilService.isMonthDisabledByDisableUntil({year: y - 1, month: m, day: this.daysInMonth(m, y - 1)}, this.opts.disableUntil); - dnm = this.utilService.isMonthDisabledByDisableSince({year: m === 12 ? y + 1 : y, month: m === 12 ? 1 : m + 1, day: 1}, this.opts.disableSince); - dny = this.utilService.isMonthDisabledByDisableSince({year: y + 1, month: m, day: 1}, this.opts.disableSince); - } - this.prevMonthDisabled = m === 1 && y === this.opts.minYear || dpm; - this.prevYearDisabled = y - 1 < this.opts.minYear || dpy; - this.nextMonthDisabled = m === 12 && y === this.opts.maxYear || dnm; - this.nextYearDisabled = y + 1 > this.opts.maxYear || dny; - } -} diff --git a/portal-4cli/src/app/utils/my-date-picker/my-date-picker.module.ts b/portal-4cli/src/app/utils/my-date-picker/my-date-picker.module.ts deleted file mode 100644 index a638a905..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/my-date-picker.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CommonModule } from "@angular/common"; -import { FormsModule } from "@angular/forms"; -import { NgModule } from "@angular/core"; -import { MyDatePicker } from "./my-date-picker.component"; -import { FocusDirective } from "./directives/my-date-picker.focus.directive"; -import { InputAutoFillDirective } from "./directives/my-date-picker.input.auto.fill.directive"; - -@NgModule({ - imports: [CommonModule, FormsModule], - declarations: [MyDatePicker, FocusDirective, InputAutoFillDirective], - exports: [MyDatePicker, FocusDirective, InputAutoFillDirective] -}) -export class MyDatePickerModule { -} diff --git a/portal-4cli/src/app/utils/my-date-picker/services/my-date-picker.locale.service.ts b/portal-4cli/src/app/utils/my-date-picker/services/my-date-picker.locale.service.ts deleted file mode 100644 index 44c209e9..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/services/my-date-picker.locale.service.ts +++ /dev/null @@ -1,232 +0,0 @@ -import { Injectable } from "@angular/core"; -import { IMyLocales, IMyOptions } from "../interfaces/index"; - -@Injectable() -export class LocaleService { - private locales: IMyLocales = { - "en": { - dayLabels: {su: "Sun", mo: "Mon", tu: "Tue", we: "Wed", th: "Thu", fr: "Fri", sa: "Sat"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "May", 6: "Jun", 7: "Jul", 8: "Aug", 9: "Sep", 10: "Oct", 11: "Nov", 12: "Dec" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "Today", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "he": { - dayLabels: {su: "רא", mo: "שנ", tu: "של", we: "רב", th: "חמ", fr: "שי", sa: "שב"}, - monthLabels: { 1: "ינו", 2: "פבר", 3: "מרץ", 4: "אפר", 5: "מאי", 6: "יונ", 7: "יול", 8: "אוג", 9: "ספט", 10: "אוק", 11: "נוב", 12: "דצמ" }, - dateFormat: "dd/mm/yyyy", - todayBtnTxt: "היום", - firstDayOfWeek: "su", - sunHighlight: false - }, - "ja": { - dayLabels: {su: "日", mo: "月", tu: "火", we: "水", th: "木", fr: "金", sa: "土"}, - monthLabels: {1: "1月", 2: "2月", 3: "3月", 4: "4月", 5: "5月", 6: "6月", 7: "7月", 8: "8月", 9: "9月", 10: "10月", 11: "11月", 12: "12月"}, - dateFormat: "yyyy.mm.dd", - todayBtnTxt: "今日", - sunHighlight: false - }, - "fr": { - dayLabels: {su: "Dim", mo: "Lun", tu: "Mar", we: "Mer", th: "Jeu", fr: "Ven", sa: "Sam"}, - monthLabels: {1: "Jan", 2: "Fév", 3: "Mar", 4: "Avr", 5: "Mai", 6: "Juin", 7: "Juil", 8: "Aoû", 9: "Sep", 10: "Oct", 11: "Nov", 12: "Déc"}, - dateFormat: "dd/mm/yyyy", - todayBtnTxt: "Aujourd'hui", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "fi": { - dayLabels: {su: "Su", mo: "Ma", tu: "Ti", we: "Ke", th: "To", fr: "Pe", sa: "La"}, - monthLabels: {1: "Tam", 2: "Hel", 3: "Maa", 4: "Huh", 5: "Tou", 6: "Kes", 7: "Hei", 8: "Elo", 9: "Syy", 10: "Lok", 11: "Mar", 12: "Jou"}, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Tänään", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "es": { - dayLabels: {su: "Do", mo: "Lu", tu: "Ma", we: "Mi", th: "Ju", fr: "Vi", sa: "Sa"}, - monthLabels: {1: "Ene", 2: "Feb", 3: "Mar", 4: "Abr", 5: "May", 6: "Jun", 7: "Jul", 8: "Ago", 9: "Sep", 10: "Oct", 11: "Nov", 12: "Dic"}, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Hoy", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "hu": { - dayLabels: {su: "Vas", mo: "Hét", tu: "Kedd", we: "Sze", th: "Csü", fr: "Pén", sa: "Szo"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Már", 4: "Ápr", 5: "Máj", 6: "Jún", 7: "Júl", 8: "Aug", 9: "Szep", 10: "Okt", 11: "Nov", 12: "Dec" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "Ma", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "sv": { - dayLabels: {su: "Sön", mo: "Mån", tu: "Tis", we: "Ons", th: "Tor", fr: "Fre", sa: "Lör"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Maj", 6: "Jun", 7: "Jul", 8: "Aug", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Dec" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "Idag", - firstDayOfWeek: "mo", - sunHighlight: false - }, - "nl": { - dayLabels: {su: "Zon", mo: "Maa", tu: "Din", we: "Woe", th: "Don", fr: "Vri", sa: "Zat"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Mei", 6: "Jun", 7: "Jul", 8: "Aug", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Dec" }, - dateFormat: "dd-mm-yyyy", - todayBtnTxt: "Vandaag", - firstDayOfWeek: "mo", - sunHighlight: false - }, - "ru": { - dayLabels: {su: "Вс", mo: "Пн", tu: "Вт", we: "Ср", th: "Чт", fr: "Пт", sa: "Сб"}, - monthLabels: { 1: "Янв", 2: "Фев", 3: "Март", 4: "Апр", 5: "Май", 6: "Июнь", 7: "Июль", 8: "Авг", 9: "Сент", 10: "Окт", 11: "Ноя", 12: "Дек" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Сегодня", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "uk": { - dayLabels: {su: "Нд", mo: "Пн", tu: "Вт", we: "Ср", th: "Чт", fr: "Пт", sa: "Сб"}, - monthLabels: { 1: "Січ", 2: "Лют", 3: "Бер", 4: "Кві", 5: "Тра", 6: "Чер", 7: "Лип", 8: "Сер", 9: "Вер", 10: "Жов", 11: "Лис", 12: "Гру" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Сьогодні", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "no": { - dayLabels: {su: "Søn", mo: "Man", tu: "Tir", we: "Ons", th: "Tor", fr: "Fre", sa: "Lør"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Mai", 6: "Jun", 7: "Jul", 8: "Aug", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Des" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "I dag", - firstDayOfWeek: "mo", - sunHighlight: false - }, - "tr": { - dayLabels: {su: "Paz", mo: "Pzt", tu: "Sal", we: "Çar", th: "Per", fr: "Cum", sa: "Cmt"}, - monthLabels: { 1: "Oca", 2: "Şub", 3: "Mar", 4: "Nis", 5: "May", 6: "Haz", 7: "Tem", 8: "Ağu", 9: "Eyl", 10: "Eki", 11: "Kas", 12: "Ara" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Bugün", - firstDayOfWeek: "mo", - sunHighlight: false - }, - "pt-br": { - dayLabels: {su: "Dom", mo: "Seg", tu: "Ter", we: "Qua", th: "Qui", fr: "Sex", sa: "Sab"}, - monthLabels: { 1: "Jan", 2: "Fev", 3: "Mar", 4: "Abr", 5: "Mai", 6: "Jun", 7: "Jul", 8: "Ago", 9: "Set", 10: "Out", 11: "Nov", 12: "Dez" }, - dateFormat: "dd/mm/yyyy", - todayBtnTxt: "Hoje", - firstDayOfWeek: "su", - sunHighlight: true - }, - "de": { - dayLabels: {su: "So", mo: "Mo", tu: "Di", we: "Mi", th: "Do", fr: "Fr", sa: "Sa"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mär", 4: "Apr", 5: "Mai", 6: "Jun", 7: "Jul", 8: "Aug", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Dez" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Heute", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "it": { - dayLabels: { su: "Dom", mo: "Lun", tu: "Mar", we: "Mer", th: "Gio", fr: "Ven", sa: "Sab" }, - monthLabels: { 1: "Gen", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Mag", 6: "Giu", 7: "Lug", 8: "Ago", 9: "Set", 10: "Ott", 11: "Nov", 12: "Dic" }, - dateFormat: "dd/mm/yyyy", - todayBtnTxt: "Oggi", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "it-ch": { - dayLabels: { su: "Dom", mo: "Lun", tu: "Mar", we: "Mer", th: "Gio", fr: "Ven", sa: "Sab" }, - monthLabels: { 1: "Gen", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Mag", 6: "Giu", 7: "Lug", 8: "Ago", 9: "Set", 10: "Ott", 11: "Nov", 12: "Dic" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Oggi", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "pl": { - dayLabels: { su: "Nie", mo: "Pon", tu: "Wto", we: "Śro", th: "Czw", fr: "Pią", sa: "Sob" }, - monthLabels: { 1: "Sty", 2: "Lut", 3: "Mar", 4: "Kwi", 5: "Maj", 6: "Cze", 7: "Lip", 8: "Sie", 9: "Wrz", 10: "Paź", 11: "Lis", 12: "Gru" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "Dzisiaj", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "my": { - dayLabels: {su: "တနင်္ဂနွေ", mo: "တနင်္လာ", tu: "အင်္ဂါ", we: "ဗုဒ္ဓဟူး", th: "ကြသပတေး", fr: "သောကြာ", sa: "စနေ"}, - monthLabels: { 1: "ဇန်နဝါရီ", 2: "ဖေဖော်ဝါရီ", 3: "မတ်", 4: "ဧပြီ", 5: "မေ", 6: "ဇွန်", 7: "ဇူလိုင်", 8: "ဩဂုတ်", 9: "စက်တင်ဘာ", 10: "အောက်တိုဘာ", 11: "နိုဝင်ဘာ", 12: "ဒီဇင်ဘာ" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "ယနေ့", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "sk": { - dayLabels: { su: "Ne", mo: "Po", tu: "Ut", we: "St", th: "Št", fr: "Pi", sa: "So" }, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Máj", 6: "Jún", 7: "Júl", 8: "Aug", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Dec" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Dnes", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "sl": { - dayLabels: { su: "Ned", mo: "Pon", tu: "Tor", we: "Sre", th: "Čet", fr: "Pet", sa: "Sob" }, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Maj", 6: "Jun", 7: "Jul", 8: "Avg", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Dec" }, - dateFormat: "dd. mm. yyyy", - todayBtnTxt: "Danes", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "zh-cn": { - dayLabels: {su: "日", mo: "一", tu: "二", we: "三", th: "四", fr: "五", sa: "六"}, - monthLabels: { 1: "1月", 2: "2月", 3: "3月", 4: "4月", 5: "5月", 6: "6月", 7: "7月", 8: "8月", 9: "9月", 10: "10月", 11: "11月", 12: "12月" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "今天", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "ro": { - dayLabels: {su: "du", mo: "lu", tu: "ma", we: "mi", th: "jo", fr: "vi", sa: "sa"}, - monthLabels: { 1: "ian", 2: "feb", 3: "mart", 4: "apr", 5: "mai", 6: "iun", 7: "iul", 8: "aug", 9: "sept", 10: "oct", 11: "nov", 12: "dec" }, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Astăzi", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "ca": { - dayLabels: {su: "dg", mo: "dl", tu: "dt", we: "dc", th: "dj", fr: "dv", sa: "ds"}, - monthLabels: {1: "Gen", 2: "Febr", 3: "Març", 4: "Abr", 5: "Maig", 6: "Juny", 7: "Jul", 8: "Ag", 9: "Set", 10: "Oct", 11: "Nov", 12: "Des"}, - dateFormat: "dd.mm.yyyy", - todayBtnTxt: "Avui", - firstDayOfWeek: "mo", - sunHighlight: true, - }, - "id": { - dayLabels: {su: "Min", mo: "Sen", tu: "Sel", we: "Rab", th: "Kam", fr: "Jum", sa: "Sab"}, - monthLabels: {1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "Mei", 6: "Jun", 7: "Jul", 8: "Ags", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Des"}, - dateFormat: "dd-mm-yyyy", - todayBtnTxt: "Hari ini", - firstDayOfWeek: "su", - sunHighlight: true - }, - "en-au": { - dayLabels: {su: "Sun", mo: "Mon", tu: "Tue", we: "Wed", th: "Thu", fr: "Fri", sa: "Sat"}, - monthLabels: { 1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "May", 6: "Jun", 7: "Jul", 8: "Aug", 9: "Sep", 10: "Oct", 11: "Nov", 12: "Dec" }, - dateFormat: "dd/mm/yyyy", - todayBtnTxt: "Today", - firstDayOfWeek: "mo", - sunHighlight: true - }, - "am-et": { - dayLabels: {su: "እሑድ", mo: "ሰኞ", tu: "ማክሰኞ", we: "ረቡዕ", th: "ሐሙስ", fr: "ዓርብ", sa: "ቅዳሜ"}, - monthLabels: { 1: "ጃንዩ", 2: "ፌብሩ", 3: "ማርች", 4: "ኤፕረ", 5: "ሜይ", 6: "ጁን", 7: "ጁላይ", 8: "ኦገስ", 9: "ሴፕቴ", 10: "ኦክተ", 11: "ኖቬም", 12: "ዲሴም" }, - dateFormat: "yyyy-mm-dd", - todayBtnTxt: "ዛሬ", - firstDayOfWeek: "mo", - sunHighlight: true - } - }; - - getLocaleOptions(locale: string): IMyOptions { - if (locale && this.locales.hasOwnProperty(locale)) { - // User given locale - return this.locales[locale]; - } - // Default: en - return this.locales["en"]; - } -} diff --git a/portal-4cli/src/app/utils/my-date-picker/services/my-date-picker.util.service.ts b/portal-4cli/src/app/utils/my-date-picker/services/my-date-picker.util.service.ts deleted file mode 100644 index 98b51bca..00000000 --- a/portal-4cli/src/app/utils/my-date-picker/services/my-date-picker.util.service.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { Injectable } from "@angular/core"; -import { IMyDate } from "../interfaces/my-date.interface"; -import { IMyDateRange } from "../interfaces/my-date-range.interface"; -import { IMyMonth } from "../interfaces/my-month.interface"; -import { IMyMonthLabels } from "../interfaces/my-month-labels.interface"; - -@Injectable() -export class UtilService { - isDateValid(dateStr: string, dateFormat: string, minYear: number, maxYear: number, disableUntil: IMyDate, disableSince: IMyDate, disableWeekends: boolean, disableDays: Array, disableDateRange: IMyDateRange, monthLabels: IMyMonthLabels, enableDays: Array): IMyDate { - let returnDate: IMyDate = {day: 0, month: 0, year: 0}; - let daysInMonth: Array = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - let isMonthStr: boolean = this.getDatePartIndex(dateFormat, "mmm") !== -1; - - if (dateStr.length !== dateFormat.length) { - return returnDate; - } - - let separator: string = this.getDateFormatSeparator(dateFormat); - - let parts: Array = dateStr.split(separator); - if (parts.length !== 3) { - return returnDate; - } - - let day: number = this.parseDatePartNumber(dateFormat, dateStr, "dd"); - let month: number = isMonthStr ? this.parseDatePartMonthName(dateFormat, dateStr, "mmm", monthLabels) : this.parseDatePartNumber(dateFormat, dateStr, "mm"); - let year: number = this.parseDatePartNumber(dateFormat, dateStr, "yyyy"); - - if (day !== -1 && month !== -1 && year !== -1) { - if (year < minYear || year > maxYear || month < 1 || month > 12) { - return returnDate; - } - - let date: IMyDate = {year: year, month: month, day: day}; - - if (this.isDisabledDay(date, disableUntil, disableSince, disableWeekends, disableDays, disableDateRange, enableDays)) { - return returnDate; - } - - if (year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0)) { - daysInMonth[1] = 29; - } - - if (day < 1 || day > daysInMonth[month - 1]) { - return returnDate; - } - - // Valid date - return date; - } - return returnDate; - } - - getDateFormatSeparator(dateFormat: string): string { - return dateFormat.replace(/[dmy]/g, "")[0]; - } - - isMonthLabelValid(monthLabel: string, monthLabels: IMyMonthLabels): number { - for (let key = 1; key <= 12; key++) { - if (monthLabel.toLowerCase() === monthLabels[key].toLowerCase()) { - return key; - } - } - return -1; - } - - isYearLabelValid(yearLabel: number, minYear: number, maxYear: number): number { - if (yearLabel >= minYear && yearLabel <= maxYear) { - return yearLabel; - } - return -1; - } - - parseDatePartNumber(dateFormat: string, dateString: string, datePart: string): number { - let pos: number = this.getDatePartIndex(dateFormat, datePart); - if (pos !== -1) { - let value: string = dateString.substring(pos, pos + datePart.length); - if (!/^\d+$/.test(value)) { - return -1; - } - return parseInt(value); - } - return -1; - } - - parseDatePartMonthName(dateFormat: string, dateString: string, datePart: string, monthLabels: IMyMonthLabels): number { - let pos: number = this.getDatePartIndex(dateFormat, datePart); - if (pos !== -1) { - return this.isMonthLabelValid(dateString.substring(pos, pos + datePart.length), monthLabels); - } - return -1; - } - - getDatePartIndex(dateFormat: string, datePart: string): number { - return dateFormat.indexOf(datePart); - } - - parseDefaultMonth(monthString: string): IMyMonth { - let month: IMyMonth = {monthTxt: "", monthNbr: 0, year: 0}; - if (monthString !== "") { - let split = monthString.split(monthString.match(/[^0-9]/)[0]); - month.monthNbr = split[0].length === 2 ? parseInt(split[0]) : parseInt(split[1]); - month.year = split[0].length === 2 ? parseInt(split[1]) : parseInt(split[0]); - } - return month; - } - - isDisabledDay(date: IMyDate, disableUntil: IMyDate, disableSince: IMyDate, disableWeekends: boolean, disableDays: Array, disableDateRange: IMyDateRange, enableDays: Array): boolean { - for (let obj of enableDays) { - if (obj.year === date.year && obj.month === date.month && obj.day === date.day) { - return false; - } - } - - let dateMs: number = this.getTimeInMilliseconds(date); - if (this.isInitializedDate(disableUntil) && dateMs <= this.getTimeInMilliseconds(disableUntil)) { - return true; - } - - if (this.isInitializedDate(disableSince) && dateMs >= this.getTimeInMilliseconds(disableSince)) { - return true; - } - - if (disableWeekends) { - let dayNbr = this.getDayNumber(date); - if (dayNbr === 0 || dayNbr === 6) { - return true; - } - } - - for (let obj of disableDays) { - if (obj.year === date.year && obj.month === date.month && obj.day === date.day) { - return true; - } - } - - if (this.isInitializedDate(disableDateRange.begin) && this.isInitializedDate(disableDateRange.end) && dateMs >= this.getTimeInMilliseconds(disableDateRange.begin) && dateMs <= this.getTimeInMilliseconds(disableDateRange.end)) { - return true; - } - return false; - } - - getWeekNumber(date: IMyDate): number { - let d: Date = new Date(date.year, date.month - 1, date.day, 0, 0, 0, 0); - d.setDate(d.getDate() + (d.getDay() === 0 ? -3 : 4 - d.getDay())); - return Math.round(((d.getTime() - new Date(d.getFullYear(), 0, 4).getTime()) / 86400000) / 7) + 1; - } - - isMonthDisabledByDisableUntil(date: IMyDate, disableUntil: IMyDate): boolean { - return this.isInitializedDate(disableUntil) && this.getTimeInMilliseconds(date) <= this.getTimeInMilliseconds(disableUntil); - } - - isMonthDisabledByDisableSince(date: IMyDate, disableSince: IMyDate): boolean { - return this.isInitializedDate(disableSince) && this.getTimeInMilliseconds(date) >= this.getTimeInMilliseconds(disableSince); - } - - isInitializedDate(date: IMyDate): boolean { - return date.year !== 0 && date.month !== 0 && date.day !== 0; - } - - getTimeInMilliseconds(date: IMyDate): number { - return new Date(date.year, date.month - 1, date.day, 0, 0, 0, 0).getTime(); - } - - getDayNumber(date: IMyDate): number { - let d: Date = new Date(date.year, date.month - 1, date.day, 0, 0, 0, 0); - return d.getDay(); - } -} \ No newline at end of file diff --git a/portal-4cli/src/app/utils/number-utils.class.ts b/portal-4cli/src/app/utils/number-utils.class.ts deleted file mode 100644 index bc6e25ce..00000000 --- a/portal-4cli/src/app/utils/number-utils.class.ts +++ /dev/null @@ -1,31 +0,0 @@ - -export class NumberUtils{ - - - - public static roundNumber(num: number):any { - console.log("Trying to round number: "+ num); - var roundNum = null; - if(num >= 1000000){ - num=num/1000000; - num= Math.round(num); - roundNum = { "number": num, "size": "mi" }; - }else if( num >= 10000){ - num=num/1000; - num= Math.round(num); - roundNum = { "number": num, "size": "K" }; - }else if (num >= 100) { - num=num/100; - num= Math.round(num); - num=num*100; - roundNum = { "number": num, "size": "" }; - }else{ - roundNum = { "number": num, "size": "" }; - } - console.log("Rounded number: "+ roundNum.number + " "+ roundNum.size); - return roundNum; - } - - - -} diff --git a/portal-4cli/src/app/utils/paging.module.ts b/portal-4cli/src/app/utils/paging.module.ts deleted file mode 100644 index dbf53c87..00000000 --- a/portal-4cli/src/app/utils/paging.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import {pagingFormatterNoLoad} from './pagingFormatterNoLoad.component'; - -import {PagingFormatter} from './pagingFormatter.component'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule, RouterModule - ], - declarations: [ - pagingFormatterNoLoad, - PagingFormatter, - - - ], - exports: [ - pagingFormatterNoLoad, - PagingFormatter, - - - ] -}) -export class PagingModule { } diff --git a/portal-4cli/src/app/utils/pagingFormatter.component.ts b/portal-4cli/src/app/utils/pagingFormatter.component.ts deleted file mode 100644 index 09889eba..00000000 --- a/portal-4cli/src/app/utils/pagingFormatter.component.ts +++ /dev/null @@ -1,76 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {Router} from '@angular/router'; -import {DomSanitizer} from '@angular/platform-browser'; -//Usage Example -import {RouterHelper} from './routerHelper.class'; -import {OpenaireProperties} from './properties/openaireProperties'; - -@Component({ - selector: 'paging', - template: ` - - - - ` -}) - -export class PagingFormatter { - @Input() currentPage: number = 1; - @Input() size: number=10; - @Input() totalResults: number = 10; - @Input() baseUrl:string=""; - @Input() parameterNames:string[]; - @Input() parameterValues:string[]; - - public routerHelper:RouterHelper = new RouterHelper(); - - constructor ( private _router: Router, private sanitizer:DomSanitizer) { - } - - ngOnInit() { - - } - getTotalPages(){ - let total: number = 0; - let limit: number = OpenaireProperties.getPagingLimit(); - - var i:number =parseInt(''+(this.totalResults/this.size)); - total = (((this.totalResults/this.size) == i )? i :(i+1)) ; - - if((this.currentPage == limit) && (total > limit)) { - total = limit; - } else if((this.currentPage > limit) && (total > limit)) { - total = this.currentPage; - } - - return total; - } - - // onPage(pageNum: number){ - // return this.sanitizer.bypassSecurityTrustUrl( this.baseUrl+((this.baseUrl.indexOf("?") > -1 )?'&':'?')+ "page=" + (pageNum)); - // - // } -} diff --git a/portal-4cli/src/app/utils/pagingFormatterNoLoad.component.ts b/portal-4cli/src/app/utils/pagingFormatterNoLoad.component.ts deleted file mode 100644 index 2ae49f49..00000000 --- a/portal-4cli/src/app/utils/pagingFormatterNoLoad.component.ts +++ /dev/null @@ -1,76 +0,0 @@ -import {Component, Input, Output, EventEmitter} from '@angular/core'; - - -//Usage Example - -@Component({ - selector: 'paging-no-load', - template: ` - - - ` -}) - -export class pagingFormatterNoLoad { - @Input() public currentPage: number = 1; - // @Input() public navigateTo: string; - @Input() public term: string=''; - @Input() public size: number=10; - @Input() public totalResults: number = 10; - // @Input() public params; - - @Output() pageChange = new EventEmitter(); - - constructor () { - } - - ngOnInit() { - console.info("In paging -- CurrentPage:"+this.currentPage+" "+"total Pages = "+this.getTotalPages() +" Results num:"+this.totalResults); - } - getTotalPages(){ - var i= this.totalResults/this.size; - var integerI=parseInt(''+i); - return parseInt(''+((i==integerI)?i:i+1)); - } - onPrev(){ - this.currentPage=this.currentPage-1; - this.pageChange.emit({ - value: this.currentPage - }); - - } - - onNext(){ - - this.currentPage=this.currentPage+1; - this.pageChange.emit({ - value: this.currentPage - }); - } - onPage(pageNum: number){ - - this.currentPage=pageNum; - this.pageChange.emit({ - value: this.currentPage - }); - } -} diff --git a/portal-4cli/src/app/utils/pipes/claimsDatatable.pipe.ts b/portal-4cli/src/app/utils/pipes/claimsDatatable.pipe.ts deleted file mode 100644 index d05ca549..00000000 --- a/portal-4cli/src/app/utils/pipes/claimsDatatable.pipe.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Pipe, PipeTransform} from '@angular/core' - - -@Pipe({ - name: 'claimsDatatable' -}) -export class ClaimsDatatablePipe implements PipeTransform { - - transform(array: any[], args: any[]): any { - let query: string = args[0]; - let counter:any = args[1]; - let active: any = args[2]; - - active.page = 1; - - if (query) { - var result = array.filter(row=>this.filterAll(row, query)); - counter.count = result.length; - return result; - } - return array; - } - - filterAll(row: any, query: string) { - if(row.userMail.indexOf(query) > -1) { - return true; - } - if(row.targetType != 'project' && row.target.title.indexOf(query) > -1) { - return true; - } - if(row.sourceType != 'project' && row.source.title.indexOf(query) > -1) { - return true; - } - if(row.date.indexOf(query) > -1) { - return true; - } - - if(row.curatedBy != null && row.curatedBy.indexOf(query) > -1) { - return true; - } - - if(row.curationDate != null && row.curationDate.indexOf(query) > -1) { - return true; - } - - return false; - } -} diff --git a/portal-4cli/src/app/utils/pipes/contentProvidersDatatable.pipe.ts b/portal-4cli/src/app/utils/pipes/contentProvidersDatatable.pipe.ts deleted file mode 100644 index 2484e7aa..00000000 --- a/portal-4cli/src/app/utils/pipes/contentProvidersDatatable.pipe.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { Pipe, PipeTransform} from '@angular/core'; -import { Filter, Value} from '../../searchPages/searchUtils/searchHelperClasses.class'; -import { SearchUtilsClass } from '../../searchPages/searchUtils/searchUtils.class'; -import { ErrorCodes} from '../properties/openaireProperties'; - -@Pipe({ - name: 'contentProvidersDatatable' -}) -export class ContentProvidersDatatablePipe implements PipeTransform { - - transform(array: any[], args: any[]): any { - if(array.length > 0) { - let searchUtils: SearchUtilsClass = args[0]; - let filters:Filter[] = args[1]; - - - var errorCodes:ErrorCodes = new ErrorCodes(); - searchUtils.status = errorCodes.LOADING; - - var result = array.filter(row=>this.filterAll(row, searchUtils.keyword.toLowerCase(), filters)); - - let oldTotal = searchUtils.totalResults; - - searchUtils.totalResults = result.length; - - var errorCodes:ErrorCodes = new ErrorCodes(); - searchUtils.status = errorCodes.DONE; - if(searchUtils.totalResults == 0 ){ - searchUtils.status = errorCodes.NONE; - } - - if(oldTotal != searchUtils.totalResults) { - args[3].detectChanges(); - } - return result; - } - return []; - } - - filterAll(row: any, query: string, filters:Filter[]) { - let returnValue: boolean = false; - - if(query) { - if(row.title.name.toLowerCase().indexOf(query) > -1) { - returnValue = true; - } - - if(row.type.toLowerCase().indexOf(query) > -1) { - returnValue = true; - } - - if(row.countries && row.countries.length > 0) { - for(let country of row.countries) { - if(country.toLowerCase().indexOf(query) > -1) { - returnValue = true; - break; - } - } - } - - if(row.compatibility && row.compatibility.toLowerCase().indexOf(query) > -1) { - returnValue = true; - } - - if(row.organizations && row.organizations.length > 0) { - for(let organization of row.organizations) { - if(organization.name.toLowerCase().indexOf(query) > -1) { - returnValue = true; - break; - } - } - } - - if(!returnValue) { - return false; - } - } - - for (let filter of filters){ - if(filter.countSelectedValues > 0){ - for (let value of filter.values){ - if(value.selected == true){ - - // make it generic in future commit - let field:string = ""; - if(filter.title == "Type") { - field = "type"; - } else if(filter.title == "Compatibility Level") { - field = "compatibility"; - } - - if(row[field] == value.name) { - returnValue = true; - if(filter.filterOperator == "or") { - break; - } - } else { - if(filter.filterOperator == "and") { - return false; - } - returnValue = false; - } - } - } - if(!returnValue) { - return false; - } - } - } - - return true; - } -} diff --git a/portal-4cli/src/app/utils/pipes/safeHTML.pipe.ts b/portal-4cli/src/app/utils/pipes/safeHTML.pipe.ts deleted file mode 100644 index 5912a07c..00000000 --- a/portal-4cli/src/app/utils/pipes/safeHTML.pipe.ts +++ /dev/null @@ -1,13 +0,0 @@ -//our root app component -import { Pipe, PipeTransform} from '@angular/core' - -import { DomSanitizer } from '@angular/platform-browser' - - -@Pipe({ name: 'safeHtml'}) -export class SafeHtmlPipe implements PipeTransform { - constructor(private sanitized: DomSanitizer) {} - transform(value) { - return this.sanitized.bypassSecurityTrustHtml(value); - } -} diff --git a/portal-4cli/src/app/utils/piwik/piwik.service.ts b/portal-4cli/src/app/utils/piwik/piwik.service.ts deleted file mode 100644 index c3c17746..00000000 --- a/portal-4cli/src/app/utils/piwik/piwik.service.ts +++ /dev/null @@ -1,70 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response, Headers, RequestOptions, URLSearchParams} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; -import {Location} from '@angular/common'; - -import {OpenaireProperties} from '../properties/openaireProperties'; -import {StringUtils} from '../string-utils.class'; - - -@Injectable() -export class PiwikService { - private piwikbaseUrl:string = ""; - constructor(private http: Http, private location: Location ) {} - - trackView (title):any { - - var ua = this.getUserAgent(); - var referrer = this.getReferrer(); - if(typeof location !== 'undefined'){ - var url = OpenaireProperties.getPiwikBaseURL()+"&rec=1&url="+StringUtils.URIEncode(location.href)+"&action_name="+StringUtils.URIEncode(title)+ - ((ua != null && ua.length > 0)?('&ua='+StringUtils.URIEncode(ua)):'')+ - ((referrer != null && referrer.length > 0)?('&urlref='+StringUtils.URIEncode(referrer)):''); - console.log("Piwik - View: " + url); - - return this.http.get( url); - // .do(request => console.info("Piwik request completed" )); - - } - } - trackDownload (downloadURL):any { - var ua = this.getUserAgent(); - var referrer = this.getReferrer(); - var url = OpenaireProperties.getPiwikBaseURL()+"&rec=1&url="+StringUtils.URIEncode(downloadURL)+"&download="+StringUtils.URIEncode(downloadURL)+ - ((ua != null && ua.length > 0)?('&ua='+StringUtils.URIEncode(ua)):'')+ - ((referrer != null && referrer.length > 0)?('&urlref='+StringUtils.URIEncode(referrer)):''); - console.log("Piwik - trackDownload: "+url); - - return this.http.get( url) - .do(request => console.info("Piwik request completed" )); - - } - private getUserAgent(){ - if (typeof navigator !== 'undefined') { - console.log("navigator.userAgent:" + navigator.userAgent); - return navigator.userAgent; - - }else{ - return null; - } - } - private getReferrer(){ - var referrer = ""; - if (typeof document !== 'undefined') { - console.log("document.referrer:" + document.referrer); - referrer = document.referrer; - - } - if((referrer == null || referrer.length == 0)&&typeof localStorage !== 'undefined'){ - - referrer =localStorage.getItem('previousRoute'); - } - return referrer; - } - parse(data:any){ - } - -} diff --git a/portal-4cli/src/app/utils/piwik/piwikService.module.ts b/portal-4cli/src/app/utils/piwik/piwikService.module.ts deleted file mode 100644 index 0cfe47e3..00000000 --- a/portal-4cli/src/app/utils/piwik/piwikService.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {PiwikService} from './piwik.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule, - - ], - declarations: [ - - ], - providers: [ PiwikService ], - exports: [ - - ] -}) -export class PiwikServiceModule{ } diff --git a/portal-4cli/src/app/utils/piwik/previousRouteRecorder.guard.ts b/portal-4cli/src/app/utils/piwik/previousRouteRecorder.guard.ts deleted file mode 100644 index ae62b524..00000000 --- a/portal-4cli/src/app/utils/piwik/previousRouteRecorder.guard.ts +++ /dev/null @@ -1,17 +0,0 @@ - -import { Injectable } from '@angular/core'; -import { CanDeactivate, Router} from '@angular/router'; -import {Observable} from 'rxjs/Observable'; - -@Injectable() // do not forget to register this class as a provider -export class PreviousRouteRecorder implements CanDeactivate { - constructor(private router: Router) { - } - canDeactivate(component: any): Observable | boolean { - if (typeof localStorage !== 'undefined') { - console.log("In PreviousRouteRecorder : "+this.router.url ); - localStorage.setItem('previousRoute', this.router.url); - } - return true; - } -} diff --git a/portal-4cli/src/app/utils/properties/openaireProperties.ts b/portal-4cli/src/app/utils/properties/openaireProperties.ts deleted file mode 100644 index ddc91c3b..00000000 --- a/portal-4cli/src/app/utils/properties/openaireProperties.ts +++ /dev/null @@ -1,438 +0,0 @@ -export class OpenaireProperties { - private static productionMode:boolean = false; - private static enablePiwikTrack:boolean = false; - private static enableHelper:boolean = false; - private static useCache:boolean = true; - - private static csvLimit: number = 2000; - private static pagingLimit: number = 20; - private static resultsPerPage: number = 10; - - //base url - private static baseLink = "https://demo.openaire.eu"; - - //landing Pages - private static baseSearchLink="/"; - private static searchLinkToPublication = "search/publication?articleId="; - private static searchLinkToProject = "search/project?projectId="; - private static searchLinkToDataProvider = "search/dataprovider?datasourceId="; - private static searchLinkToDataset = "search/dataset?datasetId="; - private static searchLinkToOrganization = "search/organization?organizationId="; - //Search pages - private static searchLinkToPublications = "search/find/publications"; - private static searchLinkToDataProviders = "search/find/dataproviders"; - private static searchLinkToProjects = "search/find/projects"; - private static searchLinkToDatasets = "search/find/datasets"; - private static searchLinkToSoftware = "search/find/software"; - private static searchLinkToOrganizations = "search/find/organizations"; - private static searchLinkToPeople = "search/find/people"; - public static searchLinkToCompatibleDataProviders = "search/content-providers"; - public static searchLinkToCompatibleDataProvidersTable = "search/content-providers-table"; - public static searchLinkToEntityRegistriesDataProviders = "search/entity-registries"; - public static searchLinkToEntityRegistriesDataProvidersTable = "search/entity-registries-table"; - public static searchLinkToJournals = "search/journals"; - public static searchLinkToJournalsTable = "search/journals-table"; - - //Advanced Search for pages - public static searchLinkToAdvancedPublications = "search/advanced/publications"; - public static searchLinkToAdvancedProjects = "search/advanced/projects"; - public static searchLinkToAdvancedDatasets = "search/advanced/datasets"; - public static searchLinkToAdvancedSoftware = "search/advanced/software"; - public static searchLinkToAdvancedDataProviders = "search/advanced/dataproviders"; - public static searchLinkToAdvancedOrganizations = "search/advanced/organizations"; - public static searchLinkToAdvancedPeople = "search/advanced/people"; - - - private static metricsAPIURL = "https://beta.services.openaire.eu/usagestats/"; - private static framesAPIURL = "https://beta.openaire.eu/stats3/"; - - private static loginAPIURL = "http://scoobydoo.di.uoa.gr:8080/uoa-user-management-1.0.0-SNAPSHOT/api/users/authenticates"; - //"http://rudie.di.uoa.gr:8080/dnet%2Dopenaire%2Dusers%2D1.0.0%2DSNAPSHOT/api/users/authenticates" - //"http://scoobydoo.di.uoa.gr:8080/uoa-user-management-1.0.0-SNAPSHOT/api/users/authenticates"; - private static loginAPIURL_pm = "https://beta.services.openaire.eu/uoa-user-management/api/users/authenticates"; - - private static claimsAPIURL = "http://scoobydoo.di.uoa.gr:8080/dnet-claims-service-2.0.0-SNAPSHOT/rest/claimsService/"; - private static claimsAPIURL_pm = "https://beta.services.openaire.eu/claims/rest/claimsService/"; - - private static searchAPIURLLAst_pm = "https://beta.services.openaire.eu/search/v2/api/"; - private static searchAPIURLLAst = "https://beta.services.openaire.eu/search/v2/api/"; -// private static searchAPIURLLAst = "http://scoobydoo.di.uoa.gr:8080/dnet-functionality-services-2.0.0-SNAPSHOT/rest/v2/api/"; - - private static searchResourcesAPIURL_pm = "https://beta.services.openaire.eu/search/v2/api/resources"; - private static searchResourcesAPIURL = "https://beta.services.openaire.eu/search/v2/api/resources"; - // private static searchResourcesAPIURL = "http://scoobydoo.di.uoa.gr:8080/dnet-functionality-services-2.0.0-SNAPSHOT/rest/v2/api/resources"; - - - private static csvAPIURL_pm = "https://beta.services.openaire.eu/search/v2/api/";//publications?format=csv - // private static csvAPIURL = "http://rudie.di.uoa.gr:8080/dnet-functionality-services-2.0.0-SNAPSHOT/rest/v2/api/";//publications?format=csv - - //private static csvAPIURL = "https://beta.services.openaire.eu/search/v2/api/";//publications?format=csv - private static csvAPIURL = "http://rudie.di.uoa.gr:8080/dnet-functionality-services-2.0.0-SNAPSHOT/rest/v2/reports"; - - private static searchCrossrefAPIURL = "https://api.crossref.org/works"; - // private static searchDataciteAPIURL = "https://search.datacite.org/api"; - private static searchDataciteAPIURL = "https://api.datacite.org/works"; - - private static searchOrcidURL = "https://pub.orcid.org/"; - - // Identifiers - private static pmidURL = "http://www.ncbi.nlm.nih.gov/pubmed/"; - private static doiURL = "https://dx.doi.org/"; - private static cordisURL = "http://cordis.europa.eu/projects/"; - private static pmcURL = "http://europepmc.org/articles/"; - private static handleURL = "http://hdl.handle.net/"; - - // Zenodo's url - private static zenodo = "https://zenodo.org/"; - // Open access link - private static openAccess = "https://www.openaire.eu/support/faq#article-id-234"; - // Open access repository link - private static openAccessRepo = "https://www.openaire.eu/support/faq#article-id-310"; - // FP7 link - private static fp7Guidlines = "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme"; - // H2020 link - private static h2020Guidlines = "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020"; - // ERC Guidlines - private static ercGuidlines = "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf"; - // helpdesk link - private static helpdesk = "https://www.openaire.eu/support/helpdesk"; - - private static uploadService_pm = "https://demo.openaire.eu/upload"; - private static uploadService = "http://scoobydoo.di.uoa.gr:8000/upload"; - - private static vocabulariesAPI ="https://beta.services.openaire.eu/provision/mvc/vocabularies/"; - - private static piwikBaseUrl =" https://analytics.openaire.eu/piwik.php?idsite=6"; - - - private static loginUrl ="http://rudie.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/openid_connect_login"; - //"http://mpagasas.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/openid_connect_login"; - //"http://rudie.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/openid_connect_login"; - // - private static loginUrl_pm ="https://beta.services.openaire.eu/uoa-user-management/openid_connect_login"; - - private static logoutUrl ="https://aai.openminted.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo="; - private static logoutUrl_pm ="https://aai.openminted.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo="; - - private static logoutOpenaireUrl ="http://dl067.madgik.di.uoa.gr/idp/profile/Logout"; - private static logoutOpenaireUrl_pm ="http://dl067.madgik.di.uoa.gr/idp/profile/Logout"; - - - - private static cookieDomain =".di.uoa.gr"; - private static cookieDomain_pm =".openaire.eu"; - - private static feedbackmail ="openaire.test@gmail.com"; - - private static helperPageUrl ="http://scoobydoo.di.uoa.gr:16000/api/page/route"; - - private static cache ="http://scoobydoo.di.uoa.gr:3000/get?url="; - private static cache_pm ="https://demo.openaire.eu/cache/get?url="; - - - - public static getCsvLimit():number { - return this.csvLimit; - } - - public static getPagingLimit():number { - return this.pagingLimit; - } - - public static getResultsPerPage():number { - return this.resultsPerPage; - } - - public static getBaseLink():string{ - return this.baseLink; - } - - //landing Pages' getters - public static getsearchLinkToPublication():string{ - return this.baseSearchLink + this.searchLinkToPublication; - } - public static getsearchLinkToDataset():string{ - return this.baseSearchLink + this.searchLinkToDataset; - } - public static getsearchLinkToProject():string{ - return this.baseSearchLink + this.searchLinkToProject; - } - - public static getsearchLinkToOrganization():string{ - return this.searchLinkToOrganization; - } - public static getsearchLinkToDataProvider():string{ - return this.searchLinkToDataProvider; - } - //searchPages - public static getLinkToSearchPublications():string{ - return this.baseSearchLink + this.searchLinkToPublications; - } - public static getLinkToSearchProjects():string{ - return this.baseSearchLink + this.searchLinkToProjects; - } - public static getLinkToSearchDataProviders():string{ - return this.baseSearchLink + this.searchLinkToDataProviders; - } - public static getLinkToSearchCompatibleDataProviders():string{ - return this.baseSearchLink + this.searchLinkToCompatibleDataProviders; - } - public static getLinkToSearchCompatibleDataProvidersTable():string{ - return this.baseSearchLink + this.searchLinkToCompatibleDataProvidersTable; - } - public static getLinkToSearchEntityRegistries():string{ - return this.baseSearchLink + this.searchLinkToEntityRegistriesDataProviders; - } - public static getLinkToSearchEntityRegistriesTable():string{ - return this.baseSearchLink + this.searchLinkToEntityRegistriesDataProvidersTable; - } - public static getLinkToSearchJournals():string{ - return this.baseSearchLink + this.searchLinkToJournals; - } - public static getLinkToSearchJournalsTable():string{ - return this.baseSearchLink + this.searchLinkToJournalsTable; - } - public static getLinkToSearchDatasets():string{ - return this.baseSearchLink + this.searchLinkToDatasets; - } - public static getLinkToSearchSoftware():string{ - return this.baseSearchLink + this.searchLinkToSoftware; - } - public static getLinkToSearchOrganizations():string{ - return this.baseSearchLink + this.searchLinkToOrganizations; - } - public static getLinkToSearchPeople():string{ - return this.baseSearchLink + this.searchLinkToPeople; - } - - //Advanced searchPages - public static getLinkToAdvancedSearchPublications():string{ - return this.baseSearchLink + this.searchLinkToAdvancedPublications; - } - public static getLinkToAdvancedSearchProjects():string{ - return this.baseSearchLink + this.searchLinkToAdvancedProjects; - } - public static getLinkToAdvancedSearchDataProviders():string{ - return this.baseSearchLink + this.searchLinkToAdvancedDataProviders; - } - public static getLinkToAdvancedSearchDatasets():string{ - return this.baseSearchLink + this.searchLinkToAdvancedDatasets; - } - public static getLinkToAdvancedSearchSoftware():string{ - return this.baseSearchLink + this.searchLinkToAdvancedSoftware; - } - public static getLinkToAdvancedSearchOrganizations():string{ - return this.baseSearchLink + this.searchLinkToAdvancedOrganizations; - } - public static getLinkToAdvancedSearchPeople():string{ - return this.baseSearchLink + this.searchLinkToAdvancedPeople; - } - - // Services - APIs' getters - // public static getSearchAPIURL():string{ - // return this.searchAPIURL; - // } - // Services - APIs' getters - public static getCsvAPIURL(): string { - if(this.productionMode){ - return this.csvAPIURL_pm; - }else{ - return this.csvAPIURL; - } - // return this.csvAPIURL; - } - - public static getFramesAPIURL(): string { - return this.framesAPIURL; - } - - public static getMetricsAPIURL(): string { - return this.metricsAPIURL; - } - - public static getLoginAPIURL(): string { - if(this.productionMode){ - return this.loginAPIURL_pm; - }else{ - return this.loginAPIURL; - } - // return this.loginAPIURL; - } - - public static getSearchAPIURLLast():string{ - if(this.productionMode){ - return this.searchAPIURLLAst_pm; - }else{ - return this.searchAPIURLLAst; - } - // return this.searchAPIURLLAst; - } - //query using full query: - // - public static getSearchResourcesAPIURL():string{ - if(this.productionMode){ - return this.searchResourcesAPIURL_pm; - }else{ - return this.searchResourcesAPIURL; - } - // return this.searchResourcesAPIURL; - } - public static getSearchAPIURLForEntity(entityType:string):string{ - var suffix = ""; - if(entityType == "project"){ - suffix="projects/"; - }else if(entityType == "publication"){ - suffix="publications/"; - }else if(entityType == "dataset"){ - suffix="datasets/"; - } else if(entityType == "software"){ - suffix="software/"; - }else if(entityType == "organization"){ - suffix="organizations/"; - }else if(entityType == "dataprovider"){ - suffix="datasources/"; - }else if(entityType == "person"){ - suffix="people/"; - } - return (this.productionMode?this.searchAPIURLLAst_pm:this.searchAPIURLLAst) + suffix; - } - - public static getClaimsAPIURL():string{ - if(this.productionMode){ - return this.claimsAPIURL_pm; - }else{ - return this.claimsAPIURL; - } - } - public static getSearchCrossrefAPIURL():string{ - return this.searchCrossrefAPIURL; - } - public static getSearchDataciteAPIURL():string{ - return this.searchDataciteAPIURL; - } - public static getSearchOrcidURL():string{ - return this.searchOrcidURL; - } - - // Identifiers' getters - public static getPmidURL():string{ - return this.pmidURL; - } - public static getDoiURL():string{ - return this.doiURL; - } - public static getCordisURL():string{ - return this.cordisURL; - } - public static getPmcURL():string{ - return this.pmcURL; - } - public static getHandleURL():string{ - return this.handleURL; - } - - // Zenodo's getter - public static getZenodoURL():string{ - return this.zenodo; - } - // Open access getter - public static getOpenAccess():string{ - return this.openAccess; - } - // Open access repository getter - public static getOpenAccessRepo():string{ - return this.openAccessRepo; - } - // FP7 link getter - public static getFP7Guidlines():string{ - return this.fp7Guidlines; - } - // H2020 link getter - public static getH2020Guidlines():string{ - return this.h2020Guidlines; - } - // ERC Guidlines getter - public static getERCGuidlines():string{ - return this.ercGuidlines; - } - // helpdesk link getter - public static getHelpdesk():string{ - return this.helpdesk; - } - - - //upload service for bulk claim - upload csv file - public static getUploadServiceUrl():string{ - if(this.productionMode){ - return this.uploadService_pm; - }else{ - return this.uploadService; - } - } - //vocabularies API - public static getVocabulariesAPI():string{ - return this.vocabulariesAPI; - } - public static getPiwikBaseURL():string{ - return this.piwikBaseUrl; - } - public static isPiwikTrackEnabled():boolean{ - return this.enablePiwikTrack; - } - public static getLoginURL():string{ - if(this.productionMode){ - return this.loginUrl_pm; - }else{ - return this.loginUrl; - } - } - public static getLogoutURL():string{ - if(this.productionMode){ - return this.logoutUrl_pm; - }else{ - return this.logoutUrl; - } - } - public static getLogoutOpenaireURL():string{ - if(this.productionMode){ - return this.logoutOpenaireUrl_pm; - }else{ - return this.logoutOpenaireUrl; - } - } - public static getCookieDomain():string{ - if(this.productionMode){ - return this.cookieDomain_pm; - }else{ - return this.cookieDomain; - } - } - public static getFeedbackMail():string{ - return this.feedbackmail; - } - public static getHelperPageUrl():string{ - return this.helperPageUrl; - } - public static isHelperEnabled():boolean{ - return this.enableHelper; - } - public static getCacheUrl():string{ - if(this.productionMode){ - return this.cache_pm; - }else{ - return this.cache; - } - } - public static isCacheEnabled():boolean{ - return this.useCache; - } -} -export class ErrorCodes { - public LOADING = 0; - public DONE = 1; - public NONE = 2; - public ERROR = 3; - public NOT_AVAILABLE = 4; - public OUT_OF_BOUND = 5; - public NOT_FOUND = 6; -} diff --git a/portal-4cli/src/app/utils/properties/searchFields.ts b/portal-4cli/src/app/utils/properties/searchFields.ts deleted file mode 100644 index 42589c28..00000000 --- a/portal-4cli/src/app/utils/properties/searchFields.ts +++ /dev/null @@ -1,159 +0,0 @@ -export class SearchFields { - //main Entities - //RESULTS - //Used for datasets and publications - //In case Datasets should display different fields, use seperate tables for fields - public RESULT_REFINE_FIELDS = [ - "relfunder", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id", - "relproject","resultacceptanceyear", - "resultbestaccessright", "instancetypename", "resultlanguagename", "community","resulthostingdatasource"]; - - public RESULT_ADVANCED_FIELDS:string[] = ["q","resulttitle","resultauthor","resultpublisher","instancetypename", - "resultlanguagename", "community","relprojectid", "relfunder", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id", - "resultdateofacceptance","resultbestaccessright","pid","resulthostingdatasourceid","collectedfromdatasourceid", "relorganizationid"]; - public RESULT_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["resulttitle"]:{name:"Title", type:"keyword", param:"title", equalityOperator: "="}, - ["resultauthor"]:{name:"Author", type:"keyword", param:"author", equalityOperator: "="}, - ["resultpublisher"]:{name:"Publisher", type:"keyword", param:"publisher", equalityOperator: "="}, - ["pid"]:{name:"PID", type:"keyword", param:"pid", equalityOperator: " = "}, - ["resulthostingdatasourceid"]:{name:"Hosting Content Provider", type:"entity", param:"hostedBy", equalityOperator: " exact "}, - ["resulthostingdatasource"]:{name:"Content Provider", type:"refine", param:"hostedBy", equalityOperator: " exact "}, - ["instancetypename"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - // ["instancetypenameid"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - ["resultlanguagename"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - // ["resultlanguageid"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - ["community"]:{name:"Community", type:"refine", param:"community", equalityOperator: " exact "}, - ["relproject"]:{name:"Project", type:"refine", param:"project", equalityOperator: " exact "}, - ["relprojectid"]:{name:"Project", type:"entity", param:"project", equalityOperator: " exact "}, - ["relfunder"]:{name:"Funder", type:"refine", param:"funder", equalityOperator: " exact "}, - ["relfundinglevel0_id"]:{name:"Funding Stream", type:"refine", param:"funderlv0", equalityOperator: " exact "}, - ["relfundinglevel1_id"]:{name:"Funding Substream level 1", type:"refine", param:"funderlv1", equalityOperator: " exact "}, - ["relfundinglevel2_id"]:{name:"Funding Substream level 2", type:"refine", param:"funderlv2", equalityOperator: " exact "}, - ["resultacceptanceyear"]:{name:"Publication Date", type:"keyword", param:"year", equalityOperator: " exact "}, - ["resultdateofacceptance"]:{name:"Publication Date", type:"date", param:"date", equalityOperator: " within "}, - ["resultbestaccessright"]:{name:"Access Mode", type:"vocabulary", param:"access", equalityOperator: " exact "}, - // ["resultbestaccessright"]:{name:"Access Mode", type:"refine", param:"access", equalityOperator: " exact "}, - ["collectedfrom"]:{name:"Content Provider", type:"refine", param:"datasource", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - }; - - //PROJECT - - public PROJECT_REFINE_FIELDS:string[] = ["funder","fundinglevel0_id","fundinglevel1_id", - "fundinglevel2_id","projectstartyear","projectendyear","projectecsc39"]; - public PROJECT_ADVANCED_FIELDS:string[] = ["q","projectacronym","projecttitle","projectkeywords", - "funder", "fundinglevel0_id","fundinglevel1_id", "fundinglevel2_id", - "projectstartdate","projectenddate","projectecsc39", - "projectcode_nt","relorganizationid", "collectedfromdatasourceid"]; - public PROJECT_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["projectacronym"]:{name:"Acronym", type:"keyword", param:"acronym", equalityOperator: "="}, - ["projecttitle"]:{name:"Title", type:"keyword", param:"title", equalityOperator: "="}, - ["projectkeywords"]:{name:"Keywords", type:"keyword", param:"keywords", equalityOperator: "="}, - - ["funder"]:{name:"Funder", type:"refine", param:"funder", equalityOperator: " exact "}, - ["fundinglevel0_id"]:{name:"Funding Stream", type:"refine", param:"funderlv0", equalityOperator: " exact "}, - ["fundinglevel1_id"]:{name:"Funding Substream level 1", type:"refine", param:"funderlv1", equalityOperator: " exact "}, - ["fundinglevel2_id"]:{name:"Funding Substream level 2", type:"refine", param:"funderlv2", equalityOperator: " exact "}, - ["projectstartyear"]:{name:"Start Year", type:"year", param:"startyear", equalityOperator: " exact "}, - ["projectendyear"]:{name:"End Year", type:"year", param:"endyear", equalityOperator: " exact "}, - ["projectstartdate"]:{name:"Start Date", type:"date", param:"startdate", equalityOperator: " within "}, - ["projectenddate"]:{name:"End Date", type:"date", param:"enddate", equalityOperator: " within "}, - ["projectecsc39"]:{name:"Special Clause 39", type:"boolean", param:"sc39", equalityOperator: " exact "}, - ["projectcode_nt"]:{name:"Project Code", type:"keyword", param:"code", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - - }; - - //DATAPROVIDERS - - public DATASOURCE_REFINE_FIELDS:string[] = ["datasourcetypeuiname", "datasourceodlanguages", "datasourceodcontenttypes", - "datasourcecompatibilityname"]; - public DATASOURCE_ADVANCED_FIELDS:string[] = ["q", "datasourceofficialname", - "datasourceenglishname","datasourceodsubjects", "datasourcetypename","datasourceodlanguages", - "datasourceodcontenttypes", "datasourcecompatibilityname","relorganizationid", "collectedfromdatasourceid"]; - - public DATASOURCE_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["datasourceofficialname"]:{name:"English name", type:"keyword", param:"officialname", equalityOperator: "="}, - ["datasourceenglishname"]:{name:"Title", type:"keyword", param:"engname", equalityOperator: "="}, - ["datasourceodsubjects"]:{name:"Subject", type:"keyword", param:"subjects", equalityOperator: "="}, - ["datasourcetypeuiid"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["datasourcetypeuiname"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["datasourcetypename"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - ["datasourceodlanguages"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - ["datasourceodcontenttypes"]:{name:"Content", type:"refine", param:"content", equalityOperator: " exact "}, - ["datasourcecompatibilityid"]:{name:"Compatibility Level", type:"refine", param:"compatibility", equalityOperator: " exact "}, - ["datasourcecompatibilityname"]:{name:"Compatibility Level", type:"vocabulary", param:"compatibility", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - }; - - public COMPATIBLE_DATAPROVIDER_FIELDS:string[] = ["datasourcetypeuiid","datasourcecompatibilityname"]; - public ENTITY_REGISTRIES_FIELDS:string[] = ["datasourcetypename","datasourcecompatibilityname"]; - public JOURNAL_FIELDS:string[] = ["datasourcetypeuiid","datasourcecompatibilityname"]; - - //ORGANIZATION - - public ORGANIZATION_REFINE_FIELDS:string[] = ["organizationcountryname"] - public ORGANIZATION_ADVANCED_FIELDS:string[] = ["q", "organizationlegalname","organizationlegalshortname","organizationcountryname"]; - - public ORGANIZATION_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["organizationlegalname"]:{name:"Legal Name", type:"keyword", param:"name", equalityOperator: "="}, - ["organizationlegalshortname"]:{name:"Legal Short Name", type:"keyword", param:"shortname", equalityOperator: "="}, - ["organizationcountryname"]:{name:"Country", type:"vocabulary", param:"country", equalityOperator: "="}, - // ["organizationcountryname"]:{name:"Country", type:"refine", param:"country", equalityOperator: "="} - }; - public ORGANIZATION_INDEX:string[] = ["organizationcountryname"]//,"organizationeclegalbody"]; - public ADVANCED_SEARCH_ORGANIZATION_PARAM:string[] = ["q","contenttype","compatibility","country","type"]; - public ORGANIZATION_INDEX_PARAM_MAP:{ [key:string]:string } = {["organizationlegalname"]:"contenttype", ["organizationlegalshortname"]:"type", - ["organizationcountryname"]:"country"};//,["organizationeclegalbody"]:"type"}; - public ORGANIZATION_FIELDS_MAP: { [key:string]:{ name:string, operator:string, type:string, indexField:string , equalityOperator:string}} ={ - ["q"]:{name:"All fields",operator:"op", type:"keyword", indexField:null, equalityOperator: "="}, - ["contenttype"]:{name:"Legal Name",operator:"cn", type:"keyword" , indexField:"organizationlegalname", equalityOperator: "="}, - ["compatibility"]:{name:"Legal Short Name",operator:"cm", type:"keyword", indexField:"organizationlegalshortname", equalityOperator: "="}, - ["country"]:{name:"Country",operator:"cu", type:"vocabulary", indexField:"organizationcountryname", equalityOperator: " exact "}, - ["type"]:{name:"Type",operator:"tp", type:"refine", indexField:"organizationeclegalbody", equalityOperator: " exact "}, - - }; - - - - public HIDDEN_FIELDS:string[] = ["fundinglevel0_id","fundinglevel1_id","fundinglevel2_id", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id"]; - - public DEPENDENT_FIELDS: { [key:string]:string } = {["fundinglevel0_id"]:"funder", - ["fundinglevel1_id"]:"fundinglevel0_id", ["fundinglevel2_id"]:"fundinglevel1_id", ["relfundinglevel0_id"]:"relfunder", - ["relfundinglevel1_id"]:"relfundinglevel0_id", ["relfundinglevel2_id"]:"relfundinglevel1_id"}; - - - public ADVANCED_SEARCH_OPERATORS:[{name:string, id:string}] = [{name:"AND",id:"and"},{name:"OR",id:"or"},{name:"NOT",id:"not"}]; - - constructor (){ - } - getFieldName(fieldId:string,fieldType:string):string{ - if(fieldType == "publication" || fieldType == "dataset" || fieldType == "software"){ - return this.RESULT_FIELDS[fieldId].name; - }else if(fieldType == "project"){ - return this.PROJECT_FIELDS[fieldId].name; - }else if(fieldType == "organization"){ - return this.ORGANIZATION_FIELDS[fieldId].name; - }else if(fieldType == "datasource" || fieldType == "dataprovider"){ - return this.DATASOURCE_FIELDS[fieldId].name; - }else{ - return "UNDEFINED"; - } - } -} -class FieldDetails{ - name:string; - type:string; - param:string; - equalityOperator:string; - } diff --git a/portal-4cli/src/app/utils/properties/searchFields_new.ts b/portal-4cli/src/app/utils/properties/searchFields_new.ts deleted file mode 100644 index e89edcd1..00000000 --- a/portal-4cli/src/app/utils/properties/searchFields_new.ts +++ /dev/null @@ -1,164 +0,0 @@ -export class SearchFields { - //main Entities - //RESULTS - //Used for datasets and publications - //In case Datasets should display different fields, use seperate tables for fields - public RESULT_REFINE_FIELDS = ["instancetypename", "resultlanguagename", "community","relproject", "relfunder", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id", - "resultacceptanceyear","resultbestlicense"];//,"collectedfrom"]; - - public RESULT_ADVANCED_FIELDS:string[] = ["q","resulttitle","relperson","resultpublisher","instancetypenameid", - "resultlanguageid", "community","relprojectid", "relfunder", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id", - "resultacceptanceyear","resultbestlicenseid","pid","resulthostingdatasourceid","collectedfromdatasourceid","relpersonid"]; - public RESULT_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["resulttitle"]:{name:"Title", type:"keyword", param:"title", equalityOperator: "="}, - ["relperson"]:{name:"Author", type:"keyword", param:"author", equalityOperator: "="}, - ["resultpublisher"]:{name:"Publisher", type:"keyword", param:"publisher", equalityOperator: "="}, - ["pid"]:{name:"PID", type:"keyword", param:"pid", equalityOperator: " = "}, - ["resulthostingdatasourceid"]:{name:"Hosting Data Provider", type:"entity", param:"hostedBy", equalityOperator: " exact "}, - ["relpersonid"]:{name:"Person", type:"entity", param:"person", equalityOperator: " exact "}, - ["instancetypename"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["instancetypenameid"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - ["resultlanguagename"]:{name:"Language", type:"refine", param:"lang", equalityOperator: " exact "}, - ["resultlanguageid"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - ["community"]:{name:"Community", type:"refine", param:"community", equalityOperator: " exact "}, - ["relproject"]:{name:"Project", type:"refine", param:"project", equalityOperator: " exact "}, - ["relprojectid"]:{name:"Project", type:"entity", param:"project", equalityOperator: " exact "}, - ["relfunder"]:{name:"Funder", type:"refine", param:"funder", equalityOperator: " exact "}, - ["relfundinglevel0_id"]:{name:"Funding Stream", type:"refine", param:"funderlv0", equalityOperator: " exact "}, - ["relfundinglevel1_id"]:{name:"Funding Substream level 1", type:"refine", param:"funderlv1", equalityOperator: " exact "}, - ["relfundinglevel2_id"]:{name:"Funding Substream level 2", type:"refine", param:"funderlv2", equalityOperator: " exact "}, - ["resultacceptanceyear"]:{name:"Year", type:"year", param:"year", equalityOperator: " exact "}, - ["resultbestlicense"]:{name:"Access Mode", type:"refine", param:"access", equalityOperator: " exact "}, - ["resultbestlicenseid"]:{name:"Access Mode", type:"vocabulary", param:"access", equalityOperator: " exact "}, - ["collectedfrom"]:{name:"Content Provider", type:"refine", param:"datasource", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - }; - - //PROJECT - - public PROJECT_REFINE_FIELDS:string[] = ["funder","fundinglevel0_id","fundinglevel1_id", - "fundinglevel2_id","projectstartyear","projectendyear","projectecsc39"]; - public PROJECT_ADVANCED_FIELDS:string[] = ["q","projectacronym","projecttitle","projectkeywords", - "funder", "fundinglevel0_id","fundinglevel1_id", "fundinglevel2_id", - "projectstartyear","projectendyear","projectecsc39", - "projectcode","relorganizationid", "collectedfromdatasourceid"]; - public PROJECT_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["projectacronym"]:{name:"Acronym", type:"keyword", param:"acronym", equalityOperator: "="}, - ["projecttitle"]:{name:"Title", type:"keyword", param:"title", equalityOperator: "="}, - ["projectkeywords"]:{name:"Keywords", type:"keyword", param:"keywords", equalityOperator: "="}, - - ["funder"]:{name:"Funder", type:"refine", param:"funder", equalityOperator: " exact "}, - ["fundinglevel0_id"]:{name:"Funding Stream", type:"refine", param:"funderlv0", equalityOperator: " exact "}, - ["fundinglevel1_id"]:{name:"Funding Substream level 1", type:"refine", param:"funderlv1", equalityOperator: " exact "}, - ["fundinglevel2_id"]:{name:"Funding Substream level 2", type:"refine", param:"funderlv2", equalityOperator: " exact "}, - ["projectstartyear"]:{name:"Start Year", type:"year", param:"startyear", equalityOperator: " exact "}, - ["projectendyear"]:{name:"End Year", type:"year", param:"endyear", equalityOperator: " exact "}, - - ["projectecsc39"]:{name:"Special Clause 39", type:"boolean", param:"sc39", equalityOperator: " exact "}, - ["projectcode"]:{name:"Project Code", type:"keyword", param:"code", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - - }; - - //DATAPROVIDERS - - public DATASOURCE_REFINE_FIELDS:string[] = ["datasourcetypeuiname", "datasourceodlanguages", "datasourceodcontenttypes", - "datasourcecompatibilityname"]; - public DATASOURCE_ADVANCED_FIELDS:string[] = ["q", "datasourceofficialname", - "datasourceenglishname","datasourceodsubjects", "datasourcetypeid","datasourceodlanguages", - "datasourceodcontenttypes", "datasourcecompatibilityid","relorganizationid", "collectedfromdatasourceid"]; - - public DATASOURCE_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["datasourceofficialname"]:{name:"English name", type:"keyword", param:"officialname", equalityOperator: "="}, - ["datasourceenglishname"]:{name:"Title", type:"keyword", param:"engname", equalityOperator: "="}, - ["datasourceodsubjects"]:{name:"Subject", type:"keyword", param:"subjects", equalityOperator: "="}, - ["datasourcetypeuiid"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["datasourcetypeuiname"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["datasourcetypeid"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - ["datasourceodlanguages"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - ["datasourceodcontenttypes"]:{name:"Content", type:"refine", param:"content", equalityOperator: " exact "}, - ["datasourcecompatibilityid"]:{name:"Compatibility Level", type:"vocabulary", param:"compatibility", equalityOperator: " exact "}, - ["datasourcecompatibilityname"]:{name:"Compatibility Level", type:"refine", param:"compatibility", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - - }; - - public COMPATIBLE_DATAPROVIDER_FIELDS:string[] = ["datasourcetypeuiid","datasourcecompatibilityid"]; - public ENTITY_REGISTRIES_FIELDS:string[] = ["datasourcetypeid","datasourcecompatibilityid"]; - - //ORGANIZATION - - public ORGANIZATION_REFINE_FIELDS:string[] = ["organizationcountryname"] - public ORGANIZATION_ADVANCED_FIELDS:string[] = ["q", - "organizationlegalname","organizationlegalshortname","organizationcountryid"]; - - public ORGANIZATION_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["organizationlegalname"]:{name:"Legal Name", type:"keyword", param:"name", equalityOperator: "="}, - ["organizationlegalshortname"]:{name:"Legal Short Name", type:"keyword", param:"shortname", equalityOperator: "="}, - ["organizationcountryid"]:{name:"Country", type:"vocabulary", param:"country", equalityOperator: "="}, - ["organizationcountryname"]:{name:"Country", type:"refine", param:"country", equalityOperator: "="} - }; - public ORGANIZATION_INDEX:string[] = ["organizationcountryname"]//,"organizationeclegalbody"]; - public ADVANCED_SEARCH_ORGANIZATION_PARAM:string[] = ["q","contenttype","compatibility","country","type"]; - public ORGANIZATION_INDEX_PARAM_MAP:{ [key:string]:string } = {["organizationlegalname"]:"contenttype", ["organizationlegalshortname"]:"type", - ["organizationcountryname"]:"country"};//,["organizationeclegalbody"]:"type"}; - public ORGANIZATION_FIELDS_MAP: { [key:string]:{ name:string, operator:string, type:string, indexField:string , equalityOperator:string}} ={ - ["q"]:{name:"All fields",operator:"op", type:"keyword", indexField:null, equalityOperator: "="}, - ["contenttype"]:{name:"Legal Name",operator:"cn", type:"keyword" , indexField:"organizationlegalname", equalityOperator: "="}, - ["compatibility"]:{name:"Legal Short Name",operator:"cm", type:"keyword", indexField:"organizationlegalshortname", equalityOperator: "="}, - ["country"]:{name:"Country",operator:"cu", type:"vocabulary", indexField:"organizationcountryname", equalityOperator: " exact "}, - ["type"]:{name:"Type",operator:"tp", type:"refine", indexField:"organizationeclegalbody", equalityOperator: " exact "}, - - }; - - //PERSON - public PERSON_REFINE_FIELDS:string[] = []; - public PERSON_ADVANCED_FIELDS:string[] = ["q","personsecondnames","personfirstname","personfullname"]; - public PERSON_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["personsecondnames"]:{name:"Surname", type:"keyword", param:"surname", equalityOperator: "="}, - ["personfirstname"]:{name:"First Name",type:"keyword", param:"name", equalityOperator: "="}, - ["personfullname"]:{name:"Full name", type:"keyword", param:"fullname", equalityOperator: "="} - }; - - - public HIDDEN_FIELDS:string[] = ["fundinglevel0_id","fundinglevel1_id","fundinglevel2_id", - "relfundinglevel0_id","relfundinglevel1_id,relfundinglevel2_id"]; - - public DEPENDENT_FIELDS: { [key:string]:string } = {["fundinglevel0_id"]:"funder", - ["fundinglevel1_id"]:"fundinglevel0_id", ["fundinglevel2_id"]:"fundinglevel1_id", ["relfundinglevel0_id"]:"relfunder", - ["relfundinglevel1_id"]:"relfundinglevel0_id", ["relfundinglevel2_id"]:"relfundinglevel1_id"}; - - - public ADVANCED_SEARCH_OPERATORS:[{name:string, id:string}] = [{name:"AND",id:"and"},{name:"OR",id:"or"},{name:"NOT",id:"not"}]; - - constructor (){ - } - getFieldName(fieldId:string,fieldType:string):string{ - if(fieldType == "publication" || fieldType == "dataset"){ - return this.RESULT_FIELDS[fieldId].name; - }else if(fieldType == "project"){ - return this.PROJECT_FIELDS[fieldId].name; - }else if(fieldType == "organization"){ - return this.ORGANIZATION_FIELDS[fieldId].name; - }else if(fieldType == "datasource"){ - return this.DATASOURCE_FIELDS[fieldId].name; - }else{ - return "UNDEFINED"; - } - } -} -class FieldDetails{ - name:string; - type:string; - param:string; - equalityOperator:string; - } diff --git a/portal-4cli/src/app/utils/properties/searchFields_old.ts b/portal-4cli/src/app/utils/properties/searchFields_old.ts deleted file mode 100644 index 9c74982a..00000000 --- a/portal-4cli/src/app/utils/properties/searchFields_old.ts +++ /dev/null @@ -1,164 +0,0 @@ -export class SearchFields { - //main Entities - //RESULTS - //Used for datasets and publications - //In case Datasets should display different fields, use seperate tables for fields - public RESULT_REFINE_FIELDS = ["instancetypename", "resultlanguagename", "community","relproject", "relfunderid", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id", - "resultacceptanceyear","resultbestlicense"];//,"collectedfrom"]; - - public RESULT_ADVANCED_FIELDS:string[] = ["q","resulttitle","relperson","resultpublisher","instancetypenameid", - "resultlanguageid", "community","relprojectid", "relfunderid", - "relfundinglevel0_id","relfundinglevel1_id","relfundinglevel2_id", - "resultacceptanceyear","resultbestlicenseid","pid","resulthostingdatasourceid","collectedfromdatasourceid","relpersonid"]; - public RESULT_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["resulttitle"]:{name:"Title", type:"keyword", param:"title", equalityOperator: "="}, - ["relperson"]:{name:"Author", type:"keyword", param:"author", equalityOperator: "="}, - ["resultpublisher"]:{name:"Publisher", type:"keyword", param:"publisher", equalityOperator: "="}, - ["pid"]:{name:"PID", type:"keyword", param:"pid", equalityOperator: " = "}, - ["resulthostingdatasourceid"]:{name:"Hosting Data Provider", type:"entity", param:"hostedBy", equalityOperator: " exact "}, - ["relpersonid"]:{name:"Person", type:"entity", param:"person", equalityOperator: " exact "}, - ["instancetypename"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["instancetypenameid"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - ["resultlanguagename"]:{name:"Language", type:"refine", param:"lang", equalityOperator: " exact "}, - ["resultlanguageid"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - ["community"]:{name:"Community", type:"refine", param:"community", equalityOperator: " exact "}, - ["relproject"]:{name:"Project", type:"refine", param:"project", equalityOperator: " exact "}, - ["relprojectid"]:{name:"Project", type:"entity", param:"project", equalityOperator: " exact "}, - ["relfunderid"]:{name:"Funder", type:"refine", param:"funder", equalityOperator: " exact "}, - ["relfundinglevel0_id"]:{name:"Funding Stream", type:"refine", param:"funderlv0", equalityOperator: " exact "}, - ["relfundinglevel1_id"]:{name:"Funding Substream level 1", type:"refine", param:"funderlv1", equalityOperator: " exact "}, - ["relfundinglevel2_id"]:{name:"Funding Substream level 2", type:"refine", param:"funderlv2", equalityOperator: " exact "}, - ["resultacceptanceyear"]:{name:"Year", type:"year", param:"year", equalityOperator: " exact "}, - ["resultbestlicense"]:{name:"Access Mode", type:"refine", param:"access", equalityOperator: " exact "}, - ["resultbestlicenseid"]:{name:"Access Mode", type:"vocabulary", param:"access", equalityOperator: " exact "}, - ["collectedfrom"]:{name:"Content Provider", type:"refine", param:"datasource", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - }; - - //PROJECT - - public PROJECT_REFINE_FIELDS:string[] = ["funderid","fundinglevel0_id","fundinglevel1_id", - "fundinglevel2_id","projectstartyear","projectendyear","projectecsc39"]; - public PROJECT_ADVANCED_FIELDS:string[] = ["q","projectacronym","projecttitle","projectkeywords", - "funderid", "fundinglevel0_id","fundinglevel1_id", "fundinglevel2_id", - "projectstartyear","projectendyear","projectecsc39", - "projectcode","relorganizationid", "collectedfromdatasourceid"]; - public PROJECT_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["projectacronym"]:{name:"Acronym", type:"keyword", param:"acronym", equalityOperator: "="}, - ["projecttitle"]:{name:"Title", type:"keyword", param:"title", equalityOperator: "="}, - ["projectkeywords"]:{name:"Keywords", type:"keyword", param:"keywords", equalityOperator: "="}, - - ["funderid"]:{name:"Funder", type:"refine", param:"funder", equalityOperator: " exact "}, - ["fundinglevel0_id"]:{name:"Funding Stream", type:"refine", param:"funderlv0", equalityOperator: " exact "}, - ["fundinglevel1_id"]:{name:"Funding Substream level 1", type:"refine", param:"funderlv1", equalityOperator: " exact "}, - ["fundinglevel2_id"]:{name:"Funding Substream level 2", type:"refine", param:"funderlv2", equalityOperator: " exact "}, - ["projectstartyear"]:{name:"Start Year", type:"year", param:"startyear", equalityOperator: " exact "}, - ["projectendyear"]:{name:"End Year", type:"year", param:"endyear", equalityOperator: " exact "}, - - ["projectecsc39"]:{name:"Special Clause 39", type:"boolean", param:"sc39", equalityOperator: " exact "}, - ["projectcode"]:{name:"Project Code", type:"keyword", param:"code", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - - }; - - //DATAPROVIDERS - - public DATASOURCE_REFINE_FIELDS:string[] = ["datasourcetypeuiname", "datasourceodlanguages", "datasourceodcontenttypes", - "datasourcecompatibilityname"]; - public DATASOURCE_ADVANCED_FIELDS:string[] = ["q", "datasourceofficialname", - "datasourceenglishname","datasourceodsubjects", "datasourcetypeid","datasourceodlanguages", - "datasourceodcontenttypes", "datasourcecompatibilityid","relorganizationid", "collectedfromdatasourceid"]; - - public DATASOURCE_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["datasourceofficialname"]:{name:"English name", type:"keyword", param:"officialname", equalityOperator: "="}, - ["datasourceenglishname"]:{name:"Title", type:"keyword", param:"engname", equalityOperator: "="}, - ["datasourceodsubjects"]:{name:"Subject", type:"keyword", param:"subjects", equalityOperator: "="}, - ["datasourcetypeuiid"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["datasourcetypeuiname"]:{name:"Type", type:"refine", param:"type", equalityOperator: " exact "}, - ["datasourcetypeid"]:{name:"Type", type:"vocabulary", param:"type", equalityOperator: " exact "}, - ["datasourceodlanguages"]:{name:"Language", type:"vocabulary", param:"lang", equalityOperator: " exact "}, - ["datasourceodcontenttypes"]:{name:"Content", type:"refine", param:"content", equalityOperator: " exact "}, - ["datasourcecompatibilityid"]:{name:"Compatibility Level", type:"vocabulary", param:"compatibility", equalityOperator: " exact "}, - ["datasourcecompatibilityname"]:{name:"Compatibility Level", type:"refine", param:"compatibility", equalityOperator: " exact "}, - ["relorganizationid"]:{name:"Organization", type:"entity", param:"organization", equalityOperator: " exact "}, - ["collectedfromdatasourceid"]:{name:"Collected from Content Provider", type:"entity", param:"collectedFrom", equalityOperator: " exact "} - - }; - - public COMPATIBLE_DATAPROVIDER_FIELDS:string[] = ["datasourcetypeuiid","datasourcecompatibilityid"]; - public ENTITY_REGISTRIES_FIELDS:string[] = ["datasourcetypeid","datasourcecompatibilityid"]; - - //ORGANIZATION - - public ORGANIZATION_REFINE_FIELDS:string[] = ["organizationcountryname"] - public ORGANIZATION_ADVANCED_FIELDS:string[] = ["q", - "organizationlegalname","organizationlegalshortname","organizationcountryid"]; - - public ORGANIZATION_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["organizationlegalname"]:{name:"Legal Name", type:"keyword", param:"name", equalityOperator: "="}, - ["organizationlegalshortname"]:{name:"Legal Short Name", type:"keyword", param:"shortname", equalityOperator: "="}, - ["organizationcountryid"]:{name:"Country", type:"vocabulary", param:"country", equalityOperator: "="}, - ["organizationcountryname"]:{name:"Country", type:"refine", param:"country", equalityOperator: "="} - }; - public ORGANIZATION_INDEX:string[] = ["organizationcountryname"]//,"organizationeclegalbody"]; - public ADVANCED_SEARCH_ORGANIZATION_PARAM:string[] = ["q","contenttype","compatibility","country","type"]; - public ORGANIZATION_INDEX_PARAM_MAP:{ [key:string]:string } = {["organizationlegalname"]:"contenttype", ["organizationlegalshortname"]:"type", - ["organizationcountryname"]:"country"};//,["organizationeclegalbody"]:"type"}; - public ORGANIZATION_FIELDS_MAP: { [key:string]:{ name:string, operator:string, type:string, indexField:string , equalityOperator:string}} ={ - ["q"]:{name:"All fields",operator:"op", type:"keyword", indexField:null, equalityOperator: "="}, - ["contenttype"]:{name:"Legal Name",operator:"cn", type:"keyword" , indexField:"organizationlegalname", equalityOperator: "="}, - ["compatibility"]:{name:"Legal Short Name",operator:"cm", type:"keyword", indexField:"organizationlegalshortname", equalityOperator: "="}, - ["country"]:{name:"Country",operator:"cu", type:"vocabulary", indexField:"organizationcountryname", equalityOperator: " exact "}, - ["type"]:{name:"Type",operator:"tp", type:"refine", indexField:"organizationeclegalbody", equalityOperator: " exact "}, - - }; - - //PERSON - public PERSON_REFINE_FIELDS:string[] = []; - public PERSON_ADVANCED_FIELDS:string[] = ["q","personsecondnames","personfirstname","personfullname"]; - public PERSON_FIELDS: { [key:string]:FieldDetails}={ - ["q"]:{name:"All fields", type:"keyword", param:"q", equalityOperator: "="}, - ["personsecondnames"]:{name:"Surname", type:"keyword", param:"surname", equalityOperator: "="}, - ["personfirstname"]:{name:"First Name",type:"keyword", param:"name", equalityOperator: "="}, - ["personfullname"]:{name:"Full name", type:"keyword", param:"fullname", equalityOperator: "="} - }; - - - public HIDDEN_FIELDS:string[] = ["fundinglevel0_id","fundinglevel1_id","fundinglevel2_id", - "relfundinglevel0_id","relfundinglevel1_id,relfundinglevel2_id"]; - - public DEPENDENT_FIELDS: { [key:string]:string } = {["fundinglevel0_id"]:"funderid", - ["fundinglevel1_id"]:"fundinglevel0_id", ["fundinglevel2_id"]:"fundinglevel1_id", ["relfundinglevel0_id"]:"relfunderid", - ["relfundinglevel1_id"]:"relfundinglevel0_id", ["relfundinglevel2_id"]:"relfundinglevel1_id"}; - - - public ADVANCED_SEARCH_OPERATORS:[{name:string, id:string}] = [{name:"AND",id:"and"},{name:"OR",id:"or"},{name:"NOT",id:"not"}]; - - constructor (){ - } - getFieldName(fieldId:string,fieldType:string):string{ - if(fieldType == "publication" || fieldType == "dataset"){ - return this.RESULT_FIELDS[fieldId].name; - }else if(fieldType == "project"){ - return this.PROJECT_FIELDS[fieldId].name; - }else if(fieldType == "organization"){ - return this.ORGANIZATION_FIELDS[fieldId].name; - }else if(fieldType == "datasource"){ - return this.DATASOURCE_FIELDS[fieldId].name; - }else{ - return "UNDEFINED"; - } - } -} -class FieldDetails{ - name:string; - type:string; - param:string; - equalityOperator:string; - } diff --git a/portal-4cli/src/app/utils/routerHelper.class.ts b/portal-4cli/src/app/utils/routerHelper.class.ts deleted file mode 100644 index fecaf296..00000000 --- a/portal-4cli/src/app/utils/routerHelper.class.ts +++ /dev/null @@ -1,34 +0,0 @@ - - - -export class RouterHelper { - //Use this class function to create queryParams Objects in format {key1:value1} or {key1:value1,key2:value2,key3:value3,...} for multiple parameters - constructor(){} - // Link - public createQueryParam(key:string,value:string){ - var obj ={}; - obj[key]=value; - return obj; - - } - public createQueryParamsPaging(keys:string[],values:string[],pageParameter:string,pageValue:number){ - var obj = this.createQueryParams(keys, values); - obj[pageParameter] = ""+pageValue; - return obj; - - } - public createQueryParams(keys:string[],values:string[]){ - var obj ={}; - if(!keys || !values || keys.length != values.length){ - return obj; - }else{ - for(var i=0; i< keys.length; i++){ - obj[keys[i]]=values[i]; - } - } - return obj; - - } - - -} diff --git a/portal-4cli/src/app/utils/staticAutoComplete/ISVocabularies.service.ts b/portal-4cli/src/app/utils/staticAutoComplete/ISVocabularies.service.ts deleted file mode 100644 index 7ec5902e..00000000 --- a/portal-4cli/src/app/utils/staticAutoComplete/ISVocabularies.service.ts +++ /dev/null @@ -1,110 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import {AutoCompleteValue} from '../../searchPages/searchUtils/searchHelperClasses.class'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/share'; - -import {OpenaireProperties} from '../../utils/properties/openaireProperties'; - -@Injectable() -export class ISVocabulariesService { - private api =OpenaireProperties.getVocabulariesAPI(); - constructor(private http: Http ) {} - - getVocabularyByType(field:string,entity:string):any{ - console.log("getVocabulary field: "+ field + " for entity: "+ entity); - var file = ""; - var vocabulary = ""; - if( field == "lang"){ - // file="languages.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:languages.json"; - return this.getVocabularyFromService(vocabulary); - }else if ( field == "type" && (entity == "publication")){ - // file = "publicationTypes.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:publication_resource.json"; - return this.getVocabularyFromService(vocabulary); - - }else if ( field == "type" && (entity == "dataset")){ - // file = "dnet:dataCite_resource.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:dataCite_resource.json"; - return this.getVocabularyFromService(vocabulary); - - }else if( field == "access" && (entity == "publication" || entity == "dataset")){ - // file= "accessMode.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:access_modes.json"; - return this.getVocabularyFromService(vocabulary); - - } else if( (field == "type") && (entity == "dataprovider")){ - // file = "dataProviderType.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:datasource_typologies.json"; - return this.getVocabularyFromService(vocabulary); - - } else if( field == "compatibility" && (entity == "dataprovider")){ - // file = "dataProviderCompatibility.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:datasourceCompatibilityLevel.json"; - return this.getVocabularyFromService(vocabulary); - - } else if( field == "country" ){ - // file = "countries.json"; - // return this.getVocabularyFromFile(file); - vocabulary = "dnet:countries.json"; - return this.getVocabularyFromService(vocabulary); - - } - return null; - - } - // getVocabularyFromFile (file:string):AutoCompleteValue[] { - // var lang = JSON.parse(JSON.stringify(require('../utils/vocabularies/'+file))); - // return this.parse(lang["terms"]); - // } - getVocabularyFromService (vocabularyName:string):any { - let url = this.api + vocabularyName; - console.log(url); - - // return this.http.get(url).toPromise() - // .then(request => - // { - // request = request.json()['terms']; - // var results:AutoCompleteValue[] = this.parse(request); - // console.log("Get vocabulary : "+ vocabularyName+ " - get " +results.length+ "results"); - // return results; - // }); - return this.http.get((OpenaireProperties.isCacheEnabled())? (OpenaireProperties.getCacheUrl()+encodeURIComponent(url)): url) - .do(res => console.log(res)) - .map(res => res.json()) - .map(res => res['terms']) - .do(res => console.log(res)) - .map(res => this.parse(res)) - .do(res => console.log(res)) - .catch(this.handleError); - - } - - parse (data: any):AutoCompleteValue[] { - var array:AutoCompleteValue[] =[] - for(var i = 0; i < data.length; i++){ - var value:AutoCompleteValue = new AutoCompleteValue(); - value.id = data[i].englishName;//data[i].code; - value.label = data[i].englishName; - array.push(value); - } - - return array; - - } -private handleError (error: Response) { - // in a real world app, we may send the error to some remote logging infrastructure - // instead of just logging it to the console - console.log(error); - return Observable.throw(error || 'Server error'); - } -} diff --git a/portal-4cli/src/app/utils/staticAutoComplete/staticAutoComplete.component.ts b/portal-4cli/src/app/utils/staticAutoComplete/staticAutoComplete.component.ts deleted file mode 100644 index bb90dcac..00000000 --- a/portal-4cli/src/app/utils/staticAutoComplete/staticAutoComplete.component.ts +++ /dev/null @@ -1,300 +0,0 @@ -import {Component, ElementRef, Input, Output, EventEmitter, OnChanges, SimpleChange} from '@angular/core'; -import {Value} from '../../searchPages/searchUtils/searchHelperClasses.class'; -import {ISVocabulariesService} from './ISVocabularies.service'; -import {RefineFieldResultsService} from '../../services/refineFieldResults.service'; -//Usage example -// - -@Component({ - selector: 'static-autocomplete', - styleUrls: ['../autoComplete.component.css'], - host: { - '(document:click)': 'handleClick($event)', - }, - template: ` - - - {{showItem(item)}} - - - - - -
    -
      -
    • - Loading... - {{results}} results found: - No results found -
    • -
    • - {{showItem(item)}} -
    • -
    -
    -
    - - ` -}) -export class StaticAutoCompleteComponent implements OnChanges{ - @Input() placeHolderMessage = "Search for entries"; - @Input() title = "Autocomplete"; - @Output() addItem = new EventEmitter(); // when selected list changes update parent component - @Output() selectedValueChanged = new EventEmitter(); // when changed a method for filtering will be called - @Output() listUpdated = new EventEmitter(); // when changed a method for filtering will be called - @Input() public list = []; // the entries resulted after filtering function - @Input() public filtered = []; // the entries resulted after filtering function - @Input() public selected = []; // the entries selected from user - @Input() public keywordlimit = 3; // the minimum length of keyword - @Input() public showSelected = true; // the minimum length of keyword - @Input() public multipleSelections:boolean = true; - @Input() public allowDuplicates:boolean = false; - @Input() public selectedValue:string = ''; - @Input() public vocabularyId:string ; - @Input() public fieldName:string ; - @Input() public entityName:string ; - @Input() public fieldId:string ; - - @Input() public keyword = ''; - @Input() public type = 'search' //search, result, context, project - public warningMessage = ""; - public infoMessage = ""; - public showLoading:boolean = false; - public tries = 0; - public showInput = true; - public sub; - public done = false; - public results = 0; - public focus:boolean = false; - public currentFieldId: string ; - constructor ( private _vocabulariesService: ISVocabulariesService,private _refineService: RefineFieldResultsService, private myElement: ElementRef) { - this.currentFieldId=this.fieldId; - - } - ngOnDestroy(){ - if(this.sub && this.sub != undefined){ - this.sub.unsubscribe(); - } - } - - ngOnChanges(changes: {[propKey: string]: SimpleChange}) { - if(this.currentFieldId!=this.fieldId){ //this is going to be called when - this.currentFieldId=this.fieldId; - this.initialize(); - } - } - private initialize(){ - - this.showInput = true; - if(this.list == undefined || this.list.length == 0){ - this.showLoading = true; - - if(this.vocabularyId){ - // this.list = this._vocabulariesService.getVocabularyByType(this.vocabularyId, this.entityName); - // this.afterListFetchedActions(); - this.sub = this._vocabulariesService.getVocabularyByType(this.vocabularyId, this.entityName).subscribe( - data => { - this.list = data; - this.afterListFetchedActions(); - - }, - err => { - console.log(err); - this.warningMessage = "An Error occured..." - } - ); - }else if(this.fieldName && this.entityName){ - // this.list = this._refineService.getRefineFieldResultsByFieldName(this.fieldName,this.entityName); - this.sub = this._refineService.getRefineFieldResultsByFieldName(this.fieldName,this.entityName).subscribe( - data => { - this.list = data; - this.afterListFetchedActions(); - - }, - err => { - console.log(err); - this.warningMessage = "An Error occured..." - } - ); - }else{ - this.showLoading = false; - - } - }else{ - this.afterListFetchedActions(); - } - - } - public updateList(list){ // used in claim context autocomplete - this.list = list; - this.afterListFetchedActions() - } - private afterListFetchedActions(){ - this.showLoading = false; - this.getSelectedNameFromGivenId(); - this.listUpdated.emit({ - value: this.list - }); - if(this.list == null || this.list.length == 0 ){ - this.warningMessage = "No results available"; - return; - } - this.done = true; - if(this.keyword != ""){ - this.filter(); - } - - } - filter() { - this.focus = true; - if(this.done){ - this.infoMessage = ""; - this.filtered = []; - if(this.keyword == ""){ - var cut = 10; - if(this.list.length < 5){ - cut = this.list.length; - } - this.results = this.list.length; - this.filtered =this.list.slice(0, cut); - this.tries = 0; - this.warningMessage = ""; - // } else if(this.keyword && this.keyword.length < this.keywordlimit){ - // this.tries++; - // if(this.tries == this.keywordlimit -1 ){ - // this.warningMessage = "Type at least " + this.keywordlimit + " characters"; - // this.tries = 0; - // } - }else{ - this.tries = 0; - this.warningMessage = ""; - this.filtered = this.list.filter(function(el){ - return el.label.toLowerCase().indexOf(this.keyword.toLowerCase()) > -1; - }.bind(this)); - var cut = 10; - if(this.filtered .length < 5){ - cut = this.list.length; - } - this.results = this.filtered.length; - this.filtered =this.filtered.slice(0, cut); - } - } - } - remove(item:any){ - var index:number =this.checkIfExists(item,this.selected); - if (index > -1) { - this.selected.splice(index, 1); - } - if(!this.multipleSelections && this.selected.length == 0 ){ - this.showInput = true; - this.selectedValue = ""; - this.selectedValueChanged.emit({ - value: this.selectedValue - }); - - - } - } - select(item:any){ - // console.log("select"+this.selected.length + item.id + " "+ item.label); - - if(this.multipleSelections){ - var index:number =this.checkIfExists(item,this.selected); - if (index > -1 && !this.allowDuplicates) { - this.keyword = ""; - this.filtered.splice(0, this.filtered.length); - return; - } - else{ - this.selected.push(item); - this.keyword = ""; - this.filtered.splice(0, this.filtered.length); - this.addItem.emit({ - value: item - }); - } - }else{ - this.selected.splice(0, this.selected.length); - this.selected.push(item); - this.filtered.splice(0, this.filtered.length); - this.keyword = ""; - this.showInput = false; - this.selectedValue = item.id; - this.selectedValueChanged.emit({ - value: this.selectedValue - }); - - } - - } - private checkIfExists(item:any,list):number{ - - if(item.concept && item.concept.id ){ - - for (var _i = 0; _i < list.length; _i++) { - let itemInList = list[_i]; - if(item.concept.id == itemInList.concept.id){ - return _i; - } - } - }else if(item.id){ - for (var _i = 0; _i < list.length; _i++) { - let itemInList = list[_i]; - if(item.id == itemInList.id){ - return _i; - } - } - } - return -1; - - } - showItem(item:any):string{ - - if (item.name){ //search - return item.name; - }else if( item.concept && item.concept.label){ //context - return item.concept.label; - }else if (item.label){ //simple - return item.label; - } - - } - truncate(str:string, size:number):string{ - if(str == null){return "";} - return (str.length > size)?str.substr(0,size)+'...':str; - } - private getSelectedNameFromGivenId(){ - if(this.list == null ){ - return; - } - this.showInput = true; - for( var i = 0; i < this.list.length; i++){ - if(this.list[i].id == this.selectedValue){ - this.selectedValue = this.list[i].label; - this.selected.push(this.list[i]); - this.showInput = false; - return; - - } - } - } - - handleClick(event){ - var clickedComponent = event.target; - var inside = false; - do { - if (clickedComponent === this.myElement.nativeElement) { - inside = true; - } - clickedComponent = clickedComponent.parentNode; - } while (clickedComponent); - if(!inside){ - this.focus =false; - this.filtered.splice(0, this.filtered.length); - } - } - -} diff --git a/portal-4cli/src/app/utils/staticAutoComplete/staticAutoComplete.module.ts b/portal-4cli/src/app/utils/staticAutoComplete/staticAutoComplete.module.ts deleted file mode 100644 index 1c876a15..00000000 --- a/portal-4cli/src/app/utils/staticAutoComplete/staticAutoComplete.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import {StaticAutoCompleteComponent} from './staticAutoComplete.component'; -import {RefineFieldResultsServiceModule} from '../../services/refineFieldResultsService.module'; -import {ISVocabulariesService} from './ISVocabularies.service'; - - -@NgModule({ - imports: [ - CommonModule, FormsModule, RefineFieldResultsServiceModule - ], - declarations: [ - StaticAutoCompleteComponent - ], - exports: [ - StaticAutoCompleteComponent - ], - providers:[ ISVocabulariesService] -}) -export class StaticAutocompleteModule { } diff --git a/portal-4cli/src/app/utils/string-utils.class.ts b/portal-4cli/src/app/utils/string-utils.class.ts deleted file mode 100644 index ece1ce3e..00000000 --- a/portal-4cli/src/app/utils/string-utils.class.ts +++ /dev/null @@ -1,129 +0,0 @@ -export class Dates { - public static isValidYear(yearString){ - // First check for the pattern - if(!/^\d{4}$/.test(yearString)) - return false; - var year = parseInt(yearString, 10); - - // Check the ranges of month and year - if(year < 1000 || year > 3000 ) - return false; - return true; - } - //format YYYY-MM-DD - public static isValidDate(dateString:string) - { - // First check for the pattern - if(!/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(dateString)) - return false; - - // Parse the date parts to integers - var parts = dateString.split("-"); - var day = parseInt(parts[2], 10); - var month = parseInt(parts[1], 10); - var year = parseInt(parts[0], 10); - if(!this.isValidYear(parts[0])){ - return false; - } - - // Check the ranges of month and year - if( month == 0 || month > 12) - return false; - - var monthLength = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]; - - // Adjust for leap years - if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) - monthLength[1] = 29; - - // Check the range of the day - return day > 0 && day <= monthLength[month - 1]; - - } - public static getDateToday():Date{ - var myDate = new Date(); - return myDate; - - } - public static getDateToString(myDate:Date):string{ - var date:string = myDate.getFullYear()+ "-" ; - date+=((myDate.getMonth() + 1)<10)?"0"+(myDate.getMonth() + 1):(myDate.getMonth() + 1) ; - date+="-"; - date+= (myDate.getDate() <10 )? "0"+myDate.getDate():myDate.getDate() ; - return date; - - } - public static getDateXMonthsAgo(x:number):Date{ - var myDate = new Date(); - myDate.setMonth(myDate.getMonth() - x); - return myDate; - - } - public static getDateXYearsAgo(x:number):Date{ - var myDate = new Date(); - myDate.setFullYear(myDate.getFullYear() - x); - return myDate; - - } - public static getDateFromString(date:string):Date{ - - var myDate = new Date(); - myDate.setFullYear(+date.substring(0,4)); - myDate.setMonth(+date.substring(5,7)-1); - myDate.setDate(+date.substring(8,11)) - return myDate; - - } - -} - -export class DOI{ - - public static getDOIsFromString(str:string):string[]{ - var DOIs:string[] = []; - var words:string[] = str.split(" "); - - for(var i=0; i< words.length; i++){ - if(DOI.isValidDOI(words[i]) && DOIs.indexOf(words[i]) == -1){ - DOIs.push(words[i]); - } - } - return DOIs; - } - public static isValidDOI(str:string):boolean{ - - var exp1 = /\b(10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?!["&\'<>])\S)+)\b/g - var exp2 = /\b(10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?!["&\'<>])[[:graph:]])+)\b/g - if(str.match(exp1)!=null || str.match(exp2)!=null){ - // console.log("It's a DOI"); - return true; - } - return false; - - } -} -export class StringUtils{ - public static quote(params: string):string { - return '"'+params+'"'; - } - - public static unquote(params: string):string { - if(params.length > 2 && (params[0]=='"' && params[params.length-1]=='"') || (params[0]=="'" && params[params.length-1]=="'")){ - params= params.substring(1, params.length-1); - } - return params; - } - public static URIEncode(params: string):string { - return encodeURIComponent(params); - } - public static URIDecode(params: string):string { - return decodeURIComponent(params); - } - public static b64DecodeUnicode(str) { - return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) { - return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); - }).join('')); - } - - -} diff --git a/portal-4cli/src/assets/Home_24white.svg b/portal-4cli/src/assets/Home_24white.svg deleted file mode 100644 index db4e815d..00000000 --- a/portal-4cli/src/assets/Home_24white.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/portal-4cli/src/assets/OA DISCOVER_A.png b/portal-4cli/src/assets/OA DISCOVER_A.png deleted file mode 100644 index e8c097c5df496bee6074c83ba25e1dda4f68b165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24028 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 P0#&ZGm% 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 CXvnPq diff --git a/portal-4cli/src/assets/OA DISCOVER_B.png b/portal-4cli/src/assets/OA DISCOVER_B.png deleted file mode 100644 index 26d484664af1b90cfcdf92e99d30553b0da25465..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39239 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 diff --git a/portal-4cli/src/assets/OA EXPLORE_B.png b/portal-4cli/src/assets/OA EXPLORE_B.png deleted file mode 100644 index 20a160398ad2f221744fde2b19a950218b4268eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83324 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 D5G6yk diff --git a/portal-4cli/src/assets/OA EXPLORE_a.png b/portal-4cli/src/assets/OA EXPLORE_a.png deleted file mode 100644 index d225e6f4731f7ff8365a299bd7c86b0959fe6906..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105063 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 or - * respectively. - */ - -var CSL = { - PROCESSOR_VERSION: "1.1.178", - CONDITION_LEVEL_TOP: 1, - CONDITION_LEVEL_BOTTOM: 2, - PLAIN_HYPHEN_REGEX: /(?:[^\\]-|\u2013)/, - LOCATOR_LABELS_REGEXP: new RegExp("^((art|ch|subch|col|fig|l|n|no|op|p|pp|para|subpara|pt|r|sec|subsec|sv|sch|tit|vrs|vol)\\.)\\s+(.*)"), - STATUTE_SUBDIV_GROUPED_REGEX: /((?:^| )(?:art|bk|ch|subch|col|fig|fol|l|n|no|op|p|pp|para|subpara|pt|r|sec|subsec|sv|sch|tit|vrs|vol)\. *)/g, - STATUTE_SUBDIV_PLAIN_REGEX: /(?:(?:^| )(?:art|bk|ch|subch|col|fig|fol|l|n|no|op|p|pp|para|subpara|pt|r|sec|subsec|sv|sch|tit|vrs|vol)\. *)/, - STATUTE_SUBDIV_STRINGS: { - "art.": "article", - "bk.": "book", - "ch.": "chapter", - "subch.": "subchapter", - "p.": "page", - "pp.": "page", - "para.": "paragraph", - "subpara.": "subparagraph", - "pt.": "part", - "r.": "rule", - "sec.": "section", - "subsec.": "subsection", - "sch.": "schedule", - "tit.": "title", - "col.": "column", - "fig.": "figure", - "fol.": "folio", - "l.": "line", - "n.": "note", - "no.": "issue", - "op.": "opus", - "sv.": "sub-verbo", - "vrs.": "verse", - "vol.": "volume" - }, - STATUTE_SUBDIV_STRINGS_REVERSE: { - "article": "art.", - "book": "bk.", - "chapter": "ch.", - "subchapter": "subch.", - "page": "p.", - "paragraph": "para.", - "subparagraph": "subpara.", - "part": "pt.", - "rule": "r.", - "section": "sec.", - "subsection": "subsec.", - "schedule": "sch.", - "title": "tit.", - "column": "col.", - "figure": "fig.", - "folio": "fol.", - "line": "l.", - "note": "n.", - "issue": "no.", - "opus": "op.", - "sub-verbo": "sv.", - "sub verbo": "sv.", - "verse": "vrs.", - "volume": "vol." - }, - LOCATOR_LABELS_MAP: { - "art": "article", - "bk": "book", - "ch": "chapter", - "subch": "subchapter", - "col": "column", - "fig": "figure", - "fol": "folio", - "l": "line", - "n": "note", - "no": "issue", - "op": "opus", - "p": "page", - "pp": "page", - "para": "paragraph", - "subpara": "subparagraph", - "pt": "part", - "r": "rule", - "sec": "section", - "subsec": "subsection", - "sv": "sub-verbo", - "sch": "schedule", - "tit": "title", - "vrs": "verse", - "vol": "volume" - }, - MODULE_MACROS: { - "juris-pretitle": true, - "juris-title": true, - "juris-pretitle-short": true, - "juris-title-short": true, - "juris-main": true, - "juris-main-short": true, - "juris-tail": true, - "juris-tail-short": true, - "juris-locator": true - }, - MODULE_TYPES: { - "legal_case": true, - "legislation": true, - "bill": true, - "hearing": true, - "gazette": true, - "report": true, - "regulation": true, - "standard": true - }, - NestedBraces: [ - ["(", "["], - [")", "]"] - ], - checkNestedBrace: function(state) { - if (state.opt.xclass === "note") { - this.depth = 0; - this.update = function(str) { - var str = str ? str : ''; - var lst = str.split(/([\(\)])/); - for (var i=1,ilen=lst.length;i -1) { - var raw_locator = item.locator; - item.locator = raw_locator.slice(0, idx); - raw_locator = raw_locator.slice(idx + 1); - var m = raw_locator.match(/^([0-9]{4}-[0-9]{2}-[0-9]{2}).*/); - if (m) { - item["locator-date"] = this.fun.dateparser.parseDateToObject(m[1]); - raw_locator = raw_locator.slice(m[1].length); - } - item["locator-extra"] = raw_locator.replace(/^\s+/, "").replace(/\s+$/, ""); - } - } - } - if (item.locator) { - item.locator = ("" + item.locator).replace(/\s+$/, ''); - } - return item; - }, - normalizeLocaleStr: function(str) { - if (!str) return; - var lst = str.split('-'); - lst[0] = lst[0].toLowerCase(); - if (lst[1]) { - lst[1] = lst[1].toUpperCase(); - } - return lst.join("-"); - }, - parseNoteFieldHacks: function(Item, validFieldsForType, allowDateOverride) { - if ("string" !== typeof Item.note) return; - var elems = []; - var lines = Item.note.split('\n'); - var lastline = ""; - for (var i=0, ilen=lines.length; i0 || j>1) && !elems[j-1].match(CSL.NOTE_FIELD_REGEXP)) { - break - } else { - elems[j] = '\n' + elems[j].slice(2,-1).trim() + '\n'; - } - } - lines[i] = elems.join(''); - } - } - lines = lines.join('\n').split('\n'); - var offset = 0; - var names = {}; - for (var i=0,ilen=lines.length;i -1) { - if (allowDateOverride) { - Item[key] = {raw: val}; - if (!validFieldsForType || (validFieldsForType[key] && val.match(/^[0-9]{4}(?:-[0-9]{1,2}(?:-[0-9]{1,2})*)*$/))) { - lines[i] = ""; - } - } - } else if (!Item[key]) { - if (CSL.NAME_VARIABLES.indexOf(key) > -1) { - if (!names[key]) { - names[key] = []; - } - var lst = val.split(/\s*\|\|\s*/); - if (lst.length === 1) { - names[key].push({literal:lst[0]}); - } else if (lst.length === 2) { - var name = {family:lst[0],given:lst[1]}; - CSL.parseParticles(name); - names[key].push(name); - } - } else { - Item[key] = val; - } - if (!validFieldsForType || validFieldsForType[key]) { - lines[i] = ""; - } - } - } - for (var key in names) { - Item[key] = names[key]; - } - if (validFieldsForType) { - if (lines[offset].trim()) { - lines[offset] = '\n' + lines[offset] - } - for (var i=offset-1;i>-1;i--) { - if (!lines[i].trim()) { - lines = lines.slice(0, i).concat(lines.slice(i + 1)); - } - } - } - Item.note = lines.join("\n").trim(); - }, - GENDERS: ["masculine", "feminine"], - ERROR_NO_RENDERED_FORM: 1, - PREVIEW: "Just for laughs.", - ASSUME_ALL_ITEMS_REGISTERED: 2, - START: 0, - END: 1, - SINGLETON: 2, - SEEN: 6, - SUCCESSOR: 3, - SUCCESSOR_OF_SUCCESSOR: 4, - SUPPRESS: 5, - SINGULAR: 0, - PLURAL: 1, - LITERAL: true, - BEFORE: 1, - AFTER: 2, - DESCENDING: 1, - ASCENDING: 2, - ONLY_FIRST: 1, - ALWAYS: 2, - ONLY_LAST: 3, - FINISH: 1, - POSITION_FIRST: 0, - POSITION_SUBSEQUENT: 1, - POSITION_IBID: 2, - POSITION_IBID_WITH_LOCATOR: 3, - MARK_TRAILING_NAMES: true, - POSITION_TEST_VARS: ["position", "first-reference-note-number", "near-note"], - AREAS: ["citation", "citation_sort", "bibliography", "bibliography_sort"], - CITE_FIELDS: ["first-reference-note-number", "locator", "locator-extra"], - MINIMAL_NAME_FIELDS: ["literal", "family"], - SWAPPING_PUNCTUATION: [".", "!", "?", ":", ","], - TERMINAL_PUNCTUATION: [":", ".", ";", "!", "?", " "], - NONE: 0, - NUMERIC: 1, - POSITION: 2, - COLLAPSE_VALUES: ["citation-number", "year", "year-suffix"], - DATE_PARTS: ["year", "month", "day"], - DATE_PARTS_ALL: ["year", "month", "day", "season"], - DATE_PARTS_INTERNAL: ["year", "month", "day", "year_end", "month_end", "day_end"], - NAME_PARTS: ["non-dropping-particle", "family", "given", "dropping-particle", "suffix", "literal"], - DECORABLE_NAME_PARTS: ["given", "family", "suffix"], - DISAMBIGUATE_OPTIONS: [ - "disambiguate-add-names", - "disambiguate-add-givenname", - "disambiguate-add-year-suffix" - ], - GIVENNAME_DISAMBIGUATION_RULES: [ - "all-names", - "all-names-with-initials", - "primary-name", - "primary-name-with-initials", - "by-cite" - ], - NAME_ATTRIBUTES: [ - "and", - "delimiter-precedes-last", - "delimiter-precedes-et-al", - "initialize-with", - "initialize", - "name-as-sort-order", - "sort-separator", - "et-al-min", - "et-al-use-first", - "et-al-subsequent-min", - "et-al-subsequent-use-first", - "form", - "prefix", - "suffix", - "delimiter" - ], - PARALLEL_MATCH_VARS: ["container-title"], - PARALLEL_TYPES: ["bill","gazette","regulation","legislation","legal_case","treaty","article-magazine","article-journal"], - PARALLEL_COLLAPSING_MID_VARSET: ["volume", "issue", "container-title", "section", "collection-number"], - LOOSE: 0, - STRICT: 1, - TOLERANT: 2, - PREFIX_PUNCTUATION: /[.;:]\s*$/, - SUFFIX_PUNCTUATION: /^\s*[.;:,\(\)]/, - NUMBER_REGEXP: /(?:^\d+|\d+$)/, - NAME_INITIAL_REGEXP: /^([A-Z\u0590-\u05ff\u00c0-\u017f\u0400-\u042f\u0600-\u06ff\u0370\u0372\u0376\u0386\u0388-\u03ab\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03fd-\u03ff])([a-zA-Z\u00c0-\u017f\u0400-\u052f\u0600-\u06ff\u0370-\u03ff\u1f00-\u1fff]*|)/, - ROMANESQUE_REGEXP: /[-0-9a-zA-Z\u0590-\u05d4\u05d6-\u05ff\u0080-\u017f\u0400-\u052f\u0370-\u03ff\u1f00-\u1fff\u0600-\u06ff\u200c\u200d\u200e\u0218\u0219\u021a\u021b\u202a-\u202e]/, - ROMANESQUE_NOT_REGEXP: /[^a-zA-Z\u0590-\u05ff\u00c0-\u017f\u0400-\u052f\u0370-\u03ff\u1f00-\u1fff\u0600-\u06ff\u200c\u200d\u200e\u0218\u0219\u021a\u021b\u202a-\u202e]/g, - STARTSWITH_ROMANESQUE_REGEXP: /^[&a-zA-Z\u0590-\u05d4\u05d6-\u05ff\u00c0-\u017f\u0400-\u052f\u0370-\u03ff\u1f00-\u1fff\u0600-\u06ff\u200c\u200d\u200e\u0218\u0219\u021a\u021b\u202a-\u202e]/, - ENDSWITH_ROMANESQUE_REGEXP: /[.;:&a-zA-Z\u0590-\u05d4\u05d6-\u05ff\u00c0-\u017f\u0400-\u052f\u0370-\u03ff\u1f00-\u1fff\u0600-\u06ff\u200c\u200d\u200e\u0218\u0219\u021a\u021b\u202a-\u202e]$/, - ALL_ROMANESQUE_REGEXP: /^[a-zA-Z\u0590-\u05ff\u00c0-\u017f\u0400-\u052f\u0370-\u03ff\u1f00-\u1fff\u0600-\u06ff\u200c\u200d\u200e\u0218\u0219\u021a\u021b\u202a-\u202e]+$/, - VIETNAMESE_SPECIALS: /[\u00c0-\u00c3\u00c8-\u00ca\u00cc\u00cd\u00d2-\u00d5\u00d9\u00da\u00dd\u00e0-\u00e3\u00e8-\u00ea\u00ec\u00ed\u00f2-\u00f5\u00f9\u00fa\u00fd\u0101\u0103\u0110\u0111\u0128\u0129\u0168\u0169\u01a0\u01a1\u01af\u01b0\u1ea0-\u1ef9]/, - VIETNAMESE_NAMES: /^(?:(?:[.AaBbCcDdEeGgHhIiKkLlMmNnOoPpQqRrSsTtUuVvXxYy \u00c0-\u00c3\u00c8-\u00ca\u00cc\u00cd\u00d2-\u00d5\u00d9\u00da\u00dd\u00e0-\u00e3\u00e8-\u00ea\u00ec\u00ed\u00f2-\u00f5\u00f9\u00fa\u00fd\u0101\u0103\u0110\u0111\u0128\u0129\u0168\u0169\u01a0\u01a1\u01af\u01b0\u1ea0-\u1ef9]{2,6})(\s+|$))+$/, - NOTE_FIELDS_REGEXP: /\{:(?:[\-_a-z]+|[A-Z]+):[^\}]+\}/g, - NOTE_FIELD_REGEXP: /^([\-_a-z]+|[A-Z]+):\s*([^\}]+)$/, - PARTICLE_GIVEN_REGEXP: /^([^ ]+(?:\u02bb |\u2019 | |\' ) *)(.+)$/, - PARTICLE_FAMILY_REGEXP: /^([^ ]+(?:\-|\u02bb|\u2019| |\') *)(.+)$/, - DISPLAY_CLASSES: ["block", "left-margin", "right-inline", "indent"], - NAME_VARIABLES: [ - "author", - "editor", - "translator", - "contributor", - "collection-editor", - "composer", - "container-author", - "director", - "editorial-director", - "interviewer", - "original-author", - "recipient" - ], - NUMERIC_VARIABLES: [ - "call-number", - "chapter-number", - "collection-number", - "edition", - "page", - "issue", - "locator", - "number", - "number-of-pages", - "number-of-volumes", - "volume", - "citation-number" - ], - DATE_VARIABLES: [ - "locator-date", - "issued", - "event-date", - "accessed", - "container", - "original-date", - "publication-date", - "original-date", - "available-date", - "submitted" - ], - TITLE_FIELD_SPLITS: function(seg) { - var keys = ["title", "short", "main", "sub"]; - var ret = {}; - for (var i=0,ilen=keys.length;i"); - while (open > -1 && close > -1) { - if (open > close) { - end = open + 1; - } else { - end = close + 1; - } - if (open < close && str.slice(open + 1, close).indexOf("<") === -1) { - ret[ret.length - 1] += str.slice(0, open); - ret.push(str.slice(open, close + 1)); - ret.push(""); - str = str.slice(end); - } else { - ret[ret.length - 1] += str.slice(0, close + 1); - str = str.slice(end); - } - open = str.indexOf("<"); - close = str.indexOf(">"); - } - ret[ret.length - 1] += str; - return ret; - }, - demoteNoiseWords: function (state, fld, drop_or_demote) { - var SKIP_WORDS = state.locale[state.opt.lang].opts["leading-noise-words"]; - if (fld && drop_or_demote) { - fld = fld.split(/\s+/); - fld.reverse(); - var toEnd = []; - for (var j = fld.length - 1; j > -1; j += -1) { - if (SKIP_WORDS.indexOf(fld[j].toLowerCase()) > -1) { - toEnd.push(fld.pop()); - } else { - break; - } - } - fld.reverse(); - var start = fld.join(" "); - var end = toEnd.join(" "); - if ("drop" === drop_or_demote || !end) { - fld = start; - } else if ("demote" === drop_or_demote) { - fld = [start, end].join(", "); - } - } - return fld; - }, - extractTitleAndSubtitle: function (Item) { - var segments = ["", "container-"]; - for (var i=0,ilen=segments.length;i -1) { - var callbacks = []; - if (state.opt.development_extensions.thin_non_breaking_space_html_hack && state.opt.mode === "html") { - callbacks.push(function (txt) { - return txt.replace(/\u202f/g, ''); - }); - } - if (callbacks.length) { - return function (txt) { - for (var i = 0, ilen = callbacks.length; i < ilen; i += 1) { - txt = callbacks[i](txt); - } - return CSL.Output.Formats[state.opt.mode].text_escape(txt); - } - } else { - return CSL.Output.Formats[state.opt.mode].text_escape; - } - } else { - return function (txt) { return txt; }; - } - }, - SKIP_WORDS: ["about","above","across","afore","after","against","along","alongside","amid","amidst","among","amongst","anenst","apropos","apud","around","as","aside","astride","at","athwart","atop","barring","before","behind","below","beneath","beside","besides","between","beyond","but","by","circa","despite","down","during","except","for","forenenst","from","given","in","inside","into","lest","like","modulo","near","next","notwithstanding","of","off","on","onto","out","over","per","plus","pro","qua","sans","since","than","through"," thru","throughout","thruout","till","to","toward","towards","under","underneath","until","unto","up","upon","versus","vs.","v.","vs","v","via","vis-à-vis","with","within","without","according to","ahead of","apart from","as for","as of","as per","as regards","aside from","back to","because of","close to","due to","except for","far from","inside of","instead of","near to","next to","on to","out from","out of","outside of","prior to","pursuant to","rather than","regardless of","such as","that of","up to","where as","or", "yet", "so", "for", "and", "nor", "a", "an", "the", "de", "d'", "von", "van", "c", "et", "ca"], - FORMAT_KEY_SEQUENCE: [ - "@strip-periods", - "@font-style", - "@font-variant", - "@font-weight", - "@text-decoration", - "@vertical-align", - "@quotes" - ], - INSTITUTION_KEYS: [ - "font-style", - "font-variant", - "font-weight", - "text-decoration", - "text-case" - ], - SUFFIX_CHARS: "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z", - ROMAN_NUMERALS: [ - [ "", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix" ], - [ "", "x", "xx", "xxx", "xl", "l", "lx", "lxx", "lxxx", "xc" ], - [ "", "c", "cc", "ccc", "cd", "d", "dc", "dcc", "dccc", "cm" ], - [ "", "m", "mm", "mmm", "mmmm", "mmmmm"] - ], - CREATORS: [ - "author", - "editor", - "contributor", - "translator", - "recipient", - "interviewer", - "composer", - "original-author", - "container-author", - "collection-editor" - ], - LANGS: { - "af-ZA":"Afrikaans", - "ar":"Arabic", - "bg-BG":"Bulgarian", - "ca-AD":"Catalan", - "cs-CZ":"Czech", - "da-DK":"Danish", - "de-AT":"Austrian", - "de-CH":"German (CH)", - "de-DE":"German (DE)", - "el-GR":"Greek", - "en-GB":"English (GB)", - "en-US":"English (US)", - "es-ES":"Spanish", - "et-EE":"Estonian", - "eu":"European", - "fa-IR":"Persian", - "fi-FI":"Finnish", - "fr-CA":"French (CA)", - "fr-FR":"French (FR)", - "he-IL":"Hebrew", - "hr-HR":"Croatian", - "hu-HU":"Hungarian", - "is-IS":"Icelandic", - "it-IT":"Italian", - "ja-JP":"Japanese", - "km-KH":"Khmer", - "ko-KR":"Korean", - "lt-LT":"Lithuanian", - "lv-LV":"Latvian", - "mn-MN":"Mongolian", - "nb-NO":"Norwegian (Bokmål)", - "nl-NL":"Dutch", - "nn-NO":"Norwegian (Nynorsk)", - "pl-PL":"Polish", - "pt-BR":"Portuguese (BR)", - "pt-PT":"Portuguese (PT)", - "ro-RO":"Romanian", - "ru-RU":"Russian", - "sk-SK":"Slovak", - "sl-SI":"Slovenian", - "sr-RS":"Serbian", - "sv-SE":"Swedish", - "th-TH":"Thai", - "tr-TR":"Turkish", - "uk-UA":"Ukranian", - "vi-VN":"Vietnamese", - "zh-CN":"Chinese (CN)", - "zh-TW":"Chinese (TW)" - }, - LANG_BASES: { - af: "af_ZA", - ar: "ar", - bg: "bg_BG", - ca: "ca_AD", - cs: "cs_CZ", - da: "da_DK", - de: "de_DE", - el: "el_GR", - en: "en_US", - es: "es_ES", - et: "et_EE", - eu: "eu", - fa: "fa_IR", - fi: "fi_FI", - fr: "fr_FR", - he: "he_IL", - hr: "hr-HR", - hu: "hu_HU", - is: "is_IS", - it: "it_IT", - ja: "ja_JP", - km: "km_KH", - ko: "ko_KR", - lt: "lt_LT", - lv: "lv-LV", - mn: "mn_MN", - nb: "nb_NO", - nl: "nl_NL", - nn: "nn-NO", - pl: "pl_PL", - pt: "pt_PT", - ro: "ro_RO", - ru: "ru_RU", - sk: "sk_SK", - sl: "sl_SI", - sr: "sr_RS", - sv: "sv_SE", - th: "th_TH", - tr: "tr_TR", - uk: "uk_UA", - vi: "vi_VN", - zh: "zh_CN" - }, - SUPERSCRIPTS: { - "\u00AA": "\u0061", - "\u00B2": "\u0032", - "\u00B3": "\u0033", - "\u00B9": "\u0031", - "\u00BA": "\u006F", - "\u02B0": "\u0068", - "\u02B1": "\u0266", - "\u02B2": "\u006A", - "\u02B3": "\u0072", - "\u02B4": "\u0279", - "\u02B5": "\u027B", - "\u02B6": "\u0281", - "\u02B7": "\u0077", - "\u02B8": "\u0079", - "\u02E0": "\u0263", - "\u02E1": "\u006C", - "\u02E2": "\u0073", - "\u02E3": "\u0078", - "\u02E4": "\u0295", - "\u1D2C": "\u0041", - "\u1D2D": "\u00C6", - "\u1D2E": "\u0042", - "\u1D30": "\u0044", - "\u1D31": "\u0045", - "\u1D32": "\u018E", - "\u1D33": "\u0047", - "\u1D34": "\u0048", - "\u1D35": "\u0049", - "\u1D36": "\u004A", - "\u1D37": "\u004B", - "\u1D38": "\u004C", - "\u1D39": "\u004D", - "\u1D3A": "\u004E", - "\u1D3C": "\u004F", - "\u1D3D": "\u0222", - "\u1D3E": "\u0050", - "\u1D3F": "\u0052", - "\u1D40": "\u0054", - "\u1D41": "\u0055", - "\u1D42": "\u0057", - "\u1D43": "\u0061", - "\u1D44": "\u0250", - "\u1D45": "\u0251", - "\u1D46": "\u1D02", - "\u1D47": "\u0062", - "\u1D48": "\u0064", - "\u1D49": "\u0065", - "\u1D4A": "\u0259", - "\u1D4B": "\u025B", - "\u1D4C": "\u025C", - "\u1D4D": "\u0067", - "\u1D4F": "\u006B", - "\u1D50": "\u006D", - "\u1D51": "\u014B", - "\u1D52": "\u006F", - "\u1D53": "\u0254", - "\u1D54": "\u1D16", - "\u1D55": "\u1D17", - "\u1D56": "\u0070", - "\u1D57": "\u0074", - "\u1D58": "\u0075", - "\u1D59": "\u1D1D", - "\u1D5A": "\u026F", - "\u1D5B": "\u0076", - "\u1D5C": "\u1D25", - "\u1D5D": "\u03B2", - "\u1D5E": "\u03B3", - "\u1D5F": "\u03B4", - "\u1D60": "\u03C6", - "\u1D61": "\u03C7", - "\u2070": "\u0030", - "\u2071": "\u0069", - "\u2074": "\u0034", - "\u2075": "\u0035", - "\u2076": "\u0036", - "\u2077": "\u0037", - "\u2078": "\u0038", - "\u2079": "\u0039", - "\u207A": "\u002B", - "\u207B": "\u2212", - "\u207C": "\u003D", - "\u207D": "\u0028", - "\u207E": "\u0029", - "\u207F": "\u006E", - "\u2120": "\u0053\u004D", - "\u2122": "\u0054\u004D", - "\u3192": "\u4E00", - "\u3193": "\u4E8C", - "\u3194": "\u4E09", - "\u3195": "\u56DB", - "\u3196": "\u4E0A", - "\u3197": "\u4E2D", - "\u3198": "\u4E0B", - "\u3199": "\u7532", - "\u319A": "\u4E59", - "\u319B": "\u4E19", - "\u319C": "\u4E01", - "\u319D": "\u5929", - "\u319E": "\u5730", - "\u319F": "\u4EBA", - "\u02C0": "\u0294", - "\u02C1": "\u0295", - "\u06E5": "\u0648", - "\u06E6": "\u064A" - }, - SUPERSCRIPTS_REGEXP: new RegExp("[\u00AA\u00B2\u00B3\u00B9\u00BA\u02B0\u02B1\u02B2\u02B3\u02B4\u02B5\u02B6\u02B7\u02B8\u02E0\u02E1\u02E2\u02E3\u02E4\u1D2C\u1D2D\u1D2E\u1D30\u1D31\u1D32\u1D33\u1D34\u1D35\u1D36\u1D37\u1D38\u1D39\u1D3A\u1D3C\u1D3D\u1D3E\u1D3F\u1D40\u1D41\u1D42\u1D43\u1D44\u1D45\u1D46\u1D47\u1D48\u1D49\u1D4A\u1D4B\u1D4C\u1D4D\u1D4F\u1D50\u1D51\u1D52\u1D53\u1D54\u1D55\u1D56\u1D57\u1D58\u1D59\u1D5A\u1D5B\u1D5C\u1D5D\u1D5E\u1D5F\u1D60\u1D61\u2070\u2071\u2074\u2075\u2076\u2077\u2078\u2079\u207A\u207B\u207C\u207D\u207E\u207F\u2120\u2122\u3192\u3193\u3194\u3195\u3196\u3197\u3198\u3199\u319A\u319B\u319C\u319D\u319E\u319F\u02C0\u02C1\u06E5\u06E6]", "g"), - UPDATE_GROUP_CONTEXT_CONDITION: function (state, termtxt, valueTerm) { - if (state.tmp.group_context.tip.condition) { - if (state.tmp.group_context.tip.condition.test) { - var testres; - if (state.tmp.group_context.tip.condition.test === "empty-label") { - testres = !termtxt; - } else if (state.tmp.group_context.tip.condition.test === "comma-safe") { - var empty = !termtxt; - var alpha = termtxt.slice(0,1).match(CSL.ALL_ROMANESQUE_REGEXP); - var num = state.tmp.just_did_number; - if (empty) { - testres = true; - } else if (num) { - if (alpha && !valueTerm) { - testres = true; - } else { - testres = false; - } - } else { - if (alpha && !valueTerm) { - testres = true; - } else { - testres = false; - } - } - } - if (testres) { - state.tmp.group_context.tip.force_suppress = false; - } else { - state.tmp.group_context.tip.force_suppress = true; - } - if (state.tmp.group_context.tip.condition.not) { - state.tmp.group_context.tip.force_suppress = !state.tmp.group_context.tip.force_suppress; - } - } - } else { - if (termtxt.slice(-1).match(/[0-9]/)) { - state.tmp.just_did_number = true; - } else { - state.tmp.just_did_number = false; - } - } - }, - locale: {}, - locale_opts: {}, - locale_dates: {} -}; -if (typeof require !== "undefined" && typeof module !== 'undefined' && "exports" in module) { - var CSL_IS_NODEJS = true; - exports.CSL = CSL; -} -CSL.TERMINAL_PUNCTUATION_REGEXP = new RegExp("^([" + CSL.TERMINAL_PUNCTUATION.slice(0, -1).join("") + "])(.*)"); -CSL.CLOSURES = new RegExp(".*[\\]\\)]"); -if ("undefined" === typeof console) { - CSL.debug = function (str) { - dump("CSL: " + str + "\n"); - }; - CSL.error = function (str) { - dump("CSL error: " + str + "\n"); - }; -} else { - CSL.debug = function (str) { - console.log("CSL: " + str); - }; - CSL.error = function (str) { - console.log("CSL error: " + str); - }; -} -CSL.XmlJSON = function (dataObj) { - this.dataObj = dataObj; - this.institution = { - name:"institution", - attrs:{ - "institution-parts":"long", - "delimiter":", ", - "substitute-use-first":"1", - "use-last":"1" - }, - children:[ - { - name:"institution-part", - attrs:{ - name:"long" - }, - children:[] - } - ] - }; -}; -CSL.XmlJSON.prototype.clean = function (json) { - return json; -}; -CSL.XmlJSON.prototype.getStyleId = function (myjson, styleName) { - var tagName = 'id'; - if (styleName) { - tagName = 'title'; - } - var ret = ""; - var children = myjson.children; - for (var i=0,ilen=children.length;i -1 && !myjson.children[i].attrs.prefix && !myjson.children[i].attrs.suffix) { - mustHaves = mustHaves.slice(0,haveVarname).concat(mustHaves.slice(haveVarname+1)); - } else { - useme = false; - break; - } - } - if (useme && !mustHaves.length) { - myjson.attrs["has-publisher-and-publisher-place"] = true; - } - } - for (var i=0,ilen=myjson.children.length;i 0) { - var myparents = parents.slice(); - var parent = myparents.pop(); - if (parent === "substitute") { - return true; - } else { - return this.isChildOfSubstitute(myparents); - } - } - return false; -}; -CSL.XmlJSON.prototype.addMissingNameNodes = function(myjson,parents) { - if (!parents) { - parents = []; - } - if (myjson.name === "names") { - if (!this.isChildOfSubstitute(parents)) { - var addName = true; - for (var i=0,ilen=myjson.children.length;i -1) { - var institution = this.nodeCopy(this.institution); - for (var i=0,ilen = CSL.INSTITUTION_KEYS.length;i/, ""); - xml = xml.replace(//g, ""); - xml = xml.replace(/^\s+/g, ""); - xml = xml.replace(/\s+$/g, ""); - return xml; -}; -CSL.parseXml = function(str) { - var _pos = 0; - var _obj = {children:[]}; - var _stack = [_obj.children]; - function _listifyString(str) { - str = str.split(/(?:\r\n|\n|\r)/).join(" ").replace(/>[ ]+<").replace(/<\!--.*?-->/g, ""); - var lst = str.split("><"); - var stylePos = null; - for (var i=0,ilen=lst.length;i 0) { - lst[i] = "<" + lst[i]; - } - if (i < (lst.length-1)) { - lst[i] = lst[i] + ">"; - } - if ("number" != typeof stylePos) { - if (lst[i].slice(0, 7) === "