import { Component, ViewChild, AfterViewInit, ElementRef } from '@angular/core'; import { Http } from '@angular/http'; import { map } from "rxjs/operators"; import { jqxExpanderComponent } from 'jqwidgets-scripts/jqwidgets-ts/angular_jqxexpander'; import { jqxTreeComponent } from 'jqwidgets-scripts/jqwidgets-ts/angular_jqxtree'; import { jqxPanelComponent } from 'jqwidgets-scripts/jqwidgets-ts/angular_jqxpanel'; import { jqxListBoxComponent } from 'jqwidgets-scripts/jqwidgets-ts/angular_jqxlistbox'; @Component({ selector: 'app-root', templateUrl: './app.component.html' }) export class AppComponent implements AfterViewInit { @ViewChild('feedContentExpander') feedContentExpander: jqxExpanderComponent; @ViewChild('feedListExpander') feedListExpander: jqxExpanderComponent; @ViewChild('listBoxReference') myListBox: jqxListBoxComponent; @ViewChild('panelReference') myPanel: jqxPanelComponent; @ViewChild('treeReference') myTree: jqxTreeComponent; getWidth() : any { if (document.body.offsetWidth < 850) { return '90%'; } return 850; } constructor(public http: Http) { } ngAfterViewInit(): void { this.getFeed('sciencedaily'); } onTreeSelect(event: any): void { let item = this.myTree.getItem(event.args.element); this.getFeed(this.config['feeds'][item.label]); }; onListBoxSelect(event: any): void { this.loadContent(event.args.index); }; selectFirst(): void { this.myListBox.selectIndex(0); this.loadContent(0); }; getFeed(feed: any): void { this.config['currentFeed'] = feed; if (feed !== undefined) { feed = this.config['dataDir'] + '/' + feed + '.' + this.config['format']; this.loadFeed(feed); } }; loadFeed(feed: any, callback?: any): void { let response; this.http.get(feed) .pipe(map(res => res.json())) .subscribe( data => response = data, err => console.log(err), () => { let channel = response.rss.channel; this.config['currentFeedContent'] = channel.item; this.displayFeedList(this.config['currentFeedContent']); this.displayFeedHeader(channel.title); this.selectFirst(); } ); }; displayFeedHeader(header: string): void { this.feedListExpander.setHeaderContent(header); }; displayFeedList(items: any): void { let headers = this.getHeaders(items); this.myListBox.source(headers); }; getHeaders(items: any): any { let headers = [], header; for (let i = 0; i < items.length; i += 1) { header = items[i].title; headers.push(header); } return headers }; loadContent(index: number): void { let item = this.config['currentFeedContent'][index]; if (item != null) { this.myPanel.clearcontent(); this.myPanel.prepend('