forked from samuel-p/sp-codes.de
added services template
updated .drone.yml
This commit is contained in:
parent
1d70658e41
commit
fcfed7842e
16 changed files with 340 additions and 62 deletions
11
.drone.yml
11
.drone.yml
|
@ -1,6 +1,6 @@
|
|||
kind: pipeline
|
||||
type: docker
|
||||
name: default
|
||||
name: build
|
||||
|
||||
steps:
|
||||
- name: build
|
||||
|
@ -9,6 +9,12 @@ steps:
|
|||
- npm install
|
||||
- npm run build
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: deploy
|
||||
|
||||
steps:
|
||||
- name: deploy
|
||||
image: alpine
|
||||
environment:
|
||||
|
@ -22,6 +28,9 @@ steps:
|
|||
- which lftp || ( apk --update add lftp )
|
||||
- lftp -e "mirror -R ./dist/ sp-codes.de/; bye" -u $FTP_USERNAME,$FTP_PASSWORD $FTP_HOST
|
||||
|
||||
depends_on:
|
||||
- build
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- master
|
|
@ -9,6 +9,7 @@ module.exports = function(eleventyConfig) {
|
|||
"img": "img",
|
||||
"font": "font",
|
||||
"node_modules/@fortawesome/fontawesome-free/webfonts/": "font",
|
||||
"node_modules/fork-awesome/fonts/": "font",
|
||||
"node_modules/flag-icon-css/flags/4x3/(de|us)*": "flags"
|
||||
});
|
||||
|
||||
|
|
BIN
img/matrix.png
Normal file
BIN
img/matrix.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.3 KiB |
149
package-lock.json
generated
149
package-lock.json
generated
|
@ -3158,6 +3158,11 @@
|
|||
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
|
||||
"dev": true
|
||||
},
|
||||
"fork-awesome": {
|
||||
"version": "1.1.7",
|
||||
"resolved": "https://registry.npmjs.org/fork-awesome/-/fork-awesome-1.1.7.tgz",
|
||||
"integrity": "sha512-IHI7XCSXrKfUIWslse8c/PaaVDT1oBaYge+ju40ihL2ooiQeBpTr4wvIXhgTd2NuhntlvX+M5jYHAPTzNlmv0g=="
|
||||
},
|
||||
"form-data": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
|
||||
|
@ -6256,42 +6261,130 @@
|
|||
"dev": true
|
||||
},
|
||||
"nunjucks": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.0.tgz",
|
||||
"integrity": "sha512-YS/qEQ6N7qCnUdm6EoYRBfJUdWNT0PpKbbRnogV2XyXbBm2STIP1O6yrdZHgwMVK7fIYUx7i8+yatEixnXSB1w==",
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.1.tgz",
|
||||
"integrity": "sha512-LYlVuC1ZNSalQQkLNNPvcgPt2M9FTY9bs39mTCuFXtqh7jWbYzhDlmz2M6onPiXEhdZo+b9anRhc+uBGuJZ2bQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"a-sync-waterfall": "^1.0.0",
|
||||
"asap": "^2.0.3",
|
||||
"chokidar": "^2.0.0",
|
||||
"yargs": "^3.32.0"
|
||||
"chokidar": "^3.3.0",
|
||||
"commander": "^3.0.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"camelcase": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
|
||||
"integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
|
||||
"dev": true
|
||||
},
|
||||
"window-size": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
|
||||
"integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=",
|
||||
"dev": true
|
||||
},
|
||||
"yargs": {
|
||||
"version": "3.32.0",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
|
||||
"integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
|
||||
"anymatch": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
|
||||
"integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"camelcase": "^2.0.1",
|
||||
"cliui": "^3.0.3",
|
||||
"decamelize": "^1.1.1",
|
||||
"os-locale": "^1.4.0",
|
||||
"string-width": "^1.0.1",
|
||||
"window-size": "^0.1.4",
|
||||
"y18n": "^3.2.0"
|
||||
"normalize-path": "^3.0.0",
|
||||
"picomatch": "^2.0.4"
|
||||
}
|
||||
},
|
||||
"binary-extensions": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
|
||||
"integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"braces": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
||||
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"fill-range": "^7.0.1"
|
||||
}
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz",
|
||||
"integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"anymatch": "~3.1.1",
|
||||
"braces": "~3.0.2",
|
||||
"fsevents": "~2.1.2",
|
||||
"glob-parent": "~5.1.0",
|
||||
"is-binary-path": "~2.1.0",
|
||||
"is-glob": "~4.0.1",
|
||||
"normalize-path": "~3.0.0",
|
||||
"readdirp": "~3.4.0"
|
||||
}
|
||||
},
|
||||
"commander": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
|
||||
"integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==",
|
||||
"dev": true
|
||||
},
|
||||
"fill-range": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"to-regex-range": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"fsevents": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
|
||||
"integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"glob-parent": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
|
||||
"integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"is-glob": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"is-binary-path": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
||||
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"binary-extensions": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"is-number": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"readdirp": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
|
||||
"integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"picomatch": "^2.2.1"
|
||||
}
|
||||
},
|
||||
"to-regex-range": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
||||
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"is-number": "^7.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,10 @@
|
|||
@import "~bootstrap/scss/utilities/spacing";
|
||||
@import "~bootstrap/scss/utilities/display";
|
||||
@import "~bootstrap/scss/utilities/text";
|
||||
@import "~bootstrap/scss/utilities/float";
|
||||
|
||||
$fa-font-path: "../font";
|
||||
@import "~fork-awesome/scss/fork-awesome";
|
||||
@import "~@fortawesome/fontawesome-free/scss/fontawesome";
|
||||
@import "~@fortawesome/fontawesome-free/scss/solid";
|
||||
@import "~@fortawesome/fontawesome-free/scss/brands";
|
||||
|
@ -64,6 +67,10 @@ body {
|
|||
border-bottom: 1px solid #ffffff;
|
||||
}
|
||||
|
||||
.border-top {
|
||||
border-top: 1px solid #ffffff;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #ffffff;
|
||||
|
||||
|
@ -78,10 +85,16 @@ a {
|
|||
text-align: center;
|
||||
}
|
||||
|
||||
.row {
|
||||
margin: 0;
|
||||
.heading {
|
||||
font-family: "Minotaur", monospace;
|
||||
font-size: 3rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
//.row {
|
||||
// margin: 0;
|
||||
//}
|
||||
|
||||
.flex-grow {
|
||||
flex: 1;
|
||||
}
|
||||
|
@ -98,3 +111,42 @@ a {
|
|||
font-size: 2em;
|
||||
}
|
||||
}
|
||||
|
||||
.service {
|
||||
background-color: #222;
|
||||
border: 1px solid #fff;
|
||||
height: 100%;
|
||||
|
||||
.link {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.inner {
|
||||
position: relative;
|
||||
pointer-events: none;
|
||||
z-index: 1;
|
||||
padding: 1rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
|
||||
a {
|
||||
pointer-events: all;
|
||||
}
|
||||
}
|
||||
|
||||
&.flat {
|
||||
.inner {
|
||||
flex-direction: row;
|
||||
|
||||
h2 {
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
60
sites/_data/services.json
Normal file
60
sites/_data/services.json
Normal file
|
@ -0,0 +1,60 @@
|
|||
[
|
||||
{
|
||||
"id": "searx",
|
||||
"name": "Searx",
|
||||
"icon": "fas fa-search",
|
||||
"url": "https://searx.sp-codes.de",
|
||||
"summary": {
|
||||
"de": "Eine privatsphären-respektierende, hackbare Metasuchmaschine.",
|
||||
"en": "A privacy-respecting, hackable metasearch engine."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "invidious",
|
||||
"name": "Invidious",
|
||||
"icon": "fab fa-youtube",
|
||||
"url": "https://invidious.sp-codes.de",
|
||||
"summary": {
|
||||
"de": "Ein alternatives YouTube-Frontend.",
|
||||
"en": "An alternative YouTube-Frontend."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "connectivitycheck",
|
||||
"name": "Captive Portal Check",
|
||||
"icon": "fas fa-wifi",
|
||||
"summary": {
|
||||
"de": "Eine datenschutzfreundliches Tool, um Anmeldeseiten in WLAN-Netzwerken zu erkennen.",
|
||||
"en": "A privacy friendly Service to detect captive portals in WIFI networks."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "matrix",
|
||||
"name": "Matrix",
|
||||
"icon": "fas fa-comments",
|
||||
"url": "https://chat.sp-codes.de",
|
||||
"summary": {
|
||||
"de": "Ein offenes Netzwerk für sichere, dezentralisierte Kommunikation.",
|
||||
"en": "An open network for secure, decentralized communication."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "git",
|
||||
"name": "Gitea",
|
||||
"icon": "fas fa-code",
|
||||
"url": "https://git.sp-codes.de",
|
||||
"summary": {
|
||||
"de": "Eine leichtgewichtige Code-Hosting-Plattform für git.",
|
||||
"en": "A lightweight code hosting platform for git."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "firefox-sync",
|
||||
"name": "Firefox Sync",
|
||||
"icon": "fab fa-firefox",
|
||||
"summary": {
|
||||
"de": "Ein Service um Firefox Einstellungen, Lesezeichen, offene Tabs und vieles mehr über verschiedene Geräte zu synchronisieren.",
|
||||
"en": "A service to sync Firefox settings, bookmarks, open tabs and much more between multiple devices."
|
||||
}
|
||||
}
|
||||
]
|
|
@ -1,7 +1,6 @@
|
|||
module.exports = {
|
||||
title: "Webstoemp",
|
||||
description:
|
||||
"",
|
||||
title: "sp-codes",
|
||||
description: "Samuel Philipp - Software Engineer from Magdeburg",
|
||||
url: "https://sp-codes.de",
|
||||
baseUrl: "/",
|
||||
author: "Samuel Philipp",
|
||||
|
|
|
@ -24,7 +24,7 @@ title: sp-codes
|
|||
<meta property="og:locale" content="de">
|
||||
<meta property="og:url" content="https://sp-codes.de/">
|
||||
<meta property="og:title" content="sp-codes">
|
||||
<meta property="og:description" content="Samuel Philipp - Software Engineer & Software Engineer">
|
||||
<meta property="og:description" content="Samuel Philipp - Software Engineer from Magdeburg">
|
||||
<meta property="og:site_name" content="sp-codes">
|
||||
<meta property="og:image" content="https://sp-codes.de/img/sp-codes.jpg">
|
||||
<!--<meta property="og:updated_time" content="">-->
|
||||
|
@ -50,7 +50,7 @@ title: sp-codes
|
|||
{% for language in site.languages %}
|
||||
{% set translatedUrl = "/" + language.code + "/" %}
|
||||
{% for item in collections.all %}
|
||||
{% if item.data.key == key and item.data.locale == language.code %}
|
||||
{% if item.data.key == key and item.data.locale == language.code and not item.data.hidden %}
|
||||
{% set translatedUrl = item.url %}
|
||||
{% endif %}
|
||||
{% endfor%}
|
||||
|
@ -62,7 +62,9 @@ title: sp-codes
|
|||
{% endfor %}
|
||||
</div>
|
||||
<div class="content">
|
||||
{{ content | safe }}
|
||||
<div class="container">
|
||||
{{ content | safe }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-end flex-wrap p-2 menu menu-bottom">
|
||||
<div class="mr-3"><span class="far fa-copyright mr-2"></span>Samuel Philipp</div>
|
||||
|
|
|
@ -2,9 +2,10 @@
|
|||
layout: base.njk
|
||||
key: about
|
||||
title: Über
|
||||
eleventyNavigation:
|
||||
key: about
|
||||
title: Über
|
||||
order: 1
|
||||
#eleventyNavigation:
|
||||
# key: about
|
||||
# title: Über
|
||||
# order: 1
|
||||
---
|
||||
<h1>Über mich</h1>
|
||||
Comming soon!
|
||||
|
|
11
sites/de/projects.html
Normal file
11
sites/de/projects.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
layout: base.njk
|
||||
key: projects
|
||||
title: Projekte
|
||||
#eleventyNavigation:
|
||||
# key: projects
|
||||
# title: Projekte
|
||||
# order: 4
|
||||
---
|
||||
<h1>Projekte</h1>
|
||||
Comming soon!
|
|
@ -2,9 +2,10 @@
|
|||
layout: base.njk
|
||||
key: recommendations
|
||||
title: Empfehlungen
|
||||
eleventyNavigation:
|
||||
key: recommendations
|
||||
title: Empfehlungen
|
||||
order: 2
|
||||
#eleventyNavigation:
|
||||
# key: recommendations
|
||||
# title: Empfehlungen
|
||||
# order: 2
|
||||
---
|
||||
<h1>Empfehlungen</h1>
|
||||
Comming soon!
|
||||
|
|
|
@ -5,6 +5,28 @@ title: Dienste
|
|||
eleventyNavigation:
|
||||
key: services
|
||||
title: Dienste
|
||||
icon: server
|
||||
order: 2
|
||||
---
|
||||
<h1>Services</h1>
|
||||
<div>
|
||||
<a class="float-right mt-3" href="https://status.sp-codes.de"><i class="fas fa-heartbeat mr-2"></i>Status</a>
|
||||
<h1>Dienste</h1>
|
||||
<p>In meiner Freizeit stelle ich verschiedene quelloffene Dienste für die freie Nutzung bereit. Hier finden Sie eine
|
||||
Übersicht der einzelnen Services und jeweils eine kurze Beschreibung. Alle Services werden in Deutschland
|
||||
gehostet. Fühlen Sie sich frei davon Gebrauch zu machen.</p>
|
||||
<div class="row">
|
||||
{%- for service in services %}
|
||||
<div class="col-12 col-md-6 col-lg-4 p-3">
|
||||
<div class="service">
|
||||
<a class="link" href="/{{locale}}/services/{{service.id}}"></a>
|
||||
<div class="inner">
|
||||
<i class="{{service.icon}} fa-4x"></i>
|
||||
<h2 class="mt-2">{{service.name}}{% if service.url %} <a href="{{service.url}}"><i
|
||||
class="fas fa-external-link-alt"></i></a>{% endif %}</h2>
|
||||
<div>{{service.summary[locale]}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{%- endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
|
8
sites/de/services/invidous.md
Normal file
8
sites/de/services/invidous.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
layout: base.njk
|
||||
key: invidious
|
||||
title: Invidious
|
||||
---
|
||||
# Invidious
|
||||
|
||||
Die Beschreibung zu Invidious folgt in Kürze.
|
8
sites/de/services/searx.md
Normal file
8
sites/de/services/searx.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
layout: base.njk
|
||||
key: searx
|
||||
title: Searx
|
||||
---
|
||||
# Searx
|
||||
|
||||
Die Beschreibung zu Searx folgt in Kürze.
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
layout: base.njk
|
||||
key: about
|
||||
title: About
|
||||
eleventyNavigation:
|
||||
key: about
|
||||
title: About
|
||||
order: 1
|
||||
---
|
||||
<h1>About me</h1>
|
|
@ -5,6 +5,27 @@ title: Services
|
|||
eleventyNavigation:
|
||||
key: services
|
||||
title: Services
|
||||
icon: server
|
||||
order: 2
|
||||
---
|
||||
<h1>Services</h1>
|
||||
<div>
|
||||
<a class="float-right mt-3" href="https://status.sp-codes.de"><i class="fas fa-heartbeat mr-2"></i>Status</a>
|
||||
<h1>Services</h1>
|
||||
<p>In my spare time I provide various open source services for free. Here you can find an overview of the individual
|
||||
services and a short description for each of them. All services are hosted in Germany. Feel free to use it.</p>
|
||||
<div class="row">
|
||||
{%- for service in services %}
|
||||
<div class="col-12 col-md-6 col-lg-4 p-3">
|
||||
<div class="service">
|
||||
<a class="link" href="/{{locale}}/services/{{service.id}}"></a>
|
||||
<div class="inner">
|
||||
<i class="{{service.icon}} fa-4x"></i>
|
||||
<h2 class="mt-2">{{service.name}}{% if service.url %} <a href="{{service.url}}"><i
|
||||
class="fas fa-external-link-alt"></i></a>{% endif %}</h2>
|
||||
<div>{{service.summary[locale]}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{%- endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in a new issue