theme refactoring

live-update
Özcan Oğuz 4 years ago
commit 72188bd0d4
  1. 6
      404.html
  2. 17
      LICENSE
  3. 436
      README.md
  4. 9
      archetypes/blog.md
  5. 6
      archetypes/default.md
  6. 15
      archetypes/partners.md
  7. 15
      archetypes/sessions.md
  8. 17
      archetypes/speakers.md
  9. 14
      archetypes/team.md
  10. 78
      i18n/en.toml
  11. 77
      i18n/tr.toml
  12. 30
      icons.js
  13. BIN
      images/block-album.png
  14. BIN
      images/block-info.png
  15. BIN
      images/block-map.png
  16. BIN
      images/block-partners.png
  17. BIN
      images/block-ticket.png
  18. BIN
      images/feature-speakers.png
  19. BIN
      images/screenshot.png
  20. BIN
      images/subscribe.png
  21. BIN
      images/tn.png
  22. 3
      layouts/404.html
  23. 29
      layouts/_default/baseof.html
  24. 15
      layouts/_default/list.html
  25. 14
      layouts/_default/single.html
  26. 31
      layouts/blog/list.html
  27. 22
      layouts/blog/single.html
  28. 6
      layouts/index.html
  29. 5
      layouts/partials/date-long.html
  30. 13
      layouts/partials/date-short.html
  31. 87
      layouts/partials/footer.html
  32. 80
      layouts/partials/head.html
  33. 52
      layouts/partials/header.html
  34. 3
      layouts/partials/icon.html
  35. 4
      layouts/partials/partner.html
  36. 50
      layouts/partials/schedule-session.html
  37. 46
      layouts/partials/session.html
  38. 8
      layouts/partials/social-sharer.html
  39. 9
      layouts/partials/speaker.html
  40. 15
      layouts/partials/team.html
  41. 15
      layouts/partials/ticket.html
  42. 5
      layouts/partners/list.html
  43. 63
      layouts/partners/single.html
  44. 111
      layouts/schedule/list.html
  45. 17
      layouts/sessions/list.html
  46. 63
      layouts/sessions/single.html
  47. 8
      layouts/shortcodes/album.html
  48. 11
      layouts/shortcodes/button-link.html
  49. 6
      layouts/shortcodes/centered-img.html
  50. 7
      layouts/shortcodes/hero.html
  51. 22
      layouts/shortcodes/home-info.html
  52. 23
      layouts/shortcodes/home-location.html
  53. 16
      layouts/shortcodes/home-speakers.html
  54. 9
      layouts/shortcodes/home-subscribe.html
  55. 4
      layouts/shortcodes/home-tickets.html
  56. 3
      layouts/shortcodes/icon.html
  57. 19
      layouts/shortcodes/jumbo.html
  58. 21
      layouts/shortcodes/partners.html
  59. 17
      layouts/shortcodes/teams.html
  60. 23
      layouts/shortcodes/ticket.html
  61. 15
      layouts/shortcodes/youtube-section.html
  62. 14
      layouts/speakers/list.html
  63. 61
      layouts/speakers/single.html
  64. 15
      layouts/taxonomy/list.html
  65. 5
      layouts/team/list.html
  66. 11
      layouts/team/single.html
  67. 35
      package.json
  68. 9
      postcss.config.js
  69. 7
      robots.txt
  70. 30
      rollup.config.js
  71. 10
      rollup.config.prod.js
  72. 4
      src/icons/alert.svg
  73. 4
      src/icons/calendar.svg
  74. 4
      src/icons/cfp.svg
  75. 4
      src/icons/close.svg
  76. 4
      src/icons/direction.svg
  77. 4
      src/icons/email.svg
  78. 4
      src/icons/facebook.svg
  79. 4
      src/icons/github.svg
  80. 1
      src/icons/home.svg
  81. 8
      src/icons/level-advanced.svg
  82. 8
      src/icons/level-beginner.svg
  83. 8
      src/icons/level-intermediate.svg
  84. 4
      src/icons/link.svg
  85. 4
      src/icons/linkedin.svg
  86. 3
      src/icons/map-marker.svg
  87. 4
      src/icons/menu.svg
  88. 4
      src/icons/pdf.svg
  89. 4
      src/icons/right.svg
  90. 6
      src/icons/scroll-down.svg
  91. 4
      src/icons/site.svg
  92. 16
      src/icons/slides.svg
  93. 4
      src/icons/subscribe.svg
  94. 4
      src/icons/ticket.svg
  95. 4
      src/icons/twitter.svg
  96. 4
      src/icons/youtube.svg
  97. 15
      src/script/background.js
  98. 141
      src/script/konami.js
  99. 4
      src/script/main.js
  100. 9
      src/script/polyfills.js
  101. Some files were not shown because too many files have changed in this diff Show More

@ -0,0 +1,6 @@
<article class="error">
<h1>
This is not the page you were looking for
</h1>
</article>

@ -0,0 +1,17 @@
Copyright (c) 2020 Igor Laborie, Özcan Oğuz
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

@ -0,0 +1,436 @@
# DevFest Theme Hugo
DevFest Theme Hugo is a theme for conferences/events.
It's developed for the 2019 version of Devfest Toulouse.
See a real usage here: <https://2019.devfesttoulouse.fr/>
## Building my conference site from scratch
1. Install [Hugo](https://gohugo.io)
2. Create a new site by running:
```bash
hugo new site my-conf
cd my-conf
mkdir themes
git submodule add https://github.com/GDGToulouse/devfest-theme-hugo.git themes/devfest-theme-hugo
```
3. Then edit your `config.toml` file with
```toml
# ...
theme = "devfest-theme-hugo"
# ...
```
4. It's done. Just start Hugo server to see it live!
```bash
hugo server
```
## Customizing the site
`yarn` to install the dependency
Run `npm start` to watch Sass changes.
When you are happy with the result run `npm run build` to build the minified version
### Site params
```toml
#...
enableEmoji = true
enableRobotsTXT = true
enableMissingTranslationPlaceholders = true
googleAnalytics = "UA-XXXXXXXX-X"
[params]
title = "DevFest Toulouse 2019"
date = "2019-10-03"
description = "The DevFest, or 'Developers Festival', is a technical conference for developers. It is aimed at students, professionals or simply curious technophiles."
images = ["/images/social-share.jpg"]
email = "contact@devfesttoulouse.fr"
keywords = "event, gdg, gde, devfest, google, programming, android, chrome, developers, web, cloud, androiddev"
copyright = "We :heart: chocolatines"
cfpUrl = "https://conference-hall.io/public/event/HJRThubF4uYPkb7jSUxi"
subscriptionUrl = "http://eepurl.com/dps1j5"
appleTouchIcon = "/apple-touch-icon.png"
favicon32 = "/favicon-32x32.png"
favicon16 = "/favicon-16x16.png"
manifest = "/manifest.json"
safariPinnedTab = "/safari-pinned-tab.svg"
themeColor = "#673ab7"
googleWebmasterKey = "googleXXXXXXX" # https://support.google.com/webmasters/answer/9008080#html_verification
[params.logos]
jumbo = "/images/logos/devfest_color_text.png"
header = "/images/logos/devfest_color_text.png"
footer = "/images/logos/devfest_gray_text.png"
#[menu]
#[[menu.main]]
# identifier = "jobs"
# name = "Jobs"
# url = "https://jobs.devfesttoulouse.fr/"
# weight = 200
# external = true
[languages]
[languages.en]
weight = 1
languageName = "gb"
[languages.fr]
weight = 2
languageName = "fr"
[languages.fr.params]
description = "Le DevFest, ou 'Developers Festival', est une conférence technique destinée aux développeurs. Elle s'adresse aussi bien aux étudiants, aux professionnels ou tout simplement aux curieux technophiles."
[taxonomies]
tag = "tags"
#...
```
### Header
The top navigation bar is build with
* Site title
* Site parameter `logos.header` for the logo
* Site languages if you need a multilingual site
* Menu `main`
### Footer
The footer is build with
* Site title
* Site params `email`, `subscriptionUrl`, `logos.footer`, `copyright`
* data from `data/footer.yml`
```yml
share:
- name: facebook
url: https://www.facebook.com/sharer.php?u=
- name: twitter
url: https://twitter.com/intent/tweet?text=
follow:
- name: facebook
url: https://www.facebook.com/GDGToulouse/
- name: twitter
url: https://twitter.com/devfesttoulouse
- name: linkedin
url: https://www.linkedin.com/company/devfesttoulouse/
- name: youtube
url: https://www.youtube.com/channel/UCx83f-KzDd3o1QK2AdJIftg
content:
- title: footer_about
links:
- name: GDG Toulouse
url: http://gdgtoulouse.fr/
newTab: true
- name: Google Developers Group
url: https://developers.google.com/
newTab: true
- nameKey: footer_coc
url: /code-of-conduct/
newTab: false
- title: footer_previous_edition
links:
- name: DevFest Toulouse 2018
url: https://2018.devfesttoulouse.fr/
newTab: true
- name: DevFest Toulouse 2017
url: https://2017.devfesttoulouse.fr/
newTab: true
- name: DevFest Toulouse 2016
url: https://2016.devfesttoulouse.fr/
newTab: true
```
### Home
The Home page is build with markdown and calling some shortcodes.
#### Jumbo bloc
```hugo
{{% jumbo img="/images/backgrounds/back-0.jpg" imgLabel="DevFest Toulouse 2019" %}}
![](/images/logos/devfest_color_text.png)
## October 3rd, 2019
### Pierre Baudis congress center
{{% /jumbo %}}
```
#### Info block
With main description and key figures.
```hugo
{{% home-info what="Participants:900,Day:1,Sessions:36,Parallel Tracks:4" class="primary" %}}
## What is DevFest Toulouse?
The DevFest, or 'Developers Festival', is a technical conference for developers.
It is aimed at students, professionals or simply curious technophiles.
{{% /home-info %}}
```
![](images/block-info.png)
#### Feature speakers block
Just present your feature speakers
```hugo
{{% home-speakers %}}
## Featured Speakers
{{< button-link label="Submit a presentation"
url="http://www.conference-hall.io"
icon="cfp" >}}
{{< button-link label="See all speakers"
url="./speakers"
icon="right" >}}
{{% /home-speakers %}}
```
![](images/feature-speakers.png)
#### Subscription block
Call to subscribe
Use the site param `subscriptionUrl`.
```hugo
{{% home-subscribe class="primary" %}}
## Get notified about the important conference updates
{{% /home-subscribe %}}
```
![](images/subscribe.png)
### Ticket block
Display ticket information.
```hugo
{{% home-tickets %}}
# Tickets
<ul>
<li>{{< ticket name="Blind Birds"
starts="2019-04-04"
ends="2019-11-08"
price="40 €"
info="50 first places"
soldOut="true"
url="https://www.billetweb.fr/devfest-toulouse-2019" >}}</li>
<li>{{< ticket name="Early Birds"
starts="2019-04-04"
ends="2019-11-08"
price="60 €"
info="70 first places"
soldOut="true"
url="https://www.billetweb.fr/devfest-toulouse-2019" >}}</li>
<li>{{< ticket name="Normal"
starts="2019-04-04"
ends="2019-11-08"
price="80 €"
info="250 last places"
soldOut=""
url="https://www.billetweb.fr/devfest-toulouse-2019" >}}</li>
</ul>
\* Your ticket gives you access to all conferences, coffee breaks, and lunch. Accommodation is NOT included in this price.
{{% /home-tickets %}}
```
![](images/block-ticket.png)
#### Location block
Show conference location.
```hugo
{{% home-location
image="/images/map.jpg"
address="11 Espl. Compans Caffarelli, 31000 Toulouse"
latitude="43.6110956"
longitude="1.4332799" %}}
## The venue
### Centre de Congrès Pierre Baudis
The Centre de Congrès Pierre Baudis is a modern place of exchange,
located on a privileged location,
in the immediate vicinity of the centre of Toulouse and in a green environment.
{{% /home-location %}}
```
![](images/block-map.png)
### Partners block
Show your partners
```hugo
{{% partners categories="platinium,gold,soutien,media,communautes" %}}
# Partners
{{% /partners %}}
```
![](images/block-partners.png)
#### Album block
```hugo
{{% album images="/images/album/2018/_25A9313.jpg,/images/album/2018/_25A9386.jpg,/images/album/2018/_25A9671.jpg,/images/album/2018/_25A9334.jpg,/images/album/2018/_25A9282.jpg,/images/album/2018/_25A9612.jpg,/images/album/2018/_25A9452.jpg,/images/album/2018/_25A9628.jpg" %}}
### Some pictures of the **DevFest Toulouse 2018** with the 👾 _retro-gaming_ theme.
<a class="btn primary" target="_blank" rel="noopener" href="https://photos.app.goo.gl/nJYFVReFUk9mnXbv9">
See all photos
{{% icon "right" %}}
</a>
{{% /album %}}
```
![](images/block-album.png)
### Partners
A partner should have this params :
```yaml
title: NAME
type: partner
category: soutien
website: 'https://example.com/'
logo: /images/partners/partner.jpg
socials: []
```
### Speakers
A speaker should have this params :
```yaml
id: jane_doe
name: Mme Jane Doe
company: Super Company
featured: false
photo: /images/speakers/jane_doe.jpg
socials:
- icon: twitter
link: 'https://twitter.com/jane_doe'
name: '@jane_doe'
- icon: github
link: 'https://github.com/jane_doe'
name: jane_doe
shortBio: "Short bio"
companyLogo: /images/speakers/company/company.jpg
country: 'City, Country'
```
The body of the file is used as long bio.
### Sessions
<!> this is not yet stable
A sessions should have this params :
```yaml
id: an_id
title: Super mega title
language: Français
complexity: Beginner
tags:
- Category
presentation: URL of slides
videoId: Youtub video id
speakers:
- speaker id
talkType: Keynote
```
The body of the file is used as description.
### Team
A team member should have these params:
```yaml
title: Name
type: core
subtitle: ''
photo: photo.jpg
socials:
- link: 'https://twitter.com/XXX'
name: Twitter
- link: 'https://www.linkedin.com/XXX'
name: LinkedIn
```
### Blog
A blog should have these params:
```yaml
title: Title
brief: Short brief
image: /images/blog/photo.jpeg
date: 2019-01-20
draft: false
```
And of course, the body is the blog post.
### TODO Schedule
Development scheduled to summer 2019.
### FAQ, Code of Conduct, ...
just classique markdown file, this the `menu.main.weight: 80` to be displayed into the navbar.
### Notes
* We focus on English and French in this theme, so with other language, you should add months into the `layouts/partials/date-short.html`
## License
MIT, see [LICENSE](https://github.com/jweslley/hugo-conference/blob/master/LICENSE).

@ -0,0 +1,9 @@
---
title: "{{ replace .TranslationBaseName "-" " " | title }}"
date: {{ .Date }}
image: "a header image"
brief: "A short brief"
draft: true
---
TODO

@ -0,0 +1,6 @@
---
title: "{{ replace .TranslationBaseName "-" " " | title }}"
---
{{< hero >}}
{{< /hero >}}

@ -0,0 +1,15 @@
---
title: "{{ replace .TranslationBaseName "-" " " | title }}"
date: {{ .Date }}
type: partner
category: platinium
website: 'https://www.airbus.com/'
logo: /images/partners/logo-airbus.png
socials:
- name: twitter
url: 'https://twitter.com/airbus'
- name: linkedin
url: 'https://www.linkedin.com/in/airbus'
---
TODO Description

@ -0,0 +1,15 @@
---
id: XXX
title: lorem ipsum
language: Français
complexity: Débutant
talkType: Conférence
speakers:
- guillaume_membre
tags:
- IOT
presentation: http://slideshare.....
videoId: Youtube Id
---
Full description

@ -0,0 +1,17 @@
---
id: "{{ .TranslationBaseName | title }}"
name: "{{ replace .TranslationBaseName "-" " " | title }}"
company: XXX Corp
featured: false
photo: /images/speakers/alexandre_delattre.jpg
socials:
- icon: twitter
link: 'https://twitter.com/XXX'
name: '@XXX'
shortBio: lorem ipsum ...
companyLogo: /images/speakers/company/YYY.jpg
country: 'Toulouse, France'
---
Full bio

@ -0,0 +1,14 @@
---
title: XXX
type: core
subtitle: XXX
photo: /images/people/kevin_davin.png
socials:
- link: 'https://twitter.com/XXX'
name: Twitter
- link: 'https://github.com/XXX'
name: Github
- link: www.linkedin.com/in/XXX
name: LinkedIn
---

@ -0,0 +1,78 @@
##########
# Header #
##########
[language_switch]
other = "Dil değiştirmek için"
########
# Home #
########
[home_tickets_action]
other = "Buy Ticket"
[home_tickets_soldout]
other = "Sold Out"
[home_tickets_close]
other = "Not available"
[home_location_direction]
other = "Direction"
##########
# Footer #
##########
[footer_share]
other = "Share"
[facebook_share_label]
other = "Share on Facebook"
[twitter_share_text]
other = "#ÖzgürKon2020 will be held on May 16-17 online with @oydorgtr! Follow on @OzgurKonorg, for details: ozgurkon.org"
[twitter_share_label]
other = "Share on Twitter"
[footer_follow_blog]
other = "Follow our"
[footer_follow_blog_blog]
other = "blog"
[footer_follow_us]
other = "Follow us"
[footer_about]
other = "About"
[footer_previous_edition]
other = "Previous edition"
[footer_become_partners]
other = "Become partner"
[footer_become_partners_label]
other = "Partnership Proposition"
[footer_coc]
other = "Code of Conduct"
################
# Subscription #
################
[newsletter]
other = "Newsletter"
[subscribe_notice]
other = "No spam, only the latest news and updates!"
[subscribe_action]
other = "Subscribe"
[impressum]
other = "Data Protection Policy"

@ -0,0 +1,77 @@
##########
# Header #
##########
[language_switch]
other = "Switch to"
########
# Home #
########
[home_tickets_action]
other = "Biletler"
[home_tickets_soldout]
other = "Tükendi!"
[home_tickets_close]
other = "Kapandı"
[home_location_direction]
other = "Yol tarifi"
##########
# Footer #
##########
[footer_share]
other = "Paylaş"
[facebook_share_label]
other = "Facebook'ta paylaş"
[twitter_share_text]
other = "#ÖzgürKon2020 16-17 Mayıs 2020'de @oydorgtr tarafından çevrimiçi olarak düzenleniyor! Duyurular için: @OzgurKonorg detaylar için: ozgurkon.org"
[twitter_share_label]
other = "Twitter'da paylaş"
[footer_follow_blog]
other = " "
[footer_follow_blog_blog]
other = "blog"
[footer_follow_us]
other = "Bizi takip edin"
[footer_about]
other = "Hakkında"
[footer_previous_edition]
other = "Önceki etkinlikler"
[footer_become_partners]
other = "Sponsor olun"
[footer_become_partners_label]
other = "Sponsor olmayı düşünür müsünüz?"
[footer_coc]
other = "Kaynaşma yönergeleri (CoC)"
################
# Subscription #
################
[newsletter]
other = "Bülten"
[subscribe_notice]
other = "Etkinlik hakkındaki gelişmeler için, spam atmayacağız!"
[subscribe_action]
other = "Abone ol"
[impressum]
other = "Veri Koruma Politikası"

@ -0,0 +1,30 @@
const {readFileSync, writeFileSync} = require('fs');
const {sync: glob} = require('glob');
const {Logger, LogLevel} = require('plop-logger');
const {colorEmojiConfig} = require('plop-logger/lib/extra/colorEmojiConfig');
Logger.config = colorEmojiConfig;
const logger = Logger.getLogger('icons');
logger.level = LogLevel.All;
let svgFiles = `src/icons/*.svg`;
logger.info('SVG aggregation of', svgFiles);
const data = glob(svgFiles)
.map(file => {
const parts = file.split('/');
const id = parts[parts.length - 1].split('.')[0];
logger.debug('handle', id);
return readFileSync(file, 'utf8')
.replace(`<svg xmlns="http://www.w3.org/2000/svg"`, `\t<symbol id="${id}"`)
.replace(`</svg>`, `\t</symbol>`);
}
);
const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" class="visually-hidden">
${data.join('\n')}
</svg>`;
const file = 'static/icons.svg';
logger.info('Generate', file);
writeFileSync(file, svg, {flag: 'w'});

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 638 KiB

@ -0,0 +1,3 @@
{{ define "main"}}
<h1 class="error">Oops!, page {{ .Permalink }} not found !</h1>
{{ end }}

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html lang="{{ $.Site.LanguageCode | default " en" }}">
{{ partial "head.html" . }}
<body class="{{ .Kind }} {{ anchorize .URL }} {{ .Section }}">
{{ readFile "themes/devfest-theme-hugo/static/icons.svg" | safeHTML }}
{{ block "header" . }}
{{ partial "header.html" . }}
{{ end }}
<main>
{{ block "main" . }}
<!-- Missing main block -->
{{ end }}
</main>
{{ block "footer.html" . }}
{{ partial "footer.html" . }}
{{ end }}
<script src="/theme.js?v=2" async></script>
{{ block "scripts" . }}
<!-- No extra scripts -->
{{ end }}
</body>
</html>

@ -0,0 +1,15 @@
{{ define "main" }}
{{ .Content }}
<hr>
<ul class="pages">
{{ range .Pages }}
<li>
<a href="{{ .URL }}"> {{ .Title }}</a>
</li>
{{ end }}
</ul>
{{ end }}

@ -0,0 +1,14 @@
{{ define "main" }}
<div class="hero">
<h1>{{ .Title }}</h1>
<div class="description">
{{ .TableOfContents }}
</div>
</div>
<section class="content">
{{ .Content }}
</section>
{{ end }}

@ -0,0 +1,31 @@
{{ define "main" }}
{{ $lang := $.Page.Language.Lang }}
<div class="hero">
<h1>{{ $.Page.Params.Title }}</h1>
<div class="description">
{{ .Content }}
</div>
</div>
<section class="blogs">
{{ range .Pages }}
<article>
<a class="visually-hidden" aria-hidden="true" href="{{ .Permalink }}">{{ .Title }}</a>
<a class="blog" href="{{ .Permalink }}">
<div class="img" style="background-image: url({{ .Params.image }});"></div>
<div class="info">
<div class="date">{{ partial "date-short.html" (dict "time" .Date "lang" $lang) }}</div>
<h2>{{ .Title }}</h2>
<span class="brief">{{ .Params.brief }}</span>
<!-- <div class="reading">{{ .ReadingTime }}</div> -->
<p>{{ .Summary }} ...</p>
</div>
</a>
</article>
{{ end }}
</section>
{{ end }}

@ -0,0 +1,22 @@
{{ define "main" }}
<div class="hero" >
<div class="img" style="color: {{ .Params.color | default "#fff" }};background-image: url({{ .Params.image }})"></div>
<div class="description">
<h1>
<span>{{ .Title }}</span>
<small>{{ .Params.brief }}</small>
</h1>
<!--
<hr>
{{ .TableOfContents }} -->
</div>
</div>
<section class="content">
{{ .Content }}
</section>
{{ end }}

@ -0,0 +1,6 @@
{{ define "main" }}
{{ .Content }}
{{ end }}

@ -0,0 +1,5 @@
{{- $monthFr := (slice "janvier" "février" "march" "avril" "mai" "juin" "juillet" "août" "septembre" "octobre" "novembre" "décembre")}}
{{- $time := time (index . "time") }}
{{- $lang := index . "lang" }}
{{ $time.Day }}
{{ if eq $lang "fr" }}{{ index $monthFr (sub $time.Month 1) }}{{- else }} {{ dateFormat "January" $time}}{{ end }}

@ -0,0 +1,13 @@
{{ $monthFr := (slice "jan." "fév." "mar." "avr." "mai" "juin" "juil." "aoû." "sep." "oct." "nov." "déc.")}}
{{ $time := time (index . "time") }}
{{ $lang := index . "lang" }}
{{ $time.Day }}
{{ if eq $lang "fr" }}
{{ index $monthFr (sub $time.Month 1)}}
{{ else }}
{{ dateFormat "Jan." $time}}
{{ end }}
{{ $time.Year }}

@ -0,0 +1,87 @@
<footer>
<div class="bottom-content">
<div class="footer-header">
<div class="share">
<header>{{ i18n "footer_share" }}</header>
<ul class="social-list">
{{ range .Site.Data.footer.share }}
<li>
{{ $url := .URL | relLangURL }}
{{ partial "social-sharer.html" (dict "context" . "url" $url "name" .name) }}
{{ end }}
</ul>
</div>
<div class="blog">
<header>
{{ i18n "footer_follow_blog" }} <a href="{{ "blog/" | relLangURL }}">{{ i18n "footer_follow_blog_blog" }}</a>
</header>
</div>
<div class="follow">
<header>{{ i18n "footer_follow_us" }}</header>
<ul class="social-list">
{{ range .Site.Data.footer.follow }}
<li>
<a href="{{ .url }}" class="social" rel="noreferrer" target="_blank">
{{ partial "icon.html" .name }}
{{ .name }}
</a>
</li>
{{ end }}
</ul>
</div>
<div class="email">
<a href="mailto:{{ .Site.Params.email }}">
{{ partial "icon.html" "email" }}
{{- .Site.Params.email -}}
</a>
</div>
</div>
<hr>
<div class="footer-content">
{{ range .Site.Data.footer.content }}
<section>
<header>{{ i18n .title }}</header>
{{ if .links }}
<ul>
{{ range .links }}
<li>
<a href="{{ .url }}" {{ if .newTab }}target="_blank" rel="noopener" {{end}}>
{{ if .nameKey }}
{{ i18n .nameKey }}
{{ else }}
{{ .name }}
{{ end }}
</a>
</li>
{{ end }}
</ul>
{{ end }}
</section>
{{ end }}
{{ if .Site.Params.subscriptionUrl }}
<section class="subscribe">
<header>{{ i18n "newsletter" }}</header>
<p>{{ i18n "subscribe_notice" }}</p>
<a href="{{ .Site.Params.subscriptionUrl }}"
class="btn" rel="noreferrer" target="_blank">
{{ partial "icon.html" "subscribe" }}
{{- i18n "subscribe_action" -}}
</a>
</section>
{{ end }}
</div>
<hr>
<div class="footer-footer">
{{ if .Site.Params.logos.footer }}
<img src="{{ .Site.Params.logos.footer }}" alt="{{ .Site.Title }}">
{{ end }}
<div>{{ emojify .Site.Params.copyright }}</div>
</div>
</div>
</footer>

@ -0,0 +1,80 @@
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="Description" content="{{ .Site.Params.description }}">
{{ if eq (getenv "HUGO_ENV") "production" | or (eq .Site.Params.env "production") }}
{{/* NOTE: These Hugo Internal Templates can be found starting at
https://github.com/gohugoio/hugo/tree/master/tpl/tplimpl/embedded/templates */}}
{{- template "_internal/opengraph.html" . -}}
{{- template "_internal/google_news.html" . -}}
{{- template "_internal/schema.html" . -}}
{{- template "_internal/twitter_cards.html" . -}}
{{ template "_internal/google_analytics_async.html" . }}
{{ end }}
{{ hugo.Generator }}
<META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">
<title>{{ block "title" . }}{{ .Site.Title }} {{ with .Params.Title }} | {{ . }}{{ end }}{{ end }}</title>
{{ if .Site.Params.appleTouchIcon }}
<link rel="apple-touch-icon" sizes="180x180" href="{{ .Site.Params.appleTouchIcon }}?v=2">
{{ end }}
{{ if .Site.Params.favicon32 }}
<link rel="icon" type="image/png" sizes="32x32" href="{{ .Site.Params.favicon32 }}?v=2">
{{ end }}
{{ if .Site.Params.favicon16 }}
<link rel="icon" type="image/png" sizes="16x16" href="{{ .Site.Params.favicon16 }}?v=2">
{{ end }}
{{ if .Site.Params.manifest }}
<link rel="manifest" href="{{ .Site.Params.manifest }}">
{{ end }}
{{ if .Site.Params.themeColor }}
<meta name="theme-color" content="{{ .Site.Params.themeColor }}"/>
<meta name="msapplication-TileColor" content="#{{ .Site.Params.themeColor }}?">
{{ if .Site.Params.safariPinnedTab }}
<link rel="mask-icon" href="{{ .Site.Params.safariPinnedTab }}" color="{{ .Site.Params.themeColor }}">
{{ end }}
{{ end }}
{{ if .IsHome }}
<meta property="og:title" content="{{ .Site.Title }}" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://ozgurkon.org" />
<meta property="og:description" content="{{ $.Site.Params.description }}" />
<meta property="og:image" content="/tn.png" />
<meta property="og:site_name" content="ÖzgürKon 2020" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@OzgurKonorg" />
<meta name="twitter:title" content="ÖzgürKon 2020">
<meta name="twitter:description" content="{{ $.Site.Params.description }}">
<meta name="twitter:creator" content="@OzgurKonorg" />
<meta name="twitter:image" content="/tn.png">
{{ else }}
<meta property="og:title" content="{{ .Page.Title }} - {{ .Site.Title }}" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://ozgurkon.org" />
<meta property="og:description" content="{{ .Page.Summary }}" />
<meta property="og:image" content="/tn.png" />
<meta property="og:site_name" content="ÖzgürKon 2020" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@OzgurKonorg" />
<meta name="twitter:title" content="{{ .Page.Title }} - ÖzgürKon 2020">
<meta name="twitter:description" content="{{ .Page.Summary }}">
<meta name="twitter:creator" content="@OzgurKonorg" />
<meta name="twitter:image" content="/tn.png">
{{ end }}
<link href="{{ with .OutputFormats.Get "RSS" }}{{ .RelPermalink }}{{ end }}" rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}"/>
<link href="{{ with .OutputFormats.Get "RSS" }}{{ .RelPermalink }}{{ end }}" rel="feed" type="application/rss+xml" title="{{ .Site.Title }}"/>
<link href="https://fonts.googleapis.com/css?family=Roboto:400,500,700" rel="stylesheet">
<link rel="stylesheet" href="/theme-oyd.css" media="all">
{{ block "headextra" . }}
<!-- No extra headextra -->
{{ end }}
</head>

@ -0,0 +1,52 @@
<header>
<div class="top-content">
<div class="logo">
<a href="{{"/" | relLangURL}}">
<img src="{{ .Site.Params.logos.header }}" alt="logo {{ .Site.Title }}">
</a>
</div>
<input type="checkbox" id="menu-burger" class="visually-hidden" aria-label="Menu"/>
<label for="menu-burger">
{{ partial "icon.html" "menu" }}
{{ partial "icon.html" "close" }}
</label>
<nav>
<ul class="menu">
{{- $currentPage := . -}}
{{ range .Site.Menus.main }}
<li class="{{ if $currentPage.IsMenuCurrent "main" . }}active{{ end }}" >
{{ if (hasPrefix .URL "http") }}
<a class="external" rel="noreferrer" target="_blank" href="{{ .URL }}" title="{{ .Name }}">{{ .Name }}</a>
{{ else if (isset .Page.Params "icon") }}
<a href="{{ .URL | relLangURL }}" class="link-icon" title="{{ .Name }}">
{{ partial "icon.html" .Page.Params.icon }}
</a>
{{ else }}
<a href="{{ .URL | relLangURL }}">{{ .Name }}</a>
{{ end }}
</li>
{{ end }}
</ul>
<ul class="languages">
{{ range .Translations }}
<li>
<a class="lang lang-{{ .Language.LanguageName }} {{ if eq .Language $.Site.Home.Language }}active{{ end }}"
title="{{ .Language.LanguageName }}"
href="{{ .RelPermalink }}"
role="radio"
aria-label="{{ i18n "language_switch" }} {{ .Language.LanguageName }}"
aria-checked="{{ if eq .Language $.Site.Home.Language }}true{{ else }}false{{ end }}">
{{- i18n "language_switch" }} {{ .Language.LanguageName -}}
</a>
</li>
{{ end }}
</ul>
</nav>
</div>
</header>

@ -0,0 +1,3 @@
<svg class="icon icon-{{ . }}">
<use xlink:href="#{{ . }}"/>
</svg>

After

Width:  |  Height:  |  Size: 68 B

@ -0,0 +1,4 @@
<a class="partner"
href="{{ .URL }}"
title="{{ .Title }}"
style="background-image: url({{ .Params.logo }});">{{ .Title }}</a>

@ -0,0 +1,50 @@
<a href="{{ .Permalink }}">
<h4 title="{{ .Title }}">
{{ .Title }}
<span class="language {{ anchorize .Params.language }}"></span>
</h4>
<hr>
<div class="info">
{{ if .Params.tags }}
<div class="tags">
{{ range .Params.tags }}
{{ range first 1 (where $.Site.Data.categories "key" .) }}
<span>{{ .name }}</span>
{{ end }}
{{ end }}
</div>
{{ end }}
{{ if .Params.level }}
<div class="complexity" title="{{ .Params.level }}">
<svg><use xlink:href="#level-{{ .Params.level }}"></use></svg>
</div>
{{ end }}
{{ if .Params.presentation }}
<div class="presentation">{{ partial "icon.html" "slides" }}</div>
{{ end }}
{{ if .Params.videoId }}
<div class="video">{{ partial "icon.html" "youtube" }}</div>
{{ end }}
</div>
{{ if .Params.speakers }}
<ul class="speakers {{ if eq 1 (len .Params.speakers) }}single{{ else }}multi{{ end }}">
{{ range where $.Site.RegularPages "Params.key" "in" .Params.speakers }}
<li class="speaker">
<div class="speaker-img" style="background-image: url({{ .Params.photoURL }});"></div>
<strong class="speaker-name">{{ .Params.name }}</strong>
<!-- <div class="speaker-company">{{ .Params.company }}</div>-->
</li>
{{ end }}
</ul>
{{ end }}
</a>

@ -0,0 +1,46 @@
<a href="{{ .URL }}">
<h2>
{{ .Title }}
<span class="language {{ anchorize .Params.language }}"></span>
</h2>
<hr>
<div class="info">
{{ if.Params.tags }}
<div class="tags">
{{ range .Params.tags }}
{{ range first 1 (where $.Site.Data.categories "key" .) }}
<span>{{ .name }}</span>
{{ end }}
{{ end }}
</div>
{{ end }}
<div class="complexity">{{ .Params.level }}</div>
<div class="type type-{{ anchorize .Params.format }}">{{ .Params.format }}</div>
<div>
{{ if .Params.presentation }}
<div class="presentation">{{ partial "icon.html" "slides" }}</div>
{{ end }}
{{ if .Params.videoId }}
<div class="video">{{ partial "icon.html" "youtube" }}</div>
{{ end }}
</div>
</div>
<ul class="speakers">
{{ range where .Site.RegularPages "Params.key" "in" .Params.speakers }}
<li class="speaker">
<div class="speaker-img" style="background-image: url({{ .Params.photoURL }});"></div>
<strong class="speaker-name">{{ .Params.name }}</strong>
<span class="speaker-country">{{ .Params.country }}</span>
<div class="speaker-company">{{ .Params.company }}</div>
</li>
{{ end }}
</ul>
</a>

@ -0,0 +1,8 @@
{{- if (eq .name "twitter") -}}
{{ $text := i18n "twitter_share_text" }}
<a href="https://twitter.com/share?url={{ .url }}&text={{ $text }}"
class="social" rel="noreferrer" target="_blank">
{{ partial "icon.html" .name }}
{{- i18n "twitter_share_label" -}}
</a>
{{- end -}}

@ -0,0 +1,9 @@
<a class="visually-hidden" href="{{ .URL }}">{{ .Params.name }}</a>
<a class="speaker" href="{{ .URL }}">
<div role="presentation" class="speaker-img" style="background-image: url({{ .Params.photoURL }});"></div>
<div class="info">
<div class="speaker-company">{{ .Params.company }}</div>
<strong class="speaker-name">{{ .Params.name }}</strong>
<span class="speaker-country">{{ .Params.city }}</span>
</div>
</a>

@ -0,0 +1,15 @@
<div class="photo" role="presentation" style="background-image: url('{{ relURL (path.Join "images" "team" .Params.photo) }}');"></div>
<div class="label">
<h3>{{ .Title }}</h3>
<h4>{{ .Params.subtitle }}</h4>
<ul class="socials">
{{ range .Params.socials }}
<li>
<a class="social" rel="noreferrer" href="{{ .link }}" target="_blank">
{{ partial "icon.html" (lower .name) }}
{{- .name -}}
</a>
</li>
{{ end }}
</ul>
</div>

@ -0,0 +1,15 @@
<div class="ticket" {{ if .soldOut }}aria-disabled="true"{{end}}>
<div class="ticket-name">{{ .name }}</div>
<div class="ticket-price">{{ .price }} {{ .currency }}</div>
<div class="ticket-date">{{ .starts }} - {{ .ends }}</div>
<div class="ticket-info">{{ .info }}</div>
{{ if .soldOut }}
<span class="btn" aria-disabled="true">{{ i18n "home_tickets_soldout" }}</span>
{{ else }}
<a href="{{ .url }}" class="btn primary" rel="noreferrer" target="_blank">
{{ partial "icon.html" "ticket" }}
{{- i18n "home_tickets_action" -}}
</a>
{{ end }}
</div>

@ -0,0 +1,5 @@
{{ define "main" }}
{{ .Content }}
{{ end }}

@ -0,0 +1,63 @@
{{ define "main" }}
<section class="header">
<div class="card" style="background-image: url({{ .Params.logo }});"></div>
<h1>{{ .Title }}</h1>
{{ if .Params.website }}
<a href="{{ .Params.website }}">{{ .Params.website }}</a>
{{ end }}
</section>
<section class="content">
{{ .Content }}
</section>
{{ if .Params.why }}
<section class="why">
<h2>{{index .Site.Data.partner .Params.lang "why" }}</h2>
<p>{{ .Params.why }}</p>
</section>
{{ end }}
{{ if .Params.socials }}
<section class="socials">
<h2>{{index .Site.Data.partner .Params.lang "socials" }}</h2>
<ul>
{{ range .Page.Params.socials }}
<li>
<a href="{{ .link }}" class="social" rel="noreferrer" target="_blank">
{{ partial "icon.html" .icon }}
{{ .name }}
</a>
</li>
{{ end }}
</ul>
</section>
{{ end }}
{{ if .Params.jobs }}
<section class="jobs">
<h2>{{index .Site.Data.partner .Params.lang "jobs" }}</h2>
<ul>
{{ range .Page.Params.jobs }}
<li class="job">
<header>
<a href="{{ .url }}" rel="noreferrer" target="_blank">{{ .title }}</a>
</header>
<div class="city">
{{ partial "icon.html" "map-marker" }}
{{ .city }}
</div>
<a href="mailto:{{ .contact }}" class="contact">
{{ partial "icon.html" "email" }}
{{ .contact }}
</a>
</li>
{{ end }}
</ul>
</section>
{{ end }}
{{ end }}

@ -0,0 +1,111 @@
{{ define "main" }}
{{ .Content }}
{{ $lang := $.Page.Language.Lang }}
<nav class="day-tabs">
{{ range $day := $.Site.Data.schedule }}
<a href="#day_{{$day.day}}">{{- partial "date-long.html" (dict "time" .day "lang" $lang) }}</a>
{{ end }}
</nav>
{{ $.Scratch.Set "maxEnd" 0 }}
{{ range $.Site.Data.slots }}
{{ if gt .row.end ($.Scratch.Get "maxEnd") }}
{{ $.Scratch.Set "maxEnd" .row.end }}
{{ end}}
{{ end }}
{{ $maxEnd := $.Scratch.Get "maxEnd" }}
<section class="schedule{{ if $.Params.horizontal}} horizontal{{ end }}">
{{ range $day := $.Site.Data.schedule }}
{{ $time := split $day.start ":" }}
{{ $dayStartH := index $time 0 }}
{{ $dayStartM := index $time 1 }}
{{ $time := split $day.end ":" }}
{{ $dayEndH := index $time 0 }}
{{ $dayEndM := index $time 1 }}
<article id="day_{{$day.day}}" class="day"
style="--rooms: {{ len .rooms }}; --end: {{ $maxEnd }};">
<h2>{{- partial "date-long.html" (dict "time" .day "lang" $lang) }}</h2>
{{ with (index .rooms 0) }}
{{ range .slots }}
{{ $slot := index (where $.Site.Data.slots "key" .slot) 0 }}
{{ $time := split $slot.start ":" }}
{{ $hh := index $time 0 }}
{{ $mm := index $time 1 }}
<div class="slot" style="--duration: {{ $slot.duration }}; --row-start: {{ $slot.row.start }}; --row-end: {{ $slot.row.end }};">
<span class="hh">{{ $hh }}</span>
<span class="mm">{{ $mm }}</span>
</div>
{{ end }}
{{ end }}
{{ range $index, $room := .rooms }}
{{ range where (where $.Site.Data.rooms "key" $room.room) "skip" "!=" true }}
<!-- Room {{ $room.room }} -->
<div class="room {{ if (modBool $index 2)}}even{{end}}" style="--room: {{ $index }};">
<h3>
{{ .label }}
{{ if .description }}
<small>{{ .description }}</small>
{{ end }}
</h3>
</div>
{{ range $room.slots }}
{{ $sessionPage := index (where $.Site.AllPages "Params.key" .talk ) 0}}
{{ $slot := index (where $.Site.Data.slots "key" .slot) 0 }}
{{ $time := split $slot.start ":" }}
{{ $hh := index $time 0 }}
{{ $mm := index $time 1 }}
<div class="session format-{{$sessionPage.Params.format}} tag-{{ anchorize (delimit ($sessionPage.Params.tags | default (slice)) " " ) }}"
style="--room: {{ $index }}; --row-start: {{ $slot.row.start }}; --row-end: {{ $slot.row.end }};">
<span class="start">
<span class="hh">{{ $hh }}</span>
<span class="mm">{{ $mm }}</span>
</span>
{{ partial "schedule-session" $sessionPage }}
</div>
{{ end }}
<!-- End room {{ $room.room }} -->
{{ end }}
{{ end }}
</article>
{{ end }}
</section>
<!--<a href="#" class="goto-top" aria-label="Top">⬆</a>-->
{{ end }}
{{ define "scripts" }}
<script>
function checkLinks() {
const currentDay = document.location.hash;
if (!currentDay) {
let firstDay = document.querySelector('nav.day-tabs a');
if (firstDay) {
firstDay.click();
}
}
document.querySelectorAll('nav.day-tabs a')
.forEach(function(lnk) {
lnk.classList.toggle('active', lnk.getAttribute('href') === currentDay);
});
}
window.addEventListener("load", checkLinks, false);
window.addEventListener("hashchange", checkLinks, false);
</script>
{{ end }}

@ -0,0 +1,17 @@
{{ define "main" }}
{{ .Content }}
<section>
<ul class="talks">
{{ $sessions := where .Site.AllPages ".Section" "sessions" }}
{{ $types := (slice "conference" "quickie" "keynote") }}
{{ range sort $sessions ".Title" }}
{{ if intersect (slice .Params.format) $types }}
<li class="talk tag-{{ anchorize (delimit (.Params.tags | default (slice)) "" ) }}">{{ partial "session.html" . }}</li>
{{ end }}
{{ end }}
</ul>
</section>
{{ end }}

@ -0,0 +1,63 @@
{{ define "main" }}
<section class="talk">
<header class="tag-{{ anchorize (delimit .Params.tags "" ) }}">
<div class="tags">
{{ range .Params.tags }}
{{ range first 1 (where $.Site.Data.categories "key" .) }}
<span>{{ .name }}</span>
{{ end }}
{{ end }}
</div>
<h1 class="text">{{ .Title }}</h1>
<span class="language {{ anchorize .Params.language }}"></span>
</header>
<div class="info">
<div class="complexity">{{ .Params.level }}</div>
<div class="type type-{{ anchorize .Params.format }}">{{ .Params.format }}</div>
<div class="detail">
<ul class="speakers">
{{ range where .Site.RegularPages "Params.key" "in" .Params.speakers }}
<li>
<a class="visually-hidden" aria-hidden="true" href="/speakers/{{ .Params.key }}">{{ .Params.name }}</a>
<a class="speaker" href="/speakers/{{ .Params.key }}">
<div class="speaker-img" style="background-image: url({{ .Params.photoURL }});"></div>
<strong class="speaker-name">{{ .Params.name }}</strong>
<span class="speaker-country">{{ .Params.city }}</span>
<div class="speaker-company">{{ .Params.company }}</div>
</a>
</li>
{{ end }}
</ul>
<div class="content">{{ .Content }}</div>
</div>
</div>
<div class="media">
{{ if .Params.videoId }}
<div class="video" style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
<iframe src="//www.youtube.com/embed/{{ .Params.videoId }}?autoplay=1"
style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen
title="YouTube Video"></iframe>
</div>
{{ end }}
{{ if .Params.presentation }}
<a class="social-slides"
href="{{ .Params.presentation }}"
rel="noreferrer"
target="_blank">
{{ partial "icon.html" "slides" }}
Voir les slides
</a>
{{ end }}
</div>
</section>
{{ end }}

@ -0,0 +1,8 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<div class="album">
{{ range (split (.Get "images") ",") }}
<div class="img" style="background-image: url('{{ . }}');"></div>
{{ end }}
<div class="inner">{{ .Inner }}</div>
</div>

@ -0,0 +1,11 @@
{{ $_hugo_config := `{ "version": 1 }` }}
{{ $icon := .Get "icon" }}
{{ $url := .Get "url" }}
{{ $label := .Get "label" }}
<a class="btn primary" href="{{ $url }}">
{{ if and $icon (not (eq $icon "right")) }}{{ partial "icon.html" $icon }}{{ end }}
{{- $label -}}
{{ if eq $icon "right" }}{{ partial "icon.html" $icon }}{{ end }}
</a>

@ -0,0 +1,6 @@
<div class="centered-img">
<img
src="{{.Get "src" }}"
alt="{{.Get "alt" | default "" }}"
width="{{.Get "width" | default "auto" }}">
</div>

@ -0,0 +1,7 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<div class="hero">
<h1>{{ $.Page.Title }}</h1>
<div class="description">
{{ .Inner }}
</div>
</div>

@ -0,0 +1,22 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<section class="info container {{ .Get "class" }}">
<div class="wrapper">
<div class="inner">
{{ .Inner }}
</div>
{{ with .Get "what" }}
<div class="numbers">
{{range (split . ",") }}
<div class="number">
{{ $labelValue := (split . ":") }}
{{ $label := (index $labelValue 0) }}
{{ $value := (index $labelValue 1) }}
<strong>{{ $value }}</strong>
<div>{{ $label }}</div>
</div>
{{ end }}
</div>
{{ end }}
</div>
</section>

@ -0,0 +1,23 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<section class="location">
<div class="map" style="background-image: url('{{ .Get "image" }}');"></div>
<div class="description">
<div class="inner">
{{ .Inner }}
</div>
<div class="direction">
{{ .Get "address" }}
<a href="https://www.oyd.org.tr/"
class="btn btn-icon-only" target="_blank" rel="noreferrer"
aria-label="{{ i18n "home_location_direction" }}">
{{ partial "icon.html" "direction" }}
</a>
</div>
</div>
</section>

@ -0,0 +1,16 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<section class="speakers">
<div class="inner">
{{ .Inner }}
</div>
<ul class="shuffle">
{{ range where $.Site.AllPages "Params.feature" true }}
<li>
{{ partial "speaker.html" . }}
</li>
{{ end }}
</ul>
</section>

@ -0,0 +1,9 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<section class="subscribe {{ .Get "class" }}">
<div class="inner">{{ .Inner }}</div>
<a href="{{ .Site.Params.subscriptionUrl }}"
class="btn primary" rel="noreferrer" target="_blank">
{{ partial "icon.html" "subscribe" }}
{{ i18n "subscribe_action" }}
</a>
</section>

@ -0,0 +1,4 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<section class="tickets">
{{ .Inner }}
</section>

@ -0,0 +1,3 @@
<svg class="icon icon-{{ .Get 0 }}">
<use xlink:href="#{{ .Get 0 }}"/>
</svg>

After

Width:  |  Height:  |  Size: 78 B

@ -0,0 +1,19 @@
{{ $_hugo_config := `{ "version": 1 }` }}
{{ $imgLabel := .Get "imgLabel" }}
{{ $logo := .Site.Params.logos.jumbo }}
<div class="jumbo">
<div class="jumbo-cover" style="background-image: url('{{ .Get "img" }}')" {{ if $imgLabel }}aria-label="{{ $imgLabel }}"{{ end }}></div>
<img id="jumbo-img" src="{{ .Get "img" }}" />
<div id="jumbo-overlay"></div>
<div class="inner-wrapper">
{{ if $logo }}
<img class="jumbo-logo" src="{{ $logo }}" alt="logo {{ .Site.Title }}">
{{ end }}
<div class="inner">
{{ .Inner }}
</div>
</div>
<div class="scroll-down" aria-hidden="true">
{{ partial "icon.html" "scroll-down" }}
</div>
</div>

@ -0,0 +1,21 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<section class="partners">
<div class="inner">
{{ .Inner }}
</div>
{{ $site := .Site }}
{{ range (split (.Get "categories") ",") }}
<section class="partners-group partner-{{ . }}">
<h3 class="fancy">
<span>{{ . }}</span>
</h3>
<ul>
{{ $partners := where $site.AllPages "Params.category" . }}
{{ range sort $partners ".Params.order" "asc" }}
<li>{{ partial "partner.html" . }}</li>
{{ end }}
</ul>
</section>
{{ end }}
</section>

@ -0,0 +1,17 @@
{{ $_hugo_config := `{ "version": 1 }` }}
{{ $site := .Site }}
{{ range (split (.Get "types") ",") }}
<section class="members">
{{ $typeLabel := (split . "=") }}
{{ $type := (index $typeLabel 0) }}
{{ $label := (index $typeLabel 1) }}
<h2>{{ $label }}</h2>
<ul class="members shuffle">
{{ range where $site.AllPages "Params.type" $type }}
<li>{{ partial "team.html" . }}</li>
{{ end }}
</ul>
</section>
{{ end }}

@ -0,0 +1,23 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<div class="ticket" {{ if .Get "soldOut" }}aria-disabled="true"{{end}}>
<div class="ticket-name">{{ .Get "name "}}</div>
<div class="ticket-price">{{ .Get "price" }}</div>
<div class="ticket-date">
{{ $lang := $.Page.Language.Lang }}
{{ partial "date-short.html" (dict "time" (.Get "starts") "lang" $lang) }}
-
{{ partial "date-short.html" (dict "time" (.Get "ends") "lang" $lang) }}
</div>
<div class="ticket-info">{{ .Get "info" }}</div>
{{ if .Get "soldOut" }}
<span class="btn" aria-disabled="true">{{ i18n "home_tickets_soldout" }}</span>
{{ else if .Get "close" }}
<span class="btn" aria-disabled="true">{{ i18n "home_tickets_close" }}</span>
{{ else }}
<a href="{{ .Get "url" }} "class="btn primary" rel="noreferrer" target="_blank">
{{ partial "icon.html" "ticket" }}
{{- i18n "home_tickets_action" -}}
</a>
{{ end }}
</div>

@ -0,0 +1,15 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<section class="youtube-section {{ .Get "class" }}">
<div class="inner">
<h2>
{{ .Get "title" }}
</h2>
<div class="youtube-player" style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
<iframe src="//www.youtube.com/embed/{{ .Get "link" }}"
style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen
title="YouTube Video"></iframe>
</div>
</div>
</section>

@ -0,0 +1,14 @@
{{ define "main" }}
{{ .Content }}
<section>
<ul class="speakers shuffle">
{{ $speakers := where .Site.AllPages ".Section" "speakers" }}
{{ range where $speakers ".Kind" "page" }}
<li>{{ partial "speaker.html" . }}</li>
{{ end }}
</ul>
</section>
{{ end }}

@ -0,0 +1,61 @@
{{ define "main" }}
<div class="hero">
<header>
<div class="speaker-img" style="background-image: url({{ .Page.Params.photoURL }});"></div>
<div>
<h1>{{ .Page.Params.name }}</h1>
<ul class="socials">
{{ range .Page.Params.socials }}
<li>
<a href="{{ .link }}" class="social" rel="noreferrer" target="_blank">
{{ partial "icon.html" .icon }}
{{ .name }}
</a>
</li>
{{ end }}
</ul>
</div>
</header>
<div class="description">
<ul class="talks">
{{ range where .Site.RegularPages "Params.speakers" "intersect" (slice .Page.Params.key) }}
<li>
<a href="{{ .Permalink }}" class="visually-hidden">{{ .Title }}</a>
<a href="{{ .Permalink }}" class="talk tag-{{ anchorize (delimit .Params.tags "" ) }}">
<div class="tags">
{{ range .Params.tags }}
{{ range first 1 (where $.Site.Data.categories "key" .) }}
<span>{{ .name }}</span>
{{ end }}
{{ end }}
</div>
<span class="language {{ anchorize .Params.language }}"></span>
<h3 class="text">{{ .Title }}</h3>
</a>
</li>
{{ end }}
</ul>
</div>
</div>
<section class="speaker">
<header>
<h2>{{ .Page.Params.city }}</h2>
<div class="speaker-company">{{ .Page.Params.company }}</div>
</header>
<div class="bio">
{{ .Content }}
</div>
</section>
{{ end }}

@ -0,0 +1,15 @@
{{ define "main" }}
<div class="hero">
<h1>{{ .Title }}</h1>
</div>
<section>
<ul class="talks shuffle">
{{ range where .Pages ".Params.title" "ne" "Office Hours" }}
<li class="talk">{{ partial "session.html" . }}</li>
{{ end }}
</ul>
</section>
{{ end }}

@ -0,0 +1,5 @@
{{ define "main" }}
{{ .Content }}
{{ end }}

@ -0,0 +1,11 @@
{{ define "main" }}
<div class="hero">
<h1>{{ .Title }}</h1>
</div>
<section class="content">
{{ .Content }}
</section>
{{ end }}

@ -0,0 +1,35 @@
{
"name": "ozgurkon-theme-hugo",
"version": "1.0.0",
"description": "A theme for a conference website. Forked from DevFest Toulouse 2019",
"repository": "https://github.com/GDGToulouse/devfest-theme-hugo",
"author": "Özcan Oğuz <ozcan@oyd.org.tr>, Igor Laborie <ilaborie@gmail.com>",
"license": "AGPL-3.0-or-later",
"private": false,
"scripts": {
"watch:script": "rollup -c --watch",
"watch:style": "node-sass src/style/theme.scss -o static --watch",
"start": "run-p watch:*",
"build:icons": "node icons.js",
"build:script": "rollup -c rollup.config.prod.js",
"build:style": "node-sass src/style/theme.scss -o static; postcss static/theme.css --replace",
"build": "run-p build:*"
},
"devDependencies": {
"@babel/core": "^7.5.4",
"@babel/polyfill": "^7.2.5",
"@babel/preset-env": "^7.5.4",
"@types/js-yaml": "^3.12.1",
"cssnano": "^4.1.8",
"node-sass": "^4.11.0",
"npm-run-all": "^4.1.5",
"plop-logger": "^3.0.0",
"postcss-cli": "^6.1.3",
"postcss-preset-env": "^6.7.0",
"rollup": "^1.19.4",
"rollup-plugin-babel": "^4.3.1",
"rollup-plugin-node-resolve": "^5.2.0",
"rollup-plugin-uglify": "^6.0.1",
"sass-mq": "^5.0.1"
}
}

@ -0,0 +1,9 @@
module.exports = {
plugins: [
require('postcss-preset-env')({
autoprefixer: {grid: true},
stage: 3
}),
require('cssnano')({preset: 'default'})
]
};

@ -0,0 +1,7 @@
User-agent: *
# robotstxt.org - if ENV production variable is false robots will be disallowed.
{{ if eq (getenv "HUGO_ENV") "production" | or (eq .Site.Params.env "production") }}
Disallow:
{{ else }}
Disallow: /
{{ end }}

@ -0,0 +1,30 @@
import resolve from 'rollup-plugin-node-resolve';
import babel from 'rollup-plugin-babel';
const {Logger, LogLevel} = require('plop-logger');
const {colorEmojiConfig} = require('plop-logger/lib/extra/colorEmojiConfig');
Logger.config = colorEmojiConfig;
const logger = Logger.getLogger('icons');
logger.level = LogLevel.All;
const globals = {firebase: 'firebase'};
export default {
input: 'src/script/main.js',
output: [
{file: 'static/theme.js', format: 'esm', globals}
],
plugins: [
resolve(),
babel({
exclude: 'node_modules/**' // only transpile our source code
})
],
external: [
'firebase',
'firebase/firestore'
],
onwarn(warning) {
logger.warn(warning.message, warning);
}
}

@ -0,0 +1,10 @@
import {default as defaultConfig} from './rollup.config';
import {uglify} from "rollup-plugin-uglify";
export default {
...defaultConfig,
plugins: [
...defaultConfig.plugins,
uglify({sourcemap: false})
]
};

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="currentColor"
d="M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z"></path>
</svg>

After

Width:  |  Height:  |  Size: 519 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="currentColor"
d="M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"></path>
</svg>

After

Width:  |  Height:  |  Size: 978 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512">
<path fill="currentColor"
d="M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z"></path>
</svg>

After

Width:  |  Height:  |  Size: 585 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512">
<path fill="currentColor"
d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path>
</svg>

After

Width:  |  Height:  |  Size: 537 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor"
d="M502.61 233.32L278.68 9.39c-12.52-12.52-32.83-12.52-45.36 0L9.39 233.32c-12.52 12.53-12.52 32.83 0 45.36l223.93 223.93c12.52 12.53 32.83 12.53 45.36 0l223.93-223.93c12.52-12.53 12.52-32.83 0-45.36zm-100.98 12.56l-84.21 77.73c-5.12 4.73-13.43 1.1-13.43-5.88V264h-96v64c0 4.42-3.58 8-8 8h-32c-4.42 0-8-3.58-8-8v-80c0-17.67 14.33-32 32-32h112v-53.73c0-6.97 8.3-10.61 13.43-5.88l84.21 77.73c3.43 3.17 3.43 8.59 0 11.76z"></path>
</svg>

After

Width:  |  Height:  |  Size: 537 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor"
d="M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z"></path>
</svg>

After

Width:  |  Height:  |  Size: 586 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 264 512">
<path fill="rgb(59,89,152)"
d="M76.7 512V283H0v-91h76.7v-71.7C76.7 42.4 124.3 0 193.8 0c33.3 0 61.9 2.5 70.2 3.6V85h-48.2c-37.8 0-45.1 18-45.1 44.3V192H256l-11.7 91h-73.6v229"></path>
</svg>

After

Width:  |  Height:  |  Size: 267 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512">
<path fill="#000000"
d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z"></path></svg>

After

Width:  |  Height:  |  Size: 592 B

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<rect x="5" y="14" width="3" height="6" stroke-width="1" stroke="black" fill="black"></rect>
<rect x="11" y="9" width="3" height="11" stroke-width="1" stroke="black" fill="black"></rect>
<rect x="17" y="4" width="3" height="16" stroke-width="1" stroke="black" fill="black"></rect>
</svg>

After

Width:  |  Height:  |  Size: 387 B

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<rect x="5" y="14" width="3" height="6" stroke-width="1" stroke="black" fill="black"></rect>
<rect x="11" y="9" width="3" height="11" stroke-width="1" stroke="black" fill="none"></rect>
<rect x="17" y="4" width="3" height="16" stroke-width="1" stroke="black" fill="none"></rect>
</svg>

After

Width:  |  Height:  |  Size: 385 B

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<rect x="5" y="14" width="3" height="6" stroke-width="1" stroke="black" fill="black"></rect>
<rect x="11" y="9" width="3" height="11" stroke-width="1" stroke="black" fill="black"></rect>
<rect x="17" y="4" width="3" height="16" stroke-width="1" stroke="black" fill="none"></rect>
</svg>

After

Width:  |  Height:  |  Size: 386 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor"
d="M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="rgb(0,119,181)"
d="M100.3 448H7.4V148.9h92.9V448zM53.8 108.1C24.1 108.1 0 83.5 0 53.8S24.1 0 53.8 0s53.8 24.1 53.8 53.8-24.1 54.3-53.8 54.3zM448 448h-92.7V302.4c0-34.7-.7-79.2-48.3-79.2-48.3 0-55.7 37.7-55.7 76.7V448h-92.8V148.9h89.1v40.8h1.3c12.4-23.5 42.7-48.3 87.9-48.3 94 0 111.3 61.9 111.3 142.3V448h-.1z"></path>
</svg>

After

Width:  |  Height:  |  Size: 414 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" >
<path fill="currentColor" d="M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z"></path>
</svg>

After

Width:  |  Height:  |  Size: 357 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="currentColor"
d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"></path>
</svg>

After

Width:  |  Height:  |  Size: 463 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor"
d="M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z"></path>
</svg>

After

Width:  |  Height:  |  Size: 921 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor"
d="M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z"></path>
</svg>

After

Width:  |  Height:  |  Size: 357 B

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25.166666 37.8704414">
<path fill="none" stroke="currentColor" stroke-width="2.5" stroke-miterlimit="10"
d="M12.5833445 36.6204414h-0.0000229C6.3499947 36.6204414 1.25 31.5204487 1.25 25.2871208V12.5833216C1.25 6.3499947 6.3499951 1.25 12.5833216 1.25h0.0000229c6.2333269 0 11.3333216 5.0999947 11.3333216 11.3333216v12.7037992C23.916666 31.5204487 18.8166714 36.6204414 12.5833445 36.6204414z"></path>
<path style="animation: scrollDownMove .8s ease-in-out alternate infinite;" fill="currentColor"
d="M13.0833359 19.2157116h-0.9192753c-1.0999985 0-1.9999971-0.8999996-1.9999971-1.9999981v-5.428606c0-1.0999994 0.8999987-1.9999981 1.9999971-1.9999981h0.9192753c1.0999985 0 1.9999981 0.8999987 1.9999981 1.9999981v5.428606C15.083334 18.315712 14.1833344 19.2157116 13.0833359 19.2157116z"></path>
</svg>

After

Width:  |  Height:  |  Size: 883 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512">
<path fill="currentColor"
d="M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z"></path>
</svg>

After

Width:  |  Height:  |  Size: 860 B

@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<line x1="3" y1="4" x2="20.85" y2="4"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"></line>
<rect x="5" y="4" rx="2" ry="2" width="14" height="10"
stroke-width="1.5" stroke="currentColor" fill="none"></rect>
<polyline points="7,20 12,14.5 17,20" stroke="currentColor" stroke-width="1.5"
stroke-linecap="round"
fill="none"></polyline>
<!-- <polyline points="7,11 9,8 11,10 13,6" stroke="currentColor" stroke-width=".5"-->
<!-- stroke-linecap="round" stroke-linejoin="round"-->
<!-- fill="none"></polyline>-->
<!-- <line x1="14" y1="7" x2="17.5" y2="7" stroke-width=".65" stroke="currentColor"></line>-->
<!-- <line x1="14" y1="9" x2="17.5" y2="9" stroke-width=".65" stroke="currentColor"></line>-->
<!-- <line x1="13" y1="11" x2="17.5" y2="11" stroke-width=".65" stroke="currentColor"></line>-->
</svg>

After

Width:  |  Height:  |  Size: 1019 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor"
d="M440 6.5L24 246.4c-34.4 19.9-31.1 70.8 5.7 85.9L144 379.6V464c0 46.4 59.2 65.5 86.6 28.6l43.8-59.1 111.9 46.2c5.9 2.4 12.1 3.6 18.3 3.6 8.2 0 16.3-2.1 23.6-6.2 12.8-7.2 21.6-20 23.9-34.5l59.4-387.2c6.1-40.1-36.9-68.8-71.5-48.9zM192 464v-64.6l36.6 15.1L192 464zm212.6-28.7l-153.8-63.5L391 169.5c10.7-15.5-9.5-33.5-23.7-21.2L155.8 332.6 48 288 464 48l-59.4 387.3z"></path>
</svg>

After

Width:  |  Height:  |  Size: 483 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512">
<path fill="currentColor"
d="M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z"></path>
</svg>

After

Width:  |  Height:  |  Size: 481 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="rgb(64,153,255)"
d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path>
</svg>

After

Width:  |  Height:  |  Size: 916 B

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512">
<path fill="rgb(205,32,31)"
d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path>
</svg>

After

Width:  |  Height:  |  Size: 594 B

@ -0,0 +1,15 @@
import './konami';
new Konami(function () {
const elt = document.querySelector('.jumbo');
if (elt) {
elt.style.backgroundImage = 'url(/images/wtf/serious.jpg)';
}
});
setTimeout(function () {
const jumboOverlay = document.querySelector('#jumbo-overlay');
if (jumboOverlay) {
jumboOverlay.classList.add('show');
}
}, 500);

@ -0,0 +1,141 @@
// From https://github.com/snaptortoise/konami-js
var Konami = function (callback) {
var konami = {
addEvent: function (obj, type, fn, ref_obj) {
if (obj.addEventListener)
obj.addEventListener(type, fn, false);
else if (obj.attachEvent) {
// IE
obj["e" + type + fn] = fn;
obj[type + fn] = function () {
obj["e" + type + fn](window.event, ref_obj);
}
obj.attachEvent("on" + type, obj[type + fn]);
}
},
removeEvent: function (obj, eventName, eventCallback) {
if (obj.removeEventListener) {
obj.removeEventListener(eventName, eventCallback);
} else if (obj.attachEvent) {
obj.detachEvent(eventName);
}
},
input: "",
pattern: "38384040373937396665",
keydownHandler: function (e, ref_obj) {
if (ref_obj) {
konami = ref_obj;
} // IE
konami.input += e ? e.keyCode : event.keyCode;
if (konami.input.length > konami.pattern.length) {
konami.input = konami.input.substr((konami.input.length - konami.pattern.length));
}
if (konami.input === konami.pattern) {
konami.code(konami._currentLink);
konami.input = '';
e.preventDefault();
return false;
}
},
load: function (link) {
this._currentLink = link;
this.addEvent(document, "keydown", this.keydownHandler, this);
this.iphone.load(link);
},
unload: function () {
this.removeEvent(document, 'keydown', this.keydownHandler);
this.iphone.unload();
},
code: function (link) {
window.location = link
},
iphone: {
start_x: 0,
start_y: 0,
stop_x: 0,
stop_y: 0,
tap: false,
capture: false,
orig_keys: "",
keys: ["UP", "UP", "DOWN", "DOWN", "LEFT", "RIGHT", "LEFT", "RIGHT", "TAP", "TAP"],
input: [],
code: function (link) {
konami.code(link);
},
touchmoveHandler: function (e) {
if (e.touches.length === 1 && konami.iphone.capture === true) {
var touch = e.touches[0];
konami.iphone.stop_x = touch.pageX;
konami.iphone.stop_y = touch.pageY;
konami.iphone.tap = false;
konami.iphone.capture = false;
konami.iphone.check_direction();
}
},
touchendHandler: function () {
konami.iphone.input.push(konami.iphone.check_direction());
if (konami.iphone.input.length > konami.iphone.keys.length) konami.iphone.input.shift();
if (konami.iphone.input.length === konami.iphone.keys.length) {
var match = true;
for (var i = 0; i < konami.iphone.keys.length; i++) {
if (konami.iphone.input[i] !== konami.iphone.keys[i]) {
match = false;
}
}
if (match) {
konami.iphone.code(konami._currentLink);
}
}
},
touchstartHandler: function (e) {
konami.iphone.start_x = e.changedTouches[0].pageX;
konami.iphone.start_y = e.changedTouches[0].pageY;
konami.iphone.tap = true;
konami.iphone.capture = true;
},
load: function (link) {
this.orig_keys = this.keys;
konami.addEvent(document, "touchmove", this.touchmoveHandler);
konami.addEvent(document, "touchend", this.touchendHandler, false);
konami.addEvent(document, "touchstart", this.touchstartHandler);
},
unload: function () {
konami.removeEvent(document, 'touchmove', this.touchmoveHandler);
konami.removeEvent(document, 'touchend', this.touchendHandler);
konami.removeEvent(document, 'touchstart', this.touchstartHandler);
},
check_direction: function () {
x_magnitude = Math.abs(this.start_x - this.stop_x);
y_magnitude = Math.abs(this.start_y - this.stop_y);
x = ((this.start_x - this.stop_x) < 0) ? "RIGHT" : "LEFT";
y = ((this.start_y - this.stop_y) < 0) ? "DOWN" : "UP";
result = (x_magnitude > y_magnitude) ? x : y;
result = (this.tap === true) ? "TAP" : result;
return result;
}
}
};
typeof callback === "string" && konami.load(callback);
if (typeof callback === "function") {
konami.code = callback;
konami.load();
}
return konami;
};
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = Konami;
} else {
if (typeof define === 'function' && define.amd) {
define([], function () {
return Konami;
});
} else {
window.Konami = Konami;
}
}

@ -0,0 +1,4 @@
import './polyfills';
import './shuffle';
import './background';

@ -0,0 +1,9 @@
// NodeList.forEach
if (window.NodeList && !NodeList.prototype.forEach) {
NodeList.prototype.forEach = function (callback, thisArg) {
thisArg = thisArg || window;
for (let i = 0; i < this.length; i++) {
callback.call(thisArg, this[i], i, this);
}
};
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save