From 0499fa76dc3be85df291264142e06f3d0a20b5d5 Mon Sep 17 00:00:00 2001 From: Dslak Date: Wed, 9 Dec 2020 11:17:08 +0100 Subject: [PATCH 1/4] routing title and new home slider --- src/apis/index.php | 2 +- src/app/app.component.ts | 4 +- src/app/app.module.ts | 6 +- src/app/detail/detail.component.html | 8 +- src/app/detail/detail.component.scss | 1 + src/app/detail/detail.component.ts | 29 ++-- src/app/header/header.component.html | 14 +- src/app/header/header.component.ts | 13 +- src/app/home/home.component.html | 9 +- src/app/home/home.component.scss | 120 ++++++++------ src/app/home/home.component.ts | 6 +- src/app/portfolio/portfolio.component.ts | 7 +- src/app/services/apis.service.ts | 4 +- src/assets/images/favicon.png | Bin 1488 -> 11586 bytes src/assets/images/logo.svg | 202 ++++++++++++++--------- src/favicon.png | Bin 1488 -> 11586 bytes 16 files changed, 254 insertions(+), 171 deletions(-) diff --git a/src/apis/index.php b/src/apis/index.php index b91173e..b7a196a 100644 --- a/src/apis/index.php +++ b/src/apis/index.php @@ -15,7 +15,7 @@ if(isset($_GET['query'])) { case "performances": case "workshops": if($_GET['query'] == 'portfolio') {$filter = '';} else {$filter = "WHERE type='".$_GET['query']."'";} - if($_GET['random']) {$order = 'ORDER BY RAND()';} else {$order = "ORDER BY id DESC";} + if($_GET['random'] == 'true') {$order = 'ORDER BY RAND()';} else {$order = "ORDER BY id DESC";} $qe = mysqli_query($conn,"SELECT * FROM `works` $filter $order"); if(mysqli_num_rows($qe) > 0) { $content = null; diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 2762abb..f16fb86 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,5 +1,4 @@ import { Component } from '@angular/core'; - @Component({ selector: 'app-root', templateUrl: './app.component.html', @@ -7,4 +6,7 @@ import { Component } from '@angular/core'; }) export class AppComponent { title = 'Dslak | new-media arts'; + + public constructor() { } + } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index cf7935c..e9ca59f 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,4 +1,4 @@ -import { BrowserModule } from '@angular/platform-browser'; +import { BrowserModule, Title } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { HttpClientModule } from '@angular/common/http'; import { NgParticlesModule } from "ng-particles"; @@ -38,7 +38,9 @@ import { SpinnerComponent } from './spinner/spinner.component'; AngularEditorModule, HttpClientModule ], - providers: [], + providers: [ + Title + ], bootstrap: [AppComponent] }) export class AppModule { } diff --git a/src/app/detail/detail.component.html b/src/app/detail/detail.component.html index 488b0f3..f7a0f9a 100644 --- a/src/app/detail/detail.component.html +++ b/src/app/detail/detail.component.html @@ -51,14 +51,14 @@ Exhibitions: {{exhibition.title}} + (click)="showDetails('exhibitions', exhibition.id)" + routerLink="/detail/exhibitions/{{exhibition.id}}/{{parseTitle(exhibition.title)}}">{{exhibition.title}} Works: {{work.title}} + (click)="showDetails('works', work.id)" + routerLink="/detail/works/{{work.id}}/{{parseTitle(work.title)}}">{{work.title}} diff --git a/src/app/detail/detail.component.scss b/src/app/detail/detail.component.scss index 86015ae..908a292 100644 --- a/src/app/detail/detail.component.scss +++ b/src/app/detail/detail.component.scss @@ -60,6 +60,7 @@ left: 0; width: 100%; height: 100%; + padding: 2px; object-fit: cover; cursor: pointer; transition: transform .4s; diff --git a/src/app/detail/detail.component.ts b/src/app/detail/detail.component.ts index 00d9403..8400276 100644 --- a/src/app/detail/detail.component.ts +++ b/src/app/detail/detail.component.ts @@ -4,6 +4,7 @@ import { DomSanitizer } from '@angular/platform-browser' import { Location } from '@angular/common' import { NgxImageGalleryComponent, GALLERY_IMAGE, GALLERY_CONF } from "ngx-image-gallery" import { ApisService } from '../services/apis.service' +import { Title } from '@angular/platform-browser'; import { environment } from '../../environments/environment' @Component({ @@ -39,7 +40,8 @@ export class DetailComponent implements OnInit { private router: Router, private location: Location, private activeRoute: ActivatedRoute, - private sanitizer: DomSanitizer + private sanitizer: DomSanitizer, + private titleService: Title ) { } ngOnInit(): void { @@ -52,16 +54,17 @@ export class DetailComponent implements OnInit { this.init = true } - showDetails(section, id, title = ''): void { + showDetails(section, id): void { this.galleryImages = [] this.apisService.getDetails(section, id).toPromise().then((response) => { - if(this.history[this.history.length - 1] != `/detail/${section}/${id}`) { - this.history.push(`/detail/${section}/${id}/${title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '_')}`) + this.details = response.item + + if(this.history[this.history.length - 1] != `/detail/${section}/${id}/${this.parseTitle(this.details.title)}`) { + this.history.push(`/detail/${section}/${id}/${this.parseTitle(this.details.title)}`) } - const detail = response.item - detail.videos = detail.videos ? JSON.parse(detail.videos) : [] - detail.videos.forEach((e) => { + this.details.videos = this.details.videos ? JSON.parse(this.details.videos) : [] + this.details.videos.forEach((e) => { e.code = e.url.split('/').pop() switch(e.type) { case 'youtube': @@ -76,9 +79,9 @@ export class DetailComponent implements OnInit { } }) - detail.gallery = detail.gallery ? JSON.parse(detail.gallery) : [] + this.details.gallery = this.details.gallery ? JSON.parse(this.details.gallery) : [] - detail.gallery.forEach((e) => { + this.details.gallery.forEach((e) => { if(!e.main) { this.galleryImages.push({ url: `${this.basePath}${e.url}`, @@ -91,7 +94,7 @@ export class DetailComponent implements OnInit { }) this.loaded = !this.loadedImages.length - this.details = detail + this.titleService.setTitle(`Dslak - New media arts | ${this.details.title}`) },(error) => { console.error('getPortfolio ERROR', error) @@ -102,6 +105,7 @@ export class DetailComponent implements OnInit { back(): void { this.history.pop() + let title = '' if(this.history.length > 0) { const last = this.history[this.history.length - 1] this.section = last.split('/')[2] @@ -110,6 +114,8 @@ export class DetailComponent implements OnInit { this.location.back() } else { this.location.back() + title = this.router.url.split('/')[2] + this.titleService.setTitle(`Dslak - New media arts | ${title.charAt(0).toUpperCase() + title.slice(1)}`) } } @@ -120,6 +126,9 @@ export class DetailComponent implements OnInit { } + parseTitle(title): string { + return title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '_') + } diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html index dbba668..6a4bb4a 100644 --- a/src/app/header/header.component.html +++ b/src/app/header/header.component.html @@ -7,13 +7,13 @@ diff --git a/src/app/header/header.component.ts b/src/app/header/header.component.ts index c4638d6..da9534b 100644 --- a/src/app/header/header.component.ts +++ b/src/app/header/header.component.ts @@ -1,5 +1,6 @@ import { Component, OnInit, HostListener, Inject } from '@angular/core' import { Router, NavigationEnd } from '@angular/router' +import { Title } from '@angular/platform-browser'; import { DOCUMENT } from '@angular/common' @Component({ @@ -13,11 +14,15 @@ export class HeaderComponent implements OnInit { public isMenuOpen: boolean = false public isFirstScroll: boolean = true - constructor(@Inject(DOCUMENT) private document: Document, private router: Router) { + constructor( + @Inject(DOCUMENT) private document: Document, + private router: Router, + private titleService: Title + ) { router.events.subscribe((val) => { this.isMenuOpen = false - //this.isSticky = true this.document.body.classList.remove('no-scroll') + //if(val.shouldActivate) { console.log('route', val) } }) } @@ -45,4 +50,8 @@ export class HeaderComponent implements OnInit { } } + setTitle(title): void { + this.titleService.setTitle(`Dslak - New media arts | ${title}`) + } + } diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html index 2a92674..3bfe617 100644 --- a/src/app/home/home.component.html +++ b/src/app/home/home.component.html @@ -1,8 +1,6 @@
- -
-
+
loading @@ -28,4 +26,9 @@
+ + + + + diff --git a/src/app/home/home.component.scss b/src/app/home/home.component.scss index 8c0ef20..bcdd823 100644 --- a/src/app/home/home.component.scss +++ b/src/app/home/home.component.scss @@ -2,60 +2,19 @@ .component-home { display: flex; - padding-top: 100px; + padding-top: 150px; height: 100vh; transform: skew(-15deg) rotate(-15deg); z-index: 1; - .goto-prev, - .goto-next { - position: absolute; - height: 40px; - width: 60px; - border: none; - background: none; - color: $black; - font-size: $font-40; - appearance: none; - margin: 0; - padding: 5px; - cursor: pointer; - z-index: 2; - - .icon { - &:before { - transform: translate(-50%, -50%); - position: absolute; - top: 50%; - left: 50%; - } - } - } - .goto-prev { - top: 60px; - left: 20px; - } - .goto-next { - top: calc(80vh + 10px); - right: 20px; - .icon { - &:before { - transform: translate(-50%, -50%) rotate(180deg); - } - } - } - .content { display: inline-flex; margin: 0; - margin-left: -50px; //animation: slide 150s linear infinite; transition: margin-left .5s; - @each $width in 1,2,3,4,5,6 { - .slide-#{$width} { - width: #{($width+2)*100}px; - } + .slide { + width: 100vw; } .box { @@ -64,13 +23,14 @@ background: $black-alpha2; border-radius: 5px; overflow: hidden; - margin: auto 0; + margin: auto; padding: 40px 20px; height: calc(80vh - 90px); + width: calc(100% - 20px); min-height: 250px; //max-height: 700px; cursor: pointer; - transform: skew(-6deg, -6deg) rotate(6deg); + transform: rotate(15deg) skew(15deg, 0deg); transition: transform .4s, background .4s, opacity .4s; -webkit-backface-visibility: hidden; @@ -147,7 +107,7 @@ &:hover { background: $black; - transform: scale(1.4) rotate(14deg) skew(14deg, 0deg); + transform: scale(1.4) rotate(15deg) skew(15deg, 0deg); z-index: 50; .image { @@ -166,15 +126,71 @@ } +.goto-prev, +.goto-next { + position: absolute; + display: none; + height: 40px; + width: 60px; + border: none; + background: none; + color: $white; + font-size: $font-40; + appearance: none; + margin: 0; + padding: 5px; + cursor: pointer; + opacity: .4; + transition: opacity .4s; + z-index: 2; + + &:hover { + opacity: 1; + } + + .icon { + &:before { + transform: translate(-50%, -50%); + position: absolute; + top: 50%; + left: 50%; + } + } +} + +.goto-prev { + top: 20px; + left: 20px; +} +.goto-next { + bottom: 20px; + right: 20px; + .icon { + &:before { + transform: translate(-50%, -50%) rotate(180deg); + } + } +} + + @media (min-width: map-get($grid-breakpoints, 'md')) { .component-home { - .goto-prev { - left: 50px; - } - .goto-next { - right: 50px; + .content { + margin-left: -calc(100vw / 2); + .slide { + @each $width in 1,2,3,4,5,6 { + &.slide-#{$width} { + width: #{($width+2)*100}px; + } + } + } } } + + .goto-prev, + .goto-next { + display: block; + } } diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index 50ad9a2..957fbfa 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -58,7 +58,7 @@ export class HomeComponent implements OnInit { setInterval( () => { if(!this.paused) { - const scrollWidth = 300 + const scrollWidth = document.body.clientWidth > 768 ? document.body.clientWidth / 3 : document.body.clientWidth const scrollPos = parseInt(this.scrollContent.nativeElement.style.marginLeft) || 0 this.scrollPos = scrollPos - scrollWidth <= -(this.scrollContent.nativeElement.offsetWidth - document.body.clientWidth) ? -(this.scrollContent.nativeElement.offsetWidth - document.body.clientWidth) : scrollPos - scrollWidth @@ -78,7 +78,7 @@ export class HomeComponent implements OnInit { } scroll(dir): void { - const scrollWidth = document.body.clientWidth / 3 + const scrollWidth = document.body.clientWidth > 768 ? document.body.clientWidth / 3 : document.body.clientWidth const scrollPos = parseInt(this.scrollContent.nativeElement.style.marginLeft) || 0 this.paused = true @@ -97,7 +97,7 @@ export class HomeComponent implements OnInit { swipe(e: TouchEvent, when: string): void { const coord: [number, number] = [e.changedTouches[0].clientX, e.changedTouches[0].clientY] const time = new Date().getTime() - const scrollWidth = document.body.clientWidth + const scrollWidth = document.body.clientWidth > 768 ? document.body.clientWidth / 3 : document.body.clientWidth const scrollPos = parseInt(this.scrollContent.nativeElement.style.marginLeft) || 0 this.paused = true diff --git a/src/app/portfolio/portfolio.component.ts b/src/app/portfolio/portfolio.component.ts index f7f2c66..37e16e7 100644 --- a/src/app/portfolio/portfolio.component.ts +++ b/src/app/portfolio/portfolio.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from '@angular/core' import { Router, NavigationEnd } from '@angular/router' import { ApisService } from '../services/apis.service' +import { Title } from '@angular/platform-browser'; import { environment } from '../../environments/environment' @Component({ @@ -19,8 +20,9 @@ export class PortfolioComponent implements OnInit { constructor( private apisService: ApisService, - private router: Router) - { } + private router: Router, + private titleService: Title + ) { } ngOnInit(): void { this.section = this.router.url.split('/')[1] @@ -73,6 +75,7 @@ export class PortfolioComponent implements OnInit { showDetails(id, title = ''): void { const section = this.section == 'exhibitions' ? 'exhibitions' : 'works' + if(title) { this.titleService.setTitle(`Dslak - New media arts | ${title}`) } this.router.navigate([`/detail/${section}/${id}/${title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '_')}`]) } diff --git a/src/app/services/apis.service.ts b/src/app/services/apis.service.ts index 47887ba..b878947 100644 --- a/src/app/services/apis.service.ts +++ b/src/app/services/apis.service.ts @@ -16,8 +16,8 @@ export class ApisService extends BaseService { super() } - getPortfolio(section, randon = false): Observable { - let urlApi = `${this.restApi}?query=${section}&random=${randon}` + getPortfolio(section, random = false): Observable { + let urlApi = `${this.restApi}?query=${section}&random=${random}` return this.http.get(urlApi).pipe( catchError(this.handleError) ) diff --git a/src/assets/images/favicon.png b/src/assets/images/favicon.png index 0d75435d056e6a1e937f63e0e7c67ceab3879cfd..8368e8d55e5d01028f31ca5036ad20add28af98c 100644 GIT binary patch literal 11586 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 irOmMegvt_V+z4}E#<4#F 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 Y!?oh*-;=^%{m%d;xlgjS(q`fR1J9@XF8}}l delta 1468 zcmV;t1w;D6TF?tNiBL{Q4GJ0x0000DNk~Le0000a0000W2nGNE0D6(yjsO4v32;bR za{vGV3;+ND3;~v>_)w8HCw~Q9NklIYJV2vv{@QXddVL?9|vYNbkjs8ms2ihzd}i3dPI?F;QofmVXFDXK&i z5)et8w22cZwVgQGb^MXF_j6`WAJ)!#KfK;<-2dab_uTo<|DLZa{C}UJiah;ddT`=o z&zB3cv3tv9YfmX}4ONQPP!!@jaXlNB^`|2vqaOjtvg5%M_?E{VfshbPk0=gkj|d4M z9-$iq992>xcz~;r7SsWfVEM%bE0Gy@Hf1k4-pr(%m>zfB>ywV$m^N)mTNZlTw&HXD z{P5E2a_|H`zV$oc34fry=MsXF#q@+jcHANRABX92m+ZL1jf{#?ugIW=Si+!aGASiqfzG{ZiJr>0oZY0fuK?)R4Ivx*_9^@ zu)m%2$l)G7d}9;ET&#Nr4S4dU2|#$`z#VmV+tGUraQkYGCw~w1@cye?){V$A{{Ggc zmUcH8Ef^pVY-n7}P22qSw|(nI;{NZ?@ttQgM4|AT{dWe}4mE zrP--lSf(27R!p(1=ExU;y^qa}Eh|(9)oSdlCrq#lz2E<4fOI0O0C*mp}Ys+p2rF?kWDHm6?N#sai1{gz8FR=5~-8s-@m)6kSd-LA-_B_j2`Xox{|#C$=-lc!Q$Ot^#gEy z!XXNU`G1Vv*4OnzHujeR5b#W-FUC85k}#ntUTskUxK{Io&^a zt$#MUKDd8|?>%>oe}9r9W=DMcne5HAQr_Z&*S4_bu4-^5H-=1)cf^M+y9$ja&wTMw z+M61Uw{_fhPk}q{%QK%f%uP9UYfe1k+L+6cKlTDJbJ=NiL`yU&qE_&b2ujcvs4`!R}Djbrbp`p#mp4gRA z!CJqU;3{zakOv-}~NHH;n+fPGI5{N&uR0Hm{0drt`2=|@v?C>Cqho4Y$5YNG172!aFSyWJw#3KhkrQm&H1eJ zaxUxa4g+zF6D=4=bH>)0n5}cRtut6;Vs>~v7L!ShG3CU$I&nfSj*MK)0=LjWYWOc$ W;1V8B_ltG_0000 + id="svg2" + height="94.896881" + width="106.79461"> + id="defs4"> + + + + + + + + + + id="metadata7"> @@ -25,84 +62,85 @@ + transform="translate(-509.49411,-555.85051)" + id="layer2"> + style="opacity:1;stroke-width:1.46329;stop-opacity:1" + transform="matrix(0.68339561,0,0,0.68339561,-1403.3442,1715.6078)" + id="g5226"> - - - - - - - - - - - - - - - + style="opacity:1;stroke-width:1.46329;stop-opacity:1" + id="g5142" + transform="translate(-14.392352,-6.619979)"> + + + + + + + + + + + + + + + + + diff --git a/src/favicon.png b/src/favicon.png index 0d75435d056e6a1e937f63e0e7c67ceab3879cfd..8368e8d55e5d01028f31ca5036ad20add28af98c 100644 GIT binary patch literal 11586 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 irOmMegvt_V+z4}E#<4#F zS;IVrPb%}a3QS3dIVHR%X6`W{i2u%Wh9`50uV7J~h4nb7$(&O^@DM#SZOIi4kZ?x2 zdc%%S1OMsSL3#b=+!u7Zu$-_W!yJ!ViNl%X*<*4f?!B<5VS@GJb~~FG{AaI08BUuURJK*j~nv7wO^A3G{9S7E_#4&wK+O2ZW$9TYqG=? zh*V|7S_5oyf6t_Ut{{!C@+t1ZCOn=W*G`Cq<-AbYHo@QXRRy&b9;;m=Ue*)#Q=|E+ z8up5{ql?CAbnfa;%L96H^5q~VlJ&dpih>_VF9%kIs$JhPTLjXi>#dC=f8%W)Btn8= zA7H|T3eVoa8}}FH$M2PKGYua6S9od8l{L{(gGxS6H1Hkw-$?Q7rE>y64DPgGvGn%< zfDnO87FLbx?qNE34&I{z5*ew?`v9snbnH(gnVUkApIs!;)v-UV@$o{%#CeVA;dbeH-F0`pjQBKq)Yw z@5UfH;iN#!`w2H8AO4L3pDfbc8I>pibXTkb1F&c`Ur-&Df@U`C#JA@#ZG&gO1$-c@ z#p}T9XRA4;Vj{skhAAd#8gqm0S1!}Tpa?CXZL=%Ok@K}qu{+k-p}Q-+6^)#jN#z$s%X@Ziv=Bg*61jp z09W5p=qwNNzJDC4^ESIAeImAn!5n_bLS*%UulbjGSc$PDpsoYx0|1OkfuX$gRoOfQ`*&$_U;@43%^ZWQ_{C zu7qDBwQJ_wL#xJIaa=c`*9MAh8R%RJ?FlUkLa@6lOli`=ifuMi1rvbv!*Cw^UZEOz z7AFcV+J*&=77BIIEiAzFwH`2{Z&Qp#w64Blq%0pe@;APtxR8~KFPn8z)g@QUX%hlO zPCu89Zfyt0vKdkSkSPA?I}z31=JrnB3cLE<*tI>y1j?#=Vi2V_=b&wRQna%Vlt@R= zhwiiT%boK>@V{i$eFQtPEKi%xv2{ay+jH$Y${)1kA0#f;yMB`Pe)6f&Kwu3W7T<{Q zV6IW4Iw9@XGIbcfa>-uAZHO8a9Ql4f+2$lIRAb7B5d}qoYzAS+d5DW%KNnSkFz_`%2XqYkQ9`QZ4z!1APz@w9UpedJCD{^Xp>c(HZ<;8n_E zC<;nK?cJi7EXFa!dj8V!WkXG)A`pVP9;shmae5nXq!mU5A51)IzKK-J!5kcZ~y zIbNFPf?j|Il7<0HvV=Au&V;rG&v~p9GH`c)s*nCEUQy1L(D9>}7VP9YCf0a(q!YMN z1c&HnSDISqdS5Fn1;$3VexfFw!f}|`K2KC>capbK6z`xx$GD2oAG*yH5}p|`+7Q1Z|0X{c;3FBt~xoS*kDo*AJ!|^>Iimc`L4$S zDkz76qs!A0WW`z=`taE0Yn5;2<>{FRw+RN`iQg~0-6Rk;WWs#W#(6_&?t{t(&OP zvr@suuly1{sOKCfgDFqZyGQ5oc%(G}t8|#zT@4ia{HN#PE*>5b?|OK)T1e-wj}e|+ zF#y-yqvdH+S9cUX?V==onZb4_!ro=S|Kz)I`jpuKVeKZeipJ$}n!vedqx4qygmhKB zM55_h#zfQH(UD{J_is1U-h?kXgWM|fIB>ADVOW0-vujmtKuq}?cOg#qq!%o(I>`ok z`0T;NgJFU6S~Sqr<3{M>+gj;wlr5cT;@#V8eV8AMU9GHLsC#CJ>m9_IIXtsH-S_S?uHT7zB$o!$w z?8n}#t1Fd&0FeNFSdn(+U&dwMl*!QRhj()`8LYq<(;(Nv2l7T@0?~O`cNwzrVidsB zz?lrnZ8bZS-Dljx9TU;In5GUVnZfXKjqvoBi`ZY|x7PXD8LT0Ws$ufoXYeTFpPC(* zJRCZ?$dBaOJQ53gR8&z`ecDvGvwZ7XQdXWhTwh-wjyV*YhuNWuP?NWn>+U*f=Xrt9 zgACdSbWL&2hGqwbZ^wuHSm(iIA0%Pr>?tYg9LvIS|%8;LWF zl=VuYvEyOZR8&1UYUjs{Hwre@vjyuO^Qagql>6igi9z5(1#Gy1=iT!z%qd9ORcSz?7GgCg2uDq)HJ651|4&}4Z#4YFA^Qi zOd0*3GWwY`xiTf1g%bLO8v4~Nxh5rrCVhn(IhvWYr)6qwleAhmMfwk+*2$8ra6Hv; zc1lfv7{t(~w5;E#b~t#NW^l50isN`mcx0R@1^J5zZAADaKV7hEm#rM-(kTM&PM0Yh zuDg;fTs-CPl0Opz@141 z`gi!w*I5ueSZ?#*#;eo20knf9gDl|^EV$0oxL=NJm(uV{2!8_yJ^y2|Vt!`XVyoh+ z9}m1SCndZxMX*hQ4Tv!e(bl>JnY{O{6=39)1uuMB*o93%F*oNEEkn5h?mKg(s<01QHX>Qzn4a!n`fGsIqx;5pM2^nJ ziSETfdzRT&0c4OvR1Q1K`kAQSIOfZy<>eM)YHBJ&lNK!6ez+qR70>F>Rp=Ul)Ax1G zVq)2{MotZd{-3!Z6EXRpA2CC!%f4l-xwgmSpB@q1gZby+G#Tu0A$|ZmxDH+AVk|8( z-81DLyAhc86y82vSs63eM&A?ZOMZ&5#luULXR4iULAt1$95K0 zisa-Csp(zd_OHEQ-5W{v#7O8?Or~k@@>41&=@28unSPtk#d^}lMF zE+YG5Av<6Q_Fb}kGP2bY=(N_)!EY+uB%R~%1Kg8a2C4HePxmggC57{RXU?p9lmG)K zK^3%K0(YvZf$KuSP*%EFW!7Q10e;muha94iv*yL^&E5A*Kcr& Y!?oh*-;=^%{m%d;xlgjS(q`fR1J9@XF8}}l delta 1468 zcmV;t1w;D6TF?tNiBL{Q4GJ0x0000DNk~Le0000a0000W2nGNE0D6(yjsO4v32;bR za{vGV3;+ND3;~v>_)w8HCw~Q9NklIYJV2vv{@QXddVL?9|vYNbkjs8ms2ihzd}i3dPI?F;QofmVXFDXK&i z5)et8w22cZwVgQGb^MXF_j6`WAJ)!#KfK;<-2dab_uTo<|DLZa{C}UJiah;ddT`=o z&zB3cv3tv9YfmX}4ONQPP!!@jaXlNB^`|2vqaOjtvg5%M_?E{VfshbPk0=gkj|d4M z9-$iq992>xcz~;r7SsWfVEM%bE0Gy@Hf1k4-pr(%m>zfB>ywV$m^N)mTNZlTw&HXD z{P5E2a_|H`zV$oc34fry=MsXF#q@+jcHANRABX92m+ZL1jf{#?ugIW=Si+!aGASiqfzG{ZiJr>0oZY0fuK?)R4Ivx*_9^@ zu)m%2$l)G7d}9;ET&#Nr4S4dU2|#$`z#VmV+tGUraQkYGCw~w1@cye?){V$A{{Ggc zmUcH8Ef^pVY-n7}P22qSw|(nI;{NZ?@ttQgM4|AT{dWe}4mE zrP--lSf(27R!p(1=ExU;y^qa}Eh|(9)oSdlCrq#lz2E<4fOI0O0C*mp}Ys+p2rF?kWDHm6?N#sai1{gz8FR=5~-8s-@m)6kSd-LA-_B_j2`Xox{|#C$=-lc!Q$Ot^#gEy z!XXNU`G1Vv*4OnzHujeR5b#W-FUC85k}#ntUTskUxK{Io&^a zt$#MUKDd8|?>%>oe}9r9W=DMcne5HAQr_Z&*S4_bu4-^5H-=1)cf^M+y9$ja&wTMw z+M61Uw{_fhPk}q{%QK%f%uP9UYfe1k+L+6cKlTDJbJ=NiL`yU&qE_&b2ujcvs4`!R}Djbrbp`p#mp4gRA z!CJqU;3{zakOv-}~NHH;n+fPGI5{N&uR0Hm{0drt`2=|@v?C>Cqho4Y$5YNG172!aFSyWJw#3KhkrQm&H1eJ zaxUxa4g+zF6D=4=bH>)0n5}cRtut6;Vs>~v7L!ShG3CU$I&nfSj*MK)0=LjWYWOc$ W;1V8B_ltG_0000 Date: Wed, 9 Dec 2020 11:28:18 +0100 Subject: [PATCH 2/4] clean ur --- src/app/app.component.ts | 13 +++++++++---- src/app/detail/detail.component.ts | 8 ++++---- src/app/portfolio/portfolio.component.ts | 9 +++++++-- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/app/app.component.ts b/src/app/app.component.ts index f16fb86..ecc3a7e 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,12 +1,17 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +import { Title } from '@angular/platform-browser'; + @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'] }) -export class AppComponent { - title = 'Dslak | new-media arts'; +export class AppComponent implements OnInit { + + public constructor(private titleService: Title) { } - public constructor() { } + ngOnInit(): void { + this.titleService.setTitle('Dslak | New-media arts') + } } diff --git a/src/app/detail/detail.component.ts b/src/app/detail/detail.component.ts index 8400276..cab5fe0 100644 --- a/src/app/detail/detail.component.ts +++ b/src/app/detail/detail.component.ts @@ -30,6 +30,7 @@ export class DetailComponent implements OnInit { imageOffset: '0px', showDeleteControl: false, showImageTitle: false, + showArrows: false } public galleryImages: GALLERY_IMAGE[] = [] @@ -94,7 +95,7 @@ export class DetailComponent implements OnInit { }) this.loaded = !this.loadedImages.length - this.titleService.setTitle(`Dslak - New media arts | ${this.details.title}`) + this.titleService.setTitle(`Dslak | New-media arts | ${this.details.title}`) },(error) => { console.error('getPortfolio ERROR', error) @@ -115,7 +116,7 @@ export class DetailComponent implements OnInit { } else { this.location.back() title = this.router.url.split('/')[2] - this.titleService.setTitle(`Dslak - New media arts | ${title.charAt(0).toUpperCase() + title.slice(1)}`) + this.titleService.setTitle(`Dslak | New media arts | ${title.charAt(0).toUpperCase() + title.slice(1)}`) } } @@ -125,9 +126,8 @@ export class DetailComponent implements OnInit { this.loaded = this.init && this.loadedImages.every( (val) => !val) } - parseTitle(title): string { - return title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '_') + return title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-').replace('--', '-').replace('--', '-') } diff --git a/src/app/portfolio/portfolio.component.ts b/src/app/portfolio/portfolio.component.ts index 37e16e7..eecb298 100644 --- a/src/app/portfolio/portfolio.component.ts +++ b/src/app/portfolio/portfolio.component.ts @@ -75,8 +75,8 @@ export class PortfolioComponent implements OnInit { showDetails(id, title = ''): void { const section = this.section == 'exhibitions' ? 'exhibitions' : 'works' - if(title) { this.titleService.setTitle(`Dslak - New media arts | ${title}`) } - this.router.navigate([`/detail/${section}/${id}/${title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '_')}`]) + if(title) { this.titleService.setTitle(`Dslak | New-media arts | ${title}`) } + this.router.navigate([`/detail/${section}/${id}/${this.parseTitle(title)}`]) } onLoad(id): void { @@ -84,4 +84,9 @@ export class PortfolioComponent implements OnInit { this.loaded = this.init && this.portfolioItems.every( (val) => !val.loading) } + parseTitle(title): string { + return title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-').replace('--', '-').replace('--', '-') + } + + } From ca0186e738808803bc251eb7bf59d03c7e4954b9 Mon Sep 17 00:00:00 2001 From: Dslak Date: Wed, 9 Dec 2020 11:38:56 +0100 Subject: [PATCH 3/4] add google tag --- src/index.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/index.html b/src/index.html index 229698c..5deb6c7 100644 --- a/src/index.html +++ b/src/index.html @@ -6,6 +6,17 @@ + + From 525d3a766082d34514e63ff179e82e6df99b3123 Mon Sep 17 00:00:00 2001 From: Dslak Date: Wed, 9 Dec 2020 11:40:21 +0100 Subject: [PATCH 4/4] item scope --- src/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.html b/src/index.html index 5deb6c7..f695e7b 100644 --- a/src/index.html +++ b/src/index.html @@ -2,7 +2,7 @@ - DslakWebsite + Dslak | New-media arts @@ -18,7 +18,7 @@ - +