diff --git a/explore/src/app/app-routing.module.ts b/explore/src/app/app-routing.module.ts
index 559bdf82..1f18342c 100644
--- a/explore/src/app/app-routing.module.ts
+++ b/explore/src/app/app-routing.module.ts
@@ -1,34 +1,35 @@
import {NgModule} from '@angular/core';
-import {PreloadAllModules, RouterModule, Routes} from '@angular/router';
+import {RouterModule, Routes} from '@angular/router';
import {OpenaireErrorPageComponent} from './error/errorPage.component';
import {PageURLResolverComponent} from "./openaireLibrary/utils/pageURLResolver.component";
const routes: Routes = [
// Other Pages
{path: '', loadChildren: () => import('./home/home.module').then(m => m.HomeModule)},
- //{ path: 'home', loadChildren: './home/home.module#HomeModule'},
{path: 'home', redirectTo: '', pathMatch: 'full'},
{path: 'mail-preferences', loadChildren: () => import('./userEmailPreferences/mailPrefs.module').then(m => m.LibMailPrefsModule)},
{path: 'sdgs', loadChildren: () => import('./sdg/sdg.module').then(m => m.SdgModule)},
- {path: 'fields-of-science', loadChildren: () => import('./fos/fos.module').then(m => m.FosModule)},
- {path: 'contact-us', loadChildren: () => import('./contact/contact.module').then(m => m.ContactModule)},
+ {path: 'fields-of-science', loadChildren: () => import('./fos/fos.module').then(m => m.FosModule), data: {extraOffset: 100}},
+ {path: 'contact-us', loadChildren: () => import('./contact/contact.module').then(m => m.ContactModule), data: {hasQuickContact: false}},
// ORCID Pages
{path: 'orcid', loadChildren: () => import('./orcid/orcid.module').then(m => m.LibOrcidModule)},
{path: 'my-orcid-links', loadChildren: () => import('./orcid/my-orcid-links/myOrcidLinks.module').then(m => m.LibMyOrcidLinksModule)},
// Landing Pages
- {path: 'search/result', loadChildren: () => import('./landingPages/result/libResult.module').then(m => m.LibResultModule)},
- {path: 'search/publication', loadChildren: () => import('./landingPages/publication/libPublication.module').then(m => m.LibPublicationModule)},
- {path: 'search/dataset', loadChildren: () => import('./landingPages/dataset/libDataset.module').then(m => m.LibDatasetModule)},
- {path: 'search/software', loadChildren: () => import('./landingPages/software/libSoftware.module').then(m => m.LibSoftwareModule)},
- {path: 'search/other', loadChildren: () => import('./landingPages/orp/libOrp.module').then(m => m.LibOrpModule)},
- {path: 'search/project', loadChildren: () => import('./landingPages/project/libProject.module').then(m => m.LibProjectModule)},
+ {path: 'search/result', loadChildren: () => import('./landingPages/result/libResult.module').then(m => m.LibResultModule), data: {hasQuickContact: false}},
+ {path: 'search/publication', loadChildren: () => import('./landingPages/publication/libPublication.module').then(m => m.LibPublicationModule), data: {hasQuickContact: false}},
+ {path: 'search/dataset', loadChildren: () => import('./landingPages/dataset/libDataset.module').then(m => m.LibDatasetModule), data: {hasQuickContact: false}},
+ {path: 'search/software', loadChildren: () => import('./landingPages/software/libSoftware.module').then(m => m.LibSoftwareModule), data: {hasQuickContact: false}},
+ {path: 'search/other', loadChildren: () => import('./landingPages/orp/libOrp.module').then(m => m.LibOrpModule), data: {hasQuickContact: false}},
+ {path: 'search/project', loadChildren: () => import('./landingPages/project/libProject.module').then(m => m.LibProjectModule), data: {hasQuickContact: false}},
{
path: 'search/dataprovider',
- loadChildren: () => import('././landingPages/dataProvider/libDataProvider.module').then(m => m.LibDataProviderModule)
+ loadChildren: () => import('././landingPages/dataProvider/libDataProvider.module').then(m => m.LibDataProviderModule),
+ data: {hasQuickContact: false}
},
{
path: 'search/organization',
- loadChildren: () => import('./landingPages/organization/libOrganization.module').then(m => m.LibOrganizationModule)
+ loadChildren: () => import('./landingPages/organization/libOrganization.module').then(m => m.LibOrganizationModule),
+ data: {hasQuickContact: false}
},
{
path: 'project-report',
diff --git a/explore/src/app/app.component.ts b/explore/src/app/app.component.ts
index a3e2cad1..538570f3 100644
--- a/explore/src/app/app.component.ts
+++ b/explore/src/app/app.component.ts
@@ -1,10 +1,8 @@
-import {Component} from '@angular/core';
+import {ChangeDetectorRef, Component, ViewChild} from '@angular/core';
import {ActivatedRoute, Router} from '@angular/router';
-
import {EnvProperties} from './openaireLibrary/utils/properties/env-properties';
import {MenuItem} from './openaireLibrary/sharedComponents/menu';
import {EnvironmentSpecificService} from './openaireLibrary/utils/properties/environment-specific.service';
-
import {Session, User} from './openaireLibrary/login/utils/helper.class';
import {UserManagementService} from "./openaireLibrary/services/user-management.service";
import {ConfigurationService} from "./openaireLibrary/utils/configuration/configuration.service";
@@ -15,6 +13,14 @@ import {properties} from "../environments/environment";
import {SmoothScroll} from "./openaireLibrary/utils/smooth-scroll";
import {SEOService} from "./openaireLibrary/sharedComponents/SEO/SEO.service";
import {OpenaireEntities} from "./openaireLibrary/utils/properties/searchFields";
+import {FormBuilder, FormGroup, Validators} from '@angular/forms';
+import {QuickContactComponent} from './openaireLibrary/sharedComponents/quick-contact/quick-contact.component';
+import {EmailService} from './openaireLibrary/utils/email/email.service';
+import {Composer} from "./openaireLibrary/utils/email/composer";
+import {AlertModal} from './openaireLibrary/utils/modal/alert';
+import {NotificationHandler} from "./openaireLibrary/utils/notification-handler";
+import {QuickContactService} from './openaireLibrary/sharedComponents/quick-contact/quick-contact.service';
+import {LayoutService} from './openaireLibrary/dashboard/sharedComponents/sidebar/layout.service';
@Component({
//changeDetection: ChangeDetectionStrategy.Default,
@@ -46,6 +52,9 @@ import {OpenaireEntities} from "./openaireLibrary/utils/properties/searchFields"
+
+
`
})
export class AppComponent {
@@ -56,17 +65,29 @@ export class AppComponent {
properties: EnvProperties = properties;
user: User;
header: Header;
+ public showQuickContact: boolean;
+ public contactForm: FormGroup;
+ public sending: boolean = false;
+ @ViewChild('quickContact') quickContact: QuickContactComponent;
+ @ViewChild('modal') modal: AlertModal;
+
subscriptions = [];
constructor(private route: ActivatedRoute, private propertiesService: EnvironmentSpecificService,
private router: Router, private userManagementService: UserManagementService, private smoothScroll: SmoothScroll,
- private configurationService: ConfigurationService, private _meta: Meta, private seoService: SEOService,) {
+ private configurationService: ConfigurationService, private _meta: Meta, private seoService: SEOService,
+ private emailService: EmailService, private fb: FormBuilder, private quickContactService: QuickContactService,
+ private layoutService: LayoutService, private cdr: ChangeDetectorRef) {
}
ngOnInit() {
if (typeof document !== 'undefined') {
this.isClient = true;
}
+ this.subscriptions.push(this.layoutService.hasQuickContact.subscribe(hasQuickContact => {
+ this.showQuickContact = hasQuickContact;
+ this.cdr.detectChanges();
+ }));
this.configurationService.initCommunityInformation(this.properties, this.properties.adminToolsCommunity);
this.feedbackmail = this.properties.feedbackmail;
if (this.properties.environment == "production" || this.properties.environment == "development") {
@@ -88,6 +109,10 @@ export class AppComponent {
position: 'left',
badge: true
};
+ this.reset();
+ }));
+ this.subscriptions.push(this.quickContactService.isDisplayed.subscribe(display => {
+ this.showQuickContact = display;
}));
}
@@ -138,7 +163,6 @@ export class AppComponent {
new MenuItem("", "Registries", "", "/search/entity-registries", false, ["datasource"], ["/search/entity-registries"], {}),
new MenuItem("", "Browse all", "", "/search/find/dataproviders", false, ["datasource"], ["/search/find/dataproviders"], {})]
),
- new MenuItem("contact", "Contact us", "", "/contact-us", false, [], ["/contact-us"], {}),
];
if (Session.isPortalAdministrator(this.user)) {
this.userMenuItems.push(new MenuItem("", "Manage all links", "", "/claims", false, [], ["/claims"], {}));
@@ -150,6 +174,66 @@ export class AppComponent {
if (this.user) {
this.userMenuItems.push(new MenuItem("", "User information", "", "/user-info", false, [], [], {}));
}
+ }
+
+ public send(event) {
+ if (event.valid === true) {
+ this.sendMail(this.properties.admins);
+ }
+ }
+
+ private sendMail(admins: string[]) {
+ this.sending = true;
+ this.subscriptions.push(this.emailService.contact(this.properties,
+ Composer.composeEmailForExplore(this.contactForm.value, admins),
+ this.contactForm.value.recaptcha).subscribe(
+ res => {
+ if (res) {
+ this.sending = false;
+ this.reset();
+ this.modalOpen();
+ } else {
+ this.handleError('Email sent failed! Please try again.');
+ }
+ },
+ error => {
+ this.handleError('Email sent failed! Please try again.', error);
+ }
+ ));
+ }
+
+ public reset() {
+ if (this.quickContact) {
+ this.quickContact.close();
+ }
+ this.contactForm = this.fb.group({
+ name: this.fb.control('', Validators.required),
+ surname: this.fb.control('', Validators.required),
+ email: this.fb.control('', [Validators.required, Validators.email]),
+ affiliation: this.fb.control(''),
+ message: this.fb.control('', Validators.required),
+ recaptcha: this.fb.control('', Validators.required),
+ });
+ }
+
+ public modalOpen() {
+ this.modal.okButton = true;
+ this.modal.alertTitle = 'Your request has been successfully submitted';
+ this.modal.message = 'Our team will respond to your submission soon.';
+ this.modal.cancelButton = false;
+ this.modal.okButtonLeft = false;
+ this.modal.okButtonText = 'OK';
+ this.modal.open();
+ }
+
+ handleError(message: string, error = null) {
+ if (error) {
+ console.error(error);
+ }
+ this.sending = false;
+ this.quickContact.close();
+ NotificationHandler.rise(message, 'danger');
+ this.contactForm.get('recaptcha').setValue('');
}
}
diff --git a/explore/src/app/app.module.ts b/explore/src/app/app.module.ts
index 30fd904d..75a1a717 100755
--- a/explore/src/app/app.module.ts
+++ b/explore/src/app/app.module.ts
@@ -17,6 +17,8 @@ import {Schema2jsonldModule} from "./openaireLibrary/sharedComponents/schema2jso
import {CacheInterceptorService} from "./openaireLibrary/cache-interceptor.service";
import {DEFAULT_TIMEOUT, TimeoutInterceptor} from "./openaireLibrary/timeout-interceptor.service";
import {ErrorInterceptorService} from "./openaireLibrary/error-interceptor.service";
+import {QuickContactModule} from './openaireLibrary/sharedComponents/quick-contact/quick-contact.module';
+import {AlertModalModule} from './openaireLibrary/utils/modal/alertModal.module';
@NgModule({
imports: [
@@ -29,7 +31,10 @@ import {ErrorInterceptorService} from "./openaireLibrary/error-interceptor.servi
BrowserModule.withServerTransition({ appId: 'explore' }),
AppRoutingModule,
BrowserTransferStateModule,
- BrowserAnimationsModule, PageURLResolverModule, Schema2jsonldModule
+ BrowserAnimationsModule, PageURLResolverModule,
+ Schema2jsonldModule,
+ QuickContactModule,
+ AlertModalModule
],
declarations: [AppComponent, OpenaireErrorPageComponent],
exports: [AppComponent],
diff --git a/explore/src/app/fos/fos.component.html b/explore/src/app/fos/fos.component.html
index b8e77672..8092553e 100644
--- a/explore/src/app/fos/fos.component.html
+++ b/explore/src/app/fos/fos.component.html
@@ -18,7 +18,7 @@
We have integrated a Field-of-Science (FoS) taxonomy into our dataset to organize and discover research more effectively. Using the full capabilities of the OpenAIRE Research Graph (full-texts, citations, references, venues) we apply AI and bring forward any multidisciplinarity potential.
- Our work is based on the work from our partner Athena Research Center: SciNoBo : A Hierarchical Multi-Label Classifier of Scientific Publications -
https://arxiv.org/abs/2204.00880
+ Our work is based on the work from our partner Athena Research Center: SciNoBo : A Hierarchical Multi-Label Classifier of Scientific Publications -
https://doi.org/10.1145/3487553.3524677
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
No results were found.
diff --git a/explore/src/app/fos/fos.component.ts b/explore/src/app/fos/fos.component.ts
index d43eeeda..5e44c821 100644
--- a/explore/src/app/fos/fos.component.ts
+++ b/explore/src/app/fos/fos.component.ts
@@ -1,5 +1,5 @@
import {HttpClient} from "@angular/common/http";
-import {Component, OnDestroy, OnInit} from "@angular/core";
+import {ChangeDetectorRef, Component, ElementRef, OnDestroy, OnInit, ViewChild} from "@angular/core";
import {Subscription} from "rxjs";
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
@@ -12,6 +12,10 @@ import {Location} from "@angular/common";
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
+import {debounceTime, distinctUntilChanged} from "rxjs/operators";
+import Timeout = NodeJS.Timeout;
+
+declare var UIkit;
@Component({
selector: 'fos',
@@ -25,7 +29,7 @@ export class FosComponent implements OnInit, OnDestroy {
public fos: any[] = [];
public fosOptions: string[] = [];
- public index: number = 0;
+ public activeSection: string;
public keywordControl: UntypedFormControl;
public keyword: string = null;
@@ -36,8 +40,12 @@ export class FosComponent implements OnInit, OnDestroy {
properties: EnvProperties = properties;
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Fields of Science'}];
-
- subscriptions: Subscription[] = [];
+
+ private subscriptions: Subscription[] = [];
+ private observer: IntersectionObserver;
+ private timeout: Timeout;
+ @ViewChild('tabs') tabs: ElementRef;
+ public sliderInit: boolean = false;
constructor(
private httpClient: HttpClient,
@@ -48,7 +56,8 @@ export class FosComponent implements OnInit, OnDestroy {
private _meta: Meta,
private _title: Title,
private seoService: SEOService,
- private _piwikService: PiwikService
+ private _piwikService: PiwikService,
+ private cdr: ChangeDetectorRef
) {}
ngOnInit() {
@@ -60,15 +69,48 @@ export class FosComponent implements OnInit, OnDestroy {
this.updateUrl(this.url);
this.updateTitle(this.pageTitle);
this.updateDescription(this.pageDescription);
- this.keywordControl = this.fb.control('');
this.httpClient.get(properties.domain+'/assets/vocabulary/fos.json').subscribe(data => {
this.fos = data['fos'];
this.convertFosToOptions();
- this.subscriptions.push(this.route.queryParams.subscribe(params => {
- if(params.keyword) {
- this.keywordControl.setValue(params.keyword);
- this.keyword = this.keywordControl.value;
- this.findMatches();
+ if (typeof document !== 'undefined') {
+ setTimeout(()=> {
+ let slider = UIkit.slider(this.tabs.nativeElement);
+ slider.clsActive = 'uk-slider-active';
+ slider.updateActiveClasses();
+ this.sliderInit = true;
+ slider.slides.forEach(item => {
+ item.classList.remove('uk-active');
+ });
+ if (this.route.snapshot.fragment) {
+ this.activeSection = this.route.snapshot.fragment;
+ let i = this.fos.findIndex(item => item.id == this.route.snapshot.fragment);
+ slider.show(i);
+ } else {
+ this.activeSection = this.fos[0].id;
+ }
+ this.cdr.detectChanges();
+ });
+ }
+ this.subscriptions.push(this.route.fragment.subscribe(fragment => {
+ if(fragment) {
+ this.activeSection = fragment;
+ if(this.tabs) {
+ let slider = UIkit.slider(this.tabs.nativeElement);
+ let i = this.fos.findIndex(item => item.id == fragment);
+ slider.show(i);
+ }
+ } else {
+ this.activeSection = this.fos[0].id;
+ }
+ }));
+ this.keywordControl = this.fb.control('');
+ this.subscriptions.push(this.keywordControl.valueChanges.pipe(debounceTime(500), distinctUntilChanged()).subscribe(value => {
+ this.keyword = value;
+ this.findMatches(this.keyword);
+ if (typeof document !== 'undefined') {
+ setTimeout(() => {
+ this.setObserver();
+ });
}
}));
});
@@ -78,19 +120,33 @@ export class FosComponent implements OnInit, OnDestroy {
for (let sub of this.subscriptions) {
sub.unsubscribe();
}
- }
-
- changeDisplayedFos(i) {
- this.index = i;
- }
-
- onSubmit() {
- if(this.keywordControl.value) {
- this.keyword = this.keywordControl.value;
- // TODO: router.navigate();
- this.location.go(window.location.pathname + '?keyword=' + this.keyword);
- this.findMatches();
+ if(this.observer) {
+ this.observer.disconnect();
}
+ }
+
+ private setObserver() {
+ if(this.observer) {
+ this.observer.disconnect();
+ }
+ this.observer = new IntersectionObserver((entries) => {
+ entries.forEach(entry => {
+ if(entry.isIntersecting) {
+ if(this.timeout) {
+ clearTimeout(this.timeout);
+ }
+ this.timeout = setTimeout(() => {
+ this._router.navigate(['./'], {fragment: entry.target.id, relativeTo: this.route, state: {disableScroll: true}});
+ }, 200);
+ }
+ });
+ }, {threshold: 0.25, rootMargin: '-100px'});
+ this.fos.forEach(fos => {
+ let element = document.getElementById(fos.id);
+ if(element) {
+ this.observer.observe(element);
+ }
+ });
}
convertFosToOptions() {
@@ -110,29 +166,21 @@ export class FosComponent implements OnInit, OnDestroy {
});
}
- findMatches() {
+ findMatches(value: string) {
this.viewResults = JSON.parse(JSON.stringify(this.fos));
let matchLevel1: boolean = false;
let matchLevel2: boolean = false;
// 1st level search
if(this.viewResults.length) {
this.viewResults = this.viewResults.filter(item => {
- if(item.id.includes(this.keyword.toLowerCase())) {
- matchLevel1 = true;
- } else {
- matchLevel1 = false;
- }
+ matchLevel1 = !!item.id.includes(value?.toLowerCase());
// // 2nd level search
if(item.children?.length && !matchLevel1) {
item.children = item.children.filter(subItem => {
- if(subItem.id.includes(this.keyword.toLowerCase())) {
- matchLevel2 = true;
- } else {
- matchLevel2 = false;
- }
+ matchLevel2 = !!subItem.id.includes(value?.toLowerCase());
// 3rd level search
if(subItem.children?.length && !matchLevel2) {
- subItem.children = subItem.children.filter(subSubItem => subSubItem.id.includes(this.keyword.toLowerCase()));
+ subItem.children = subItem.children.filter(subSubItem => subSubItem.id.includes(value?.toLowerCase()));
}
return subItem.children?.length > 0 || matchLevel2;
});
@@ -150,12 +198,6 @@ export class FosComponent implements OnInit, OnDestroy {
}
}
- clearKeyword() {
- this.keyword = null;
- this.keywordControl.setValue('');
- this.location.go(window.location.pathname);
- }
-
public urlEncodeAndQuote(str: string): string {
return StringUtils.quote(StringUtils.URIEncode(str));
}
diff --git a/explore/src/app/home/home.component.html b/explore/src/app/home/home.component.html
index 45fb8e44..62980d3e 100644
--- a/explore/src/app/home/home.component.html
+++ b/explore/src/app/home/home.component.html
@@ -26,12 +26,12 @@
All linked together through citations and semantics.
-
+
-
+ [onChangeNavigate]="false" class="uk-width-2-5">
+
-
+
Need more information?
diff --git a/explore/src/app/home/home.component.ts b/explore/src/app/home/home.component.ts
index d7093b5a..e7ea6bd8 100644
--- a/explore/src/app/home/home.component.ts
+++ b/explore/src/app/home/home.component.ts
@@ -19,7 +19,6 @@ import {SearchProjectsService} from '../openaireLibrary/services/searchProjects.
import {SearchOrganizationsService} from '../openaireLibrary/services/searchOrganizations.service';
import {RefineFieldResultsService} from '../openaireLibrary/services/refineFieldResults.service';
import {OpenaireEntities, SearchFields} from '../openaireLibrary/utils/properties/searchFields';
-
import {RouterHelper} from '../openaireLibrary/utils/routerHelper.class';
import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties';
import {ErrorCodes} from '../openaireLibrary/utils/properties/errorCodes';
@@ -32,6 +31,7 @@ import {properties} from "../../environments/environment";
import {Numbers, NumbersComponent} from "../openaireLibrary/sharedComponents/numbers/numbers.component";
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
import {NumberUtils} from '../openaireLibrary/utils/number-utils.class';
+import {QuickContactService} from '../openaireLibrary/sharedComponents/quick-contact/quick-contact.service';
@Component({
selector: 'home',
@@ -138,7 +138,8 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
properties: EnvProperties = properties;
public openaireEntities = OpenaireEntities;
public readMore: boolean = false;
-
+ public showQuickContact: boolean;
+ @ViewChild('contact') contact: ElementRef;
subscriptions: any[] = [];
@ViewChildren('scrolling_element') elements: QueryList;
@@ -195,7 +196,8 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
private location: Location, private _piwikService: PiwikService,
private config: ConfigurationService, private _meta: Meta, private _title: Title, private seoService: SEOService,
private helper: HelperService,
- private cdr: ChangeDetectorRef
+ private cdr: ChangeDetectorRef,
+ private quickContactService: QuickContactService
) {
let description = "OpenAIRE Explore: Over 100M of research deduplicated, 170K research software, 11M research data. One of the largest open scholarly records collection worldwide.";
let title = "OpenAIRE | Find and Share research";
@@ -304,11 +306,28 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
ngAfterViewInit() {
if (typeof window !== "undefined") {
- this.createObserver();
+ this.createObservers();
}
}
- createObserver() {
+ createObservers() {
+ let options = {
+ root: null,
+ rootMargin: '200px',
+ threshold: 1.0
+ };
+ let intersectionObserver = new IntersectionObserver(entries => {
+ entries.forEach(entry => {
+ if (entry.isIntersecting && this.showQuickContact) {
+ this.showQuickContact = false;
+ this.quickContactService.setDisplay(this.showQuickContact);
+ } else if (!entry.isIntersecting && !this.showQuickContact) {
+ this.showQuickContact = true;
+ this.quickContactService.setDisplay(this.showQuickContact);
+ }
+ });
+ }, options);
+ intersectionObserver.observe(this.contact.nativeElement);
let mutationObserver = new MutationObserver(entries => {
entries.forEach(entry => {
if (entry.attributeName === 'style') {
@@ -327,6 +346,7 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
this.elements.forEach(element => {
mutationObserver.observe(element.nativeElement, {attributes: true});
});
+ this.subscriptions.push(intersectionObserver);
this.subscriptions.push(mutationObserver);
}
diff --git a/explore/src/assets/explore-custom.less b/explore/src/assets/explore-custom.less
index 60707c55..e5899a09 100644
--- a/explore/src/assets/explore-custom.less
+++ b/explore/src/assets/explore-custom.less
@@ -3,13 +3,22 @@
/* Button */
@button-primary-background: @explore-color;
@inverse-button-primary-background: @explore-color;
+@button-secondary-border: @explore-color;
+@button-secondary-color: @explore-color;
+@button-secondary-hover-background: @global-secondary-background;
+@button-secondary-hover-background-gradient: none;
+@button-secondary-active-background: @global-secondary-background;
+@button-secondary-active-background-gradient: none;
+
/* Background */
@background-primary-background: @explore-color;
@background-primary-background-gradient: none;
-/* Text */
+/** Text */
@text-primary-color: @explore-color;
+@text-background-color: @explore-color;
+@inverse-text-primary-color: @explore-color;
/* Label */
@label-secondary-color: @explore-color;
diff --git a/explore/src/environments/environment.ts b/explore/src/environments/environment.ts
index e4260d95..2379110b 100644
--- a/explore/src/environments/environment.ts
+++ b/explore/src/environments/environment.ts
@@ -28,7 +28,7 @@ export let properties: EnvProperties = {
searchDataciteAPIURL: "https://api.datacite.org/works",
searchOrcidURL: "https://pub.orcid.org/v2.1/",
orcidURL: "https://orcid.org/",
- orcidAPIURL: "http://duffy.di.uoa.gr:8080/uoa-orcid-service/",
+ orcidAPIURL: "http://duffy.di.uoa.gr:19480/uoa-orcid-service/",
orcidTokenURL : "https://sandbox.orcid.org/oauth/authorize?",
orcidClientId: "APP-A5M3KTX6NCN67L91",
doiURL: "https://doi.org/",
@@ -65,7 +65,7 @@ export let properties: EnvProperties = {
cacheUrl: "http://dl170.madgik.di.uoa.gr:3000/get?url=",
- adminToolsAPIURL: "http://duffy.di.uoa.gr:8080/uoa-admin-tools/",
+ adminToolsAPIURL: "http://duffy.di.uoa.gr:19280/uoa-admin-tools/",
adminToolsCommunity: "openaire",
datasourcesAPI: "https://beta.services.openaire.eu/openaire/ds/api/",