diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index d21da2f..9e18076 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -6,6 +6,7 @@ import { PortfolioComponent } from './portfolio/portfolio.component' import { DetailComponent } from './detail/detail.component' import { HomeComponent } from './home/home.component' import { AdminComponent } from './admin/admin.component' +import { SitemapComponent } from './sitemap/sitemap.component' const routes: Routes = [ { @@ -32,7 +33,8 @@ const routes: Routes = [ }, { path: 'admin', component: AdminComponent } ] - } + }, + { path: 'sitemap', component: SitemapComponent } ] @NgModule({ diff --git a/src/app/app.module.ts b/src/app/app.module.ts index e9ca59f..4ee3054 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -16,6 +16,7 @@ import { DetailComponent } from './detail/detail.component'; import { AdminComponent } from './admin/admin.component'; import { HomeComponent } from './home/home.component'; import { SpinnerComponent } from './spinner/spinner.component'; +import { SitemapComponent } from './sitemap/sitemap.component'; @NgModule({ declarations: [ @@ -27,7 +28,8 @@ import { SpinnerComponent } from './spinner/spinner.component'; DetailComponent, AdminComponent, HomeComponent, - SpinnerComponent + SpinnerComponent, + SitemapComponent ], imports: [ BrowserModule, diff --git a/src/app/sitemap/sitemap.component.html b/src/app/sitemap/sitemap.component.html new file mode 100644 index 0000000..9c39da7 --- /dev/null +++ b/src/app/sitemap/sitemap.component.html @@ -0,0 +1,2 @@ + +{{sitemap}} diff --git a/src/app/sitemap/sitemap.component.scss b/src/app/sitemap/sitemap.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/sitemap/sitemap.component.spec.ts b/src/app/sitemap/sitemap.component.spec.ts new file mode 100644 index 0000000..0278236 --- /dev/null +++ b/src/app/sitemap/sitemap.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SitemapComponent } from './sitemap.component'; + +describe('SitemapComponent', () => { + let component: SitemapComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ SitemapComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SitemapComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/sitemap/sitemap.component.ts b/src/app/sitemap/sitemap.component.ts new file mode 100644 index 0000000..a5ffe90 --- /dev/null +++ b/src/app/sitemap/sitemap.component.ts @@ -0,0 +1,73 @@ +import { Component, OnInit } from '@angular/core' +import { Router, NavigationEnd } from '@angular/router' +import { ApisService } from '../services/apis.service' +import { environment } from '../../environments/environment' + +@Component({ + selector: 'app-sitemap', + templateUrl: './sitemap.component.html', + styleUrls: ['./sitemap.component.scss'] +}) +export class SitemapComponent implements OnInit { + + public basePath = `${environment.BASE_PATH}` + public sitemap: string = '' + + constructor( + private apisService: ApisService, + private router: Router + ) { } + + ngOnInit(): void { + + const sections = [ + 'about', + 'portfolio', + 'exhibitions', + 'installations', + 'entertainment', + 'performances', + 'worhshops' + ] + + sections.forEach((e) => { + this.sitemap += `${this.basePath}/${e}\n` + }) + + this.apisService.getPortfolio('portfolio').toPromise().then((response) => { + response.items.forEach((e) => { + this.sitemap += `${this.basePath}/detail/${e.type}/${e.id}/${this.parseTitle(e.title)}\n` + }) + + this.apisService.getPortfolio('exhibitions').toPromise().then((response) => { + response.items.forEach((e) => { + this.sitemap += `${this.basePath}/detail/exhibitions/${e.id}/${this.parseTitle(e.title)}\n` + }) + + this.download() + + },(error) => { + console.error(error) + }).catch((e) => { + console.error(e) + }) + + },(error) => { + console.error(error) + }).catch((e) => { + console.error(e) + }) + } + + parseTitle(title): string { + return title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-').replace('--', '-').replace('--', '-') + } + + download() { + const header = '\n\n' + const footer = '\n' + const blob = new Blob([`${header}${this.sitemap}${footer}`], { type: 'text/xml' }) + const url= window.URL.createObjectURL(blob) + window.location.assign(url) + } +}