Compare commits
6 Commits
b30bfc9293
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| fa2e249e94 | |||
| 132f0f3646 | |||
| 3cbcec5f53 | |||
|
|
8835175fb3 | ||
| 28c3abdb4a | |||
| 1b7c0c48e7 |
@@ -137,7 +137,9 @@ export const serverOriginInterceptor: HttpInterceptorFn = (req, next) => {
|
|||||||
return next(req);
|
return next(req);
|
||||||
}
|
}
|
||||||
|
|
||||||
const request = inject(REQUEST, { optional: true }) as ServerRequestLike | null;
|
const request = inject(REQUEST, {
|
||||||
|
optional: true,
|
||||||
|
}) as ServerRequestLike | null;
|
||||||
const origin = resolveApiOrigin(request, req.url);
|
const origin = resolveApiOrigin(request, req.url);
|
||||||
if (!origin) {
|
if (!origin) {
|
||||||
return next(req);
|
return next(req);
|
||||||
|
|||||||
@@ -22,10 +22,30 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col social">
|
<div class="col social">
|
||||||
<!-- Social Placeholders -->
|
<div class="social-link-row">
|
||||||
<div class="social-icon"></div>
|
<span class="social-name">Joe Küng:</span>
|
||||||
<div class="social-icon"></div>
|
<a
|
||||||
<div class="social-icon"></div>
|
class="social-icon-link"
|
||||||
|
href="https://www.linkedin.com/in/joe-k%C3%BCng-31831828b/"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
aria-label="Joe Küng LinkedIn"
|
||||||
|
>
|
||||||
|
<span class="social-icon-linkedin" aria-hidden="true"></span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="social-link-row">
|
||||||
|
<span class="social-name">Matteo Caletti:</span>
|
||||||
|
<a
|
||||||
|
class="social-icon-link"
|
||||||
|
href="https://www.linkedin.com/in/matteo-caletti-94291a3b6/"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
aria-label="Matteo Caletti LinkedIn"
|
||||||
|
>
|
||||||
|
<span class="social-icon-linkedin" aria-hidden="true"></span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -66,11 +66,69 @@
|
|||||||
|
|
||||||
.social {
|
.social {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: flex-start;
|
||||||
gap: var(--space-3);
|
gap: var(--space-3);
|
||||||
}
|
}
|
||||||
.social-icon {
|
|
||||||
width: 24px;
|
.social-link-row {
|
||||||
height: 24px;
|
display: flex;
|
||||||
background-color: var(--color-neutral-800);
|
align-items: center;
|
||||||
border-radius: 50%;
|
gap: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.social-name {
|
||||||
|
color: var(--color-neutral-200);
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.social-icon-link {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: var(--color-neutral-50);
|
||||||
|
color: #0a66c2;
|
||||||
|
transition:
|
||||||
|
transform 0.2s ease,
|
||||||
|
background-color 0.2s ease,
|
||||||
|
color 0.2s ease;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: #0a66c2;
|
||||||
|
color: var(--color-neutral-50);
|
||||||
|
transform: translateY(-1px);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus-visible {
|
||||||
|
outline: 2px solid var(--color-secondary-500);
|
||||||
|
outline-offset: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.social-icon-linkedin {
|
||||||
|
display: block;
|
||||||
|
width: 1rem;
|
||||||
|
height: 1rem;
|
||||||
|
background-color: currentColor;
|
||||||
|
mask-image: url("/assets/images/SVG/linkedin-svgrepo-com.svg");
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: center;
|
||||||
|
mask-size: contain;
|
||||||
|
-webkit-mask-image: url("/assets/images/SVG/linkedin-svgrepo-com.svg");
|
||||||
|
-webkit-mask-repeat: no-repeat;
|
||||||
|
-webkit-mask-position: center;
|
||||||
|
-webkit-mask-size: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.social {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.social-link-row {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -220,7 +220,8 @@ describe('ShopService', () => {
|
|||||||
next: (product) => {
|
next: (product) => {
|
||||||
response = product;
|
response = product;
|
||||||
},
|
},
|
||||||
error: () => fail('Expected stale slug tails to resolve from the uuid prefix'),
|
error: () =>
|
||||||
|
fail('Expected stale slug tails to resolve from the uuid prefix'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const request = httpMock.expectOne((request) => {
|
const request = httpMock.expectOne((request) => {
|
||||||
@@ -243,7 +244,8 @@ describe('ShopService', () => {
|
|||||||
next: (product) => {
|
next: (product) => {
|
||||||
response = product;
|
response = product;
|
||||||
},
|
},
|
||||||
error: () => fail('Expected bare uuid path to resolve from the uuid prefix'),
|
error: () =>
|
||||||
|
fail('Expected bare uuid path to resolve from the uuid prefix'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const request = httpMock.expectOne((request) => {
|
const request = httpMock.expectOne((request) => {
|
||||||
|
|||||||
@@ -295,12 +295,9 @@ export class ShopService {
|
|||||||
? `${this.apiUrl}/products/by-id-prefix/${encodeURIComponent(productIdPrefix)}`
|
? `${this.apiUrl}/products/by-id-prefix/${encodeURIComponent(productIdPrefix)}`
|
||||||
: `${this.apiUrl}/products/by-path/${encodeURIComponent(normalizedPath)}`;
|
: `${this.apiUrl}/products/by-path/${encodeURIComponent(normalizedPath)}`;
|
||||||
|
|
||||||
return this.http.get<ShopProductDetail>(
|
return this.http.get<ShopProductDetail>(endpoint, {
|
||||||
endpoint,
|
params: this.buildLangParams(),
|
||||||
{
|
});
|
||||||
params: this.buildLangParams(),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private normalizePublicPath(value: string | null | undefined): string {
|
private normalizePublicPath(value: string | null | undefined): string {
|
||||||
|
|||||||
14
frontend/src/assets/images/SVG/linkedin-svgrepo-com.svg
Normal file
14
frontend/src/assets/images/SVG/linkedin-svgrepo-com.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg height="800px" width="800px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
viewBox="0 0 382 382" xml:space="preserve">
|
||||||
|
<path style="fill:#0077B7;" d="M347.445,0H34.555C15.471,0,0,15.471,0,34.555v312.889C0,366.529,15.471,382,34.555,382h312.889
|
||||||
|
C366.529,382,382,366.529,382,347.444V34.555C382,15.471,366.529,0,347.445,0z M118.207,329.844c0,5.554-4.502,10.056-10.056,10.056
|
||||||
|
H65.345c-5.554,0-10.056-4.502-10.056-10.056V150.403c0-5.554,4.502-10.056,10.056-10.056h42.806
|
||||||
|
c5.554,0,10.056,4.502,10.056,10.056V329.844z M86.748,123.432c-22.459,0-40.666-18.207-40.666-40.666S64.289,42.1,86.748,42.1
|
||||||
|
s40.666,18.207,40.666,40.666S109.208,123.432,86.748,123.432z M341.91,330.654c0,5.106-4.14,9.246-9.246,9.246H286.73
|
||||||
|
c-5.106,0-9.246-4.14-9.246-9.246v-84.168c0-12.556,3.683-55.021-32.813-55.021c-28.309,0-34.051,29.066-35.204,42.11v97.079
|
||||||
|
c0,5.106-4.139,9.246-9.246,9.246h-44.426c-5.106,0-9.246-4.14-9.246-9.246V149.593c0-5.106,4.14-9.246,9.246-9.246h44.426
|
||||||
|
c5.106,0,9.246,4.14,9.246,9.246v15.655c10.497-15.753,26.097-27.912,59.312-27.912c73.552,0,73.131,68.716,73.131,106.472
|
||||||
|
L341.91,330.654L341.91,330.654z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
Reference in New Issue
Block a user