32 Commits

Author SHA1 Message Date
242feb8d1d fix: deploy pipeline
All checks were successful
Build / build (push) Successful in 1m51s
Build / deploy-stage (push) Successful in 3m50s
Build / switch-stage (push) Successful in 1m45s
Build / deploy-production (push) Successful in 3m20s
Release / switch-production (push) Successful in 1m4s
2025-12-03 17:45:22 +01:00
6deaf37cd2 fix: deploy pipeline
Some checks failed
Build / build (push) Successful in 1m52s
Build / deploy-production (push) Failing after 1m30s
Build / deploy-stage (push) Successful in 2m4s
Build / switch-stage (push) Failing after 1m5s
2025-12-03 17:36:40 +01:00
5a1dc2c17e fix: deploy pipeline
Some checks failed
Build / build (push) Successful in 2m33s
Build / deploy-stage (push) Failing after 3m50s
Build / switch-stage (push) Has been skipped
Build / deploy-production (push) Failing after 3m51s
2025-12-03 17:28:21 +01:00
d0c9067d06 feat: update typo3
Some checks failed
Build / build (push) Successful in 1m7s
Build / deploy-production (push) Failing after 40s
Build / deploy-stage (push) Failing after 1m3s
Build / switch-stage (push) Has been skipped
2025-12-03 17:11:07 +01:00
b85a5e5a5d add meeting notes
Some checks failed
Build / build (push) Successful in 4m21s
Build / deploy-stage (push) Failing after 3m35s
Build / switch-stage (push) Has been skipped
Build / deploy-production (push) Failing after 3m37s
2025-08-05 18:29:18 +02:00
9de2800ed0 fix: extend Content Security Policy for Action Network to allow images 2025-06-19 08:46:19 +02:00
69c8e060d6 fix: update npm command for CSS build in post-start hook 2025-06-18 14:42:18 +02:00
d067548314 fix: ddev to new version 2025-06-18 14:15:57 +02:00
8d3eced5e4 add new test.sql
All checks were successful
Build / build (push) Successful in 8m22s
Build / deploy-stage (push) Successful in 3m12s
Build / deploy-production (push) Successful in 2m50s
Build / switch-stage (push) Successful in 2m39s
2025-03-05 23:48:08 +01:00
88b411e1bd add env.example
Some checks are pending
Build / build (push) Waiting to run
Build / deploy-stage (push) Blocked by required conditions
Build / switch-stage (push) Blocked by required conditions
Build / deploy-production (push) Blocked by required conditions
2025-03-05 23:43:55 +01:00
5d039e2b63 Merge pull request 'Fix: Remove unwanted console log' (#14) from fix/unwanted-console-log into main
All checks were successful
Build / build (push) Successful in 4m5s
Build / deploy-stage (push) Successful in 3m2s
Build / switch-stage (push) Successful in 1m58s
Build / deploy-production (push) Successful in 2m51s
Reviewed-on: #14
2024-12-29 03:34:42 +01:00
5df5588b84 fix: remove unwanted console log
All checks were successful
Build / build (pull_request) Successful in 3m8s
2024-12-29 03:30:49 +01:00
9503b13aee Merge pull request 'Fix: Make composer.lock removal conditional' (#13) from fix/gitea-build-action into main
Some checks failed
Build / switch-stage (push) Blocked by required conditions
Build / build (push) Successful in 5m43s
Build / deploy-stage (push) Has been cancelled
Build / deploy-production (push) Has been cancelled
Reviewed-on: #13
2024-12-29 03:28:05 +01:00
29751dda93 fix: make composer.lock removal conditional
All checks were successful
Build / build (pull_request) Successful in 2m49s
2024-12-29 03:13:04 +01:00
7cc28d1e4e fix: default imagepos
Some checks failed
Build / build (push) Successful in 3m58s
Build / deploy-production (push) Failing after 2m9s
Build / deploy-stage (push) Successful in 3m8s
Build / switch-stage (push) Successful in 1m58s
Release / switch-production (push) Successful in 2m47s
2024-12-20 21:11:58 +01:00
f2599fb2ac fix: image size
Some checks failed
Build / build (push) Successful in 3m55s
Build / deploy-production (push) Failing after 2m9s
Build / deploy-stage (push) Successful in 3m9s
Build / switch-stage (push) Successful in 2m23s
2024-12-20 20:55:59 +01:00
f8f7d70325 fix: show pagination only when there is more than 1 page
Some checks failed
Build / build (push) Successful in 4m3s
Build / deploy-production (push) Failing after 2m15s
Build / deploy-stage (push) Successful in 3m6s
Build / switch-stage (push) Successful in 2m2s
2024-12-20 20:41:52 +01:00
bf43f52046 fix: image sizing
Some checks failed
Build / deploy-stage (push) Blocked by required conditions
Build / switch-stage (push) Blocked by required conditions
Build / deploy-production (push) Blocked by required conditions
Build / build (push) Has been cancelled
2024-12-20 20:39:14 +01:00
3cddcd8c5d feat: run release on tag
Some checks failed
Build / build (push) Successful in 4m5s
Build / deploy-stage (push) Successful in 3m37s
Build / switch-stage (push) Successful in 2m8s
Build / deploy-production (push) Failing after 2m45s
2024-12-20 20:04:54 +01:00
5b332a1675 feat: add deployment to production
Some checks failed
Build / deploy-stage (push) Blocked by required conditions
Build / switch-stage (push) Blocked by required conditions
Build / deploy-production (push) Blocked by required conditions
Build / build (push) Has been cancelled
2024-12-20 20:04:01 +01:00
c227b17d7f fix: footer scss
All checks were successful
Build / build (push) Successful in 4m12s
Build / deploy-stage (push) Successful in 2m45s
Build / switch-stage (push) Successful in 1m57s
2024-12-20 17:25:37 +01:00
defc44df99 fix: fade-in for large elements
Some checks failed
Build / deploy-stage (push) Blocked by required conditions
Build / switch-stage (push) Blocked by required conditions
Build / build (push) Has been cancelled
2024-12-20 17:24:16 +01:00
ced2d8279b feat: change background pattern
All checks were successful
Build / build (push) Successful in 4m5s
Build / deploy-stage (push) Successful in 2m50s
Build / switch-stage (push) Successful in 1m57s
2024-12-19 17:18:17 +01:00
2e07c498cd feat: add favicon
All checks were successful
Build / build (push) Successful in 4m7s
Build / deploy-stage (push) Successful in 2m41s
Build / switch-stage (push) Successful in 2m2s
2024-12-18 00:42:19 +01:00
57966ea7b3 feat: update logo
All checks were successful
Build / build (push) Successful in 4m13s
Build / deploy-stage (push) Successful in 2m44s
Build / switch-stage (push) Successful in 2m0s
2024-12-17 23:05:20 +01:00
ebe2905547 fix: change background
All checks were successful
Build / build (push) Successful in 4m3s
Build / deploy-stage (push) Successful in 2m47s
Build / switch-stage (push) Successful in 1m56s
2024-12-17 16:25:54 +01:00
f07354da68 feat: change background
All checks were successful
Build / build (push) Successful in 4m9s
Build / deploy-stage (push) Successful in 2m45s
Build / switch-stage (push) Successful in 2m4s
2024-12-17 16:04:51 +01:00
911c228322 feat: change button hover, change small textimage design
Some checks failed
Build / deploy-stage (push) Blocked by required conditions
Build / switch-stage (push) Blocked by required conditions
Build / build (push) Has been cancelled
2024-12-17 16:03:34 +01:00
6f9ed95263 fix: add news time in detail view
All checks were successful
Build / build (push) Successful in 4m11s
Build / deploy-stage (push) Successful in 2m50s
Build / switch-stage (push) Successful in 1m58s
2024-12-16 22:23:20 +01:00
baa233dd98 fix: spacings
Some checks failed
Build / deploy-stage (push) Blocked by required conditions
Build / switch-stage (push) Blocked by required conditions
Build / build (push) Has been cancelled
2024-12-16 22:19:19 +01:00
8df5bff3c8 feat: include news galery fancybox
All checks were successful
Build / build (push) Successful in 4m24s
Build / deploy-stage (push) Successful in 2m57s
Build / switch-stage (push) Successful in 2m2s
2024-12-16 22:05:03 +01:00
2604436c7c feat: add news detail design 2024-12-16 21:44:44 +01:00
45 changed files with 12994 additions and 109 deletions

View File

@@ -15,6 +15,12 @@ web_environment:
- TYPO3_CONTEXT=Development/Ddev
corepack_enable: false
hooks:
post-start:
- exec-host: |
ddev npm install
ddev npm run build:css -- --watch &
# Key features of DDEV's config.yaml:
# name: <projectname> # Name of the project, automatically provides

View File

@@ -1,9 +0,0 @@
version: '3.6'
services:
web:
# Install needed dependencies and run webpack in watch mode
command: /bin/sh -c "npm install && npm run build:css -- --watch"
volumes:
- ../packages/base:/var/www/html/packages/base
environment:
- NODE_ENV=development

View File

@@ -1,3 +1,4 @@
name: Build
on:
@@ -26,7 +27,7 @@ jobs:
- name: Run composer install if composer.json exists
run: |
rm composer.lock
[ -f composer.lock ] && rm composer.lock
composer validate --no-check-publish
- name: Set up Node.js

View File

@@ -28,14 +28,7 @@ jobs:
with:
php-version: ${{ env.PHP_VERSION }}
- name: Check if composer.json exists
id: check_files
uses: andstor/file-existence-action@87d74d4732ddb824259d80c8a508c0124bf1c673
with:
files: 'composer.json'
- name: Run composer install if composer.json exists
if: steps.check_files.outputs.files_exists == 'true'
run: |
composer validate --no-check-publish && composer install --prefer-dist --no-progress --ignore-platform-reqs
@@ -109,28 +102,28 @@ jobs:
dep: --file=./build/deploy.php release:switch stage
private-key: ${{secrets.STAGE_KEY}}
# deploy-production:
# needs: build
# runs-on: ubuntu-latest
# steps:
# - name: Setup PHP
# uses: shivammathur/setup-php@7c0b4c8c8ebed23eca9ec2802474895d105b11bc
# with:
# php-version: ${{ env.PHP_VERSION }}
# - uses: actions/download-artifact@v3
# with:
# name: typo3
# - name: Extract artifact
# run: |
# tar xf typo3.tar.gz
# rm typo3.tar.gz
# - name: Install ssh agent and rsync
# run: |
# apt update
# apt install -y openssh-client rsync
# - name: Deploy
# uses: deployphp/action@v1
# with:
# deployer-binary: "./bin/dep"
# dep: --file=./build/deploy.php release:create production
# private-key: ${{secrets.PROD_KEY}}
deploy-production:
needs: build
runs-on: ubuntu-latest
steps:
- name: Setup PHP
uses: shivammathur/setup-php@7c0b4c8c8ebed23eca9ec2802474895d105b11bc
with:
php-version: ${{ env.PHP_VERSION }}
- uses: actions/download-artifact@v3
with:
name: typo3
- name: Extract artifact
run: |
tar xf typo3.tar.gz
rm typo3.tar.gz
- name: Install ssh agent and rsync
run: |
apt update
apt install -y openssh-client rsync
- name: Deploy
uses: deployphp/action@v1
with:
deployer-binary: "./bin/dep"
dep: --file=./build/deploy.php release:create production
private-key: ${{secrets.PROD_KEY}}

View File

@@ -1,8 +1,9 @@
name: Release
on:
release:
types: [published]
push:
tags:
- 'v*.*' # Adjust this pattern based on your tagging
env:
PHP_VERSION: '8.3' # set this to the PHP version to use
@@ -20,13 +21,7 @@ jobs:
uses: shivammathur/setup-php@7c0b4c8c8ebed23eca9ec2802474895d105b11bc
with:
php-version: ${{ env.PHP_VERSION }}
- name: Check if composer.json exists
id: check_files
uses: andstor/file-existence-action@87d74d4732ddb824259d80c8a508c0124bf1c673
with:
files: 'composer.json'
- name: Run composer install if composer.json exists
if: steps.check_files.outputs.files_exists == 'true'
- name: Run composer install
run: |
composer validate --no-check-publish && composer install --prefer-dist --no-progress --ignore-platform-reqs
- name: Install ssh agent, rsync

1
.gitignore vendored
View File

@@ -17,4 +17,3 @@ nbproject
/public
/packages/base/Resources/Public/Css
/node_modules
composer.lock

View File

@@ -56,7 +56,7 @@ set('rsync', [
]);
task('typo3:extension:setup', function () {
cd('{{release_path}}');
cd('current');
run('{{bin/php}} bin/typo3 extension:setup');
});
@@ -94,7 +94,6 @@ task('release:create', [
'deploy:vendors',
'deploy:shared',
'deploy:writable',
'typo3:extension:setup',
'deploy:unlock',
'deploy:success'
]);
@@ -104,6 +103,7 @@ task('release:switch', [
'php:reload',
'php:reload-prod',
'typo3:cache:flush',
'typo3:extension:setup',
'typo3:language:update',
'typo3:cache:warmup',
'deploy:unlock',
@@ -117,11 +117,11 @@ task('deploy', [
'deploy:vendors',
'deploy:shared',
'deploy:writable',
'typo3:cache:flush',
'typo3:extension:setup',
'deploy:symlink',
'php:reload',
'php:reload-prod',
'typo3:cache:flush',
'typo3:language:update',
'typo3:cache:warmup',
'deploy:unlock',

View File

@@ -2,7 +2,7 @@ hosts:
production:
stage: production
hostname: web-arm.cloonar.com
remote_user: gbv_aktuell_at
remote_user: lena_schilling_at
writable_mode: chmod
forward_agent: true
deploy_path: ~/

9002
composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,6 @@ base: https://lena-schilling.at
baseVariants:
- base: https://lena-schilling.ddev.site
condition: 'applicationContext == "Development/Ddev"'
- base: https://lena-schilling.cloonar.dev
condition: 'applicationContext == "Production/Staging"'
dependencies:
@@ -25,3 +24,13 @@ languages:
websiteTitle: ''
rootPageId: 1
websiteTitle: ''
favicons:
full_name: 'Lena Schilling'
short_name: 'Lena Schilling'
theme_color: '#233600'
favicon_path: 'EXT:base/Resources/Public/Images/Favicons/'
favicon_svg: favicon.svg
favicon_png: favicon-96x96.png
apple_touch_icon: apple-touch-icon.png
android_192: web-app-manifest-192x192.png
android_512: web-app-manifest-512x512.png

25
env.example Normal file
View File

@@ -0,0 +1,25 @@
TYPO3_BE_INSTALL_TOOL_PASSWORD='$2y$12$yq4Jthe0jUyf69KuOY3Udeb4yKPdE2QZ42obVCPTzhLXEcNShXXk2'
# DB
TYPO3_DB_HOST='db'
TYPO3_DB_NAME='db'
TYPO3_DB_USER='db'
TYPO3_DB_PASSWORD='db'
TYPO3_DB_UNIX_SOCKET=''
TYPO3_DB_PORT=3306
# MAIL
TYPO3_MAIL_TRANSPORT='smtp'
TYPO3_MAIL_SMTP_SERVER='localhost:1025'
TYPO3_MAIL_SMTP_ENCRYPT=''
TYPO3_MAIL_SMTP_USER=''
TYPO3_MAIL_SMTP_PASSWORD=''
# Solr
SOLR_ENABLED_READ=true
SOLR_HOST=solr
SOLR_PATH=/
SOLR_PORT=8983
SOLR_SCHEME=http
SOLR_CORE_NAME_DE=core_de
SOLR_CORE_NAME_EN=core_en

56
meeting.md Normal file
View File

@@ -0,0 +1,56 @@
## Einleitung
## Hosting
bei mir
## Wartungsvertrag
bei mir
## Webseite
https://actionnetwork.org/ einbinden in webseite einbinden
2 dinge anbieten, mit design und gut integriert.
oder custom html element
### content element html
anbieten, als inhaltselement
rechnung für hosting schicken 2025
wartungsvertrag ende des jahres verrechnen
visuell attraktive möglichkeit um zu visualisieren wie das budget ausgegeben
wird in verschiedenen kategorien, je quartal
https://thomaswaitz.eu/language/de/transparenz/
flexible variante:
3 Content Elemente:
- Tab Element
- Accordion Element
- Pie Chart Element
6 Tage / 6720€
nicht flexible variante:
transparenz element
man kann jahre hinzufügen, je jahr kann man quartale hinzufügen und deren pie chart bearbeiten
3,5 Tage / 3920€
nur pie chart element:
es müsste mit unterseiten gearbeitet werden je jahr und dort ein pie chart je quartal
2 Tage / 2240€
action network
komm einfach ins netzwerk variante: https://fyeg.org/
einzelne aktionen https://fyeg.org/news/paul-watson
design anpassen optional
schätzung machen
einbindung einer kampagne wie:
<link href='https://actionnetwork.org/css/style-embed-v3.css' rel='stylesheet' type='text/css' /><script src='https://actionnetwork.org/widgets/v5/form/mach-mit-beim-kampf-furs-klima-und-gegen-rechts?format=js&source=widget'></script><div id='can-form-area-mach-mit-beim-kampf-furs-klima-und-gegen-rechts' style='width: 100%'><!-- this div is the target for our HTML insertion --></div>
2 Tage / 2240€
optional css styling anpassen:
1 Tag / 1120€
email hosting angebot
für hello@lena-schilling.at

View File

@@ -13,10 +13,40 @@ use TYPO3\CMS\Core\Security\ContentSecurityPolicy\UriValue;
use TYPO3\CMS\Core\Type\Map;
return Map::fromEntries([
// Provide declarations for the backend
Scope::backend(),
// NOTICE: When using `MutationMode::Set` existing declarations will be overridden
// Frontend CSP configuration for Action Network widget
Scope::frontend(),
new MutationCollection(
// Base security settings
new Mutation(
MutationMode::Set,
Directive::DefaultSrc,
SourceKeyword::self,
),
// Allow scripts from Action Network
new Mutation(
MutationMode::Extend,
Directive::ScriptSrc,
SourceKeyword::self,
new UriValue('https://actionnetwork.org'),
),
// Allow styles from Action Network
new Mutation(
MutationMode::Extend,
Directive::StyleSrc,
SourceKeyword::self,
new UriValue('https://actionnetwork.org'),
),
// Allow images from Action Network
new Mutation(
MutationMode::Extend,
Directive::ImgSrc,
SourceKeyword::self,
new UriValue('https://actionnetwork.org'),
),
),
// Backend configuration
Scope::backend(),
new MutationCollection(
// Results in `default-src 'self'`
new Mutation(
@@ -34,15 +64,10 @@ return Map::fromEntries([
SourceScheme::data,
new UriValue('https://*.typo3.org'),
),
// NOTICE: the following two instructions for `Directive::ImgSrc` are identical to the previous instruction,
// `MutationMode::Extend` is a shortcut for `MutationMode::InheritOnce` and `MutationMode::Append`
// new Mutation(MutationMode::InheritOnce, Directive::ImgSrc, SourceScheme::data),
// new Mutation(MutationMode::Append, Directive::ImgSrc, SourceScheme::data, new UriValue('https://*.typo3.org')),
// Extends the ancestor directive ('default-src'),
// thus reuses 'self' and adds additional sources
// Results in `script-src 'self' 'nonce-[random]'`
// ('nonce-proxy' is substituted when compiling the policy)
new Mutation(
MutationMode::Extend,
Directive::ScriptSrc,

View File

@@ -6,7 +6,7 @@
page = PAGE
page {
typeNum = 0
shortcutIcon = EXT:base/Resources/Public/Icons/favicon.ico
shortcutIcon = EXT:base/Resources/Public/Favicons/favicon-96x96.png
10 = PAGEVIEW
10 {
paths {
@@ -47,11 +47,13 @@ page {
includeCSS {
main = EXT:base/Resources/Public/Css/main.css
fancybox = EXT:base/Resources/Public/Vendor/fancybox/fancybox.css
}
includeJSLibs {
navigation = EXT:base/Resources/Public/JavaScript/navigation.js
fadein = EXT:base/Resources/Public/JavaScript/fade-in.js
fancybox = EXT:base/Resources/Public/Vendor/fancybox/fancybox.umd.js
}
includeJSFooter {

View File

@@ -9,4 +9,5 @@ $GLOBALS['TCA']['tt_content']['columns']['imageorient']['config'] = [
['LLL:EXT:base/Resources/Private/Language/locallang_db.xlf:imageorient.25', 25],
['LLL:EXT:base/Resources/Private/Language/locallang_db.xlf:imageorient.26', 26],
],
'default' => 25,
];

View File

@@ -65,8 +65,6 @@
display: inline-flex;
align-items: center;
justify-content: center;
background: var(--bs-primary);
color: var(--bs-yellow);
font-size: 1rem;
padding: 1rem;
text-decoration: none;
@@ -74,10 +72,6 @@
transition: background 0.3s;
}
.frame-type-cloonar_hero .social-icon:hover {
background: var(--bs-primary-light);
}
.frame-type-cloonar_hero .hero-image-wrapper {
margin-top: 1rem;
align-self: flex-end;

View File

@@ -14,13 +14,13 @@
<f:format.html>{data.bodytext}</f:format.html>
</div>
<div class="hero-social-icons">
<a href="https://www.instagram.com/lena.ats/" target="_blank" aria-label="Lena Schillings Instagram" class="social-icon"><i class="ci ci-instagram"></i></a>
<a href="https://www.tiktok.com/@dieschilling" target="_blank" aria-label="Lena Schillings TikTok" class="social-icon"><i class="ci ci-tiktok"></i></a>
<a href="https://www.instagram.com/lena.ats/" target="_blank" aria-label="Lena Schillings Instagram" class="btn social-icon"><i class="ci ci-instagram"></i></a>
<a href="https://www.tiktok.com/@dieschilling" target="_blank" aria-label="Lena Schillings TikTok" class="btn social-icon"><i class="ci ci-tiktok"></i></a>
</div>
<div class="hero-image-wrapper">
<f:if condition="{data.image}">
<f:then>
<picture>
<figure>
<!-- WEBP source -->
<source
type="image/webp"
@@ -50,7 +50,7 @@
alt="Hero Image"
loading="lazy"
class="hero-image" />
</picture>
</figure>
</f:then>
<f:else>
<p>No image available</p>

View File

@@ -1,7 +1,3 @@
.frame-type-cloonar_textimage {
margin: 2rem 0;
}
.textimage-container {
--gap: 2rem;
display: flex;
@@ -45,15 +41,12 @@
flex-direction: column;
}
/* Size classes apply at all viewports */
.textimage-image-wrapper.size-25 .textimage-picture {
}
.textimage-image-wrapper.size-50 .textimage-picture {
}
/* On larger screens, arrange horizontally for image position settings */
@media (min-width: 768px) {
.textimage-container.size-25 {
--gap: 8rem;
}
.textimage-container.image-pos-25 {
flex-direction: row;
}
@@ -63,11 +56,17 @@
}
.textimage-image-wrapper.size-25 {
flex: 0 0 calc(25% - (var(--gap) / 2));
flex: 0 0 calc(40% - (var(--gap) / 2));
max-width: calc(40% - (var(--gap) / 2));
}
.textimage-wrapper.size-25 {
flex: 0 0 calc(40% - (var(--gap) / 2));
max-width: calc(40% - (var(--gap) / 2));
}
.textimage-image-wrapper.size-50 {
flex: 0 0 calc(50% - (var(--gap) / 2));
max-width: calc(50% - (var(--gap) / 2));
}
.textimage-wrapper {

View File

@@ -13,11 +13,11 @@
<f:then><f:variable name="sizeClass" value="size-50" /></f:then>
</f:if>
<div class="textimage-container image-pos-{data.imageorient} fade-in-on-scroll">
<div class="textimage-container image-pos-{data.imageorient} {sizeClass} fade-in-on-scroll">
<div class="textimage-image-wrapper {sizeClass}">
<f:if condition="{data.image}">
<f:then>
<picture class="textimage-picture">
<figure class="textimage-picture">
<!-- WEBP source -->
<source
type="image/webp"
@@ -33,8 +33,8 @@
<source
srcset="
{f:uri.image(image:data.image.0, width:'320c', cropVariant:'default')} 320w,
{f:uri.image(image:data.image.0, width:'768c', cropVariant:'default')} 768w,
{f:uri.image(image:data.image.0, width:'1024c', cropVariant:'default')} 1024w"
{f:uri.image(image:data.image.0, width:'400c', cropVariant:'default')} 768w,
{f:uri.image(image:data.image.0, width:'538c', cropVariant:'default')} 1024w"
sizes="(max-width: 320px) 90vw,
(max-width: 768px) 600px,
600px" />
@@ -43,17 +43,18 @@
image="{data.image.0}"
treatIdAsReference="1"
cropVariant="default"
width="538c"
alt="{data.image.0.alternative}"
class="textimage-image"
/>
</picture>
</figure>
</f:then>
<f:else>
<p>No image available</p>
</f:else>
</f:if>
</div>
<div class="textimage-wrapper">
<div class="textimage-wrapper {sizeClass}">
<f:if condition="{data.header}">
<h2 class="textimage-header">{data.header}</h2>
<h3 class="textimage-subheader">{data.subheader}</h3>

View File

@@ -1,3 +1,4 @@
<f:if condition="{pagination.allPageNumbers -> f:count()} > 1">
<ul class="f3-widget-paginator">
<f:if condition="{pagination.previousPageNumber} && {pagination.previousPageNumber} >= {pagination.firstPageNumber}">
<li class="previous">
@@ -43,3 +44,4 @@
</li>
</f:if>
</ul>
</f:if>

View File

@@ -0,0 +1,105 @@
<f:layout name="General" />
<f:section name="content">
<script>
// Initialize Fancybox for elements with data-fancybox="gallery"
document.addEventListener("DOMContentLoaded", function() {
Fancybox.bind("[data-fancybox='gallery']", {});
});
</script>
<!-- First image if present -->
<f:if condition="{newsItem.media}">
<div class="news-detail__main-image">
<figure>
<picture>
<source
type="image/webp"
srcset="{f:uri.image(image: newsItem.media.0.originalResource, width:'320', fileExtension:'webp')} 320w,
{f:uri.image(image: newsItem.media.0.originalResource, width:'640', fileExtension:'webp')} 640w,
{f:uri.image(image: newsItem.media.0.originalResource, width:'1024', fileExtension:'webp')} 1024w"
sizes="(max-width: 320px) 320px, (max-width: 640px) 640px, 1024px"
/>
<source
type="image/jpeg"
srcset="{f:uri.image(image: newsItem.media.0.originalResource, width:'320')} 320w,
{f:uri.image(image: newsItem.media.0.originalResource, width:'640')} 640w,
{f:uri.image(image: newsItem.media.0.originalResource, width:'1024')} 1024w"
sizes="(max-width: 320px) 320px, (max-width: 640px) 640px, 1024px"
/>
<img
src="{f:uri.image(image: newsItem.media.0.originalResource, width:'1024')}"
alt="{newsItem.media.0.originalResource.alternative}"
title="{newsItem.media.0.originalResource.title}"
loading="lazy"
/>
</picture>
</figure>
</div>
</f:if>
<!-- News title -->
<h1 class="news-detail__title">{newsItem.title}</h1>
<time class="news-detail__time" itemprop="datePublished" datetime="{f:format.date(date:newsItem.datetime, format:'Y-m-d')}">
<f:format.date format="{f:translate(key:'dateFormat')}">{newsItem.datetime}</f:format.date>
</time>
<!-- Teaser text -->
<f:if condition="{newsItem.teaser}">
<div class="news-detail__teaser">
{newsItem.teaser}
</div>
</f:if>
<!-- Bodytext -->
<div class="news-detail__bodytext">
<f:format.html>
{newsItem.bodytext}
</f:format.html>
</div>
<!-- Content elements if present -->
<f:if condition="{newsItem.contentElements}">
<div class="news-detail__content-elements">
<f:cObject typoscriptObjectPath="lib.tx_news.contentElementRendering">{newsItem.contentElementIdList}</f:cObject>
</div>
</f:if>
<!-- Gallery if more than one picture -->
<f:if condition="{f:count(subject: newsItem.media)} > 1">
<div class="news-detail__gallery news-detail__gallery--grid">
<f:for each="{newsItem.media}" as="mediaItem">
<a href="{f:uri.image(image: mediaItem.originalResource)}"
data-fancybox="gallery"
data-caption="{mediaItem.originalResource.title}"
class="news-detail__gallery-link">
<figure class="news-detail__gallery-item">
<picture>
<source
type="image/webp"
srcset="{f:uri.image(image: mediaItem.originalResource, width:'320', fileExtension:'webp')} 320w,
{f:uri.image(image: mediaItem.originalResource, width:'640', fileExtension:'webp')} 640w,
{f:uri.image(image: mediaItem.originalResource, width:'1024', fileExtension:'webp')} 1024w"
sizes="(max-width: 320px) 320px, (max-width: 640px) 640px, 1024px"
/>
<source
type="image/jpeg"
srcset="{f:uri.image(image: mediaItem.originalResource, width:'320')} 320w,
{f:uri.image(image: mediaItem.originalResource, width:'640')} 640w,
{f:uri.image(image: mediaItem.originalResource, width:'1024')} 1024w"
sizes="(max-width: 320px) 320px, (max-width: 640px) 640px, 1024px"
/>
<img
src="{f:uri.image(image: mediaItem.originalResource, width:'1024')}"
alt="{mediaItem.originalResource.alternative}"
title="{mediaItem.originalResource.title}"
loading="lazy"
/>
</picture>
</figure>
</a>
</f:for>
</div>
</f:if>
</f:section>

View File

@@ -25,17 +25,20 @@
</f:section>
<f:section name="content">
<div class="header">
<div class="title">
<h2>{contentObjectData.header}</h2>
</div>
<f:if condition="{settings.listPid}">
<f:then>
<f:if condition="{settings.listPid}">
<f:then>
<div class="header">
<div class="title">
<h2>{contentObjectData.header}</h2>
</div>
<!-- Desktop button -->
<f:link.page title="Alle Artikel" pageUid="{settings.listPid}" class="btn header-btn">Alle Artikel</f:link.page>
</f:then>
</f:if>
</div>
</div>
</f:then>
<f:else>
<h1><span class="tapered">{contentObjectData.header}</span></h1>
</f:else>
</f:if>
<!--TYPO3SEARCH_end-->
<f:if condition="{news}">
<f:then>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="137" height="133"><svg id="SvgjsSvg1005" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 137 133"><defs><style>.cls-1{fill:#f4ad07;}.cls-1,.cls-2{stroke-width:0px;}.cls-2{fill:#233600;}</style></defs><circle class="cls-1" cx="68" cy="66" r="60"></circle><path class="cls-2" d="m98.01,102.96c-.33.17-.65.38-.99.52-.33.13-.68.24-1.03.29-.44.06-2,.22-2.35.3-.17.04-.34.1-.52.12-.96.15-1.92.28-2.88.42-.14.02-2.98.14-3.3.17-.96.08-1.92.18-2.88.22-1.48.06-2.97.08-4.46.1-.44,0-3.01.04-3.84.21-.66.14-1.34.09-2.01.1-1.51.02-10,.11-10.29.08-.73-.06-1.46-.08-2.18-.2,0,0-7.46-.25-7.76-.27-.29-.02-.58-.03-.88-.02h-.01s-.07,0-.11,0c-1.02.04-4.35.03-4.39-.03-.59-.04-1.18-.12-1.76-.26-.55-.13-1.12-.21-1.67-.32-.05-.27-.13-.54-.14-.82-.06-1.75-.19-3.49-.14-5.24.1-3.73-.1-7.47.18-11.2.23-3.05.19-6.11.28-9.17.04-1.41.12-2.81.13-4.22.05-4.66-.24-9.31-.3-13.97-.04-2.77.04-5.54.06-8.3,0-.19.03-.39.02-.58-.1-2.67.24-5.32.24-7.99,0-2.66.07-5.33.11-7.99.01-.87.04-1.74.03-2.61-.04-2.37-.2-4.73-.43-7.08-.05-.48-.05-.97-.09-1.45-.05-.73.02-1.41.33-2.02.19-.37.4-.59.47-.66.31-.31.62-.45.77-.52,1.86-.84,4.8-.72,4.8-.72.4.02,1.08.08,2.44.21.72.07,1.45.18,2.17.22,1.09.06,7.85.87,8.23.94.3.18.75.51,1.08,1.06.23.38.31.82.51,1.65.14.56.25,1.14.3,1.71.07.73.22,3.33.3,3.9.04.29.09.57.12.86.14,1.59.28,3.19.42,4.79.02.24.14,4.96.17,5.49.08,1.6.18,3.2.22,4.8.06,2.47.05,8.87.06,9.6,0,1.41.35,6.44.36,7.55.02,2.51.11,16.64.08,17.12-.06,1.09-.08,2.19-.17,3.28,2.72.03,16.7.02,18.3.01,1.6,0,3.2.07,4.8.11.52.01,1.05.04,1.57.03,1.43-.04,7.11.45,7.3.51.39.13.41.43.46.8.11.72.07,1.41-.07,2.12-.15.79-.16,1.61-.21,2.41-.05.81-.08,1.63-.12,2.44-.04.72-.11,1.45-.13,2.17-.04,1.08-.04,2.17-.07,3.26-.02.98-.78,5.87-1.13,6.05Z"></path></svg><style>@media (prefers-color-scheme: light) { :root { filter: none; } }
@media (prefers-color-scheme: dark) { :root { filter: none; } }
</style></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -5,6 +5,7 @@
// If IntersectionObserver is supported, use it for better performance
if ('IntersectionObserver' in window) {
// Adjusted options to help large elements fade in
var observer = new IntersectionObserver(function(entries, observer) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
@@ -12,7 +13,10 @@
observer.unobserve(entry.target);
}
});
}, { threshold: 0.1 });
}, {
threshold: 0.0,
rootMargin: '0px 0px -10% 0px'
});
fadeInElements.forEach(function(el) {
el.classList.add('fade-in-hidden');
@@ -27,7 +31,7 @@
var checkVisibility = function() {
var windowBottom = window.innerHeight + window.scrollY;
fadeInElements.forEach(function(el) {
if (el.getBoundingClientRect().top + window.scrollY < windowBottom - (el.offsetHeight * 0.1)) {
if ((el.getBoundingClientRect().top + window.scrollY) < windowBottom - (el.offsetHeight * 0.1)) {
el.classList.add('fade-in-visible');
}
});

View File

@@ -1 +0,0 @@
console.log('WE LOVE TYPO3');

View File

@@ -24,11 +24,16 @@ h1, h2 {
font-family: 'Hajime Sans', sans-serif;
color: var(--bs-primary);
font-weight: 400;
line-height: 1;
}
h1 {
text-align: center;
font-size: 4.5rem;
font-size: 3rem;
@media (min-width: $breakpoint-md) {
font-size: 4.5rem;
}
}
h1 span.tapered {
background-size: 100% 15%;

View File

@@ -24,6 +24,7 @@ $xl: 1200px;
--breakpoint-xl: 1200px;
--bs-primary: #233600;
--bs-primary-dark: #1C2B00;
--bs-yellow: #F5AE07;
--bs-primary-light: #4E5E32;
--bs-light-green: #F4F6EC;

View File

@@ -10,7 +10,7 @@
transition: background 0.3s;
&:hover {
background-color: var(--bs-primary-light);
background-color: var(--bs-primary-dark);
color: var(--bs-yellow);
}
}

View File

@@ -23,7 +23,7 @@
}
.container {
padding: .5rem 1rem;
padding: .5rem 0;
}
}

View File

@@ -7,3 +7,14 @@ a {
transform: scale(1.05);
}
}
figure {
border-radius: 1rem;
overflow: hidden;
img {
width: 100%;
height: auto;
display: block;
}
}

View File

@@ -1,3 +1,6 @@
.frame-type-news_pi1 h1 {
margin-bottom: 3rem;
}
.news-list-view {
display: grid;
grid-template-columns: repeat(6, 1fr);
@@ -156,6 +159,7 @@
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 1rem;
}
/* Show header button only on desktop */

View File

@@ -0,0 +1,88 @@
.news-detail__title {
max-width: 900px;
margin: auto;
margin-bottom: 0rem !important;
font-size: 3rem;
text-align: left;
@media (min-width: $breakpoint-md) {
font-size: 4rem;
}
}
.news-detail__time {
display: block;
max-width: 900px;
margin: auto;
margin-bottom: 2rem;
}
.news-detail__main-image {
max-width: 900px;
margin: auto;
margin-bottom: 2rem;
img {
width: 100%;
height: auto;
display: block;
margin: 0 auto;
}
}
.news-detail__teaser {
max-width: 900px;
margin: auto;
margin-bottom: 2rem;
font-weight: 600;
}
.news-detail__bodytext {
max-width: 900px;
margin: auto;
margin-bottom: 2rem;
}
.news-detail__content-elements {
max-width: 900px;
margin: auto;
margin-bottom: 2rem;
.container {
padding: 0;
}
> * {
margin-bottom: 1.5rem;
}
}
.news-detail__gallery {
margin-top: 2rem;
&--grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
.news-detail__gallery-item {
img {
max-width: 100%;
height: auto;
display: block;
}
}
}
}
@media (max-width: 768px) {
.news-detail__gallery--grid {
grid-template-columns: repeat(3, 1fr);
}
}
@media (max-width: 480px) {
.news-detail__gallery--grid {
grid-template-columns: 1fr;
}
}

View File

@@ -7,5 +7,6 @@
@import 'components/navigation';
@import 'components/images';
@import 'components/news';
@import "components/news_detail";
@import 'components/footer';
@import 'components/buttons';

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,21 @@
{
"name": "MyWebSite",
"short_name": "MySite",
"icons": [
{
"src": "/web-app-manifest-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/web-app-manifest-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

3536
test.sql Normal file

File diff suppressed because one or more lines are too long