2018-04-11 10:59:01 +02:00
import { Component , ViewChild , ElementRef , Input } from '@angular/core' ;
2017-12-19 13:53:46 +01:00
import { Observable } from 'rxjs/Observable' ;
import { SoftwareService } from './software.service' ;
import { SoftwareInfo } from '../../utils/entities/softwareInfo' ;
import { ActivatedRoute , Router } from '@angular/router' ;
import { RouterHelper } from '../../utils/routerHelper.class' ;
2018-02-12 14:38:30 +01:00
import { Meta } from '../../sharedComponents/metaService' ;
2017-12-19 13:53:46 +01:00
import { PiwikService } from '../../utils/piwik/piwik.service' ;
2018-02-05 14:14:59 +01:00
import { EnvProperties } from '../../utils/properties/env-properties' ;
2017-12-19 13:53:46 +01:00
@Component ( {
selector : 'software' ,
templateUrl : 'software.component.html' ,
} )
export class SoftwareComponent {
2018-04-11 10:59:01 +02:00
@Input ( ) piwikSiteId = null ;
2017-12-19 13:53:46 +01:00
public softwareInfo : SoftwareInfo ;
public softwareId : string ;
// APP BOX variables
public showAllCollectedFrom : boolean = false ;
public showAllDownloadFrom : boolean = false ;
public showAllPublishedIn : boolean = false ;
// Metrics tab variables
public metricsClicked : boolean ;
public viewsFrameUrl : string ;
public downloadsFrameUrl : string ;
public totalViews : number ;
public totalDownloads : number ;
public pageViews : number ;
// Active tab variable for responsiveness
public activeTab : string = "Related Research Results" ;
// Map counting variable
public relatedResearchResultsNum : number = 0 ;
// Message variables
public warningMessage = "" ;
public errorMessage = "" ;
public showLoading : boolean = true ;
public routerHelper :RouterHelper = new RouterHelper ( ) ;
private result ;
sub : any ; piwiksub : any ; infoSub : any ;
2018-02-05 14:14:59 +01:00
properties :EnvProperties ;
2017-12-19 13:53:46 +01:00
constructor ( private element : ElementRef ,
private _softwareService : SoftwareService ,
private _piwikService :PiwikService ,
private route : ActivatedRoute ,
private _meta : Meta ,
private _router : Router ) {
}
ngOnInit() {
2018-02-05 14:14:59 +01:00
this . route . data
. subscribe ( ( data : { envSpecific : EnvProperties } ) = > {
this . properties = data . envSpecific ;
this . updateUrl ( data . envSpecific . baseLink + this . _router . url ) ;
} ) ;
2017-12-19 13:53:46 +01:00
this . sub = this . route . queryParams . subscribe ( params = > {
this . softwareInfo = null ;
this . updateTitle ( "Software" ) ;
this . updateDescription ( "Software, search, open access" ) ;
this . softwareId = params [ 'softwareId' ] ;
console . info ( "Id is :" + this . softwareId ) ;
if ( this . softwareId ) {
this . getSoftwareInfo ( this . softwareId ) ;
} else {
this . showLoading = false ;
this . warningMessage = "No valid software id" ;
}
this . metricsClicked = false ;
2018-02-05 14:14:59 +01:00
this . viewsFrameUrl = this . properties . framesAPIURL + 'merge.php?com=query&data=[{"query":"resRepoViews", "resTitle":"' + this . softwareId + '", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":["Monthly views"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false' ;
/ * t h i s . v i e w s F r a m e U r l = t h i s . p r o p e r t i e s . f r a m e s A P I U R L + ' m e r g e . p h p ? c o m = q u e r y & d a t a = [ { " q u e r y " : " r e s V i e w s T i m e l i n e " , " r e s T i t l e " : " ' + t h i s . s o f t w a r e I d + ' " , " t a b l e " : " " , " f i e l d s " : [ { " f l d " : " s u m " , " a g g " : " s u m " , " t y p e " : " c o l u m n " , " y a x i s " : 1 , " c " : f a l s e } ] , " x a x i s " : { " n a m e " : " m o n t h " , " a g g " : " s u m " } , " g r o u p " : " " , " c o l o r " : " " , " t y p e " : " c h a r t " , " s i z e " : 3 0 , " s o r t " : " x a x i s " , " x S t y l e " : { " r " : - 3 0 , " s " : " 0 " , " l " : " - " , " f t " : " - " , " w t " : " - " } , " t i t l e " : " " , " s u b t i t l e " : " " , " x a x i s t i t l e " : " R e p o s i t o r y " , " y a x i s h e a d e r s " : [ " M o n t h l y v i e w s " ] , " g e n e r a l x a x i s " : " " , " t h e m e " : 0 , " i n " : [ ] , " f i l t e r s " : [ { " n a m e " : " " , " v a l u e s " : [ " " ] , " t o " : " - 1 " } ] } ] & i n f o _ t y p e s = [ " c o l u m n " ] & s t a c k i n g = n o r m a l & s t e p s = f a l s e & f o n t F a m i l y = C o u r i e r & s p a c i n g = [ 5 , 0 , 0 , 0 ] & s t y l e = [ { " c o l o r " : " r g b a ( 0 , 0 , 0 , 1 ) " , " s i z e " : " 1 8 " } , { " c o l o r " : " r g b a ( 0 , 0 , 0 , 1 ) " , " s i z e " : " 1 8 " } , { " c o l o r " : " 0 0 0 0 0 0 " , " s i z e " : " " } , { " c o l o r " : " 0 0 0 0 0 0 " , " s i z e " : " " } ] & b a c k g r o u n d C o l o r = r g b a ( 2 5 5 , 2 5 5 , 2 5 5 , 1 ) & c o l o r s [ ] = r g b a ( 1 2 4 , 1 8 1 , 2 3 6 , 1 ) & c o l o r s [ ] = r g b a ( 6 7 , 6 7 , 7 2 , 1 ) & c o l o r s [ ] = r g b a ( 1 4 4 , 2 3 7 , 1 2 5 , 1 ) & c o l o r s [ ] = r g b a ( 2 4 7 , 1 6 3 , 9 2 , 1 ) & c o l o r s [ ] = r g b a ( 1 2 8 , 1 3 3 , 2 3 3 , 1 ) & c o l o r s [ ] = r g b a ( 2 4 1 , 9 2 , 1 2 8 , 1 ) & c o l o r s [ ] = r g b a ( 2 2 8 , 2 1 1 , 8 4 , 1 ) & c o l o r s [ ] = r g b a ( 4 3 , 1 4 4 , 1 4 3 , 1 ) & c o l o r s [ ] = r g b a ( 2 4 4 , 9 1 , 9 1 , 1 ) & c o l o r s [ ] = r g b a ( 1 4 5 , 2 3 2 , 2 2 5 , 1 ) & x l i n e w = 0 & y l i n e w = 1 & l e g e n d s = t r u e & t o o l t i p s = t r u e & p e r s i s t e n t = f a l s e ' ;
2017-12-19 13:53:46 +01:00
* /
2018-02-05 14:14:59 +01:00
this . downloadsFrameUrl = this . properties . framesAPIURL + 'merge.php?com=query&data=[{"query":"resRepoDownloads", "resTitle":"' + this . softwareId + '", "table":"","fields":[{"fld":"sum","agg":"sum","type":"column","yaxis":1,"c":false}],"xaxis":{"name":"month","agg":"sum"},"group":" ","color":"","type":"chart","size":30,"sort":"xaxis","xStyle":{"r":-30,"s":"0","l":"-","ft":"-","wt":"-"},"title":"","subtitle":"","xaxistitle":"Repository","yaxisheaders":["Monthly downloads"],"generalxaxis":"","theme":0,"in":[],"filters":[{"name":"","values":[""],"to":"-1"}]}]&info_types=["column"]&stacking=normal&steps=false&fontFamily=Courier&spacing=[5,0,0,0]&style=[{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"rgba(0, 0, 0, 1)","size":"18"},{"color":"000000","size":""},{"color":"000000","size":""}]&backgroundColor=rgba(255,255,255,1)&colors[]=rgba(67, 67, 72, 1)&colors[]=rgba(144, 237, 125, 1)&colors[]=rgba(247, 163, 92, 1)&colors[]=rgba(128, 133, 233, 1)&colors[]=rgba(241, 92, 128, 1)&colors[]=rgba(228, 211, 84, 1)&colors[]=rgba(43, 144, 143, 1)&colors[]=rgba(244, 91, 91, 1)&colors[]=rgba(145, 232, 225, 1)&xlinew=0&ylinew=1&legends=true&tooltips=true&persistent=false' ;
/ * t h i s . d o w n l o a d s F r a m e U r l = t h i s . p r o p e r t i e s . f r a m e s A P I U R L + ' m e r g e . p h p ? c o m = q u e r y & d a t a = [ { " q u e r y " : " r e s R e p o D o w n l o a d T i m e l i n e " , " r e s T i t l e " : " ' + t h i s . s o f t w a r e I d + ' " , " t a b l e " : " " , " f i e l d s " : [ { " f l d " : " s u m " , " a g g " : " s u m " , " t y p e " : " c o l u m n " , " y a x i s " : 1 , " c " : f a l s e } ] , " x a x i s " : { " n a m e " : " m o n t h " , " a g g " : " s u m " } , " g r o u p " : " " , " c o l o r " : " " , " t y p e " : " c h a r t " , " s i z e " : 3 0 , " s o r t " : " x a x i s " , " x S t y l e " : { " r " : - 3 0 , " s " : " 0 " , " l " : " - " , " f t " : " - " , " w t " : " - " } , " t i t l e " : " " , " s u b t i t l e " : " " , " x a x i s t i t l e " : " R e p o s i t o r y " , " y a x i s h e a d e r s " : [ " M o n t h l y d o w n l o a d s " ] , " g e n e r a l x a x i s " : " " , " t h e m e " : 0 , " i n " : [ ] , " f i l t e r s " : [ { " n a m e " : " " , " v a l u e s " : [ " " ] , " t o " : " - 1 " } ] } ] & i n f o _ t y p e s = [ " c o l u m n " ] & s t a c k i n g = n o r m a l & s t e p s = f a l s e & f o n t F a m i l y = C o u r i e r & s p a c i n g = [ 5 , 0 , 0 , 0 ] & s t y l e = [ { " c o l o r " : " r g b a ( 0 , 0 , 0 , 1 ) " , " s i z e " : " 1 8 " } , { " c o l o r " : " r g b a ( 0 , 0 , 0 , 1 ) " , " s i z e " : " 1 8 " } , { " c o l o r " : " 0 0 0 0 0 0 " , " s i z e " : " " } , { " c o l o r " : " 0 0 0 0 0 0 " , " s i z e " : " " } ] & b a c k g r o u n d C o l o r = r g b a ( 2 5 5 , 2 5 5 , 2 5 5 , 1 ) & c o l o r s [ ] = r g b a ( 6 7 , 6 7 , 7 2 , 1 ) & c o l o r s [ ] = r g b a ( 1 4 4 , 2 3 7 , 1 2 5 , 1 ) & c o l o r s [ ] = r g b a ( 2 4 7 , 1 6 3 , 9 2 , 1 ) & c o l o r s [ ] = r g b a ( 1 2 8 , 1 3 3 , 2 3 3 , 1 ) & c o l o r s [ ] = r g b a ( 2 4 1 , 9 2 , 1 2 8 , 1 ) & c o l o r s [ ] = r g b a ( 2 2 8 , 2 1 1 , 8 4 , 1 ) & c o l o r s [ ] = r g b a ( 4 3 , 1 4 4 , 1 4 3 , 1 ) & c o l o r s [ ] = r g b a ( 2 4 4 , 9 1 , 9 1 , 1 ) & c o l o r s [ ] = r g b a ( 1 4 5 , 2 3 2 , 2 2 5 , 1 ) & x l i n e w = 0 & y l i n e w = 1 & l e g e n d s = t r u e & t o o l t i p s = t r u e ' ;
2017-12-19 13:53:46 +01:00
* /
if ( typeof document !== 'undefined' ) {
this . element . nativeElement . scrollIntoView ( ) ;
}
} ) ;
}
ngOnDestroy() {
this . sub . unsubscribe ( ) ;
if ( this . piwiksub ) {
this . piwiksub . unsubscribe ( ) ;
}
if ( this . infoSub ) {
this . infoSub . unsubscribe ( ) ;
}
}
private getSoftwareInfo ( id :string ) {
this . warningMessage = '' ;
this . errorMessage = ""
this . showLoading = true ;
2018-02-05 14:14:59 +01:00
this . infoSub = this . _softwareService . getSoftwareInfo ( id , this . properties ) . subscribe (
2017-12-19 13:53:46 +01:00
data = > {
this . softwareInfo = data ;
this . updateTitle ( this . softwareInfo . title . name ) ;
this . updateDescription ( "Software, search, repositories, open access," + this . softwareInfo . title . name ) ;
2018-02-05 14:14:59 +01:00
if ( this . properties . enablePiwikTrack && ( typeof document !== 'undefined' ) ) {
2018-04-11 10:59:01 +02:00
this . piwiksub = this . _piwikService . trackView ( this . properties , this . softwareInfo . title . name , this . piwikSiteId ) . subscribe ( ) ;
2017-12-19 13:53:46 +01:00
}
this . result = [ ]
this . result = { id : id , type : "software" , source : "openaire" , title : this.softwareInfo.title , url : '' , result : '' , accessRights : this.softwareInfo.title.accessMode , embargoEndDate : '' } ;
let relatedResearchResultsNum = 0 ;
if ( this . softwareInfo . relatedResearchResults != undefined ) {
this . softwareInfo . relatedResearchResults . forEach ( function ( value , key , map ) {
relatedResearchResultsNum += value . length ;
} ) ;
}
this . relatedResearchResultsNum = relatedResearchResultsNum ;
this . showLoading = false ;
} ,
err = > {
console . log ( err )
console . info ( "error" ) ;
this . errorMessage = 'No software found' ;
this . showLoading = false ;
}
) ;
}
// showChange($event) {
// this.showAllReferences=$event.value;
// }
public metricsResults ( $event ) {
this . totalViews = $event . totalViews ;
this . totalDownloads = $event . totalDownloads ;
this . pageViews = $event . pageViews ;
}
private updateDescription ( description :string ) {
this . _meta . updateMeta ( "description" , description ) ;
this . _meta . updateProperty ( "og:description" , description ) ;
}
private updateTitle ( title :string ) {
var _prefix = "OpenAIRE | " ;
var _title = _prefix + ( ( title . length > 50 ) ? title . substring ( 0 , 50 ) : title ) ;
this . _meta . setTitle ( _title ) ;
this . _meta . updateProperty ( "og:title" , _title ) ;
}
private updateUrl ( url :string ) {
this . _meta . updateProperty ( "og:url" , url ) ;
}
public buildCurationTooltip() {
let tooltipContent : string = "<div class='uk-padding-small uk-light'>" ;
tooltipContent += "<h4>Record in preview</h4>" ;
tooltipContent += "<p>Bibliographic record accepted by the system, but not yet processed by <br> OpenAIRE tools for information quality improvement and de-duplication</p></di>" ;
return tooltipContent ;
}
public getKeys ( map ) {
return Array . from ( map . keys ( ) ) ;
}
}