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">
<helper position="top"></helper>
</div>

View File

@ -9,6 +9,7 @@ import {AlertModal} from '../../../utils/modal/alert';
import {Session} from '../../../login/utils/helper.class';
import{EnvProperties} from '../../../utils/properties/env-properties';
import {LoginErrorCodes} from '../../../login/utils/guardHelper.class';
import { SEOService } from '../../../sharedComponents/SEO/SEO.service';
@Component({
@ -21,16 +22,20 @@ export class DisplayClaimsComponent {
properties:EnvProperties;
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() {
this.route.data
.subscribe((data: { envSpecific: EnvProperties }) => {
this.properties = data.envSpecific;
this.url = data.envSpecific.baseLink+this._router.url;
});
this.sub = this.route.queryParams.subscribe(params => {
this.seoService.createLinkForCanonicalURL(false);
if( this.myClaims){
this.fetchBy = "User";
this.fetchId = Session.getUserEmail();
@ -120,6 +125,9 @@ export class DisplayClaimsComponent {
claimsDeleted:number = 0;
@Input() communityId:string = null;
url=null;
getClaims () {
if(!Session.isLoggedIn()){
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 {PagingModule } from '../../../utils/paging.module';
import {HelperModule} from '../../../utils/helper/helper.module';
import {Schema2jsonldModule} from '../../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../../sharedComponents/SEO/SEOService.module';
@NgModule({
imports: [
CommonModule, FormsModule, RouterModule, ClaimServiceModule, LoadingModalModule, AlertModalModule,
ClaimEntityFormatterModule, PagingModule, HelperModule
ClaimEntityFormatterModule, PagingModule, HelperModule, Schema2jsonldModule, SEOServiceModule
],
declarations: [

View File

@ -1,6 +1,7 @@
<div id="tm-main" class=" uk-section uk-margin-small-top tm-middle" >
<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 ">
<schema2jsonld *ngIf="url" [URL]="url" name="Linking" type="other"></schema2jsonld>
<div class="uk-container uk-margin-top">
<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 {SearchSoftwareService} from '../../services/searchSoftware.service';
import {SearchOrpsService} from '../../services/searchOrps.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({
@ -39,21 +40,25 @@ export class DirectLinkingComponent {
properties:EnvProperties;
@Input() communityId:string= null;
localStoragePrefix:string = "";
url=null;
constructor (private _router: Router, private route: ActivatedRoute, private entitySearch:EntitiesSearchService,
private publicationsSearch:SearchPublicationsService, private datasetsSearch:SearchDatasetsService,
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";
this._meta.updateTag({content:title},"property='og:title'");
this._title.setTitle(title);
this.seoService.createLinkForCanonicalURL(false);
}
ngOnInit() {
this.route.data
.subscribe((data: { envSpecific: EnvProperties }) => {
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 {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {OrpsServiceModule} from '../../services/orpsService.module';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({
@ -28,7 +30,7 @@ import {OrpsServiceModule} from '../../services/orpsService.module';
SharedModule,
SelectedProjectsModule, SelectedContextsModule, SelectedPublicationsModule, InsertClaimsModule,
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 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 ">
<schema2jsonld *ngIf="url" [URL]="url" name="Link your research results" type="other"></schema2jsonld>
<div class="uk-container uk-margin-top">
<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 {SearchPublicationsService} from '../../services/searchPublications.service';
import {SearchDatasetsService} from '../../services/searchDatasets.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
declare var UIkit:any;
@ -42,20 +43,25 @@ export class LinkingGenericComponent {
sub:any =null;
properties:EnvProperties;
localStoragePrefix:string = "linking_";
url=null;
constructor (private _router: Router, private route: ActivatedRoute, private entitySearch:EntitiesSearchService,
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";
this._meta.updateTag({content:title},"property='og:title'");
this._title.setTitle(title);
this.seoService.createLinkForCanonicalURL(false);
}
ngOnInit() {
this.route.data
.subscribe((data: { envSpecific: EnvProperties }) => {
this.properties = data.envSpecific;
this.url = data.envSpecific.baseLink+this._router.url;
});
if( typeof localStorage !== 'undefined') {

View File

@ -15,13 +15,16 @@ 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';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({
imports: [
SharedModule, SelectedProjectsModule, SelectedContextsModule,
SelectedPublicationsModule,
InsertClaimsModule, StartOverModule,
ClaimContextSearchFormModule, ClaimProjectsSearchFormModule, BulkClaimModule, ClaimResultSearchFormModule, HelperModule
ClaimContextSearchFormModule, ClaimProjectsSearchFormModule, BulkClaimModule, ClaimResultSearchFormModule,
HelperModule, Schema2jsonldModule, SEOServiceModule
],
providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled],
declarations: [

View File

@ -2,6 +2,7 @@
<div id="tm-main" class=" uk-section uk-margin-small-top tm-middle" >
<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 ">
<schema2jsonld *ngIf="url" [URL]="url" name="Deposit {{requestFor}}" type="other"></schema2jsonld>
<div class="uk-container uk-margin-top">
<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 {OrganizationService} from '../../services/organization.service';
import {PiwikService} from '../../utils/piwik/piwik.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({
selector: 'deposit-by-subject-result',
@ -46,13 +47,15 @@ export class DepositBySubjectResultComponent {
sub: any;
piwiksub: any;
properties:EnvProperties;
url=null;
constructor (private _router: Router,
private route: ActivatedRoute,
private _searchDataprovidersService: SearchDataprovidersService,
private _meta: Meta,
private _title: Title,
private _piwikService:PiwikService) {
private _piwikService:PiwikService,
private seoService: SEOService) {
this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService);
@ -63,6 +66,8 @@ export class DepositBySubjectResultComponent {
this.updateTitle(title);
this.updateDescription(description);
this.seoService.createLinkForCanonicalURL(false);
}
ngOnInit() {
@ -71,6 +76,8 @@ export class DepositBySubjectResultComponent {
this.properties = data.envSpecific;
this.updateUrl(data.envSpecific.baseLink+this._router.url);
this.zenodo = this.properties.zenodo;
this.url = data.envSpecific.baseLink+this._router.url;
if(this.properties.enablePiwikTrack && (typeof document !== 'undefined')){
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 {HelperModule} from '../../utils/helper/helper.module';
import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({
imports: [
CommonModule, FormsModule,
DepositModule,
SearchResultsModule, DataProvidersServiceModule, PagingModule,
HelperModule
HelperModule, Schema2jsonldModule, SEOServiceModule
],
declarations: [

View File

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

View File

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

View File

@ -12,6 +12,7 @@ import {FetchDataproviders} from '../utils/fetchEntitiesClasses/fetchDat
import {SearchDataprovidersService} from '../services/searchDataproviders.service';
import {OrganizationService} from '../services/organization.service';
import {PiwikService} from '../utils/piwik/piwik.service';
import { SEOService } from '../sharedComponents/SEO/SEO.service';
@Component({
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 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 ">
<schema2jsonld *ngIf="url" [URL]="url" name="Deposit {{requestFor}}" type="other"></schema2jsonld>
<div class="uk-container uk-margin-top">
<!--div class="uk-article-title custom-article-title">
@ -156,6 +158,7 @@ export class DepositResultComponent {
sub: any; piwiksub: any;
properties:EnvProperties;
url=null;
constructor ( private _router: Router,
private route: ActivatedRoute,
@ -163,7 +166,8 @@ export class DepositResultComponent {
private _organizationService: OrganizationService,
private _meta: Meta,
private _title: Title,
private _piwikService:PiwikService) {
private _piwikService:PiwikService,
private seoService: SEOService) {
this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService);
@ -171,6 +175,7 @@ export class DepositResultComponent {
var description = "Deposit "+this.requestFor;
var title = "Openaire, repositories, open access, content provider, compatibility, organization, deposit "+ this.requestFor;
this.seoService.createLinkForCanonicalURL(false);
this.updateTitle(title);
this.updateDescription(description);
@ -182,6 +187,7 @@ export class DepositResultComponent {
this.properties = data.envSpecific;
this.zenodo = this.properties.zenodo;
this.updateUrl(data.envSpecific.baseLink+this._router.url);
this.url = data.envSpecific.baseLink+this._router.url;
if(this.properties.enablePiwikTrack && (typeof document !== 'undefined')){
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 {RouterHelper} from '../../utils/routerHelper.class';
import {PiwikService} from '../../utils/piwik/piwik.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({
@ -114,7 +115,8 @@ export class DataProviderComponent {
private _searchSoftwareService: SearchSoftwareService,
private _searchOrpsService: SearchOrpsService,
private _searchProjectsService: SearchProjectsService,
private _searchDataprovidersService: SearchDataprovidersService) {
private _searchDataprovidersService: SearchDataprovidersService,
private seoService: SEOService) {
this.fetchPublications = new FetchPublications(this._searchPublicationsService);
this.fetchDatasets = new FetchDatasets(this._searchDatasetsService);
this.fetchSoftware = new FetchSoftware(this._searchSoftwareService);
@ -134,6 +136,7 @@ export class DataProviderComponent {
this.sub = this.route.queryParams.subscribe(data => {
this.updateTitle("Content provider");
this.updateDescription("Content provider, search, repositories, open access");
this.seoService.createLinkForCanonicalURL();
this.datasourceId = data['datasourceId'];
if(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 {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({
imports:
[CommonModule, FormsModule, RouterModule,
TabResultModule, IFrameModule, ErrorMessagesModule, MetricsModule, LandingModule,
DataProvidersServiceModule, DatasetsServiceModule, ProjectsServiceModule, PublicationsServiceModule,
SoftwareServiceModule, OrpsServiceModule, PagingModule, Schema2jsonldModule],
SoftwareServiceModule, OrpsServiceModule, PagingModule, Schema2jsonldModule, SEOServiceModule],
declarations:
[PublicationsTabComponent, DatasetsTabComponent, StatisticsTabComponent, ProjectsTabComponent, DatasourcesTabComponent, OrganizationsTabComponent,
RelatedDatasourcesTabComponent, DataProviderComponent, SoftwareTabComponent, OrpsTabComponent

View File

@ -11,6 +11,7 @@ import {RouterHelper} from '../../utils/routerHelper.class';
import {DatasetService} from './dataset.service';
import {PiwikService} from '../../utils/piwik/piwik.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({
@ -59,7 +60,8 @@ export class DatasetComponent {
private route: ActivatedRoute,
private _meta: Meta,
private _title: Title,
private _router: Router) {
private _router: Router,
private seoService: SEOService) {
}
ngOnInit() {
@ -73,6 +75,7 @@ export class DatasetComponent {
this.datasetInfo = null;
this.updateTitle("Dataset");
this.updateDescription("Dataset, search, open access");
this.seoService.createLinkForCanonicalURL();
this.datasetId = params['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 {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({
@ -29,7 +30,7 @@ import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2j
//MaterialModule.forRoot(),
CommonModule, FormsModule, SharedModule, RouterModule, LandingModule,
CiteThisModule, ResultLandingModule, MetricsModule, IFrameModule,
AltMetricsModule, ConfigurationServiceModule, Schema2jsonldModule
AltMetricsModule, ConfigurationServiceModule, Schema2jsonldModule, SEOServiceModule
],
declarations: [
DatasetComponent

View File

@ -9,6 +9,7 @@ import {EnvProperties} from '../../utils/properties/env-propert
import {HtmlProjectReportService} from './htmlProjectReport.service';
import {ProjectService} from '../project/project.service';
import {PiwikService} from '../../utils/piwik/piwik.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
declare var UIkit: any;
@ -69,7 +70,8 @@ export class HtmlProjectReportComponent{
private _projectService: ProjectService,
private _meta: Meta,
private _title: Title,
private _router: Router) {
private _router: Router,
private seoService: SEOService) {
}
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";
this.updateTitle(title);
this.updateDescription(description);
this.seoService.createLinkForCanonicalURL();
} else {
this.showLoading = false;

View File

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

View File

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

View File

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

View File

@ -11,6 +11,7 @@ import {RouterHelper} from '../../utils/routerHelper.class';
import {OrpService} from './orp.service';
import {PiwikService} from '../../utils/piwik/piwik.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({
@ -59,7 +60,8 @@ export class OrpComponent {
private route: ActivatedRoute,
private _meta: Meta,
private _title: Title,
private _router: Router) {
private _router: Router,
private seoService: SEOService) {
}
ngOnInit() {
@ -73,7 +75,7 @@ export class OrpComponent {
this.orpInfo = null;
this.updateTitle("Other Research Product");
this.updateDescription("Other Research Product, search, open access");
this.seoService.createLinkForCanonicalURL();
this.orpId = params['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 {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({
imports: [
CommonModule, FormsModule, SharedModule, RouterModule, LandingModule,
CiteThisModule, ResultLandingModule, MetricsModule, IFrameModule,
AltMetricsModule, ConfigurationServiceModule, Schema2jsonldModule
AltMetricsModule, ConfigurationServiceModule, Schema2jsonldModule, SEOServiceModule
],
declarations: [
OrpComponent

View File

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

View File

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

View File

@ -11,6 +11,7 @@ import {RouterHelper} from '../../utils/routerHelper.class';
import {PiwikService} from '../../utils/piwik/piwik.service';
import {PublicationService} from './publication.service';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({
@ -72,7 +73,8 @@ export class PublicationComponent {
private route: ActivatedRoute,
private _meta: Meta,
private _title: Title,
private _router: Router) {
private _router: Router,
private seoService: SEOService) {
}
ngOnInit() {
@ -86,6 +88,7 @@ export class PublicationComponent {
this.publicationInfo = null;
this.updateTitle("Publication");
this.updateDescription("Publication, open access, collected from");
this.seoService.createLinkForCanonicalURL();
this.articleId = data['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 {PublicationComponent} from './publication.component';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({
imports: [
CommonModule, FormsModule, LandingModule, SharedModule, RouterModule,
CiteThisModule, PagingModule, ResultLandingModule, IFrameModule,
MetricsModule, AltMetricsModule, ConfigurationServiceModule, Schema2jsonldModule
MetricsModule, AltMetricsModule, ConfigurationServiceModule, Schema2jsonldModule, SEOServiceModule
],
declarations: [
PublicationComponent

View File

@ -11,6 +11,7 @@ import {SoftwareInfo} from '../../utils/entities/softwareInfo';
import {RouterHelper} from '../../utils/routerHelper.class';
import {PiwikService} from '../../utils/piwik/piwik.service';
import {EnvProperties} from '../../utils/properties/env-properties';
import { SEOService } from '../../sharedComponents/SEO/SEO.service';
@Component({
selector: 'software',
@ -58,7 +59,8 @@ export class SoftwareComponent {
private route: ActivatedRoute,
private _meta: Meta,
private _title: Title,
private _router: Router) {
private _router: Router,
private seoService: SEOService) {
}
ngOnInit() {
@ -72,6 +74,7 @@ export class SoftwareComponent {
this.softwareInfo = null;
this.updateTitle("Software");
this.updateDescription("Software, search, open access");
this.seoService.createLinkForCanonicalURL();
this.softwareId = params['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 { FreeGuard } from'../../login/freeGuard.guard';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({
imports: [
CommonModule, FormsModule, LandingModule, RouterModule, CiteThisModule, PagingModule,
ResultLandingModule, IFrameModule, MetricsModule, AltMetricsModule, Schema2jsonldModule
ResultLandingModule, IFrameModule, MetricsModule, AltMetricsModule, Schema2jsonldModule, SEOServiceModule
],
declarations: [
SoftwareComponent

View File

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

View File

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

View File

@ -22,6 +22,7 @@
</div>
</div>
</div>
<schema2jsonld *ngIf="url" [URL]="url" type="search" [name]=pageTitle [searchAction]=false></schema2jsonld>
@ -65,7 +66,7 @@
[href]="properties.lastIndexInformationLink" target="_blank">
Last index information
</a>
<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>
</div>

View File

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

View File

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

View File

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

View File

@ -16,6 +16,7 @@
</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 uk-grid uk-grid>

View File

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

View File

@ -20,13 +20,16 @@ import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.gua
import {HelperModule} from '../../utils/helper/helper.module';
import {ErrorMessagesModule} from '../../utils/errorMessages.module';
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
@NgModule({
imports: [
CommonModule, FormsModule,RouterModule, SearchFormModule, SearchResultsModule, LoadingModalModule,
ReportsServiceModule, SearchPagingModule, SearchDownloadModule, ModalModule, PagingModule,
DataTablesModule, SearchFilterModule, PiwikServiceModule, HelperModule, ErrorMessagesModule
DataTablesModule, SearchFilterModule, PiwikServiceModule, HelperModule, ErrorMessagesModule,
Schema2jsonldModule, SEOServiceModule
],
declarations: [
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',
template: `
<ngx-json-ld [json]="json"></ngx-json-ld>
{{json|json}}
`
})
export class Schema2jsonldComponent {
@ -14,6 +14,7 @@ export class Schema2jsonldComponent {
@Input() logoURL; // for home, search
@Input() otherURL; //for project, datasource
@Input() name;
@Input() searchAction = true;
@Input() type="result";
json;
@ -36,10 +37,12 @@ json;
}else if(this.type == 'home'){
this.json = this.documentParser.createHome(this.name, this.URL, this.logoURL);
}else if(this.type == 'search'){
this.json = this.documentParser.createSearchPage(this.name, this.URL, this.logoURL);
}else{
this.json = this.documentParser.createSearchPage(this.name, this.URL, this.logoURL, this.searchAction);
}else if(this.type == 'result'){
docOvject = this.documentParser.convertResult(this.data, this.URL);
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;
return buffer;
}
createSearchPage(name, URL, logoURL): any {
createSimplePage(name, URL): any {
const buffer = {};
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["url"] = URL;
buffer["logo"] = logoURL;
const action ={};
action["@type"]= "SearchAction";
action["target"]= URL+"?keyword={search_term_string}";
action["query-input"]= "required name=search_term_string";
buffer["potentialAction"] = action;
if(searchAction){
const action ={};
action["@type"]= "SearchAction";
action["target"]= URL+"?keyword={search_term_string}";
action["query-input"]= "required name=search_term_string";
buffer["potentialAction"] = action;
}
return buffer;
}
convertResult(result: any, URL): Dataset {