import {Component, Input} from '@angular/core'; import {ActivatedRoute, Router} from '@angular/router'; import {Meta, Title} from '@angular/platform-browser'; import {EnvProperties} from '../../utils/properties/env-properties'; 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'; import {HelperService} from "../../utils/helper/helper.service"; declare var UIkit: any; @Component({ selector: 'htmlProjectReport', template: `
{{header1}}
{{header2}}
` }) export class HtmlProjectReportComponent { @Input() piwikSiteId = null; @Input() communityId = null; private projectId: string; private totalResults: number = 10; private resultsType: string = "publication"; public header1: string = ""; public header2: string = ""; public htmlResult: string = ""; public sub: any; piwiksub: any; public subHTML: any; public subHTMLInfo: any; public warningMessage: string = ""; public errorMessage: string = ""; public showLoading: boolean = true; properties: EnvProperties; public pageContents = null; public divContents = null; constructor(private route: ActivatedRoute, private htmlService: HtmlProjectReportService, private _piwikService: PiwikService, private _projectService: ProjectService, private _meta: Meta, private _title: Title, private _router: Router, private helper: HelperService, private seoService: SEOService) { } ngOnInit() { this.route.data .subscribe((data: { envSpecific: EnvProperties }) => { this.properties = data.envSpecific; //this.getDivContents(); this.getPageContents(); this.updateUrl(data.envSpecific.baseLink + this._router.url); this.seoService.createLinkForCanonicalURL(this.properties.baseLink + this._router.url); }); this.sub = this.route.queryParams.subscribe(params => { this.projectId = params['projectId']; if (params['size'] == parseInt(params['size'], 10)) { this.totalResults = params['size']; } else { this.showLoading = false; this.warningMessage = "Requested size is not an integer"; } if (params['type'] && (params['type'] == "publication" || params['type'] == "dataset" || params['type'] == "software" || params['type'] == "other")) { if (params['type'] == "publication") { this.resultsType = 'publication'; } else if (params['type'] == "dataset") { this.resultsType = 'research data'; } else if (params['type'] == "software") { this.resultsType = 'software'; } else if (params['type'] == "other") { this.resultsType = "other research product"; } var title = "Project's " + this.resultsType + " report"; var description = "project, project " + this.resultsType + " report, funding, open access, publications, research data, software, other research products"; this.updateTitle(title); this.updateDescription(description); } else { this.showLoading = false; this.warningMessage = "Requested type should be publication or research data or software or other research product"; } //showLoading is true if no warnings if (this.showLoading) { if (this.projectId) { this.createHeaders(); } else { this.showLoading = false; this.warningMessage = "No valid project id"; } } }); } private getPageContents() { this.helper.getPageHelpContents(this._router.url, this.properties, this.communityId).subscribe(contents => { this.pageContents = contents; }) } private getDivContents() { this.helper.getDivHelpContents(this._router.url, this.properties, this.communityId).subscribe(contents => { this.divContents = contents; }) } ngOnDestroy() { this.sub.unsubscribe(); if (this.piwiksub) { this.piwiksub.unsubscribe(); } if (this.subHTML) { this.subHTML.unsubscribe(); } if (this.subHTMLInfo) { this.subHTMLInfo.unsubscribe(); } } private createHeaders() { this.subHTMLInfo = this._projectService.getHTMLInfo(this.projectId, this.properties).subscribe( data => { this.createHeader1(data); if (data.acronym) { this.updateTitle(data.acronym + " " + this.resultsType + " report"); } else if (data.title) { this.updateTitle(data.title + " " + this.resultsType + " report"); } if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) { this.piwiksub = this._piwikService.trackView(this.properties, ((data.acronym) ? data.acronym : data.title) + " " + this.resultsType + " report", this.piwikSiteId).subscribe(); } }, err => { this.handleError("Error getting html information for project id: " + this.projectId, err); //console.log(err); this.createClipboard(); } ); if (this.resultsType == "publication") { this.header2 += this.totalResults.toLocaleString('en-US') + " publications"; } else if (this.resultsType == "research data") { this.header2 += this.totalResults.toLocaleString('en-US') + " research data"; } else if (this.resultsType == "software") { this.header2 += this.totalResults.toLocaleString('en-US') + " software"; } else if (this.resultsType == "other research product") { this.header2 += this.totalResults.toLocaleString('en-US') + " other"; } } private createClipboard() { let intro: string = ''; intro += ''; intro += ''; intro += '' + this.header1 + '' intro += ''; if (typeof window !== 'undefined') { this.subHTML = this.htmlService.getHTML(this.projectId, this.totalResults, this.resultsType, this.properties.csvAPIURL).subscribe( data => { //let body: string = intro+'

'+this.header1+'

'+this.header2+'

'+data+''; let body: string = intro + '

' + this.header1 + '

' + this.header2 + '

'; body += "" + data + "
TitleAuthorsPublication YearDOIPermanent IdentifierPublication typeJournalProject Name (GA Number)Access Mode
"; body += ''; //this.htmlResult = data; this.htmlResult = "" + data + "
TitleAuthorsPublication YearDOIPermanent IdentifierPublication typeJournalProject Name (GA Number)Access Mode
"; let clipboard; let Clipboard; Clipboard = require('clipboard'); clipboard = new Clipboard('.clipBtn', { /*target: function(trigger) { return document.getElementById("clipboard"); }*/ text: function (trigger) { return body;//document.getElementById("clipboard").getAttribute('innerHTML');//"aaaa"+tmp+"oo"; } }); this.showLoading = false; }, err => { //console.log(err); this.handleError("Error getting html for id: " + this.projectId, err); this.errorMessage = 'Service not available'; this.showLoading = false; } ); } } createHeader1(data: { "title": string, "acronym": string, "callIdentifier": string }) { if (this.resultsType == "publication") { this.header1 += "Publications"; } else if (this.resultsType == "research data") { this.header1 += "Research Data"; } else if (this.resultsType == "software") { this.header1 += "Software"; } else if (this.resultsType == "other research product") { this.header1 += "Other Research Products"; } if (data != undefined) { if (data.title != undefined && data.title != "") { this.header1 += data.title; } if ((data.title != undefined && data.title != "") && ((data.acronym != undefined && data.acronym != "") || (data.callIdentifier != undefined && data.callIdentifier != ""))) { this.header1 += "("; } if (data.acronym != undefined && data.acronym != "") { this.header1 += data.acronym + " - "; } if (data.callIdentifier != undefined && data.callIdentifier != "") { this.header1 += data.callIdentifier; } if ((data.title != undefined && data.title != "") && ((data.acronym != undefined && data.acronym != "") || (data.callIdentifier != undefined && data.callIdentifier != ""))) { this.header1 += ")"; } } this.createClipboard(); } public copied() { UIkit.notification({ message: 'Raw html is copied. Please paste it on an html file.', status: 'success', timeout: 3000, pos: 'top-center' }); } private updateDescription(description: string) { this._meta.updateTag({content: description}, "name='description'"); this._meta.updateTag({content: description}, "property='og:description'"); } private updateTitle(title: string) { var _prefix = "OpenAIRE | "; var _title = _prefix + ((title.length > 50) ? title.substring(0, 50) : title); this._title.setTitle(_title); this._meta.updateTag({content: _title}, "property='og:title'"); } private updateUrl(url: string) { this._meta.updateTag({content: url}, "property='og:url'"); } private handleError(message: string, error) { console.error("Html Project Report Page: " + message, error); } }