split theme

master
Igor Laborie 5 years ago
parent 0a2c8caf97
commit 8f3136f955
  1. 2
      .gitignore
  2. 3
      .gitmodules
  3. 29
      README.md
  4. 157
      content/team.md
  5. 155
      data/team.yml
  6. 158
      data/test.yml
  7. 20
      package.json
  8. 1
      themes/devfest-theme-hugo
  9. 6
      themes/devfest-theme-hugo/404.html
  10. 20
      themes/devfest-theme-hugo/LICENSE
  11. 4
      themes/devfest-theme-hugo/README.md
  12. 9
      themes/devfest-theme-hugo/archetypes/blog.md
  13. 6
      themes/devfest-theme-hugo/archetypes/default.md
  14. 15
      themes/devfest-theme-hugo/archetypes/partners.md
  15. 6
      themes/devfest-theme-hugo/assets/script/base.js
  16. 6
      themes/devfest-theme-hugo/assets/script/shuffle.js
  17. 16
      themes/devfest-theme-hugo/assets/script/subscription.js
  18. 95
      themes/devfest-theme-hugo/assets/style/main.scss
  19. 53
      themes/devfest-theme-hugo/assets/style/pages/_blog.scss
  20. 65
      themes/devfest-theme-hugo/assets/style/pages/_blogs.scss
  21. 18
      themes/devfest-theme-hugo/assets/style/pages/_code_of_conduct.scss
  22. 10
      themes/devfest-theme-hugo/assets/style/pages/_faq.scss
  23. 134
      themes/devfest-theme-hugo/assets/style/pages/_home.scss
  24. 9
      themes/devfest-theme-hugo/assets/style/pages/_parteners.scss
  25. 141
      themes/devfest-theme-hugo/assets/style/pages/_session.scss
  26. 63
      themes/devfest-theme-hugo/assets/style/pages/_sessions.scss
  27. 87
      themes/devfest-theme-hugo/assets/style/pages/_speaker.scss
  28. 41
      themes/devfest-theme-hugo/assets/style/pages/_speakers.scss
  29. 50
      themes/devfest-theme-hugo/assets/style/pages/_team.scss
  30. 62
      themes/devfest-theme-hugo/assets/style/partials/_base.scss
  31. 49
      themes/devfest-theme-hugo/assets/style/partials/_buttons.scss
  32. 124
      themes/devfest-theme-hugo/assets/style/partials/_footer.scss
  33. 103
      themes/devfest-theme-hugo/assets/style/partials/_header.scss
  34. 13
      themes/devfest-theme-hugo/assets/style/partials/_hero.scss
  35. 47
      themes/devfest-theme-hugo/assets/style/partials/_jumbo.scss
  36. 15
      themes/devfest-theme-hugo/assets/style/partials/_main.scss
  37. 104
      themes/devfest-theme-hugo/assets/style/partials/_partners.scss
  38. 52
      themes/devfest-theme-hugo/assets/style/partials/_socials.scss
  39. 47
      themes/devfest-theme-hugo/assets/style/partials/_speakers.scss
  40. 20
      themes/devfest-theme-hugo/assets/style/partials/_table_of_contents.scss
  41. 47
      themes/devfest-theme-hugo/assets/style/partials/_tags.scss
  42. 56
      themes/devfest-theme-hugo/assets/style/partials/_tickets.scss
  43. 13
      themes/devfest-theme-hugo/assets/style/partials/_type.scss
  44. 3
      themes/devfest-theme-hugo/layouts/404.html
  45. 32
      themes/devfest-theme-hugo/layouts/_default/baseof.html
  46. 14
      themes/devfest-theme-hugo/layouts/_default/list.html
  47. 14
      themes/devfest-theme-hugo/layouts/_default/single.html
  48. 28
      themes/devfest-theme-hugo/layouts/blog/list.html
  49. 23
      themes/devfest-theme-hugo/layouts/blog/single.html
  50. 109
      themes/devfest-theme-hugo/layouts/index.html
  51. 61
      themes/devfest-theme-hugo/layouts/partials/footer.html
  52. 42
      themes/devfest-theme-hugo/layouts/partials/head.html
  53. 24
      themes/devfest-theme-hugo/layouts/partials/header.html
  54. 5
      themes/devfest-theme-hugo/layouts/partials/partner.html
  55. 40
      themes/devfest-theme-hugo/layouts/partials/session.html
  56. 11
      themes/devfest-theme-hugo/layouts/partials/speaker.html
  57. 5
      themes/devfest-theme-hugo/layouts/partials/subscribe.html
  58. 10
      themes/devfest-theme-hugo/layouts/partials/team.html
  59. 12
      themes/devfest-theme-hugo/layouts/partials/ticket.html
  60. 24
      themes/devfest-theme-hugo/layouts/partners/list.html
  61. 6
      themes/devfest-theme-hugo/layouts/shortcodes/hero.html
  62. 6
      themes/devfest-theme-hugo/layouts/shortcodes/jumbo.html
  63. 18
      themes/devfest-theme-hugo/layouts/speakers/list.html
  64. 58
      themes/devfest-theme-hugo/layouts/speakers/single.html
  65. 18
      themes/devfest-theme-hugo/layouts/talks/list.html
  66. 62
      themes/devfest-theme-hugo/layouts/talks/single.html
  67. 18
      themes/devfest-theme-hugo/layouts/taxonomy/list.html
  68. 12
      themes/devfest-theme-hugo/layouts/team/single.html
  69. 7
      themes/devfest-theme-hugo/robots.txt
  70. 14
      themes/devfest-theme-hugo/theme.toml
  71. 23
      tools/extract-data.js
  72. 2508
      tools/firebase-data.json
  73. 48
      tools/generate-partners.js
  74. 45
      tools/generate-sessions.js
  75. 29
      tools/generate-speakers.js
  76. 3576
      yarn.lock

2
.gitignore vendored

@ -1,4 +1,6 @@
/resources/
public/
node_modules/
.firebase/
.idea/
.firebase/

3
.gitmodules vendored

@ -0,0 +1,3 @@
[submodule "themes/devfest-theme-hugo"]
path = themes/devfest-theme-hugo
url = https://github.com/GDGToulouse/devfest-theme-hugo.git

@ -7,13 +7,11 @@
* If you need to use tools, or deploy, you also need [NodeJS](https://nodejs.org/en/) and [Yarn](https://yarnpkg.com/lang/en/docs/install).
## Run Local site
Just run
Just run
```
```bash
hugo server -D
```
@ -23,46 +21,41 @@ More information [here](https://gohugo.io/commands/hugo_server/)
## Build
Just run
Just run
```
```bash
hugo
```
More information [here](https://gohugo.io/commands/hugo/)
## Edit data
You can edit
You can edit
- general information about the site into the `config.toml` file.
- some data into `data/*.yml` files, like header or footer information
- some content into `content/**` files.
- some static assets like images into the `static/*` folder
* general information about the site into the `config.toml` file.
* some data into `data/*.yml` files, like header or footer information
* some content into `content/**` files.
* some static assets like images into the `static/*` folder
### Create a new blog entry
You can use `hugo new blog/i-create-a-new-entry.md` command and then edit it.
Or just copy an already existing blog entry, and update the content.
## Tooling
First you need to install dependencies with `yarn`.
### Publish
To publish the site on firebase, just run `firebase deploy`.
Note that you need to authenticate once with `firebase login`
To publish the site on firebase, just run `firebase deploy`.
Note that you need to authenticate once with `firebase login`
### Extract data from CFP
TODO...
## TODO
* [] i18n

@ -1,6 +1,163 @@
---
title: Équipe
type: team
members:
- name: Julien Del Rio
title: GDG Toulouse
photoUrl: /images/people/julien_delrio.jpg
socials:
- icon: twitter
link: 'https://twitter.com/JulienDelRio'
name: Twitter
- name: Julien Renaux
title: GDG Toulouse
photoUrl: /images/people/julien_renaux.jpg
socials:
- icon: twitter
link: 'https://twitter.com/julienrenaux'
name: Twitter
- icon: github
link: 'https://github.com/shprink'
name: Github
- icon: linkedin
link: 'https://www.linkedin.com/in/julienrenaux/'
name: LinkedIn
- name: Alexia Audevart
title: Toulouse Data Science
photoUrl: 'https://www.ekito.fr/img/team/aaudevart.jpg'
socials:
- icon: twitter
link: 'https://www.twitter.com/aaudevart'
name: Twitter
- icon: github
link: 'https://github.com/aaudevart'
name: Github
- icon: linkedin
link: 'https://www.linkedin.com/in/alexia-audevart-450b8a1/'
name: Linkedin
- name: Kevin Davin
title: GDG Toulouse & Toulouse JUG
photoUrl: /images/people/kevin_davin.png
socials:
- icon: gplus
link: 'https://plus.google.com/+KevinDavin'
name: Google+
- icon: twitter
link: 'https://twitter.com/davinkevin'
name: Twitter
- icon: github
link: 'https://github.com/davinkevin/'
name: Github
- icon: linkedin
link: www.linkedin.com/in/davinkevin
name: LinkedIn
- name: Aurélie Vache
title: Duchess France / Toulouse Data Science
photoUrl: /images/people/aurelie_vache.png
socials:
- icon: twitter
link: 'https://www.twitter.com/aurelievache'
name: Twitter
- icon: website
link: 'http://scraly.com/'
name: Site
- icon: linkedin
link: 'https://www.linkedin.com/in/aurelievache'
name: LinkedIn
- icon: github
link: 'https://github.com/scraly'
name: Github
- name: Maxime Pawlak
title: GDG Toulouse
photoUrl: /images/people/maxime_pawlak.jpg
socials:
- icon: twitter
link: 'https://twitter.com/Maxime_Pawlak'
name: Twitter
- name: Michaël Bitard
title: Electron liiiibre
photoUrl: /images/people/michael_bitard.jpg
socials:
- icon: twitter
link: 'https://twitter.com/bitardmichael'
name: Twitter
- name: Didier Plaindoux
title: Toulouse JUG
photoUrl: /images/people/didier_plaindoux.jpeg
socials:
- icon: twitter
link: 'https://twitter.com/dplaindoux'
name: Twitter
- name: Vincent Ferries
title: Toulouse JUG
photoUrl: >-
https://pbs.twimg.com/profile_images/697834407407849472/bzv1VZJm_400x400.jpg
socials:
- icon: twitter
link: 'https://twitter.com/VincentFERRIES'
name: Twitter
- name: Igor Laborie
title: Folivoraphile
photoUrl: >-
https://pbs.twimg.com/profile_images/3404066863/94e02f3bca9b038c4546f4e42ed05bc6.jpeg
socials:
- icon: twitter
link: 'https://twitter.com/ilaborie'
name: Twitter
- icon: github
link: 'https://github.com/ilaborie'
name: Github
- name: Emmanuel Vinas
title: GDG Toulouse
photoUrl: /images/people/emmanuel_vinas.jpeg
socials:
- icon: twitter
link: 'https://twitter.com/EmmanuelVinas'
name: Twitter
- name: Lionel Porcheron
title: Toulouse DevOps
photoUrl: /images/people/lionel_porcheron.jpg
socials:
- icon: twitter
link: 'https://twitter.com/lporcheron'
name: Twitter
- name: Michaël Pailloncy
title: Toulouse JAM / JUG
photoUrl: 'https://s.gravatar.com/avatar/1b42d100589ea585ce9a1f359b8d4496?s=160'
socials:
- icon: twitter
link: 'https://twitter.com/mpailloncy'
name: Twitter
- icon: github
link: 'https://github.com/mpailloncy'
name: Github
- icon: linkedin
link: 'https://www.linkedin.com/in/michael-pailloncy-21119827/'
name: LinkedIn
- name: Elodie Lerare
title: ''
photoUrl: images/people/elodie_lerare.jpg
socials:
- icon: twitter
link: 'https://twitter.com/EloBlou'
name: Twitter
- icon: linkedin
link: 'https://www.linkedin.com/in/elodie-lerare-223a6b41/'
name: LinkedIn
---
{{< hero >}}

@ -1,155 +0,0 @@
- name: Julien Del Rio
title: GDG Toulouse
photoUrl: /images/people/julien_delrio.jpg
socials:
- icon: twitter
link: 'https://twitter.com/JulienDelRio'
name: Twitter
- name: Julien Renaux
title: GDG Toulouse
photoUrl: /images/people/julien_renaux.jpg
socials:
- icon: twitter
link: 'https://twitter.com/julienrenaux'
name: Twitter
- icon: github
link: 'https://github.com/shprink'
name: Github
- icon: linkedin
link: 'https://www.linkedin.com/in/julienrenaux/'
name: LinkedIn
- name: Alexia Audevart
title: Toulouse Data Science
photoUrl: 'https://www.ekito.fr/img/team/aaudevart.jpg'
socials:
- icon: twitter
link: 'https://www.twitter.com/aaudevart'
name: Twitter
- icon: github
link: 'https://github.com/aaudevart'
name: Github
- icon: linkedin
link: 'https://www.linkedin.com/in/alexia-audevart-450b8a1/'
name: Linkedin
- name: Kevin Davin
title: GDG Toulouse & Toulouse JUG
photoUrl: /images/people/kevin_davin.png
socials:
- icon: gplus
link: 'https://plus.google.com/+KevinDavin'
name: Google+
- icon: twitter
link: 'https://twitter.com/davinkevin'
name: Twitter
- icon: github
link: 'https://github.com/davinkevin/'
name: Github
- icon: linkedin
link: www.linkedin.com/in/davinkevin
name: LinkedIn
- name: Aurélie Vache
title: Duchess France / Toulouse Data Science
photoUrl: /images/people/aurelie_vache.png
socials:
- icon: twitter
link: 'https://www.twitter.com/aurelievache'
name: Twitter
- icon: website
link: 'http://scraly.com/'
name: Site
- icon: linkedin
link: 'https://www.linkedin.com/in/aurelievache'
name: LinkedIn
- icon: github
link: 'https://github.com/scraly'
name: Github
- name: Maxime Pawlak
title: GDG Toulouse
photoUrl: /images/people/maxime_pawlak.jpg
socials:
- icon: twitter
link: 'https://twitter.com/Maxime_Pawlak'
name: Twitter
- name: Michaël Bitard
title: Electron liiiibre
photoUrl: /images/people/michael_bitard.jpg
socials:
- icon: twitter
link: 'https://twitter.com/bitardmichael'
name: Twitter
- name: Didier Plaindoux
title: Toulouse JUG
photoUrl: /images/people/didier_plaindoux.jpeg
socials:
- icon: twitter
link: 'https://twitter.com/dplaindoux'
name: Twitter
- name: Vincent Ferries
title: Toulouse JUG
photoUrl: >-
https://pbs.twimg.com/profile_images/697834407407849472/bzv1VZJm_400x400.jpg
socials:
- icon: twitter
link: 'https://twitter.com/VincentFERRIES'
name: Twitter
- name: Igor Laborie
title: Folivoraphile
photoUrl: >-
https://pbs.twimg.com/profile_images/3404066863/94e02f3bca9b038c4546f4e42ed05bc6.jpeg
socials:
- icon: twitter
link: 'https://twitter.com/ilaborie'
name: Twitter
- icon: github
link: 'https://github.com/ilaborie'
name: Github
- name: Emmanuel Vinas
title: GDG Toulouse
photoUrl: /images/people/emmanuel_vinas.jpeg
socials:
- icon: twitter
link: 'https://twitter.com/EmmanuelVinas'
name: Twitter
- name: Lionel Porcheron
title: Toulouse DevOps
photoUrl: /images/people/lionel_porcheron.jpg
socials:
- icon: twitter
link: 'https://twitter.com/lporcheron'
name: Twitter
- name: Michaël Pailloncy
title: Toulouse JAM / JUG
photoUrl: 'https://s.gravatar.com/avatar/1b42d100589ea585ce9a1f359b8d4496?s=160'
socials:
- icon: twitter
link: 'https://twitter.com/mpailloncy'
name: Twitter
- icon: github
link: 'https://github.com/mpailloncy'
name: Github
- icon: linkedin
link: 'https://www.linkedin.com/in/michael-pailloncy-21119827/'
name: LinkedIn
- name: Elodie Lerare
title: ''
photoUrl: images/people/elodie_lerare.jpg
socials:
- icon: twitter
link: 'https://twitter.com/EloBlou'
name: Twitter
- icon: linkedin
link: 'https://www.linkedin.com/in/elodie-lerare-223a6b41/'
name: LinkedIn

@ -0,0 +1,158 @@
title: Équipe
type: team
members:
- name: Julien Del Rio
title: GDG Toulouse
photoUrl: /images/people/julien_delrio.jpg
socials:
- icon: twitter
link: 'https://twitter.com/JulienDelRio'
name: Twitter
- name: Julien Renaux
title: GDG Toulouse
photoUrl: /images/people/julien_renaux.jpg
socials:
- icon: twitter
link: 'https://twitter.com/julienrenaux'
name: Twitter
- icon: github
link: 'https://github.com/shprink'
name: Github
- icon: linkedin
link: 'https://www.linkedin.com/in/julienrenaux/'
name: LinkedIn
- name: Alexia Audevart
title: Toulouse Data Science
photoUrl: 'https://www.ekito.fr/img/team/aaudevart.jpg'
socials:
- icon: twitter
link: 'https://www.twitter.com/aaudevart'
name: Twitter
- icon: github
link: 'https://github.com/aaudevart'
name: Github
- icon: linkedin
link: 'https://www.linkedin.com/in/alexia-audevart-450b8a1/'
name: Linkedin
- name: Kevin Davin
title: GDG Toulouse & Toulouse JUG
photoUrl: /images/people/kevin_davin.png
socials:
- icon: gplus
link: 'https://plus.google.com/+KevinDavin'
name: Google+
- icon: twitter
link: 'https://twitter.com/davinkevin'
name: Twitter
- icon: github
link: 'https://github.com/davinkevin/'
name: Github
- icon: linkedin
link: www.linkedin.com/in/davinkevin
name: LinkedIn
- name: Aurélie Vache
title: Duchess France / Toulouse Data Science
photoUrl: /images/people/aurelie_vache.png
socials:
- icon: twitter
link: 'https://www.twitter.com/aurelievache'
name: Twitter
- icon: website
link: 'http://scraly.com/'
name: Site
- icon: linkedin
link: 'https://www.linkedin.com/in/aurelievache'
name: LinkedIn
- icon: github
link: 'https://github.com/scraly'
name: Github
- name: Maxime Pawlak
title: GDG Toulouse
photoUrl: /images/people/maxime_pawlak.jpg
socials:
- icon: twitter
link: 'https://twitter.com/Maxime_Pawlak'
name: Twitter
- name: Michaël Bitard
title: Electron liiiibre
photoUrl: /images/people/michael_bitard.jpg
socials:
- icon: twitter
link: 'https://twitter.com/bitardmichael'
name: Twitter
- name: Didier Plaindoux
title: Toulouse JUG
photoUrl: /images/people/didier_plaindoux.jpeg
socials:
- icon: twitter
link: 'https://twitter.com/dplaindoux'
name: Twitter
- name: Vincent Ferries
title: Toulouse JUG
photoUrl: >-
https://pbs.twimg.com/profile_images/697834407407849472/bzv1VZJm_400x400.jpg
socials:
- icon: twitter
link: 'https://twitter.com/VincentFERRIES'
name: Twitter
- name: Igor Laborie
title: Folivoraphile
photoUrl: >-
https://pbs.twimg.com/profile_images/3404066863/94e02f3bca9b038c4546f4e42ed05bc6.jpeg
socials:
- icon: twitter
link: 'https://twitter.com/ilaborie'
name: Twitter
- icon: github
link: 'https://github.com/ilaborie'
name: Github
- name: Emmanuel Vinas
title: GDG Toulouse
photoUrl: /images/people/emmanuel_vinas.jpeg
socials:
- icon: twitter
link: 'https://twitter.com/EmmanuelVinas'
name: Twitter
- name: Lionel Porcheron
title: Toulouse DevOps
photoUrl: /images/people/lionel_porcheron.jpg
socials:
- icon: twitter
link: 'https://twitter.com/lporcheron'
name: Twitter
- name: Michaël Pailloncy
title: Toulouse JAM / JUG
photoUrl: 'https://s.gravatar.com/avatar/1b42d100589ea585ce9a1f359b8d4496?s=160'
socials:
- icon: twitter
link: 'https://twitter.com/mpailloncy'
name: Twitter
- icon: github
link: 'https://github.com/mpailloncy'
name: Github
- icon: linkedin
link: 'https://www.linkedin.com/in/michael-pailloncy-21119827/'
name: LinkedIn
- name: Elodie Lerare
title: ''
photoUrl: images/people/elodie_lerare.jpg
socials:
- icon: twitter
link: 'https://twitter.com/EloBlou'
name: Twitter
- icon: linkedin
link: 'https://www.linkedin.com/in/elodie-lerare-223a6b41/'
name: LinkedIn

@ -1,20 +0,0 @@
{
"name": "proto-site-2019",
"version": "1.0.0",
"main": "index.js",
"author": "Igor Laborie <ilaborie@gmail.com>",
"license": "MIT",
"scripts": {
"extract-data": "node tools/extract-data.js",
"speakers": "node tools/generate-speakers.js",
"sessions": "node tools/generate-sessions.js",
"partners": "node tools/generate-partners.js",
"publish": "firebase deploy",
"publish:prod": "echo 'TODO: firebase deploy -P devfest-prod'"
},
"devDependencies": {
"firebase-tools": "^6.2.2",
"js-yaml": "^3.12.0",
"slugify": "^1.3.4"
}
}

@ -0,0 +1 @@
Subproject commit 532b06692705112b3f84a1834b8c32ec3bd24d1c

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

@ -1,20 +0,0 @@
The MIT License (MIT)
Copyright (c) 2018 GDGToulouse
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:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
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.

@ -1,4 +0,0 @@
# Devfest Toulouse Theme
TODO: add more info here

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

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

@ -1,15 +0,0 @@
---
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

@ -1,6 +0,0 @@
// Helpers
const $ = selector =>
document.querySelector(selector);
const $$ = selector =>
Array.from(document.querySelectorAll(selector));

@ -1,6 +0,0 @@
// Shuffle
$$('ul.shuffle').forEach(listElt => {
for (let i = listElt.children.length; i >= 0; i--) {
listElt.appendChild(listElt.children[Math.random() * i | 0]);
}
});

@ -1,16 +0,0 @@
// Subscription
$$('form.subscribe').forEach(formElt => {
console.log('subscribe', formElt);
formElt.onsubmit = () => {
const values = Array.from(formElt.elements)
.reduce(
(acc, elt) => {
if (elt.name) {
acc[elt.name] = elt.value;
}
return acc;
},
{});
subscribe(values);
};
});

@ -1,95 +0,0 @@
:root {
--primary: #673AB7;
--primary-txt: #fff;
--base: #FFF;
--base-text: #424242;
--base-secondary-text: #757575;
--darken-1: rgba(0, 0, 0, .125);
--darken-2: rgba(0, 0, 0, .25);
--darken-3: rgba(0, 0, 0, .5);
--lighten-1: hsla(0, 100%, 100%, .125);
--lighten-2: hsla(0, 100%, 100%, .25);
--lighten-3: hsla(0, 100%, 100%, .5);
--color-hero: ghostwhite;
--color-platium: #73737a;
--color-gold: #b7935b;
--color-error: firebrick;
--space-1: .125rem;
--space-2: .25rem;
--space-3: .5rem;
--space-4: 1rem;
--container-margin: 10vw;
--toolbar-height: 3rem;
--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica,
Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
/*--font-family: 'Roboto', 'Helvetica Neue', Helvetica, Arial, sans-serif;*/
/* Tags */
/*from https://github.com/d3/d3-scale-chromatic#schemePastel2*/
--tag1: #b3e2cd;
--tag2: #fdcdac;
--tag3: #cbd5e8;
--tag4: #f4cae4;
--tag5: #e6f5c9;
--tag6: #fff2ae;
--tag7: #f1e2cc;
--tag8: #cccccc;
--native-mobile-apps: var(--tag2);
--web: var(--tag6);
--method-tools: var(--tag5);
--big-data-ml-ai: var(--tag3);
--iot: var(--tag7);
--cloud: var(--tag4);
--languages: var(--tag1);
--wtf: var(--tag7);
--general: var(--tag8);
/* Partners */
--partner-support-height: 60px;
--partner-platinum-height: calc(var(--partner-support-height) * 3);
--partner-gold-height: calc(var(--partner-support-height) * 2);
--animation: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
--extruded-dark: 1px 0 0 var(--darken-3);
--extruded-light: 1px 0 0 var(--lighten-3);
--box-shadow-1: 0 0 2px 0 rgba(0, 0, 0, 0.07), 0 2px 2px 0 rgba(0, 0, 0, 0.15);
--box-shadow-2: 0 3px 3px -2px rgba(0, 0, 0, 0.2), 0 3px 4px 0 rgba(0, 0, 0, 0.14), 0 1px 8px 0 rgba(0, 0, 0, 0.12);
}
@import "partials/base";
@import "partials/header";
@import "partials/main";
@import "partials/footer";
@import "partials/buttons";
@import "partials/socials";
@import "partials/jumbo";
@import "partials/hero";
@import "partials/table_of_contents";
@import "partials/speakers";
@import "partials/tickets";
@import "partials/partners";
@import "partials/tags";
@import "partials/type";
@import "pages/home";
@import "pages/sessions";
@import "pages/session";
@import "pages/parteners";
@import "pages/speakers";
@import "pages/speaker";
@import "pages/blogs";
@import "pages/blog";
@import "pages/team";
@import "pages/faq";
@import "pages/code_of_conduct";

@ -1,53 +0,0 @@
.page.blog {
.hero {
.img {
padding: var(--container-margin);
background-repeat: no-repeat;
background-size: cover;
background-position: center center;
text-shadow: 1px 0 0 var(--lighten-3);
}
h1 {
color: var(--primary);
padding-left: 0;
padding-right: 0;
small {
display: block;
}
}
}
.content {
padding-left: 0;
padding-right: 0;
margin: 2rem var(--container-margin);
img {
max-width: 100%;
}
h1, h2, h3, h4, h5, h6 {
color: var(--primary);
}
p {
margin-left: var(--space-4);
text-align: justify;
&::first-letter {
margin-left: var(--space-4);
}
}
ul {
margin-left: 2rem;
li {
line-height: 1.25;
}
}
}
}

@ -1,65 +0,0 @@
.section.blog {
main > section {
padding-left: 0;
padding-right: 0;
margin: 2rem var(--container-margin);
}
.blogs {
display: grid;
grid-gap: var(--space-4);
a {
text-decoration: none;
padding: var(--space-4);
border-radius: var(--space-3);
min-height: 25vw;
display: grid;
grid-template-columns: auto 1fr;
grid-template-rows: auto 1fr;
grid-gap: var(--space-4);
color: inherit;
border: thin solid var(--darken-1);
box-shadow: var(--space-1) var(--space-1) var(--space-2) var(--darken-2);
transition: box-shadow var(--animation);
.img {
display: inline-block;
background-position: center center;
background-size: cover;
--size: 6rem;
height: var(--size);
width: var(--size);
border-radius: var(--space-2);
}
.info {
justify-content: center;
.reading {
align-self: flex-end;
&::after {
content: ' min.';
}
}
.date {
align-self: flex-start;
}
}
p {
grid-column: 1 / -1;
}
&:hover, &:focus {
box-shadow: var(--space-2) var(--space-2) var(--space-2) var(--darken-3);
}
}
}
}

@ -1,18 +0,0 @@
.page.code-of-conduct .content {
p {
margin-left: var(--space-4);
text-align: justify;
&::first-letter {
margin-left: var(--space-4);
}
}
ul {
margin-left: 2rem;
li {
line-height: 1.25;
}
}
}

@ -1,10 +0,0 @@
/* FAQ */
.page.faq .content {
h1, h2, h3, h4, h5, h6 {
color: var(--primary);
}
h3, h4, h5, h6, ul, ol, p {
margin-left: calc(var(--container-margin) - 2rem);
}
}

@ -1,134 +0,0 @@
.home {
main > section {
margin: 0;
padding: 2rem;
}
section > h2 {
margin-bottom: 1.5rem;
padding: 0;
font-size: 2rem;
line-height: 1.875rem;
font-weight: 300;
}
section.info > div {
display: flex;
.numbers {
margin: 0 2rem;
min-width: 33vw;
justify-content: center;
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-column-gap: 2rem;
width: 100%;
}
.number {
strong {
font-size: 3.5rem;
font-weight: 100;
&::after {
content: '';
display: block;
height: .125rem;
width: 2rem;
background-color: var(--primary);
}
}
div {
margin: var(--space-1) 0;
}
}
}
section.speakers {
ul {
padding-left: 0;
list-style: none;
display: flex;
justify-content: space-around;
align-items: flex-start;
flex-wrap: wrap;
li {
margin: var(--space-4);
}
// Keep only 4 first speakers
li:nth-child(n+5) {
display: none;
}
}
}
section.subscribe {
display: flex;
flex-direction: column;
align-items: center;
}
section.tickets {
display: flex;
flex-direction: column;
align-items: center;
}
section.location {
padding: 0;
position: relative;
background: var(--darken-1);
font-weight: 300;
.map {
display: block;
height: 664px;
background-position: center center;
background-size: cover;
}
.description {
display: inline-block;
padding: var(--space-4);
width: 400px;
position: absolute;
bottom: -2rem;
right: 2rem;
background-color: var(--primary);
color: var(--primary-txt);
.direction {
display: flex;
align-items: center;
}
}
}
}
@media (max-width: 60rem) {
.home {
.jumbo .inner h1 {
img {
max-width: 100%;
}
font-size: 1.5rem;
}
section.info>div {
flex-direction: column;
}
section.location .description {
position: relative;
top: unset;
bottom: unset;
right: unset;
width: 100%;
}
}
}

@ -1,9 +0,0 @@
.page.partners {
.content {
img {
width: 50vw;
}
}
}

@ -1,141 +0,0 @@
.talk {
.complexity::before {
content: 'Niveau : ';
}
.type::before {
content: 'Type : ';
}
.type::after {
font-weight: 100;
content: ' (' var(--duration, '') ' min.)';
}
.speakers {
.speaker {
display: flex;
align-items: center;
padding: var(--space-1) var(--space-3);
--img-size: 2rem;
.speaker-img {
--img-size: 3rem;
height: var(--img-size);
min-width: var(--img-size);
border-radius: 100%;
background-size: cover;
margin-right: var(--space-4);
}
.info {
display: flex;
flex-direction: column;
}
.speaker-company {
img {
height: 2rem;
}
figcaption {
display: none;
}
}
}
}
}
.page.talks {
.talk {
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: var(--space-3);
//grid
header {
grid-column: 1 / -1;
border-radius: var(--space-2);
padding: var(--space-2);
display: flex;
align-items: center;
h1 {
flex-grow: 1;
}
.tags {
margin-right: 1ch;
white-space: nowrap;
}
}
.content {
margin: var(--space-4) 0;
border-top: thin solid var(--darken-1);
border-bottom: thin solid var(--darken-1);
}
.speakers {
list-style: none;
padding: 0;
align-self: start;
border-radius: var(--space-2);
.speaker {
margin: var(--space-4) 0;
border: thin solid var(--darken-1);
box-shadow: var(--space-1) var(--space-1) var(--space-2) var(--darken-2);
transition: box-shadow var(--animation);
border-radius: var(--space-2);
&:hover, &:focus {
box-shadow: var(--space-2) var(--space-2) var(--space-2) var(--darken-3);
}
display: grid;
grid-template-columns: 4rem 1fr auto;
grid-auto-flow: dense;
text-decoration: none;
color: inherit;
p {
grid-column: 1 / -1;
}
figure {
grid-column: 3;
padding: var(--space-2);
display: flex;
align-items: center;
justify-content: flex-end;
img {
order: 2;
}
}
}
}
.media {
grid-column: 1 / -1;
a {
padding: var(--space-3) 0;
font-size: 1rem;
}
}
}
}
@media (max-width: 60rem) {
.page.talks {
.talk {
grid-template-columns: 1fr;
}
}
}

@ -1,63 +0,0 @@
.section.talks, .taxonomy.tags {
ul.talks {
list-style: none;
padding: 0;
margin: 0;
display: grid;
grid-gap: 2rem;
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
a {
border: thin solid var(--darken-1);
box-shadow: var(--space-1) var(--space-1) var(--space-2) var(--darken-2);
transition: box-shadow var(--animation);
border-radius: var(--space-2);
display: flex;
flex-direction: column;
text-decoration: none;
color: inherit;
height: 100%;
&:hover, &:focus {
box-shadow: var(--space-2) var(--space-2) var(--space-2) var(--darken-3);
}
h2, .info {
padding: var(--space-4);
}
h2 {
display: flex;
justify-content: space-between;
align-items: center;
}
hr {
width: calc(100% - var(--space-3));
margin: 0 auto;
}
.info {
flex-grow: 1;
.tags {
float: right;
}
}
.speakers {
border: thin solid transparent;
border-radius: var(--space-2);
background: var(--base);
padding-left: 0;
}
.speaker + .speaker {
border-top: thin solid var(--darken-1);
}
}
}
}

@ -1,87 +0,0 @@
.page.speakers {
.hero {
header, .description {
padding: var(--space-4) var(--container-margin);
}
header {
display: flex;
align-items: center;
.speaker-img {
--size: 6rem;
height: var(--size);
min-width: var(--size);
border-radius: 100%;
background-size: cover;
box-shadow: 0 0 var(--space-3) var(--darken-3);
margin-right: var(--space-4);
}
h1 {
margin: 0;
padding: 0;
}
ul.socials {
display: flex;
list-style: none;
padding: 0;
margin: 0;
font-size: 1.25em;
li {
padding-right: var(--space-4);
}
}
}
.description {
.talks {
padding-left: 0;
list-style: none;
.talk {
border: thin solid var(--darken-1);
display: inline-flex;
padding: var(--space-2);
border-radius: var(--space-1);
.tags, .language {
margin-right: 1ch;
}
.tags {
white-space: nowrap;
align-self: center;
}
&.tag- {
display: none;
}
}
}
}
}
section.speaker {
header {
display: flex;
align-items: center;
justify-content: space-between;
}
.speaker-company {
margin: var(--space-3) 0;
display: flex;
align-items: center;
img {
height: 4rem;
margin-right: var(--space-4);
}
}
}
}

@ -1,41 +0,0 @@
.section.speakers {
ul.speakers {
list-style: none;
padding: 0;
margin: 0;
display: grid;
grid-gap: 2rem;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
li a.speaker {
padding: var(--space-4);
border: thin solid var(--darken-1);
box-shadow: var(--space-1) var(--space-1) var(--space-2) var(--darken-2);
transition: box-shadow var(--animation);
border-radius: var(--space-2);
display: flex;
flex-direction: row;
height: 100%;
.speaker-img {
margin-right: var(--space-4);
}
.speaker-company {
margin-top: var(--space-3);
order: 2;
text-align: center;
figcaption {
display: block;
}
}
&:hover, &:focus {
box-shadow: var(--space-2) var(--space-2) var(--space-2) var(--darken-3);
}
}
}
}

@ -1,50 +0,0 @@
.page.team {
ul.members {
padding: 0;
margin: 0;
display: grid;
grid-gap: 2rem;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
li {
display: flex;
.photo {
--size: 6rem;
box-shadow: 0 0 0 var(--space-2) var(--darken-2);
height: var(--size);
min-width: var(--size);
border-radius: 100%;
background-size: cover;
margin: var(--space-2);
}
.label {
display: flex;
margin-left: var(--space-3);
flex-direction: column;
justify-content: center;
}
ul.socials {
list-style: none;
display: flex;
margin: 0;
padding: 0;
font-size: 1.5em;
li {
filter: grayscale(1);
transition: filter var(--animation);
&:hover,
&:focus {
filter: grayscale(0);
}
}
}
}
}
}

@ -1,62 +0,0 @@
html {
box-sizing: border-box;
font-family: var(--font-family);
background: var(--darken-1);
}
*,
*:before,
*:after {
box-sizing: inherit;
}
*:focus {
outline: thin dotted var(--darken-3);
outline-offset: var(--space-1);
}
body {
background: var(--base);
color: var(--base-text);
margin: var(--toolbar-height) 0 0;
display: flex;
flex-direction: column;
min-height: calc(100vh - var(--toolbar-height));
}
h1, h2, h3, h4, h5, h6 {
margin: 0;
font-weight: normal;
}
hr {
border-color: var(--darken-1);
opacity: .25;
}
p {
line-height: 1.25;
}
a, a:visited {
color: inherit;
text-decoration: none;
}
.content {🇬🇧
a, a:visited {
color: var(--primary);
}
}
.language.english::before {
content: '🇬🇧';
}
.visually-hidden { /* https://snook.ca/archives/html_and_css/hiding-content-for-accessibility */
position: absolute !important;
height: 1px; width: 1px;
overflow: hidden;
clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
clip: rect(1px, 1px, 1px, 1px);
}

@ -1,49 +0,0 @@
button, a.btn, span.btn {
display: inline-block;
border: thin solid var(--darken-2);
background: var(--darken-1);
padding: var(--space-3);
color: inherit;
text-transform: uppercase;
text-decoration: none;
font-size: .875rem;
font-weight: 100;
cursor: pointer;
text-shadow: var(--extruded-light);
&.primary {
background-color: var(--primary);
color: var(--primary-txt);
text-shadow: var(--extruded-dark);
}
&.btn-icon-only {
border-radius: 50%;
margin-left: 1ch;
padding: var(--space-2);
border-color: transparent;
&::before {
--size: 1.5rem;
width: var(--size);
height: var(--size);
display: inline-block;
content: '';
background-repeat: no-repeat;
}
}
// Icons
&.icon-direction::before {
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="white" 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>');
}
}
form:invalid button,
button[aria-disabled],
a.btn[aria-disabled],
span.btn[aria-disabled] {
opacity: .5;
cursor: not-allowed;
}

@ -1,124 +0,0 @@
body > footer {
background-color: var(--darken-1);
color: var(--base-secondary-text);
padding: var(--space-4) var(--container-margin);
font-weight: 200;
a:hover {
text-decoration: underline;
}
// Header
.footer-header {
display: flex;
justify-content: space-between;
font-weight: 300;
flex-wrap: wrap;
header {
margin-right: var(--space-2);
}
& > div {
display: flex;
align-items: center;
ul {
padding: 0;
margin: 0;
list-style: none;
display: flex;
align-items: center;
li {
display: inline-block;
}
}
}
.share, .blog, .follow {
text-transform: uppercase;
}
.follow a[class*='social-'] {
filter: grayscale(1);
transition: filter var(--animation);
&:hover, &:focus {
filter: grayscale(0);
}
}
.blog a {
text-decoration: underline;
}
}
// Content
.footer-content {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
section {
header {
font-size: 1.125rem;
font-weight: 400;
}
ul {
display: flex;
flex-direction: column;
list-style: none;
padding: 0;
margin: var(--space-3) 0;
font-weight: 100;
li {
margin: var(--space-1) 0;
}
}
}
section.form form {
display: flex;
flex-direction: column;
input {
background: transparent;
border: none;
border-bottom: var(--space-1) solid var(--darken-2);
transition: border var(--animation);
margin: var(--space-3) 0;
outline: thin dotted transparent;
font-size: 1rem;
line-height: 1.5rem;
padding: var(--space-2);
border-radius: var(--space-1);
color: var(--base-text);
&::placeholder {
color: var(--darken-3);
}
&:focus {
border-bottom-color: var(--primary);
}
&:invalid {
border-bottom-color: var(--color-error);
}
}
}
}
// Footer
.footer-footer {
display: flex;
justify-content: space-between;
img {
height: 2rem;
}
}
}

@ -1,103 +0,0 @@
body > header {
position: fixed;
top: 0;
z-index: 100;
width: 100vw;
display: flex;
justify-content: space-between;
align-items: center;
min-height: var(--toolbar-height);
padding: 0 var(--container-margin);
box-shadow: 0 var(--space-1) var(--space-2) var(--darken-1);
background: var(--primary);
color: var(--primary-txt);
.logo img {
height: calc(var(--toolbar-height) - (2 * var(--space-2)));
}
label {
display: none;
--size: 1.5rem;
height: var(--size);
width: var(--size);
opacity: .5;
padding: .1em;
border: var(--space-2) solid transparent; // Extending the hit area
outline-offset: var(--space-2);
background-size: cover;
background-repeat: no-repeat;
background-position: center center;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="white" 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>');
&:hover, &:focus {
opacity: 1;
outline: thin dotted currentColor;
}
}
input[type=checkbox]:checked ~ label {
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="white" 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>');
}
nav {
display: flex;
align-items: center;
a {
display: block;
text-transform: uppercase;
padding: 0 var(--space-3);
text-decoration: none;
line-height: calc(var(--toolbar-height) - (4 * var(--space-2)));;
color: inherit;
opacity: .5;
font-weight: 200;
transition: all var(--animation);
border-bottom: medium solid transparent;
border-radius: 5%;
&:focus, &:hover {
text-shadow: var(--extruded-dark);
opacity: .75;
}
&.active {
opacity: 1;
border-bottom-color: currentColor;
}
}
}
}
@media (max-width: 60rem) {
body > header {
flex-wrap: wrap;
label {
display: block;
}
nav {
display: none;
width: 100%;
background: var(--primary);
flex-direction: column;
justify-content: flex-start;
a {
width: 100%;
&.active {
border-bottom-width: thin;
border-bottom-color: var(--lighten-2);
}
}
}
input[type=checkbox]:checked ~ nav {
display: block;
}
}
}

@ -1,13 +0,0 @@
.hero {
h1 {
padding: 2rem var(--container-margin);
}
.description {
padding: 2rem var(--container-margin);
background: var(--color-hero);
border-top: thin solid var(--darken-1);
border-bottom: thin solid var(--darken-1);
}
}

@ -1,47 +0,0 @@
.jumbo {
position: relative;
height: calc(100vh - var(--toolbar-height));
display: flex;
justify-content: center;
align-items: center;
.inner {
padding: var(--space-4);
color: var(--primary-txt);
background: var(--darken-2);
border-radius: var(--space-3);
}
.scroll-down {
position: absolute;
bottom: 2rem;
height: 2.5em;
width: 1.5em;
color: var(--base);
border: var(--space-1) solid currentColor;
border-radius: 1em;
&::before {
content: '';
position: absolute;
left: calc(50% - var(--space-1));
border: var(--space-1) solid currentColor;
border-top-width: var(--space-2);
border-bottom-width: var(--space-2);
border-radius: 20%;
background: currentColor;
animation: scrollDownMove .8s ease-in-out alternate infinite;
}
}
}
@keyframes scrollDownMove {
from {
top: 1rem;
}
to {
top: .75rem;
}
}

@ -1,15 +0,0 @@
body > main {
flex-grow: 1;
& > section {
margin: 2rem var(--container-margin);
padding-left: 0;
padding-right: 0;
&.primary {
background-color: var(--primary);
color: var(--primary-txt);
}
}
}

@ -1,104 +0,0 @@
.partners-group {
h3 {
text-align: center;
margin: var(--space-4) 0;
}
ul {
list-style: none;
display: flex;
flex-wrap: wrap;
justify-content: center;
padding: 0;
li {
flex-basis: 160px;
margin: var(--space-3);
height: var(--partner-support-height);
}
}
.partner {
padding: var(--space-3);
display: block;
height: 100%;
width: 100%;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
background-origin: content-box;
box-shadow: var(--box-shadow-1);
transition: box-shadow var(--animation);
cursor: pointer;
&:hover, &:focus {
box-shadow: var(--box-shadow-2);
}
}
}
.partners-group.partner-platinium ul li {
height: var(--partner-platinum-height);
flex-basis: 320px;
}
.partners-group.partner-gold ul li {
height: var(--partner-gold-height);
flex-basis: 200px;
}
/* Partner fancy name */
.partners-group .fancy {
line-height: 0.5;
text-align: center;
color: var(--base-secondary-text);
span {
display: inline-block;
position: relative;
text-transform: capitalize;
&:before, &:after {
top: 40%;
content: "";
position: absolute;
height: 5px;
width: 140%;
max-width: 25vw;
}
&:before {
right: 100%;
margin-right: 15px;
}
&:after {
left: 100%;
margin-left: 15px;
}
}
}
.partners-group.partner-platinium .fancy {
font-size: 1.5em;
color: var(--color-platium);
span:before, span:after {
border-bottom: 1px solid currentColor;
border-top: 1px solid currentColor;
}
}
.partners-group.partner-gold .fancy {
font-size: 1.33em;
color: var(--color-gold);
span:before, span:after {
top: 20%;
border-bottom: 1px solid currentColor;
}
}

@ -1,52 +0,0 @@
a[class*='social-'] {
display: inline-flex;
margin: var(--space-1);
background-size: contain;
background-position: center center;
background-repeat: no-repeat;
align-items: center;
color: inherit;
text-decoration: none;
&::before {
--size: 1em;
height: var(--size);
width: var(--size);
display: inline-block;
content: '';
background-repeat: no-repeat;
margin-right: var(--space-1);
}
&:focus, &:hover {
text-decoration: underline;
}
}
.social-facebook::before {
background-image: url('data:image/svg+xml;utf8,<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>');
}
.social-twitter::before {
background-image: url('data:image/svg+xml;utf8,<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>');
}
.social-linkedin::before {
background-image: url('data:image/svg+xml;utf8,<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>');
}
.social-youtube::before {
background-image: url('data:image/svg+xml;utf8,<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>');
}
.social-github::before {
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512" ><path fill="currentColor" 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>');
}
.social-website::before {
background-image: url('data:image/svg+xml;utf8,<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>');
}
.social-slides::before {
background-image: url('data:image/svg+xml;utf8,<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>');
}

@ -1,47 +0,0 @@
.speakers ul {
li .speaker {
display: flex;
flex-direction: column;
align-items: center;
text-decoration: none;
color: inherit;
.info {
display: flex;
flex-direction: column;
align-items: center;
}
.speaker-img {
--size: 8rem;
height: var(--size);
min-width: var(--size);
border-radius: 100%;
background-size: cover;
margin: var(--space-2);
}
.speaker-company {
img {
max-height: 2rem;
margin: var(--space-1);
}
figcaption {
display: none;
}
}
.speaker-name {
font-weight: 600;
margin: var(--space-1);
}
.speaker-company {
font-weight: 200;
opacity: .8;
margin: var(--space-1);
}
}
}

@ -1,20 +0,0 @@
#TableOfContents ul {
padding-left: 0;
list-style: none;
li {
font-size: 1rem;
margin: var(--space-1) 0;
padding: var(--space-1) 0;
a {
color: var(--primary);
text-decoration: none;
&:focus, &:hover {
text-decoration: underline;
}
}
}
}

@ -1,47 +0,0 @@
.tag-method-tools {
background-color: var(--method-tools);
}
.tag-native-mobile-apps {
background-color: var(--native-mobile-apps);
}
.tag-web {
background-color: var(--web);
}
.tag-big-data-ml-ai {
background-color: var(--big-data-ml-ai);
}
.tag-iot {
background-color: var(--iot);
}
.tag-cloud {
background-color: var(--cloud);
}
.tag-languages {
background-color: var(--languages);
}
.tag-wtf {
background-color: var(--wtf);
}
.tag-general {
background-color: var(--general);
}
.tags {
padding: var(--space-1);
border-radius: var(--space-2);
background: var(--darken-1);
border: thin solid var(--darken-2);
text-shadow: var(--extruded-light);
}
.taxonomy.tags {
background: var(--base);
}

@ -1,56 +0,0 @@
.tickets ul {
list-style: none;
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
width: 100%;
li {
flex-basis: 15rem;
}
li .ticket {
margin: var(--space-4);
padding: 2rem var(--space-3);
border: thin solid var(--darken-1);
box-shadow: var(--space-1) var(--space-1) var(--space-2) var(--darken-2);
display: flex;
flex-direction: column;
align-items: center;
text-decoration: none;
color: inherit;
&[aria-disabled] {
opacity: .5;
filter: grayscale(1);
cursor: not-allowed;
}
.ticket-name {
font-size: 1rem;
}
.ticket-price {
font-size: 3.5rem;
color: var(--primary);
font-weight: 200;
}
.ticket-date, .ticket-info {
font-size: .75rem;
color: var(--darken-3);
}
.btn {
margin: var(--space-4);
}
}
}

@ -1,13 +0,0 @@
.type-conférence {
--duration: '40';
}
.type-quickie {
--duration: '15';
}
.type-keynote {
--duration: '40';
}

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

@ -1,32 +0,0 @@
<!DOCTYPE html>
<html lang="{{ $.Site.LanguageCode | default " en" }}">
{{ partial "head.html" . }}
<body class="{{ .Kind }} {{ anchorize .URL }} {{ .Section }}">
{{ block "header" . }}
{{ partial "header.html" . }}
{{ end }}
<main>
{{ block "main" . }}
{{ end }}
</main>
{{ block "footer.html" . }}
{{ partial "footer.html" . }}
{{ end }}
{{ $base := resources.Get "script/base.js" }}
{{ $subscription := resources.Get "script/subscription.js" }}
{{ $shuffle := resources.Get "script/shuffle.js" }}
{{ $js := slice $base $subscription $shuffle | resources.Concat "script/main.js" }}
<script src="{{ $js.Permalink }}"></script>
{{ block "scripts" . }}
<!-- No extra scripts -->
{{ end }}
</body>
</html>

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

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

@ -1,28 +0,0 @@
{{ define "main" }}
<div class="hero">
<h1>{{ $.Page.Params.Title }}</h1>
<div class="description">
{{ .Content }}
</div>
</div>
<section class="blogs">
{{ range .Pages }}
<article>
<a class="blog" href="{{ .URL }}">
<div class="img" style="background-image: url({{ path.Join .URL .Params.image }});"></div>
<div class="info">
<h2>{{ .Title }}</h2>
<span>{{ .Params.brief }}</span>
<div class="date">{{ dateFormat "2 Jan 2016" .Date }}</div>
<div class="reading">{{ .ReadingTime }}</div>
</div>
<p>{{ .Summary }} ...</p>
</a>
</article>
{{ end }}
</section>
{{ end }}

@ -1,23 +0,0 @@
{{ 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 }}

@ -1,109 +0,0 @@
{{ define "main" }}
{{ .Content }}
{{ if .Params.info.show }}
<section class="info">
<h2>Le DevFest Toulouse, c'est quoi ?</h2>
<div>
<p>{{ .Params.info.label }}</p>
{{ if .Params.info.what }}
<div class="numbers">
{{range .Params.info.what }}
<div class="number">
<strong>{{ .value }}</strong>
<div>{{ .label }}</div>
</div>
{{ end }}
</div>
{{ end }}
</div>
</section>
{{ end }}
{{ if .Params.speakers.show }}
<section class="speakers">
<h2>Rockstar speakers</h2>
{{ if .Params.speakers.top }}
<ul class="shuffle">
{{ range where .Site.RegularPages "Params.id" "in" .Params.speakers.top }}
<li>
{{ partial "speaker.html" . }}
</li>
{{ end }}
</ul>
{{ end }}
{{ if .Params.speakers.otherspeakers }}
<a class="btn primary" href="/speakers/">Voir tous les speakers</a>
{{ end }}
</section>
{{ end }}
{{ if .Params.subscribe.show }}
<section class="subscribe primary">
<h2>Soyez notifié des dernières informations !</h2>
<button class="inverse" id="btnSubscribe">Souscrire</button>
</section>
{{ end }}
{{ if .Params.tickets.show }}
<section class="tickets">
<h2>Billets</h2>
<a class="btn primary" target="_blank" href="https://www.billetweb.fr/devfest-toulouse-2019">Billeterie</a>
<ul>
{{range .Params.tickets.values }}
<li>{{ partial "ticket.html" . }}</li>
{{ end }}
</ul>
<p>
<small>
* Votre billet vous donne accès à toutes les conférences, aux pauses café, et au repas. L'hébergement n'est PAS
inclus dans ce prix.
</small>
</p>
</section>
{{ end }}
{{ if .Params.location.show }}
<section class="location">
<div class="map" style="background-image: url('{{ .Params.location.image }}');"></div>
<div class="description">
<h2>Le lieu</h2>
<h3>{{ .Params.location.name }}</h3>
<p>{{ .Params.location.description }}</p>
<div class="direction">
{{ .Params.location.address }}
{{ if .Params.location.pointer }}
<a class="btn btn-icon-only icon-direction" target="_blank" aria-label="Itinéraire" href="https://www.google.com/maps/dir/?api=1&destination={{ .Site.Params.location.pointer.latitude }},{{ .Site.Params.location.pointer.longitude }}"></a>
{{ end }}
</div>
</div>
</section>
{{ end }}
{{ if .Params.partners.show }}
<section class="partners">
<h2>Partenaires</h2>
{{ $site := .Site }}
{{ range .Site.Params.partners.categories }}
<section class="partners-group partner-{{ . }}">
<h3 class="fancy">
<span>{{ . }}</span>
</h3>
<ul>
{{ range where $site.Pages "Params.category" . }}
<li>{{ partial "partner.html" . }}</li>
{{ end }}
</ul>
</section>
{{ end }}
</section>
{{ end }}
{{ end }}

@ -1,61 +0,0 @@
<footer>
<div class="footer-header">
<div class="share">
<header>Partager</header>
<ul>
{{ range .Site.Data.footer.share }}
<li><a class="social-{{ .name }}" href="{{ .url }}" target="_blank"></a></li>
{{ end }}
</ul>
</div>
<div class="blog">
<header>
Suivez notre <a href="/blog/">blog</a>
</header>
</div>
<div class="follow">
<header>Suivez nous sur</header>
<ul>
{{ range .Site.Data.footer.follow }}
<li><a class="social-{{ .name }}" href="{{ .url }}" target="_blank"></a></li>
{{ end }}
</ul>
</div>
<div class="email">
<header>
<a href="mailto:{{ .Site.Params.email }}">{{ .Site.Params.email }}</a>
</header>
</div>
</div>
<hr>
<div class="footer-content">
{{ range .Site.Data.footer.content }}
<section>
<header>{{ .title }}</header>
{{ if .links }}
<ul>
{{ range .links }}
<li><a href="{{ .url }}" {{ if .newTab }}target="_blank" {{end}}>{{ .name }}</a></li>
{{ end }}
</ul>
{{ end }}
</section>
{{ end }}
<section class="form">
{{ partial "subscribe.html" . }}
</section>
</div>
<hr>
<div class="footer-footer">
<div>
{{ if .Site.Params.logos.footer }}
<img src="{{ .Site.Params.logos.footer }}" alt="{{ .Site.Title }}">
{{ end }}
</div>
<div>We ❤ chocolatines</div>
</div>
</footer>

@ -1,42 +0,0 @@
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,minimum-scale=1">
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
{{/* 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" . -}}
{{ if eq (getenv "HUGO_ENV") "production" | or (eq .Site.Params.env "production") }}
{{ template "_internal/google_analytics_async.html" . }}
{{ end }}
{{ .Hugo.Generator }}
{{/* NOTE: For Production make sure you add `HUGO_ENV="production"` before your build command */}}
{{ if eq (getenv "HUGO_ENV") "production" | or (eq .Site.Params.env "production") }}
<META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">
{{ else }}
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
{{ end }}
<title>{{ block "title" . }}{{ .Site.Title }} {{ with .Params.Title }} | {{ . }}{{ end }}{{ end }}</title>
{{ if .Site.Params.favicon }}
<link rel="shortcut icon" href="{{ .Site.Params.favicon }}" type="image/x-icon" />
{{ end }}
{{ if .RSSLink }}
<link href="{{ .RSSLink }}" rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}" />
<link href="{{ .RSSLink }}" rel="feed" type="application/rss+xml" title="{{ .Site.Title }}" />
{{ end }}
{{ $style := resources.Get "style/main.scss" | resources.ToCSS | resources.Minify | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $style.Permalink }}">
</head>

@ -1,24 +0,0 @@
<header>
<div class="logo">
<a href="/">
<img src="{{ .Site.Params.logos.header }}" alt="logo {{ .Site.Title }}">
</a>
</div>
<input type="checkbox" id="menu-burger" class="visually-hidden"/>
<label for="menu-burger"></label>
<nav>
{{ $url := .URL }}
{{ range .Site.Params.menus }}
{{ if (hasPrefix .url "http") }}
<a class="external" href="{{ .url }}" target="_blank" >{{ .name }}</a>
{{ else }}
<a class="{{ if (eq .url $url) }}active{{ end }}" href="{{ .url }}">{{ .name }}</a>
{{ end }}
{{ end }}
</nav>
</header>

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

@ -1,40 +0,0 @@
<a href="{{ .URL }}" class="tag-{{ anchorize (delimit (.Params.tags | default (slice)) "" ) }}">
<h2>
{{ .Title }}
<span class="language {{ anchorize .Params.language }}"></span>
</h2>
<hr>
<div class="info">
{{ if.Params.tags }}
<div class="tags">
{{ range .Params.tags }}
<span>{{ . }}</span>
{{ end }}
</div>
{{ end }}
<div class="complexity">{{ .Params.complexity }}</div>
<div class="type type-{{ anchorize .Params.talkType }}">{{ .Params.talkType }}</div>
</div>
<ul class="speakers">
{{ range where .Site.RegularPages "Params.id" "in" .Params.speakers }}
<li class="speaker">
<div class="speaker-img" style="background-image: url({{ .Params.photo }});"></div>
<div class="info">
<strong class="speaker-name">{{ .Params.name }}</strong>
<span class="speaker-country">{{ .Params.country }}</span>
</div>
<figure class="speaker-company" >
<img src="{{ .Params.companyLogo }}">
<figcaption>{{ .Params.company }}</figcaption>
</figure>
</li>
{{ end }}
</ul>
</a>

@ -1,11 +0,0 @@
<a class="speaker" href="{{ .URL }}">
<div class="speaker-img" style="background-image: url({{ .Params.photo }});"></div>
<div class="info">
<figure class="speaker-company">
<img src="{{ .Params.companyLogo }}">
<figcaption>{{ .Params.company }}</figcaption>
</figure>
<strong class="speaker-name">{{ .Params.name }}</strong>
<span class="speaker-country">{{ .Params.country }}</span>
</div>
</a>

@ -1,5 +0,0 @@
<form class="subscribe">
Pas de spam, juste les dernières infos !
<input type="email" name="email" placeholder="Votre mail">
<button>Souscrire</button>
</form>

@ -1,10 +0,0 @@
<div class="photo" style="background-image: url({{ .photoUrl }});"></div>
<div class="label">
<h3>{{ .name }}</h3>
<h4>{{ .title }}</h4>
<ul class="socials">
{{ range .socials }}
<li><a class="social-{{ .icon }}" title="{{ .name }}" href="{{ .link }}" target="_blank"></a></li>
{{ end }}
</ul>
</div>

@ -1,12 +0,0 @@
<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">Rupture de stock</span>
{{ else }}
<a class="btn primary" target="_blank" href="{{ .url }}">Billeterie</a>
{{ end }}
</div>

@ -1,24 +0,0 @@
{{ define "main" }}
<div class="hero">
<h1>{{ $.Page.Params.Title }}</h1>
<div class="description">
TODO: filter and search
</div>
</div>
{{ $site := .Site }}
{{ range .Params.categories }}
<section class="partners-group partner-{{ . }}">
<h3 class="fancy">
<span>{{ . }}</span>
</h3>
<ul>
{{ range where $site.Pages "Params.category" . }}
<li>{{ partial "partner.html" . }}</li>
{{ end }}
</ul>
</section>
{{ end }}
{{ end }}

@ -1,6 +0,0 @@
<div class="hero">
<h1>{{ $.Page.Params.Title }}</h1>
<div class="description">
{{ .Inner }}
</div>
</div>

@ -1,6 +0,0 @@
<div class="jumbo" style="background: url({{ .Get "img" }}) 0 / cover fixed;">
<div class="inner">
{{ .Inner }}
</div>
<div class="scroll-down"></div>
</div>

@ -1,18 +0,0 @@
{{ define "main" }}
<div class="hero">
<h1>{{ $.Page.Params.Title }}</h1>
<div class="description">
TODO: filter and search
</div>
</div>
<section>
<ul class="speakers shuffle">
{{ range .Pages }}
<li>{{ partial "speaker.html" . }}</li>
{{ end }}
</ul>
</section>
{{ end }}

@ -1,58 +0,0 @@
{{ define "main" }}
<div class="hero">
<header>
<div class="speaker-img" style="background-image: url({{ .Page.Params.photo }});"></div>
<div>
<h1>{{ .Page.Params.name }}</h1>
<ul class="socials">
{{ range .Page.Params.socials }}
<li>
<a class="social-{{ .icon }}" href="{{ .link }}" target="_blank">{{ .name }}</a>
</li>
{{ end }}
</ul>
</div>
</header>
<div class="description">
<ul class="talks">
{{ range where .Site.RegularPages "Params.speakers" "intersect" (slice .Page.Params.id) }}
<li>
<a href="{{ .URL }}" class="talk tag-{{ anchorize (delimit .Params.tags "" ) }}">
<div class="tags">
{{ range .Params.tags }}
<span>{{ . }}</span>
{{ 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.country }}</h2>
<figure class="speaker-company">
<img src="{{ .Page.Params.companyLogo }}" alt="{{ .Page.Params.company }}">
<figcaption>{{ .Page.Params.company }}</figcaption>
</figure>
</header>
<div class="bio">
{{ .Content }}
</div>
</section>
{{ end }}

@ -1,18 +0,0 @@
{{ define "main" }}
<div class="hero">
<h1>{{ $.Page.Params.Title }}</h1>
<div class="description">
TODO: filter and search
</div>
</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 }}

@ -1,62 +0,0 @@
{{ define "main" }}
<section class="talk">
<header class="tag-{{ anchorize (delimit .Params.tags "" ) }}">
<div class="tags">
{{ range .Params.tags }}
<span>{{ . }}</span>
{{ end }}
</div>
<h1 class="text">{{ .Title }}</h1>
<span class="language {{ anchorize .Params.language }}"></span>
</header>
<div class="info">
<div class="complexity">{{ .Params.complexity }}</div>
<div class="type type-{{ anchorize .Params.talkType }}">{{ .Params.talkType }}</div>
<div class="content">
{{ .Content }}
</div>
</div>
<ul class="speakers">
{{ range where .Site.RegularPages "Params.id" "in" .Params.speakers }}
<li>
<a class="speaker" href="/speakers/{{ .Params.id }}">
<div class="speaker-img" style="background-image: url({{ .Params.photo }});"></div>
<div class="info">
<strong class="speaker-name">{{ .Params.name }}</strong>
<span class="speaker-country">{{ .Params.country }}</span>
</div>
<p>{{ .Params.shortBio }}</p>
<figure class="speaker-company">
<img src="{{ .Params.companyLogo }}">
<figcaption>{{ .Params.company }}</figcaption>
</figure>
</a>
</li>
{{ end }}
</ul>
<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 }}" target="_blank">Voir les slides</a>
{{ end }}
</div>
</section>
{{ end }}

@ -1,18 +0,0 @@
{{ define "main" }}
<div class="hero">
<h1>{{ $.Page.Params.Title }}</h1>
<div class="description">
TODO: filter and search
</div>
</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 }}

@ -1,12 +0,0 @@
{{ define "main" }}
{{ .Content }}
<section>
<ul class="members shuffle">
{{ range (shuffle .Site.Data.team) }}
<li>{{ partial "team.html" . }}</li>
{{ end }}
</ul>
</section>
{{ end }}

@ -1,7 +0,0 @@
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 }}

@ -1,14 +0,0 @@
# theme.toml template for a Hugo theme
# See https://github.com/gohugoio/hugoThemes#themetoml for an example
name = "Devfest Toulouse Theme"
license = "MIT"
licenselink = "https://github.com/GDGToulouse/template-site-devfest-toulouse/LICENSE"
description = ""
tags = ["Devfest"]
features = []
min_version = "0.50"
[author]
name = "GDG Toulouse"
homepage = "https://github.com/GDGToulouse"

@ -1,23 +0,0 @@
const yaml = require('js-yaml');
const fs = require('fs');
const path = require('path');
const writeOption = {
flag: 'w'
};
const writeToYml = (list, dest) => {
const data = yaml.safeDump(list);
console.log('Write to', dest);
fs.writeFileSync(dest, data, writeOption);
};
const firebaseData = require('./firebase-data.json');
['partners', 'team', 'tickets']
.forEach(key => {
const dest = path.join(__dirname, `../data/${key}.yml`);
const data = firebaseData[key];
writeToYml(data, dest);
});

File diff suppressed because it is too large Load Diff

@ -1,48 +0,0 @@
const yaml = require('js-yaml');
const fs = require('fs');
const path = require('path');
const slugify = require('slugify');
const writeOption = {
flag: 'w'
};
const firebaseData = require('./firebase-data.json');
const generatePartnerGroupData = group => {
const {title, logos} = group;
return logos
.map(partner => ({
title: partner.name,
type: 'partner',
category: slugify(title.toLowerCase()),
website: partner.url,
logo: partner.logoUrl,
socials: []
})).map(generatePartnerData);
};
const generatePartnerData = (partner) => {
const data = `---
${yaml.safeDump(partner, {skipInvalid: true})}---
Find ${partner.title} on [${partner.website}](${partner.website})
![${partner.title}](${partner.logo})
`;
return {id: partner.title.toLowerCase(), parent: partner.category, data};
};
Object.values(firebaseData.partners)
.map(group => generatePartnerGroupData(group))
.reduce((acc, elt) => ([...acc, ...elt]), [])
.forEach(({id, parent, data}) => {
const parentFile = path.join(__dirname, `../content/partners/${slugify(parent)}`);
fs.mkdirSync(parentFile, {recursive: true});
const dest = path.join(parentFile, `${slugify(id)}.md`);
console.log('Write to', dest);
fs.writeFileSync(dest, data, writeOption);
});

@ -1,45 +0,0 @@
const yaml = require('js-yaml');
const fs = require('fs');
const path = require('path');
const writeOption = {
flag: 'w'
};
const firebaseData = require('./firebase-data.json');
const generateSessionData = (id, session) => {
const frontMatter = {id, ...session};
const {type} = frontMatter;
delete frontMatter.description;
delete frontMatter.type;
frontMatter.talkType = type;
return `---
${yaml.safeDump(frontMatter, {skipInvalid: true})}
---
${session.description}
`;
};
const generateSessionName = (id, title) => {
const name = title
.normalize('NFD')
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^a-z0-9]/gi, '_')
.toLowerCase();
return `${id}_${name}.md`;
};
Object.entries(firebaseData.sessions)
.filter(([_, session]) => !session.isBreak)
.map(([id, session]) => ([
generateSessionName(id, session.title),
generateSessionData(parseInt(id, 10), session)]))
.forEach(([filename, data]) => {
const dest = path.join(__dirname, `../content/talks/${filename}`);
console.log('Write to', dest);
fs.writeFileSync(dest, data, writeOption);
});

@ -1,29 +0,0 @@
const yaml = require('js-yaml');
const fs = require('fs');
const path = require('path');
const writeOption = {
flag: 'w'
};
const firebaseData = require('./firebase-data.json');
const generateSpeakerData = (id, speaker) => {
const frontMatter = {id, ...speaker};
delete frontMatter.bio;
return `---
${yaml.safeDump(frontMatter, {skipInvalid: true})}
---
${speaker.bio}
`;
};
Object.entries(firebaseData.speakers)
.map(([id, speaker]) => ([id, generateSpeakerData(id, speaker)]))
.forEach(([id, data]) => {
const dest = path.join(__dirname, `../content/speakers/${id}.md`);
console.log('Write to', dest);
fs.writeFileSync(dest, data, writeOption);
});

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save