add jsonld in all pages (advance, table view, link, deposit)
	for search pages assign SearchResultsPage representation
	for other pages assign Website

SEO service:
	add a service that updates the rel canonical url (in client side)
	call the service in each page



git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-services-library/trunk/ng-openaire-library/src/app@53740 d315682c-612b-4755-9ff5-7f18f6832af3
This commit is contained in:
argiro.kokogiannaki 2018-11-14 10:38:53 +00:00
parent ae21b00172
commit 78d4bb3f7d
46 changed files with 231 additions and 56 deletions

View File

@ -1,4 +1,4 @@
<schema2jsonld *ngIf="url" [URL]="url" name="Manage links" type="other"></schema2jsonld>
<div class="uk-width-1-1"> <div class="uk-width-1-1">
<helper position="top"></helper> <helper position="top"></helper>
</div> </div>

View File

@ -9,6 +9,7 @@ import {AlertModal} from '../../../utils/modal/alert';
import {Session} from '../../../login/utils/helper.class'; import {Session} from '../../../login/utils/helper.class';
import{EnvProperties} from '../../../utils/properties/env-properties'; import{EnvProperties} from '../../../utils/properties/env-properties';
import {LoginErrorCodes} from '../../../login/utils/guardHelper.class'; import {LoginErrorCodes} from '../../../login/utils/guardHelper.class';
import { SEOService } from '../../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
@ -21,16 +22,20 @@ export class DisplayClaimsComponent {
properties:EnvProperties; properties:EnvProperties;
public searchTermStream = new Subject<string>(); public searchTermStream = new Subject<string>();
constructor (private _claimService: ClaimsService, private route: ActivatedRoute, private _router:Router, private location: Location) { constructor (private _claimService: ClaimsService, private route: ActivatedRoute, private _router:Router, private location: Location,
private seoService: SEOService) {
} }
ngOnInit() { ngOnInit() {
this.route.data this.route.data
.subscribe((data: { envSpecific: EnvProperties }) => { .subscribe((data: { envSpecific: EnvProperties }) => {
this.properties = data.envSpecific; this.properties = data.envSpecific;
this.url = data.envSpecific.baseLink+this._router.url;
}); });
this.sub = this.route.queryParams.subscribe(params => { this.sub = this.route.queryParams.subscribe(params => {
this.seoService.createLinkForCanonicalURL(false);
if( this.myClaims){ if( this.myClaims){
this.fetchBy = "User"; this.fetchBy = "User";
this.fetchId = Session.getUserEmail(); this.fetchId = Session.getUserEmail();
@ -120,6 +125,9 @@ export class DisplayClaimsComponent {
claimsDeleted:number = 0; claimsDeleted:number = 0;
@Input() communityId:string = null; @Input() communityId:string = null;
url=null;
getClaims () { getClaims () {
if(!Session.isLoggedIn()){ if(!Session.isLoggedIn()){
this.userValidMessage = "User session has expired. Please login again."; this.userValidMessage = "User session has expired. Please login again.";

View File

@ -9,11 +9,13 @@ import {AlertModalModule} from '../../../utils/modal/alertModal.module';
import {ClaimEntityFormatterModule} from '../entityFormatter/claimEntityFormatter.module'; import {ClaimEntityFormatterModule} from '../entityFormatter/claimEntityFormatter.module';
import {PagingModule } from '../../../utils/paging.module'; import {PagingModule } from '../../../utils/paging.module';
import {HelperModule} from '../../../utils/helper/helper.module'; import {HelperModule} from '../../../utils/helper/helper.module';
import {Schema2jsonldModule} from '../../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, FormsModule, RouterModule, ClaimServiceModule, LoadingModalModule, AlertModalModule, CommonModule, FormsModule, RouterModule, ClaimServiceModule, LoadingModalModule, AlertModalModule,
ClaimEntityFormatterModule, PagingModule, HelperModule ClaimEntityFormatterModule, PagingModule, HelperModule, Schema2jsonldModule, SEOServiceModule
], ],
declarations: [ declarations: [

View File

@ -1,6 +1,7 @@
<div id="tm-main" class=" uk-section uk-margin-small-top tm-middle" > <div id="tm-main" class=" uk-section uk-margin-small-top tm-middle" >
<div uk-grid uk-grid> <div uk-grid uk-grid>
<div class="tm-main uk-width-1-1@s uk-width-1-1@m uk-width-1-1@l uk-row-first "> <div class="tm-main uk-width-1-1@s uk-width-1-1@m uk-width-1-1@l uk-row-first ">
<schema2jsonld *ngIf="url" [URL]="url" name="Linking" type="other"></schema2jsonld>
<div class="uk-container uk-margin-top"> <div class="uk-container uk-margin-top">
<div class="uk-article-title custom-article-title"> <div class="uk-article-title custom-article-title">

View File

@ -12,6 +12,7 @@ import {SearchPublicationsService} from '../../services/searchPublications.se
import {SearchDatasetsService} from '../../services/searchDatasets.service'; import {SearchDatasetsService} from '../../services/searchDatasets.service';
import {SearchSoftwareService} from '../../services/searchSoftware.service'; import {SearchSoftwareService} from '../../services/searchSoftware.service';
import {SearchOrpsService} from '../../services/searchOrps.service'; import {SearchOrpsService} from '../../services/searchOrps.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
@ -39,21 +40,25 @@ export class DirectLinkingComponent {
properties:EnvProperties; properties:EnvProperties;
@Input() communityId:string= null; @Input() communityId:string= null;
localStoragePrefix:string = ""; localStoragePrefix:string = "";
url=null;
constructor (private _router: Router, private route: ActivatedRoute, private entitySearch:EntitiesSearchService, constructor (private _router: Router, private route: ActivatedRoute, private entitySearch:EntitiesSearchService,
private publicationsSearch:SearchPublicationsService, private datasetsSearch:SearchDatasetsService, private publicationsSearch:SearchPublicationsService, private datasetsSearch:SearchDatasetsService,
private softwareSearch:SearchSoftwareService,private ORPSearch:SearchOrpsService, private softwareSearch:SearchSoftwareService,private ORPSearch:SearchOrpsService,
private _meta: Meta, private _title: Title) { private _meta: Meta, private _title: Title, private seoService: SEOService ) {
var title = "OpenAIRE | Direct Linking"; var title = "OpenAIRE | Direct Linking";
this._meta.updateTag({content:title},"property='og:title'"); this._meta.updateTag({content:title},"property='og:title'");
this._title.setTitle(title); this._title.setTitle(title);
this.seoService.createLinkForCanonicalURL(false);
} }
ngOnInit() { ngOnInit() {
this.route.data this.route.data
.subscribe((data: { envSpecific: EnvProperties }) => { .subscribe((data: { envSpecific: EnvProperties }) => {
this.properties = data.envSpecific; this.properties = data.envSpecific;
this.url = data.envSpecific.baseLink+this._router.url;
}); });

View File

@ -21,6 +21,8 @@ import {ClaimProjectsSearchFormModule} from '../claim-utils/claimProjectSearchFo
import {ClaimResultSearchFormModule} from '../claim-utils/claimResultSearchForm.module'; import {ClaimResultSearchFormModule} from '../claim-utils/claimResultSearchForm.module';
import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {OrpsServiceModule} from '../../services/orpsService.module'; import {OrpsServiceModule} from '../../services/orpsService.module';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
@ -28,7 +30,7 @@ import {OrpsServiceModule} from '../../services/orpsService.module';
SharedModule, SharedModule,
SelectedProjectsModule, SelectedContextsModule, SelectedPublicationsModule, InsertClaimsModule, SelectedProjectsModule, SelectedContextsModule, SelectedPublicationsModule, InsertClaimsModule,
EntitySearchServiceModule, PublicationsServiceModule, DatasetsServiceModule, StartOverModule, HelperModule, EntitySearchServiceModule, PublicationsServiceModule, DatasetsServiceModule, StartOverModule, HelperModule,
ClaimContextSearchFormModule, ClaimProjectsSearchFormModule, ClaimResultSearchFormModule, OrpsServiceModule ClaimContextSearchFormModule, ClaimProjectsSearchFormModule, ClaimResultSearchFormModule, OrpsServiceModule, Schema2jsonldModule, SEOServiceModule
], ],

View File

@ -1,6 +1,7 @@
<div id="tm-main" class=" uk-section uk-margin-small-top tm-middle" > <div id="tm-main" class=" uk-section uk-margin-small-top tm-middle" >
<div uk-grid uk-grid> <div uk-grid uk-grid>
<div class="tm-main uk-width-1-1@s uk-width-1-1@m uk-width-1-1@l uk-row-first "> <div class="tm-main uk-width-1-1@s uk-width-1-1@m uk-width-1-1@l uk-row-first ">
<schema2jsonld *ngIf="url" [URL]="url" name="Link your research results" type="other"></schema2jsonld>
<div class="uk-container uk-margin-top"> <div class="uk-container uk-margin-top">
<div class="uk-article-title custom-article-title"> <div class="uk-article-title custom-article-title">

View File

@ -10,6 +10,7 @@ import {ClaimProject, ClaimResult} from '../claim-utils/claimEntities.class';
import {EntitiesSearchService} from '../../utils/entitiesAutoComplete/entitySearch.service'; import {EntitiesSearchService} from '../../utils/entitiesAutoComplete/entitySearch.service';
import {SearchPublicationsService} from '../../services/searchPublications.service'; import {SearchPublicationsService} from '../../services/searchPublications.service';
import {SearchDatasetsService} from '../../services/searchDatasets.service'; import {SearchDatasetsService} from '../../services/searchDatasets.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
declare var UIkit:any; declare var UIkit:any;
@ -42,20 +43,25 @@ export class LinkingGenericComponent {
sub:any =null; sub:any =null;
properties:EnvProperties; properties:EnvProperties;
localStoragePrefix:string = "linking_"; localStoragePrefix:string = "linking_";
url=null;
constructor (private _router: Router, private route: ActivatedRoute, private entitySearch:EntitiesSearchService, constructor (private _router: Router, private route: ActivatedRoute, private entitySearch:EntitiesSearchService,
private publicationsSearch:SearchPublicationsService, private datasetsSearch:SearchDatasetsService, private publicationsSearch:SearchPublicationsService, private datasetsSearch:SearchDatasetsService,
private _meta: Meta, private _title: Title ) { private _meta: Meta, private _title: Title,
private seoService: SEOService ) {
var title = "OpenAIRE | Linking"; var title = "OpenAIRE | Linking";
this._meta.updateTag({content:title},"property='og:title'"); this._meta.updateTag({content:title},"property='og:title'");
this._title.setTitle(title); this._title.setTitle(title);
this.seoService.createLinkForCanonicalURL(false);
} }
ngOnInit() { ngOnInit() {
this.route.data this.route.data
.subscribe((data: { envSpecific: EnvProperties }) => { .subscribe((data: { envSpecific: EnvProperties }) => {
this.properties = data.envSpecific; this.properties = data.envSpecific;
this.url = data.envSpecific.baseLink+this._router.url;
}); });
if( typeof localStorage !== 'undefined') { if( typeof localStorage !== 'undefined') {

View File

@ -15,13 +15,16 @@ import {BulkClaimModule} from './bulkClaim/bulkClaim.module';
import {ClaimResultSearchFormModule} from '../claim-utils/claimResultSearchForm.module'; import {ClaimResultSearchFormModule} from '../claim-utils/claimResultSearchForm.module';
import {HelperModule} from '../../utils/helper/helper.module'; import {HelperModule} from '../../utils/helper/helper.module';
import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: [ imports: [
SharedModule, SelectedProjectsModule, SelectedContextsModule, SharedModule, SelectedProjectsModule, SelectedContextsModule,
SelectedPublicationsModule, SelectedPublicationsModule,
InsertClaimsModule, StartOverModule, InsertClaimsModule, StartOverModule,
ClaimContextSearchFormModule, ClaimProjectsSearchFormModule, BulkClaimModule, ClaimResultSearchFormModule, HelperModule ClaimContextSearchFormModule, ClaimProjectsSearchFormModule, BulkClaimModule, ClaimResultSearchFormModule,
HelperModule, Schema2jsonldModule, SEOServiceModule
], ],
providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled], providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled],
declarations: [ declarations: [

View File

@ -2,6 +2,7 @@
<div id="tm-main" class=" uk-section uk-margin-small-top tm-middle" > <div id="tm-main" class=" uk-section uk-margin-small-top tm-middle" >
<div uk-grid uk-grid> <div uk-grid uk-grid>
<div class="tm-main uk-width-1-1@s uk-width-1-1@m uk-width-1-1@l uk-row-first "> <div class="tm-main uk-width-1-1@s uk-width-1-1@m uk-width-1-1@l uk-row-first ">
<schema2jsonld *ngIf="url" [URL]="url" name="Deposit {{requestFor}}" type="other"></schema2jsonld>
<div class="uk-container uk-margin-top"> <div class="uk-container uk-margin-top">
<div class="uk-article-title custom-article-title"> <div class="uk-article-title custom-article-title">

View File

@ -15,6 +15,7 @@ import {RouterHelper} from '../../utils/routerHelper.class';
import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; import {SearchDataprovidersService} from '../../services/searchDataproviders.service';
import {OrganizationService} from '../../services/organization.service'; import {OrganizationService} from '../../services/organization.service';
import {PiwikService} from '../../utils/piwik/piwik.service'; import {PiwikService} from '../../utils/piwik/piwik.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
selector: 'deposit-by-subject-result', selector: 'deposit-by-subject-result',
@ -46,13 +47,15 @@ export class DepositBySubjectResultComponent {
sub: any; sub: any;
piwiksub: any; piwiksub: any;
properties:EnvProperties; properties:EnvProperties;
url=null;
constructor (private _router: Router, constructor (private _router: Router,
private route: ActivatedRoute, private route: ActivatedRoute,
private _searchDataprovidersService: SearchDataprovidersService, private _searchDataprovidersService: SearchDataprovidersService,
private _meta: Meta, private _meta: Meta,
private _title: Title, private _title: Title,
private _piwikService:PiwikService) { private _piwikService:PiwikService,
private seoService: SEOService) {
this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService); this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService);
@ -63,6 +66,8 @@ export class DepositBySubjectResultComponent {
this.updateTitle(title); this.updateTitle(title);
this.updateDescription(description); this.updateDescription(description);
this.seoService.createLinkForCanonicalURL(false);
} }
ngOnInit() { ngOnInit() {
@ -71,6 +76,8 @@ export class DepositBySubjectResultComponent {
this.properties = data.envSpecific; this.properties = data.envSpecific;
this.updateUrl(data.envSpecific.baseLink+this._router.url); this.updateUrl(data.envSpecific.baseLink+this._router.url);
this.zenodo = this.properties.zenodo; this.zenodo = this.properties.zenodo;
this.url = data.envSpecific.baseLink+this._router.url;
if(this.properties.enablePiwikTrack && (typeof document !== 'undefined')){ if(this.properties.enablePiwikTrack && (typeof document !== 'undefined')){
this.piwiksub = this._piwikService.trackView(this.properties, "Deposit "+this.requestFor, this.piwikSiteId).subscribe(); this.piwiksub = this._piwikService.trackView(this.properties, "Deposit "+this.requestFor, this.piwikSiteId).subscribe();
} }

View File

@ -12,13 +12,15 @@ import {DataProvidersServiceModule} from '../../services/dataProvidersService.mo
import {SearchResultsModule } from '../../searchPages/searchUtils/searchResults.module'; import {SearchResultsModule } from '../../searchPages/searchUtils/searchResults.module';
import {HelperModule} from '../../utils/helper/helper.module'; import {HelperModule} from '../../utils/helper/helper.module';
import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, FormsModule, CommonModule, FormsModule,
DepositModule, DepositModule,
SearchResultsModule, DataProvidersServiceModule, PagingModule, SearchResultsModule, DataProvidersServiceModule, PagingModule,
HelperModule HelperModule, Schema2jsonldModule, SEOServiceModule
], ],
declarations: [ declarations: [

View File

@ -2,6 +2,8 @@
<div class="uk-article-title custom-article-title uk-margin-bottom"> <div class="uk-article-title custom-article-title uk-margin-bottom">
Deposit {{requestFor}} Deposit {{requestFor}}
</div> </div>
<schema2jsonld *ngIf="url" [URL]="url" name="Deposit {{requestFor}}" type="other"></schema2jsonld>
<div class="uk-width-1-1"> <div class="uk-width-1-1">
<helper position="top"></helper> <helper position="top"></helper>
</div> </div>

View File

@ -7,6 +7,7 @@ import {Observable} from 'rxjs/Observable';
import {EnvProperties} from '../utils/properties/env-properties'; import {EnvProperties} from '../utils/properties/env-properties';
import {PiwikService} from '../utils/piwik/piwik.service'; import {PiwikService} from '../utils/piwik/piwik.service';
import { SEOService } from '../sharedComponents/SEO/SEO.service';
@Component({ @Component({
@ -40,14 +41,15 @@ export class DepositComponent {
piwiksub:any; piwiksub:any;
properties:EnvProperties; properties:EnvProperties;
url=null;
constructor (private route: ActivatedRoute, private _router: Router, constructor (private route: ActivatedRoute, private _router: Router,
private _meta: Meta, private _title: Title, private _meta: Meta, private _title: Title,
private _piwikService:PiwikService) { private _piwikService:PiwikService,
private seoService: SEOService ) {
var title = "Deposit "+this.requestFor; var title = "Deposit "+this.requestFor;
var description = "Openaire, repositories, open access, content provider, compatibility, organization, deposit "+ this.requestFor; var description = "Openaire, repositories, open access, content provider, compatibility, organization, deposit "+ this.requestFor;
this.seoService.createLinkForCanonicalURL(false);
this.updateTitle(title); this.updateTitle(title);
this.updateDescription(description); this.updateDescription(description);
} }
@ -62,7 +64,7 @@ export class DepositComponent {
this.ercGuidlines = this.properties.ercGuidlines this.ercGuidlines = this.properties.ercGuidlines
this.helpdesk = this.properties.helpdesk; this.helpdesk = this.properties.helpdesk;
this.updateUrl(data.envSpecific.baseLink+this._router.url); this.updateUrl(data.envSpecific.baseLink+this._router.url);
this.url = data.envSpecific.baseLink+this._router.url;
if(this.properties.enablePiwikTrack && (typeof document !== 'undefined')){ if(this.properties.enablePiwikTrack && (typeof document !== 'undefined')){
this.piwiksub = this._piwikService.trackView(this.properties, "Deposit "+this.requestFor, this.piwikSiteId).subscribe(); this.piwiksub = this._piwikService.trackView(this.properties, "Deposit "+this.requestFor, this.piwikSiteId).subscribe();
} }

View File

@ -15,6 +15,8 @@ import {PiwikServiceModule} from '../utils/piwik/piwikService.module';
import {HelperModule} from '../utils/helper/helper.module'; import {HelperModule} from '../utils/helper/helper.module';
import { DepositBySubjectComponent } from './datasets/depositBySubject.component'; import { DepositBySubjectComponent } from './datasets/depositBySubject.component';
import {IFrameModule} from '../utils/iframe.module'; import {IFrameModule} from '../utils/iframe.module';
import {Schema2jsonldModule} from '../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../sharedComponents/SEO/SEOService.module';
@ -28,7 +30,7 @@ import {IFrameModule} from '../utils/iframe.module';
SearchResultsModule, SearchResultsModule,
PiwikServiceModule, PiwikServiceModule,
HelperModule, HelperModule,
IFrameModule IFrameModule, Schema2jsonldModule, SEOServiceModule
], ],
declarations: [ declarations: [
DepositComponent, DepositComponent,

View File

@ -12,6 +12,7 @@ import {FetchDataproviders} from '../utils/fetchEntitiesClasses/fetchDat
import {SearchDataprovidersService} from '../services/searchDataproviders.service'; import {SearchDataprovidersService} from '../services/searchDataproviders.service';
import {OrganizationService} from '../services/organization.service'; import {OrganizationService} from '../services/organization.service';
import {PiwikService} from '../utils/piwik/piwik.service'; import {PiwikService} from '../utils/piwik/piwik.service';
import { SEOService } from '../sharedComponents/SEO/SEO.service';
@Component({ @Component({
selector: 'deposit-result', selector: 'deposit-result',
@ -19,6 +20,7 @@ import {PiwikService} from '../utils/piwik/piwik.service';
<div id="tm-main" class=" uk-section uk-margin-small-top tm-middle" > <div id="tm-main" class=" uk-section uk-margin-small-top tm-middle" >
<div uk-grid uk-grid> <div uk-grid uk-grid>
<div class="tm-main uk-width-1-1@s uk-width-1-1@m uk-width-1-1@l uk-row-first "> <div class="tm-main uk-width-1-1@s uk-width-1-1@m uk-width-1-1@l uk-row-first ">
<schema2jsonld *ngIf="url" [URL]="url" name="Deposit {{requestFor}}" type="other"></schema2jsonld>
<div class="uk-container uk-margin-top"> <div class="uk-container uk-margin-top">
<!--div class="uk-article-title custom-article-title"> <!--div class="uk-article-title custom-article-title">
@ -156,6 +158,7 @@ export class DepositResultComponent {
sub: any; piwiksub: any; sub: any; piwiksub: any;
properties:EnvProperties; properties:EnvProperties;
url=null;
constructor ( private _router: Router, constructor ( private _router: Router,
private route: ActivatedRoute, private route: ActivatedRoute,
@ -163,7 +166,8 @@ export class DepositResultComponent {
private _organizationService: OrganizationService, private _organizationService: OrganizationService,
private _meta: Meta, private _meta: Meta,
private _title: Title, private _title: Title,
private _piwikService:PiwikService) { private _piwikService:PiwikService,
private seoService: SEOService) {
this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService); this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService);
@ -171,6 +175,7 @@ export class DepositResultComponent {
var description = "Deposit "+this.requestFor; var description = "Deposit "+this.requestFor;
var title = "Openaire, repositories, open access, content provider, compatibility, organization, deposit "+ this.requestFor; var title = "Openaire, repositories, open access, content provider, compatibility, organization, deposit "+ this.requestFor;
this.seoService.createLinkForCanonicalURL(false);
this.updateTitle(title); this.updateTitle(title);
this.updateDescription(description); this.updateDescription(description);
@ -182,6 +187,7 @@ export class DepositResultComponent {
this.properties = data.envSpecific; this.properties = data.envSpecific;
this.zenodo = this.properties.zenodo; this.zenodo = this.properties.zenodo;
this.updateUrl(data.envSpecific.baseLink+this._router.url); this.updateUrl(data.envSpecific.baseLink+this._router.url);
this.url = data.envSpecific.baseLink+this._router.url;
if(this.properties.enablePiwikTrack && (typeof document !== 'undefined')){ if(this.properties.enablePiwikTrack && (typeof document !== 'undefined')){
this.piwiksub = this._piwikService.trackView(this.properties, "Deposit "+this.requestFor, this.piwikSiteId).subscribe(); this.piwiksub = this._piwikService.trackView(this.properties, "Deposit "+this.requestFor, this.piwikSiteId).subscribe();

View File

@ -28,6 +28,7 @@ import {RelatedDatasourcesTabComponent} from './relatedDatasourcesTab.compon
import {ErrorCodes} from '../../utils/properties/errorCodes'; import {ErrorCodes} from '../../utils/properties/errorCodes';
import {RouterHelper} from '../../utils/routerHelper.class'; import {RouterHelper} from '../../utils/routerHelper.class';
import {PiwikService} from '../../utils/piwik/piwik.service'; import {PiwikService} from '../../utils/piwik/piwik.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
@ -114,7 +115,8 @@ export class DataProviderComponent {
private _searchSoftwareService: SearchSoftwareService, private _searchSoftwareService: SearchSoftwareService,
private _searchOrpsService: SearchOrpsService, private _searchOrpsService: SearchOrpsService,
private _searchProjectsService: SearchProjectsService, private _searchProjectsService: SearchProjectsService,
private _searchDataprovidersService: SearchDataprovidersService) { private _searchDataprovidersService: SearchDataprovidersService,
private seoService: SEOService) {
this.fetchPublications = new FetchPublications(this._searchPublicationsService); this.fetchPublications = new FetchPublications(this._searchPublicationsService);
this.fetchDatasets = new FetchDatasets(this._searchDatasetsService); this.fetchDatasets = new FetchDatasets(this._searchDatasetsService);
this.fetchSoftware = new FetchSoftware(this._searchSoftwareService); this.fetchSoftware = new FetchSoftware(this._searchSoftwareService);
@ -134,6 +136,7 @@ export class DataProviderComponent {
this.sub = this.route.queryParams.subscribe(data => { this.sub = this.route.queryParams.subscribe(data => {
this.updateTitle("Content provider"); this.updateTitle("Content provider");
this.updateDescription("Content provider, search, repositories, open access"); this.updateDescription("Content provider, search, repositories, open access");
this.seoService.createLinkForCanonicalURL();
this.datasourceId = data['datasourceId']; this.datasourceId = data['datasourceId'];
if(this.datasourceId){ if(this.datasourceId){
this.getDataProviderInfo(this.datasourceId); this.getDataProviderInfo(this.datasourceId);

View File

@ -35,13 +35,14 @@ import {OrpsServiceModule} from '../../services/orpsService.module';
import {FreeGuard} from'../../login/freeGuard.guard'; import {FreeGuard} from'../../login/freeGuard.guard';
import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module'; import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: imports:
[CommonModule, FormsModule, RouterModule, [CommonModule, FormsModule, RouterModule,
TabResultModule, IFrameModule, ErrorMessagesModule, MetricsModule, LandingModule, TabResultModule, IFrameModule, ErrorMessagesModule, MetricsModule, LandingModule,
DataProvidersServiceModule, DatasetsServiceModule, ProjectsServiceModule, PublicationsServiceModule, DataProvidersServiceModule, DatasetsServiceModule, ProjectsServiceModule, PublicationsServiceModule,
SoftwareServiceModule, OrpsServiceModule, PagingModule, Schema2jsonldModule], SoftwareServiceModule, OrpsServiceModule, PagingModule, Schema2jsonldModule, SEOServiceModule],
declarations: declarations:
[PublicationsTabComponent, DatasetsTabComponent, StatisticsTabComponent, ProjectsTabComponent, DatasourcesTabComponent, OrganizationsTabComponent, [PublicationsTabComponent, DatasetsTabComponent, StatisticsTabComponent, ProjectsTabComponent, DatasourcesTabComponent, OrganizationsTabComponent,
RelatedDatasourcesTabComponent, DataProviderComponent, SoftwareTabComponent, OrpsTabComponent RelatedDatasourcesTabComponent, DataProviderComponent, SoftwareTabComponent, OrpsTabComponent

View File

@ -11,6 +11,7 @@ import {RouterHelper} from '../../utils/routerHelper.class';
import {DatasetService} from './dataset.service'; import {DatasetService} from './dataset.service';
import {PiwikService} from '../../utils/piwik/piwik.service'; import {PiwikService} from '../../utils/piwik/piwik.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
@ -59,7 +60,8 @@ export class DatasetComponent {
private route: ActivatedRoute, private route: ActivatedRoute,
private _meta: Meta, private _meta: Meta,
private _title: Title, private _title: Title,
private _router: Router) { private _router: Router,
private seoService: SEOService) {
} }
ngOnInit() { ngOnInit() {
@ -73,6 +75,7 @@ export class DatasetComponent {
this.datasetInfo = null; this.datasetInfo = null;
this.updateTitle("Dataset"); this.updateTitle("Dataset");
this.updateDescription("Dataset, search, open access"); this.updateDescription("Dataset, search, open access");
this.seoService.createLinkForCanonicalURL();
this.datasetId = params['datasetId']; this.datasetId = params['datasetId'];
console.info("Id is :"+this.datasetId); console.info("Id is :"+this.datasetId);

View File

@ -22,6 +22,7 @@ import {DatasetService} from './dataset.service';
import {FreeGuard} from'../../login/freeGuard.guard'; import {FreeGuard} from'../../login/freeGuard.guard';
import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module'; import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
@ -29,7 +30,7 @@ import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2j
//MaterialModule.forRoot(), //MaterialModule.forRoot(),
CommonModule, FormsModule, SharedModule, RouterModule, LandingModule, CommonModule, FormsModule, SharedModule, RouterModule, LandingModule,
CiteThisModule, ResultLandingModule, MetricsModule, IFrameModule, CiteThisModule, ResultLandingModule, MetricsModule, IFrameModule,
AltMetricsModule, ConfigurationServiceModule, Schema2jsonldModule AltMetricsModule, ConfigurationServiceModule, Schema2jsonldModule, SEOServiceModule
], ],
declarations: [ declarations: [
DatasetComponent DatasetComponent

View File

@ -9,6 +9,7 @@ import {EnvProperties} from '../../utils/properties/env-propert
import {HtmlProjectReportService} from './htmlProjectReport.service'; import {HtmlProjectReportService} from './htmlProjectReport.service';
import {ProjectService} from '../project/project.service'; import {ProjectService} from '../project/project.service';
import {PiwikService} from '../../utils/piwik/piwik.service'; import {PiwikService} from '../../utils/piwik/piwik.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
declare var UIkit: any; declare var UIkit: any;
@ -69,7 +70,8 @@ export class HtmlProjectReportComponent{
private _projectService: ProjectService, private _projectService: ProjectService,
private _meta: Meta, private _meta: Meta,
private _title: Title, private _title: Title,
private _router: Router) { private _router: Router,
private seoService: SEOService) {
} }
ngOnInit() { ngOnInit() {
@ -104,6 +106,7 @@ export class HtmlProjectReportComponent{
var description = "project, project "+ this.resultsType +" report, funding, open access, publications, research data, software, other research products"; var description = "project, project "+ this.resultsType +" report, funding, open access, publications, research data, software, other research products";
this.updateTitle(title); this.updateTitle(title);
this.updateDescription(description); this.updateDescription(description);
this.seoService.createLinkForCanonicalURL();
} else { } else {
this.showLoading = false; this.showLoading = false;

View File

@ -10,10 +10,11 @@ import {HtmlProjectReportComponent} from './htmlProjectReport.component';
// import { HtmlProjectReportRoutingModule } from './htmlProjectReport-routing.module'; // import { HtmlProjectReportRoutingModule } from './htmlProjectReport-routing.module';
import {FreeGuard} from'../../login/freeGuard.guard'; import {FreeGuard} from'../../login/freeGuard.guard';
import {PiwikServiceModule} from '../../utils/piwik/piwikService.module'; import {PiwikServiceModule} from '../../utils/piwik/piwikService.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, FormsModule, ProjectServiceModule,PiwikServiceModule CommonModule, FormsModule, ProjectServiceModule,PiwikServiceModule, SEOServiceModule
], ],
declarations: [ declarations: [
HtmlProjectReportComponent HtmlProjectReportComponent

View File

@ -26,6 +26,7 @@ import {AlertModal} from '../../utils/modal/alert';
import {PiwikService} from '../../utils/piwik/piwik.service'; import {PiwikService} from '../../utils/piwik/piwik.service';
import {StringUtils} from '../../utils/string-utils.class'; import {StringUtils} from '../../utils/string-utils.class';
import {EnvProperties} from '../../utils/properties/env-properties'; import {EnvProperties} from '../../utils/properties/env-properties';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
selector: 'organization', selector: 'organization',
@ -109,7 +110,8 @@ export class OrganizationComponent {
private _searchProjectsService: SearchProjectsService, private _searchProjectsService: SearchProjectsService,
private _meta: Meta, private _meta: Meta,
private _title: Title, private _title: Title,
private _router: Router) { private _router: Router,
private seoService: SEOService) {
this.fetchPublications = new FetchPublications(this._searchPublicationsService); this.fetchPublications = new FetchPublications(this._searchPublicationsService);
// this.fetchDatasets = new FetchDatasets(this._searchDatasetsService); // this.fetchDatasets = new FetchDatasets(this._searchDatasetsService);
@ -129,6 +131,7 @@ export class OrganizationComponent {
this.organizationInfo=null; this.organizationInfo=null;
this.updateTitle("Organization"); this.updateTitle("Organization");
this.updateDescription("Organization, country, projects, search, repositories, open access"); this.updateDescription("Organization, country, projects, search, repositories, open access");
this.seoService.createLinkForCanonicalURL();
this.projectsClicked = false; this.projectsClicked = false;
this.organizationId = params['organizationId']; this.organizationId = params['organizationId'];

View File

@ -24,6 +24,7 @@ import { SearchingProjectsTabModule} from '../landing-utils/searchingProjectsInT
import {FreeGuard} from'../../login/freeGuard.guard'; import {FreeGuard} from'../../login/freeGuard.guard';
import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module'; import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: [ imports: [
@ -39,7 +40,7 @@ import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2j
PublicationsServiceModule, PublicationsServiceModule,
// DatasetsServiceModule, // DatasetsServiceModule,
ProjectsServiceModule, ProjectsServiceModule,
Schema2jsonldModule Schema2jsonldModule, SEOServiceModule
], ],
declarations: [ declarations: [

View File

@ -11,6 +11,7 @@ import {RouterHelper} from '../../utils/routerHelper.class';
import {OrpService} from './orp.service'; import {OrpService} from './orp.service';
import {PiwikService} from '../../utils/piwik/piwik.service'; import {PiwikService} from '../../utils/piwik/piwik.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
@ -59,7 +60,8 @@ export class OrpComponent {
private route: ActivatedRoute, private route: ActivatedRoute,
private _meta: Meta, private _meta: Meta,
private _title: Title, private _title: Title,
private _router: Router) { private _router: Router,
private seoService: SEOService) {
} }
ngOnInit() { ngOnInit() {
@ -73,7 +75,7 @@ export class OrpComponent {
this.orpInfo = null; this.orpInfo = null;
this.updateTitle("Other Research Product"); this.updateTitle("Other Research Product");
this.updateDescription("Other Research Product, search, open access"); this.updateDescription("Other Research Product, search, open access");
this.seoService.createLinkForCanonicalURL();
this.orpId = params['orpId']; this.orpId = params['orpId'];
console.info("Id is :"+this.orpId); console.info("Id is :"+this.orpId);

View File

@ -20,13 +20,14 @@ import {OrpService} from './orp.service';
import {FreeGuard} from'../../login/freeGuard.guard'; import {FreeGuard} from'../../login/freeGuard.guard';
import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module'; import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, FormsModule, SharedModule, RouterModule, LandingModule, CommonModule, FormsModule, SharedModule, RouterModule, LandingModule,
CiteThisModule, ResultLandingModule, MetricsModule, IFrameModule, CiteThisModule, ResultLandingModule, MetricsModule, IFrameModule,
AltMetricsModule, ConfigurationServiceModule, Schema2jsonldModule AltMetricsModule, ConfigurationServiceModule, Schema2jsonldModule, SEOServiceModule
], ],
declarations: [ declarations: [
OrpComponent OrpComponent

View File

@ -26,6 +26,7 @@ import {ErrorCodes} from '../../utils/properties/errorCodes'
import {PiwikService} from '../../utils/piwik/piwik.service'; import {PiwikService} from '../../utils/piwik/piwik.service';
import {EnvProperties} from '../../utils/properties/env-properties'; import {EnvProperties} from '../../utils/properties/env-properties';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
selector: 'project', selector: 'project',
@ -111,7 +112,8 @@ properties:EnvProperties;
private _reportsService: ReportsService, private _reportsService: ReportsService,
private _meta: Meta, private _meta: Meta,
private _title: Title, private _title: Title,
private _router: Router) { private _router: Router,
private seoService: SEOService) {
} }
ngOnInit() { ngOnInit() {
@ -134,6 +136,7 @@ properties:EnvProperties;
this.updateTitle(title); this.updateTitle(title);
this.updateDescription(description); this.updateDescription(description);
this.seoService.createLinkForCanonicalURL();
this.projectId = params['projectId']; this.projectId = params['projectId'];
var grantId = params['grantId']; var grantId = params['grantId'];

View File

@ -24,6 +24,7 @@ import { LandingModule } from '../landing-utils/landing.module';
import {FreeGuard} from'../../login/freeGuard.guard'; import {FreeGuard} from'../../login/freeGuard.guard';
import {IsRouteEnabled} from '../../error/isRouteEnabled.guard'; import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module'; import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: [ imports: [
@ -31,7 +32,7 @@ import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2j
LoadingModalModule, AlertModalModule, ErrorMessagesModule, LoadingModalModule, AlertModalModule, ErrorMessagesModule,
TabResultModule, IFrameModule, MetricsModule, ReportsServiceModule, TabResultModule, IFrameModule, MetricsModule, ReportsServiceModule,
PublicationsServiceModule, DatasetsServiceModule, SoftwareServiceModule, OrpsServiceModule, ProjectServiceModule, PublicationsServiceModule, DatasetsServiceModule, SoftwareServiceModule, OrpsServiceModule, ProjectServiceModule,
Schema2jsonldModule Schema2jsonldModule, SEOServiceModule
], ],
declarations: [ declarations: [

View File

@ -11,6 +11,7 @@ import {RouterHelper} from '../../utils/routerHelper.class';
import {PiwikService} from '../../utils/piwik/piwik.service'; import {PiwikService} from '../../utils/piwik/piwik.service';
import {PublicationService} from './publication.service'; import {PublicationService} from './publication.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
@ -72,7 +73,8 @@ export class PublicationComponent {
private route: ActivatedRoute, private route: ActivatedRoute,
private _meta: Meta, private _meta: Meta,
private _title: Title, private _title: Title,
private _router: Router) { private _router: Router,
private seoService: SEOService) {
} }
ngOnInit() { ngOnInit() {
@ -86,6 +88,7 @@ export class PublicationComponent {
this.publicationInfo = null; this.publicationInfo = null;
this.updateTitle("Publication"); this.updateTitle("Publication");
this.updateDescription("Publication, open access, collected from"); this.updateDescription("Publication, open access, collected from");
this.seoService.createLinkForCanonicalURL();
this.articleId = data['articleId']; this.articleId = data['articleId'];
console.info("Article id is :"+this.articleId); console.info("Article id is :"+this.articleId);

View File

@ -20,13 +20,14 @@ import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {PublicationService} from './publication.service'; import {PublicationService} from './publication.service';
import {PublicationComponent} from './publication.component'; import {PublicationComponent} from './publication.component';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module'; import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, FormsModule, LandingModule, SharedModule, RouterModule, CommonModule, FormsModule, LandingModule, SharedModule, RouterModule,
CiteThisModule, PagingModule, ResultLandingModule, IFrameModule, CiteThisModule, PagingModule, ResultLandingModule, IFrameModule,
MetricsModule, AltMetricsModule, ConfigurationServiceModule, Schema2jsonldModule MetricsModule, AltMetricsModule, ConfigurationServiceModule, Schema2jsonldModule, SEOServiceModule
], ],
declarations: [ declarations: [
PublicationComponent PublicationComponent

View File

@ -11,6 +11,7 @@ import {SoftwareInfo} from '../../utils/entities/softwareInfo';
import {RouterHelper} from '../../utils/routerHelper.class'; import {RouterHelper} from '../../utils/routerHelper.class';
import {PiwikService} from '../../utils/piwik/piwik.service'; import {PiwikService} from '../../utils/piwik/piwik.service';
import {EnvProperties} from '../../utils/properties/env-properties'; import {EnvProperties} from '../../utils/properties/env-properties';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
selector: 'software', selector: 'software',
@ -58,7 +59,8 @@ export class SoftwareComponent {
private route: ActivatedRoute, private route: ActivatedRoute,
private _meta: Meta, private _meta: Meta,
private _title: Title, private _title: Title,
private _router: Router) { private _router: Router,
private seoService: SEOService) {
} }
ngOnInit() { ngOnInit() {
@ -72,6 +74,7 @@ export class SoftwareComponent {
this.softwareInfo = null; this.softwareInfo = null;
this.updateTitle("Software"); this.updateTitle("Software");
this.updateDescription("Software, search, open access"); this.updateDescription("Software, search, open access");
this.seoService.createLinkForCanonicalURL();
this.softwareId = params['softwareId']; this.softwareId = params['softwareId'];
console.info("Id is :"+this.softwareId); console.info("Id is :"+this.softwareId);

View File

@ -18,11 +18,12 @@ import { ResultLandingModule } from '../landing-utils/resultLanding.module';
import { LandingModule } from '../landing-utils/landing.module'; import { LandingModule } from '../landing-utils/landing.module';
import { FreeGuard } from'../../login/freeGuard.guard'; import { FreeGuard } from'../../login/freeGuard.guard';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module'; import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, FormsModule, LandingModule, RouterModule, CiteThisModule, PagingModule, CommonModule, FormsModule, LandingModule, RouterModule, CiteThisModule, PagingModule,
ResultLandingModule, IFrameModule, MetricsModule, AltMetricsModule, Schema2jsonldModule ResultLandingModule, IFrameModule, MetricsModule, AltMetricsModule, Schema2jsonldModule, SEOServiceModule
], ],
declarations: [ declarations: [
SoftwareComponent SoftwareComponent

View File

@ -20,13 +20,14 @@ import {SearchFormModule} from '../searchUtils/searchForm.module';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module'; import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import {PiwikServiceModule} from '../../utils/piwik/piwikService.module'; import {PiwikServiceModule} from '../../utils/piwik/piwikService.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, FormsModule, RouterModule, CommonModule, FormsModule, RouterModule,
DataProvidersServiceModule, DatasetsServiceModule, SoftwareServiceModule, OrpsServiceModule, ProjectsServiceModule, DataProvidersServiceModule, DatasetsServiceModule, SoftwareServiceModule, OrpsServiceModule, ProjectsServiceModule,
PublicationsServiceModule, OrganizationsServiceModule, PublicationsServiceModule, OrganizationsServiceModule,
BrowseEntitiesModule, SearchFormModule, SearchResultsModule, PiwikServiceModule, Schema2jsonldModule BrowseEntitiesModule, SearchFormModule, SearchResultsModule, PiwikServiceModule, Schema2jsonldModule, SEOServiceModule
], ],
declarations: [ declarations: [

View File

@ -31,6 +31,7 @@ import {RefineFieldResultsService} from '../../services/refineFieldResults.se
import {PiwikService} from '../../utils/piwik/piwik.service'; import {PiwikService} from '../../utils/piwik/piwik.service';
import {ConfigurationService} from '../../utils/configuration/configuration.service'; import {ConfigurationService} from '../../utils/configuration/configuration.service';
import {EnvProperties} from '../../utils/properties/env-properties'; import {EnvProperties} from '../../utils/properties/env-properties';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.Default, changeDetection: ChangeDetectionStrategy.Default,
@ -98,7 +99,7 @@ export class SearchComponent {
properties: EnvProperties; properties: EnvProperties;
@Input() logoURL; @Input() logoURL;
@Input() name; @Input() name;
public subPub;public subData; public subSoftware; public subOrps; public subProjects;public subOrg; public subDataPr; public subPub;public subData; public subSoftware; public subOrps; public subProjects;public subOrg; public subDataPr;
constructor ( private route: ActivatedRoute, constructor ( private route: ActivatedRoute,
private _router: Router, private _router: Router,
@ -114,7 +115,8 @@ public subPub;public subData; public subSoftware; public subOrps; public subProj
private _meta: Meta, private _meta: Meta,
private _title: Title, private _title: Title,
private _piwikService:PiwikService, private _piwikService:PiwikService,
private config: ConfigurationService ) { private config: ConfigurationService,
private seoService: SEOService ) {
this.fetchPublications = new FetchPublications(this._searchPublicationsService); this.fetchPublications = new FetchPublications(this._searchPublicationsService);
this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService); this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService);
this.fetchProjects = new FetchProjects(this._searchProjectsService); this.fetchProjects = new FetchProjects(this._searchProjectsService);
@ -138,6 +140,7 @@ public subPub;public subData; public subSoftware; public subOrps; public subProj
this._meta.updateTag({content:description},"property='og:description'"); this._meta.updateTag({content:description},"property='og:description'");
this._meta.updateTag({content:title},"property='og:title'"); this._meta.updateTag({content:title},"property='og:title'");
this._meta.updateTag({content:url},"property='og:url'"); this._meta.updateTag({content:url},"property='og:url'");
this.seoService.createLinkForCanonicalURL(false);
if(this.properties.enablePiwikTrack && (typeof document !== 'undefined')){ if(this.properties.enablePiwikTrack && (typeof document !== 'undefined')){
this.piwiksub = this._piwikService.trackView(this.properties, "OpenAIRE |Search publications, research data, projects...").subscribe(); this.piwiksub = this._piwikService.trackView(this.properties, "OpenAIRE |Search publications, research data, projects...").subscribe();

View File

@ -22,6 +22,7 @@
</div> </div>
</div> </div>
</div> </div>
<schema2jsonld *ngIf="url" [URL]="url" type="search" [name]=pageTitle [searchAction]=false></schema2jsonld>
@ -65,7 +66,7 @@
[href]="properties.lastIndexInformationLink" target="_blank"> [href]="properties.lastIndexInformationLink" target="_blank">
Last index information Last index information
</a> </a>
<helper class="uk-hidden@m" position="left" styleName="uk-width-1-1@s"></helper> <helper class="uk-hidden@m" position="left" styleName="uk-width-1-1@s"></helper>
<helper class="uk-hidden@m" position="right" styleName="uk-width-1-1@s"></helper> <helper class="uk-hidden@m" position="right" styleName="uk-width-1-1@s"></helper>
</div> </div>

View File

@ -15,6 +15,7 @@ import {StringUtils, Dates} from '../../utils/string-utils.class';
import {PiwikService} from '../../utils/piwik/piwik.service'; import {PiwikService} from '../../utils/piwik/piwik.service';
import {EnvProperties} from '../../utils/properties/env-properties'; import {EnvProperties} from '../../utils/properties/env-properties';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
selector: 'advanced-search-page', selector: 'advanced-search-page',
@ -52,14 +53,15 @@ export class AdvancedSearchPageComponent {
public resultsPerPage: number = 0; public resultsPerPage: number = 0;
isPiwikEnabled = false; isPiwikEnabled = false;
properties:EnvProperties; properties:EnvProperties;
url = null;
@Output() queryChange = new EventEmitter(); @Output() queryChange = new EventEmitter();
constructor (private route: ActivatedRoute, constructor (private route: ActivatedRoute,
private location: Location, private location: Location,
private _meta: Meta, private _meta: Meta,
private _title: Title, private _title: Title,
private _piwikService:PiwikService, private _piwikService:PiwikService,
private router: Router) { private router: Router,
private seoService: SEOService) {
} }
ngOnInit() { ngOnInit() {
@ -72,6 +74,7 @@ export class AdvancedSearchPageComponent {
this.isPiwikEnabled = data.envSpecific.enablePiwikTrack; this.isPiwikEnabled = data.envSpecific.enablePiwikTrack;
if(typeof window !== 'undefined') { if(typeof window !== 'undefined') {
this.updateUrl(data.envSpecific.baseLink+location.pathname); this.updateUrl(data.envSpecific.baseLink+location.pathname);
this.url = data.envSpecific.baseLink+location.pathname
} }
if(typeof document !== 'undefined' && this.isPiwikEnabled){ if(typeof document !== 'undefined' && this.isPiwikEnabled){
this.piwiksub = this._piwikService.trackView(this.properties, this.pageTitle, this.piwikSiteId).subscribe(); this.piwiksub = this._piwikService.trackView(this.properties, this.pageTitle, this.piwikSiteId).subscribe();
@ -85,7 +88,10 @@ export class AdvancedSearchPageComponent {
this.updateDescription(description); this.updateDescription(description);
this.searchUtils.baseUrl = "/" + this.searchUtils.baseUrl; this.searchUtils.baseUrl = "/" + this.searchUtils.baseUrl;
this.updateBaseUrlWithParameters(); this.updateBaseUrlWithParameters();
this.seoService.createLinkForCanonicalURL(false);
} }

View File

@ -14,10 +14,13 @@ import {AdvancedSearchFormModule} from '../searchUtils/advancedSearchForm.module
import {PiwikServiceModule} from '../../utils/piwik/piwikService.module'; import {PiwikServiceModule} from '../../utils/piwik/piwikService.module';
import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard';
import {HelperModule} from '../../utils/helper/helper.module'; import {HelperModule} from '../../utils/helper/helper.module';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, FormsModule, RouterModule, SearchResultsModule, LoadingModalModule, ReportsServiceModule, SearchPagingModule, AdvancedSearchFormModule, SearchDownloadModule, PiwikServiceModule, HelperModule CommonModule, FormsModule, RouterModule, SearchResultsModule, LoadingModalModule, ReportsServiceModule, SearchPagingModule, AdvancedSearchFormModule, SearchDownloadModule, PiwikServiceModule, HelperModule,
Schema2jsonldModule, SEOServiceModule
], ],
declarations: [ declarations: [
AdvancedSearchPageComponent, AdvancedSearchPageComponent,

View File

@ -18,7 +18,7 @@ import {SearchFilterModalComponent} from './searchFilterModal.component';
import {ErrorCodes} from '../../utils/properties/errorCodes'; import {ErrorCodes} from '../../utils/properties/errorCodes';
import {PiwikService} from '../../utils/piwik/piwik.service'; import {PiwikService} from '../../utils/piwik/piwik.service';
import {EnvProperties} from '../../utils/properties/env-properties'; import {EnvProperties} from '../../utils/properties/env-properties';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
selector: 'search-page', selector: 'search-page',
@ -75,7 +75,8 @@ export class SearchPageComponent {
private _title: Title, private _title: Title,
private element: ElementRef, private element: ElementRef,
private _piwikService:PiwikService, private _piwikService:PiwikService,
private router: Router) { private router: Router,
private seoService: SEOService) {
} }
ngOnInit() { ngOnInit() {
@ -101,7 +102,7 @@ export class SearchPageComponent {
this.updateTitle(this.pageTitle); this.updateTitle(this.pageTitle);
var description = "Openaire, search, repositories, open access, type, content provider, funder, project, " + this.type + "," +this.pageTitle; var description = "Openaire, search, repositories, open access, type, content provider, funder, project, " + this.type + "," +this.pageTitle;
this.updateDescription(description); this.updateDescription(description);
this.seoService.createLinkForCanonicalURL(false);
} }
ngAfterViewChecked(){ ngAfterViewChecked(){

View File

@ -19,13 +19,14 @@ import {PiwikServiceModule} from '../../utils/piwik/piwikService.module';
import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard'; import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard';
import {HelperModule} from '../../utils/helper/helper.module'; import {HelperModule} from '../../utils/helper/helper.module';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module'; import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, FormsModule,RouterModule, SearchFormModule, SearchResultsModule, CommonModule, FormsModule,RouterModule, SearchFormModule, SearchResultsModule,
LoadingModalModule, ReportsServiceModule, LoadingModalModule, ReportsServiceModule,
SearchPagingModule, SearchDownloadModule, ModalModule, SearchFilterModule, PiwikServiceModule, HelperModule, Schema2jsonldModule SearchPagingModule, SearchDownloadModule, ModalModule, SearchFilterModule, PiwikServiceModule, HelperModule, Schema2jsonldModule, SEOServiceModule
], ],
declarations: [ declarations: [
SearchPageComponent SearchPageComponent

View File

@ -16,6 +16,7 @@
</div> </div>
</div> </div>
</div> </div>
<schema2jsonld *ngIf="url" [URL]="url" type="search" [name]=pageTitle [searchAction]=false></schema2jsonld>
<div id="tm-main" class=" uk-section uk-padding-remove-top tm-middle" > <div id="tm-main" class=" uk-section uk-padding-remove-top tm-middle" >
<div uk-grid uk-grid> <div uk-grid uk-grid>

View File

@ -24,6 +24,7 @@ import {SearchFilterModalComponent} from './searchFilterModal.component';
import {ErrorCodes} from '../../utils/properties/errorCodes'; import {ErrorCodes} from '../../utils/properties/errorCodes';
import {PiwikService} from '../../utils/piwik/piwik.service'; import {PiwikService} from '../../utils/piwik/piwik.service';
//import {SearchDataprovidersService} from '../../services/searchDataproviders.service'; //import {SearchDataprovidersService} from '../../services/searchDataproviders.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({ @Component({
selector: 'search-page-table', selector: 'search-page-table',
@ -77,12 +78,13 @@ export class SearchPageTableViewComponent implements OnInit, AfterViewInit {
@ViewChild(DataTableDirective) datatableElement: DataTableDirective; @ViewChild(DataTableDirective) datatableElement: DataTableDirective;
dtTrigger: Subject<any> = new Subject(); //necessary dtTrigger: Subject<any> = new Subject(); //necessary
properties:EnvProperties; properties:EnvProperties;
url = null;
constructor (private route: ActivatedRoute, constructor (private route: ActivatedRoute,
private location: Location, private location: Location,
private _meta: Meta, private _meta: Meta,
private _title: Title, private _title: Title,
private _piwikService:PiwikService) { } private _piwikService:PiwikService,
private seoService: SEOService) { }
ngOnInit() { ngOnInit() {
this.route.data this.route.data
@ -92,6 +94,7 @@ export class SearchPageTableViewComponent implements OnInit, AfterViewInit {
this.isPiwikEnabled = data.envSpecific.enablePiwikTrack; this.isPiwikEnabled = data.envSpecific.enablePiwikTrack;
if(typeof window !== 'undefined') { if(typeof window !== 'undefined') {
this.updateUrl(data.envSpecific.baseLink+location.pathname); this.updateUrl(data.envSpecific.baseLink+location.pathname);
this.url =data.envSpecific.baseLink+location.pathname;
} }
if(typeof document !== 'undefined' && this.isPiwikEnabled){ if(typeof document !== 'undefined' && this.isPiwikEnabled){
this.piwiksub = this._piwikService.trackView(data.envSpecific, this.pageTitle, this.piwikSiteId).subscribe(); this.piwiksub = this._piwikService.trackView(data.envSpecific, this.pageTitle, this.piwikSiteId).subscribe();
@ -106,6 +109,8 @@ export class SearchPageTableViewComponent implements OnInit, AfterViewInit {
this.updateTitle(this.pageTitle); this.updateTitle(this.pageTitle);
var description = "Openaire, search, repositories, open access, type, content provider, funder, project, " + this.type + "," +this.pageTitle; var description = "Openaire, search, repositories, open access, type, content provider, funder, project, " + this.type + "," +this.pageTitle;
this.updateDescription(description); this.updateDescription(description);
this.seoService.createLinkForCanonicalURL(false);
} }
ngOnDestroy() { ngOnDestroy() {

View File

@ -20,13 +20,16 @@ import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.gua
import {HelperModule} from '../../utils/helper/helper.module'; import {HelperModule} from '../../utils/helper/helper.module';
import {ErrorMessagesModule} from '../../utils/errorMessages.module'; import {ErrorMessagesModule} from '../../utils/errorMessages.module';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, FormsModule,RouterModule, SearchFormModule, SearchResultsModule, LoadingModalModule, CommonModule, FormsModule,RouterModule, SearchFormModule, SearchResultsModule, LoadingModalModule,
ReportsServiceModule, SearchPagingModule, SearchDownloadModule, ModalModule, PagingModule, ReportsServiceModule, SearchPagingModule, SearchDownloadModule, ModalModule, PagingModule,
DataTablesModule, SearchFilterModule, PiwikServiceModule, HelperModule, ErrorMessagesModule DataTablesModule, SearchFilterModule, PiwikServiceModule, HelperModule, ErrorMessagesModule,
Schema2jsonldModule, SEOServiceModule
], ],
declarations: [ declarations: [
SearchPageTableViewComponent SearchPageTableViewComponent

View File

@ -0,0 +1,44 @@
import { Injectable, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';
// @Injectable({
// providedIn: 'root'
// })
@Injectable()
export class SEOService {
constructor( @Inject(DOCUMENT) private doc) {
}
createLinkForCanonicalURL(addParameters:boolean=true) {
var url = "";
if(this.doc ){
if(addParameters || !this.doc.URL || this.doc.URL.indexOf("?") == -1){
url = this.doc.URL;
}else{
url = this.doc.URL.substring(0,this.doc.URL.indexOf("?"));
}
console.log("createLinkForCanonicalURL");
if (typeof this.doc.getElementById === "function") {
let currentLink: HTMLLinkElement = this.doc.getElementById("relcan");
if(currentLink ){
currentLink.setAttribute('href', url);
console.log("update canonical url:" + url);
return ;
}
}
if (typeof this.doc.createElement === "function") {
let link: HTMLLinkElement = this.doc.createElement('link');
link.setAttribute('id', 'relcan');
link.setAttribute('rel', 'canonical');
this.doc.head.appendChild(link);
console.log("create new canonical url:" + url);
link.setAttribute('href', url);
}
}
}
}

View File

@ -0,0 +1,11 @@
import { NgModule} from '@angular/core';
// import { CommonModule } from '@angular/common';
// import { FormsModule } from '@angular/forms';
import {SEOService} from './SEO.service';
@NgModule({
imports: [
// CommonModule, FormsModule
],
providers:[SEOService]
})
export class SEOServiceModule { }

View File

@ -5,7 +5,7 @@ import { JsonldDocumentSerializerService } from './service/jsonld-document-seria
selector: 'schema2jsonld', selector: 'schema2jsonld',
template: ` template: `
<ngx-json-ld [json]="json"></ngx-json-ld> <ngx-json-ld [json]="json"></ngx-json-ld>
{{json|json}}
` `
}) })
export class Schema2jsonldComponent { export class Schema2jsonldComponent {
@ -14,6 +14,7 @@ export class Schema2jsonldComponent {
@Input() logoURL; // for home, search @Input() logoURL; // for home, search
@Input() otherURL; //for project, datasource @Input() otherURL; //for project, datasource
@Input() name; @Input() name;
@Input() searchAction = true;
@Input() type="result"; @Input() type="result";
json; json;
@ -36,10 +37,12 @@ json;
}else if(this.type == 'home'){ }else if(this.type == 'home'){
this.json = this.documentParser.createHome(this.name, this.URL, this.logoURL); this.json = this.documentParser.createHome(this.name, this.URL, this.logoURL);
}else if(this.type == 'search'){ }else if(this.type == 'search'){
this.json = this.documentParser.createSearchPage(this.name, this.URL, this.logoURL); this.json = this.documentParser.createSearchPage(this.name, this.URL, this.logoURL, this.searchAction);
}else{ }else if(this.type == 'result'){
docOvject = this.documentParser.convertResult(this.data, this.URL); docOvject = this.documentParser.convertResult(this.data, this.URL);
this.json = this.documentSerializer.serializeDataset(docOvject); this.json = this.documentSerializer.serializeDataset(docOvject);
}else{
this.json = this.documentParser.createSimplePage(this.name, this.URL);
} }
} }

View File

@ -29,18 +29,29 @@ export class OpenAireJsonldConverterService {
buffer["sameAs"] = sameAs; buffer["sameAs"] = sameAs;
return buffer; return buffer;
} }
createSearchPage(name, URL, logoURL): any { createSimplePage(name, URL): any {
const buffer = {}; const buffer = {};
buffer["@context"] = "http://schema.org"; buffer["@context"] = "http://schema.org";
buffer["@type"] = "Organization"; buffer["@type"] = "WebPage";
buffer["name"] = name;
buffer["url"] = URL;
return buffer;
}
createSearchPage(name, URL, logoURL, searchAction:boolean = true): any {
const buffer = {};
buffer["@context"] = "http://schema.org";
buffer["@type"] = "SearchResultsPage";
buffer["name"] = name; buffer["name"] = name;
buffer["url"] = URL; buffer["url"] = URL;
buffer["logo"] = logoURL; buffer["logo"] = logoURL;
const action ={}; if(searchAction){
action["@type"]= "SearchAction"; const action ={};
action["target"]= URL+"?keyword={search_term_string}"; action["@type"]= "SearchAction";
action["query-input"]= "required name=search_term_string"; action["target"]= URL+"?keyword={search_term_string}";
buffer["potentialAction"] = action; action["query-input"]= "required name=search_term_string";
buffer["potentialAction"] = action;
}
return buffer; return buffer;
} }
convertResult(result: any, URL): Dataset { convertResult(result: any, URL): Dataset {