Browse Source

Initial public commit

master
Lukas Bestle 2 years ago
commit
bbc99c6967
67 changed files with 1517 additions and 0 deletions
  1. 2
    0
      .gitignore
  2. 18
    0
      .gitmodules
  3. 95
    0
      .htaccess
  4. 2
    0
      .postdeploy.sh
  5. 1
    0
      .user.ini
  6. 2
    0
      assets/avatars/.gitignore
  7. 2
    0
      assets/css/.gitignore
  8. 2
    0
      assets/fonts/.gitignore
  9. 2
    0
      assets/img/.gitignore
  10. 2
    0
      assets/js/.gitignore
  11. 4
    0
      assets/readme.md
  12. 14
    0
      content/1-home/home.de.txt
  13. 14
    0
      content/1-home/home.en.txt
  14. 1
    0
      content/1-home/illustration.svg
  15. 1
    0
      content/2-services/conception.svg
  16. 1
    0
      content/2-services/development.svg
  17. 1
    0
      content/2-services/kirby.svg
  18. 1
    0
      content/2-services/server.svg
  19. 49
    0
      content/2-services/services.de.txt
  20. 45
    0
      content/2-services/services.en.txt
  21. 9
    0
      content/3-contact/contact.de.txt
  22. 5
    0
      content/3-contact/contact.en.txt
  23. 16
    0
      content/error/default.de.txt
  24. 16
    0
      content/error/default.en.txt
  25. 45
    0
      content/legal/default.de.txt
  26. 43
    0
      content/legal/default.en.txt
  27. 9
    0
      content/site.de.txt
  28. 9
    0
      content/site.en.txt
  29. 245
    0
      gulpfile.js
  30. 16
    0
      index.php
  31. 1
    0
      kirby
  32. 22
    0
      license.md
  33. 28
    0
      package.json
  34. 298
    0
      pgp.asc
  35. 18
    0
      readme.md
  36. 2
    0
      site/accounts/.gitignore
  37. 11
    0
      site/blueprints/contact.yml
  38. 14
    0
      site/blueprints/default.yml
  39. 14
    0
      site/blueprints/home.yml
  40. 30
    0
      site/blueprints/services.yml
  41. 15
    0
      site/blueprints/site.yml
  42. 2
    0
      site/cache/.gitignore
  43. 25
    0
      site/config/config.codesignd.dev.php
  44. 3
    0
      site/config/config.de.codesignd.dev.php
  45. 80
    0
      site/config/config.php
  46. 21
    0
      site/controllers/contact.php
  47. 23
    0
      site/languages/de.php
  48. 23
    0
      site/languages/en.php
  49. 1
    0
      site/patterns
  50. 1
    0
      site/plugins/baromator
  51. 1
    0
      site/plugins/cachebuster
  52. 1
    0
      site/plugins/patterns
  53. 42
    0
      site/plugins/qdated.php
  54. 1
    0
      site/plugins/uniform
  55. 6
    0
      site/snippets/email-templates/contact.php
  56. 4
    0
      site/snippets/footer.php
  57. 31
    0
      site/snippets/header.php
  58. 7
    0
      site/snippets/nav.php
  59. 52
    0
      site/snippets/templates/contact.php
  60. 3
    0
      site/snippets/templates/default.php
  61. 1
    0
      site/snippets/templates/home.php
  62. 10
    0
      site/snippets/templates/services.php
  63. 19
    0
      site/templates/contact.json.php
  64. 3
    0
      site/templates/contact.php
  65. 17
    0
      site/templates/default.json.php
  66. 13
    0
      site/templates/default.php
  67. 2
    0
      thumbs/.gitignore

+ 2
- 0
.gitignore View File

@@ -0,0 +1,2 @@
1
+.DS_Store
2
+/node_modules

+ 18
- 0
.gitmodules View File

@@ -0,0 +1,18 @@
1
+[submodule "kirby"]
2
+	path = kirby
3
+	url = https://github.com/getkirby/kirby.git
4
+[submodule "site/patterns"]
5
+	path = site/patterns
6
+	url = https://git.codesignd.com/sites/patterns.git
7
+[submodule "site/plugins/cachebuster"]
8
+	path = site/plugins/cachebuster
9
+	url = https://github.com/getkirby-plugins/cachebuster-plugin.git
10
+[submodule "site/plugins/baromator"]
11
+	path = site/plugins/baromator
12
+	url = cdd@git.codesignd.com:corporate-identity/baromator.git
13
+[submodule "site/plugins/patterns"]
14
+	path = site/plugins/patterns
15
+	url = https://github.com/getkirby-plugins/patterns-plugin.git
16
+[submodule "site/plugins/uniform"]
17
+	path = site/plugins/uniform
18
+	url = https://github.com/mzur/kirby-uniform.git

+ 95
- 0
.htaccess View File

@@ -0,0 +1,95 @@
1
+# Rewrite rules
2
+<IfModule mod_rewrite.c>
3
+	# enable awesome urls. i.e.:
4
+	# http://yourdomain.com/about-us/team
5
+	RewriteEngine on
6
+	
7
+	# make sure to set the RewriteBase correctly
8
+	# if you are running the site in a subfolder.
9
+	# Otherwise links or the entire site will break.
10
+	#
11
+	# If your homepage is http://yourdomain.com/mysite
12
+	# Set the RewriteBase to:
13
+	#
14
+	RewriteBase /
15
+	
16
+	# enforce HTTPS
17
+	RewriteCond %{ENV:HTTPS} !=on
18
+	RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
19
+	
20
+	# rewrite /favicon.ico
21
+	RewriteRule ^favicon.ico$ assets/img/favicon.ico [L]
22
+	
23
+	# cache busting
24
+	RewriteCond %{REQUEST_FILENAME} !-f
25
+	RewriteRule ^(assets/.+)\.(\d+)\.(\w+)$ $1.$3 [L]
26
+	
27
+	# block text files in the content folder from being accessed directly
28
+	RewriteRule ^content/(.*)\.(txt|md|mdown)$ index.php [L]
29
+	
30
+	# block all files in the site folder from being accessed directly
31
+	RewriteRule ^site/(.*) index.php [L]
32
+	
33
+	# block all files in the kirby folder from being accessed directly
34
+	RewriteRule ^kirby/(.*) index.php [L]
35
+	
36
+	# make panel links work
37
+	RewriteCond %{REQUEST_FILENAME} !-f
38
+	RewriteCond %{REQUEST_FILENAME} !-d
39
+	RewriteRule ^panel/(.*) panel/index.php [L]
40
+	
41
+	# make site links work
42
+	RewriteCond %{REQUEST_FILENAME} !-f
43
+	RewriteCond %{REQUEST_FILENAME} !-d
44
+	RewriteRule ^(.*) index.php [L]
45
+</IfModule>
46
+
47
+# Mime types
48
+<IfModule mod_mime.c>
49
+	AddType text/css css
50
+	AddType application/javascript js
51
+	
52
+	AddType image/svg+xml svg
53
+	AddType image/jpeg jpg jpeg
54
+	AddType image/png png
55
+	AddType image/x-icon ico
56
+	
57
+	AddType application/vnd.ms-fontobject eot
58
+	AddType application/font-woff woff
59
+	AddType font/woff2 woff2
60
+	
61
+	AddType application/pgp-keys asc
62
+</IfModule>
63
+
64
+# Compression
65
+<IfModule mod_deflate.c>
66
+	AddOutputFilterByType DEFLATE application/atom+xml \
67
+	                              application/javascript \
68
+	                              application/json \
69
+	                              application/rss+xml \
70
+	                              application/xhtml+xml \
71
+	                              application/xml \
72
+	                              image/svg+xml \
73
+	                              image/x-icon \
74
+	                              text/cache-manifest \
75
+	                              text/css \
76
+	                              text/html \
77
+	                              text/plain
78
+</IfModule>
79
+
80
+# Caching
81
+<IfModule mod_expires.c>
82
+	ExpiresActive On
83
+	
84
+	ExpiresByType text/css "modification plus 1 year"
85
+	ExpiresByType application/javascript "modification plus 1 year"
86
+	
87
+	ExpiresByType image/svg+xml "modification plus 1 year"
88
+	ExpiresByType image/jpeg "modification plus 1 year"
89
+	ExpiresByType image/png "modification plus 1 year"
90
+	ExpiresByType image/x-icon "modification plus 1 year"
91
+	
92
+	ExpiresByType application/vnd.ms-fontobject "modification plus 1 year"
93
+	ExpiresByType application/font-woff "modification plus 1 year"
94
+	ExpiresByType font/woff2 "modification plus 1 year"
95
+</IfModule>

+ 2
- 0
.postdeploy.sh View File

@@ -0,0 +1,2 @@
1
+npm install
2
+node_modules/.bin/gulp prod

+ 1
- 0
.user.ini View File

@@ -0,0 +1 @@
1
+zlib.output_compression = On

+ 2
- 0
assets/avatars/.gitignore View File

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 2
- 0
assets/css/.gitignore View File

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 2
- 0
assets/fonts/.gitignore View File

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 2
- 0
assets/img/.gitignore View File

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 2
- 0
assets/js/.gitignore View File

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 4
- 0
assets/readme.md View File

@@ -0,0 +1,4 @@
1
+# Note about the assets directory
2
+
3
+The `assets` directory only contains empty subdirectories.
4
+This is because the site uses [Kirby patterns](https://github.com/getkirby-plugins/patterns-plugin). The files in this directory are generated automatically by gulp.

+ 14
- 0
content/1-home/home.de.txt View File

@@ -0,0 +1,14 @@
1
+Title: Startseite
2
+
3
+----
4
+
5
+Description:
6
+
7
+----
8
+
9
+Text:
10
+
11
+# Willkommen bei codesignd
12
+
13
+Wo sich **Code** und **Design** begegnen.
14
+Auch bei deinen Websites und Webprojekten.

+ 14
- 0
content/1-home/home.en.txt View File

@@ -0,0 +1,14 @@
1
+Title: Home
2
+
3
+----
4
+
5
+Description:
6
+
7
+----
8
+
9
+Text:
10
+
11
+# Welcome at codesignd
12
+
13
+Where **code** and **design** meet.
14
+Even at your websites and web projects.

+ 1
- 0
content/1-home/illustration.svg
File diff suppressed because it is too large
View File


+ 1
- 0
content/2-services/conception.svg
File diff suppressed because it is too large
View File


+ 1
- 0
content/2-services/development.svg
File diff suppressed because it is too large
View File


+ 1
- 0
content/2-services/kirby.svg
File diff suppressed because it is too large
View File


+ 1
- 0
content/2-services/server.svg View File

@@ -0,0 +1 @@
1
+<svg width="700" height="930" viewBox="0 0 700 930" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><g transform="rotate(30 -970.713 878.102)"><path d="M125.5 227.565L91.038 267.22a136.931 136.931 0 0 1-26.351-12.78l9.544-51.543a90.405 90.405 0 0 1-14.304-17.891l-52.412-2.177A136.675 136.675 0 0 1 .94 154.3l46.33-24.697a89.366 89.366 0 0 1 5.09-22.337L21.05 64.532a138.1 138.1 0 0 1 17.922-22.736L87.851 62.85a89.792 89.792 0 0 1 20.666-9.952l14.147-51.86c4.86-.52 9.794-.786 14.79-.786 4.653 0 9.252.231 13.787.682l14.175 51.964a89.792 89.792 0 0 1 20.666 9.952l49.565-21.35a138.117 138.117 0 0 1 17.76 22.318l-31.833 43.447a89.366 89.366 0 0 1 5.089 22.337l47.246 25.186a136.663 136.663 0 0 1-6.5 28l-53.402 2.218a90.405 90.405 0 0 1-14.304 17.891l9.645 52.085a136.896 136.896 0 0 1-26.222 12.503l-34.694-39.92a91.114 91.114 0 0 1-11.465.722c-3.885 0-7.711-.246-11.466-.722zm84.53-89.261c0-40.294-32.711-72.96-73.063-72.96-40.352 0-73.064 32.666-73.064 72.96s32.712 72.959 73.064 72.959c40.352 0 73.063-32.665 73.063-72.96z" fill="#F4B971"/><path stroke="#0BB888" stroke-width="14.613" d="M136.967 99.392l33.746 19.456v38.912l-33.746 19.455-33.747-19.455v-38.912z"/><ellipse stroke="#ED8F1B" stroke-width="30.2" cx="136.967" cy="138.304" rx="80.857" ry="80.741"/></g><g transform="rotate(-22 1292.504 16.483)"><path d="M125.5 227.565L91.038 267.22a136.931 136.931 0 0 1-26.351-12.78l9.544-51.543a90.405 90.405 0 0 1-14.304-17.891l-52.412-2.177A136.675 136.675 0 0 1 .94 154.3l46.33-24.697a89.366 89.366 0 0 1 5.09-22.337L21.05 64.532a138.1 138.1 0 0 1 17.922-22.736L87.851 62.85a89.792 89.792 0 0 1 20.666-9.952l14.147-51.86c4.86-.52 9.794-.786 14.79-.786 4.653 0 9.252.231 13.787.682l14.175 51.964a89.792 89.792 0 0 1 20.666 9.952l49.565-21.35a138.117 138.117 0 0 1 17.76 22.318l-31.833 43.447a89.366 89.366 0 0 1 5.089 22.337l47.246 25.186a136.663 136.663 0 0 1-6.5 28l-53.402 2.218a90.405 90.405 0 0 1-14.304 17.891l9.645 52.085a136.896 136.896 0 0 1-26.222 12.503l-34.694-39.92a91.114 91.114 0 0 1-11.465.722c-3.885 0-7.711-.246-11.466-.722zm84.53-89.261c0-40.294-32.711-72.96-73.063-72.96-40.352 0-73.064 32.666-73.064 72.96s32.712 72.959 73.064 72.959c40.352 0 73.063-32.665 73.063-72.96z" fill="#F4B971"/><path stroke="#0BB888" stroke-width="14.613" d="M136.967 99.392l33.746 19.456v38.912l-33.746 19.455-33.747-19.455v-38.912z"/><ellipse stroke="#ED8F1B" stroke-width="30.2" cx="136.967" cy="138.304" rx="80.857" ry="80.741"/></g><g transform="translate(195.129)"><path d="M237.64 426.779l-33.416 72.936a251.983 251.983 0 0 1-39.44-10.542l7.527-79.863a177.017 177.017 0 0 1-21.414-12.388l-65.364 46.426a255.39 255.39 0 0 1-28.881-28.88l46.426-65.365a177.017 177.017 0 0 1-12.388-21.414l-79.863 7.528A251.983 251.983 0 0 1 .285 295.776l72.936-33.416a179.801 179.801 0 0 1 0-24.72L.285 204.224a251.983 251.983 0 0 1 10.542-39.44l79.863 7.527a177.017 177.017 0 0 1 12.388-21.414L56.652 85.533a255.39 255.39 0 0 1 28.88-28.881l65.365 46.426a177.017 177.017 0 0 1 21.414-12.388l-7.528-79.863A251.983 251.983 0 0 1 204.224.285l33.416 72.936a179.801 179.801 0 0 1 24.72 0L295.776.285a251.983 251.983 0 0 1 39.44 10.542L327.69 90.69a177.017 177.017 0 0 1 21.414 12.388l65.364-46.426a255.39 255.39 0 0 1 28.881 28.88l-46.426 65.365a177.017 177.017 0 0 1 12.388 21.414l79.863-7.528a251.983 251.983 0 0 1 10.542 39.441L426.78 237.64a179.802 179.802 0 0 1 0 24.72l72.936 33.416a251.983 251.983 0 0 1-10.542 39.44l-79.863-7.527a177.017 177.017 0 0 1-12.388 21.414l46.426 65.364a255.39 255.39 0 0 1-28.88 28.881l-65.365-46.426a177.017 177.017 0 0 1-21.414 12.388l7.528 79.863a251.983 251.983 0 0 1-39.441 10.542l-33.416-72.936a179.802 179.802 0 0 1-24.72 0zM393.678 250c0-79.351-64.327-143.678-143.678-143.678S106.322 170.649 106.322 250 170.649 393.678 250 393.678 393.678 329.351 393.678 250z" fill="#F4B971"/><path stroke="#0BB888" stroke-width="28.736" d="M250 173.372l66.362 38.314v76.628L250 326.628l-66.362-38.314v-76.628z"/><circle stroke="#ED8F1B" stroke-width="59.387" cx="250.001" cy="250" r="159.004"/></g><path d="M462.316 221.5h-34.375l-10.312 13.75h55zm-44.687 17.188V249h55v-10.313h-55zm51.562 6.875h-3.437v-3.438h3.437v3.438zm-51.562 6.875v10.312h55v-10.313h-55zm51.562 6.875h-3.437v-3.438h3.437v3.438zm-51.562 6.875V276.5h55v-10.313h-55zm51.562 6.875h-3.437v-3.438h3.437v3.438z" fill="#0BB888"/></g></svg>

+ 49
- 0
content/2-services/services.de.txt View File

@@ -0,0 +1,49 @@
1
+Title: Leistungen
2
+
3
+----
4
+
5
+URL-Key: leistungen
6
+
7
+----
8
+
9
+Description: codesignd bietet Konzeption, Backend-Entwicklung mit Kirby und Beratung und Hilfe beim Web-Hosting.
10
+
11
+----
12
+
13
+Services: 
14
+
15
+- 
16
+  title: 'Konzept & Koordination'
17
+  illustration: conception.svg
18
+  text: |
19
+    Zu jedem erfolgreichen Projekt gehört auch ein gutes Konzept. Direkt mit den ersten Vorstellungen loszulegen bringt oft auf gute Ideen, aber bevor es dann an die Umsetzung des Endprodukts geht, finde ich für die Ideen einen Platz in einem stimmigen Gesamtkonzept. Das hilft nicht nur dabei, später sauberen und konsistenten Code zu schreiben, sondern schafft auch früh Klarheit über die Ziele und Möglichkeiten.
20
+    
21
+    Aber auch nach der Konzeptionsphase kümmere ich mich gerne um die Koordination des Projekts. Sollten besondere Fähigkeiten benötigt werden, arbeite ich im Netzwerk mit anderen Freiberuflern zusammen.
22
+- 
23
+  title: Entwicklung
24
+  illustration: development.svg
25
+  text: |
26
+    Das Konzept steht? Dann geht es an die Umsetzung. Seien es robuster und zuverlässiger Frontend-Code mit HTML und CSS, interaktive Elemente über JavaScript oder komplexe Abläufe mit Datenbankanbindungen oder internen Benutzerbereichen, im Gespräch mit dir finde ich für so manches eine solide Lösung.
27
+    
28
+    Besonders wichtig ist mir, hochwertigen Code zu schreiben. Das bedeutet: Gute Struktur, Code-Kommentare zum besseren Verständnis durch andere Entwickler und (Unit-)Tests für zentralen Code. Denn schlechter Code rächt sich, z. B. bei einer späteren Erweiterung, durch eine vermeidbare Sicherheitslücke oder wenn neue Entwickler ins Team kommen. Guter Code ist wartbar, verständlich und sicher.
29
+- 
30
+  title: Kirby
31
+  illustration: kirby.svg
32
+  text: |
33
+    Der beste Code nutzt jedoch nichts, wenn die Website am Ende nur durch den Entwickler gewartet werden kann. Die Lösung sind Content Management Systeme (CMS). Sie bieten eine benutzerfreundliche Oberfläche, um den Inhalt selbst zu ändern und zu formatieren.
34
+    
35
+    Seit 4 Jahren arbeite ich ausschließlich mit [Kirby](https://getkirby.com), einem sehr flexiblen und dadurch äußerst anpassbaren CMS. Als Mitglied der Entwicklungs- und Support-Teams von Kirby habe ich viel Erfahrung mit der Funktionsweise und kann das System an deine Bedürfnisse und die Anforderungen des Projekts anpassen und Lösungen finden, die zu deinem Workflow passen.
36
+- 
37
+  title: 'Server & Service'
38
+  illustration: server.svg
39
+  text: |
40
+    Auch nach der Umsetzung des Projekts bin ich für dich da, suche gemeinsam mit dir einen passenden Web-Hoster aus und richte die Website dort ein. Je nach Hoster biete ich die Einrichtung von Backup-Strategien, maßgeschneiderten Deployment-Prozessen und Staging-Sites an. Bevor die Website dann online geht, sind natürlich auch Optimierungen wie HTTPS, CDNs, Caching und Komprimierung möglich.
41
+    
42
+    Und wenn du auch nach dem Projekt eine Frage hast oder etwas nicht funktioniert, helfe ich dir gerne weiter.
43
+
44
+----
45
+
46
+Cta: 
47
+
48
+Zusammen ist das meine <span class="color--brand-secondary">KEKS</span>-Strategie.
49
+Klingt lecker? Dann erzähl mir von deinem Projekt, ich berate dich gerne!

+ 45
- 0
content/2-services/services.en.txt View File

@@ -0,0 +1,45 @@
1
+Title: Services
2
+
3
+----
4
+
5
+Description: codesignd offers conception, backend development with Kirby as well as consulting and help with web hosting.
6
+
7
+----
8
+
9
+Services: 
10
+
11
+- 
12
+  title: 'Conception & Coordination'
13
+  illustration: conception.svg
14
+  text: |
15
+    Every successful project needs a good conception. Starting with the first ideas right away can often inspire, but before it's time to implement the final product, I put it all together in a coherent conception. That not only helps writing good and consistent code, it also provides clarity of the goals and options very early on.
16
+    
17
+    After the initial conception phase, I can coordinate the project. If special skills are required, I work together with other freelancers from my network.
18
+- 
19
+  title: Development
20
+  illustration: development.svg
21
+  text: |
22
+    The conception is ready? Then the next step is the implementation. Be it robust and reliable frontend code with HTML and CSS, interactive elements with JavaScript or complex processes with database integrations or internal user areas, together with you I can find a sound solution for many use cases.
23
+    
24
+    Especially important to me is to write high quality code. That means: A good code structure, code comments for a better understanding by other developers and (unit) tests for important code. Bad code comes back to roost, e.g. in future expansions, through an avoidable security issue or when new developers join the team. Good code is maintainable, easy to understand and secure.
25
+- 
26
+  title: Kirby
27
+  illustration: kirby.svg
28
+  text: |
29
+    The best code doesn't help if the site can only be maintained by the developer. The solution are Content Management Systems (CMS). They provide an easy to use interface to change and format the content.
30
+    
31
+    In the last 4 years, I have been exclusively working with [Kirby](https://getkirby.com), a very flexible and thus very adaptable CMS. As a member of the development and support teams of Kirby, I am very experienced with the functionality and can adapt the system to your needs and the project requirements as well as find solutions to fit your workflow.
32
+- 
33
+  title: 'Servers & Service'
34
+  illustration: server.svg
35
+  text: |
36
+    I'm there for you even after the implementation of the project, will help you to find a fitting web hosting provider and set the website up for you. Depending on the provider I offer setting up backup strategies, custom-fit deployment processes and staging sites. Before the website goes live, optimizations like HTTPS, CDNs, caching and compression are possible too.
37
+    
38
+    And if you have any questions after the project is done or if anything doesn't work, I'm here to help.
39
+
40
+----
41
+
42
+Cta: 
43
+
44
+Sounds great?
45
+Then feel free to tell me about your project, I will be happy to help you.

+ 9
- 0
content/3-contact/contact.de.txt View File

@@ -0,0 +1,9 @@
1
+Title: Kontakt
2
+
3
+----
4
+
5
+URL-Key: kontakt
6
+
7
+----
8
+
9
+Description: Erfahre, wie du Lukas Bestle, den Inhaber von codesignd, erreichen kannst.

+ 5
- 0
content/3-contact/contact.en.txt View File

@@ -0,0 +1,5 @@
1
+Title: Contact
2
+
3
+----
4
+
5
+Description: Find out how to contact Lukas Bestle, the owner of codesignd.

+ 16
- 0
content/error/default.de.txt View File

@@ -0,0 +1,16 @@
1
+Title: Fehler
2
+
3
+----
4
+
5
+Description: Die angeforderte Seite konnte nicht gefunden werden.
6
+
7
+----
8
+
9
+Text:
10
+
11
+# Vier-Null-Vier
12
+
13
+Hm, da ist was schiefgelaufen.
14
+Die angeforderte Seite konnte nicht gefunden werden.
15
+
16
+Macht aber nichts, (link: / text: auf der Startseite geht's weiter).

+ 16
- 0
content/error/default.en.txt View File

@@ -0,0 +1,16 @@
1
+Title: Error
2
+
3
+----
4
+
5
+Description: The requested page could not be found.
6
+
7
+----
8
+
9
+Text:
10
+
11
+# Four-oh-four
12
+
13
+Hm, something went wrong here.
14
+The requested page could not be found.
15
+
16
+Never mind, (link: / text: let's continue on the homepage).

+ 45
- 0
content/legal/default.de.txt View File

@@ -0,0 +1,45 @@
1
+Title: Impressum
2
+
3
+----
4
+
5
+URL-Key: impressum
6
+
7
+----
8
+
9
+Description:
10
+
11
+----
12
+
13
+Text:
14
+
15
+# Impressum
16
+
17
+**codesignd, Lukas Bestle**
18
+Seidenstr. 7
19
+72764 Reutlingen
20
+Deutschland
21
+
22
+USt-IdNr.: DE 300 983 590
23
+
24
+<h2 id="contact">Kontakt</h2>
25
+
26
+(qdated:)
27
+
28
+Diese E-Mail-Adresse ist eine Woche lang gültig und verfällt anschließend. E-Mails an diese Adresse erreichen mich persönlich und werden schnellstmöglich beantwortet. Mit der Antwort erhältst du meine dauerhaft gültige E-Mail-Adresse.
29
+Durch dieses Verfahren wird die E-Mail-Adresse vor automatisiertem Spam geschützt. Vielen Dank für dein Verständnis.
30
+
31
+## Datenschutz
32
+
33
+Beim Besuch dieser Website werden folgende Daten gespeichert:
34
+
35
+- Datum und Uhrzeit der Anfrage
36
+- gekürzte IP-Adresse
37
+- aufgerufene URL
38
+- ggf. Referrer (URL einer hierher verlinkenden Website)
39
+- Browser- und Betriebssystemversion
40
+
41
+Die Speicherung erfolgt ausschließlich auf dem Server des Betreibers. Eine Weitergabe der Daten oder Zusammenführung mit weiteren Daten erfolgt nicht. Nach vier Wochen werden die Daten automatisch gelöscht.
42
+
43
+### Kontaktformular
44
+
45
+Bei Nutzung des Kontaktformulars werden deine Angaben per E-Mail an mich übermittelt. Eine Weitergabe der Daten oder Zusammenführung mit weiteren Daten erfolgt nicht.

+ 43
- 0
content/legal/default.en.txt View File

@@ -0,0 +1,43 @@
1
+Title: Imprint
2
+
3
+----
4
+
5
+Description:
6
+
7
+----
8
+
9
+Text:
10
+
11
+# Legal information / imprint
12
+
13
+The following information is required by German law.
14
+
15
+**codesignd, Lukas Bestle**
16
+Seidenstr. 7
17
+72764 Reutlingen
18
+Germany
19
+
20
+USt-IdNr.: DE 300 983 590
21
+
22
+<h2 id="contact">Contact</h2>
23
+
24
+(qdated:)
25
+
26
+This email address is valid for one week, after which it expires. Emails to this address are received by me personally and are responded to as fast as possible. Together with my reply, you will get my permanently valid email address.
27
+This process protects the email address against automated spam. Thank you for your understanding.
28
+
29
+## Privacy
30
+
31
+Visiting this website temporarily stores the following information:
32
+
33
+- date and time of visit
34
+- truncated IP address
35
+- visited URL
36
+- referrer (URL of the site you came from)
37
+- version information of browser and operating system
38
+
39
+The data is stored on the server of the website owner only. No data is circulated or combined with other data. All data is automatically deleted after four weeks.
40
+
41
+### Contact form
42
+
43
+When using the contact form, your information is sent to me via email. No data is circulated or combined with other data.

+ 9
- 0
content/site.de.txt View File

@@ -0,0 +1,9 @@
1
+Title: codesignd
2
+
3
+----
4
+
5
+Description: codesignd ist Lukas Bestle, ein Backend-Web-Entwickler und Mitglied des Kirby-Teams.
6
+
7
+----
8
+
9
+Copyright: © 2015-2016 Lukas Bestle

+ 9
- 0
content/site.en.txt View File

@@ -0,0 +1,9 @@
1
+Title: codesignd
2
+
3
+----
4
+
5
+Description: codesignd is Lukas Bestle, a backend web developer and member of the Kirby team.
6
+
7
+----
8
+
9
+Copyright: © 2015-2016 Lukas Bestle

+ 245
- 0
gulpfile.js View File

@@ -0,0 +1,245 @@
1
+'use strict';
2
+
3
+// Directory name inside the patterns repo
4
+var site = 'codesignd';
5
+
6
+////////////////////////////////////////////////////////////////////////////////
7
+
8
+// Node dependencies
9
+var fs   = require('fs');
10
+var path = require('path');
11
+
12
+// gulp and gulp plugins
13
+var gulp         = require('gulp');
14
+var autoprefixer = require('gulp-autoprefixer');
15
+var cleanCSS     = require('gulp-clean-css');
16
+var concat       = require('gulp-concat');
17
+var header       = require('gulp-header');
18
+var include      = require('gulp-include');
19
+var preservetime = require('gulp-preservetime');
20
+var refresh      = require('gulp-refresh');
21
+var rename       = require('gulp-rename');
22
+var gulpSass     = require('gulp-sass');
23
+var sass         = gulpSass.compiler;
24
+var uglify       = require('gulp-uglify');
25
+
26
+// Other npm modules
27
+var del = require('del');
28
+
29
+// Load package.json of the patterns repo
30
+var packageData = require('./site/patterns/package.json');
31
+
32
+////////////////////////////////////////////////////////////////////////////////
33
+
34
+var helpers = {};
35
+
36
+/**
37
+ * Returns a banner for asset files
38
+ *
39
+ * @param  {string} type File type of the generated file
40
+ * @return {object}
41
+ */
42
+helpers.banner = function(type) {
43
+	var banner = [
44
+		'/*!',
45
+		' * <%= pkg.description %>',
46
+		' * @link <%= pkg.homepage %>',
47
+		' * @copyright <%= pkg.copyright %>',
48
+		' * @license <%= pkg.license' + type + ' || pkg.license %>',
49
+		' */',
50
+		''
51
+	].join('\n');
52
+	
53
+	return header(banner, {pkg: packageData});
54
+};
55
+
56
+/**
57
+ * Builds the CSS of the specified site
58
+ *
59
+ * @param  {string}  site   Site name, defaults to "shared" if not given
60
+ * @param  {boolean} minify Whether to minify using clean-css
61
+ * @return {stream}
62
+ */
63
+helpers.buildCSS = function(site, minify) {
64
+	if(!site)   site   = 'shared';
65
+	if(!minify) minify = false;
66
+	
67
+	var sassOptions = {
68
+		functions: {
69
+			'-cdd-cachebuster($filepath)': function(filepath, done) {
70
+				var pathString = filepath.getValue();
71
+				
72
+				fs.stat(__dirname + pathString, function(err, stats) {
73
+					if(err) throw err;
74
+					
75
+					var mtime = Math.round(Date.parse(stats.mtime) / 1000);
76
+					
77
+					var parsed = path.parse(pathString);
78
+					var filepath = parsed.dir + '/' + parsed.name + '.' + mtime + parsed.ext;
79
+					done(sass.types.String(filepath));
80
+				});
81
+			}
82
+		},
83
+		outputStyle: 'expanded'
84
+	};
85
+	
86
+	// Compile the SCSS file
87
+	var stream = gulp.src('site/patterns/' + site + '/' + site + '.scss')
88
+	                 .pipe(gulpSass(sassOptions).on('error', gulpSass.logError))
89
+	                 .pipe(autoprefixer({browsers: ['> 1%']}))
90
+	                 .pipe(rename('index.css'))
91
+	                 .pipe(helpers.banner('CSS'))
92
+	                 .pipe(gulp.dest('assets/css'));
93
+	
94
+	// Minify CSS if required
95
+	if(minify) {
96
+		stream = stream.pipe(rename('index.min.css'))
97
+		               .pipe(cleanCSS())
98
+		               .pipe(gulp.dest('assets/css'));
99
+	}
100
+	
101
+	// Trigger LiveReload
102
+	return stream.pipe(refresh());
103
+};
104
+
105
+/**
106
+ * Builds the JS of the specified site
107
+ *
108
+ * @param  {string}  site   Site name, defaults to "shared" if not given
109
+ * @param  {boolean} minify Whether to minify using UglifyJS
110
+ * @return {stream}
111
+ */
112
+helpers.buildJS = function(site, minify) {
113
+	if(!site)   site   = 'shared';
114
+	if(!minify) minify = false;
115
+	
116
+	var src = ['site/patterns/shared/**/*.js'];
117
+	if(site !== 'shared') src.push('site/patterns/' + site + '/**/*.js');
118
+	
119
+	// Concat the JS files
120
+	var stream = gulp.src(src)
121
+	                 .pipe(concat('index.js'))
122
+	                 .pipe(include({includePaths: __dirname + '/node_modules'}))
123
+	                 .pipe(helpers.banner('JS'))
124
+	                 .pipe(gulp.dest('assets/js'));
125
+	
126
+	// Minify JS if required
127
+	if(minify) {
128
+		stream = stream.pipe(rename('index.min.js'))
129
+		               .pipe(uglify({preserveComments: 'license'}))
130
+		               .pipe(gulp.dest('assets/js'));
131
+	}
132
+	
133
+	// Trigger LiveReload
134
+	return stream.pipe(refresh());
135
+};
136
+
137
+/**
138
+ * Copies all files matching a specified pattern to the assets dir
139
+ * Removes folder hierarchies so make sure that each file has a unique name!
140
+ *
141
+ * @param  {string} site    Site name, defaults to "shared" if not given
142
+ * @param  {string} pattern Something like "*.{jpg,svg}"
143
+ * @param  {string} dest    Either "fonts" or "img"
144
+ * @return {stream}
145
+ */
146
+helpers.copyFiles = function(site, pattern, dest) {
147
+	if(!site) site = 'shared';
148
+	
149
+	var src = ['site/patterns/shared/**/' + pattern];
150
+	if(site !== 'shared') src.push('site/patterns/' + site + '/**/' + pattern);
151
+	
152
+	return gulp.src(src, {since: gulp.lastRun(dest)})
153
+	           .pipe(rename({dirname: ''})) // Flat hierarchy
154
+	           .pipe(gulp.dest('assets/' + dest))
155
+	           .pipe(preservetime())
156
+	           .pipe(refresh());
157
+};
158
+
159
+////////////////////////////////////////////////////////////////////////////////
160
+
161
+/**
162
+ * Compiles the CSS file of the current site
163
+ */
164
+gulp.task('css', function() {
165
+	return helpers.buildCSS(site);
166
+});
167
+
168
+/**
169
+ * Compiles and minifies the CSS file of the current site
170
+ */
171
+gulp.task('css.min', function() {
172
+	return helpers.buildCSS(site, true);
173
+});
174
+
175
+/**
176
+ * Combines the JS files of the current site
177
+ */
178
+gulp.task('js', function() {
179
+	return helpers.buildJS(site);
180
+});
181
+
182
+/**
183
+ * Combines and minifies the JS files of the current site
184
+ */
185
+gulp.task('js.min', function() {
186
+	return helpers.buildJS(site, true);
187
+});
188
+
189
+/**
190
+ * Copies all webfonts to assets/fonts
191
+ */
192
+gulp.task('fonts', function() {
193
+	return helpers.copyFiles(site, '*.{woff,woff2,eot}', 'fonts');
194
+});
195
+
196
+/**
197
+ * Copies all images to assets/img
198
+ */
199
+gulp.task('img', function() {
200
+	return helpers.copyFiles(site, '*.{jpg,png,svg,ico}', 'img');
201
+});
202
+
203
+/**
204
+ * Copies prism.js components to assets/js/prism
205
+ */
206
+gulp.task('prismjs', function() {
207
+	return gulp.src('node_modules/prismjs/components/*')
208
+	           .pipe(gulp.dest('assets/js/prism'));
209
+});
210
+
211
+/**
212
+ * Builds everything except the minified files for local development
213
+ */
214
+gulp.task('default', gulp.series(gulp.parallel('fonts', 'img'), gulp.parallel('css', 'js', 'prismjs')));
215
+
216
+/**
217
+ * Watches for changes
218
+ */
219
+function watchwait() {
220
+	refresh.listen();
221
+	
222
+	gulp.watch('site/patterns/**/*.scss', gulp.series('css'));
223
+	gulp.watch('site/patterns/**/*.js', gulp.series('js'));
224
+	gulp.watch('site/patterns/**/*.{woff,woff2,eot}', gulp.series('fonts'));
225
+	gulp.watch('site/patterns/**/*.{jpg,png,svg,ico}', gulp.series('img'));
226
+	
227
+	gulp.watch(['content/**/*.txt', 'site/**/*.{php,yml}']).on('change', refresh.changed);
228
+}
229
+gulp.task('watch', gulp.series('default', watchwait));
230
+
231
+/**
232
+ * Cleans built files
233
+ */
234
+gulp.task('clean', function() {
235
+	return del('assets/*/*');
236
+});
237
+
238
+/**
239
+ * Builds everything for production
240
+ * WARNING: Deletes some source files, only run this after committing your files
241
+ */
242
+function prodclean() {
243
+	return del(['node_modules', 'gulpfile.js', 'site/patterns/*/', '!site/patterns/{shared,' + site + '}']);
244
+}
245
+gulp.task('prod', gulp.series('clean', gulp.parallel('fonts', 'img'), gulp.parallel('css.min', 'js.min', 'prismjs'), prodclean));

+ 16
- 0
index.php View File

@@ -0,0 +1,16 @@
1
+<?php
2
+
3
+define('DS', DIRECTORY_SEPARATOR);
4
+
5
+// load kirby
6
+require(__DIR__ . DS . 'kirby' . DS . 'bootstrap.php');
7
+
8
+// check for a custom site.php
9
+if(file_exists(__DIR__ . DS . 'site.php')) {
10
+  require(__DIR__ . DS . 'site.php');
11
+} else {
12
+  $kirby = kirby();
13
+}
14
+
15
+// render
16
+echo $kirby->launch();

+ 1
- 0
kirby

@@ -0,0 +1 @@
1
+Subproject commit fae381e5716a50fdc36fc8f5fa9ef9fe30e97384

+ 22
- 0
license.md View File

@@ -0,0 +1,22 @@
1
+# License of the codesignd website
2
+
3
+## Kirby
4
+
5
+This site is based on [Kirby CMS](https://getkirby.com). Kirby is not free. You can find Kirby's license on the [Kirby website](https://getkirby.com/license).
6
+
7
+## Content
8
+
9
+Copyright (c) 2016 Lukas Bestle
10
+
11
+You may not use, copy, modify, merge, publish, distribute, sublicense and/or sell copies of the content from this project without explicit permission by Lukas Bestle.
12
+
13
+## All other code in this repository
14
+
15
+**The MIT License (MIT)**
16
+Copyright (c) 2016 Lukas Bestle
17
+
18
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
19
+
20
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
21
+
22
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 28
- 0
package.json View File

@@ -0,0 +1,28 @@
1
+{
2
+	"name": "codesignd-site",
3
+	"description": "codesignd website",
4
+	"homepage": "https://git.codesignd.com/sites/codesignd",
5
+	"license": "SEE LICENSE IN license.md",
6
+	"private": true,
7
+	
8
+	"dependencies": {
9
+		"element-closest": "2.0.1",
10
+		"flexismooth": "1.0.0",
11
+		"prismjs": "1.5.1",
12
+		"whatwg-fetch": "1.0.0"
13
+	},
14
+	"devDependencies": {
15
+		"del": "^2.2.1",
16
+		"gulp": "gulpjs/gulp.git#4.0",
17
+		"gulp-autoprefixer": "^3.1.0",
18
+		"gulp-clean-css": "^2.0.12",
19
+		"gulp-concat": "^2.6.0",
20
+		"gulp-header": "^1.8.7",
21
+		"gulp-include": "^2.3.1",
22
+		"gulp-preservetime": "^1.0.0",
23
+		"gulp-refresh": "^1.1.0",
24
+		"gulp-rename": "^1.2.2",
25
+		"gulp-sass": "^2.3.2",
26
+		"gulp-uglify": "^1.5.3"
27
+	}
28
+}

+ 298
- 0
pgp.asc View File

@@ -0,0 +1,298 @@
1
+-----BEGIN PGP PUBLIC KEY BLOCK-----
2
+
3
+mQINBFeR5MgBEADLvXHc5B0teR4KhDbLov3l/ALIrvO9biTgimi7EVOR9Ch/NLji
4
+0hDCqEUgKl5x3jh+kO3G6H/o3QiUsLmTMNh5cewzqb0SU3bQgvdMlcXPv7brbx04
5
+OvuvW08wn2UqvSj8VC4+3ouhrb/IootPHtnzHr33kaM9vMYVTdi/y47gk7vUqGvx
6
+ILcZS+r3d3VCHF59xC9t5hs75lw2zsY/74Le8fgop/qoiAglwIl4UiFcks1xBidz
7
+jcQEEpXt6xpH4+aUhHwzphbnZPST10DI41NVY3l6y60Ly0Tfr3J405e+YLiiPDDN
8
+xdWVeaf2Plgs65ViRA0Gohb1UdFnfisopF+yytJhySqGsJacTfpSy1uLBBvuJ7Qt
9
+O73u1vxggaihzmbqiVJrBmdwkxt4AmhXjSlOj35aYCl39HPAxRHd5Jd5eOLwB7ce
10
+HnXpzwQNBEqbcyACrYEpZLkMuNP7iCDhPz7d6hCIfFWE45YKgFp4IVj1saiSvsJ7
11
+fWogZYavZ5jSvAZUk2Qq9KAMstGcMYFlf8kcgkaiQ4WRR0fGR6yLy15k4Ll06eY3
12
+gHkKCkAAZlC+da7IFvOA2UtrAnQ0cGJGCVyPsJd1lpIleZDBJMikifRVEQfX6wHG
13
+gmo+dAeK8NKGZIEJlU1RuNRMVO4BvdJZjtWAV9kOHy//3kJqDPd3l57GuwARAQAB
14
+tCNMdWthcyBCZXN0bGUgPG1haWxAbHVrYXNiZXN0bGUuY29tPokCQAQTAQoAKgIb
15
+AwUJB5NOgAULCQgHAwUVCgkICwUWAwIBAAIeAQIXgAUCV5HlBgIZAQAKCRAuKt0y
16
+/lBhwR6TEACbJf4sWsLve3DNYjxKR08FLzfesVmUzxPYwAk6aEsiApik8KMCJVw6
17
+3aa0PyJFEamI2Ne8YW5ELZ2Ts+IvqMJkdNKHnRaCENbHrmeYrxhlLCqueLekEGrZ
18
+Mn9tYsb8NvKKRyY4faMiKZecvUC4+IYrRy5RG7OSinjVCpbSxQRhii2TyZdHbhoP
19
+Ojj2IM2qun0UIrYRn8eav2/ZtzUUrWouH0JPdkOoNS8QqOx8nLHEj7K45EnLQN0e
20
+7zgN0LzlxI014t66fM3Wcl1BVq4is1l0phLrpgpv0xKslAajbmqYVazpg29+ByA0
21
+CSev5OXF43BTrKdJc5Ph0//QpJU0PcD658uUocTUl+K+m5D0UO55InX30/VdBLjH
22
+0UERlz0g8IkvEgThnrmTD76mAsvqdYWlAF/AQgJmtJDj9x8dUVSMyQzV/IL61qSY
23
+APB8gIenTY2GRuqn9cPYljb0u429cfRZKm/FZ2m2b6e9Gbe9EmDMcL2d9LesmEBu
24
+xFqhVlRI96SQIfI5zpxtkZEHgp8xyHK7XTBTxJuGnPjtj/fGXYPQRmvU4+xHR/RZ
25
+wVFlbmFlCduqvurYWlLdfEfj5GOYyRro0lbTem5ZSpoAuC/y6lN3LbUFUgt88xQr
26
+MC0W4dfbxiu5BFfufKkRIeXmnG/uspH6NRlsnL07WS8OKwrgzfvvT4kCHAQTAQoA
27
+BgUCV5HnPQAKCRArl7m2HH6nt31OD/9HyWbvurz4MvVgzYPVjUCLorwlvihnY/Ut
28
+PcoQXC5iS3V8j1mqMI8YyHpRgIZO1y0kgA3UEVQOGJ7C/SdG/HmW2wGhXSffxozk
29
+xQFRFZZDMMP5G+14UbhEeTBiLdV5Xqw3DT26fezJZzWonplQyzHKGeOg9DOEpKq/
30
+6RXnp+TSpVpXnKt7t/byLX9jIFQiZsqnyE7d4DLU1XClmUeHAzWnMiNX7OaqmVr5
31
+Hb7o8Q/jj7K9SE0p9Q/VLkBjSZDOVSDjX1sClTWZsYVcCFWJOPiaq9PEg4+JrlGr
32
+Lz0ZNHoJTP8rbenIosNd0i+KBSM2tzTHqsf3987z0VZn6wxcG7Mu/LKclNUjiqpV
33
+ATu6Ej/bCE+Az+MqVUKiDaW2coeW3Y5LLyg/byw2zIRwNF+v7UAebvzkTH4anwph
34
+EkbpcPEtbkIlHzJsFfzmKoEYwhO2/5mHpvmbPkiPKz8oBaX0HEzAtms9GbqFiA87
35
+9z9QW1SOE/fkfAvZ55xv5wGMsCLq9YxlU3eLnGR8Md0NbA6gAv5JowZ6cKwmW66O
36
+dtgCs3Y73Lcqx0ncU1GDjdtwfzuqTew2b5Jj4rGYTOVQBT5tfHvPBw0NURxriW74
37
+P7rGg8esQfzQYighXS1S7ROCOxdyyHR/z/Ng0tTtinjWxagZihd3HuIh4lt5VPXi
38
+nTpAJwtW1bQiTHVrYXMgQmVzdGxlIDxtYWlsQGx1a2FzYmVzdGxlLmRlPokCPQQT
39
+AQoAJwUCV5HlAQIbAwUJB5NOgAULCQgHAwUVCgkICwUWAwIBAAIeAQIXgAAKCRAu
40
+Kt0y/lBhwbdkD/sFTE0xEsiDEeIBIRt66uFPVxvNAvLLN+68jNEhoqpmAnttlxXd
41
+7Jp+fPvDGLB4UY8NqX+Xc12yM53Gyf17+SIVP2ViUFpyDk7rWp+ZT9jxC++w35Er
42
+E2Fe+gzrBhRE4r2+Yl9i4Bkhm5IDc2V5uZbf8QEm6SOEfHKDnb5mEoIVseJ+mNTv
43
+ch59g5dfwbAxlC1rfAvoTYaRcAYsALXenl2H0RUyO9MBxD5EqeWogxE3gG8XCJQO
44
+OekITugw+bpPL8AwcS4CZMeavKjN7/9KSQ20nuoSjFUDP1Ki3B3PKcRh+Dm7ufz5
45
+4sGt/9pkBnDyohcNjObv2nZfjmjFcLs0yD2waUPfXB/pfrNHkL09XD2QgDx3g/+5
46
+ZIdsVFwSxIZeRhUNfnJHz1oTc+lex/vnzlsq4Hl8dnshLLUTxHJA40a88soFu1+2
47
+cjCVm2a3Mrl3v0uohPALzgkIEHPO5cZ97EZdIMIvS93ySN04x+KqxzJOj/4ENZ3l
48
+QL9asWxCN/t1ZvXYv4E7cAZoZba5dDZ9/N905zWe3nDEOzidz+hKy2Bo7jg5B0P5
49
+c8NlLWFJKSg8qmPGWXt7BL75GwC++UlM6KzZy3TXWMH2rRpsSGmNxfmq12aIPr8f
50
+nmvr0gM/C7tC2B9iV4bot1Xy8D81H60udWeikIOwmsOVSzN5rOlyw/yRTYkCHAQT
51
+AQoABgUCV5HnMQAKCRArl7m2HH6nt2+YEACCe8VtHIK5yvyeUGYdq7/J+Q9PBavC
52
+/5mxqfL0Vip+jzA376Mk/lhxuielUX+RuNc8LJ/CP8MwYAq3wK601r77AqCOpXzu
53
+RAWxcP6uppO9EKBDawnf8o49O/Towtibr07nBmB/uuLb6XWbxOmBNNN8GH5GLwc4
54
+LgLAXgG4J8BbUOq4bFKkGdEnpQpKgp81W5bfY1dQ1kf4CUiHJ0Qj1NT6Fdpg3rZ2
55
+vaGxQajO/ycIc+BzAL4MhhEsQq9ZhoagaAyT0/T8znn2s9I+ZR6soF0H+nLQXVZG
56
+SRxEqxWNW2LUhudM+OTCJ0Z4sGZ2DYykB7jclRiXt2PfxaV+q0uioZsc1lw+srlQ
57
+nVB8aSkR6ilhkdQtPzGpIWfxexuk2HVinmFEsuawC3VDIHq7uro+Id+azkjzl99m
58
+dxXDR5eY+3kEhzIyel5/FOEkni9mrAR8hyXnQn1Dd8nPj1D18EFcCcVQKICdQRxF
59
+GlNrMjWd3M3DWOQmtpaJ7DyUD9MrXW3LZFuiqsrOml+bKVBwRrcNOKnrpazB8OTn
60
+HD+/VxZOPIsO2lHi5u9Gh+6cHFniOF5LjaXAUBQPwRYngikWCre4EFKEmi2p7/To
61
+mK5rBIrbWeJT4g8p4SS7SOksIHQGuDxOInTpqll42BB8IegLKu6q+4dqiCKcY5pA
62
+DYxE8DvPgJLuwLQsTHVrYXMgQmVzdGxlIChCdXNpbmVzcykgPGx1a2FzQGNvZGVz
63
+aWduZC5kZT6JAj0EEwEKACcFAleR5p0CGwMFCQeTToAFCwkIBwMFFQoJCAsFFgMC
64
+AQACHgECF4AACgkQLirdMv5QYcGf8hAAnl7PvPoH0T/0isHABHqa2PMnlhLqvlE4
65
+QNLGnuLk0g9kfT2Y1HfnHDgZGIOozXBrHYtnHovpJRMQCF99m3QmASNBWvrgH5pT
66
+QNbUnpu6xfbnpKuL1oLoElK9k98tAor7oMbXoP1vmZORlirwZjjf6qrqDA4PTSeL
67
+sM9NAIJAKedHhP8E1FilmT8Sxp1zUElXjFaIACSHBUgFSTMNyzcE8Oy2IHa4IozL
68
+KuQKpBs1fMVkGULzCjlaPFj7zv7wEWtSl4sZgCcxNh1UNl0UwyBtHd6LlKA/DRDz
69
+hdVosSNhivJbsS5ecFKKBjNIDswCWYmDi64YQ+eEF8PZkSCTn51sw/TbDVzlzsSx
70
+W73BGZUTa9qIfaKrxkIMWDL3UjkMpejwcWogxp3uF/bucDcDwa0i+lUNJeDQhKSB
71
+nG74N/7MRdnjKaPtf/Gyz0OCAarVofdO4Dn8W9GPvCaZ2x2pNQEpeHK3f4JhIL3W
72
+gejROe0e8uE55986fLRvO/SoQqMjLyF+rmd+BS5aU4TchIu8oOD32K4H1BddYouP
73
+G3gsNajcvQvgAJ9Hvg1DFlCXjzJH82gy5OsQvR3CG+pc+YyWlEg7wENIgRSyr8/x
74
+BrevLmdF3ikr/+Ko2Xuk5lM0JeED0RaK2tdD70O0FaNxpArEkrIgBkYAWArY0Gj2
75
+88Ru31rNyZCJAhwEEwEKAAYFAleR50sACgkQK5e5thx+p7cUTQ//ZPjh0b4aqVmq
76
+DxLUPtX7k4wK7LqSs89EeimTxoPr9LMpV1LLgBncVgvhlhqiOsTEc5Q45PkGy6rX
77
+YnzGJ91gyNfgiT45EYs4z0K8HO7ZZIU2ZrgNJ7ujHJZrH3uX9HqwYCqrDxZfKJPC
78
+Jik3KZhclYB2wUK4G1yx0drRvmF0RC2R+pgbOqI7G6obxNl6aShceRVAbWHbsqx0
79
+sHsyCv87XFh9gtVDnF2CBiSg4t4s9kpWInZRdX89FBC33GAWyKO19x6BBDjeDQdJ
80
+hQFh4GIVw97HREF8SU4h8zWcmJLPugQyYfoST6N48mg3zcqcr8Ptpb4D3Kjca8G/
81
+j4ivmFG/ldBwYuLm/2ZSotnD+StuWFn6B3s8aWFXus7X0V9KRF1Nls7vRSkws79S
82
+EgZBl/ncJ3qVHrDyHzxkeurmLW7BvGgrcmDAliJTfsFGaiFBgFM4D9ySXFW7Teml
83
+fJiondu5g/0TLlnKknPqzpJz1bW0M9xlxzE4jJ2Deh/TylBYChTe53nLIsV3ryzl
84
+IQEa6RtHXl1ePQ8YSWRVwdkhERpUySad72bpVjmwSx223HdYtrGn/hC7rw1u5gam
85
+z3uri7SeYSqHNswc24nhCoU0YTHSLr3N/IJ5wMEVFrjEYPSapzILJAq7iThg2v76
86
+tPFI4zRlt2ujg9wCDWM8RyLTHDGw9VS0LUx1a2FzIEJlc3RsZSAoQnVzaW5lc3Mp
87
+IDxsdWthc0Bjb2Rlc2lnbmQuY29tPokCPQQTAQoAJwUCV5HmrwIbAwUJB5NOgAUL
88
+CQgHAwUVCgkICwUWAwIBAAIeAQIXgAAKCRAuKt0y/lBhwTEqEAC09i3Bpx9dHj9O
89
+qeG7VC/6iX7Is5f6agCJ+u2kAzXP2VncL1LbdaZmET1u3mXyfRzM1A8ukFZ9Qr+Y
90
+PoOCe6BzD1osq3TVKTEaHwKykqK4xxvZWicjEaZH4byGA4CEuChgs5KnuqHIH+P1
91
+rwAuou80/co4gn5sov3JKJWMNmoi6j8Q32Y4LAB6s4NCaXIKBwDWn054F/VKwTpV
92
+Hk+GCmIWZIYvrJuIX+JFQDeeXFAEryKtq+R0xdiSmBj2DrtR5Rpx3Fj1ATXm9BKm
93
+mDkIa5wYTgsHHrDdrAddbvbs8UIPo/W42M3ck0AREPPWXMG0roIjxuPzoUrr6v6Y
94
+VZ7CLDgrZ5L4BlGpAhBEu2d4y3RFxqif7Ncj5SW5oAyo7OB/fu0yVKo+J9Cioe+a
95
+AfW61BwU+mKULMh7FWUYPr6WXOmhZIeSqz3Zd4Z4MDX41a9a/Ffo8fPiD3I8EZ/C
96
+V8NjsSUyiWRw6hY/CNI5mTZrA0RjSV66iku56eDQW4Sxzv5jYj7SWJmINp/2lc+b
97
+nmvd/WDv+9Q99jihUf8n7uY/SxDXwBFDEsNXxausB4ZP5pPpCPJNTLf60pFM8pfB
98
+zTEdqa4VeD+RZ7vvBg+B/O3rq/OlDzb3VxqxKSp9UlGxyReypJwosvIBmQ8ZbIlS
99
+3UPrLrHeF6g7uqOtWj0qfo4KdF8a0YkCHAQTAQoABgUCV5HnVQAKCRArl7m2HH6n
100
+t0oaEACYLrcqROibOgrpJBIv+O01Z8roTpeD9uCb+twx2af2+iyi7nc6pDPT6Mjv
101
+Aodcy28lAc6Iz9TtPbD255bWg0ThLRDtsFRETVz6xUCCtYhuJHkSPyMsYig2dITv
102
+O3c5WuOBFzWsJUK21wwrrr4n8gDKF2iohkBPtJ3iqZHbC3UueCd2nk1XXowOz8xI
103
+ThSILtf6TLsKz4kUqw+YngIpUYV5DgMiNBAdzN33DqFDmReeUM4+UUHZJ/w0IhGW
104
+Mq1JUUtUqd/BqwBU7xZvKDei6YwVgBkGui3eoCenUchheQvWinbiOHSbCZckBwrX
105
+Haz7JYf7ERDcWd40VE21mh+83PY5QRuJsmUOmJpPLrVRevH+GSL05nXgfqRXh5LV
106
+B+hNJG8Cl9iXMsGJl3aDvZMT8NwKcRyJ1u91jNVVfw8bwQatt/iDLgSZ+eFAwHeN
107
+OHxFZv7bFh0pJXxhqgXq2JIgeNrZVt6S5M1+nB75eYIuFpVOjDvoxkt5vhJOGnPR
108
+duA3OxokkoWfF5u5Kewvojoe0ROEwgaRMvebqCngb26ojo9NwJobtrx1Md9SZA7B
109
+QA37A0xsWTxn9+Cych+JaxwiSPKuUWEIKJ0walmWo4rjYse0bJgoW8ElRcYGjdqr
110
+Ixy417C6U8LhGUcjl2d+cP/+oNAsF0SahcNk8P0efCDIAId+ObQpTHVrYXMgQmVz
111
+dGxlIChLaXJieSkgPGx1a2FzQGdldGtpcmJ5LmNvbT6JAj0EEwEKACcFAleR6rwC
112
+GwMFCQeTToAFCwkIBwMFFQoJCAsFFgMCAQACHgECF4AACgkQLirdMv5QYcEqgg/+
113
+K24/3FjHNWdoE3HyjhvXuJ9+gNprJ4Xsw3SSvT9wQUYXuvoJKo1WWm9dj+5zoqWN
114
+Vee7X4vGxeUhNr6IGEvyF7QW7m4sFg0batwR+ySLtU6zEFaNw3o1vp32y5YUEiHK
115
+RwaEDjuNljrxGfxM3wF3ZYfkcC4TuCv5VB3bdcKxNvDLY89cmjywuUb4acGv9zdk
116
+LqiuucrPunBmOQBXbKBLhJCppr1GeEGoobtqTxXgH4YaVCzoyrf8VsLXmZPVRAVm
117
++EuI48JwWg4lViJOkAyBUVm4yGtiMiq9oIbX8E3v8P9uGqbUANKwU9p9wezXCZou
118
+PCceay+LwTwveAKYhHvcOo3lxJHjeV4MaI5BXMO+NxoF5RCi6yV0DnO0aN9xGXXX
119
+0hxT3tvSg2hK+fMdKWHc8EHWNWLZyV0LM4xxsjqqB1BQIZSOJkPlmXFQWrrguWtZ
120
+gw6EiHRFOsKoVTAzfy1ad2AGX7KFaop4jPC4GIUlJF52gyF0K+VqJ/FShGhB+Z04
121
+xt4JxmC+F5/JJurTkhUQpb5GFnKUz6KnldSbmg+iL6cNB2qnIWvyxbZpLmHibDsg
122
+fcvzO1vll6OyhLV1iXukh1962NojyNoEX9cKiS7hZfIGcCwMd1wlhSBX++Dq3pRz
123
+7TB2bXGUG/v++z1ybiwsy/J3D7ieKmSC225LFOfa/MiJAhwEEwEKAAYFAleR6skA
124
+CgkQK5e5thx+p7cMSxAAmiJiqbvyhN/3pLA9lqFuhzJEhSPheo1fqu6baGg5He+V
125
+gob8TVbT5px66B8SoZtlpMZD664r8FL+VIQZK6CNAJbcWIq04dTwhaHm47FJVC9t
126
+/tdzi4Y7JcHxv+iyyOzPbJaBuBUaPWR6Q3DB7afIM3ubmibXoYFKzXdgWrpeanpB
127
+r6BCwF6FlCMzjbx7wRMaGzDlHPcMsHl1KqS2/UZf2Ffvipnm7959t4iAGXG8D3YN
128
+gb706x5stV+IDF2pvNWIet3tIuewWxJo5c5z4qlmnwFq+JrwfPkkb3CX1xvli9P6
129
+F/qFXSY1dhhX2qGwTwvZV69XVWJj6dNgrtIaBEQlUMnU24CGzVybkGCzU8RzMFVw
130
+EMDOUBfgc+c782FAoJLlHHp5itVV3oEx/FCg4j7kFS21m46YRPn3VTRjQkn/65Ss
131
+kMb/oPN7GoF9yddAn2CUS3c1NNKnDWF622DIPuFv4goewlA4Y+/h9yWxqF4l+dEO
132
+rDalm6mR1YDwlrFWv+cl0z5GgDeNK7GyaCLkEXqispabwo5d/UzhOJTwaW6XaPl/
133
+vL7hyrOdLFerbj9knx53CfxLyqKfk/HfU34ch2VDdJ0nGkZOMsm3CcqBf76Kwyt6
134
+QSkVDlRndZbHj3LbEbPNHOCju3zPT2kAnIrbf1j5TJ4c2fALPskRScxDWnMp8e7R
135
+1PHU7wEQAAEBAAAAAAAAAAAAAAAA/9j/4AAQSkZJRgABAQACWAJYAAD/2wCEAAIC
136
+AgICAgMCAgMFAwMDBQYFBQUFBggGBgYGBggKCAgICAgICgoKCgoKCgoMDAwMDAwO
137
+Dg4ODg8PDw8PDw8PDw8BAgICBAQEBwQEBxALCQsQEBAQEBAQEBAQEBAQEBAQEBAQ
138
+EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/CABEIAJAAeAMBIgACEQED
139
+EQH/xAAdAAABBQEBAQEAAAAAAAAAAAAGBAUHCAkDAAIB/9oACAEBAAAAANpVP7xj
140
+LPyrIyc2e0qKu/78sqjnWDGGIFBMak9ntWi3t5j6BGT2e4v2MZpe/wBvrpGp+mL6
141
+pLiUxCLqeEY+RW51ll37YWjLXGKbp5JYYewiPLg6Q3v7Dwxnnkho7Nxv04hOefTR
142
+bSbqPN+YNHb5HR+vUtES1YlrYjqOds76VXDPVbgpXCVXFWyPYYCc+m9ugx+s5Esa
143
+TQlDtcJBHKV01tfBVTyq4FbQOx5mLXPtowxnnHa0PHGiUBdxIg+EtOpPZFNLi2LH
144
+kIk4bLErStvD2Yl6GMqmpI3FXyyrXN85vXmJd+iFMRlqFC4ocLlH3Tw0t8z0aFIC
145
+h8zt+83/AF3XwYqEq1xuMSIwE3nK8yzt9AGS1Jpdt+PSOc/AkIRVqXMHSjWJhNMF
146
+xQ0HaZUNVmN1gtgpC//EABsBAAIDAQEBAAAAAAAAAAAAAAQFAQMGAgAH/9oACAEC
147
+EAAAAJrXhebFTCyAAetZ3ynTTVZo2Hs0n5m3UsFawNfcQXqqcoJZVLTUSNiR4day
148
+ZFx4cap5Oh+YDrjGDHQf/8QAHAEAAgMBAQEBAAAAAAAAAAAABQYDBAcCAAEI/9oA
149
+CAEDEAAAAO5SNvsNQ9KbgvX+U+K2wNFrsCpC7Ds3XYAudDW9lrsQyn9y8nqc0ko4
150
+TmPd7ViHxSznjuPU2+rl6x4ahfpcxUyJYaf/xAAoEAABBAIBAwQCAwEAAAAAAAAD
151
+AQIEBQAGEgcRExAUITEVIhcgI1L/2gAIAQEAAQgBbndcV2csvtsptdEr7HYevpUc
152
+RaWy6pbReMQqx+pWyvkNyPv+wGKji611itYspka+q7SHbRBzYSf0Z9eirnUneF1O
153
+ockDYru0NCWROJxc9xFDLbE/QYkFO7FwMVxGcVDIIztHPpG0SKOVyi1NnHtYjJcd
154
+P639sOmriS3bfMU3M8xt09JDxrPlssjIRoo88XHvAlKMmRe6IiiIXsv+keW8Z2lF
155
+002M0O3/ABshq4n9N+2Dgx8smyblMs5hVAHlZw+eeBozeCQhplSVBkjkrpnY7zPh
156
+sb2b797fhlbO86uzXjKZoZGaddtvKdkjE9bIpQwJBQ9RXyTafIJiNeR3ZNfprfz8
157
+4zdAkzmt8j+nMr8e+IX+NLZHqgmajsNcPsybHuoyKsllgNhc1a0c04Rk6RynNk2E
158
+VU9G/OXvl/FSEFv1+NNHLOzXoCTJrRip64ccTUSEBFTBRk+lWtDy7o6rE5MsqGO8
159
+Sou6aakYnvI2lxk/aPJ6WHVL1WjT0Z9ZYt5QipmyVKyqCbVk1Ct9pKaiwwfomRWc
160
+HpjGd/lG4iL27pIZy7I64pxTYxI5J1U+rRCi6FWD5dzyxPRi/GOTk1Uy5A4t9YRG
161
+Ucbz2UgiR2eBjFIzxo3m0Un9uLnH/wCBF+E5ua1yYdvInHNmY8sr2udBgJFu3icn
162
+oz6zYdjrdahJMstv2hfzMe9h6xVhiRjyp9174z3vmS5k2GveFTbHciXvIiWaHGjn
163
+XWx3UdXMiB3DYpDuDoE2yLxILcE8JYNoPpjJmVFme9Jrl/D2OubYQ0xn1nVqIeVM
164
+q8miC2TX12U0MBaIvl2ekfMMVYVhoh5NoM0X8EatlHmD1GrH+Ia+XMo5U3nCKXp0
165
++Rde6HTUcqI5yD2ODFrq1s4dU4MiOsVvS4BQgno7GJ8ZuFT+Tp3q0deJmw+6lVAP
166
+DTeFxhIvceLWDX6kQWD/AM8p0T27m44I/dKjm1LEd3ayGwaZstesyCyOldW+12N6
167
+D1KD7KlD3xn0mdkVOy7JqQa5x1HC5OrBuc9yKT5a9iMyW5CHRjKwLRjyeNBSWKgu
168
+3HJDm/SWyPdCQbNd111gUAEYxrGoxuD+vSRHDKE4EmbVxK6J44k7uh3cWq97PnYS
169
+WESN54FLtE0IkZOqra0m2RUkjcqCRy+ReWVlBDuY6EmQ4UWAFARPQf1iYuW6d4T1
170
+yeieV2eVg2rzPLrXt/ckKsldniiLCGicQ2ASq4Ymu/ZM14XjqxKvqx3xnLO+TOz4
171
+pWrbO8R3pghR57HRj3eiQwnceIXWyMerYtdq7DvYHINHAqYzVjV7PeTxx2BG0Qmi
172
+b6sd8Zzwuw0gS+AsjrDq0y3brlXYyvcKuRmqx3JGBSW3iQutsITkkOnBDbybMeqs
173
+7ZrSiFaBKVr0VEVEdnfO+Nd8Z146gWfvSarVa9VIlW/2GnRq2JtEMSWPdflke04L
174
+4zw7gKJyxtoB7e7HWQuOHnNIvZt7JdE1u0k5pXVuxqCpHPrm5VexMT26Ozll51d1
175
+ilM+IHf7013sxbl6WY6zXuMXpRWFkHPtE4zea90lQmFT9jVk9O74oomwqT5hV0hr
176
+UdKYJG9u0ivFZwJNZI2CpvdbsFhWnTzcryrsI3goOoZZU1sazN1M0iNZJUl//8QA
177
+ORAAAQMCAwQHBgYBBQAAAAAAAQACEQMhBBIxIkFRYRATIDJScYEFQpGhscEUIzNy
178
+gtEwYpKi4fD/2gAIAQEACT8B7FcB8SGC7j6KiKNCkNakPe/y3AKo8AGD1b8ogclj
179
+ak0wQ1tR92k74WLY6r/qNisKx1DTNTs4c+aqirSqCQR/gir7RrbNNu5s7yqrnVa9
180
+QTxdxMp9naHhbT0VKD47XWGD6nEQD9fumPBHuVhf0cqdjoToeRO4onqnOirSOn/R
181
+5oy13xB4HtXdowcXHRVD1r8zrGXTvjhHFU+swTQYpu4G85je6eGO8MbLeQ5KmKzR
182
+4TKY1s96Zafkqmyfdzf2rq4FiE+cNi27MmwcNP67RAwuELg0b3O0lOyNOzI4clHW
183
+sZkdbVo0KtOjldjxI4EcQqgDt+YwQfNVA1412jPzT+tb8UcjxpM35KzqTh6ORl9M
184
+mm/9zex+o1hy+abko0nBrLXLRYu9T8kJJTDlNk3LGnKdR5I9fS7zfEw8lDueio0a
185
+kbnNzfVezaOXi2nH0VI0H8W/0rsxAyu4ZuI9V3amWp/IbJ+UdjvFpTMwqPdTt7oz
186
+ZZ8k3ZBumodA1QTAZTdgkT6qxw1RsHlqjLCao8gbjsDNsm3Ffl03MflbqbHNm87w
187
+tSb9jd0alCQ8IZc2cP8A9tj8lMdWCRzuD2N62Jw1VgGsw4T5JsMpPyDmRYo5Qrq3
188
+Rr0XQuR8oMow57nx5Nv9+xUDBUdkYCYzOVD8uow0X5doDORtWUUh+IqRJEEEyLqo
189
+KdP3Rua1e0YYeBVduKZuO9G7tFkp5T3n3+Sx1P8AiFiQ87xCGr8rh5hBrMHh885/
190
+ee6BaOCNpLXDeCOkZqLGVT/KR9lU/Wr05p74BlUWvaalRzWuE77a70BRoOJcAOJ3
191
++axAp4chufPmL2xrHGUZpN2ms1+Kph1WoMzp1krMBhqp13iZiVXa3CPOYtg528h8
192
+E89W6W37wHI8lmqOD2hznuLiW6Kqw9SILBrm4lfpl7Y846RNXDfmN+Fx8EM1OmwO
193
+pHdmTdqXH0cgIVP6oC/JbkO/qtEEJaXAn0Q/LbRl7t06IQ6rtn106byhmwuLNm8O
194
+IVopD/iI+y49Anj0aHoNypJfs21g6lS3D4eM3lz5oQBYdhgqU3agpmSne0k6+a49
195
+DQ+pwJ3J+WrNxP0TR+GmWGZPSXjqzbI7L5ymdWwf+v2t3QYbxVVo8yqlN0G5kJ7R
196
+FrEKoHEc+j39rt72rcrtfqEXtB9wO08pWOLWHUObtBVn1vE6YA+EJnV20Xee4BaN
197
+ED07XtDDsqwTlNVuaBraU5+Kq1szetaAKQgTqbn0Rv0CUbK6snBrQ6STYBGR2a76
198
+GHowKxpktL3kTBcIMDgqTTisbetWsNngTrA+aPX4gdY4v0vl3LVWcPmiinBXJWrK
199
+Dinmrh/A+8eSdlqeHj5dJfjq7LHqoyT+4/ZbP4h3WBvAFNyNcTprmO9NOUg08PO/
200
+xP8AsOgKsq0BVC49HcxVN1M8sw1TXU6g0cO68eJp4IGsS63D+XBBjGVbBwtlK9rU
201
+vxBOUxdgPAuFgV//xAAmEAEAAgICAgICAwEBAQAAAAABABEhMUFRYXGBkRCxocHR
202
+4fDx/9oACAEBAAE/ENSsQDzMGqiwlwFEwQXfQ8tE0FICLgqJyLbmFF82yXRt3yZm
203
+SJiCBSNLrluWeSUo0awoX6gXWCJIYxWvS/mASl+gTh7IsQlPDKYrEuVQ18jsqPjo
204
+yG3qW5Ntqd5FmhwnQG8Rk+wWW1StDCutnctVEFoR5f8AZWoqKq/I0zANGWlPh3b1
205
+l9y1EwZ/sF+JxyLMXKI0k5TVGhvmyUnzkcA2HYxfjEvUuYA3zdYHPcVbmFIVuxMD
206
+lWvohZk+QKFmwgVu3cSgSqLFylX0Uvu9zm0xkB63KIGWAq+f+IziUNnh8YEVytir
207
+wr4Q3FVa3Z8A9cfUxMFfsIezI4xLDH5XrqLiY04EocrXWXB0Wsqit1ELdLgXfcR0
208
+4DNjkDw7jQOAq2CYfJDQzDlfy/utQ8XIBuCoI09seIHL7lKqiVKFqLY9ZH6mFNN3
209
+gR2qh9zKNjQ0k5+z7gzItNi02cXuZQl22YlDNnbBhQr7hPbBaG2fap/ZnhYRCGsV
210
+PCPubExaOuQe2Q44hwgZaxtr6eoGwRwlCf8AuJfAFrAZ4tH8crsPtf1B6Bu5r5WE
211
+9kD4GIKa10aIXMATgBimz5+y5pDUuC50IRetcyi3Aoq4UOMjJ1qPwSKTjj4hFCit
212
+QSAwQpwNajacVnEz+4cVKtAdnEXVxgGBwuKspVGtwnw68Msz0g3he0xXxDghDhEC
213
+3Hwa+YT5mXVk+hQ8xS5sfJv94iooGpeaccEah1jW2NwmLRX7DUUAwJ4uXRQF5vY/
214
+czASqGX9REaVT+UZ+pqQJgQEdBIQlUUyLW9Cj58xlBRXFmwPKQjJaytX9w455jcE
215
+Oxmr/iHaWu7ZkcjutXMMQd54loND4iQXQhr+yMRMQqvS0esG/iMQhqLCHpxlAFq/
216
+AKvBLaTlZoNypoNPHEd1r1qGgKPBKC+qQHAz62u4sWBsUp8YqGVELaDnscyoJQgT
217
+fiOOaWlKOv2uE2qw6H0Eyn0cy02I9xWdsGK0/Ba8mJXyWU2bIF0Dja4lNhobNsIg
218
+/ZNIMJxha4xb95R2hp3NgsK1qMpNhImTBwoz3C2JSmDgqU86qGaktQNLu2G97jcX
219
+KRqFYa8//Je31DsrVvQgdSggBjZnEMpVVd1xK+XsZCrcNaDdUuIaXUCt90Lbtjk9
220
+SgjnAs8OLpcgLGI6cRZPgph9Nm+FZ0QMSgQ8/DsQQXv+RGJUtLawt6sar3NbFk+B
221
+GvUbZLVSWMeEM8rT6uFC7gAIEtGUoPyrDfmAgG3DU0qHe2pSa1eMq+ZlCpQcogXl
222
+aMSg1LT8T6IEy4sRaAGCJhGEhqXWnl8O8VujqEYsFtvNjMPe+mpYu4ZZKWWgGDi7
223
+v6mbtaadSwKDUp9Yw8wYARXoYAew1CpBDW1GhcoKPllTpgGgDEqaIGIfHaHYyx/B
224
+tVc3KX4nhhSrJA8xZb9Kj2K5Opf2KZQeU1j3Hv8ACkpdF3jzj1AozWTmYAGL+YFC
225
+Eu3xhTZqGVyKMq9pyvlgdfjTFiIqUzvP+oig0waUQ2mglbOrh/2UDVwYiJgW5HrU
226
+x1FQtX1AoM2xyFNvs4/iH44mJARKQ6pQYmgsj7lfJqTSdSxeLYq262PiUFqprOlo
227
+GuMQpM4qe+szDz4BHNG3t8y82Eelpfi4StG9AqH4zMCUC3RG5ggkDa2UG+pkAbRX
228
+xQFrCE8wRvtcWf7CKIriUvfsSu2zm9yvxXqXhhWuoAxSYA7XUGshYmRPEBhIKmLK
229
+MUEFydAkKOW7sxFXQkCjg4jYm1u4ZxCwCjEG6zy3LqzRsrZUES4y4PTz4hBESrvc
230
+HFW8nMG8D7hLePQThg47cRozoUQb3nZ6JmPS7ZKbt46c/hIbIKVAOEWBp3lEXAJz
231
+FAvPqi+rhrOAvJMtdqzHQdUy1XsaE8KYZa5FiXdxfcvW+cnzDhwdg/7PqAo+pjjX
232
+cbSnz0AemmZ5isxGqGFfZphETRi3rKcwF5jWoAapq7cnGZQUmyttByx4Wf/EAC0R
233
+AAICAQIEBQIHAQAAAAAAAAECAAMRBBIFECFBEyIxUaGR8AYjQlJhgbHB/9oACAEC
234
+AQE/AGllgUZMfUuep6CPeMxbnBzmaXVCwY78s8r3Z32qIto6r3E1IYeYjp7iBz+k
235
+Si0o+e8rsDKGHK3opnj+CrN6x9WzNkmLqWA8rHE8X+5bYjAEdDOGPmvHseTDM4rl
236
+VA95ZU2cQqRPDPaVKA43Thy4Vh/PLjOsejTmysZPT5IE0OsFy5t64MOkW6xjuwPc
237
+9/mUV4JDNn79Zp9GHY/m4H+/MqrUKd56icO4g7XhR6MT9/GOWpoFiFG7zh+lNLPU
238
+wwep+/iEkTTlmbdDndiNnBJ7T8P6Lbm3Hr/315NLa1Pmx1mrB3Q0ODuQx6yvecIp
239
+Fh84yMRVAGByM1OoSseczXrvG4ekF4xgr9JYwfAC4nBEwp9+eh4dYitdYvbpn3ly
240
+W3WvY7dAfsQqR0ELFDjbKqjjcRNNo2swa2wwlHEtjeFf6+/aHTWftP0n/8QAKxEA
241
+AQQBAgQEBwEAAAAAAAAAAQACAxEEBSEGEjFBEFFhgRMUInGRofDB/9oACAEDAQE/
242
+AAooi93KEMZjDQ3KZE6kYmuFELMwzGbHRUgPDHY2GPmf1KfGdj2KxqOzXb+RRb5l
243
+SxtewtKljLHFp8IBbwCn4nzErWdAsbQ4wKCdokJdzObupNKYdgaUmHJG4h24/C1d
244
+lS35jwYaIK0yPnk5h2Cx5AAN0LT3hp3Wq25hLVqTrLT6f74cG6NFn6gzGmNNNk+t
245
+NJr3qlqmlDEmLYdgRtf3TsqSKNpEZcfIdv0o8h/Zu1Dr69lm50rWg/CLt967fpZZ
246
+eT9I2P8AUtY4agZpjsjo9lde4Jqq978NNz3407J2dWm/779FxDqjMuOGeM2BQ/vW
247
+7v1UcLSAe6laxjaTg1zeYKWO3NaO6471wPjZiNPSr9thf3u/x4BYeQ9rgy9r6dlg
248
+TbWhLzCqRlHSqXE2Y+JodG6jae9ziXONnwCOZFHIxj3USRXmsCavpKwdSMezxaz8
249
+7nNgUFxNk88jW2r8MzJa4fDjO64Z06fOz/mSSQ13fboensoqoO7qPJBCycjnPKuO
250
+dEyZ8uPJxpOUgV+yf9Wm8R/V8vl7PBqx0P8AfpfFb2K//9mJAj0EEwEKACcFAleR
251
+8lYCGwMFCQeTToAFCwkIBwMFFQoJCAsFFgMCAQACHgECF4AACgkQLirdMv5QYcEX
252
+1A/+LbS28rdo9U6Ip/7mjhklUcZ6RcU7Mmxn3aqxZHA+DbeW664OzWzVMt3e2sDI
253
+WR9dgJ9QUrGycHCAtEMozjOPaNAGQN+HHLXYOwFtBY33vSO/R8+xrN/SQ4t0Aqfw
254
+uCRg8xZ0U4t5lWFiHVaPM6cCllhXmj8caObFcRpSBxq/eXbUsRk23yRo8jDRdfZh
255
+oW8eLkwgGUsSo72O4gAsEDWuwW6z9JFGCFp7nnJJaGq5K87k4wMbm2d02lBaiTAt
256
+gw1ZjlrFhSw1gv4V/SkFtnl0vcr0+1AyA3Lw/R32M3tynggEFjixBmCd7QbnQkmq
257
+/0jyCrxrElO5SR/ZsCiw85uQ4qVmQNpWV5BXTetBd/oChM04sQ32rNcYBfkhDxAS
258
+S84dFwBg/euF++4WXN5yLaNgstigFIHFJiSPnG/70stdJmMjkn2kSuK5EoBf5/1j
259
+e8CKgnOKCxocbmOKqie6JYO9BREN3nNgg2i7JVq7+4Z9NxLrzUvI4EwSnzyvrbWH
260
+zlXZdZ8ceZeQa5eKMaWPF6+fksnh1+uaBh4hfr2sU6fvJjSu2MgFEL7keSCtXVkR
261
+yfH3CtIcrgri+CYu2q6LYbaG6Hgepx1bTrnOaOKS/u9xtC8D4+jhwlnlXxYRF+bh
262
+PlTNwtAiCc8n+3wpVYJtO2hGY2+lrMSNkVhXbo6GCz8ULJOJAhwEEwEKAAYFAleR
263
+8nEACgkQK5e5thx+p7f4Fw//ecdBvibaZy4vJXGKn7C/8Il3+D/bP4jmJ0PwC8lr
264
+G/ZNCBlSt7ptXTnNcrbUe99nJEiXUbZfis0iQAk7J1JFo9/umpzbM9iCMFAUYZ6j
265
+yJz2NHexz3SNIS0XCeaWf3rQJxd/37W7SZ7zpQx4ObdgmRWU38R9ykWERWn9LGmH
266
+BW3VS+dP/1q6I3EVtBeNRAUG1u0gsqy8ZNmB/ZrdA+jJ4RZpmg9ND3CqXBNzl2qd
267
+0REZ2/9Q3TzjNFQ/js2JsqunQ3X9ZS6KDxyN18Hu368cLuH8/UVEGowe4a9nLo8E
268
+gM4zRvZEbXBCrb7hYUHcEPJCYq3auBoXWhIcqLHcbBuOxatSuf3zr67t27qPQB61
269
+CJ0pnjLX8Dr0QR0HIJh/NyiUmduxQ42eXhvulo0I1OEvcVPkuflQJwVnA185AfYT
270
+/8abx8dq4/rf2T/zLJoH2f8uh/dzptg2FCSCifi0DcoVagwdLQdXEekzS0Q6KQHt
271
+GjzmaH7uM7mfYWk0MaJlUltoAMESQkxDvEPv4/TjSwQD0qZa8VZ70SPSlzUzqBj2
272
+8+1GOHeYXZDe+ElVYQxW9Xt4rbXTgIGI1eqrTZewKnwN7rLTQHoClEKjJoH+vXlZ
273
+5FrUjmXotzImOqDfvJXABPJ4ErD3mI1xmrVX4u0mgiV+KKn2NMbdLIYthJjfPqOB
274
+rfS5Ag0EV5HkyAEQALqSSby6fWp+LaGOZqCwayQ8hYdlCaBMhxTrqyrEbS2ew+Z+
275
+dlAETu3cZ+DnRhOIs061Vsc1j/o3EgLORVvP9j0pUH15Q44VixTfhTgX/p0h32gb
276
+Re18e6SWHKHpYuY0zM5ydpe2QU+Myez4cPeD3M2HxyR0Fm3GsWEMX2gvRYulESwp
277
+2gLs7WsmV2PTk1R7VwSWZDqZv4uX3FFwuuIAvbclDEFxgb2F+2+Duic9NP5GimxY
278
+5xxuAH6uBQVnizCZ4/N2h3SX9yoHvcXwMUrlMy0hC+FcoPPZoLXS4STBJD7/HlPs
279
+B2mzuc0F1EOtLlvO8oCYtWIYdykDM7ZwtH6h+kmOEGFZL2iREYGYp5CZjse1GHQI
280
+pklvTbvcL4cm9OjGH0l8gl002s0AL4g8Ry5VXwTBIJaU3QviBU0uYIFmQe2OAeGz
281
+i7+LPbqrqnszXjoRsddMEHXyEMCejsSeBtQkH7nnDHh3Lxk2juOPR/fIoB4pOQhN
282
+ZUY+jDIJJEZ8XNaUMay3sSjhLKZzzVacQzhdFOYo2pMkU31cqnX9t00XeWlR3u6R
283
+x6Dwtt5VY68D7NBQ4OgrxRVApaK6zbV+lvmLBxU1HtZvec1VAU1j54unFq4qAW9W
284
+vyPVj6hGxyHyFkQFp27/T6SWscyyf37CW4CBA4UEbftFB/u2K6M6Bh1AIFPTABEB
285
+AAGJAiUEGAEKAA8FAleR5MgCGwwFCQeTToAACgkQLirdMv5QYcFjYA//ZgTTcVID
286
+YBlTFT1ecNO9CNSv1CHaIqMqS2rtcLA7h9DfdQJXyNPkQRKAaccQz9TMA51c2Qoh
287
+JCcvM4IopGYwQ7nsFjk+0HS1QpIS9RV3r6Wcz4vevNbdd7Lo6xpkwrckvLaSRkBD
288
+qkC1oB4h2SHmq3Q0093PFIdx4oJhGoT93syHlMrRihIJ+smJsjpT5R5M4QAcXYr0
289
+Av71J8gF3ZK+3X+wHYidN0K+lhYTM3fEuS7KQlt/8U/qJ9iJjpYE3OfzRtMvXjUr
290
+yk717TPV5ysP/s/OcUv+tYomiHCNM6kplFFWfBpR7/6HKWocW3jtuwQUNOH9oS3P
291
+EPjKWzA1ja+4IfykrD2YEF3O7K4bbm7K2exI6QqpYOFHNvk1S7lHtJQFXW8VZCPJ
292
+tJyppjmGp4tQBK9/pOFo1V6cevWVgctQhopLUV/HaWAQ0lP6nzp7CDWOxlWfr0wt
293
+Khwy4BcW6vyo3IdiXlkguBoSfM6orCkoPsTNbuCWJECKHPxig4M4dVCZxbSQLgpE
294
+6Tur2FF3vzbxzwmds8DKuxWbAVd/CoV+xGPj0NfODpsSJK83/9JS7E+y/kN3pKu2
295
+4/GL7Gop57Et/+ojeLIsqywSEOsE18wd19/5Hu2Ya/Wn59o3+pE+BdLYIsnwh0wb
296
+0rkW0xLAQiVeN+M2gyMJgUhr/d8BWK+ls28=
297
+=qAnb
298
+-----END PGP PUBLIC KEY BLOCK-----

+ 18
- 0
readme.md View File

@@ -0,0 +1,18 @@
1
+# codesignd website
2
+
3
+> codesignd website at codesignd.com/codesignd.de
4
+
5
+This is the main repository of the codesignd website. Most of the actual code is stored in the [patterns repository](https://git.codesignd.com/sites/patterns), which is shared with other codesignd websites.
6
+Feel free to take a look at the code and the [pattern library](https://codesignd.com/patterns) and don't hesitate to contact me:
7
+
8
+- [Email and contact form](https://codesignd.com/contact)
9
+- [Follow me on Twitter](https://twitter.com/lukasbestle)
10
+- Find me in the [Kirby Forum](https://forum.getkirby.com/users/lukasbestle)
11
+
12
+## Copyright
13
+
14
+© 2016 Lukas Bestle
15
+
16
+## License
17
+
18
+See license.md.

+ 2
- 0
site/accounts/.gitignore View File

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 11
- 0
site/blueprints/contact.yml View File

@@ -0,0 +1,11 @@
1
+title: Contact
2
+pages: false
3
+files: false
4
+fields:
5
+  title:
6
+    label: Title
7
+    type:  text
8
+  description:
9
+    label: Desciption
10
+    type:  text
11
+    icon:  file-text

+ 14
- 0
site/blueprints/default.yml View File

@@ -0,0 +1,14 @@
1
+title: Page
2
+pages: true
3
+files: true
4
+fields:
5
+  title:
6
+    label: Title
7
+    type:  text
8
+  description:
9
+    label: Desciption
10
+    type:  text
11
+    icon:  file-text
12
+  text:
13
+    label: Text
14
+    type:  textarea

+ 14
- 0
site/blueprints/home.yml View File

@@ -0,0 +1,14 @@
1
+title: Homepage
2
+pages: false
3
+files: true
4
+fields:
5
+  title:
6
+    label: Title
7
+    type:  text
8
+  description:
9
+    label: Desciption
10
+    type:  text
11
+    icon:  file-text
12
+  text:
13
+    label: Text
14
+    type:  textarea

+ 30
- 0
site/blueprints/services.yml View File

@@ -0,0 +1,30 @@
1
+title: Services
2
+pages: false
3
+files: true
4
+fields:
5
+  title:
6
+    label: Title
7
+    type:  text
8
+  description:
9
+    label: Desciption
10
+    type:  text
11
+    icon:  file-text
12
+  services:
13
+    label: Services
14
+    type:  structure
15
+    entry: >
16
+      <strong>{{title}}</strong><br>
17
+      {{text}}
18
+    fields:
19
+      title:
20
+        label: Title
21
+        type:  text
22
+      illustration:
23
+        label: Illustration
24
+        type:  image
25
+      text:
26
+        label: Text
27
+        type:  textarea
28
+  cta:
29
+    label: Call to action
30
+    type:  textarea

+ 15
- 0
site/blueprints/site.yml View File

@@ -0,0 +1,15 @@
1
+title: Site
2
+pages: true
3
+files: false
4
+fields:
5
+  title:
6
+    label: Title
7
+    type:  text
8
+  description:
9
+    label: Desciption
10
+    type:  text
11
+    icon:  file-text
12
+  copyright:
13
+    label: Copyright
14
+    type:  text
15
+    icon:  copyright

+ 2
- 0
site/cache/.gitignore View File

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 25
- 0
site/config/config.codesignd.dev.php View File

@@ -0,0 +1,25 @@
1
+<?php
2
+
3
+// Enable debugging on the dev host but disable caching
4
+c::set('debug', true);
5
+c::set('cache', false);
6
+
7
+// Disable assets suffix on the dev host
8
+c::set('assets.suffix', '');
9
+
10
+// Language setup with dev domains
11
+c::set('languages', [
12
+	[
13
+		'code'    => 'en',
14
+		'name'    => 'English',
15
+		'default' => true,
16
+		'locale'  => 'en_US',
17
+		'url'     => 'http://codesignd.dev',
18
+	],
19
+	[
20
+		'code'    => 'de',
21
+		'name'    => 'Deutsch',
22
+		'locale'  => 'de_DE',
23
+		'url'     => 'http://de.codesignd.dev',
24
+	]
25
+]);

+ 3
- 0
site/config/config.de.codesignd.dev.php View File

@@ -0,0 +1,3 @@
1
+<?php
2
+
3
+require_once(__DIR__ . DS . 'config.codesignd.dev.php');

+ 80
- 0
site/config/config.php View File

@@ -0,0 +1,80 @@
1
+<?php
2
+
3
+/*
4
+
5
+---------------------------------------
6
+License Setup
7
+---------------------------------------
8
+
9
+Please add your license key, which you've received
10
+via email after purchasing Kirby on http://getkirby.com/buy
11
+
12
+It is not permitted to run a public website without a
13
+valid license key. Please read the End User License Agreement
14
+for more information: http://getkirby.com/license
15
+
16
+*/
17
+
18
+// The license was removed for the public repository
19
+c::set('license', '*snip*');
20
+
21
+/*
22
+
23
+---------------------------------------
24
+Kirby Configuration
25
+---------------------------------------
26
+
27
+By default you don't have to configure anything to
28
+make Kirby work. For more fine-grained configuration
29
+of the system, please check out http://getkirby.com/docs/advanced/options
30
+
31
+*/
32
+
33
+// Use production assets by default
34
+c::set('assets.suffix', '.min');
35
+
36
+// Cache setup
37
+c::set('cache', true);
38
+c::set('cache.ignore', ['contact', 'legal']);
39
+
40
+// Representations
41
+c::set('representations.accept', true);
42
+
43
+// Language setup
44
+c::set('languages', [
45
+	[
46
+		'code'    => 'en',
47
+		'name'    => 'English',
48
+		'default' => true,
49
+		'locale'  => 'en_US',
50
+		'url'     => 'https://codesignd.com'
51
+	],
52
+	[
53
+		'code'    => 'de',
54
+		'name'    => 'Deutsch',
55
+		'locale'  => 'de_DE',
56
+		'url'     => 'https://codesignd.de'
57
+	]
58
+]);
59
+
60
+// Bar-o-mator plugin
61
+c::set('baromator.routes', true);
62
+c::set('baromator.basecolor', '#ED8F1B');
63
+
64
+// Cachebuster plugin
65
+c::set('cachebuster', true);
66
+
67
+// Patterns plugin
68
+c::set('patterns.title', 'codesignd Patterns');
69
+c::set('patterns.preview.css', ['assets/css/index.css', 'site/patterns/theme.css']);
70
+c::set('patterns.preview.js', 'assets/js/index.js');
71
+
72
+// Serve the pattern library theme file
73
+c::set('routes', [
74
+	[
75
+		'pattern' => 'site/patterns/theme\.(:num)\.css',
76
+		'action'  => function() {
77
+			return new Response(f::read(kirby()->roots()->site() . DS . 'patterns' . DS . 'theme.css'), 'css');
78
+		}
79
+	]
80
+]);

+ 21
- 0
site/controllers/contact.php View File

@@ -0,0 +1,21 @@
1
+<?php
2
+
3
+return function($site, $pages, $page) {
4
+	$form = uniform('contact', [
5
+		'required' => [
6
+			'name'  => '',
7
+			'_from' => 'email'
8
+		],
9
+		'actions' => [
10
+			[
11
+				'_action' => 'email',
12
+				'to'      => qdated(),
13
+				'sender'  => 'codesignd form <no-reply@codesignd.de>',
14
+				'subject' => 'Message from the contact form (' . $site->title() . ')',
15
+				'snippet' => 'email-templates/contact'
16
+			]
17
+		]
18
+	]);
19
+	
20
+	return compact('form');
21
+};

+ 23
- 0
site/languages/de.php View File

@@ -0,0 +1,23 @@
1
+<?php
2
+
3
+l::set('nav.main.label', 'Primär');
4
+l::set('nav.lang.label', 'Sprachauswahl');
5
+
6
+l::set('footer.top', 'Nach oben');
7
+l::set('footer.madewith', 'Erstellt mit');
8
+l::set('footer.source', 'Quellcode');
9
+
10
+l::set('go.contact', '➪ Kontakt');
11
+
12
+l::set('home-banner.learnmore', 'Mehr erfahren');
13
+l::set('home-banner.learnmore.label', 'Mehr über meine Leistungen erfahren');
14
+l::set('home-banner.contact', 'Kontakt');
15
+
16
+l::set('contact.name', 'Name');
17
+l::set('contact.email', 'E-Mail-Adresse');
18
+l::set('contact.message', 'Nachricht');
19
+l::set('contact.potty', 'Bitte lasse dieses Feld leer');
20
+l::set('contact.submit', 'Absenden');
21
+l::set('contact.heading.email', 'E-Mail');
22
+
23
+l::set('qdated.error', 'Bei der Anzeige der E-Mail-Adresse ist ein Fehler aufgetreten. Bitte kontaktiere mich über <a href="https://twitter.com/lukasbestle">Twitter</a> und mache mich darauf aufmerksam. Danke!');

+ 23
- 0
site/languages/en.php View File

@@ -0,0 +1,23 @@
1
+<?php
2
+
3
+l::set('nav.main.label', 'Primary');
4
+l::set('nav.lang.label', 'Language select');
5
+
6
+l::set('footer.top', 'Top');
7
+l::set('footer.madewith', 'Made with');
8
+l::set('footer.source', 'Source');
9
+
10
+l::set('go.contact', '➪ Contact');
11
+
12
+l::set('home-banner.learnmore', 'Learn more');
13
+l::set('home-banner.learnmore.label', 'Learn more about my services');
14
+l::set('home-banner.contact', 'Contact');
15
+
16
+l::set('contact.name', 'Name');
17
+l::set('contact.email', 'Email address');
18
+l::set('contact.message', 'Message');
19
+l::set('contact.potty', 'Please leave this field blank');
20
+l::set('contact.submit', 'Submit');
21
+l::set('contact.heading.email', 'Email');
22
+
23
+l::set('qdated.error', 'An error occured while displaying the email address. Please contact me via <a href="https://twitter.com/lukasbestle">Twitter</a> and tell me about this. Thank you!');

+ 1
- 0
site/patterns

@@ -0,0 +1 @@
1
+Subproject commit f9c5f3db5a8cbb3d25e1a84c19b7c56d73b71422

+ 1
- 0
site/plugins/baromator

@@ -0,0 +1 @@
1
+Subproject commit cfe2ef2c4cb94f7e1e2bb244427e18569f19bed5

+ 1
- 0
site/plugins/cachebuster

@@ -0,0 +1 @@
1
+Subproject commit eb92317c13603859d298b554a88656cdcdc38f17

+ 1
- 0
site/plugins/patterns

@@ -0,0 +1 @@
1
+Subproject commit 3e1d562073062a44395d49d2f8d3e2a9b8fae10a

+ 42
- 0
site/plugins/qdated.php View File

@@ -0,0 +1,42 @@
1
+<?php
2
+
3
+/**
4
+ * Returns the current qdated address
5
+ * If qdated is not available, returns null
6
+ *
7
+ * @return string
8
+ */
9
+function qdated() {
10
+	$path = $_SERVER['HOME'] . DS . '.qdated-current';
11
+	if(!is_file($path)) return null;
12
+	
13
+	return 'dated-' . trim(f::read($path)) . '@' . url::host();
14
+}
15
+
16
+/**
17
+ * Returns an HTML a mailto tag with the current qdated address
18
+ * If qdated is not available, returns an HTML error message
19
+ *
20
+ * @param  mixed  $text Optional text for the link
21
+ *                      Can also be true to use the email
22
+ *                      address but put a line break in it
23
+ * @return string       HTML code
24
+ */
25
+function qdatedHtml($text = false) {
26
+	$email = qdated();
27
+	if(!$email) return '<p><strong>' . l::get('qdated.error') . '</strong></p>';
28
+	
29
+	if($text === true) $text = str_replace('@', '<br>@', $email);
30
+	return str::email($email, $text);
31
+}
32
+
33
+/**
34
+ * qdated Kirbytag
35
+ * 
36
+ * Usage: (qdated: Optional link text)
37
+ */
38
+kirby()->set('tag', 'qdated', [
39
+	'html' => function($tag) {
40
+		return qdatedHtml($tag->attr('qdated'));
41
+	}
42
+]);

+ 1
- 0
site/plugins/uniform

@@ -0,0 +1 @@
1
+Subproject commit 26f17b120bd2f1a250c7639a9a6ae9119b33b937

+ 6
- 0
site/snippets/email-templates/contact.php View File

@@ -0,0 +1,6 @@
1
+Name: <?= a::get($form, 'name') . "\n" ?>
2
+Email: <?= a::get($form, '_from') . "\n" ?>
3
+
4
+----
5
+
6
+<?= a::get($form, 'message') ?>

+ 4
- 0
site/snippets/footer.php View File

@@ -0,0 +1,4 @@
1
+		<?php pattern('shared/2-blocks/footer', ['pSite' => 'codesignd']) ?>
2
+		<?= js('assets/js/index' . c::get('assets.suffix') . '.js') ?>
3
+	</body>
4
+</html>

+ 31
- 0
site/snippets/header.php View File

@@ -0,0 +1,31 @@
1
+<!DOCTYPE html>
2
+<html lang="<?= $site->language()->code() ?>">
3
+	<head>
4
+		<meta charset="utf-8">
5
+		<meta http-equiv="x-ua-compatible" content="ie=edge">
6
+		<meta name="viewport" content="width=device-width, initial-scale=1">
7
+		
8
+		<title><?= $page->title()->html() ?> ~ <?= $site->title()->html() ?></title>
9
+		<meta name="description" content="<?= $page->description()->or($site->description()) ?>">
10
+		
11
+		<link rel="icon" href="<?= url('assets/img/favicon-96.png') ?>" type="image/png">
12
+		<link rel="apple-touch-icon-precomposed" href="<?= url('assets/img/favicon-152.png') ?>">
13
+		
14
+		<?php foreach($site->languages()->filterBy('code', '!=', $site->language()->code()) as $lang): ?>
15
+		<link rel="alternate" href="<?= $page->url($lang->code()) ?>" hreflang="<?= $lang->code() ?>">
16
+		<?php endforeach ?>
17
+		<link rel="pgpkey" type="application/pgp-keys" href="<?= url('pgp.asc') ?>">
18
+		
19
+		<link rel="preload" href="<?= url('assets/fonts/input-sans-narrow-regular.woff2') ?>" as="font" type="font/woff2" crossorigin>
20
+		
21
+		<?php if($suffix = c::get('assets.suffix')): ?>
22
+		<style><?= f::read('assets/css/index' . $suffix . '.css') ?></style>
23
+		<?php else: ?>
24
+		<?= css('assets/css/index.css') ?>
25
+		<?php endif ?>
26
+	</head>
27
+	<body id="top">
28
+		<?php pattern('shared/2-blocks/header', [
29
+			'pSite'   => 'codesignd',
30
+			'navData' => ['languages' => $site->languages(), 'items' => $site->pages()->visible()]
31
+		]) ?>

+ 7
- 0
site/snippets/nav.php View File

@@ -0,0 +1,7 @@
1
+<?php
2
+
3
+pattern('shared/2-blocks/nav', [
4
+	'wrapper'   => false,
5
+	'languages' => $site->languages(),
6
+	'items'     => $site->pages()->visible()
7
+]);

+ 52
- 0
site/snippets/templates/contact.php View File

@@ -0,0 +1,52 @@
1
+<article class="text">
2
+	<h1><?= html($page->title()) ?></h1>
3
+	
4
+	<div class="contact">
5
+		<div class="contact__main">
6
+			<form class="contact__form form<?php e($form->successful(), ' form--success') ?>" action="<?= url::current() ?>" method="post">
7
+				<div class="field field--required field--small">
8
+					<label class="field__label" for="name"><?= l::get('contact.name', 'Name') ?></label>
9
+					<input class="input field__input<?php e($form->hasError('name'), ' input--invalid') ?>" type="text" name="name" id="name" value="<?php $form->echoValue('name') ?>" placeholder=" " autocomplete="name" required/>
10
+				</div>
11
+				
12
+				<div class="field field--required field--small">
13
+					<label class="field__label" for="email"><?= l::get('contact.email', 'Email address') ?></label>
14
+					<input class="input field__input<?php e($form->hasError('_from'), ' input--invalid') ?>" type="email" name="_from" id="email" value="<?php $form->echoValue('_from') ?>" placeholder=" " autocomplete="email" required/>
15
+				</div>
16
+				
17
+				<div class="field">
18
+					<label class="field__label" for="message"><?= l::get('contact.message', 'Message') ?></label>
19
+					<textarea class="input field__input" rows="7" name="message" id="message"><?php $form->echoValue('message') ?></textarea>
20
+				</div>
21
+				
22
+				<label class="vh" for="website"><?= l::get('contact.potty', 'Please leave this field blank') ?></label>
23
+				<input class="vh" type="text" name="website" id="website" autocomplete="off"/>
24
+				
25
+				<div class="form__message"><?php if($form->hasMessage() && !$form->successful()): ?><?php $form->echoMessage() ?><?php endif ?></div>
26
+				
27
+				<button class="button form__submit" type="submit" name="_submit" value="<?php echo $form->token() ?>"<?php e($form->successful(), ' disabled')?>><?= l::get('contact.submit', 'Submit') ?></button>
28
+				
29
+				<img class="contact__stamp" src="<?= url('assets/img/stamp.svg') ?>" alt="">
30
+			</form>
31
+			
32
+			<div class="contact__thank-you">
33
+				<?php if($form->hasMessage() && $form->successful()): ?>
34
+				<?php $form->echoMessage() ?>
35
+				<?php endif ?>
36
+			</div>
37
+		</div>
38
+		
39
+		<aside class="contact__sidebar">
40
+			<div class="contact__detail">
41
+				<h2 class="contact__heading"><?= l::get('contact.heading.email', 'Email') ?></h2>
42
+				<div class="contact__email"><?= qdatedHtml(true) ?> <a href="<?= url('legal') ?>#contact">?</a></div>
43
+				<small><a href="<?= url('pgp.asc') ?>" rel="pgpkey" type="application/pgp-keys">PGP: 2E2A DD32 FE50 61C1</a></small>
44
+			</div>
45
+			
46
+			<div class="contact__detail">
47
+				<h2 class="contact__heading">Twitter</h2>
48
+				<?= twitter('lukasbestle') ?>
49
+			</div>
50
+		</aside>
51
+	</div>
52
+</article>

+ 3
- 0
site/snippets/templates/default.php View File

@@ -0,0 +1,3 @@
1
+<article class="text text-container">
2
+	<?= $page->text()->kirbytext() ?>
3
+</article>

+ 1
- 0
site/snippets/templates/home.php View File

@@ -0,0 +1 @@
1
+<?php pattern('codesignd/2-blocks/home-banner', ['illustration' => $page->image()->url(), 'text' => $page->text()->kt()]) ?>

+ 10
- 0
site/snippets/templates/services.php View File

@@ -0,0 +1,10 @@
1
+<article class="text">
2
+	<h1><?= html($page->title()) ?></h1>
3
+	
4
+	<?php foreach($page->services()->toStructure() as $service): ?>
5
+		<?php $illustration = ($illustration = $service->illustration()->toFile())? $illustration->url() : false ?>
6
+		<?php pattern('codesignd/2-blocks/service', ['illustration' => $illustration, 'title' => $service->title(), 'coloredTitle' => ($site->language()->code() === 'de'), 'text' => $service->text()->kt()]) ?>
7
+	<?php endforeach ?>
8
+</article>
9
+<hr>
10
+<?php pattern('shared/2-blocks/cta', ['text' => $page->cta()->kirbytext(), 'button' => l::get('go.contact', '➪ Contact'), 'link' => url('contact')]) ?>

+ 19
- 0
site/templates/contact.json.php View File

@@ -0,0 +1,19 @@
1
+<?php
2
+
3
+// Special treatment for AJAX submissions
4
+if(r::is('POST')) {
5
+	$fields = [];
6
+	foreach(r::data() as $field => $value) {
7
+		$fields[$field] = $form->hasError($field);
8
+	}
9
+	
10
+	$data = [
11
+		'success' => $form->successful(),
12
+		'fields'  => $fields,
13
+		'message' => $form->message()
14
+	];
15
+	
16
+	echo response::json($data);
17
+} else {
18
+	require_once('default.json.php');
19
+}

+ 3
- 0
site/templates/contact.php View File

@@ -0,0 +1,3 @@
1
+<?php
2
+
3
+require_once('default.php');

+ 17
- 0
site/templates/default.json.php View File

@@ -0,0 +1,17 @@
1
+<?php
2
+
3
+// Determine snippet name and fall back to default if it does not exist
4
+$snippet = 'templates/' . $page->intendedTemplate();
5
+if(!$kirby->get('snippet', $snippet)) $snippet = 'templates/default';
6
+
7
+// Define structured data for the frontend AJAX code
8
+$data = [
9
+	'url'      => $page->url(),
10
+	'cachable' => $page->isCachable(),
11
+	'title'    => $page->title() . ' ~ ' . site()->title(),
12
+	'nav'      => snippet('nav', [], true),
13
+	'main'     => snippet($snippet, [], true)
14
+];
15
+
16
+// Return it as JSON
17
+echo response::json($data);

+ 13
- 0
site/templates/default.php View File

@@ -0,0 +1,13 @@
1
+<?php
2
+
3
+// Determine snippet name and fall back to default if it does not exist
4
+$snippet = 'templates/' . $page->intendedTemplate();
5
+if(!$kirby->get('snippet', $snippet)) $snippet = 'templates/default';
6
+?>
7
+<?php snippet('header') ?>
8
+
9
+<main class="main">
10
+	<?php snippet($snippet) ?>
11
+</main>
12
+
13
+<?php snippet('footer') ?>

+ 2
- 0
thumbs/.gitignore View File

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

Loading…
Cancel
Save