master
Igor Laborie 6 years ago
parent 39e6699fc4
commit 5119fe11e3
  1. 53
      test-hugo/config.toml
  2. 11
      test-hugo/content/blog/cfp.md
  3. 4
      test-hugo/content/blog/cr-cfp.md
  4. 5
      test-hugo/content/blog/hello-2019.md
  5. 18
      test-hugo/content/faq.md
  6. 1
      test-hugo/data/home.yml
  7. 9
      test-hugo/data/location.yml
  8. 43
      test-hugo/data/team.yml
  9. 2
      test-hugo/data/tickets.yml
  10. 67
      test-hugo/themes/devfest-theme-hugo/assets/script/good-map.js
  11. 6
      test-hugo/themes/devfest-theme-hugo/assets/style/pages/_home.scss
  12. 7
      test-hugo/themes/devfest-theme-hugo/assets/style/pages/_team.scss
  13. 6
      test-hugo/themes/devfest-theme-hugo/layouts/_default/baseof.html
  14. 48
      test-hugo/themes/devfest-theme-hugo/layouts/index.html
  15. 1
      test-hugo/themes/devfest-theme-hugo/layouts/partials/head.html
  16. 6
      test-hugo/themes/devfest-theme-hugo/layouts/team/single.html
  17. 2
      tools/extract-data.js
  18. 0
      tools/firebase-data.json
  19. 2
      tools/generate-sessions.js
  20. 2
      tools/generate-speakers.js

@ -22,13 +22,62 @@ googleAnalytics = "UA-37717223-7"
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."
images = ["/images/logo.svg", "/images/logo-monochrome.svg"]
email = "contact@devfesttoulouse.fr"
keywords = "event, gdg, gde, devfest, google, programming, android, chrome, polymer, developers, web, cloud, androiddev"
googleMapsAPIKey = "AIzaSyAsYarycfx4sV9QhauT5li-63snSTqoJ3g"
keywords = "event, gdg, gde, devfest, google, programming, android, chrome, developers, web, cloud, androiddev"
[params.logos]
header = "/images/logo.svg"
footer = "/images/logo-monochrome.svg"
[params.location]
name = "Centre de Congrès Pierre Baudis"
description = "Le Centre de Congrès Pierre Baudis est un lieu d'échanges moderne, situé sur un emplacement privilégié, à proximité immédiate du centre de Toulouse et dans un environnement verdoyant."
address = "11 Espl. Compans Caffarelli, 31000 Toulouse"
[params.location.pointer ]
latitude = 43.6110956
longitude = 1.4332799
[params.map]
googleMapsAPIKey = "AIzaSyAsYarycfx4sV9QhauT5li-63snSTqoJ3g"
latitude = 48
longitude = 8
zoom = 5
options = '''{
"disableDefaultUI": true,
"disableDoubleClickZoom": true,
"scrollwheel": false,
"draggable": false,
"styles": [{
"stylers": [{
"lightness": 40
},
{
"visibility": "on"
},
{
"gamma": 0.9
},
{
"weight": 0.4
}
]
}, {
"elementType": "labels",
"stylers": [{
"visibility": "on"
}]
}, {
"featureType": "water",
"stylers": [{
"color": "#5dc7ff"
}]
}, {
"featureType": "road",
"stylers": [{
"visibility": "off"
}]
}]
}'''
[taxonomies]
tag = "tags"

@ -16,6 +16,7 @@ En attendant, le jour J, le [CFP](https://devfest-toulouse.cfp.io/) (Call For Pa
## Les formats
Nouveauté cette année, vous vous proposons deux types de talks :
- le format **lightning talk**/quickie, d’une durée de **15 minutes**, comme l’an dernier
- le format **conférence** qui passe de 45 à **40 minutes** SANS QUESTION!
@ -46,11 +47,7 @@ Vous pouvez soumettre un talk en Français ou en Anglais.
Comme dit ci-dessus, les soumissions sont ouvertes **jusqu’au 1er Juillet 2018**. L’année dernière nous avons reçu plus de 150 soumissions ! N’attendez pas le dernier moment, soumettez un talk dès à présent !
<div layout horizontal center-justified>
<a href="https://devfest-toulouse.cfp.io/#/dashboard" rel="noopener noreferrer">
<paper-button primary>Je soumets !</paper-button>
</a>
</div>
[Je soumets !](https://devfest-toulouse.cfp.io/#/dashboard)
Vous avez des questions ? Vous pouvez écrire un message à l’équipe à [contact@devfesttoulouse.fr](contact@devfesttoulouse.fr
) ou bien sur notre compte Twitter [@DevFestToulouse](https://devfesttoulouse.fr).
Vous avez des questions ? Vous pouvez écrire un message à l’équipe à [contact@devfesttoulouse.fr](contact@devfesttoulouse.fr) ou bien sur notre compte Twitter [@DevFestToulouse](https://devfesttoulouse.fr).

@ -36,8 +36,8 @@ Les propositions de sujets ont été assez variées avec une nette domination po
![](graph-theme.png)
La liste complète des speakers est disponible sur le site : https://devfesttoulouse.fr/speakers/
Bon, on ne va pas vous mentir, il est possible que cette liste évolue légèrement selon les disponibilités et les contretemps de chacun(e). Nous la mettons à jour dès que possible donc n’hésitez pas à y jeter un coup d’oeil de temps en temps ou vous inscrire à la newsletter pour rester informés (par ici : https://devfesttoulouse.fr/).
La liste complète des speakers est disponible sur le site : <https://devfesttoulouse.fr/speakers/>
Bon, on ne va pas vous mentir, il est possible que cette liste évolue légèrement selon les disponibilités et les contretemps de chacun(e). Nous la mettons à jour dès que possible donc n’hésitez pas à y jeter un coup d’oeil de temps en temps ou vous inscrire à la newsletter pour rester informés (par ici : <https://devfesttoulouse.fr/>).
Nous vous en informerons aussi sur notre compte Twitter @DevFestToulouse .
Pour les sujets, allez, on est sympa, on vous dit tout :

@ -19,10 +19,8 @@ Situé en plein coeur de Toulouse, dans le quartier de Compans Cafarelli, access
Et… roulement de tambour, petite **nouveauté 2019**, il y aura un thème :
**LE FROMAGE :cheese:**
Ce thème sera décliné sur l’ensemble de la journée avec des **goodies**, une **décoration au top** et si vous voulez vous déguiser en Camenbert ou en Roquefort,
faites vous plaisir !
@ -42,8 +40,7 @@ Nous invitons également nos partenaires à jouer le jeu ;-).
- XX conférences,
- XXX speakers d’exception,
- XXX 20 partenaires,
- et pas mal de nuits courtes, de midis et de week-end bien chargés pour
les XX bénévoles.
- et pas mal de nuits courtes, de midis et de week-end bien chargés pour les XX bénévoles.
<!-- ![](/images/posts/2018-03-27-lancement-devfest-toulouse-2018/lancement-1.jpg) -->

@ -2,10 +2,10 @@
title: FAQs
---
## Général
### Qu'est ce que le DevFest Toulouse ?
Le DevFest, ou “Developers Festival”, est une conférence technique destinée aux développeur·se·s.
Elle s'adresse aussi bien aux étudiants, aux professionnels ou tout simplement aux curieux technophiles.
Durant toute la journée, des orateurs reconnus viendront présenter des sujets variés : autour du développement mobile, du web, de la data, des objets connectés, du cloud, du DevOps, etc... ainsi que des bonnes pratiques de développement.
@ -17,6 +17,7 @@ Cette journée sera l'occasion de rencontrer des orateurs de renommée internati
Le DevFest s'inscrit dans un [cadre international](https://developers.google.com/events/devfest/) et est organisé en partenariat avec Google.
### Les communautés organisatrices
Le DevFest Toulouse est un événement organisé par les communautés de développeurs de Toulouse, et porté administrativement par le GDG Toulouse (ex TAUG).
Vous retrouverez la liste des communautés en bas de page principale.
@ -26,9 +27,11 @@ Pour rendre tout cela possible, une équipe de bénévoles sur-vitaminée s’ac
## Conférence
### Où et quand aura lieu le DevFest ?
Le DevFest Toulouse 2017 a lieu le jeudi 8 novembre au Centre de Congrés Pierre Baudis.
### Comment s'y rendre ?
Le centre de congrés est idéalement situé en centre ville.
EN AVION :
@ -44,11 +47,13 @@ EN METRO :
Ligne B, descendez station Compans-Cafarelli.
### Comment devenir sponsor/partenaire ?
Le dossier de partenariat est en cours de finalisation.
## CFP
### Quel est le format des conférences ?
Deux types de conférences sont proposées :
- Les **lightning talks**, d’une durée de **15 minutes**, sans question.
@ -59,6 +64,7 @@ Pour les conférences données en toute fin de de journée, 10 minutes de questi
### Comment devenir orateur/oratrice ?
Le CFP est ouvert, il ferme le 1 Juillet 2018.
Il vous suffit de soumettre un ou plusieurs sujets sur notre [CFP](https://devfest-toulouse.cfp.io).
@ -67,25 +73,30 @@ Si votre sujet a été pré-sélectionné, nous vous offrons une place à la con
Que vous présentiez un talk seul ou en duo, chaque conférencier a son entrée offerte.
### Est-ce que l'on peut soumettre un talk a plusieurs ?
Oui, sur le site du CFP, si vous n'êtes pas seul lors de la présentation, renseignez l'e-mail des autres conférenciers, ceux-ci doivent s'être préalablement inscrits sur le CFP avec cette même adresse.
Pour des raisons pratiques, nous n’acceptons pas les sujets impliquant plus de trois orateur·rice·s.
### J’ai proposé une conférence. Dois-je acheter mon entrée ?
Si votre sujet (conférence ou lightning talk) a été sélectionné, nous vous offrons votre entrée au DevFest, vous n'avez donc pas à acheter votre place à l'avance.
Si vous présentez un talk à plusieurs, deux entrées vous seront offertes par conférence, les autres intervenants devront acheter leur propre place (en l’absence d’autres conférences acceptées.)
Au cas où votre sujet ne serait pas accepté, il vous sera encore possible d’acheter votre place après la notification, au tarif early-bird.
### Prenez-vous en charge les frais de déplacement et d’hébergement?
Les speakers présentant une conférence complète (40 minutes) peuvent demander un remboursement de leurs frais (transport et hébergement) sur présentation des factures, et dans une limite de 250€ par conférence (et non pas par speaker).
Pour les lightning talks, les frais de déplacement ne sont pas remboursés.
### Quels lieux recommandez-vous pour loger ?
Le centre de congrès Pierre Baudis est situé à 15 minutes à pied de l’hyper-centre de Toulouse, ou 5 minutes en métro (arrêt Compans-Caffarelli).
De nombreux hôtels et chambres d’hôtes sont disponibles à proximité.
### Quel est le format attendu pour les slides ?
Vous pouvez présenter votre conférence à partir de votre propre ordinateur, ou nous fournir au préalable les slides au format PDF.
Le thème des slides est entièrement libre, et les présentations seront diffusées ensuite sur la chaîne YouTube GDG France, qui héberge déjà les présentations des années précédentes.
@ -93,16 +104,21 @@ Le thème des slides est entièrement libre, et les présentations seront diffus
## Billetterie
### Quelles sont les conditions de remboursements de votre billet ?
Nous permettons un remboursement jusqu'à 15 jours avant l'événement hors frais de traitement de notre partenaire billetterie.
### Faut-il se munir d'une pièce d'identité ou y-a-t-il un âge minimum pour entrer à l'événement ?
Votre billet suffit, il n'y a pas d'âge minimum.
### Puis-je mettre à jour les informations de mon inscription ?
Oui, vous pouvez modifier les informations de votre commande sur le site de notre partenaire billetterie.
### Est-ce un problème si le nom indiqué sur mon billet ou mon inscription ne correspond pas à celui du participant ?
Oui. Merci de nous contacter en cas de question précise.
### J'aimerais une facture, comment l'obtenir ?
Notre association est désormais soumise à TVA. Il vous est donc possible d'obtenir une facture auprès de notre partenaire billetterie.

@ -1,5 +1,6 @@
info: >-
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.
what:
- label: Participants
value: 700

@ -1,9 +0,0 @@
name: Centre de Congrès Pierre Baudis
description: >-
Le Centre de Congrès Pierre Baudis est un lieu d'échanges moderne, situé sur un emplacement privilégié, à proximité immédiate du centre de Toulouse et dans un environnement verdoyant.
address: 11 Espl. Compans Caffarelli, 31000 Toulouse
pointer:
latitude: 43.6110956
longitude: 1.4332799
zoom: 5
mapCenter: 48,8

@ -1,12 +1,13 @@
- members:
- name: Julien Del Rio
title: GDG Toulouse
photoUrl: /images/people/julien_delrio.jpg
socials:
- icon: twitter
link: 'https://twitter.com/JulienDelRio'
name: Twitter
title: GDG Toulouse
- name: Julien Renaux
title: GDG Toulouse
photoUrl: /images/people/julien_renaux.jpg
socials:
- icon: twitter
@ -18,8 +19,9 @@
- icon: linkedin
link: 'https://www.linkedin.com/in/julienrenaux/'
name: LinkedIn
title: GDG Toulouse
- name: Alexia Audevart
title: Toulouse Data Science
photoUrl: 'https://www.ekito.fr/img/team/aaudevart.jpg'
socials:
- icon: twitter
@ -31,8 +33,9 @@
- icon: linkedin
link: 'https://www.linkedin.com/in/alexia-audevart-450b8a1/'
name: Linkedin
title: Toulouse Data Science
- name: Kevin Davin
title: GDG Toulouse & Toulouse JUG
photoUrl: /images/people/kevin_davin.png
socials:
- icon: gplus
@ -47,8 +50,9 @@
- icon: linkedin
link: www.linkedin.com/in/davinkevin
name: LinkedIn
title: GDG Toulouse & Toulouse JUG
- name: Aurélie Vache
title: Duchess France / Toulouse Data Science
photoUrl: /images/people/aurelie_vache.png
socials:
- icon: twitter
@ -63,37 +67,42 @@
- icon: github
link: 'https://github.com/scraly'
name: Github
title: Duchess France / Toulouse Data Science
- name: Maxime Pawlak
title: GDG Toulouse
photoUrl: /images/people/maxime_pawlak.jpg
socials:
- icon: twitter
link: 'https://twitter.com/Maxime_Pawlak'
name: Twitter
title: GDG Toulouse
- name: Michaël Bitard
title: Electron liiiibre
photoUrl: /images/people/michael_bitard.jpg
socials:
- icon: twitter
link: 'https://twitter.com/bitardmichael'
name: Twitter
title: Electron liiiibre
- name: Didier Plaindoux
title: Toulouse JUG
photoUrl: /images/people/didier_plaindoux.jpeg
socials:
- icon: twitter
link: 'https://twitter.com/dplaindoux'
name: Twitter
title: Toulouse JUG
- 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
title: Toulouse JUG
- name: Igor Laborie
title: Folivoraphile
photoUrl: >-
https://pbs.twimg.com/profile_images/3404066863/94e02f3bca9b038c4546f4e42ed05bc6.jpeg
socials:
@ -103,22 +112,25 @@
- icon: github
link: 'https://github.com/ilaborie'
name: Github
title: Folivoraphile
- name: Emmanuel Vinas
title: GDG Toulouse
photoUrl: /images/people/emmanuel_vinas.jpeg
socials:
- icon: twitter
link: 'https://twitter.com/EmmanuelVinas'
name: Twitter
title: GDG Toulouse
- name: Lionel Porcheron
title: Toulouse DevOps
photoUrl: /images/people/lionel_porcheron.jpg
socials:
- icon: twitter
link: 'https://twitter.com/lporcheron'
name: Twitter
title: Toulouse DevOps
- name: Michaël Pailloncy
title: Toulouse JAM / JUG
photoUrl: 'https://s.gravatar.com/avatar/1b42d100589ea585ce9a1f359b8d4496?s=160'
socials:
- icon: twitter
@ -130,8 +142,9 @@
- icon: linkedin
link: 'https://www.linkedin.com/in/michael-pailloncy-21119827/'
name: LinkedIn
title: Toulouse JAM / JUG
- name: Elodie Lerare
title: ''
photoUrl: images/people/elodie_lerare.jpg
socials:
- icon: twitter
@ -140,5 +153,3 @@
- icon: linkedin
link: 'https://www.linkedin.com/in/elodie-lerare-223a6b41/'
name: LinkedIn
title: ''
title: Core Team

@ -9,6 +9,7 @@
regular: true
soldOut: true
url: 'https://www.billetweb.fr/devfest-toulouse-2018'
- currency:
starts: 06 Juin
ends: 08 Novembre
@ -20,6 +21,7 @@
regular: true
soldOut: true
url: 'https://www.billetweb.fr/devfest-toulouse-2018'
- currency:
starts: 01 Août
ends: 08 Novembre

@ -0,0 +1,67 @@
'use strict';
{
let initCalled;
const callbackPromise = new Promise((r) => window.__initGoodMap = r);
function loadGoogleMaps(apiKey) {
if (!initCalled) {
const script = document.createElement('script');
script.src = 'https://maps.googleapis.com/maps/api/js?' +
(apiKey ? `key=${apiKey}&` : '') +
'callback=__initGoodMap';
document.head.appendChild(script);
initCalled = true;
}
return callbackPromise;
}
customElements.define('good-map', class extends HTMLElement {
static get observedAttributes() {
return ['api-key', 'zoom', 'latitude', 'longitude', 'map-options'];
}
attributeChangedCallback(name, oldVal, val) {
switch (name) {
case 'api-key':
this.apiKey = val;
break;
case 'zoom':
case 'latitude':
case 'longitude':
this[name] = parseFloat(val);
break;
case 'map-options':
this.mapOptions = JSON.parse(val);
break
}
}
constructor() {
super();
this.map = null;
this.apiKey = null;
this.zoom = null;
this.latitude = null;
this.longitude = null;
this.mapOptions = {};
}
connectedCallback() {
loadGoogleMaps(this.apiKey).then(() => {
if (!this.mapOptions.zoom) {
this.mapOptions.zoom = this.zoom || 0;
}
if (!this.mapOptions.center) {
this.mapOptions.center = {
lat: this.latitude || 0,
lng: this.longitude || 0
};
}
this.map = new google.maps.Map(this, this.mapOptions);
this.dispatchEvent(new CustomEvent('google-map-ready', { detail: this.map }));
});
}
});
}

@ -74,10 +74,16 @@
}
section.location {
padding: 0;
position: relative;
background: var(--darken-1);
font-weight: 300;
#map {
display: block;
height: 664px;
}
.description {
display: inline-block;
padding: var(--space-4);

@ -32,13 +32,18 @@
display: flex;
margin: 0;
padding: 0;
font-size: 1.5em;
li {
filter: grayscale(1);
transition: filter var(--animation);
&:hover, &:focus {
&:hover,
&:focus {
filter: grayscale(0);
}
}
}
}
}

@ -18,13 +18,15 @@
{{ end }}
{{ block "scripts" . }}
{{ $base := resources.Get "script/base.js" }}
{{ $subscription := resources.Get "script/subscription.js" }}
{{ $shuffle := resources.Get "script/shuffle.js" }}
{{ $map := resources.Get "script/good-map.js" }}
{{ $js := slice $base $subscription $shuffle | resources.Concat "script/main.js" }}
{{ $js := slice $base $subscription $shuffle $map | resources.Concat "script/main.js" }}
<script src="{{ $js.Permalink }}"></script>
{{ block "scripts" . }}
<!-- No extra scripts -->
{{ end }}
</body>

@ -68,29 +68,20 @@
</section>
{{ end }}
{{ if .Params.location }}
<section class="location">
<iframe
src='https://www.google.com/maps/embed/v1/view?key={{ .Site.Params.googleMapsAPIKey }}&zoom={{ .Site.Data.location.pointer.zoom }}&center={{ .Site.Data.location.mapCenter }}'
frameborder="0"
scrolling="no"
width="100%"
height="400">
</iframe>
<good-map id="map" api-key="{{ .Site.Params.map.googleMapsAPIKey }}" latitude="{{ .Site.Params.map.latitude }}"
longitude="{{ .Site.Params.map.longitude }}" zoom="{{ .Site.Params.map.zoom }}" map-options="{{ replace .Site.Params.map.options "\n" ""}}">
</good-map>
<div class="description">
<h2>Le lieu</h2>
<h3>{{ .Site.Data.location.name }}</h3>
<p>{{ .Site.Data.location.description }}</p>
<h3>{{ .Site.Params.location.name }}</h3>
<p>{{ .Site.Params.location.description }}</p>
<div class="direction">
{{ .Site.Data.location.address }}
{{ if .Site.Data.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.Data.location.pointer.latitude }},{{ .Site.Data.location.pointer.longitude }}"></a>
{{ .Site.Params.location.address }}
{{ if .Site.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>
@ -108,3 +99,26 @@
{{ end }}
{{ end }}
{{ define "scripts"}}
<script>
document.querySelector('#map')
.addEventListener('google-map-ready', (e) => {
new google.maps.Marker({
position: {
lat: parseFloat('{{ .Site.Params.location.pointer.latitude }}'),
lng: parseFloat('{{ .Site.Params.location.pointer.longitude }}'),
},
icon: {
url: 'images/map-marker.svg',
anchor: new google.maps.Point(25, 50),
scaledSize: new google.maps.Size(50, 50),
},
map: e.detail,
});
}, {
once: true
});
</script>
{{ end }}

@ -38,4 +38,5 @@
{{ $style := resources.Get "style/main.scss" | resources.ToCSS | resources.Minify | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $style.Permalink }}">
</head>

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

@ -13,7 +13,7 @@ const writeToYml = (list, dest) => {
fs.writeFileSync(dest, data, writeOption);
};
const firebaseData = require('../test-hugo/data/firebase-data.json');
const firebaseData = require('./firebase-data.json');
['partners', 'team', 'tickets']
.forEach(key => {

@ -7,7 +7,7 @@ const writeOption = {
flag: 'w'
};
const firebaseData = require('../test-hugo/data/firebase-data.json');
const firebaseData = require('./firebase-data.json');
const generateSessionData = (id, session) => {

@ -7,7 +7,7 @@ const writeOption = {
flag: 'w'
};
const firebaseData = require('../test-hugo/data/firebase-data.json');
const firebaseData = require('./firebase-data.json');
const generateSpeakerData = (id, speaker) => {
const frontMatter = {id, ...speaker};

Loading…
Cancel
Save