Merge branch 'deno' into 'master'
Deno See merge request ballephenix/website!2
This commit was merged in pull request #6.
This commit is contained in:
commit
7bee9526fc
136 files changed
+10549
-24834
No files matched your search
+16
-26
@@ -1,29 +1,19 @@
|
||||
image: "node:12.22.1"
|
||||
image: nixos/nix
|
||||
|
||||
before_script:
|
||||
# install ssh-agent
|
||||
- 'which npm || ( apt-get update -y && apt-get install node -y )'
|
||||
workflow:
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH
|
||||
|
||||
pages:
|
||||
stage: deploy
|
||||
cache:
|
||||
paths:
|
||||
- node_modules/
|
||||
- lib/
|
||||
script:
|
||||
- export SALT="salt_and_pepper"
|
||||
- export KEY="qwerty"
|
||||
- export PLAYER_LIST_LOCATION="//ballephenix.gitlab.io/private/players.spritz.js"
|
||||
- npm install
|
||||
- node_modules/.bin/gulp prod
|
||||
- node_modules/.bin/r.js -o build.js
|
||||
- rm -rf node_modules .public public
|
||||
- mkdir .public
|
||||
- cp -r * .public
|
||||
- cp -r .well-known .public # for let's encrypt
|
||||
- mv .public public
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
only:
|
||||
- master
|
||||
stage: deploy
|
||||
script:
|
||||
- mkdir -p "$HOME/.config/nix"
|
||||
- echo 'experimental-features = nix-command flakes' > "$HOME/.config/nix/nix.conf"
|
||||
- nix build
|
||||
- cp -r result/ public
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == "main"
|
||||
environment: production
|
||||
@@ -1 +0,0 @@
|
||||
4VCd-x0J9qsZgGuJ-c3Wu_KpOphzhjXfVhEyFGBCQ-c.x_X1OQlfsQAsCyXJHKuPmU8SV-1VK_3KvYbbl7KY81A
|
||||
@@ -1 +0,0 @@
|
||||
o16F72Bt8czXRTmH9wMZn_OiOinya_kW16yTtSj0bEk.x_X1OQlfsQAsCyXJHKuPmU8SV-1VK_3KvYbbl7KY81A
|
||||
@@ -1 +0,0 @@
|
||||
umfDF6CvoJs42QhTKeBgEe12M-iVjbMHwxdEoweV6G8.x_X1OQlfsQAsCyXJHKuPmU8SV-1VK_3KvYbbl7KY81A
|
||||
@@ -1,13 +0,0 @@
|
||||
({
|
||||
baseUrl: "script",
|
||||
paths: {
|
||||
m: '../node_modules/mithril/mithril.min',
|
||||
_: '../node_modules/lodash/lodash.min',
|
||||
spritz: '../node_modules/spritzjs/dist/spritz',
|
||||
requireLib: '../node_modules/requirejs/require'
|
||||
},
|
||||
include: 'main',
|
||||
name: "../node_modules/almond/almond",
|
||||
out: "main-built.js",
|
||||
optimize: 'none'
|
||||
})
|
||||
-190
@@ -1,190 +0,0 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Balle Phenix</title>
|
||||
<link rel="stylesheet" href="css/style.css" />
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
|
||||
<script src="lib/mithril/mithril.min.js"></script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav class="uk-navbar">
|
||||
<div class="uk-navbar-content uk-navbar-center">
|
||||
<ul class="uk-navbar-nav">
|
||||
<li class="uk-parent">
|
||||
<a href="https://www.facebook.com/LigueDeBalleLesPhenix">
|
||||
<i class="fa fa-facebook-square"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="uk-parent"><a href="/">Acceuil</a></li>
|
||||
<li class="uk-active"><a href="">Calendrier</a></li>
|
||||
<li class="uk-parent"><a>Règlements</a></li>
|
||||
<li class="uk-parent"><a>Photos</a></li>
|
||||
<li class="uk-parent"><a>Membre</a></li>
|
||||
<li class="uk-parent"><a>Nous Joindre</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
<div class="uk-grid">
|
||||
<div class="uk-width-1-5"></div>
|
||||
<div class="uk-width-3-5">
|
||||
|
||||
<div class="uk-grid">
|
||||
<div class="uk-width-5-5">
|
||||
<h2>Classement 2015</h2>
|
||||
<table class="uk-table uk-table-hover uk-table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Équipes</th>
|
||||
<th>PJ</th>
|
||||
<th>V</th>
|
||||
<th>D</th>
|
||||
<th>N</th>
|
||||
<th>PP</th>
|
||||
<th>PC</th>
|
||||
<th>DIF</th>
|
||||
<th>PTS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Verts</td>
|
||||
<td>14</td>
|
||||
<td>11</td>
|
||||
<td>3</td>
|
||||
<td>0</td>
|
||||
<td>161</td>
|
||||
<td>108</td>
|
||||
<td>+53</td>
|
||||
<td>22</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Verts</td>
|
||||
<td>14</td>
|
||||
<td>11</td>
|
||||
<td>3</td>
|
||||
<td>0</td>
|
||||
<td>161</td>
|
||||
<td>108</td>
|
||||
<td>+53</td>
|
||||
<td>22</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Verts</td>
|
||||
<td>14</td>
|
||||
<td>11</td>
|
||||
<td>3</td>
|
||||
<td>0</td>
|
||||
<td>161</td>
|
||||
<td>108</td>
|
||||
<td>+53</td>
|
||||
<td>22</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Verts</td>
|
||||
<td>14</td>
|
||||
<td>11</td>
|
||||
<td>3</td>
|
||||
<td>0</td>
|
||||
<td>161</td>
|
||||
<td>108</td>
|
||||
<td>+53</td>
|
||||
<td>22</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul class="uk-subnav uk-subnav-line uk-flex-center">
|
||||
<li>PJ : Parties joués </li><li> V : Victoire </li><li> D : Défaite </li><li> N : Nul </li><li> PP : Points pour </li><li> PC : Points contre </li><li> DIF : Diférenciel </li><li> PTS : Points </li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="uk-grid">
|
||||
<div class="uk-width-3-5">
|
||||
<h2>Calendrier 2015</h2>
|
||||
<h3 style="text-align: left;">5 mai 2016</h3>
|
||||
<table class="uk-table uk-table-hover uk-table-condensed uk-table-striped">
|
||||
<tr>
|
||||
<td>18h30</td>
|
||||
<td><i class="fa fa-flag" style="color: purple;"></i> Mauve</td>
|
||||
<td>8</td>
|
||||
<td>vs</td>
|
||||
<td><i class="fa fa-flag" style="color: red;"></i> Rouge</td>
|
||||
<td>7</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>18h30</td>
|
||||
<td><i class="fa fa-flag" style="color: yellow;"></i> Jaune</td>
|
||||
<td>00</td>
|
||||
<td>vs</td>
|
||||
<td><i class="fa fa-flag" style="color: gray;"></i> Gris</td>
|
||||
<td>00</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="uk-width-1-5"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<footer class="uk-grid ph-footer" style="padding: 80px;">
|
||||
<div class="uk-container uk-container-center uk-text-center">
|
||||
<div class="uk-panel">
|
||||
Ligue de balle les Phénix … pour le plaisir de jouer!
|
||||
</div>
|
||||
<ul class="uk-subnav uk-subnav-line uk-flex-center">
|
||||
<li><a href="mailto:info@ballephenix.com">info@ballephenix.com</a></li>
|
||||
</ul>
|
||||
<h1>
|
||||
<a href="https://www.facebook.com/LigueDeBalleLesPhenix">
|
||||
<i class="fa fa-facebook-square"></i>
|
||||
</a>
|
||||
</h1>
|
||||
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,44 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Assemblée Générale 2017!
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Dimanche 17 Septembre 2017
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
Bonjour à tous,
|
||||
|
||||
Voilà déjà le temps de penser à l'AGA 2017, vous êtes donc invités le 23
|
||||
septembre 2017 à 13:00 au [2120, boul. Pie-IX](https://goo.gl/maps/ApFhYX4Gz6A2).
|
||||
|
||||
Cette année il y a deux postes à pourvoir soit:
|
||||
|
||||
* **Président(e)**: mandat de deux ans
|
||||
* **Trésorier(ère)**: mandat de deux ans.
|
||||
|
||||
Si un des deux postes vous intéresse, veuillez faire parvenir un courriel à
|
||||
nathalie7033@gmail.com avant le 22 septembre 2017. Si nous recevons plusieurs
|
||||
noms pour le même poste, il y aura élection par les membres le 23 septembre.
|
||||
|
||||
Si vous ne pouvez pas être présent et aimeriez qu'on discute d'un sujet qui
|
||||
vous tient à coeur, vous pouvez nous contacter et et nous les metterons
|
||||
à l'ordre du jour.
|
||||
|
||||
bien à vous,
|
||||
|
||||
votre commite.
|
||||
"""
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
Bonjour à tous,
|
||||
|
||||
Voilà déjà le temps de penser à l'AGA 2017, vous êtes donc invités le 23
|
||||
septembre 2017 à 13:00 au [2120, boul. Pie-IX](https://goo.gl/maps/ApFhYX4Gz6A2).
|
||||
|
||||
**[lire la suite ...](#/nouvelles)**
|
||||
"""
|
||||
@@ -1,33 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Virée au Bar L’Astral 2000
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Samedi 13 Juillet 2019
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
La ligue de balle lente Les Phénix remercie son commanditaire Le Bar L’Astral 2000 pour sa contribution à notre saison 2019. Sa commandite a permis, en partie, à fournir 5 nouveaux uniformes d’équipes aux Phénix.
|
||||
|
||||
Maintenant que le beau temps se montre il sera de coutume d’aller faire un tour au Bar L’Astral 2000 le jeudi soir après nos matchs, question de socialiser entre nous et chanter, car c’est aussi un bar karaoké! Rendez-vous au [1845 Rue Ontario Est](https://goo.gl/maps/L3gdVVhKvrrgYDcc7).
|
||||
|
||||
|
||||
[](https://www.facebook.com/Astral-2000-494597793884464/)
|
||||
|
||||
<p style="text-align: center; width: 100%;">
|
||||
<a href="https://www.facebook.com/Astral-2000-494597793884464/">
|
||||
<i class="fa fa-facebook-square" style="font-size: 3em;"></i>
|
||||
</a>
|
||||
</p>
|
||||
"""
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
|
||||
Vous êtes tannés de l’hiver et vous avez hâte de sortir gant et bâton, de jouer dans le sable et sur l’herbe du terrain, retrouver une ambiance amicale et se faire de nouveaux ami(e)s ?
|
||||
|
||||
**[lire la suite ...](#/nouvelles)**
|
||||
"""
|
||||
@@ -1,24 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Parc Beaubien
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Vendredi 19 aout 2016
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
|
||||
Bonjour à tous les phénixiens phénixiennes.
|
||||
|
||||
Dès la semaine prochaine, **nous nous relocaliserons au parc Beaubien**, dans
|
||||
Rosemont. [Google map](http://bit.ly/2bPWCY8) vous aidera a trouver votre
|
||||
chemin.
|
||||
|
||||
|
||||
Votre comité de balle les phénix.
|
||||
|
||||
|
||||
"""
|
||||
@@ -1,38 +0,0 @@
|
||||
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Evaluation et pratique 2018!
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Lundi 07 mai 2018
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
Bonsoir à tous les membres des Phénix - nouveaux et anciens,
|
||||
|
||||
La saison va bientôt commencer et nous souhaitons évaluer les nouveaux membres des Phénix dans un contexte de jeu. Ce qui veut dire que nous voulons voir les joueurs en action. Nous vous invitons donc à participer à cet événement le 12 mai prochain à compter de 13h30 au parc Walter-Stewart. Apportez votre gant !
|
||||
|
||||
Pour les anciens, venez faire connaissance avec les nouveaux, et par le fait même, vous mettre en forme pour la prochaine saison. Tous les anciens sont bienvenus.
|
||||
|
||||
Les capitaines seront rapidement appelés à faire leurs équipes après la journée d'évaluation. Nous prévoyons commencer à jouer dès le jeudi 17 mai prochain. L'heure vous sera confirmée par vos capitaines.
|
||||
|
||||
Pour votre information, cette saison nous allons avoir 4 équipes de 10 joueurs et pour ceux qui connaissent des joueurs ou joueuses qui voudraient à l'occasion agir comme remplaçants, nous sommes à constituer une liste qui servira aux capitaines pour faciliter les remplacements. N'hésitez pas à nous donner les noms et adresses courriel de vos amis qui seraient intéressés.
|
||||
|
||||
À bientôt
|
||||
|
||||
"""
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
|
||||
Bonsoir à tous les membres des Phénix - nouveaux et anciens,
|
||||
|
||||
La saison va bientôt commencer et nous souhaitons évaluer les nouveaux membres des Phénix dans un contexte de jeu. Ce qui veut dire que nous voulons voir les joueurs en action. Nous vous invitons donc à participer à cet événement le 12 mai prochain à compter de 13h30 au parc Walter-Stewart. Apportez votre gant !
|
||||
|
||||
|
||||
**[Tous les details ...](#/nouvelles)**
|
||||
|
||||
"""
|
||||
@@ -1,61 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Inscription 2016!
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Lundi 14 mars 2016
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
|
||||
Bonjour à tous les phénixiens phénixiennes.
|
||||
|
||||
Eh bien oui l'hiver tire à ça fin et il sera bientôt temps de sortir gants et
|
||||
batons (en bon français mites et battes) pour jouer à notre sport préféré:
|
||||
la balle-molle.
|
||||
|
||||
|
||||
**L'inscription aura lieu le vendredi 18 mars 2016 de 19h30 à 21h30 à la [taverne
|
||||
le normandie](http://bit.ly/1pmNWu8)**; situé au [1295 rue amherst,
|
||||
Montréal](http://bit.ly/1QUC6Ou). Il s'agit de l'endroit ou nous avons fêté la
|
||||
fin de la dernière saison.
|
||||
|
||||
|
||||
Le prix de l'inscription est de 110$ incluant la location du chandail au coût de
|
||||
10$. La valeur de la location du chandail vous sera rendu en fin de saison
|
||||
lorsque vous le rendrez.
|
||||
|
||||
Pour ceux et celles qui ne pourront être présent à l'inscription, vous pouvez
|
||||
vous inscrire par courrier. Imprimez, remplissez et envoyez le formulaire
|
||||
avec le chèque.
|
||||
|
||||
|
||||
Nous avons très hâte de vous y voir et de fêter avec vous!!!
|
||||
|
||||
|
||||
Votre comité de balle les phénix.
|
||||
|
||||
[<i class="fa fa-paperclip"></i> Formulaire d'inscription](/files/inscription2016.pdf)
|
||||
|
||||
"""
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
Bonjour à tous les phénixiens phénixiennes.
|
||||
|
||||
Eh bien oui l'hiver tire à ça fin et il sera bientôt temps de sortir gants et
|
||||
batons (en bon français mites et battes) pour jouer à notre sport préféré:
|
||||
la balle-molle.
|
||||
|
||||
|
||||
**L'inscription aura lieu le vendredi 18 mars 2016 de 19h30 à 21h30 à la [taverne
|
||||
le normandie](http://bit.ly/1pmNWu8)**; situé au [1295 rue amherst,
|
||||
Montréal](http://bit.ly/1QUC6Ou). Il s'agit de l'endroit ou nous avons fêté la
|
||||
fin de la dernière saison.
|
||||
|
||||
**[lire la suite ...](#/nouvelles)**
|
||||
|
||||
"""
|
||||
@@ -1,60 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Inscription 2017!
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Samedi 18 mars 2017
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
Bonjour à tous les phénixiens phénixiennes.
|
||||
|
||||
Bien que subtilement, l'hiver tire à sa fin et et la saison de la balle-molle
|
||||
arrive a grand pas. Comble du bonheur, nous retrouvons notre parc, Walter-Stewart,
|
||||
et gardons notre plage horaire, les jeudi soirs.
|
||||
|
||||
**L'inscription aura lieu le vendredi 24 mars 2017 de 18h30 à 21h30 à la [taverne
|
||||
le normandie](http://bit.ly/1pmNWu8)**; situé au [1295 rue amherst,
|
||||
Montréal](http://bit.ly/1QUC6Ou). Il s'agit de l'endroit ou nous avons fêté la
|
||||
fin de la dernière saison.
|
||||
|
||||
Le prix de l'inscription est de **110$** incluant la location du chandail au coût de
|
||||
10$. La valeur de la location du chandail vous sera rendue en fin de saison
|
||||
lorsque vous le rendrez.
|
||||
|
||||
Pour ceux et celles qui ne pourront être présent à l'inscription, vous pouvez
|
||||
vous inscrire par courrier. Imprimez, remplissez et envoyez le formulaire
|
||||
avec le chèque.
|
||||
|
||||
Nous allons jouer une **partie hors concours le 4 mai** et la **saison
|
||||
commencera le jeudi 11 mai**.
|
||||
|
||||
Nous avons très hâte de vous y voir et de fêter avec vous!!!
|
||||
|
||||
|
||||
Votre comité de balle les phénix.
|
||||
|
||||
[<i class="fa fa-paperclip"></i> Formulaire d'inscription](/files/inscription2017.pdf)
|
||||
|
||||
"""
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
Bonjour à tous les phénixiens phénixiennes.
|
||||
|
||||
Bien que subtilement, l'hiver tire à sa fin et et la saison de la balle-molle
|
||||
arrive a grand pas. Comble du bonheur, nous retrouvons notre parc, Walter-Stewart,
|
||||
et gardons notre plage horaire, les jeudi soirs.
|
||||
|
||||
**L'inscription aura lieu le vendredi 24 mars 2017 de 18h30 à 21h30 à la [taverne
|
||||
le normandie](http://bit.ly/1pmNWu8)**; situé au [1295 rue amherst,
|
||||
Montréal](http://bit.ly/1QUC6Ou). Il s'agit de l'endroit ou nous avons fêté la
|
||||
fin de la dernière saison.
|
||||
|
||||
|
||||
**[lire la suite ...](#/nouvelles)**
|
||||
|
||||
"""
|
||||
@@ -1,85 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Inscription 2018!
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Samedi 17 mars 2018
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
Bonjour à tous les membres de la Ligue de balle des Phénix et les autres qui
|
||||
se joindront à nous,
|
||||
|
||||
L'hiver tire à sa fin. C'est donc un signe que la saison de la balle-molle
|
||||
arrive à grand pas.
|
||||
|
||||
Mais d'abord, nous voudrions remercier Nathalie Ste-Marie et Sylvain Grenier
|
||||
pour tout le travail effectué, la grande collaboration et la transmission des
|
||||
effets de la Ligue ainsi que de tout le matériel. Nous savons que votre
|
||||
implication immense a permis à la Ligue de continuer à se développer.
|
||||
Merci encore.
|
||||
|
||||
Comme par le passé, il y aura une soirée d'inscription. Elle aura lieu le
|
||||
vendredi 6 avril 2018 de 18h à 21h au [Bar l'Astral 2000](http://bit.ly/2FHSjMC)
|
||||
situé au 1845 Rue Ontario E, Montréal, QC H2K 1T7. Comme vous le constatez,
|
||||
c'est un nouveau lieu de rassemblement pour les Phénix. Le Bar est situé
|
||||
beaucoup plus près de notre terrain de balle habituel ([parc Walter-Stuart](http://bit.ly/2G2fhxn)) que la Taverne Normandie
|
||||
où nous allions auparavant et que nous avons délaissée l'an passé. Le Bar
|
||||
l'[Astral 2000](http://bit.ly/2FHSjMC) est aussi notre commanditaire. Il faudra l'encourager, ce
|
||||
que je ne doute même pas. Nous en profiterons pour vous parler des nouvelles
|
||||
règles qui s'appliqueront cet été.
|
||||
|
||||
Le prix de l'inscription reste le même que l'année dernière soit de 110$
|
||||
incluant la location du chandail au coût de 10$. La valeur de la location
|
||||
du chandail vous sera rendue lorsque vous le remettrez à la fin de la saison.
|
||||
De plus, nous offrirons un rabais sur l'inscription de 25 $ pour les personnes
|
||||
qui seront choisies comme capitaine. Cette somme leur sera remise à la fin de
|
||||
la saison. Nous jouerons les jeudis comme les années passées. La saison va
|
||||
débuter au début du mois de mai quand les terrains seront officiellement
|
||||
disponibles et se terminer à la fin août.
|
||||
|
||||
Une nouveauté cette année, il n'y aura que deux matchs par soir, ce qui
|
||||
devrait nous permettre de socialiser un peu plus après les parties. Ça nous
|
||||
permettra d'utiliser l'Astral comme lieu de rassemblement pour rire un peu
|
||||
et nous rappeler nos bons et mauvais coups.
|
||||
|
||||
Pour ceux et celles qui ne pourront être présents à l'inscription, vous
|
||||
pouvez vous inscrire par courrier. Imprimez, remplissez et envoyez le
|
||||
formulaire d'inscription et le code de conduite avec votre chèque. Faites-vite,
|
||||
puisque les places sont limitées. Maximum 50 joueurs.
|
||||
|
||||
Nous avons très hâte de vous voir !!!
|
||||
|
||||
Votre comité exécutif de La Ligue de balle les Phénix.
|
||||
|
||||
Marie-Ève, Didier, Richard et Gilles
|
||||
|
||||
[<i class="fa fa-paperclip"></i> Formulaire d'inscription](/files/inscription2018.pdf)
|
||||
[<i class="fa fa-paperclip"></i> Code de conduite](/files/code_de_conduite.pdf)
|
||||
|
||||
"""
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
|
||||
Bonjour a tous!
|
||||
|
||||
**L'inscription pour la saison 2018 aura lieu le vendredi 6 avril 2018 de 18h à
|
||||
21h au [Bar l'Astral 2000](http://bit.ly/2FHSjMC)**. Le prix reste le meme a
|
||||
110$ (incluant un 10$ qui de depot pour le chandail).
|
||||
|
||||
Cette annee, il vous faudra remplir le
|
||||
[formulaire d'inscription](/files/inscription2018.pdf) et un signer un
|
||||
[code de conduite](/files/code_de_conduite.pdf). Si vous ne pouvez pas
|
||||
vous presenter a l'inscription, vous pouvez toujours envoyer les formulaires
|
||||
ainsi que votre cheque par la poste.
|
||||
|
||||
[<i class="fa fa-paperclip"></i> Formulaire d'inscription](/files/inscription2018.pdf)
|
||||
[<i class="fa fa-paperclip"></i> Code de conduite](/files/code_de_conduite.pdf)
|
||||
|
||||
**[Tous les details ...](#/nouvelles)**
|
||||
|
||||
"""
|
||||
@@ -1,55 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Inscription 2019!
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Dimanche 17 Février 2019
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
|
||||
Vous êtes tannés de l’hiver et vous avez hâte de sortir gant et bâton, de jouer
|
||||
dans le sable et sur l’herbe du terrain, retrouver une ambiance amicale et se
|
||||
faire de nouveaux ami(e)s ?
|
||||
|
||||
Venez rencontrer des membres de la ligue de balle-lente Les Phénix - et tous
|
||||
ceux et celles qui veulent se joindre à nous - à une soirée d’inscription, le
|
||||
vendredi 5 avril 2019, de 18h30 à 20h30, au Bar L’Astral 2000, situé au 1845
|
||||
rue Ontario Est, à Montréal. Ce bar qui nous commandite permet de nous réunir
|
||||
après nos parties pour parler, boire et chanter au karaoké!
|
||||
|
||||
Combien ça coûte pour jouer? Les frais d’inscription 2019 sont de 100$. Aucun
|
||||
dépôt pour le chandail d’équipe. Payable en argent comptant ou chèque. Saison
|
||||
et party compris.
|
||||
|
||||
Chaque semaine, il y aura deux parties à l’horaire le jeudi soir au parc
|
||||
Walter-Stewart, près du métro Frontenac, de mai à fin août (environ 16
|
||||
semaines de jeu). Une pratique optionnelle sera organisée le dimanche.
|
||||
Les nouveaux joueurs seront conviés fin avril pour une évaluation sur le
|
||||
terrain afin de permettre la formation d’équipes équilibrées.
|
||||
|
||||
Au plaisir de vous voir en grand nombre le 5 avril!
|
||||
|
||||
Les personnes qui préfèrent s’inscrire par courrier peuvent remplir et signer
|
||||
le [formulaire et le code de conduite](/files/inscription_et_code_2019.pdf).
|
||||
|
||||
Pour information sur les inscriptions : Richard Dicaire, trésorier, au 514-714-2246
|
||||
|
||||
Votre comité des Phénix
|
||||
|
||||
|
||||
[<i class="fa fa-paperclip"></i> Formulaire d'inscription](/files/inscription_et_code_2019.pdf)
|
||||
|
||||
|
||||
"""
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
|
||||
Vous êtes tannés de l’hiver et vous avez hâte de sortir gant et bâton, de jouer dans le sable et sur l’herbe du terrain, retrouver une ambiance amicale et se faire de nouveaux ami(e)s ?
|
||||
|
||||
**[lire la suite ...](#/nouvelles)**
|
||||
"""
|
||||
@@ -1,25 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Viens t’inscrire le 5 avril
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Lundi 1er Avril 2019
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
|
||||
Profitez de l’arrivée du printemps pour vous présenter à la soirée d’inscription
|
||||
la ligue de balle-lente Les Phénix le vendredi 5 avril 2019, de 18h30 à 20h30,
|
||||
au [Bar L’Astral 2000, situé au 1845 rue Ontario Est, à Montréal](https://goo.gl/maps/3SND4ZqGZKP2). Coût de 100$
|
||||
comptant ou chèque pour jouer le jeudi soir au parc Walter-Stewart, de la
|
||||
mi-mai à la fin août. Évaluation des nouveaux vers la fin avril. Le comité
|
||||
2019 se fera un plaisir de vous accueillir, répondre vos questions et
|
||||
socialiser avec les futurs joueurs.
|
||||
|
||||
[<i class="fa fa-paperclip"></i> Formulaire d'inscription](/files/inscription_et_code_2019.pdf)
|
||||
|
||||
|
||||
"""
|
||||
@@ -1,50 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown="""
|
||||
## Inscription 2016 et Dates!
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Jeudi 31 mars 2016
|
||||
"""
|
||||
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
Bonjour a tous,
|
||||
|
||||
Permièrement, il est encore temps de s'inscrire. Par ordre de l'Association de
|
||||
Sport de Ball de Montréal, **l'inscription doit être fini le 15 avril**. Donc
|
||||
imprimez et envovez votre inscription le plus vite possible!
|
||||
|
||||
Deuxièmement, nous avons des nouvelles sur les dates. La **saison commencera
|
||||
le jeudi 12 mai**. Nous allons jouer une **partie hors concours le 5 mai**.
|
||||
Comme aux saisons précédentes, nous jouerons les jeudi soir au parc
|
||||
Walter-Stewart et y organiserons une pratique les dimanches matins.
|
||||
|
||||
Pour les nouveaux, les **évaluations se feront dans les alentours du 30 avril**.
|
||||
Il s'agit d'une journee ou les capitaines vous observerons pour savoir votre
|
||||
niveau dans l'optique de creer des équipes les plus égales que possible.
|
||||
|
||||
|
||||
Votre commite ballephenix adoré!
|
||||
|
||||
[<i class="fa fa-paperclip"></i> Formulaire d'inscription](/files/inscription2016.pdf)
|
||||
|
||||
|
||||
"""
|
||||
|
||||
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
|
||||
Bonjour a tous,
|
||||
|
||||
Permièrement, il est encore temps de s'inscrire. Par ordre de l'Association de
|
||||
Sport de Ball de Montréal, **l'inscription doit être fini le 15 avril**. Donc
|
||||
imprimez et envovez votre inscription le plus vite possible!
|
||||
|
||||
**[lire la suite ...](#/nouvelles)**
|
||||
|
||||
"""
|
||||
@@ -1,30 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Nouveau Comité 2019!
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Dimanche 17 Février 2019
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
La dernière année des Phénix s’est terminée avec l’élection d’un nouveau comité
|
||||
exécutif.
|
||||
|
||||
Les membres présents à l’assemblée générale annuelle du 2 novembre 2018 ont élu
|
||||
Marc-André Bonin au poste de vice-président et Alexandre Gauthier au poste de
|
||||
secrétaire. Les postes de Gilles Dicaire, président, et Richard Dicaire,
|
||||
trésorier, n’étaient pas en élection. Le nouvel exécutif des Phénix tient à
|
||||
remercier Marie-Ève Clavel et Didier Amyot pour leur engagement des dernières années.
|
||||
|
||||
"""
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
La dernière année des Phénix s’est terminée avec l’élection d’un nouveau comité
|
||||
exécutif.
|
||||
|
||||
**[lire la suite ...](#/nouvelles)**
|
||||
"""
|
||||
@@ -1,27 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Party fin de saison 2017!
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Mercredi 23 Aout 2017
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
Bonjour à tous les phénixiens phénixiennes.
|
||||
|
||||
Les séries commencent et nous devons déjà penser a fêter la fin de
|
||||
la saison. Comme à l'habitude, nous allons festoyer à la [taverne
|
||||
normandie](http://www.taverne-normandie.ca/), [1295 Amherst](https://goo.gl/maps/neafXHhkW292).
|
||||
Le party aura lieu le **vendredi 8 septembre 2017**, nous devrions
|
||||
commencer à arriver vers 19h00. Il y aura pizza, biere et animation.
|
||||
|
||||
# <i class="fa fa-beer" aria-hidden="true"></i>
|
||||
|
||||
bien à vous,
|
||||
|
||||
votre commite.
|
||||
|
||||
"""
|
||||
@@ -1,22 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Reprise saison 2018
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Lundi 9 juillet 2018
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
|
||||
Bonjour a toutes et a tous!
|
||||
|
||||
Finalement, les travaux au parc walter-stewart sont finis et nous pouvons
|
||||
reprendre nos activites. Nous devrions finir la saison plus tard pour
|
||||
reprendre nos parties.
|
||||
|
||||
On se voit jeudi!
|
||||
|
||||
"""
|
||||
@@ -1,50 +0,0 @@
|
||||
|
||||
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Retour à Walter-Stewart
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Samedi 20 juin 2017
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
Bonjour a tous,
|
||||
|
||||
nous sommes heureux de vous aviser que nous retrouverons notre nid dès jeudi!
|
||||
En effet, a partir de ce jeudi (22 juin 2017) nous allons jouer nos parties
|
||||
au parc Walter-Stewart, juste à cote du metro Frontenac.
|
||||
|
||||
Pour ceux qui sont interessés, le parc Walter-Stewart est le lieux où Rodger
|
||||
Brulotte est tombé en amour avec le baseball. Walter Stewart fut un journaliste
|
||||
important au canada englais, mais comme le parc fut batisé avant le déces de
|
||||
M. Stewart, il serait surprenant que le parc aille été nomme en son honneur.
|
||||
Il y a un tres bon restaurant tout près du parc, le Resto De La Rivière; c'est
|
||||
assez cher. Il y a, aussi, une nombre incalculable de gens qui ont perdu leurs
|
||||
virginité dans notre cher parc; probablement sans penser à notre cher Rodger,
|
||||
au journaliste homonyme ou d'avoir salivé à l'idee une creme-brulee.
|
||||
|
||||
Veuillez rependre la bonne nouvelle; dites le a vos amis, chums/blondes, beaux parents...
|
||||
Merci beaucoup,
|
||||
|
||||
Comité ballephenix!
|
||||
"""
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
|
||||
Bonjour a tous,
|
||||
|
||||
nous sommes heureux de vous aviser que nous retrouverons notre nid dès jeudi!
|
||||
En effet, a partir de ce jeudi (22 juin 2017) nous allons jouer nos parties
|
||||
au parc Walter-Stewart, juste à cote du metro Frontenac.
|
||||
|
||||
Veuillez rependre la bonne nouvelle; dites le a vos amis, chums/blondes, beaux parents...
|
||||
Merci beaucoup,
|
||||
|
||||
**[lire la suite ...](#/nouvelles)**
|
||||
|
||||
"""
|
||||
@@ -1,50 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Saison 2017!
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Samedi 6 mai 2017
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
|
||||
Bonjour a toutes et a tous!
|
||||
|
||||
Nous avons quelques problèmes avec le parc Walter-Stewart. La ville
|
||||
re-tourbera bientôt le terrain et nous n'allons pouvoir l'utiliser avant la
|
||||
semaine du 19 juin. D'ici la, nous allons etre hébergé au parc [Georges-Vernot](http://bit.ly/2qMdsdm)
|
||||
dans St-Michel.
|
||||
|
||||
Avec tout ces délais, nous sommes obligé de commencer la saison un peu plus
|
||||
tard que prévue. La saison commencera donc le **jeudi 18 mai 2017**. Il n'y
|
||||
aura donc aucun match pré-saison.
|
||||
|
||||
Nous sommes toujours a la **recherche de capitaines**. La case "je veux devenir
|
||||
capitaine" ne fut pas des plus populaire. Nous cherchons donc intensément
|
||||
quatre capitaines au sang neuf pour diriger cinq équipes au sang chaud.
|
||||
|
||||
|
||||
En résumé.
|
||||
|
||||
* La saison debute le **jeudi 18 mai 2017** au parc **[Georges-Vernot](http://bit.ly/2qMdsdm)**
|
||||
* Nous retrouverons le parc [Walter-Stewart](http://bit.ly/2qDlnMW) la semaine du 19 juin
|
||||
* Il nous manque 4 capitaines
|
||||
|
||||
"""
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
Bonjour a toutes et a tous!
|
||||
|
||||
Nous avons quelques problèmes avec le parc Walter-Stewart. La ville
|
||||
re-tourbera bientôt le terrain et nous n'allons pouvoir l'utiliser avant la
|
||||
semaine du 19 juin. D'ici la, nous allons etre hébergé au parc [Georges-Vernot](http://bit.ly/2qMdsdm)
|
||||
dans St-Michel.
|
||||
|
||||
|
||||
**[lire la suite ...](#/nouvelles)**
|
||||
|
||||
"""
|
||||
@@ -1,29 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Début Saison 2021
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Mardi 15 Juin 2021
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
Nous avons eu le permis de la ville de Montréal pour débuter notre saison le 24 Juin !!!
|
||||
Notez que la ville n'a émis aucun permis avant le 20 juin, le Jeudi 24 Juin est le plus tôt que nous pouvons débuter notre saison avec notre permis.
|
||||
|
||||
Comme la ville ne prépare pas de terrain et ne fournit pas d'officiel, les 24 juin et 1 juillet, ce sera des matchs hors concours avec les membres présents.
|
||||
|
||||
Voici donc sans plus tarder notre calendrier pour la saison 2021 !!!
|
||||
Votre Comité 2021
|
||||
"""
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
|
||||
Nous avons eu le permis de la ville de Montréal pour débuter notre saison le 24 Juin !!!
|
||||
Notez que la ville n'a émis aucun permis avant le 20 juin, le Jeudi 24 Juin est le plus tôt que nous pouvons débuter notre saison avec notre permis.
|
||||
|
||||
**[lire la suite ...](#/nouvelles)**
|
||||
"""
|
||||
@@ -1,29 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Saison 2023
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Dimanche 10 Juillet 2023
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
Bonne saison à tous et toutes!
|
||||
|
||||
N'oubliez pas de consulter la page facebook: https://www.facebook.com/SportsPhenixMtl/ pour toutes mises à jour, y compris les annulations due à la météo.
|
||||
|
||||
Votre Comité 2023
|
||||
"""
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
|
||||
Bonne saison à tous et toutes!
|
||||
|
||||
N'oubliez pas de consulter la page facebook: https://www.facebook.com/SportsPhenixMtl/ pour toutes mises à jour, y compris les annulations due à la météo.
|
||||
|
||||
|
||||
**[lire la suite ...](#/nouvelles)**
|
||||
"""
|
||||
@@ -1,20 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
## Début saison 2017 retardée
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Samedi 23 avril 2017
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
Suite à la situation au parc Walter-Stewart, nous n'avons toujours pas de date définie
|
||||
pour le début de la saison. La situation devrait se régler incessamment. Nous vous
|
||||
donnerons des nouvelles dès que nous en aurons.
|
||||
|
||||
Merci beaucoup,
|
||||
|
||||
Comité ballephenix!
|
||||
"""
|
||||
@@ -1,33 +0,0 @@
|
||||
[title]
|
||||
innerMarkdown = """
|
||||
# Report de la saison 2016
|
||||
"""
|
||||
|
||||
[meta]
|
||||
innerMarkdown = """
|
||||
Mercredi 11 mai 2016
|
||||
"""
|
||||
|
||||
[body]
|
||||
innerMarkdown = """
|
||||
Le parc walter-stewart est présentement en réaménagement. Conséquemment, nous
|
||||
devons reporter la saison jusqu'à la fin juin, date à laquelle le parc devrait
|
||||
être prêt.
|
||||
|
||||
|
||||
Plusieurs hypothèses sont envisagées pour ne pas perdre de matchs. Nous pensons
|
||||
à jouer les mercredis et jeudis ou rallonger la saison durant le mois de
|
||||
septembre. Malheuresement, nous ne pouvons prendre une désision officielle
|
||||
avant de prendre connaissance de la date exacte de réouverture du parc.
|
||||
|
||||
Votre comité de balle les phénix.
|
||||
"""
|
||||
|
||||
[smallBody]
|
||||
innerMarkdown = """
|
||||
Le parc walter-stewart est présentement en réaménagement. Conséquemment, nous
|
||||
devons reporter la saison jusqu'à la fin juin, date à laquelle le parc devrait
|
||||
être prêt.
|
||||
|
||||
**[lire la suite ...](#/nouvelles)**
|
||||
"""
|
||||
@@ -1,307 +0,0 @@
|
||||
---
|
||||
-
|
||||
email: fleet80@hickle.org
|
||||
name: "Delle Emmerich"
|
||||
score: 2
|
||||
team: rouge
|
||||
tel: 613-805-2793x858
|
||||
-
|
||||
email: qschamberger@yahoo.com
|
||||
name: "Susie Quitzon MD"
|
||||
score: 3
|
||||
team: rouge
|
||||
tel: 1-332-714-0777x97469
|
||||
-
|
||||
email: kianna90@yahoo.com
|
||||
name: "Johnathan Leuschke"
|
||||
score: 5
|
||||
team: jaune
|
||||
tel: 974-275-2040
|
||||
-
|
||||
email: susannah.grant@hotmail.com
|
||||
name: "Dr. Wendell Sporer"
|
||||
score: 3
|
||||
team: rouge
|
||||
tel: 04691879363
|
||||
-
|
||||
email: millicent46@adams.info
|
||||
name: "Emile Powlowski II"
|
||||
score: 1
|
||||
team: bleu
|
||||
tel: 1-449-950-7363x2633
|
||||
-
|
||||
email: cormier.codi@hotmail.com
|
||||
name: "Gardner Willms"
|
||||
score: 2
|
||||
team: bleu
|
||||
tel: 625-516-1325
|
||||
-
|
||||
email: kamryn.kovacek@gmail.com
|
||||
name: "Aliya Vandervort"
|
||||
score: 4
|
||||
team: rouge
|
||||
tel: "250.915.3706"
|
||||
-
|
||||
email: marian97@beahan.org
|
||||
name: "Gaige Kautzer"
|
||||
score: 2
|
||||
team: gris
|
||||
tel: "298.694.0319"
|
||||
-
|
||||
email: patsy.kerluke@satterfieldberge.com
|
||||
name: "Orilla Brakus"
|
||||
score: 5
|
||||
team: rouge
|
||||
tel: (506)015-3098x8355
|
||||
-
|
||||
email: alpha30@connelly.com
|
||||
name: "Dr. Thurman O'Hara"
|
||||
score: 5
|
||||
team: bleu
|
||||
tel: 07469452414
|
||||
-
|
||||
email: thompson.willene@gmail.com
|
||||
name: "Rachael Medhurst DDS"
|
||||
score: 2
|
||||
team: rouge
|
||||
tel: 1-602-031-0376
|
||||
-
|
||||
email: inader@kunze.info
|
||||
name: "Mr. Ingram Thompson"
|
||||
score: 2
|
||||
team: rouge
|
||||
tel: (109)873-9483x211
|
||||
-
|
||||
email: desiree.harris@gmail.com
|
||||
name: "Dr. Saul Streich Jr."
|
||||
score: 5
|
||||
team: gris
|
||||
tel: 1-249-486-6759x84328
|
||||
-
|
||||
email: samir83@hills.com
|
||||
name: "Kimberley Kihn"
|
||||
score: 5
|
||||
team: jaune
|
||||
tel: 304.586.6687x3262
|
||||
-
|
||||
email: egrady@emmerichpadberg.com
|
||||
name: "Arra Boyer"
|
||||
score: 3
|
||||
team: gris
|
||||
tel: "485.730.8331"
|
||||
-
|
||||
email: bgoodwin@gmail.com
|
||||
name: "Miss Kaylan Robel DVM"
|
||||
score: 4
|
||||
team: gris
|
||||
tel: "321.945.7155"
|
||||
-
|
||||
email: angelic86@homenick.com
|
||||
name: "Kyson Ruecker"
|
||||
score: 4
|
||||
team: bleu
|
||||
tel: 1-017-690-5278
|
||||
-
|
||||
email: val.sawayn@gmail.com
|
||||
name: "Shaun Goodwin"
|
||||
score: 3
|
||||
team: jaune
|
||||
tel: (271)085-2639x251
|
||||
-
|
||||
email: kya.wunsch@gmail.com
|
||||
name: "Mr. Denzell Casper"
|
||||
score: 2
|
||||
team: bleu
|
||||
tel: 948-754-1786x17035
|
||||
-
|
||||
email: delmus18@stoltenberg.org
|
||||
name: "Bluford Marvin Jr."
|
||||
score: 2
|
||||
team: jaune
|
||||
tel: (268)984-3065x3634
|
||||
-
|
||||
email: kihn.zackery@gmail.com
|
||||
name: "Lucio Kub"
|
||||
score: 2
|
||||
team: jaune
|
||||
tel: 185-942-2355x8756
|
||||
-
|
||||
email: jade24@aufderharkuhic.com
|
||||
name: "Mr. Justice Pollich DVM"
|
||||
score: 1
|
||||
team: bleu
|
||||
tel: 1-918-319-1713
|
||||
-
|
||||
email: vgoyette@hotmail.com
|
||||
name: "Bose Ankunding"
|
||||
score: 4
|
||||
team: gris
|
||||
tel: "265.582.6145"
|
||||
-
|
||||
email: raltenwerth@lueilwitz.com
|
||||
name: "Harlen Harber"
|
||||
score: 1
|
||||
team: jaune
|
||||
tel: (081)424-2803
|
||||
-
|
||||
email: thiel.bode@reynolds.info
|
||||
name: "Linnie Abshire"
|
||||
score: 1
|
||||
team: rouge
|
||||
tel: 1-809-325-8148x5271
|
||||
-
|
||||
email: istracke@lueilwitz.com
|
||||
name: "Mr. Juwan Zemlak"
|
||||
score: 5
|
||||
team: jaune
|
||||
tel: 982.535.6849x5299
|
||||
-
|
||||
email: boysie44@hartmanngraham.com
|
||||
name: "Mr. Tahj Bernhard"
|
||||
score: 1
|
||||
team: rouge
|
||||
tel: +57(9)5038029147
|
||||
-
|
||||
email: harm91@dare.net
|
||||
name: "Dr. Lyle Lakin PhD"
|
||||
score: 4
|
||||
team: bleu
|
||||
tel: 079-078-9724
|
||||
-
|
||||
email: prosacco.dolphus@dickens.com
|
||||
name: "Bertram Schuster"
|
||||
score: 4
|
||||
team: gris
|
||||
tel: (917)409-8168x00826
|
||||
-
|
||||
email: elian04@stroman.com
|
||||
name: "Viviana Howell"
|
||||
score: 5
|
||||
team: rouge
|
||||
tel: 1-414-103-3954x02444
|
||||
-
|
||||
email: hakim08@hotmail.com
|
||||
name: "Marques Goodwin"
|
||||
score: 1
|
||||
team: rouge
|
||||
tel: (649)195-3556x81548
|
||||
-
|
||||
email: nigel.kilback@gmail.com
|
||||
name: "Rayfield Lubowitz"
|
||||
score: 2
|
||||
team: bleu
|
||||
tel: (231)457-7181
|
||||
-
|
||||
email: rogahn.tollie@lehnerwillms.com
|
||||
name: "Miss Luz Altenwerth"
|
||||
score: 3
|
||||
team: gris
|
||||
tel: 00248382520
|
||||
-
|
||||
email: reilly.velia@hansenhegmann.com
|
||||
name: "Lilly Brekke"
|
||||
score: 1
|
||||
team: rouge
|
||||
tel: 006.284.1261x54374
|
||||
-
|
||||
email: batz.dessa@rippin.org
|
||||
name: "Jay Aufderhar"
|
||||
score: 3
|
||||
team: rouge
|
||||
tel: 960-144-7624x406
|
||||
-
|
||||
email: garth.barton@kerluke.com
|
||||
name: "Ms. Contina Pfeffer DDS"
|
||||
score: 5
|
||||
team: jaune
|
||||
tel: (352)043-9218x9064
|
||||
-
|
||||
email: mmcglynn@gusikowski.com
|
||||
name: "Robyn Lakin"
|
||||
score: 1
|
||||
team: bleu
|
||||
tel: 667-492-9674x3911
|
||||
-
|
||||
email: breinger@yahoo.com
|
||||
name: "Latonia Kuhlman"
|
||||
score: 2
|
||||
team: bleu
|
||||
tel: 404.860.5529x107
|
||||
-
|
||||
email: jamarion.sipes@gmail.com
|
||||
name: "Dr. Camryn Goyette"
|
||||
score: 4
|
||||
team: bleu
|
||||
tel: 648-481-0991x380
|
||||
-
|
||||
email: consuelo37@gmail.com
|
||||
name: "Khloe Altenwerth"
|
||||
score: 4
|
||||
team: gris
|
||||
tel: 1-480-994-8256x873
|
||||
-
|
||||
email: icie.kohler@murphyrohan.com
|
||||
name: "Pearl Dicki"
|
||||
score: 1
|
||||
team: rouge
|
||||
tel: +04(3)0376370559
|
||||
-
|
||||
email: miya43@yahoo.com
|
||||
name: "Christoper Botsford"
|
||||
score: 2
|
||||
team: gris
|
||||
tel: (731)031-5128x77337
|
||||
-
|
||||
email: xschmidt@yahoo.com
|
||||
name: "Lauren Bins"
|
||||
score: 1
|
||||
team: gris
|
||||
tel: (503)215-2332x77244
|
||||
-
|
||||
email: rempel.earley@waelchi.net
|
||||
name: "Sigmund Stroman"
|
||||
score: 4
|
||||
team: rouge
|
||||
tel: (719)103-8927x0887
|
||||
-
|
||||
email: gustav.graham@kihn.com
|
||||
name: "Brook Nolan"
|
||||
score: 2
|
||||
team: gris
|
||||
tel: "642.931.3403"
|
||||
-
|
||||
email: hettinger.emit@cartwright.com
|
||||
name: "Mr. Gaston Bartell"
|
||||
score: 5
|
||||
team: jaune
|
||||
tel: "00536147705"
|
||||
-
|
||||
email: tlittle@marquardtfunk.info
|
||||
name: "Ansel Schimmel"
|
||||
score: 3
|
||||
team: bleu
|
||||
tel: (432)161-1237
|
||||
-
|
||||
email: blangosh@hotmail.com
|
||||
name: "Kiefer Funk"
|
||||
score: 3
|
||||
team: rouge
|
||||
tel: 224-921-0391x3813
|
||||
-
|
||||
email: brossard@chat.miaou
|
||||
name: "brossard"
|
||||
score: 3
|
||||
team: vert
|
||||
tel: (432)161-1237
|
||||
-
|
||||
email: hobo@chat.miaou
|
||||
name: "hobo"
|
||||
score: 1
|
||||
team: vert
|
||||
tel: (432)161-1237
|
||||
-
|
||||
email: western@chat.miaou
|
||||
name: "western"
|
||||
score: 2
|
||||
team: vert
|
||||
tel: (432)161-1237
|
||||
@@ -1,419 +0,0 @@
|
||||
---
|
||||
|
||||
# generated by https://scheduler.leaguelobster.com/edit/236693/new-league/new-season/#
|
||||
|
||||
# WEEK 1
|
||||
# -
|
||||
# date: 2017/5/25 # year/month/day
|
||||
# time: "18:30"
|
||||
# home: gris # t1
|
||||
# away: bleu # t5
|
||||
# home_points: 11
|
||||
# away_points: 6
|
||||
# rain: true
|
||||
|
||||
# -
|
||||
# date: 2017/5/25 # year/month/day
|
||||
# time: "20:00"
|
||||
# home: rouge # t4
|
||||
# away: jaune # t6
|
||||
# home_points: ~
|
||||
# away_points: ~
|
||||
# rain: true
|
||||
|
||||
# -
|
||||
# date: 2017/5/25 # year/month/day
|
||||
# time: "21:30"
|
||||
# home: vert # t2
|
||||
# away: orange # t3
|
||||
# home_points: ~
|
||||
# away_points: ~
|
||||
# rain: true
|
||||
|
||||
|
||||
# WEEK 2
|
||||
-
|
||||
date: 2017/6/1 # year/month/day
|
||||
time: "18:30"
|
||||
home: gris # t1
|
||||
away: jaune # t6
|
||||
home_points: 11
|
||||
away_points: 6
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/6/1 # year/month/day
|
||||
time: "20:00"
|
||||
home: orange # t3
|
||||
away: rouge # t4
|
||||
home_points: 8
|
||||
away_points: 21
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/6/1 # year/month/day
|
||||
time: "21:30"
|
||||
home: bleu # t5
|
||||
away: vert # t2
|
||||
home_points: 6
|
||||
away_points: 9
|
||||
rain: false
|
||||
|
||||
|
||||
# WEEK 3
|
||||
|
||||
-
|
||||
date: 2017/6/8 # year/month/day
|
||||
time: "18:30"
|
||||
home: rouge # t4
|
||||
away: bleu # t5
|
||||
home_points: 10
|
||||
away_points: 8
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/6/8 # year/month/day
|
||||
time: "20:00"
|
||||
home: vert # t2
|
||||
away: jaune # t6
|
||||
home_points: 8
|
||||
away_points: 5
|
||||
rain: false
|
||||
-
|
||||
date: 2017/6/8 # year/month/day
|
||||
time: "21:30"
|
||||
home: orange # t3
|
||||
away: gris # t1
|
||||
home_points: 9
|
||||
away_points: 11
|
||||
rain: false
|
||||
|
||||
# WEEK 4
|
||||
|
||||
-
|
||||
date: 2017/6/15 # year/month/day
|
||||
time: "18:30"
|
||||
home: bleu # t5
|
||||
away: jaune # t6
|
||||
home_points: 6
|
||||
away_points: 18
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/6/15 # year/month/day
|
||||
time: "20:00"
|
||||
home: orange # t3
|
||||
away: vert # t2
|
||||
home_points: 7
|
||||
away_points: 15
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/6/15 # year/month/day
|
||||
time: "21:30"
|
||||
home: rouge # t4
|
||||
away: gris # t1
|
||||
home_points: 6
|
||||
away_points: 17
|
||||
rain: false
|
||||
|
||||
# WEEK 5
|
||||
|
||||
-
|
||||
date: 2017/6/22 # year/month/day
|
||||
time: "18:30"
|
||||
home: orange # t3
|
||||
away: vert # t2
|
||||
home_points: 10
|
||||
away_points: 13
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/6/22 # year/month/day
|
||||
time: "20:00"
|
||||
home: bleu # t5
|
||||
away: gris # t1
|
||||
home_points: 17
|
||||
away_points: 15
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/6/22 # year/month/day
|
||||
time: "21:30"
|
||||
home: jaune # t6
|
||||
away: rouge # t4
|
||||
home_points: 9
|
||||
away_points: 8 # didier a fait un grand chelem!
|
||||
rain: false
|
||||
|
||||
# WEEK 6
|
||||
|
||||
-
|
||||
date: 2017/6/29 # year/month/day
|
||||
time: "18:30"
|
||||
home: vert # t2
|
||||
away: rouge # t4
|
||||
home_points: 15
|
||||
away_points: 6
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/6/29 # year/month/day
|
||||
time: "20:00"
|
||||
home: jaune # t6
|
||||
away: gris # t1
|
||||
home_points: 20
|
||||
away_points: 14
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/6/29 # year/month/day
|
||||
time: "21:30"
|
||||
home: bleu # t5
|
||||
away: orange # t3
|
||||
home_points: 12
|
||||
away_points: 18
|
||||
rain: false
|
||||
|
||||
# WEEK 7
|
||||
-
|
||||
date: 2017/7/6 # year/month/day
|
||||
time: "18:30"
|
||||
home: gris # t1
|
||||
away: vert # t2
|
||||
home_points: 20
|
||||
away_points: 14
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/7/6 # year/month/day
|
||||
time: "20:00"
|
||||
home: rouge # t4
|
||||
away: orange # t3
|
||||
home_points: 12
|
||||
away_points: 10
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/7/6 # year/month/day
|
||||
time: "21:30"
|
||||
home: jaune # t6
|
||||
away: bleu # t5
|
||||
home_points: 18
|
||||
away_points: 9
|
||||
rain: false
|
||||
|
||||
# WEEK 8
|
||||
-
|
||||
date: 2017/7/13 # year/month/day
|
||||
time: "18:30"
|
||||
home: rouge # t4
|
||||
away: bleu # t5
|
||||
home_points: 14
|
||||
away_points: 6
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/7/13 # year/month/day
|
||||
time: "20:00"
|
||||
home: gris # t1
|
||||
away: vert # t2
|
||||
home_points: 14
|
||||
away_points: 4
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/7/13 # year/month/day
|
||||
time: "21:30"
|
||||
home: orange # t3
|
||||
away: jaune # t6
|
||||
home_points: 14
|
||||
away_points: 9
|
||||
rain: false
|
||||
|
||||
# WEEK 9
|
||||
-
|
||||
date: 2017/7/20 # year/month/day
|
||||
time: "18:30"
|
||||
home: bleu # t5
|
||||
away: orange # t3
|
||||
home_points: 11
|
||||
away_points: 25
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/7/20 # year/month/day
|
||||
time: "18:30"
|
||||
home: rouge # t4
|
||||
away: gris # t1
|
||||
home_points: 11
|
||||
away_points: 18
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/7/20 # year/month/day
|
||||
time: "21:30"
|
||||
home: jaune # t6
|
||||
away: vert # t2
|
||||
home_points: 13
|
||||
away_points: 15
|
||||
rain: false
|
||||
|
||||
# WEEK 10
|
||||
-
|
||||
date: 2017/7/27 # year/month/day
|
||||
time: "18:30"
|
||||
home: jaune # t6
|
||||
away: orange # t3
|
||||
home_points: 14
|
||||
away_points: 11
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/7/27 # year/month/day
|
||||
time: "20:00"
|
||||
home: vert # t2
|
||||
away: bleu # t5
|
||||
home_points: 18
|
||||
away_points: 9
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/7/27 # year/month/day
|
||||
time: "21:30"
|
||||
home: rouge # t4
|
||||
away: gris # t1
|
||||
home_points: 13
|
||||
away_points: 13
|
||||
rain: false
|
||||
|
||||
# WEEK 11
|
||||
-
|
||||
date: 2017/8/3 # year/month/day
|
||||
time: "18:30"
|
||||
home: vert # t2
|
||||
away: rouge # t4
|
||||
home_points: 12
|
||||
away_points: 12
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/8/3 # year/month/day
|
||||
time: "20:00"
|
||||
home: bleu # t5
|
||||
away: orange # t3
|
||||
home_points: 4
|
||||
away_points: 16
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/8/3 # year/month/day
|
||||
time: "21:30"
|
||||
home: jaune # t6
|
||||
away: gris # t1
|
||||
home_points: 5
|
||||
away_points: 22
|
||||
rain: false
|
||||
|
||||
# WEEK 12
|
||||
-
|
||||
date: 2017/8/10 # year/month/day
|
||||
time: "18:30"
|
||||
home: orange # t3
|
||||
away: rouge # t4
|
||||
home_points: 4
|
||||
away_points: 10
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/8/10 # year/month/day
|
||||
time: "20:00"
|
||||
home: jaune # t6
|
||||
away: bleu # t5
|
||||
home_points: 12
|
||||
away_points: 13
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/8/10 # year/month/day
|
||||
time: "21:30"
|
||||
home: gris # t1
|
||||
away: vert # t2
|
||||
home_points: 23
|
||||
away_points: 14
|
||||
rain: false
|
||||
|
||||
# WEEK 13
|
||||
-
|
||||
date: 2017/8/17 # year/month/day
|
||||
time: "18:30"
|
||||
home: vert # t2
|
||||
away: jaune # t6
|
||||
home_points: 15
|
||||
away_points: 16
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/8/17 # year/month/day
|
||||
time: "20:00"
|
||||
home: gris # t1
|
||||
away: orange # t3
|
||||
home_points: 17
|
||||
away_points: 11
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/8/17 # year/month/day
|
||||
time: "21:30"
|
||||
home: bleu # t5
|
||||
away: rouge # t4
|
||||
home_points: 12
|
||||
away_points: 17
|
||||
rain: false
|
||||
|
||||
# WEEK 14
|
||||
-
|
||||
date: 2017/8/24 # year/month/day e 6vs5 et 4vs3,
|
||||
time: "19:00"
|
||||
home: rouge # t1
|
||||
away: bleu
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/8/24 # year/month/day
|
||||
time: "20:30"
|
||||
home: jaune # t2
|
||||
away: orange # t5
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: false
|
||||
|
||||
# WEEK 15
|
||||
-
|
||||
date: 2017/8/31 # year/month/day e 6vs5 et 4vs3,
|
||||
time: "18:30"
|
||||
home: bleu
|
||||
away: gris # t3
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/8/31 # year/month/day
|
||||
time: "20:00"
|
||||
home: orange
|
||||
away: vert # t5
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2017/8/31 # year/month/day
|
||||
time: "21:30"
|
||||
home: "gagnant bleu-gris" # t2
|
||||
away: "gagnant orange-vert" # t5
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: false
|
||||
@@ -1,294 +0,0 @@
|
||||
---
|
||||
|
||||
## Semaine 1
|
||||
|
||||
-
|
||||
date: 2018/5/17 # year/month/day
|
||||
time: "18:45"
|
||||
away: jaune
|
||||
home: gris
|
||||
home_points: 14
|
||||
away_points: 16
|
||||
rain: false
|
||||
-
|
||||
date: 2018/5/17 # year/month/day
|
||||
time: "20:15"
|
||||
away: vert
|
||||
home: rouge
|
||||
home_points: 20
|
||||
away_points: 9
|
||||
rain: false
|
||||
|
||||
## Semaine 2
|
||||
-
|
||||
date: 2018/5/24 # year/month/day
|
||||
time: "18:45"
|
||||
away: vert
|
||||
home: gris
|
||||
home_points: 15
|
||||
away_points: 7
|
||||
rain: false
|
||||
-
|
||||
date: 2018/5/24 # year/month/day
|
||||
time: "20:15"
|
||||
away: rouge
|
||||
home: jaune
|
||||
home_points: 25
|
||||
away_points: 4
|
||||
rain: false
|
||||
|
||||
## Semaine 3
|
||||
-
|
||||
date: 2018/5/31 # year/month/day
|
||||
time: "18:45"
|
||||
away: vert
|
||||
home: jaune
|
||||
home_points: 9
|
||||
away_points: 15
|
||||
rain: false
|
||||
-
|
||||
date: 2018/5/31 # year/month/day
|
||||
time: "20:15"
|
||||
away: rouge
|
||||
home: gris
|
||||
home_points: 13
|
||||
away_points: 12
|
||||
rain: false
|
||||
|
||||
## Semaine 4
|
||||
-
|
||||
date: 2018/6/7 # year/month/day
|
||||
time: "18:45"
|
||||
away: rouge
|
||||
home: vert
|
||||
home_points: 9
|
||||
away_points: 16
|
||||
rain: false
|
||||
-
|
||||
date: 2018/6/7 # year/month/day
|
||||
time: "20:15"
|
||||
away: gris
|
||||
home: jaune
|
||||
home_points: 19
|
||||
away_points: 8
|
||||
rain: false
|
||||
|
||||
## Semaine 5
|
||||
-
|
||||
date: 2018/6/14 # year/month/day
|
||||
time: "18:45"
|
||||
away: jaune
|
||||
home: rouge
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: yes
|
||||
-
|
||||
date: 2018/6/14 # year/month/day
|
||||
time: "20:15"
|
||||
away: vert
|
||||
home: gris
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: yes
|
||||
|
||||
## Semaine 6
|
||||
-
|
||||
date: 2018/6/21 # year/month/day
|
||||
time: "18:45"
|
||||
away: gris
|
||||
home: rouge
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: yes
|
||||
-
|
||||
date: 2018/6/21 # year/month/day
|
||||
time: "20:15"
|
||||
away: jaune
|
||||
home: vert
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: yes
|
||||
|
||||
## Semaine 7
|
||||
-
|
||||
date: 2018/6/28 # year/month/day
|
||||
time: "18:45"
|
||||
away: vert
|
||||
home: rouge
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: true
|
||||
-
|
||||
date: 2018/6/28 # year/month/day
|
||||
time: "20:15"
|
||||
away: gris
|
||||
home: jaune
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: true
|
||||
|
||||
## Semaine 8
|
||||
-
|
||||
date: 2018/7/5 # year/month/day
|
||||
time: "18:45"
|
||||
away: jaune
|
||||
home: rouge
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: true
|
||||
-
|
||||
date: 2018/7/5 # year/month/day
|
||||
time: "20:15"
|
||||
away: gris
|
||||
home: vert
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: true
|
||||
|
||||
## Semaine 9
|
||||
|
||||
-
|
||||
date: 2018/7/12 # year/month/day
|
||||
time: "18:45"
|
||||
away: vert
|
||||
home: jaune
|
||||
home_points: 8
|
||||
away_points: 12
|
||||
rain: false
|
||||
-
|
||||
date: 2018/7/12 # year/month/day
|
||||
time: "20:15"
|
||||
away: rouge
|
||||
home: gris
|
||||
home_points: 15
|
||||
away_points: 9
|
||||
rain: false
|
||||
|
||||
## Semaine 10
|
||||
|
||||
-
|
||||
date: 2018/7/19 # year/month/day
|
||||
time: "18:45"
|
||||
away: jaune
|
||||
home: gris
|
||||
home_points: 6
|
||||
away_points: 15
|
||||
rain: false
|
||||
-
|
||||
date: 2018/7/19 # year/month/day
|
||||
time: "20:15"
|
||||
away: rouge
|
||||
home: vert
|
||||
home_points: 12
|
||||
away_points: 12
|
||||
rain: false
|
||||
|
||||
## Semaine 11
|
||||
|
||||
-
|
||||
date: 2018/7/26 # year/month/day
|
||||
time: "18:45"
|
||||
away: vert
|
||||
home: gris
|
||||
home_points: 3
|
||||
away_points: 22
|
||||
rain: false
|
||||
-
|
||||
date: 2018/7/26 # year/month/day
|
||||
time: "20:15"
|
||||
away: rouge
|
||||
home: jaune
|
||||
home_points: 13
|
||||
away_points: 11
|
||||
rain: false
|
||||
|
||||
## Semaine 12
|
||||
|
||||
-
|
||||
date: 2018/8/2 # year/month/day
|
||||
time: "18:45"
|
||||
away: gris
|
||||
home: rouge
|
||||
home_points: 10
|
||||
away_points: 10
|
||||
rain: false
|
||||
-
|
||||
date: 2018/8/2 # year/month/day
|
||||
time: "20:15"
|
||||
away: jaune
|
||||
home: vert
|
||||
home_points: 20
|
||||
away_points: 4
|
||||
rain: false
|
||||
|
||||
## Semaine 13
|
||||
-
|
||||
date: 2018/8/9 # year/month/day
|
||||
time: "18:45"
|
||||
away: vert
|
||||
home: rouge
|
||||
home_points: 2
|
||||
away_points: 15
|
||||
rain: false
|
||||
-
|
||||
date: 2018/8/9 # year/month/day
|
||||
time: "20:15"
|
||||
away: gris
|
||||
home: jaune
|
||||
home_points: 19
|
||||
away_points: 10
|
||||
rain: false
|
||||
|
||||
## Semaine 14
|
||||
-
|
||||
date: 2018/8/16 # year/month/day
|
||||
time: "18:45"
|
||||
away: jaune
|
||||
home: rouge
|
||||
home_points: 5
|
||||
away_points: 14
|
||||
rain: false
|
||||
-
|
||||
date: 2018/8/16 # year/month/day
|
||||
time: "20:15"
|
||||
away: gris
|
||||
home: vert
|
||||
home_points: 19
|
||||
away_points: 5
|
||||
rain: false
|
||||
|
||||
## Semaine 15
|
||||
-
|
||||
date: 2018/8/23 # year/month/day
|
||||
time: "18:45"
|
||||
away: rouge
|
||||
home: gris
|
||||
home_points: 14
|
||||
away_points: 13
|
||||
rain: false
|
||||
-
|
||||
date: 2018/8/23 # year/month/day
|
||||
time: "20:15"
|
||||
away: vert
|
||||
home: jaune
|
||||
home_points: 12
|
||||
away_points: 13
|
||||
rain: false
|
||||
|
||||
## Semaine 16 | Finale
|
||||
-
|
||||
date: 2018/8/30 # year/month/day
|
||||
time: "18:45"
|
||||
away: rouge
|
||||
home: gris
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: false
|
||||
-
|
||||
date: 2018/8/30 # year/month/day
|
||||
time: "20:15"
|
||||
away: vert
|
||||
home: jaune
|
||||
home_points: ~
|
||||
away_points: ~
|
||||
rain: false
|
||||
@@ -1,346 +0,0 @@
|
||||
---
|
||||
-
|
||||
date: 2019/05/16
|
||||
time: "18:45"
|
||||
away: orange
|
||||
home: noir
|
||||
noir : ~
|
||||
orange : ~
|
||||
rain: true
|
||||
|
||||
-
|
||||
date: 2019/05/16
|
||||
time: "20:15"
|
||||
away: bleu
|
||||
home: rouge
|
||||
rouge : ~
|
||||
bleu : ~
|
||||
rain: true
|
||||
|
||||
-
|
||||
date: 2019/05/23
|
||||
time: "18:45"
|
||||
away: rouge
|
||||
home: orange
|
||||
orange : ~
|
||||
rouge : ~
|
||||
rain: true
|
||||
|
||||
-
|
||||
date: 2019/05/23
|
||||
time: "20:15"
|
||||
away: noir
|
||||
home: bleu
|
||||
bleu : ~
|
||||
noir : ~
|
||||
rain: true
|
||||
|
||||
-
|
||||
date: 2019/05/30
|
||||
time: "18:45"
|
||||
away: orange
|
||||
home: bleu
|
||||
bleu : 16
|
||||
orange : 19
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/05/30
|
||||
time: "20:15"
|
||||
away: noir
|
||||
home: rouge
|
||||
rouge : 13
|
||||
noir : 9
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/06/06
|
||||
time: "18:45"
|
||||
away: rouge
|
||||
home: bleu
|
||||
bleu : 9
|
||||
rouge : 11
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/06/06
|
||||
time: "20:15"
|
||||
away: noir
|
||||
home: orange
|
||||
orange : 15
|
||||
noir : 14
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/06/13
|
||||
time: "18:45"
|
||||
away: orange
|
||||
home: rouge
|
||||
rouge : 14
|
||||
orange : 6
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/06/13
|
||||
time: "20:15"
|
||||
away: bleu
|
||||
home: noir
|
||||
noir : 1
|
||||
bleu : 16
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/06/15
|
||||
time: "14:00"
|
||||
away: orange
|
||||
home: noir
|
||||
noir : 14
|
||||
orange : 2
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/06/15
|
||||
time: "15:30"
|
||||
away: bleu
|
||||
home: rouge
|
||||
rouge : 8
|
||||
bleu : 9
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/06/20
|
||||
time: "18:45"
|
||||
away: bleu
|
||||
home: orange
|
||||
orange : ~
|
||||
bleu : ~
|
||||
rain: true
|
||||
|
||||
-
|
||||
date: 2019/06/20
|
||||
time: "20:15"
|
||||
away: rouge
|
||||
home: noir
|
||||
noir : ~
|
||||
rouge : ~
|
||||
rain: true
|
||||
|
||||
-
|
||||
date: 2019/06/27
|
||||
time: "18:45"
|
||||
away: bleu
|
||||
home: rouge
|
||||
rouge : 12
|
||||
bleu : 12
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/06/27
|
||||
time: "20:15"
|
||||
away: orange
|
||||
home: noir
|
||||
noir : 17
|
||||
orange : 8
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/07/04
|
||||
time: "18:45"
|
||||
away: noir
|
||||
home: bleu
|
||||
bleu : 15
|
||||
noir : 14
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/07/04
|
||||
time: "20:15"
|
||||
away: rouge
|
||||
home: orange
|
||||
orange : 7
|
||||
rouge : 17
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/07/11
|
||||
time: "18:45"
|
||||
away: noir
|
||||
home: rouge
|
||||
rouge : ~
|
||||
noir : ~
|
||||
rain: yes
|
||||
|
||||
-
|
||||
date: 2019/07/11
|
||||
time: "20:15"
|
||||
away: orange
|
||||
home: bleu
|
||||
bleu : ~
|
||||
orange : ~
|
||||
rain: yes
|
||||
|
||||
-
|
||||
date: 2019/07/18
|
||||
time: "18:45"
|
||||
away: rouge
|
||||
home: bleu
|
||||
bleu : 12
|
||||
rouge : 8
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/07/18
|
||||
time: "20:15"
|
||||
away: noir
|
||||
home: orange
|
||||
orange : 6
|
||||
noir : 6
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/07/25
|
||||
time: "18:45"
|
||||
away: bleu
|
||||
home: noir
|
||||
noir : 11
|
||||
bleu : 14
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/07/25
|
||||
time: "20:15"
|
||||
away: orange
|
||||
home: rouge
|
||||
rouge : 17
|
||||
orange : 16
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/08/01
|
||||
time: "18:45"
|
||||
away: rouge
|
||||
home: noir
|
||||
noir : 16
|
||||
rouge : 9
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/08/01
|
||||
time: "20:15"
|
||||
away: bleu
|
||||
home: orange
|
||||
orange : 16
|
||||
bleu : 24
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/08/08
|
||||
time: "18:45"
|
||||
away: rouge
|
||||
home: noir
|
||||
noir : 6
|
||||
rouge : 14
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/08/08
|
||||
time: "20:15"
|
||||
away: bleu
|
||||
home: orange
|
||||
orange : 9
|
||||
bleu : 18
|
||||
rain: false
|
||||
|
||||
#######################
|
||||
-
|
||||
date: 2019/08/10
|
||||
time: "10:30"
|
||||
away: orange
|
||||
home: rouge
|
||||
orange : 8
|
||||
rouge : 14
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/08/10
|
||||
time: "12:00"
|
||||
away: noir
|
||||
home: bleu
|
||||
noir : 13
|
||||
bleu : 14
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/08/10
|
||||
time: "13:30"
|
||||
away: bleu
|
||||
home: orange
|
||||
bleu : 14
|
||||
orange : 7
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/08/10
|
||||
time: "15:00"
|
||||
away: rouge
|
||||
home: noir
|
||||
rouge : 11
|
||||
noir : 8
|
||||
rain: false
|
||||
|
||||
|
||||
#########################
|
||||
|
||||
-
|
||||
date: 2019/08/15
|
||||
time: "18:45"
|
||||
away: noir
|
||||
home: bleu
|
||||
bleu : ~
|
||||
noir : ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/08/15
|
||||
time: "20:15"
|
||||
away: rouge
|
||||
home: orange
|
||||
orange : ~
|
||||
rouge : ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/08/22
|
||||
time: "18:45"
|
||||
away: orange
|
||||
home: bleu
|
||||
1 : ~
|
||||
4 : ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/08/22
|
||||
time: "20:15"
|
||||
away: noir
|
||||
home: rouge
|
||||
2 : ~
|
||||
3 : ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/08/29
|
||||
time: "18:45"
|
||||
away: petite
|
||||
home: finale
|
||||
finale : ~
|
||||
petite : ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2019/08/29
|
||||
time: "20:15"
|
||||
away: grande
|
||||
home: finale
|
||||
finale : ~
|
||||
grande : ~
|
||||
rain: false
|
||||
@@ -1,218 +0,0 @@
|
||||
---
|
||||
|
||||
|
||||
-
|
||||
date: 2020/07/09
|
||||
time: '18:30'
|
||||
away: rouge
|
||||
home: bleu
|
||||
bleu : 12
|
||||
rouge : 13
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/07/09
|
||||
time: '20:00'
|
||||
away: jaune
|
||||
home: noir
|
||||
noir : 14
|
||||
jaune : 30
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/07/16
|
||||
time: '18:30'
|
||||
away: bleu
|
||||
home: noir
|
||||
noir : 12
|
||||
bleu : 10
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/07/16
|
||||
time: '20:00'
|
||||
away: rouge
|
||||
home: jaune
|
||||
jaune : 15
|
||||
rouge : 14
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/07/23
|
||||
time: '18:30'
|
||||
away: noir
|
||||
home: rouge
|
||||
rouge : 6
|
||||
noir : 11
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/07/23
|
||||
time: '20:00'
|
||||
away: bleu
|
||||
home: jaune
|
||||
jaune : 7
|
||||
bleu : 10
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/08/06
|
||||
time: '18:30'
|
||||
away: jaune
|
||||
home: rouge
|
||||
rouge : 16
|
||||
jaune : 10
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/08/06
|
||||
time: '20:00'
|
||||
away: noir
|
||||
home: jaune
|
||||
jaune : 15
|
||||
noir : 14
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/08/06
|
||||
time: '21:30'
|
||||
away: noir
|
||||
home: bleu
|
||||
bleu : 14
|
||||
noir : 17
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/08/13
|
||||
time: '18:30'
|
||||
away: bleu
|
||||
home: rouge
|
||||
rouge : 9
|
||||
bleu : 17
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/08/20
|
||||
time: '18:30'
|
||||
away: jaune
|
||||
home: noir
|
||||
noir : 14
|
||||
jaune : 18
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/08/20
|
||||
time: '20:00'
|
||||
away: jaune
|
||||
home: bleu
|
||||
bleu : 13
|
||||
jaune : 6
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/08/27
|
||||
time: '20:00'
|
||||
away: noir
|
||||
home: rouge
|
||||
rouge : 11
|
||||
noir : 20
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/08/27
|
||||
time: '18:30'
|
||||
away: bleu
|
||||
home: noir
|
||||
noir : 14
|
||||
bleu : 13
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/08/27
|
||||
time: '21:30'
|
||||
away: rouge
|
||||
home: jaune
|
||||
jaune : 17
|
||||
rouge : 22
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/09/03
|
||||
time: '18:30'
|
||||
away: noir
|
||||
home: rouge
|
||||
rouge : 19
|
||||
noir : 12
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/09/03
|
||||
time: '20:00'
|
||||
away: rouge
|
||||
home: bleu
|
||||
bleu : 12
|
||||
rouge : 23
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/09/03
|
||||
time: '21:30'
|
||||
away: bleu
|
||||
home: jaune
|
||||
jaune : 21
|
||||
bleu : 19
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/09/10
|
||||
time: '18:30'
|
||||
away: jaune
|
||||
home: noir
|
||||
noir : 15
|
||||
jaune : 5
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/09/10
|
||||
time: '20:00'
|
||||
away: bleu
|
||||
home: rouge
|
||||
rouge : 8
|
||||
bleu : 9
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/09/17
|
||||
time: '18:30'
|
||||
away: jaune
|
||||
home: rouge
|
||||
rouge : 19
|
||||
jaune : 15
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/09/17
|
||||
time: '20:00'
|
||||
away: bleu
|
||||
home: noir
|
||||
noir : 14
|
||||
bleu : 20
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/09/24
|
||||
time: '18:30'
|
||||
away: jaune
|
||||
home: noir
|
||||
noir : 14
|
||||
jaune : 16
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2020/09/24
|
||||
time: '20:00'
|
||||
away: bleu
|
||||
home: rouge
|
||||
rouge : 24
|
||||
bleu : 23
|
||||
rain: false
|
||||
@@ -1,276 +0,0 @@
|
||||
---
|
||||
|
||||
-
|
||||
date: 2021/06/24 # year/month/day
|
||||
time: "18:30"
|
||||
home: gris
|
||||
away: jaune
|
||||
gris: ~
|
||||
jaune: ~
|
||||
practice: true
|
||||
rain: false
|
||||
|
||||
|
||||
##################################################################
|
||||
|
||||
-
|
||||
date: 2021/07/01 # year/month/day
|
||||
time: "18:30"
|
||||
home: gris
|
||||
away: jaune
|
||||
gris: ~
|
||||
jaune: ~
|
||||
practice: true
|
||||
rain: false
|
||||
|
||||
|
||||
##############################################################
|
||||
|
||||
-
|
||||
date: 2021/07/08 # year/month/day
|
||||
time: "18:30"
|
||||
away: bleu
|
||||
home: rouge
|
||||
bleu: ~
|
||||
rouge: ~
|
||||
rain: true
|
||||
|
||||
-
|
||||
date: 2021/07/08 # year/month/day
|
||||
time: "20:00"
|
||||
away: jaune
|
||||
home: orange
|
||||
jaune: ~
|
||||
orange: ~
|
||||
rain: true
|
||||
|
||||
|
||||
##############################################################
|
||||
|
||||
-
|
||||
date: 2021/07/15 # year/month/day
|
||||
time: "18:30"
|
||||
away: rouge
|
||||
home: jaune
|
||||
rouge: 13
|
||||
jaune: 12
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2021/07/15 # year/month/day
|
||||
time: "20:00"
|
||||
away: bleu
|
||||
home: orange
|
||||
bleu: 11
|
||||
orange: 12
|
||||
rain: false
|
||||
|
||||
##############################################################
|
||||
|
||||
-
|
||||
date: 2021/07/22 # year/month/day
|
||||
time: "18:30"
|
||||
away: jaune
|
||||
home: bleu
|
||||
jaune: 9
|
||||
bleu: 19
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2021/07/22 # year/month/day
|
||||
time: "20:00"
|
||||
away: orange
|
||||
home: rouge
|
||||
orange: 16 # mais rich a peté ça coche, ca devrait donc enlever des points.
|
||||
rouge: 10
|
||||
rain: false
|
||||
|
||||
|
||||
##############################################################
|
||||
|
||||
-
|
||||
date: 2021/07/29 # year/month/day
|
||||
time: "18:30"
|
||||
away: orange
|
||||
home: jaune
|
||||
orange: 10
|
||||
jaune: 8
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2021/07/29 # year/month/day
|
||||
time: "20:00"
|
||||
away: rouge
|
||||
home: bleu
|
||||
rouge: 10
|
||||
bleu: 10
|
||||
rain: false
|
||||
|
||||
|
||||
|
||||
##############################################################
|
||||
|
||||
-
|
||||
date: 2021/08/05 # year/month/day
|
||||
time: "18:30"
|
||||
away: rouge
|
||||
home: orange
|
||||
rouge: ~
|
||||
orange: ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2021/08/05 # year/month/day
|
||||
time: "20:00"
|
||||
away: bleu
|
||||
home: jaune
|
||||
bleu: ~
|
||||
jaune: ~
|
||||
rain: false
|
||||
|
||||
|
||||
##############################################################
|
||||
|
||||
-
|
||||
date: 2021/08/12 # year/month/day
|
||||
time: "18:30"
|
||||
away: orange
|
||||
home: bleu
|
||||
orange: ~
|
||||
bleu: ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2021/08/12 # year/month/day
|
||||
time: "20:00"
|
||||
away: jaune
|
||||
home: rouge
|
||||
jaune: ~
|
||||
rouge: ~
|
||||
rain: false
|
||||
|
||||
##############################################################
|
||||
|
||||
-
|
||||
date: 2021/08/19 # year/month/day
|
||||
time: "18:30"
|
||||
away: bleu
|
||||
home: orange
|
||||
bleu: ~
|
||||
orange: ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2021/08/19 # year/month/day
|
||||
time: "20:00"
|
||||
away: rouge
|
||||
home: jaune
|
||||
rouge: ~
|
||||
jaune: ~
|
||||
rain: false
|
||||
|
||||
##############################################################
|
||||
|
||||
-
|
||||
date: 2021/08/26 # year/month/day
|
||||
time: "18:30"
|
||||
away: jaune
|
||||
home: bleu
|
||||
jaune: ~
|
||||
bleu: ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2021/08/26 # year/month/day
|
||||
time: "20:00"
|
||||
away: orange
|
||||
home: rouge
|
||||
orange: ~
|
||||
rouge: ~
|
||||
rain: false
|
||||
|
||||
##############################################################
|
||||
|
||||
-
|
||||
date: 2021/09/02 # year/month/day
|
||||
time: "18:30"
|
||||
away: rouge
|
||||
home: bleu
|
||||
rouge: ~
|
||||
bleu: ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2021/09/02 # year/month/day
|
||||
time: "20:00"
|
||||
away: orange
|
||||
home: jaune
|
||||
orange: ~
|
||||
jaune: ~
|
||||
rain: false
|
||||
|
||||
##############################################################
|
||||
|
||||
-
|
||||
date: 2021/09/09 # year/month/day
|
||||
time: "18:30"
|
||||
away: jaune
|
||||
home: rouge
|
||||
jaune: ~
|
||||
rouge: ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2021/09/09 # year/month/day
|
||||
time: "20:00"
|
||||
away: orange
|
||||
home: bleu
|
||||
orange: ~
|
||||
bleu: ~
|
||||
rain: false
|
||||
|
||||
|
||||
##############################################################
|
||||
|
||||
-
|
||||
date: 2021/09/16 # year/month/day
|
||||
time: "18:30"
|
||||
away: rouge
|
||||
home: orange
|
||||
rouge: ~
|
||||
orange: ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2021/09/16 # year/month/day
|
||||
time: "20:00"
|
||||
away: bleu
|
||||
home: jaune
|
||||
bleu: ~
|
||||
jaune: ~
|
||||
rain: false
|
||||
|
||||
|
||||
|
||||
##############################################################
|
||||
|
||||
-
|
||||
date: 2021/09/23 # year/month/day
|
||||
time: "18:30"
|
||||
away: jaune
|
||||
home: orange
|
||||
jaune: ~
|
||||
orange: ~
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2021/09/23 # year/month/day
|
||||
time: "20:00"
|
||||
away: bleu
|
||||
home: rouge
|
||||
bleu: ~
|
||||
rouge: ~
|
||||
rain: false
|
||||
|
||||
|
||||
|
||||
@@ -1,371 +0,0 @@
|
||||
---
|
||||
|
||||
-
|
||||
date: 2022/05/19
|
||||
time: '18:45'
|
||||
away: bleu
|
||||
home: rouge
|
||||
bleu : ~
|
||||
rouge : ~
|
||||
practice: false
|
||||
rain: true
|
||||
|
||||
-
|
||||
date: 2022/05/19
|
||||
time: '20:15'
|
||||
away: orange
|
||||
home: jaune
|
||||
orange : ~
|
||||
jaune : ~
|
||||
practice: false
|
||||
rain: true
|
||||
|
||||
##
|
||||
|
||||
-
|
||||
date: 2022/05/26
|
||||
time: '18:45'
|
||||
away: rouge
|
||||
home: orange
|
||||
rouge : 18
|
||||
orange : 14
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/05/26
|
||||
time: '20:15'
|
||||
away: jaune
|
||||
home: bleu
|
||||
jaune : 24
|
||||
bleu : 17
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
##
|
||||
|
||||
-
|
||||
date: 2022/06/02
|
||||
time: '18:45'
|
||||
away: jaune
|
||||
home: rouge
|
||||
bleu : ~
|
||||
rouge : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/06/02
|
||||
time: '20:15'
|
||||
away: bleu
|
||||
home: orange
|
||||
bleu : ~
|
||||
rouge : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
##
|
||||
|
||||
-
|
||||
date: 2022/06/09
|
||||
time: '18:45'
|
||||
away: jaune
|
||||
home: orange
|
||||
jaune : ~
|
||||
orange : ~
|
||||
practice: false
|
||||
rain: true
|
||||
|
||||
-
|
||||
date: 2022/06/09
|
||||
time: '20:15'
|
||||
away: rouge
|
||||
home: bleu
|
||||
rouge : ~
|
||||
bleu : ~
|
||||
practice: false
|
||||
rain: true
|
||||
|
||||
##
|
||||
|
||||
-
|
||||
date: 2022/06/16
|
||||
time: '18:45'
|
||||
away: jaune
|
||||
home: bleu
|
||||
jaune : ~
|
||||
bleu : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/06/16
|
||||
time: '20:15'
|
||||
away: orange
|
||||
home: rouge
|
||||
orange : ~
|
||||
rouge : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
##
|
||||
-
|
||||
date: 2022/06/30
|
||||
time: '18:30'
|
||||
away: orange
|
||||
home: rouge
|
||||
orange : ~
|
||||
rouge : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/06/30
|
||||
time: '20:00'
|
||||
away: bleu
|
||||
home: jaune
|
||||
bleu : ~
|
||||
jaune : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/06/30
|
||||
time: '21:30'
|
||||
away: bleu
|
||||
home: rouge
|
||||
bleu : ~
|
||||
rouge : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
|
||||
##
|
||||
-
|
||||
date: 2022/07/07
|
||||
time: '18:30'
|
||||
away: jaune
|
||||
home: orange
|
||||
jaune : ~
|
||||
orange : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/07/07
|
||||
time: '20:00'
|
||||
away: rouge
|
||||
home: bleu
|
||||
rouge : ~
|
||||
bleu : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/07/07
|
||||
time: '21:30'
|
||||
away: orange
|
||||
home: jaune
|
||||
orange : ~
|
||||
jaune : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
|
||||
|
||||
##
|
||||
-
|
||||
date: 2022/07/14
|
||||
time: '18:30'
|
||||
away: rouge
|
||||
home: jaune
|
||||
rouge : ~
|
||||
jaune : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/07/14
|
||||
time: '20:00'
|
||||
away: orange
|
||||
home: bleu
|
||||
orange : ~
|
||||
bleu : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/07/14
|
||||
time: '21:30'
|
||||
away: jaune
|
||||
home: orange
|
||||
jaune : ~
|
||||
orange : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
|
||||
## 21
|
||||
-
|
||||
date: 2022/07/21
|
||||
time: '18:30'
|
||||
away: bleu
|
||||
home: rouge
|
||||
bleu : ~
|
||||
rouge : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/07/21
|
||||
time: '20:00'
|
||||
away: orange
|
||||
home: jaune
|
||||
orange : ~
|
||||
jaune : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/07/21
|
||||
time: '21:30'
|
||||
away: rouge
|
||||
home: bleu
|
||||
rouge : ~
|
||||
bleu : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
|
||||
## 28
|
||||
-
|
||||
date: 2022/07/28
|
||||
time: '18:30'
|
||||
away: bleu
|
||||
home: jaune
|
||||
bleu : ~
|
||||
jaune : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/07/28
|
||||
time: '20:00'
|
||||
away: rouge
|
||||
home: orange
|
||||
rouge : ~
|
||||
orange : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/07/28
|
||||
time: '21:30'
|
||||
away: jaune
|
||||
home: bleu
|
||||
jaune : ~
|
||||
bleu : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
## 04
|
||||
-
|
||||
date: 2022/08/04
|
||||
time: '18:30'
|
||||
away: orange
|
||||
home: bleu
|
||||
orange : ~
|
||||
bleu : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/08/04
|
||||
time: '20:00'
|
||||
away: jaune
|
||||
home: rouge
|
||||
jaune : ~
|
||||
rouge : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: 2022/08/04
|
||||
time: '21:30'
|
||||
away: orange
|
||||
home: rouge
|
||||
orange : ~
|
||||
rouge : ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
### Fete de la balle
|
||||
|
||||
|
||||
#-
|
||||
#date: 2022/08/11
|
||||
#time: '18:30'
|
||||
#away: jaune
|
||||
#home: bleu
|
||||
#jaune : ~
|
||||
#bleu : ~
|
||||
#practice: false
|
||||
#rain: false
|
||||
|
||||
#-
|
||||
#date: 2022/08/11
|
||||
#time: '20:00'
|
||||
#away: orange
|
||||
#home: rouge
|
||||
#jaune : ~
|
||||
#rouge : ~
|
||||
#practice: false
|
||||
#rain: false
|
||||
|
||||
#-
|
||||
#date: 2022/08/11
|
||||
#time: '21:30'
|
||||
#away: orange
|
||||
#home: rouge
|
||||
#orange : ~
|
||||
#rouge : ~
|
||||
#practice: false
|
||||
#rain: false
|
||||
|
||||
|
||||
# ## semaine 8
|
||||
# -
|
||||
# date: 2022/07/07
|
||||
# time: '18:30'
|
||||
# away: orange
|
||||
# home: rouge
|
||||
# orange : ~
|
||||
# rouge : ~
|
||||
# practice: false
|
||||
# rain: no
|
||||
|
||||
# -
|
||||
# date: 2022/07/07
|
||||
# time: '20:00'
|
||||
# away: bleu
|
||||
# home: jaune
|
||||
# bleu : ~
|
||||
# jaune : ~
|
||||
# practice: false
|
||||
# rain: no
|
||||
|
||||
# -
|
||||
# date: 2022/07/07
|
||||
# time: '21:30'
|
||||
# away: bleu
|
||||
# home: rouge
|
||||
# bleu : ~
|
||||
# rouge : ~
|
||||
# practice: false
|
||||
# rain: no
|
||||
|
||||
@@ -1,366 +0,0 @@
|
||||
-
|
||||
date: "2023/05/18" # year/month/day
|
||||
time: "18:45"
|
||||
home: "gris"
|
||||
away: "bleu"
|
||||
bleu: 17
|
||||
gris: 13
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: "2023/05/18" # year/month/day
|
||||
time: "20:15"
|
||||
home: "mauve"
|
||||
away: "jaune"
|
||||
mauve: 13
|
||||
jaune: 19
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: "2023/05/25" # year/month/day
|
||||
time: "18:45"
|
||||
home: "jaune"
|
||||
away: "gris"
|
||||
jaune: 12
|
||||
gris: 18
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: "2023/05/25" # year/month/day
|
||||
time: "20:15"
|
||||
home: "bleu"
|
||||
away: "mauve"
|
||||
bleu: 16
|
||||
mauve: 15
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: "2023/06/01" # year/month/day
|
||||
time: "18:45"
|
||||
home: "gris"
|
||||
away: "mauve"
|
||||
gris: 13
|
||||
mauve: 12
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/06/01" # year/month/day
|
||||
time: "20:15"
|
||||
home: "jaune"
|
||||
away: "bleu"
|
||||
jaune: 23
|
||||
bleu: 10
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/06/08" # year/month/day
|
||||
time: "18:45"
|
||||
home: "mauve"
|
||||
away: "bleu"
|
||||
mauve: 7
|
||||
bleu: 8
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/06/08" # year/month/day
|
||||
time: "20:15"
|
||||
home: "gris"
|
||||
away: "jaune"
|
||||
gris: 8
|
||||
jaune: 16
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/06/22" # year/month/day
|
||||
time: "18:45"
|
||||
home: "bleu"
|
||||
away: "jaune"
|
||||
bleu: 11
|
||||
jaune: 15
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/06/22" # year/month/day
|
||||
time: "20:15"
|
||||
home: "mauve"
|
||||
away: "gris"
|
||||
mauve: 12
|
||||
gris: 9
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/06/29" # year/month/day
|
||||
time: "18:45"
|
||||
home: "jaune"
|
||||
away: "mauve"
|
||||
jaune: 14
|
||||
mauve: 13
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/06/29" # year/month/day
|
||||
time: "20:15"
|
||||
home: "bleu"
|
||||
away: "gris"
|
||||
bleu: 10
|
||||
gris: 12
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/07/06" # year/month/day
|
||||
time: "18:45"
|
||||
home: "gris"
|
||||
away: "bleu"
|
||||
gris: 3
|
||||
bleu: 12
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/07/06" # year/month/day
|
||||
time: "20:15"
|
||||
home: "mauve"
|
||||
away: "jaune"
|
||||
mauve: 14
|
||||
jaune: 15
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/07/13" # year/month/day
|
||||
time: "18:45"
|
||||
home: "jaune"
|
||||
away: "gris"
|
||||
jaune: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: true
|
||||
|
||||
|
||||
-
|
||||
date: "2023/07/13" # year/month/day
|
||||
time: "20:15"
|
||||
home: "bleu"
|
||||
away: "mauve"
|
||||
bleu: ~
|
||||
mauve: ~
|
||||
practice: false
|
||||
rain: true
|
||||
|
||||
|
||||
-
|
||||
date: "2023/07/20" # year/month/day
|
||||
time: "18:45"
|
||||
home: "gris"
|
||||
away: "mauve"
|
||||
gris: 8
|
||||
mauve: 16
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/07/20" # year/month/day
|
||||
time: "20:15"
|
||||
home: "jaune"
|
||||
away: "bleu"
|
||||
jaune: 11
|
||||
bleu: 7
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/07/27" # year/month/day
|
||||
time: "18:45"
|
||||
home: "mauve"
|
||||
away: "bleu"
|
||||
mauve: 10
|
||||
bleu: 15
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/07/27" # year/month/day
|
||||
time: "20:15"
|
||||
home: "gris"
|
||||
away: "jaune"
|
||||
gris: 8
|
||||
jaune: 11
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: "2023/07/27" # year/month/day
|
||||
time: "21:35"
|
||||
home: "jaune"
|
||||
away: "gris"
|
||||
gris: 10
|
||||
jaune: 14
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/08/03" # year/month/day
|
||||
time: "18:45"
|
||||
home: "bleu"
|
||||
away: "jaune"
|
||||
bleu: ~
|
||||
jaune: ~
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/08/03" # year/month/day
|
||||
time: "20:15"
|
||||
home: "mauve"
|
||||
away: "gris"
|
||||
mauve: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: true
|
||||
|
||||
|
||||
-
|
||||
date: "2023/08/10" # year/month/day
|
||||
time: "18:45"
|
||||
home: "jaune"
|
||||
away: "mauve"
|
||||
jaune: ~
|
||||
mauve: ~
|
||||
practice: false
|
||||
rain: true
|
||||
|
||||
|
||||
-
|
||||
date: "2023/08/10" # year/month/day
|
||||
time: "20:15"
|
||||
home: "bleu"
|
||||
away: "gris"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: true
|
||||
|
||||
|
||||
-
|
||||
date: "2023/08/12" # year/month/day
|
||||
time: "9:00"
|
||||
home: "gris"
|
||||
away: "bleu"
|
||||
gris: 9
|
||||
bleu: 1
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/08/12" # year/month/day
|
||||
time: "10:30"
|
||||
home: "mauve"
|
||||
away: "jaune"
|
||||
mauve: 6
|
||||
jaune: 10
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/08/12" # year/month/day
|
||||
time: "12:30"
|
||||
home: "bleu"
|
||||
away: "jaunes"
|
||||
bleu: 8
|
||||
jaunes: 5
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/08/12" # year/month/day
|
||||
time: "14:00"
|
||||
home: "jaunes"
|
||||
away: "gris"
|
||||
jaunes: 10
|
||||
gris: 15
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
-
|
||||
date: "2023/08/12" # year/month/day
|
||||
time: "15:30"
|
||||
home: "bleu"
|
||||
away: "mauve"
|
||||
bleu: 7
|
||||
mauve: 8
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/08/17" # year/month/day
|
||||
time: "18:45"
|
||||
home: "gris"
|
||||
away: "mauve"
|
||||
gris: 4
|
||||
mauve: 10
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/08/17" # year/month/day
|
||||
time: "20:15"
|
||||
home: "jaune"
|
||||
away: "bleu"
|
||||
jaune: 10
|
||||
bleu: 8
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/08/24" # year/month/day
|
||||
time: "18:45"
|
||||
home: "gris"
|
||||
away: "bleu"
|
||||
gris: 6
|
||||
bleu: 3
|
||||
practice: false
|
||||
rain: false
|
||||
|
||||
|
||||
-
|
||||
date: "2023/08/24" # year/month/day
|
||||
time: "20:15"
|
||||
home: "mauve"
|
||||
away: "jaune"
|
||||
mauve: 22
|
||||
jaune: 12
|
||||
practice: false
|
||||
rain: false
|
||||
@@ -1,252 +0,0 @@
|
||||
-
|
||||
date: "2024/05/16" # year/month/day
|
||||
time: "18:45"
|
||||
home: "pratique 1"
|
||||
away: "pratique 2"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: true
|
||||
rain: false
|
||||
-
|
||||
date: "2024/05/16" # year/month/day
|
||||
time: "20:15"
|
||||
home: "pratique 1"
|
||||
away: "pratique 2"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: true
|
||||
rain: false
|
||||
-
|
||||
date: "2024/05/23" # year/month/day
|
||||
time: "18:45"
|
||||
home: "bleu"
|
||||
away: "jaune"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: true
|
||||
rain: false
|
||||
-
|
||||
date: "2024/05/23" # year/month/day
|
||||
time: "20:15"
|
||||
home: "gris"
|
||||
away: "mauve"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: true
|
||||
rain: false
|
||||
-
|
||||
date: "2024/05/30" # year/month/day
|
||||
time: "18:45"
|
||||
home: "mauve"
|
||||
away: "jaune"
|
||||
mauve: 3
|
||||
jaune: 15
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/05/30" # year/month/day
|
||||
time: "20:15"
|
||||
home: "bleu"
|
||||
away: "gris"
|
||||
bleu: 14
|
||||
gris: 9
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/06/06" # year/month/day
|
||||
time: "18:45"
|
||||
home: "gris"
|
||||
away: "jaune"
|
||||
gris: ~
|
||||
jaune: ~
|
||||
practice: false
|
||||
rain: true
|
||||
-
|
||||
date: "2024/06/06" # year/month/day
|
||||
time: "20:15"
|
||||
home: "mauve"
|
||||
away: "bleu"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: true
|
||||
-
|
||||
date: "2024/06/13" # year/month/day
|
||||
time: "18:45"
|
||||
home: "bleu"
|
||||
away: "jaune"
|
||||
bleu: 12
|
||||
jaune: 7
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/06/13" # year/month/day
|
||||
time: "20:15"
|
||||
home: "gris"
|
||||
away: "mauve"
|
||||
mauve: 11
|
||||
gris: 10
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/06/20" # year/month/day
|
||||
time: "18:45"
|
||||
home: "gris"
|
||||
away: "bleu"
|
||||
bleu: 15
|
||||
gris: 10
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/06/20" # year/month/day
|
||||
time: "20:15"
|
||||
home: "jaune"
|
||||
away: "mauve"
|
||||
jaune: 18
|
||||
mauve: 15
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/06/27" # year/month/day
|
||||
time: "18:45"
|
||||
home: "bleu"
|
||||
away: "mauve"
|
||||
mauves: 20
|
||||
bleu: 11
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/06/27" # year/month/day
|
||||
time: "20:15"
|
||||
home: "jaune"
|
||||
away: "gris"
|
||||
gris: 20
|
||||
jaune: 12
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/07/04" # year/month/day
|
||||
time: "18:45"
|
||||
home: "mauve"
|
||||
away: "gris"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/07/04" # year/month/day
|
||||
time: "20:15"
|
||||
home: "jaune"
|
||||
away: "bleu"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/07/11" # year/month/day
|
||||
time: "18:45"
|
||||
home: "mauve"
|
||||
away: "jaune"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/07/11" # year/month/day
|
||||
time: "20:15"
|
||||
home: "bleu"
|
||||
away: "gris"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/07/18" # year/month/day
|
||||
time: "18:45"
|
||||
home: "gris"
|
||||
away: "jaune"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/07/18" # year/month/day
|
||||
time: "20:15"
|
||||
home: "mauve"
|
||||
away: "bleu"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/07/25" # year/month/day
|
||||
time: "18:45"
|
||||
home: "bleu"
|
||||
away: "jaune"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/07/25" # year/month/day
|
||||
time: "20:15"
|
||||
home: "gris"
|
||||
away: "mauve"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/08/01" # year/month/day
|
||||
time: "18:45"
|
||||
home: "mauve"
|
||||
away: "jaune"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/08/01" # year/month/day
|
||||
time: "20:15"
|
||||
home: "gris"
|
||||
away: "bleu"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/08/08" # year/month/day
|
||||
time: "18:45"
|
||||
home: "bleu"
|
||||
away: "mauve"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/08/08" # year/month/day
|
||||
time: "20:15"
|
||||
home: "jaune"
|
||||
away: "gris"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/08/15" # year/month/day
|
||||
time: "18:45"
|
||||
home: "mauve"
|
||||
away: "gris"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
-
|
||||
date: "2024/08/15" # year/month/day
|
||||
time: "20:15"
|
||||
home: "jaune"
|
||||
away: "bleu"
|
||||
bleu: ~
|
||||
gris: ~
|
||||
practice: false
|
||||
rain: false
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"deploy": {
|
||||
"project": "7a93d03e-eabe-4db1-b78e-5f1bbcb460b0",
|
||||
"exclude": [
|
||||
"**/node_modules"
|
||||
],
|
||||
"include": [],
|
||||
"entrypoint": "server.ts"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,280 @@
|
||||
{
|
||||
"version": "3",
|
||||
"packages": {
|
||||
"specifiers": {
|
||||
"jsr:@oak/commons@0.11": "jsr:@oak/commons@0.11.0",
|
||||
"jsr:@oak/oak": "jsr:@oak/oak@16.1.0",
|
||||
"jsr:@std/assert@0.223": "jsr:@std/assert@0.223.0",
|
||||
"jsr:@std/assert@0.226": "jsr:@std/assert@0.226.0",
|
||||
"jsr:@std/assert@^0.223.0": "jsr:@std/assert@0.223.0",
|
||||
"jsr:@std/assert@^0.224.0": "jsr:@std/assert@0.224.0",
|
||||
"jsr:@std/bytes@0.223": "jsr:@std/bytes@0.223.0",
|
||||
"jsr:@std/bytes@0.224": "jsr:@std/bytes@0.224.0",
|
||||
"jsr:@std/bytes@^0.223.0": "jsr:@std/bytes@0.223.0",
|
||||
"jsr:@std/crypto@0.223": "jsr:@std/crypto@0.223.0",
|
||||
"jsr:@std/crypto@0.224": "jsr:@std/crypto@0.224.0",
|
||||
"jsr:@std/encoding@1.0.0-rc.2": "jsr:@std/encoding@1.0.0-rc.2",
|
||||
"jsr:@std/encoding@^0.223.0": "jsr:@std/encoding@0.223.0",
|
||||
"jsr:@std/http@0.223": "jsr:@std/http@0.223.0",
|
||||
"jsr:@std/http@0.224": "jsr:@std/http@0.224.5",
|
||||
"jsr:@std/io@0.223": "jsr:@std/io@0.223.0",
|
||||
"jsr:@std/media-types@0.223": "jsr:@std/media-types@0.223.0",
|
||||
"jsr:@std/media-types@0.224": "jsr:@std/media-types@0.224.1",
|
||||
"jsr:@std/path@0.223": "jsr:@std/path@0.223.0",
|
||||
"npm:path-to-regexp@6.2.1": "npm:path-to-regexp@6.2.1"
|
||||
},
|
||||
"jsr": {
|
||||
"@oak/commons@0.11.0": {
|
||||
"integrity": "07702bfe5c07cd8144c422022994da1f9fea466b185824f4be63a2b1b1a65125",
|
||||
"dependencies": [
|
||||
"jsr:@std/assert@0.226",
|
||||
"jsr:@std/bytes@0.224",
|
||||
"jsr:@std/crypto@0.224",
|
||||
"jsr:@std/http@0.224",
|
||||
"jsr:@std/media-types@0.224"
|
||||
]
|
||||
},
|
||||
"@oak/oak@16.1.0": {
|
||||
"integrity": "ab21506555fffeb08dc8f45ff5d28607e8087949ff58bd2964b27df65994480b",
|
||||
"dependencies": [
|
||||
"jsr:@oak/commons@0.11",
|
||||
"jsr:@std/assert@0.223",
|
||||
"jsr:@std/bytes@0.223",
|
||||
"jsr:@std/crypto@0.223",
|
||||
"jsr:@std/http@0.223",
|
||||
"jsr:@std/io@0.223",
|
||||
"jsr:@std/media-types@0.223",
|
||||
"jsr:@std/path@0.223",
|
||||
"npm:path-to-regexp@6.2.1"
|
||||
]
|
||||
},
|
||||
"@std/assert@0.223.0": {
|
||||
"integrity": "eb8d6d879d76e1cc431205bd346ed4d88dc051c6366365b1af47034b0670be24"
|
||||
},
|
||||
"@std/assert@0.224.0": {
|
||||
"integrity": "8643233ec7aec38a940a8264a6e3eed9bfa44e7a71cc6b3c8874213ff401967f"
|
||||
},
|
||||
"@std/assert@0.226.0": {
|
||||
"integrity": "0dfb5f7c7723c18cec118e080fec76ce15b4c31154b15ad2bd74822603ef75b3"
|
||||
},
|
||||
"@std/bytes@0.223.0": {
|
||||
"integrity": "84b75052cd8680942c397c2631318772b295019098f40aac5c36cead4cba51a8"
|
||||
},
|
||||
"@std/bytes@0.224.0": {
|
||||
"integrity": "a2250e1d0eb7d1c5a426f21267ab9bdeac2447fa87a3d0d1a467d3f7a6058e49"
|
||||
},
|
||||
"@std/crypto@0.223.0": {
|
||||
"integrity": "1aa9555ff56b09e197ad988ea200f84bc6781fd4fd83f3a156ee44449af93000",
|
||||
"dependencies": [
|
||||
"jsr:@std/assert@^0.223.0",
|
||||
"jsr:@std/encoding@^0.223.0"
|
||||
]
|
||||
},
|
||||
"@std/crypto@0.224.0": {
|
||||
"integrity": "154ef3ff08ef535562ef1a718718c5b2c5fc3808f0f9100daad69e829bfcdf2d",
|
||||
"dependencies": [
|
||||
"jsr:@std/assert@^0.224.0"
|
||||
]
|
||||
},
|
||||
"@std/encoding@0.223.0": {
|
||||
"integrity": "2b5615a75e00337ce113f34cf2f9b8c18182c751a8dcc8b1a2c2fc0e117bef00"
|
||||
},
|
||||
"@std/encoding@1.0.0-rc.2": {
|
||||
"integrity": "160d7674a20ebfbccdf610b3801fee91cf6e42d1c106dd46bbaf46e395cd35ef"
|
||||
},
|
||||
"@std/http@0.223.0": {
|
||||
"integrity": "15ab8a0c5a7e9d5be017a15b01600f20f66602ceec48b378939fa24fcec522aa",
|
||||
"dependencies": [
|
||||
"jsr:@std/assert@^0.223.0",
|
||||
"jsr:@std/encoding@^0.223.0"
|
||||
]
|
||||
},
|
||||
"@std/http@0.224.5": {
|
||||
"integrity": "b03b5d1529f6c423badfb82f6640f9f2557b4034cd7c30655ba5bb447ff750a4",
|
||||
"dependencies": [
|
||||
"jsr:@std/encoding@1.0.0-rc.2"
|
||||
]
|
||||
},
|
||||
"@std/io@0.223.0": {
|
||||
"integrity": "2d8c3c2ab3a515619b90da2c6ff5ea7b75a94383259ef4d02116b228393f84f1",
|
||||
"dependencies": [
|
||||
"jsr:@std/bytes@^0.223.0"
|
||||
]
|
||||
},
|
||||
"@std/media-types@0.223.0": {
|
||||
"integrity": "84684680c2eb6bc6d9369c6d6f26a49decaf2c7603ff531862dda575d9d6776e"
|
||||
},
|
||||
"@std/media-types@0.224.1": {
|
||||
"integrity": "9e69a5daed37c5b5c6d3ce4731dc191f80e67f79bed392b0957d1d03b87f11e1"
|
||||
},
|
||||
"@std/path@0.223.0": {
|
||||
"integrity": "593963402d7e6597f5a6e620931661053572c982fc014000459edc1f93cc3989",
|
||||
"dependencies": [
|
||||
"jsr:@std/assert@^0.223.0"
|
||||
]
|
||||
}
|
||||
},
|
||||
"npm": {
|
||||
"path-to-regexp@6.2.1": {
|
||||
"integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==",
|
||||
"dependencies": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"remote": {
|
||||
"https://deno.land/std@0.205.0/assert/assert.ts": "9a97dad6d98c238938e7540736b826440ad8c1c1e54430ca4c4e623e585607ee",
|
||||
"https://deno.land/std@0.205.0/assert/assertion_error.ts": "4d0bde9b374dfbcbe8ac23f54f567b77024fb67dbb1906a852d67fe050d42f56",
|
||||
"https://deno.land/std@0.205.0/html/entities.ts": "43f208131bb847e6e222c9dd50322066491da93ed945a93d778923ef7e975398",
|
||||
"https://deno.land/std@0.205.0/html/mod.ts": "3f8c71781e32037ab63bd417759d15d31fb9606c6615c85dcabcc515986494ba",
|
||||
"https://deno.land/std@0.205.0/path/_common/assert_path.ts": "061e4d093d4ba5aebceb2c4da3318bfe3289e868570e9d3a8e327d91c2958946",
|
||||
"https://deno.land/std@0.205.0/path/_common/basename.ts": "0d978ff818f339cd3b1d09dc914881f4d15617432ae519c1b8fdc09ff8d3789a",
|
||||
"https://deno.land/std@0.205.0/path/_common/common.ts": "9e4233b2eeb50f8b2ae10ecc2108f58583aea6fd3e8907827020282dc2b76143",
|
||||
"https://deno.land/std@0.205.0/path/_common/constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0",
|
||||
"https://deno.land/std@0.205.0/path/_common/dirname.ts": "2ba7fb4cc9fafb0f38028f434179579ce61d4d9e51296fad22b701c3d3cd7397",
|
||||
"https://deno.land/std@0.205.0/path/_common/format.ts": "11aa62e316dfbf22c126917f5e03ea5fe2ee707386555a8f513d27ad5756cf96",
|
||||
"https://deno.land/std@0.205.0/path/_common/from_file_url.ts": "ef1bf3197d2efbf0297a2bdbf3a61d804b18f2bcce45548ae112313ec5be3c22",
|
||||
"https://deno.land/std@0.205.0/path/_common/glob_to_reg_exp.ts": "5c3c2b79fc2294ec803d102bd9855c451c150021f452046312819fbb6d4dc156",
|
||||
"https://deno.land/std@0.205.0/path/_common/is_glob.ts": "567dce5c6656bdedfc6b3ee6c0833e1e4db2b8dff6e62148e94a917f289c06ad",
|
||||
"https://deno.land/std@0.205.0/path/_common/normalize.ts": "2ba7fb4cc9fafb0f38028f434179579ce61d4d9e51296fad22b701c3d3cd7397",
|
||||
"https://deno.land/std@0.205.0/path/_common/normalize_string.ts": "88c472f28ae49525f9fe82de8c8816d93442d46a30d6bb5063b07ff8a89ff589",
|
||||
"https://deno.land/std@0.205.0/path/_common/relative.ts": "1af19d787a2a84b8c534cc487424fe101f614982ae4851382c978ab2216186b4",
|
||||
"https://deno.land/std@0.205.0/path/_common/strip_trailing_separators.ts": "7ffc7c287e97bdeeee31b155828686967f222cd73f9e5780bfe7dfb1b58c6c65",
|
||||
"https://deno.land/std@0.205.0/path/_common/to_file_url.ts": "a8cdd1633bc9175b7eebd3613266d7c0b6ae0fb0cff24120b6092ac31662f9ae",
|
||||
"https://deno.land/std@0.205.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b",
|
||||
"https://deno.land/std@0.205.0/path/_os.ts": "30b0c2875f360c9296dbe6b7f2d528f0f9c741cecad2e97f803f5219e91b40a2",
|
||||
"https://deno.land/std@0.205.0/path/basename.ts": "04bb5ef3e86bba8a35603b8f3b69537112cdd19ce64b77f2522006da2977a5f3",
|
||||
"https://deno.land/std@0.205.0/path/common.ts": "f4d061c7d0b95a65c2a1a52439edec393e906b40f1caf4604c389fae7caa80f5",
|
||||
"https://deno.land/std@0.205.0/path/dirname.ts": "88a0a71c21debafc4da7a4cd44fd32e899462df458fbca152390887d41c40361",
|
||||
"https://deno.land/std@0.205.0/path/extname.ts": "2da4e2490f3b48b7121d19fb4c91681a5e11bd6bd99df4f6f47d7a71bb6ecdf2",
|
||||
"https://deno.land/std@0.205.0/path/format.ts": "3457530cc85d1b4bab175f9ae73998b34fd456c830d01883169af0681b8894fb",
|
||||
"https://deno.land/std@0.205.0/path/from_file_url.ts": "e7fa233ea1dff9641e8d566153a24d95010110185a6f418dd2e32320926043f8",
|
||||
"https://deno.land/std@0.205.0/path/glob.ts": "9c77cf47db1d786e2ebf66670824d03fd84ecc7c807cac24441eb9d5cb6a2986",
|
||||
"https://deno.land/std@0.205.0/path/is_absolute.ts": "67232b41b860571c5b7537f4954c88d86ae2ba45e883ee37d3dec27b74909d13",
|
||||
"https://deno.land/std@0.205.0/path/join.ts": "98d3d76c819af4a11a81d5ba2dbb319f1ce9d63fc2b615597d4bcfddd4a89a09",
|
||||
"https://deno.land/std@0.205.0/path/mod.ts": "2d62a0a8b78a60e8e6f485d881bac6b61d58573b11cf585fb7c8fc50d9b20d80",
|
||||
"https://deno.land/std@0.205.0/path/normalize.ts": "aa95be9a92c7bd4f9dc0ba51e942a1973e2b93d266cd74f5ca751c136d520b66",
|
||||
"https://deno.land/std@0.205.0/path/parse.ts": "d87ff0deef3fb495bc0d862278ff96da5a06acf0625ca27769fc52ac0d3d6ece",
|
||||
"https://deno.land/std@0.205.0/path/posix/_util.ts": "ecf49560fedd7dd376c6156cc5565cad97c1abe9824f4417adebc7acc36c93e5",
|
||||
"https://deno.land/std@0.205.0/path/posix/basename.ts": "a630aeb8fd8e27356b1823b9dedd505e30085015407caa3396332752f6b8406a",
|
||||
"https://deno.land/std@0.205.0/path/posix/common.ts": "e781d395dc76f6282e3f7dd8de13194abb8b04a82d109593141abc6e95755c8b",
|
||||
"https://deno.land/std@0.205.0/path/posix/dirname.ts": "f48c9c42cc670803b505478b7ef162c7cfa9d8e751b59d278b2ec59470531472",
|
||||
"https://deno.land/std@0.205.0/path/posix/extname.ts": "ee7f6571a9c0a37f9218fbf510c440d1685a7c13082c348d701396cc795e0be0",
|
||||
"https://deno.land/std@0.205.0/path/posix/format.ts": "b94876f77e61bfe1f147d5ccb46a920636cd3cef8be43df330f0052b03875968",
|
||||
"https://deno.land/std@0.205.0/path/posix/from_file_url.ts": "b97287a83e6407ac27bdf3ab621db3fccbf1c27df0a1b1f20e1e1b5acf38a379",
|
||||
"https://deno.land/std@0.205.0/path/posix/glob.ts": "86c3f06d1c98303613c74650961c3e24bdb871cde2a97c3ae7f0f6d4abbef445",
|
||||
"https://deno.land/std@0.205.0/path/posix/is_absolute.ts": "159900a3422d11069d48395568217eb7fc105ceda2683d03d9b7c0f0769e01b8",
|
||||
"https://deno.land/std@0.205.0/path/posix/join.ts": "0c0d84bdc344876930126640011ec1b888e6facf74153ffad9ef26813aa2a076",
|
||||
"https://deno.land/std@0.205.0/path/posix/mod.ts": "6bfa8a42d85345b12dbe8571028ca2c62d460b6ef968125e498602b43b6cf6b6",
|
||||
"https://deno.land/std@0.205.0/path/posix/normalize.ts": "11de90a94ab7148cc46e5a288f7d732aade1d616bc8c862f5560fa18ff987b4b",
|
||||
"https://deno.land/std@0.205.0/path/posix/parse.ts": "199208f373dd93a792e9c585352bfc73a6293411bed6da6d3bc4f4ef90b04c8e",
|
||||
"https://deno.land/std@0.205.0/path/posix/relative.ts": "e2f230608b0f083e6deaa06e063943e5accb3320c28aef8d87528fbb7fe6504c",
|
||||
"https://deno.land/std@0.205.0/path/posix/resolve.ts": "51579d83159d5c719518c9ae50812a63959bbcb7561d79acbdb2c3682236e285",
|
||||
"https://deno.land/std@0.205.0/path/posix/separator.ts": "0b6573b5f3269a3164d8edc9cefc33a02dd51003731c561008c8bb60220ebac1",
|
||||
"https://deno.land/std@0.205.0/path/posix/to_file_url.ts": "08d43ea839ee75e9b8b1538376cfe95911070a655cd312bc9a00f88ef14967b6",
|
||||
"https://deno.land/std@0.205.0/path/posix/to_namespaced_path.ts": "c9228a0e74fd37e76622cd7b142b8416663a9b87db643302fa0926b5a5c83bdc",
|
||||
"https://deno.land/std@0.205.0/path/relative.ts": "23d45ede8b7ac464a8299663a43488aad6b561414e7cbbe4790775590db6349c",
|
||||
"https://deno.land/std@0.205.0/path/resolve.ts": "5b184efc87155a0af9fa305ff68a109e28de9aee81fc3e77cd01380f19daf867",
|
||||
"https://deno.land/std@0.205.0/path/separator.ts": "40a3e9a4ad10bef23bc2cd6c610291b6c502a06237c2c4cd034a15ca78dedc1f",
|
||||
"https://deno.land/std@0.205.0/path/to_file_url.ts": "edaafa089e0bce386e1b2d47afe7c72e379ff93b28a5829a5885e4b6c626d864",
|
||||
"https://deno.land/std@0.205.0/path/to_namespaced_path.ts": "cf8734848aac3c7527d1689d2adf82132b1618eff3cc523a775068847416b22a",
|
||||
"https://deno.land/std@0.205.0/path/windows/_util.ts": "f32b9444554c8863b9b4814025c700492a2b57ff2369d015360970a1b1099d54",
|
||||
"https://deno.land/std@0.205.0/path/windows/basename.ts": "8a9dbf7353d50afbc5b221af36c02a72c2d1b2b5b9f7c65bf6a5a2a0baf88ad3",
|
||||
"https://deno.land/std@0.205.0/path/windows/common.ts": "e781d395dc76f6282e3f7dd8de13194abb8b04a82d109593141abc6e95755c8b",
|
||||
"https://deno.land/std@0.205.0/path/windows/dirname.ts": "5c2aa541384bf0bd9aca821275d2a8690e8238fa846198ef5c7515ce31a01a94",
|
||||
"https://deno.land/std@0.205.0/path/windows/extname.ts": "07f4fa1b40d06a827446b3e3bcc8d619c5546b079b8ed0c77040bbef716c7614",
|
||||
"https://deno.land/std@0.205.0/path/windows/format.ts": "343019130d78f172a5c49fdc7e64686a7faf41553268961e7b6c92a6d6548edf",
|
||||
"https://deno.land/std@0.205.0/path/windows/from_file_url.ts": "d53335c12b0725893d768be3ac6bf0112cc5b639d2deb0171b35988493b46199",
|
||||
"https://deno.land/std@0.205.0/path/windows/glob.ts": "0286fb89ecd21db5cbf3b6c79e2b87c889b03f1311e66fb769e6b905d4142332",
|
||||
"https://deno.land/std@0.205.0/path/windows/is_absolute.ts": "245b56b5f355ede8664bd7f080c910a97e2169972d23075554ae14d73722c53c",
|
||||
"https://deno.land/std@0.205.0/path/windows/join.ts": "e6600bf88edeeef4e2276e155b8de1d5dec0435fd526ba2dc4d37986b2882f16",
|
||||
"https://deno.land/std@0.205.0/path/windows/mod.ts": "c3d1a36fbf9f6db1320bcb4fbda8de011d25461be3497105e15cbea1e3726198",
|
||||
"https://deno.land/std@0.205.0/path/windows/normalize.ts": "9deebbf40c81ef540b7b945d4ccd7a6a2c5a5992f791e6d3377043031e164e69",
|
||||
"https://deno.land/std@0.205.0/path/windows/parse.ts": "120faf778fe1f22056f33ded069b68e12447668fcfa19540c0129561428d3ae5",
|
||||
"https://deno.land/std@0.205.0/path/windows/relative.ts": "026855cd2c36c8f28f1df3c6fbd8f2449a2aa21f48797a74700c5d872b86d649",
|
||||
"https://deno.land/std@0.205.0/path/windows/resolve.ts": "5ff441ab18a2346abadf778121128ee71bda4d0898513d4639a6ca04edca366b",
|
||||
"https://deno.land/std@0.205.0/path/windows/separator.ts": "ae21f27015f10510ed1ac4a0ba9c4c9c967cbdd9d9e776a3e4967553c397bd5d",
|
||||
"https://deno.land/std@0.205.0/path/windows/to_file_url.ts": "8e9ea9e1ff364aa06fa72999204229952d0a279dbb876b7b838b2b2fea55cce3",
|
||||
"https://deno.land/std@0.205.0/path/windows/to_namespaced_path.ts": "e0f4d4a5e77f28a5708c1a33ff24360f35637ba6d8f103d19661255ef7bfd50d",
|
||||
"https://deno.land/std@0.224.0/assert/_constants.ts": "a271e8ef5a573f1df8e822a6eb9d09df064ad66a4390f21b3e31f820a38e0975",
|
||||
"https://deno.land/std@0.224.0/assert/assert.ts": "09d30564c09de846855b7b071e62b5974b001bb72a4b797958fe0660e7849834",
|
||||
"https://deno.land/std@0.224.0/assert/assert_almost_equals.ts": "9e416114322012c9a21fa68e187637ce2d7df25bcbdbfd957cd639e65d3cf293",
|
||||
"https://deno.land/std@0.224.0/assert/assert_array_includes.ts": "14c5094471bc8e4a7895fc6aa5a184300d8a1879606574cb1cd715ef36a4a3c7",
|
||||
"https://deno.land/std@0.224.0/assert/assert_equals.ts": "3bbca947d85b9d374a108687b1a8ba3785a7850436b5a8930d81f34a32cb8c74",
|
||||
"https://deno.land/std@0.224.0/assert/assert_exists.ts": "43420cf7f956748ae6ed1230646567b3593cb7a36c5a5327269279c870c5ddfd",
|
||||
"https://deno.land/std@0.224.0/assert/assert_false.ts": "3e9be8e33275db00d952e9acb0cd29481a44fa0a4af6d37239ff58d79e8edeff",
|
||||
"https://deno.land/std@0.224.0/assert/assert_greater.ts": "5e57b201fd51b64ced36c828e3dfd773412c1a6120c1a5a99066c9b261974e46",
|
||||
"https://deno.land/std@0.224.0/assert/assert_greater_or_equal.ts": "9870030f997a08361b6f63400273c2fb1856f5db86c0c3852aab2a002e425c5b",
|
||||
"https://deno.land/std@0.224.0/assert/assert_instance_of.ts": "e22343c1fdcacfaea8f37784ad782683ec1cf599ae9b1b618954e9c22f376f2c",
|
||||
"https://deno.land/std@0.224.0/assert/assert_is_error.ts": "f856b3bc978a7aa6a601f3fec6603491ab6255118afa6baa84b04426dd3cc491",
|
||||
"https://deno.land/std@0.224.0/assert/assert_less.ts": "60b61e13a1982865a72726a5fa86c24fad7eb27c3c08b13883fb68882b307f68",
|
||||
"https://deno.land/std@0.224.0/assert/assert_less_or_equal.ts": "d2c84e17faba4afe085e6c9123a63395accf4f9e00150db899c46e67420e0ec3",
|
||||
"https://deno.land/std@0.224.0/assert/assert_match.ts": "ace1710dd3b2811c391946954234b5da910c5665aed817943d086d4d4871a8b7",
|
||||
"https://deno.land/std@0.224.0/assert/assert_not_equals.ts": "78d45dd46133d76ce624b2c6c09392f6110f0df9b73f911d20208a68dee2ef29",
|
||||
"https://deno.land/std@0.224.0/assert/assert_not_instance_of.ts": "3434a669b4d20cdcc5359779301a0588f941ffdc2ad68803c31eabdb4890cf7a",
|
||||
"https://deno.land/std@0.224.0/assert/assert_not_match.ts": "df30417240aa2d35b1ea44df7e541991348a063d9ee823430e0b58079a72242a",
|
||||
"https://deno.land/std@0.224.0/assert/assert_not_strict_equals.ts": "37f73880bd672709373d6dc2c5f148691119bed161f3020fff3548a0496f71b8",
|
||||
"https://deno.land/std@0.224.0/assert/assert_object_match.ts": "411450fd194fdaabc0089ae68f916b545a49d7b7e6d0026e84a54c9e7eed2693",
|
||||
"https://deno.land/std@0.224.0/assert/assert_rejects.ts": "4bee1d6d565a5b623146a14668da8f9eb1f026a4f338bbf92b37e43e0aa53c31",
|
||||
"https://deno.land/std@0.224.0/assert/assert_strict_equals.ts": "b4f45f0fd2e54d9029171876bd0b42dd9ed0efd8f853ab92a3f50127acfa54f5",
|
||||
"https://deno.land/std@0.224.0/assert/assert_string_includes.ts": "496b9ecad84deab72c8718735373feb6cdaa071eb91a98206f6f3cb4285e71b8",
|
||||
"https://deno.land/std@0.224.0/assert/assert_throws.ts": "c6508b2879d465898dab2798009299867e67c570d7d34c90a2d235e4553906eb",
|
||||
"https://deno.land/std@0.224.0/assert/assertion_error.ts": "ba8752bd27ebc51f723702fac2f54d3e94447598f54264a6653d6413738a8917",
|
||||
"https://deno.land/std@0.224.0/assert/equal.ts": "bddf07bb5fc718e10bb72d5dc2c36c1ce5a8bdd3b647069b6319e07af181ac47",
|
||||
"https://deno.land/std@0.224.0/assert/fail.ts": "0eba674ffb47dff083f02ced76d5130460bff1a9a68c6514ebe0cdea4abadb68",
|
||||
"https://deno.land/std@0.224.0/assert/mod.ts": "48b8cb8a619ea0b7958ad7ee9376500fe902284bb36f0e32c598c3dc34cbd6f3",
|
||||
"https://deno.land/std@0.224.0/assert/unimplemented.ts": "8c55a5793e9147b4f1ef68cd66496b7d5ba7a9e7ca30c6da070c1a58da723d73",
|
||||
"https://deno.land/std@0.224.0/assert/unreachable.ts": "5ae3dbf63ef988615b93eb08d395dda771c96546565f9e521ed86f6510c29e19",
|
||||
"https://deno.land/std@0.224.0/fmt/colors.ts": "508563c0659dd7198ba4bbf87e97f654af3c34eb56ba790260f252ad8012e1c5",
|
||||
"https://deno.land/std@0.224.0/internal/diff.ts": "6234a4b493ebe65dc67a18a0eb97ef683626a1166a1906232ce186ae9f65f4e6",
|
||||
"https://deno.land/std@0.224.0/internal/format.ts": "0a98ee226fd3d43450245b1844b47003419d34d210fa989900861c79820d21c2",
|
||||
"https://deno.land/std@0.224.0/internal/mod.ts": "534125398c8e7426183e12dc255bb635d94e06d0f93c60a297723abe69d3b22e",
|
||||
"https://deno.land/std@0.84.0/_util/assert.ts": "2f868145a042a11d5ad0a3c748dcf580add8a0dbc0e876eaa0026303a5488f58",
|
||||
"https://deno.land/std@0.84.0/_util/os.ts": "e282950a0eaa96760c0cf11e7463e66babd15ec9157d4c9ed49cc0925686f6a7",
|
||||
"https://deno.land/std@0.84.0/path/_constants.ts": "1247fee4a79b70c89f23499691ef169b41b6ccf01887a0abd131009c5581b853",
|
||||
"https://deno.land/std@0.84.0/path/_interface.ts": "1fa73b02aaa24867e481a48492b44f2598cd9dfa513c7b34001437007d3642e4",
|
||||
"https://deno.land/std@0.84.0/path/_util.ts": "f4fa69aa3cbbd8568763bfc43c7236875015ba343602d8bafd332b4b4243681b",
|
||||
"https://deno.land/std@0.84.0/path/common.ts": "eaf03d08b569e8a87e674e4e265e099f237472b6fd135b3cbeae5827035ea14a",
|
||||
"https://deno.land/std@0.84.0/path/glob.ts": "4a524c1c9da3e79a9fdabdc6e850cd9e41bdf31e442856ffa19c5b123268ca95",
|
||||
"https://deno.land/std@0.84.0/path/mod.ts": "4465dc494f271b02569edbb4a18d727063b5dbd6ed84283ff906260970a15d12",
|
||||
"https://deno.land/std@0.84.0/path/posix.ts": "1408f8ba482a4dc5fc0a7cd7be28bbbff9608d2b3b5ffdcf288ae1228d959add",
|
||||
"https://deno.land/std@0.84.0/path/separator.ts": "8fdcf289b1b76fd726a508f57d3370ca029ae6976fcde5044007f062e643ff1c",
|
||||
"https://deno.land/std@0.84.0/path/win32.ts": "6ca052f54500f00cd7a5172fde62900626ab620dcd5bdcf4e6f5695d001ddef6",
|
||||
"https://deno.land/std@0.99.0/_util/assert.ts": "2f868145a042a11d5ad0a3c748dcf580add8a0dbc0e876eaa0026303a5488f58",
|
||||
"https://deno.land/std@0.99.0/_util/os.ts": "e282950a0eaa96760c0cf11e7463e66babd15ec9157d4c9ed49cc0925686f6a7",
|
||||
"https://deno.land/std@0.99.0/path/_constants.ts": "1247fee4a79b70c89f23499691ef169b41b6ccf01887a0abd131009c5581b853",
|
||||
"https://deno.land/std@0.99.0/path/_interface.ts": "1fa73b02aaa24867e481a48492b44f2598cd9dfa513c7b34001437007d3642e4",
|
||||
"https://deno.land/std@0.99.0/path/_util.ts": "2e06a3b9e79beaf62687196bd4b60a4c391d862cfa007a20fc3a39f778ba073b",
|
||||
"https://deno.land/std@0.99.0/path/common.ts": "eaf03d08b569e8a87e674e4e265e099f237472b6fd135b3cbeae5827035ea14a",
|
||||
"https://deno.land/std@0.99.0/path/glob.ts": "314ad9ff263b895795208cdd4d5e35a44618ca3c6dd155e226fb15d065008652",
|
||||
"https://deno.land/std@0.99.0/path/mod.ts": "4465dc494f271b02569edbb4a18d727063b5dbd6ed84283ff906260970a15d12",
|
||||
"https://deno.land/std@0.99.0/path/posix.ts": "f56c3c99feb47f30a40ce9d252ef6f00296fa7c0fcb6dd81211bdb3b8b99ca3b",
|
||||
"https://deno.land/std@0.99.0/path/separator.ts": "8fdcf289b1b76fd726a508f57d3370ca029ae6976fcde5044007f062e643ff1c",
|
||||
"https://deno.land/std@0.99.0/path/win32.ts": "77f7b3604e0de40f3a7c698e8a79e7f601dc187035a1c21cb1e596666ce112f8",
|
||||
"https://deno.land/x/media_types@v2.7.1/db.ts": "1d95aa3fc1fe076638550640609394f0e157b18b430800e419aa7ece5c151d9c",
|
||||
"https://deno.land/x/media_types@v2.7.1/deps.ts": "cd4c31e4b5ed8c4d8c61bd2fb38a82d68d3fd2dcf6d43f22511cbe6d9d310e51",
|
||||
"https://deno.land/x/media_types@v2.7.1/mod.ts": "d63583b978d32eff8b76e1ae5d83cba2fb27baa90cc1bcb0ad15a06122ea8c19",
|
||||
"https://deno.land/x/static_files@1.1.6/mod.ts": "8a9bb05599e53864c54eb22931fe98507818517e0d69f26e099a1d8f4ef2b638",
|
||||
"https://deno.land/x/static_files@1.1.6/src/deps.ts": "fb62be7a780339157bf692a619d6d02ea9662490deca275f488f9f9db917fc4a",
|
||||
"https://deno.land/x/static_files@1.1.6/src/types.ts": "ef201288626294e9e1b8ee85cdfe2cdfb282e4d78af445df1726050dfa0c0988",
|
||||
"https://deno.land/x/static_files@1.1.6/src/utils.ts": "9e6172dc97fed01e70a6b063c5afff40e20fe726b3bae0c5f0a962bad74b7107",
|
||||
"https://deno.land/x/vento@v0.9.1/deps.ts": "1fb4acd6b3b6261c308280b09e8feadac7b0fac1e01bd0e0f1e75527a2181a52",
|
||||
"https://deno.land/x/vento@v0.9.1/mod.ts": "ab690911075158ee3762bd7aefe209cdcb6ead7b492f14b0693d7025244db8e6",
|
||||
"https://deno.land/x/vento@v0.9.1/plugins/echo.ts": "f7c064fb6d34b29852f46f6e01583ed87656dcbbc5cae51c8f29198d6951d0cf",
|
||||
"https://deno.land/x/vento@v0.9.1/plugins/escape.ts": "8115ec84c84c13811f4a43263b8954e912df94df6565d6ff9ce7faea7daa50be",
|
||||
"https://deno.land/x/vento@v0.9.1/plugins/export.ts": "ef54811ed0205aaeef6ad09557c94b8ae98e1457234898da5a1c5461a7dcf424",
|
||||
"https://deno.land/x/vento@v0.9.1/plugins/for.ts": "6313e139a23ed17ca8b0852031f8d9e11aeb7520b228e68b9233418d25745414",
|
||||
"https://deno.land/x/vento@v0.9.1/plugins/function.ts": "cdf610a98493e4a093c53473abdad7d47cbcff40aa8362d280e39910620cb8d6",
|
||||
"https://deno.land/x/vento@v0.9.1/plugins/if.ts": "9de295f8675cacaec7866ad21068b6b089bfcadf72d3c62e1df50ca378c04279",
|
||||
"https://deno.land/x/vento@v0.9.1/plugins/import.ts": "406204ab9d785db206da5d5cbcffa9a111cef2a39a19574e630cdea89b0691c5",
|
||||
"https://deno.land/x/vento@v0.9.1/plugins/include.ts": "a9c65ce90354766220c0c9f7b21ea2db97bed99d9ffbe28f8a5ac035d488b163",
|
||||
"https://deno.land/x/vento@v0.9.1/plugins/js.ts": "2c50d60061e9c5b6280a145266e617181534b8767e91127d59d5cf5febdcfb03",
|
||||
"https://deno.land/x/vento@v0.9.1/plugins/layout.ts": "b9970b762ba73cf5605e63e585792803a48e326621c6cb2ec216502ba21a90cd",
|
||||
"https://deno.land/x/vento@v0.9.1/plugins/set.ts": "016235a906f99cbfab78d29dfdfe8ca0925db7a46458fd873adacd0d7c6ed82d",
|
||||
"https://deno.land/x/vento@v0.9.1/plugins/unescape.ts": "946512835a409815d6ad98ac4529440e9a368f42ca499791d0f25ee0ecc4c4d6",
|
||||
"https://deno.land/x/vento@v0.9.1/src/environment.ts": "9c28fbf05176297adb93fc688711125b295c69089554d4211cd38a5b04028ec5",
|
||||
"https://deno.land/x/vento@v0.9.1/src/loader.ts": "eb01b0dca7ea8bcdcdfd30b1f90f2fad28fb7f2cfd943900322a85bfaa86130c",
|
||||
"https://deno.land/x/vento@v0.9.1/src/tokenizer.ts": "e9918ac58f941e048fe08cea10e65fb6e19c00fe7ed31fb050663445f11c6e9d",
|
||||
"https://esm.sh/lodash-es@4.17.21": "460848e64379750386465df2bfcbe530dc5be584cabb39816e0dec105e5f9af2",
|
||||
"https://esm.sh/v135/lodash-es@4.17.21/denonext/lodash-es.mjs": "ca6d37e6a1271d1bd8920da5ff11f7d05465f5d7961d5d09b44db331838981d7"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
exec deno run -A https://deno.land/x/deploy/deployctl.ts deploy --prod --project=phenix server.ts
|
||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 1.4 KiB |
Generated
+25
-7
@@ -1,12 +1,15 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1649676176,
|
||||
"narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=",
|
||||
"lastModified": 1710146030,
|
||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678",
|
||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -17,16 +20,16 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1650998007,
|
||||
"narHash": "sha256-NcJnbGDBBN023x8s3ll3HZxBcQoPq1ry9E2sjg+4flc=",
|
||||
"lastModified": 1719848872,
|
||||
"narHash": "sha256-H3+EC5cYuq+gQW8y0lSrrDZfH71LB4DAf+TDFyvwCNA=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a3917caedfead19f853aa5769de4c3ea4e4db584",
|
||||
"rev": "00d80d13810dbfea8ab4ed1009b09100cca86ba8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-21.11",
|
||||
"ref": "nixos-unstable",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
@@ -35,6 +38,21 @@
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
||||
@@ -1,32 +1,32 @@
|
||||
{
|
||||
description = "Trying nest.js";
|
||||
description = "Phenix website";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "nixpkgs/nixos-21.11";
|
||||
nixpkgs.url = "nixpkgs/nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils }:
|
||||
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let pkgs = nixpkgs.legacyPackages.${system}; in
|
||||
rec {
|
||||
packages = flake-utils.lib.flattenTree {
|
||||
hello = pkgs.hello;
|
||||
gitAndTools = pkgs.gitAndTools;
|
||||
nodejs = pkgs.nodejs;
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
build-static-files = pkgs.stdenv.mkDerivation {
|
||||
name = "phenix-website-static-assets";
|
||||
src = ./static;
|
||||
buildPhase = ''
|
||||
find . -type f -exec ${pkgs.brotli}/bin/brotli -9 -f -k {} \;
|
||||
'';
|
||||
installPhase = ''
|
||||
cp -r . $out
|
||||
|
||||
'';
|
||||
};
|
||||
defaultPackage = packages.hello;
|
||||
apps.hello = flake-utils.lib.mkApp { drv = packages.hello; };
|
||||
defaultApp = apps.hello;
|
||||
in {
|
||||
packages = { static = build-static-files; };
|
||||
devShell = pkgs.mkShell {
|
||||
name = "Nid-JS";
|
||||
buildInputs = with pkgs; [
|
||||
nodejs
|
||||
flyway
|
||||
nodePackages.node2nix
|
||||
];
|
||||
name = "Phenix-Website";
|
||||
buildInputs = with pkgs; [ deno ];
|
||||
};
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
-151
@@ -1,151 +0,0 @@
|
||||
var gulp = require('gulp');
|
||||
const { series } = require('gulp');
|
||||
var help = require('gulp-task-listing');
|
||||
var clean = require('gulp-clean');
|
||||
var toml = require('gulp-toml');
|
||||
var gulpSass = require('gulp-sass');
|
||||
var rename = require("gulp-rename");
|
||||
var yaml = require('gulp-yaml');
|
||||
var template = require('gulp-template');
|
||||
var wrapper = require('gulp-wrapper');
|
||||
var webserver = require('gulp-webserver');
|
||||
var marked = require('marked');
|
||||
var spritz = require('spritzjs');
|
||||
var modify = require('gulp-modify');
|
||||
var _ = require('lodash');
|
||||
var fs = require('fs');
|
||||
|
||||
exports.help = help;
|
||||
|
||||
|
||||
exports.sass = function sass(){
|
||||
var extraSassPath = ['./node_modules/'];
|
||||
return gulp.src('./scss/*.scss')
|
||||
.pipe(gulpSass({includePaths: extraSassPath}).on('error', gulpSass.logError))
|
||||
.pipe(gulp.dest('./css'));
|
||||
}
|
||||
|
||||
exports.clean = function clean(){
|
||||
return gulp.src(["lib/", "css/"], {read: false})
|
||||
.pipe(clean());
|
||||
}
|
||||
|
||||
exports.compileResults = function compileResults(){
|
||||
return gulp.src('data/*.yaml')
|
||||
.pipe(yaml({safe: true}).on('error', console.log))
|
||||
.pipe(gulp.dest('./api'));
|
||||
};
|
||||
|
||||
var encryptFile = function(message){
|
||||
var keyLengthInBytes = 128;
|
||||
var salt = process.env.SALT || 'salt';
|
||||
var stringKey = salt + (process.env.KEY || 'qwerty');
|
||||
var key = spritz.hash(stringKey, keyLengthInBytes);
|
||||
var byteArrMessage = spritz.stringToUtf8ByteArray(message);
|
||||
var cypher = spritz.encrypt(key, byteArrMessage);
|
||||
return JSON.stringify(cypher);
|
||||
};
|
||||
|
||||
var wrapEncryptedData = function(encryptedData){
|
||||
return 'window.encryptedPlayerList = ' + encryptedData + ';';
|
||||
};
|
||||
|
||||
exports.encryptResults = function encryptResults(){
|
||||
return gulp.src('api/*.clear.json')
|
||||
.pipe(modify({
|
||||
fileModifier: function(file, content) {
|
||||
return wrapEncryptedData(encryptFile(content));
|
||||
}
|
||||
}))
|
||||
.pipe(rename(function(path){
|
||||
path.basename = path.basename.replace(/\.clear$/i, '');
|
||||
path.extname = '.spritz.js';
|
||||
return path;
|
||||
}))
|
||||
.pipe(gulp.dest('./api'));
|
||||
};
|
||||
|
||||
function getAvailableYears(files) {
|
||||
var rgx = /^resultats(\d*).yaml/;
|
||||
return files
|
||||
.map((f) => rgx.exec(f))
|
||||
.filter(_.isArray)
|
||||
.map((a) => _.get(a, 1, ''))
|
||||
.filter(_.identity)
|
||||
.sort();
|
||||
}
|
||||
|
||||
exports.templateProd = function templateProd() {
|
||||
var dataFiles = fs.readdirSync('./data');
|
||||
|
||||
var data = {
|
||||
production: true,
|
||||
availableYears: JSON.stringify(getAvailableYears(dataFiles)),
|
||||
salt: process.env.SALT,
|
||||
playerListLocation: process.env.PLAYER_LIST_LOCATION}
|
||||
return gulp.src('index.tmpl.html')
|
||||
.pipe(rename("index.html"))
|
||||
.pipe(template(data))
|
||||
.pipe(gulp.dest('.'));
|
||||
};
|
||||
|
||||
exports.templateDev = function templateDev() {
|
||||
var dataFiles = fs.readdirSync('./data');
|
||||
var data = {
|
||||
availableYears: JSON.stringify(getAvailableYears(dataFiles)),
|
||||
production: false,
|
||||
salt: 'salt',
|
||||
playerListLocation: 'api/players.spritz.js'}
|
||||
console.log(data);
|
||||
return gulp.src('index.tmpl.html')
|
||||
.pipe(rename("index.html"))
|
||||
.pipe(template(data))
|
||||
.pipe(gulp.dest('.'));
|
||||
};
|
||||
|
||||
exports.compileArticles = function compileArticles(){
|
||||
|
||||
var transformArticle = function(article){
|
||||
var isMarkdownKey = /markdown/i;
|
||||
_.each(article, function(section, sectionName){
|
||||
_.each(section, function(value, key){
|
||||
if(isMarkdownKey.test(key) && _.isString(value)){
|
||||
section[key] = marked(value);
|
||||
}
|
||||
});
|
||||
});
|
||||
return JSON.stringify(article, null, 4);
|
||||
};
|
||||
|
||||
return gulp.src('data/articles/**/*.toml.md')
|
||||
.pipe(toml({to: transformArticle}))
|
||||
.pipe(wrapper({
|
||||
header: "define(['m', '_'], function (m, _ ) {\nreturn ",
|
||||
footer: ';\n});\n'
|
||||
}))
|
||||
.pipe(rename(function(path){
|
||||
path.basename = path.basename.replace(/\.toml$/i, '');
|
||||
path.extname = '.js';
|
||||
return path;
|
||||
}))
|
||||
.pipe(gulp.dest('./script/articles/'));
|
||||
};
|
||||
|
||||
|
||||
exports.base = series(
|
||||
exports.sass,
|
||||
exports.compileResults,
|
||||
exports.compileArticles,
|
||||
exports.encryptResults
|
||||
|
||||
);
|
||||
|
||||
exports.prod = series(
|
||||
exports.base,
|
||||
exports.templateProd
|
||||
);
|
||||
|
||||
exports.dev = series(
|
||||
exports.base,
|
||||
exports.templateDev
|
||||
);
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.7 MiB |
File diff suppressed because it is too large.
Load diff
Binary file not shown.
File diff suppressed because it is too large.
Load diff
|
Before Width: | Height: | Size: 219 KiB |
File diff suppressed because it is too large.
Load diff
|
Before Width: | Height: | Size: 379 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 68 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 145 KiB |
@@ -1,24 +0,0 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" >
|
||||
<title>Balle Phenix</title>
|
||||
<link rel="shortcut icon" href="/favicon.ico">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<link rel="stylesheet" href="css/style.css" />
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
window.salt = "<%= salt %>";
|
||||
window.availableYears = <%= availableYears %>;
|
||||
</script>
|
||||
<script src="<%= playerListLocation %>"></script>
|
||||
<%if(production){ %>
|
||||
<script src="main-built.js"></script>
|
||||
<% }else{ %>
|
||||
<script data-main="script/main" src="node_modules/requirejs/require.js"></script>
|
||||
<% } %>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
hello {{ title }}
|
||||
Generated
-4937
File diff suppressed because it is too large.
Load diff
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "phenix-website",
|
||||
"version": "1.0.0",
|
||||
"description": "Main web site of Balle Phénix.",
|
||||
"main": "index.html",
|
||||
"dependencies": {
|
||||
"almond": "0.3.3",
|
||||
"gulp": "4.0.2",
|
||||
"gulp-clean": "0.4.0",
|
||||
"gulp-modify": "0.1.1",
|
||||
"gulp-rename": "2.0.0",
|
||||
"gulp-sass": "4.1.0",
|
||||
"gulp-task-listing": "1.1.0",
|
||||
"gulp-template": "5.0.0",
|
||||
"gulp-toml": "0.2.0",
|
||||
"gulp-webserver": "0.9.1",
|
||||
"gulp-wrapper": "1.0.0",
|
||||
"gulp-yaml": "2.0.4",
|
||||
"lodash": "4.17.21",
|
||||
"marked": "2.0.7",
|
||||
"mithril": "0.2.5",
|
||||
"requirejs": "2.3.6",
|
||||
"spritzjs": "https://gitlab.com/didiercrunch/spritzjs.git",
|
||||
"uikit": "2.27.2"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://gitlab.com/didiercrunch/phenix-website"
|
||||
},
|
||||
"author": "didier amyot <didier.amyot@gmail.com>",
|
||||
"license": "MIT"
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
*.js
|
||||
@@ -1,15 +0,0 @@
|
||||
define(['m', 'articles/saison_2023'], function (m, saison_2023) {
|
||||
var simplifyArticleStructure = function(article){
|
||||
var ret = {};
|
||||
_.each(article, function(section, sectionName){
|
||||
ret[sectionName] = m.trust(section.innerMarkdown);
|
||||
});
|
||||
return ret;
|
||||
};
|
||||
|
||||
var articles = [
|
||||
saison_2023
|
||||
];
|
||||
|
||||
return _.map(articles, simplifyArticleStructure);
|
||||
});
|
||||
@@ -1,13 +0,0 @@
|
||||
define(['m', '_'], function (m, _ ) {
|
||||
return {
|
||||
"title": {
|
||||
"innerMarkdown": "<h2 id=\"début-saison-2017-retardée\">Début saison 2017 retardée</h2>\n"
|
||||
},
|
||||
"meta": {
|
||||
"innerMarkdown": "<p>Samedi 23 avril 2017</p>\n"
|
||||
},
|
||||
"body": {
|
||||
"innerMarkdown": "<p>Suite à la situation au parc Walter-Stewart, nous n'avons toujours pas de date définie\npour le début de la saison. La situation devrait se régler incessamment. Nous vous\ndonnerons des nouvelles dès que nous en aurons.</p>\n<p>Merci beaucoup,</p>\n<p>Comité ballephenix!</p>\n"
|
||||
}
|
||||
};
|
||||
});
|
||||
@@ -1,24 +0,0 @@
|
||||
requirejs.config({
|
||||
paths: {
|
||||
'_': '../node_modules/lodash/lodash.min',
|
||||
'm': '../node_modules/mithril/mithril.min',
|
||||
'spritz': '../node_modules/spritzjs/dist/spritz'
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
requirejs(['m', 'views/mainPage', 'views/historicPage', 'views/newsPage', 'views/calendarPage', 'views/rulesPage', 'views/photosPage', 'views/confidentialPage', 'views/contactPage', 'views/inscriptionForm'], function(m, mainPage, historicPage, newsPage, calendarPage, rulesPage, photosPage, confidentialPage, contactPage, inscriptionForm){
|
||||
m.route.mode = "hash";
|
||||
m.route(document.body, "/", {
|
||||
"/": mainPage,
|
||||
"/nouvelles": newsPage,
|
||||
"/inscription-form": inscriptionForm,
|
||||
"/calendrier": calendarPage,
|
||||
"/calendrier/:year": calendarPage,
|
||||
"/reglement": rulesPage,
|
||||
"/photos": photosPage,
|
||||
"/membre": confidentialPage,
|
||||
"/historique": historicPage,
|
||||
"/contact": contactPage
|
||||
});
|
||||
});
|
||||
@@ -1,134 +0,0 @@
|
||||
define(['_'], function(_) {
|
||||
var resultParser = {};
|
||||
|
||||
resultParser._addJSDateToResult = function(res){
|
||||
var date = res.date.split('/');
|
||||
var time = _.isString(res.time) ? res.time.split(':'): [0, 0];
|
||||
res.jsDate = new Date(
|
||||
Number(date[0]),
|
||||
Number(date[1]) - 1,
|
||||
Number(date[2]),
|
||||
Number(time[0]),
|
||||
Number(time[1])
|
||||
);
|
||||
return res;
|
||||
};
|
||||
|
||||
resultParser._setCanonicalPoints = function(res){
|
||||
if(!_.isNumber(res.home_points) && _.isNumber(_.get(res, res.home))){
|
||||
res.home_points = res[res.home];
|
||||
}
|
||||
if(!_.isNumber(res.away_points) && _.isNumber(_.get(res, res.away))){
|
||||
res.away_points = res[res.away];
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
resultParser.parseResults = function(rawResults){
|
||||
rawResults = _.map(rawResults, resultParser._setCanonicalPoints);
|
||||
rawResults = _.map(rawResults, resultParser._addJSDateToResult);
|
||||
rawResults = _.map(rawResults, resultParser._addCustomStyle);
|
||||
return rawResults;
|
||||
};
|
||||
|
||||
resultParser.getNightGames = function(rawResults){
|
||||
var ret = {};
|
||||
_.each(resultParser.parseResults(rawResults), function(res){
|
||||
if(_.has(ret, res.date)){
|
||||
ret[res.date].push(res);
|
||||
}else{
|
||||
ret[res.date] = [res];
|
||||
}
|
||||
});
|
||||
return _.map(ret, function(games, date){
|
||||
return resultParser._addJSDateToResult({date: date, games: games});
|
||||
});
|
||||
};
|
||||
|
||||
resultParser._getAllTeams = function(rawResults){
|
||||
var homeTeams = _.map(rawResults, 'home');
|
||||
var awayTeams = _.map(rawResults, 'away');
|
||||
return _.uniq(_.concat(homeTeams, awayTeams));
|
||||
};
|
||||
|
||||
resultParser._getWinner = function(res){
|
||||
if(res.home_points > res.away_points){
|
||||
return res.home;
|
||||
}
|
||||
if(res.home_points < res.away_points){
|
||||
return res.away;
|
||||
}
|
||||
};
|
||||
|
||||
resultParser._hasWon = function(res, team){
|
||||
return resultParser._getWinner(res) == team;
|
||||
};
|
||||
|
||||
resultParser._hasLost = function(res, team){
|
||||
return !resultParser._isDraw(res) && resultParser._getWinner(res) != team;
|
||||
};
|
||||
|
||||
resultParser._isDraw = function(res){
|
||||
return res.home_points == res.away_points;
|
||||
};
|
||||
|
||||
resultParser._getPointsFor = function(res, team){
|
||||
if(res.home == team){
|
||||
return res.home_points;
|
||||
}
|
||||
return res.away_points;
|
||||
};
|
||||
|
||||
resultParser._getPointsForOpponent = function(res, team){
|
||||
if(res.home == team){
|
||||
return res.away_points;
|
||||
}
|
||||
return res.home_points;
|
||||
};
|
||||
|
||||
resultParser._getPointsForGame = function(res, team){
|
||||
if(resultParser._hasWon(res, team)){
|
||||
return 2;
|
||||
}
|
||||
return resultParser._isDraw(res) ? 1: 0;
|
||||
};
|
||||
|
||||
resultParser._getTeamStats = function(rawResults, team){
|
||||
var ret = {
|
||||
team: team, gamePlayed: 0, victories: 0, points: 0,
|
||||
defeats: 0, draws: 0, pointsFor: 0, pointsAgaint: 0};
|
||||
_.each(rawResults, function(res){
|
||||
if((team != res.home && team != res.away) || !_.isNumber(res.home_points)){
|
||||
return;
|
||||
}
|
||||
ret.gamePlayed += 1;
|
||||
ret.victories += resultParser._hasWon(res, team) ? 1: 0;
|
||||
ret.defeats += resultParser._hasLost(res, team) ? 1: 0;
|
||||
ret.draws += resultParser._isDraw(res) ? 1: 0;
|
||||
ret.pointsFor += resultParser._getPointsFor(res, team);
|
||||
ret.pointsAgaint += resultParser._getPointsForOpponent(res, team);
|
||||
ret.points += resultParser._getPointsForGame(res, team);
|
||||
});
|
||||
return ret;
|
||||
};
|
||||
|
||||
resultParser._removeTemporaryResults = function(rawResults){
|
||||
return _.filter(rawResults, function(rawResult){
|
||||
return !rawResult.temporary;
|
||||
});
|
||||
};
|
||||
|
||||
resultParser._isValidGame = function(game){
|
||||
return !game.rain && ! game.practice;
|
||||
};
|
||||
|
||||
resultParser.getStats = function(rawResults){
|
||||
rawResults = _.filter(rawResults, resultParser._isValidGame);
|
||||
rawResults = _.map(rawResults, resultParser._setCanonicalPoints);
|
||||
var allTeams = resultParser._getAllTeams(resultParser._removeTemporaryResults(rawResults));
|
||||
var getTeamStats = _.partial(resultParser._getTeamStats, rawResults);
|
||||
return _.map(allTeams, getTeamStats);
|
||||
};
|
||||
|
||||
return resultParser;
|
||||
});
|
||||
@@ -1,30 +0,0 @@
|
||||
define(['m', '_'], function (m, _) {
|
||||
var teams = {};
|
||||
|
||||
teams.teams = function(){
|
||||
return [
|
||||
{name: 'remplaçants', color: '#FFA500'},
|
||||
{name: 'jaune', color: '#FF0'},
|
||||
{name:'rouge', color: '#F00'},
|
||||
{name:'bleu', color: '#00F'},
|
||||
{name:'gris', color: '#808080'},
|
||||
{name:'vert', color: '#008000'},
|
||||
{name: 'noir', color: '#000000'},
|
||||
{name: 'orange', color: '#FFA500'},
|
||||
{name: 'mauve', color: '#E0B0FF'}
|
||||
];
|
||||
};
|
||||
|
||||
teams.getTeamColor = function(teamName){
|
||||
var color;
|
||||
_.each(teams.teams(), function(team){
|
||||
if(team.name == teamName){
|
||||
color = team.color;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return color;
|
||||
};
|
||||
|
||||
return teams;
|
||||
});
|
||||
@@ -1,92 +0,0 @@
|
||||
define(['m'], function(m) {
|
||||
var util = {};
|
||||
util.loremIpsum = function(n){
|
||||
var loremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a"+
|
||||
" diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula "+
|
||||
"ac quam viverra nec consectetur ante hendrerit. Donec et mollis"+
|
||||
" dolor. Praesent et diam eget libero egestas mattis sit amet"+
|
||||
" vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia "+
|
||||
"consectetur. Donec ut libero sed arcu vehicula ultricies a non"+
|
||||
" tortor. Lorem ipsum dolor sit amet, consectetur adipiscing "+
|
||||
"elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a "+
|
||||
"semper sed, adipiscing id dolor. Pellentesque auctor nisi id "+
|
||||
"magna consequat sagittis. Curabitur dapibus enim sit amet elit "+
|
||||
"pharetra tincidunt feugiat nisl imperdiet. Ut convallis libero "+
|
||||
"in urna ultrices accumsan. Donec sed od";
|
||||
loremIpsum = loremIpsum.split(' ');
|
||||
n = n || loremIpsum.length;
|
||||
return loremIpsum.splice(0, n).join(" ");
|
||||
|
||||
};
|
||||
|
||||
util.formatDate = function(date){
|
||||
var monthNames = ['janvier', 'février', 'mars', 'avril', 'mai', 'juin',
|
||||
'juillet', 'août', 'septembre', 'octobre', 'novembre',
|
||||
'decembre'];
|
||||
return [date.getDate(),
|
||||
monthNames[date.getMonth()],
|
||||
date.getFullYear()].join(' ');
|
||||
|
||||
};
|
||||
|
||||
util.formatDateSmall = function(date){
|
||||
var smallMonthNames = ['janv', 'févr', 'mars', 'avr', 'mai', 'juin',
|
||||
'juill', 'août', 'sept', 'oct', 'nov',
|
||||
'dec'];
|
||||
return [date.getDate(),
|
||||
smallMonthNames[date.getMonth()],
|
||||
date.getFullYear() % 1000].join(' ');
|
||||
};
|
||||
|
||||
util.join = function(arr, sep){
|
||||
if(!_.isArray(arr) || arr.length < 1){
|
||||
return [];
|
||||
}
|
||||
var ret = [arr.pop()];
|
||||
_.each(arr, function(elm){
|
||||
ret.push(sep);
|
||||
ret.push(elm);
|
||||
});
|
||||
return ret;
|
||||
};
|
||||
|
||||
util.facebookLink = function(){
|
||||
return m('a[href="https://www.facebook.com/SportsPhenixMtl"]',
|
||||
m('i.fa.fa-facebook-square')
|
||||
);
|
||||
};
|
||||
|
||||
util.emailLink = function(){
|
||||
return m('a[href="mailto:sportsphenixmtl@gmail.com"]', 'sportsphenixmtl@gmail.com');
|
||||
};
|
||||
|
||||
util.resultatsURL = function(year){
|
||||
var cacheBuster = window.Date.now();
|
||||
year = !!year ? year: util.getDefaultYear();
|
||||
return "api/resultats" + year + ".json?_=" + cacheBuster;
|
||||
};
|
||||
|
||||
|
||||
util.getAvailableYears = function(){
|
||||
if(window.availableYears){
|
||||
return _.clone(window.availableYears)
|
||||
}
|
||||
return [];
|
||||
};
|
||||
|
||||
util.getDefaultYear = function(){
|
||||
return _.max(util.getAvailableYears());
|
||||
}
|
||||
|
||||
|
||||
util.getResults = function(year){
|
||||
var url = util.resultatsURL(year);
|
||||
return m.request({method: "GET", url: url})
|
||||
};
|
||||
|
||||
util.getDefaultResults = function(){
|
||||
return util.getResults(util.getDefaultYear());
|
||||
};
|
||||
|
||||
return util;
|
||||
});
|
||||
@@ -1,138 +0,0 @@
|
||||
define(['m', '_', 'util', 'resultParser', 'teams', 'views/topNavBar', 'views/footer', 'views/schedulView'], function(m, _, util, resultParser, teams, topNavBar, footer, schedulView) {
|
||||
function ppYear(year, availableYears) {
|
||||
return _.last(availableYears) == year ? "" : year;
|
||||
}
|
||||
|
||||
var statsView = {};
|
||||
|
||||
statsView.controller = function(year){
|
||||
var games = m.prop([]);
|
||||
return util.getResults(year)
|
||||
.then(games)
|
||||
.then(resultParser.getStats);
|
||||
};
|
||||
|
||||
statsView.getStatRow = function(teamStats){
|
||||
var formatStat = function(n){
|
||||
return teamStats.gamePlayed === 0 ? '-' : n;
|
||||
};
|
||||
return m('tr', [
|
||||
m('td', teamStats.team),
|
||||
m('td', teamStats.gamePlayed),
|
||||
m('td', formatStat(teamStats.victories)),
|
||||
m('td', formatStat(teamStats.defeats)),
|
||||
m('td', formatStat(teamStats.draws)),
|
||||
m('td', formatStat(teamStats.pointsFor)),
|
||||
m('td', formatStat(teamStats.pointsAgaint)),
|
||||
m('td', formatStat(teamStats.pointsFor - teamStats.pointsAgaint)),
|
||||
m('td', formatStat(teamStats.points))
|
||||
]);
|
||||
};
|
||||
|
||||
statsView.isStatForValidTeam = function(stat){
|
||||
var teamNames = _.map(teams.teams(), 'name');
|
||||
return _.includes(teamNames, stat.team);
|
||||
}
|
||||
|
||||
|
||||
statsView.mainTable = function(stats){
|
||||
var orderedStats = _.reverse(_.sortBy(stats, ['points', 'pointsFor']));
|
||||
return m('table.uk-table.uk-table-hover.uk-table-striped',[
|
||||
m('thead', m('tr', [
|
||||
m('th', 'Équipes'),
|
||||
m('th', 'PJ'),
|
||||
m('th', 'V'),
|
||||
m('th', 'D'),
|
||||
m('th', 'N'),
|
||||
m('th', 'PP'),
|
||||
m('th', 'PC'),
|
||||
m('th', 'DIF'),
|
||||
m('th', 'PTS')
|
||||
])),
|
||||
m('tbody', _(orderedStats)
|
||||
.filter(statsView.isStatForValidTeam)
|
||||
.map(statsView.getStatRow)
|
||||
.value())
|
||||
]);
|
||||
};
|
||||
|
||||
statsView.legend = function(){
|
||||
var items = ["PJ : Parties joués", "V : Victoire", "D : Défaite",
|
||||
"N : Nul", "PP : Points pour", "PC : Points contre",
|
||||
"DIF : Diférenciel","PTS : Points"];
|
||||
return m('ul.uk-subnav.uk-subnav-line.uk-flex-center',[
|
||||
_.map(items, function(itm){
|
||||
return m('li', itm);
|
||||
})
|
||||
]);
|
||||
};
|
||||
|
||||
statsView.view = function(stats, year){
|
||||
return m('div.uk-grid',
|
||||
m('div.uk-width-medium-1-1.uk-width-large-1-1.uk-container-center',[
|
||||
m('h2', 'Classement ' + year),
|
||||
statsView.mainTable(stats()),
|
||||
statsView.legend()
|
||||
]));
|
||||
|
||||
};
|
||||
|
||||
var tabView = {};
|
||||
|
||||
tabView._createTab = function(activeYear, availableYears, year){
|
||||
var isActive = (activeYear == year) || (activeYear == ppYear(year, availableYears));
|
||||
return m('li', {'class': isActive ? 'uk-active': ''}, // 'uk-active'
|
||||
m('a', {href: '#/calendrier/' + ppYear(year, availableYears)}, 'Saison ' + year));
|
||||
}
|
||||
|
||||
tabView.view = function(vnode, isPlayoff, activeYear, availableYears){
|
||||
var createTab = _.partial(tabView._createTab, activeYear, availableYears);
|
||||
return m('div.uk-margin', m('h2', 'Calendrier ' + ppYear(activeYear, availableYears)),
|
||||
m('ul.uk-tab', _.reverse(_.map(availableYears, createTab))));
|
||||
};
|
||||
|
||||
var playoffView = {};
|
||||
|
||||
playoffView.line = function(x1, y1, x2, y2){
|
||||
return m('line', {'x1': x1,
|
||||
'y1': y1,
|
||||
'x2': x2,
|
||||
'y2': y2,
|
||||
style: 'stroke:rgb(255,0,0);stroke-width:2'})
|
||||
}
|
||||
|
||||
playoffView.horizontalLine = function(x1, x2, y){
|
||||
return playoffView.line(x1, y, x2, y);
|
||||
};
|
||||
|
||||
playoffView.view = function(){
|
||||
var width = 600;
|
||||
var height = 600;
|
||||
var padding = 40;
|
||||
return m('div',
|
||||
m('svg', {width: width, height: height},
|
||||
playoffView.horizontalLine(padding, width/2 - padding, height/3),
|
||||
playoffView.horizontalLine(padding, width/2 - padding, 2 * height/3)
|
||||
));
|
||||
};
|
||||
|
||||
calendarPage = {};
|
||||
|
||||
calendarPage.view = function(vnode){
|
||||
var isPlayoff = window.location.hash.endsWith('playoff');
|
||||
var availableYears = util.getAvailableYears();
|
||||
var year = _.get(m.route.param(), 'year', util.getDefaultYear());
|
||||
|
||||
var main = isPlayoff ? m.component(playoffView) : m.component(schedulView, year, availableYears);
|
||||
return [m.component(topNavBar),
|
||||
m('div.uk-grid.uk-margin-top.uk-margin-bottom',
|
||||
m('div.uk-width-large-3-5.uk-width-medium-4-5.uk-width-small-1-1.uk-container-center',[
|
||||
m.component(statsView, year, availableYears),
|
||||
m.component(tabView, isPlayoff, year, availableYears),
|
||||
main
|
||||
])),
|
||||
m.component(footer)];
|
||||
};
|
||||
|
||||
return calendarPage;
|
||||
});
|
||||
@@ -1,20 +0,0 @@
|
||||
define(['m', '_', 'teams', 'views/loginPage', 'views/playersPage', 'views/topNavBar', 'views/footer'], function (m, _ , teams, loginPage, playersPage, topNavBar, footer) {
|
||||
|
||||
var confidentialPage = {};
|
||||
|
||||
confidentialPage.view = function(){
|
||||
var body;
|
||||
if(_.isEmpty(localStorage.getItem('secret'))){
|
||||
body = loginPage;
|
||||
}else{
|
||||
body = playersPage;
|
||||
}
|
||||
return [
|
||||
m.component(topNavBar),
|
||||
m.component(body),
|
||||
m.component(footer)
|
||||
];
|
||||
};
|
||||
|
||||
return confidentialPage;
|
||||
});
|
||||
@@ -1,73 +0,0 @@
|
||||
define(['m', '_', 'util', 'resultParser', 'views/topNavBar', 'views/footer'], function (m, _ , util, resultParser, topNavBar, footer) {
|
||||
|
||||
var contactBody = {};
|
||||
|
||||
contactBody.logo = function(){
|
||||
var style = 'height: 300px; width: 300px; background-size: 300px; background-image: url(images/logosansfond.JPG);';
|
||||
return m('div.uk-cover-background.uk-container-center', {style: style});
|
||||
};
|
||||
|
||||
contactBody.logoLine = function(){
|
||||
return m('div.uk-grid.uk-margin',
|
||||
m('div.uk-width-1-1', contactBody.logo()));
|
||||
};
|
||||
|
||||
contactBody.tel = function(){
|
||||
return ' (514) 838-8950';
|
||||
};
|
||||
|
||||
contactBody.address = function(){
|
||||
return m('p', ' 10454 Sylvain-Garneau', m('br'), 'Montréal, Québec H1C 0A2');
|
||||
};
|
||||
|
||||
contactBody.website = function(){
|
||||
var gitlabUrl = 'https://gitlab.com/ballephenix/website';
|
||||
return m('p', ' Le site web est ouvert et accessible sur ',
|
||||
m('a', {href: gitlabUrl}, 'gitlab.'));
|
||||
};
|
||||
|
||||
contactBody.contact = function(){
|
||||
return m('div.div.uk-panel.uk-panel-box.uk-panel-box-secondary.uk-container-center.uk-margin',[
|
||||
m('table.uk-table',
|
||||
m('tr',
|
||||
m('td.uk-text-right', m('i.fa.fa-desktop')),
|
||||
m('td', util.emailLink())
|
||||
),
|
||||
m('tr',
|
||||
m('td.uk-text-right', m('i.fa.fa-phone')),
|
||||
m('td', contactBody.tel())
|
||||
),
|
||||
m('tr',
|
||||
m('td.uk-text-right', m('i.fa.fa-envelope')),
|
||||
m('td', contactBody.address())
|
||||
),
|
||||
m('tr',
|
||||
m('td.uk-text-right', m('i.fa.fa-gitlab')),
|
||||
m('td', contactBody.website())
|
||||
)
|
||||
)
|
||||
]);
|
||||
|
||||
};
|
||||
|
||||
contactBody.view = function(){
|
||||
return m('div.uk-margin-top.uk-margin-bottom.uk-grid',
|
||||
m('div.uk-width-large-2-5.uk-width-medium-4-5.uk-width-small-1-1.uk-container-center', [
|
||||
contactBody.logoLine(),
|
||||
contactBody.contact()
|
||||
])
|
||||
);
|
||||
};
|
||||
|
||||
var contactPage = {};
|
||||
|
||||
contactPage.view = function(){
|
||||
return [
|
||||
m.component(topNavBar),
|
||||
m.component(contactBody),
|
||||
m.component(footer)
|
||||
];
|
||||
};
|
||||
|
||||
return contactPage;
|
||||
});
|
||||
@@ -1,23 +0,0 @@
|
||||
define(['m', '_', 'util'], function (m, _, util) {
|
||||
var footer = {};
|
||||
|
||||
footer.wording = function(){
|
||||
return [
|
||||
m('span.uk-hidden-small', 'Ligue de balle les Phénix... pour le plaisir de jouer!'),
|
||||
m('h4.uk-visible-small', 'Ligue de balle les Phénix')
|
||||
];
|
||||
};
|
||||
|
||||
footer.view = function(){
|
||||
return m('footer.uk-grid.ph-footer', {style: {padding: '40px'}},
|
||||
m('div.uk-container.uk-container-center.uk-text-center', [
|
||||
m('div.uk-panel', footer.wording()),
|
||||
m('ul.uk-subnav.uk-subnav-line.uk-flex-center',
|
||||
m('li', util.emailLink())),
|
||||
m('h1', util.facebookLink())
|
||||
])
|
||||
);
|
||||
};
|
||||
|
||||
return footer;
|
||||
});
|
||||
@@ -1,28 +0,0 @@
|
||||
define(['m', '_', 'util', 'views/topNavBar', 'views/calendarPage'], function(m, _, util, topNavBar, calendarPage) {
|
||||
|
||||
var yearSelector = {};
|
||||
|
||||
yearSelector.view = function(){
|
||||
return m('div.uk-grid',
|
||||
m('div.uk-width-large-3-5.uk-width-medium-1-1.uk-container-center',
|
||||
yearSelector.tab()));
|
||||
};
|
||||
|
||||
yearSelector.tab = function(){
|
||||
return m('ul.uk-tab.uk-margin-top', [
|
||||
m('li.uk-active', m('a', 'Saison 2016'))
|
||||
]);
|
||||
};
|
||||
|
||||
var historicPage = {};
|
||||
|
||||
historicPage.view = function(){
|
||||
return [
|
||||
m.component(topNavBar),
|
||||
m.component(yearSelector)
|
||||
// m.component(calendarPage)
|
||||
];
|
||||
};
|
||||
|
||||
return historicPage;
|
||||
});
|
||||
@@ -1,53 +0,0 @@
|
||||
define(['m', '_',], function (m, _ ) {
|
||||
|
||||
var inscriptionForm = {};
|
||||
|
||||
inscriptionForm.title = function(){
|
||||
return m('h1.uk-width-1-1.uk-text-center', 'Inscription Balle Phénix');
|
||||
};
|
||||
|
||||
inscriptionForm._field = function(label){
|
||||
return m('label', label, m('input.uk-form-width-large', {type: 'text'}));
|
||||
};
|
||||
|
||||
inscriptionForm.identification = function(){
|
||||
return m('form.uk-form', m('fieldset',
|
||||
m('legend', 'Identification'),
|
||||
m('div.uk-margin-top.uk-margin-bottom.uk-grid',
|
||||
m('div.uk-width-1-2', inscriptionForm._field('Nom')),
|
||||
m('div.uk-width-1-2', inscriptionForm._field('Prénom'))),
|
||||
m('div.uk-margin-top.uk-margin-bottom.uk-grid',
|
||||
m('div.uk-width-1-2', inscriptionForm._field('Adresse')),
|
||||
m('div.uk-width-1-2', inscriptionForm._field('Chanson préférée'))),
|
||||
m('div.uk-margin-top.uk-margin-bottom.uk-grid',
|
||||
m('div.uk-width-1-3', inscriptionForm._field('Ville')),
|
||||
m('div.uk-width-1-3', inscriptionForm._field('Code postal')),
|
||||
m('div.uk-width-1-3', inscriptionForm._field('Tél')))
|
||||
|
||||
));
|
||||
};
|
||||
|
||||
inscriptionForm.inscription = function(){
|
||||
return m('form.uk-form',
|
||||
m('h2.uk-width-1-1.uk-text-center', 'Inscription'),
|
||||
m('div.uk-margin-top.uk-margin-bottom.uk-grid',
|
||||
m('div.uk-width-1-1',
|
||||
inscriptionForm._field('Inscription en duo. Inscrivez le nom du joueur')))
|
||||
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
inscriptionForm.view = function(){
|
||||
return [
|
||||
inscriptionForm.title(),
|
||||
inscriptionForm.identification(),
|
||||
inscriptionForm.inscription()
|
||||
|
||||
];
|
||||
// return m('form', m('label', 'Nom', m('input', {type: 'text'})));
|
||||
};
|
||||
|
||||
return inscriptionForm;
|
||||
});
|
||||
@@ -1,55 +0,0 @@
|
||||
define(['m', '_'], function (m, _) {
|
||||
|
||||
var loginPage = {};
|
||||
loginPage.salt = window.salt;
|
||||
|
||||
loginPage.controller = function(){
|
||||
return {email: m.prop(''), password: m.prop('')};
|
||||
};
|
||||
|
||||
loginPage.logo = function(){
|
||||
var style = 'height: 250px; width: 250px; background-size: 250px; background-image: url(images/logosansfond.JPG);';
|
||||
return m('div.uk-cover-background.uk-container-center', {style: style});
|
||||
};
|
||||
|
||||
loginPage.logoLine = function(){
|
||||
return m('div.uk-grid.uk-margin',
|
||||
m('div.uk-width-1-1', loginPage.logo()));
|
||||
};
|
||||
|
||||
loginPage.login = function(ctrl){
|
||||
return function(){
|
||||
localStorage.setItem('secret', loginPage.salt + ctrl.email() + ctrl.password());
|
||||
return false;
|
||||
};
|
||||
};
|
||||
|
||||
loginPage.formChange = function(ctrl){
|
||||
return function(evt){
|
||||
ctrl[evt.target.name](evt.target.value);
|
||||
};
|
||||
};
|
||||
|
||||
loginPage.loginForm = function(ctrl){
|
||||
return m('div.uk-panel.uk-panel-box.uk-panel-box-secondary.uk-width-large-1-3.uk-container-center.uk-margin', [
|
||||
m('form.uk-text-center[action]', {onsubmit: loginPage.login(ctrl), onchange: loginPage.formChange(ctrl)},
|
||||
m('div.uk-form-row',
|
||||
m('label', "Nom d'utilisateur ",
|
||||
m('input[type=text][name=email][required].uk-form-width-small', {value: ctrl.email()} ))),
|
||||
m('div.uk-form-row',
|
||||
m('label', "Mot de passe ",
|
||||
m('input[type=password][name=password][required].uk-form-width-small', {value: ctrl.password()}))),
|
||||
m('div.uk-form-row', m('button.uk-button', m("i.fa.fa-mars-double"), " Pénétrez"))
|
||||
)
|
||||
]);
|
||||
};
|
||||
|
||||
loginPage.view = function(ctrl){
|
||||
return m('div', [
|
||||
loginPage.logoLine(),
|
||||
loginPage.loginForm(ctrl)
|
||||
]);
|
||||
};
|
||||
|
||||
return loginPage;
|
||||
});
|
||||
@@ -1,154 +0,0 @@
|
||||
define(['m', '_', 'views/nextGameDaySchedule', 'views/topNavBar', 'views/footer', 'articles/articles'], function (m, _ , nextGameDaySchedule, topNavBar, footer, articles) {
|
||||
var mainPageLogo = {};
|
||||
|
||||
mainPageLogo.view = function(){
|
||||
return m('div.uk-grid', [
|
||||
m('div.uk-large-1-3.uk-medium-2-3.uk-container-center', [
|
||||
m('div.uk-cover-background.uk-container-center.uk-margin-left.uk-margin-top',{style: 'height:300px; width: 300px; background-size: 300px; background-image: url(images/logosansfond.JPG);'})
|
||||
])
|
||||
]);
|
||||
};
|
||||
|
||||
var mainPageNews = {};
|
||||
|
||||
mainPageNews.showMiniArticle = function(article){
|
||||
return m('div', m('h3.uk-panel-title', m('a.uk-link-muted', {href: '#/nouvelles'}, article.title)),
|
||||
m('p', article.smallBody || article.body));
|
||||
}
|
||||
|
||||
mainPageNews.view = function(){
|
||||
return m('div.uk-panel.uk-panel-box',[
|
||||
m('div.uk-panel-badge.uk-badge', [
|
||||
m('i.fa.fa-newspaper-o', {style: {'font-size': '1.7em'}})
|
||||
]),
|
||||
mainPageNews.showMiniArticle(_.get(articles, 0, {}))
|
||||
]);
|
||||
};
|
||||
|
||||
|
||||
|
||||
var scheduleNotYetSet = {};
|
||||
|
||||
scheduleNotYetSet.view = function(){
|
||||
return m('div',
|
||||
m('h4', 'À venir...'),
|
||||
m('p', "Suite a la situation au parc Walter-Stewart, " +
|
||||
"nous n'avons toujours pas de date définie " +
|
||||
"pour le début de la saison. La situation" +
|
||||
"devrait se regler incessamment"));
|
||||
};
|
||||
|
||||
var mainPageSchedule = {};
|
||||
|
||||
mainPageSchedule.view = function(){
|
||||
return m('div.uk-panel.uk-panel-box',[
|
||||
m('div.uk-panel-badge.uk-badge', m('i.fa.fa-calendar', {style: {'font-size': '1.7em'}})),
|
||||
m('h3.uk-panel-title', m('a.uk-link-muted', {href: '#/calendrier'}, 'Calendrier')),
|
||||
m.component(nextGameDaySchedule)
|
||||
]);
|
||||
};
|
||||
|
||||
var mainMap = {};
|
||||
|
||||
mainMap.getWalterStewartMap = function(){
|
||||
var iframeUrl = "//www.openstreetmap.org/export/embed.html?bbox=-73.55936229228975%2C45.53102667048665%2C-73.55230271816255%2C45.53444249585723&layer=mapnik"; // "//www.openstreetmap.org/export/embed.html?bbox=-73.56355190277101%2C45.5294483312637%2C-73.54943275451662%2C45.53627996625677&layer=mapnik"; // "//www.openstreetmap.org/export/embed.html?bbox=-73.56355190277101%2C45.5294483312637%2C-73.54943275451662%2C45.53627996625677&layer=mapnik";
|
||||
var externalLink = "http://www.openstreetmap.org/#map=17/45.53216/-73.55692";
|
||||
var iframeParams = {
|
||||
style: {border: '1px solid black', 'min-height': '300px'},
|
||||
width: '100%',
|
||||
frameborder: 0,
|
||||
scrolling: 'no',
|
||||
marginheight: 0,
|
||||
src: iframeUrl
|
||||
};
|
||||
return [
|
||||
m('iframe', iframeParams),
|
||||
m('br'),
|
||||
m('small', m('a', {href: externalLink}, 'Voir la carte'))
|
||||
];
|
||||
};
|
||||
|
||||
mainMap.getGeorgesVernotMap = function(){
|
||||
// " style="border: 1px solid black"></iframe><br/><small><a href="http://www.openstreetmap.org/#map=16/45.5670/-73.6177">View Larger Map</a></small>
|
||||
|
||||
var iframeUrl = "//www.openstreetmap.org/export/embed.html?bbox=-73.63185167312623%2C45.560217957150535%2C-73.60361337661745%2C45.57387292040785&layer=mapnik";
|
||||
var externalLink = "http://www.openstreetmap.org/#map=17/45.53216/-73.55692";
|
||||
var iframeParams = {
|
||||
style: {border: '1px solid black', 'min-height': '300px'},
|
||||
width: '100%',
|
||||
frameborder: 0,
|
||||
scrolling: 'no',
|
||||
marginheight: 0,
|
||||
src: iframeUrl
|
||||
};
|
||||
return [
|
||||
m('iframe', iframeParams),
|
||||
m('br'),
|
||||
m('small', m('a', {href: externalLink}, 'Voir la carte'))
|
||||
];
|
||||
};
|
||||
|
||||
mainMap.view = function(){
|
||||
return m('div.uk-panel.uk-panel-box',[
|
||||
m('div.uk-panel-badge.uk-badge', [
|
||||
m('i.fa.fa-map-o', {style: {'font-size': '1.7em'}})
|
||||
]),
|
||||
m('h3.uk-panel-title', 'Parc Walter-Stewart'),
|
||||
mainMap.getWalterStewartMap()
|
||||
]);
|
||||
};
|
||||
|
||||
var mainPageBottom = {};
|
||||
|
||||
mainPageBottom.regularSizeView = function(){
|
||||
return m('div.uk-grid.uk-visible-large.uk-grid-match', [
|
||||
m('div.uk-width-large-1-3.uk-width-medium-1-3', m.component(mainPageNews)),
|
||||
m('div.uk-width-large-1-3.uk-width-medium-1-3', m.component(mainPageSchedule)),
|
||||
m('div.uk-width-large-1-3.uk-width-medium-1-3', m.component(mainMap))
|
||||
]);
|
||||
};
|
||||
|
||||
mainPageBottom.mediumSizeView = function(){
|
||||
return m('div.uk-visible-medium', [
|
||||
m('div.uk-grid.uk-grid-match', [
|
||||
m('div.uk-width-medium-1-2', [m.component(mainPageNews)]),
|
||||
m('div.uk-width-medium-1-2', [m.component(mainPageSchedule)]),
|
||||
]),
|
||||
m('div.uk-grid',
|
||||
m('div.uk-width-medium-1-1', m.component(mainMap))
|
||||
)
|
||||
]);
|
||||
};
|
||||
|
||||
mainPageBottom.smallSizeView = function(){
|
||||
return m('div.uk-visible-small',
|
||||
[
|
||||
m('div.uk-grid', m('div.uk-width-small-1-1', m.component(mainPageNews))),
|
||||
m('div.uk-grid', m('div.uk-width-small-1-1', m.component(mainPageSchedule))),
|
||||
m('div.uk-grid', m('div.uk-width-small-1-1', m.component(mainMap)))
|
||||
]);
|
||||
};
|
||||
|
||||
mainPageBottom.view = function(){
|
||||
return m('div.uk-margin-top.uk-margin-bottom.uk-grid',
|
||||
m('div.uk-width-large-3-5.uk-width-medium-4-5.uk-width-small-1-1.uk-container-center', [
|
||||
mainPageBottom.regularSizeView(),
|
||||
mainPageBottom.mediumSizeView(),
|
||||
mainPageBottom.smallSizeView()
|
||||
])
|
||||
);
|
||||
};
|
||||
|
||||
var mainPage = {};
|
||||
|
||||
mainPage.view = function(){
|
||||
return [
|
||||
m.component(topNavBar),
|
||||
m.component(mainPageLogo),
|
||||
m.component(mainPageBottom),
|
||||
m.component(footer)
|
||||
];
|
||||
};
|
||||
|
||||
return mainPage;
|
||||
});
|
||||
@@ -1,36 +0,0 @@
|
||||
define(['m', '_', 'util', 'resultParser', 'articles/articles', 'views/topNavBar', 'views/footer'], function (m, _ , util, resultParser, articles, topNavBar, footer) {
|
||||
|
||||
var newsPageBody = {};
|
||||
|
||||
newsPageBody.logo = function(){
|
||||
var style = 'height: 250px; width: 250px; background-size: 250px; background-image: url(images/logosansfond.JPG);';
|
||||
return m('div.uk-cover-background.uk-container-center', {style: style});
|
||||
};
|
||||
|
||||
newsPageBody.getArticle = function(article){
|
||||
return m('article.uk-article.uk-margin-',
|
||||
m('h1.uk-article-title', article.title),
|
||||
m('p.uk-article-meta', article.meta),
|
||||
article.body
|
||||
);
|
||||
};
|
||||
|
||||
newsPageBody.view = function(){
|
||||
var arts = _.reverse(_.map(articles, newsPageBody.getArticle));
|
||||
return m('div', util.join(arts, m('hr')));
|
||||
};
|
||||
|
||||
var newsPage = {};
|
||||
|
||||
newsPage.view = function(){
|
||||
return [
|
||||
m.component(topNavBar),
|
||||
m('div.uk-grid.uk-margin-top.uk-margin-bottom',
|
||||
m('div.uk-width-large-2-5.uk-width-medium-3-5.uk-width-small-1-1.uk-container-center',
|
||||
m.component(newsPageBody))),
|
||||
m.component(footer)
|
||||
];
|
||||
};
|
||||
|
||||
return newsPage;
|
||||
});
|
||||
@@ -1,73 +0,0 @@
|
||||
define(['m', '_', 'util', 'resultParser', 'views/scheduleTeamTags', 'images/rain.svg'], function (m, _ , util, resultParser, scheduleTeamTags, rainSvg) {
|
||||
|
||||
var nextGameDaySchedule = {};
|
||||
|
||||
nextGameDaySchedule._toDay = function(){
|
||||
var now = new Date();
|
||||
return new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
||||
};
|
||||
|
||||
nextGameDaySchedule.controller = function(){
|
||||
var games = m.prop([]);
|
||||
return util.getDefaultResults()
|
||||
.then(games)
|
||||
.then(resultParser.getNightGames)
|
||||
.then(function(nightGames){
|
||||
return nextGameDaySchedule._getNextNightGame(nightGames, nextGameDaySchedule._toDay()).games;
|
||||
});
|
||||
};
|
||||
|
||||
nextGameDaySchedule._getNextNightGame = function(games, date){
|
||||
return _.first(_.filter(games, function(game){
|
||||
return game.jsDate.getTime() >= date.getTime();
|
||||
}));
|
||||
};
|
||||
|
||||
nextGameDaySchedule._getTableHead = function(){
|
||||
return m('thead', m('tr', [
|
||||
m('td', 'Date'),
|
||||
m('td', 'Heure'),
|
||||
m('td', 'Receveur'),
|
||||
m('td', 'Visiteur')
|
||||
]));
|
||||
};
|
||||
|
||||
nextGameDaySchedule._responsoveText = function(largeText, smallText, game){
|
||||
var ret = [];
|
||||
if(game.rain){
|
||||
ret.push(rainSvg('1.5em'));
|
||||
ret.push(' ');
|
||||
} else if(game.practice){
|
||||
ret.push(m('span.uk-badge.uk-badge-success', 'pratique!'));
|
||||
ret.push(' ');
|
||||
}
|
||||
ret.push(m('span.uk-visible-large', largeText));
|
||||
ret.push(m('span.uk-hidden-large', smallText));
|
||||
return ret;
|
||||
};
|
||||
|
||||
nextGameDaySchedule._getGamesRow = function(game){
|
||||
return m('tr', [
|
||||
m('td', nextGameDaySchedule._responsoveText(util.formatDate(game.jsDate),
|
||||
util.formatDateSmall(game.jsDate),
|
||||
game)),
|
||||
m('td', game.time),
|
||||
m('td', scheduleTeamTags.getHomeTeamTag(game)),
|
||||
m('td',scheduleTeamTags.getAwayTeamTag(game))
|
||||
]);
|
||||
};
|
||||
|
||||
nextGameDaySchedule._getGamesRows = function(games){
|
||||
return _.map(games(), nextGameDaySchedule._getGamesRow);
|
||||
};
|
||||
|
||||
nextGameDaySchedule.view = function(games){
|
||||
return m('table.uk-table.uk-table-hover.uk-table-striped.uk-table-condensed',[
|
||||
nextGameDaySchedule._getTableHead(),
|
||||
m('tbody',
|
||||
nextGameDaySchedule._getGamesRows(games)
|
||||
)]);
|
||||
};
|
||||
|
||||
return nextGameDaySchedule;
|
||||
});
|
||||
@@ -1,26 +0,0 @@
|
||||
define(['m', '_', 'util', 'resultParser', 'views/topNavBar', 'views/footer'], function (m, _ , util, resultParser, topNavBar, footer) {
|
||||
|
||||
var rulesPageBody = {};
|
||||
|
||||
rulesPageBody.logo = function(){
|
||||
var style = 'height: 250px; width: 250px; background-size: 250px; background-image: url(images/logosansfond.JPG);';
|
||||
return m('div.uk-cover-background.uk-container-center', {style: style});
|
||||
};
|
||||
|
||||
rulesPageBody.view = function(){
|
||||
return m('div.uk-grid',
|
||||
m('div.uk-width-1-1', rulesPageBody.logo()));
|
||||
};
|
||||
|
||||
var photosPage = {};
|
||||
|
||||
photosPage.view = function(){
|
||||
return [
|
||||
m.component(topNavBar),
|
||||
m.component(rulesPageBody),
|
||||
m.component(footer)
|
||||
];
|
||||
};
|
||||
|
||||
return photosPage;
|
||||
});
|
||||
@@ -1,318 +0,0 @@
|
||||
define(['m', '_', 'spritz', 'teams'], function (m, _ , spritz, teams) {
|
||||
|
||||
var playersSelectionBar = {};
|
||||
|
||||
playersSelectionBar.toggleTeam = function(teamId, activatedTeams){
|
||||
return function(isActive){
|
||||
isActive = isActive != 'true';
|
||||
if(isActive){
|
||||
activatedTeams().push(teamId);
|
||||
return;
|
||||
}
|
||||
activatedTeams(_.difference(activatedTeams(), [teamId]));
|
||||
};
|
||||
};
|
||||
|
||||
playersSelectionBar.teamInput = function(teamName, teamId, activatedTeams){
|
||||
var isActive = _.includes(activatedTeams(), teamId);
|
||||
var class_ = isActive ? 'uk-badge-success' : '';
|
||||
var callback = playersSelectionBar.toggleTeam(teamId, activatedTeams);
|
||||
return m('div.uk-badge.uk-margin-left.uk-border-rounded',
|
||||
{class: class_, 'data-selected': isActive, onclick: m.withAttr("data-selected", callback)},
|
||||
m('span', {style: {'min-width': '40px', display: 'inline-block'}}, teamName)
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
playersSelectionBar.scoreInput = function(score, activatedScores){
|
||||
var isActive = _.includes(activatedScores(), score);
|
||||
var class_ = isActive ? 'uk-badge-success' : '';
|
||||
var callback = playersSelectionBar.toggleTeam(score, activatedScores);
|
||||
return m('div.uk-badge.uk-margin-left.uk-border-rounded',
|
||||
{class: class_, 'data-selected': isActive, onclick: m.withAttr("data-selected", callback)},
|
||||
m('span', {style: {'min-width': '30px', display: 'inline-block'}}, score)
|
||||
);
|
||||
};
|
||||
|
||||
playersSelectionBar.getTeamInput = function(model, team){
|
||||
var label = team.name;
|
||||
return playersSelectionBar.teamInput(label, team.name, model.activatedTeams);
|
||||
};
|
||||
|
||||
playersSelectionBar.chooseTeams = function(model){
|
||||
return m('form.uk-grid', {style: {'margin-top': '1em'}},
|
||||
m('div.uk-width-1-6', m('label', m('b', 'Équipes'))),
|
||||
m('div.uk-width-5-6',
|
||||
m('div.uk-grid',
|
||||
_.map(teams.teams(), _.partial(playersSelectionBar.getTeamInput, model))
|
||||
))
|
||||
);
|
||||
};
|
||||
|
||||
playersSelectionBar.chooseScore = function(model){
|
||||
return m('form.uk-grid', {style: {'margin-top': '1em'}},
|
||||
m('div.uk-width-1-6', m('label', m('b', 'Cote'))),
|
||||
m('div.uk-width-5-6',
|
||||
m('div.uk-grid', [
|
||||
playersSelectionBar.scoreInput(1, model.activatedScores),
|
||||
playersSelectionBar.scoreInput(2, model.activatedScores),
|
||||
playersSelectionBar.scoreInput(3, model.activatedScores),
|
||||
playersSelectionBar.scoreInput(4, model.activatedScores),
|
||||
playersSelectionBar.scoreInput(5, model.activatedScores)
|
||||
])));
|
||||
};
|
||||
|
||||
playersSelectionBar.searchFactory = function(model){
|
||||
return function(){
|
||||
model.searchTerm(this.value);
|
||||
};
|
||||
};
|
||||
|
||||
playersSelectionBar.searchBar = function(model){
|
||||
var icon = m('i.fa.fa-search', {'aria-hidden': true}, '');
|
||||
return m('form.uk-grid', {style: {'margin-top': '1em'}},
|
||||
m('div.uk-width-1-1.', {style: 'text-align: right;'},
|
||||
m('label', m('b', icon, " Rechercher ")),
|
||||
m('input', {type: 'text', onkeypress: playersSelectionBar.searchFactory(model)})));
|
||||
};
|
||||
|
||||
playersSelectionBar.controller = function(model){
|
||||
return model;
|
||||
};
|
||||
|
||||
playersSelectionBar.view = function(model){
|
||||
return m('div.uk-grid', [
|
||||
m('div.uk-width-1-2',
|
||||
playersSelectionBar.chooseTeams(model),
|
||||
playersSelectionBar.chooseScore(model)),
|
||||
m('div.uk-width-1-2',
|
||||
playersSelectionBar.searchBar(model))
|
||||
]);
|
||||
};
|
||||
|
||||
|
||||
var playersTable = {};
|
||||
|
||||
playersTable._sortPlayers = function(sorting, playerList){
|
||||
var sortingKeys = _.map(sorting(), 'key');
|
||||
var sortingDirections = _.map(sorting(), function(o){
|
||||
return o.direction == 1 ? 'desc' : 'asc';
|
||||
});
|
||||
return _.orderBy(playerList, sortingKeys, sortingDirections);
|
||||
};
|
||||
|
||||
playersTable.decryptPlayerList = function(encryptedPlayerList){
|
||||
var keyLengthInBytes = 128;
|
||||
var key = spritz.hash(localStorage.getItem('secret') || '', keyLengthInBytes);
|
||||
var decryptedMessage = spritz.decrypt(key, encryptedPlayerList);
|
||||
try{
|
||||
return JSON.parse(spritz.utf8ByteArrayToString(decryptedMessage));
|
||||
}catch(e){
|
||||
localStorage.removeItem('secret');
|
||||
m.route('/membre');
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
playersTable.getEncryptedPlayerList = function(){
|
||||
var deferred = m.deferred();
|
||||
var interval = setInterval(function() {
|
||||
if(!_.isEmpty(window.encryptedPlayerList)){
|
||||
clearInterval(interval);
|
||||
deferred.resolve(window.encryptedPlayerList);
|
||||
m.redraw();
|
||||
}
|
||||
}, 333);
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
playersTable.controller = function(model){
|
||||
var ctrl = {};
|
||||
ctrl.model = model;
|
||||
|
||||
ctrl.players = playersTable.getEncryptedPlayerList()
|
||||
.then(playersTable.decryptPlayerList);
|
||||
|
||||
ctrl.sortPlayers = function(){
|
||||
ctrl.players(playersTable._sortPlayers(ctrl.model.sorting, ctrl.players()));
|
||||
};
|
||||
return ctrl;
|
||||
};
|
||||
|
||||
playersTable._getSortDict = function(sorting){
|
||||
var ret = {};
|
||||
_.each(sorting(), function(elm){
|
||||
ret[elm.key] = elm.direction;
|
||||
});
|
||||
return ret;
|
||||
|
||||
};
|
||||
|
||||
playersTable._isSortingUp = function(sorting, key){
|
||||
var dict = playersTable._getSortDict(sorting);
|
||||
return dict[key] === 1;
|
||||
};
|
||||
|
||||
playersTable._isSortingDown = function(sorting, key){
|
||||
var dict = playersTable._getSortDict(sorting);
|
||||
return dict[key] === -1;
|
||||
};
|
||||
|
||||
playersTable.arrows = function(sorting, key){
|
||||
var sortUp = playersTable._isSortingUp(sorting, key);
|
||||
var sortDown = playersTable._isSortingDown(sorting, key);
|
||||
var style = {
|
||||
display: 'inline-block',
|
||||
'line-height': '0.5em',
|
||||
'margin-right': '1em',
|
||||
'font-size': '0.7em'
|
||||
};
|
||||
var sortedStyle = {color: '#8cc14c', 'font-weight': 'bold'};
|
||||
return m('span', {style: style},
|
||||
m('i.fa.fa-chevron-up', {style: sortUp ? sortedStyle: {}}),
|
||||
m('br'),
|
||||
m('i.fa.fa-chevron-down', {style: sortDown ? sortedStyle: {}})
|
||||
);
|
||||
};
|
||||
|
||||
playersTable._setSorting = function(sorting, key){
|
||||
var newDirection = {key: key, direction: -1 * playersTable._getSortDict(sorting)[key]};
|
||||
var directions = _.filter(sorting(), function(o){
|
||||
return o.key != key;
|
||||
});
|
||||
sorting([newDirection].concat(directions));
|
||||
};
|
||||
|
||||
playersTable.tableHeader = function(sorting){
|
||||
var setSorting = function(key){
|
||||
return _.partial(playersTable._setSorting, sorting, key);
|
||||
};
|
||||
return m('thead',
|
||||
m('tr', [
|
||||
m('th', {onclick: setSorting('team')}, playersTable.arrows(sorting, 'team'), 'Équipe'),
|
||||
m('th', {onclick: setSorting('name')}, playersTable.arrows(sorting, 'name'), 'Nom'),
|
||||
m('th.uk-hidden-small', 'Courriel'),
|
||||
m('th.uk-hidden-small', 'Téléphone'),
|
||||
m('th', {onclick: setSorting('score')}, playersTable.arrows(sorting, 'score'), 'Cote')
|
||||
]));
|
||||
};
|
||||
|
||||
playersTable.getPlayerTeamIcon = function(player){
|
||||
var background = teams.getTeamColor(player.team);
|
||||
var style = {width: '20px', height: '20px', 'background-color': background};
|
||||
return m('div', {style: style}, m.trust(' '));
|
||||
};
|
||||
|
||||
playersTable.showOrHidePlayerDetail = function(player){
|
||||
return function(){
|
||||
player.showDetails = !player.showDetails;
|
||||
};
|
||||
};
|
||||
|
||||
playersTable.playerTelLink = function(player){
|
||||
return m('a[href=tel:' + player.tel + ']', player.tel);
|
||||
};
|
||||
|
||||
playersTable.playerRow = function(player){
|
||||
return m('tr', {onclick: playersTable.showOrHidePlayerDetail(player)}, [
|
||||
m('td', playersTable.getPlayerTeamIcon(player)),
|
||||
m('td', player.name),
|
||||
m('td.uk-hidden-small', player.email),
|
||||
m('td.uk-hidden-small', player.tel),
|
||||
m('td', player.score)
|
||||
]);
|
||||
};
|
||||
|
||||
playersTable.playerInformation = function(player){
|
||||
return m('tr.uk-visible-small', [
|
||||
m('td', ''),
|
||||
m('td[colspan=3]',
|
||||
m('ul', [
|
||||
m('li', [m('b', 'tel: '), playersTable.playerTelLink(player)]),
|
||||
m('li', [m('b', 'email: '), player.email])
|
||||
]))
|
||||
]);
|
||||
};
|
||||
|
||||
playersTable.playerRowAndInformation = function(player){
|
||||
if(player.showDetails){
|
||||
return [playersTable.playerRow(player),
|
||||
m('tr', {style: {height: '0px'}}),
|
||||
playersTable.playerInformation(player)];
|
||||
}
|
||||
return playersTable.playerRow(player);
|
||||
};
|
||||
|
||||
playersTable.onlyPlayerOfTeams = function(visibleTeams){
|
||||
return function(player){
|
||||
return _.includes(visibleTeams, player.team);
|
||||
};
|
||||
};
|
||||
|
||||
playersTable.onlyPlayerOfScore = function(visibleScores){
|
||||
return function(player){
|
||||
return _.includes(visibleScores, player.score);
|
||||
};
|
||||
};
|
||||
|
||||
playersTable.playerHasBeenSearchedFor = function(searchTerm){
|
||||
return function(player){
|
||||
if(_.isEmpty(searchTerm)){
|
||||
return true;
|
||||
}
|
||||
return new RegExp(searchTerm, 'i').test(player.name);
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
playersTable.tableBody = function(players, visibleTeams, activatedScores, searchTerm){
|
||||
return m('tbody',
|
||||
_(players)
|
||||
.filter(_.isObject)
|
||||
.filter(playersTable.onlyPlayerOfTeams(visibleTeams))
|
||||
.filter(playersTable.onlyPlayerOfScore(activatedScores))
|
||||
.filter(playersTable.playerHasBeenSearchedFor(searchTerm))
|
||||
.map(playersTable.playerRowAndInformation).flatten().value()
|
||||
);
|
||||
};
|
||||
|
||||
playersTable.view = function(ctrl){
|
||||
ctrl.sortPlayers();
|
||||
return m('table.uk-table.uk-table-hover.uk-table-striped',
|
||||
playersTable.tableHeader(ctrl.model.sorting),
|
||||
playersTable.tableBody(ctrl.players(),
|
||||
ctrl.model.activatedTeams(),
|
||||
ctrl.model.activatedScores(),
|
||||
ctrl.model.searchTerm()
|
||||
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
var playersPage = {};
|
||||
|
||||
playersPage.controller = function(){
|
||||
var model = {};
|
||||
model.activatedTeams = m.prop(_.map(teams.teams(), 'name'));
|
||||
model.activatedScores = m.prop([1, 2, 3, 4, 5]);
|
||||
model.sorting = m.prop([{key: 'team', direction: 1}, {key: 'score', direction: -1}, {key: 'name', direction: 1}]);
|
||||
model.searchTerm = m.prop('');
|
||||
return model;
|
||||
};
|
||||
|
||||
playersPage.downloadButton = function(){
|
||||
return m('button.uk-button.uk-button-success.uk-border-rounded',
|
||||
m('i.fa.fa-download', {'aria-hidden': true}),
|
||||
" Télécharger");
|
||||
};
|
||||
|
||||
playersPage.view = function(model){
|
||||
return m('div.uk-grid.uk-margin-top.uk-margin-bottom',
|
||||
m('div.uk-width-large-3-5.uk-width-small-1-1.uk-container-center', [
|
||||
m.component(playersSelectionBar, model),
|
||||
m.component(playersTable, model)
|
||||
]));
|
||||
};
|
||||
|
||||
return playersPage;
|
||||
});
|
||||
@@ -1,72 +0,0 @@
|
||||
define(['m', '_', 'util', 'resultParser', 'views/topNavBar', 'views/footer'], function (m, _ , util, resultParser, topNavBar, footer) {
|
||||
|
||||
var rulesPage = {};
|
||||
|
||||
rulesPage.missionText = function(){
|
||||
return "La ligue de balle Les Phénix a été fondée en 2004 afin "+
|
||||
"d'offrir aux membres de la communauté gaie et lesbienne et à "+
|
||||
"leurs amis hétéros l'opportunité de s'amuser et de pratiquer "+
|
||||
"un sport dans une ambiance amicale et décontractée. "+
|
||||
"L'ouverture d'esprit, la camaraderie et le plaisir de "+
|
||||
"pratiquer un sport à l'extérieur caractérisent cette ligue.";
|
||||
};
|
||||
|
||||
rulesPage.logo = function(){
|
||||
var style = 'height: 250px; width: 250px; background-size: 250px; background-image: url(images/logosansfond.JPG);';
|
||||
return m('div.uk-cover-background.uk-container-center', {style: style});
|
||||
};
|
||||
|
||||
rulesPage.ruleSection = function(){
|
||||
var urlASBM = 'http://www.asbm.ca/';
|
||||
return [
|
||||
m('h2', 'Règlements 2021'),
|
||||
m('ul',[
|
||||
m('li', m('h3', m('a', {href: 'files/regle_de_jeux_2021.pdf'},'Règles de jeu'))),
|
||||
m('li', m('h3', m('a', {href: 'files/regles_et_procedures_2021.pdf'},'Règles et procédures'))),
|
||||
m('li', m('h3', m('a', {href: 'files/charte_organisationnelle_2021.pdf'}, 'Charte Organisationnelle'))),
|
||||
m('li', m('h3', m('a', {href: 'files/formulaire_inscription_2021.pdf'}, 'Formulaire d\'inscription'))),
|
||||
m('li', m('h3', m('a', {href: 'files/code_ethique_2021.pdf'}, 'Code d\'éthique'))),
|
||||
m('li', m('h3', m('a', {href: urlASBM}, 'Association des Sports de Balle à Montréal (ASBN)'))),
|
||||
])
|
||||
];
|
||||
};
|
||||
|
||||
rulesPage.rules = function(){
|
||||
return m('div.uk-width-large-2-3.uk-width-small-1-1',
|
||||
m('div.uk-panel.uk-panel-box.uk-panel-box-secondary',
|
||||
rulesPage.ruleSection()
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
rulesPage.logoAndRules = function(){
|
||||
return m('div.uk-grid',[
|
||||
m('div.uk-width-large-1-3.uk-width-small-1-1', rulesPage.logo()),
|
||||
rulesPage.rules()
|
||||
]
|
||||
);
|
||||
};
|
||||
|
||||
rulesPage.mission = function(){
|
||||
return m('div.uk-panel.uk-panel-box.uk-panel-box-secondary', [
|
||||
m('h2', 'Mission'),
|
||||
m('p', rulesPage.missionText())
|
||||
]);
|
||||
};
|
||||
|
||||
rulesPage.view = function(){
|
||||
return [
|
||||
m.component(topNavBar),
|
||||
|
||||
m('div.uk-margin-top.uk-margin-bottom.uk-grid',
|
||||
m('div.uk-width-large-3-5.uk-width-medium-4-5.uk-width-large-1-1.uk-container-center', [
|
||||
rulesPage.logoAndRules(),
|
||||
rulesPage.mission()
|
||||
])),
|
||||
m.component(footer)
|
||||
];
|
||||
};
|
||||
|
||||
return rulesPage;
|
||||
});
|
||||
@@ -1,60 +0,0 @@
|
||||
define(['m', '_', 'util', 'resultParser', 'teams', 'views/scheduleTeamTags', 'images/rain.svg'], function(m, _, util, resultParser, teams, scheduleTeamTags, rainSvg) {
|
||||
|
||||
|
||||
var schedulView = {};
|
||||
|
||||
schedulView.controller = function(year){
|
||||
var games = m.prop([]);
|
||||
return util.getResults(year)
|
||||
.then(games)
|
||||
.then(resultParser.getNightGames);
|
||||
};
|
||||
|
||||
|
||||
schedulView._asGamePoints = function(points){
|
||||
return !_.isNumber(points) ? '-' : points + '';
|
||||
};
|
||||
|
||||
schedulView._rainIcon = function(game){
|
||||
if(game.rain){
|
||||
return m('span', {title: 'pluie, partie annulée.'}, rainSvg('1.5em'));
|
||||
}
|
||||
return m('span', {style: {visibility: 'hidden'}}, rainSvg('1.5em'));
|
||||
};
|
||||
|
||||
schedulView._gameName = function(game){
|
||||
return [schedulView._rainIcon(game),
|
||||
" ",
|
||||
game.time];
|
||||
};
|
||||
|
||||
schedulView._gameRow = function(game){
|
||||
|
||||
return m('tr',[
|
||||
m('td', schedulView._gameName(game)),
|
||||
m('td', scheduleTeamTags.getAwayTeamTag(game)),
|
||||
m('td', schedulView._asGamePoints(game.away_points)),
|
||||
m('td', 'vs'),
|
||||
m('td', scheduleTeamTags.getHomeTeamTag(game)),
|
||||
m('td', schedulView._asGamePoints(game.home_points))
|
||||
]);
|
||||
};
|
||||
|
||||
schedulView._gameView = function(gameNight){
|
||||
return m('div', [m('h3', util.formatDate(gameNight.jsDate)),
|
||||
m('table.uk-table.uk-table-hover.uk-table-condensed.uk-table-striped',
|
||||
m('tbody',[
|
||||
_.map(gameNight.games, schedulView._gameRow),
|
||||
])
|
||||
)
|
||||
]);
|
||||
|
||||
};
|
||||
|
||||
schedulView.view = function(games){
|
||||
return m('div.uk-grid',
|
||||
m('div.uk-width-large-3-5.uk-width-medium-1-1',
|
||||
_.map(games(), schedulView._gameView)));
|
||||
};
|
||||
return schedulView;
|
||||
})
|
||||
@@ -1,45 +0,0 @@
|
||||
define(['m', '_', 'teams'], function(m, _, teams) {
|
||||
|
||||
|
||||
var scheduleTeamTags = {};
|
||||
|
||||
scheduleTeamTags._getTeamTag = function(teamName){
|
||||
var teamColor = teams.getTeamColor(teamName);
|
||||
return [
|
||||
m('i.fa.fa-flag', {style: {color: teamColor}}),
|
||||
m('span', ' ' + teamName)
|
||||
];
|
||||
};
|
||||
|
||||
scheduleTeamTags._getAwayPracticeTeamTag = function(){
|
||||
return [
|
||||
m('i.fa.fa-hand-spock-o', {style: {color: ' #ff1493'}, title: 'pratique'}),
|
||||
m('span', ' Amis #1')
|
||||
];
|
||||
};
|
||||
|
||||
scheduleTeamTags._getHomePracticeTeamTag = function(){
|
||||
return [
|
||||
m('i.fa.fa-hand-spock-o', {style: {color: '#acbf60'}, title: 'pratique'}),
|
||||
m('span', ' Amis #2')
|
||||
];
|
||||
};
|
||||
|
||||
scheduleTeamTags.getAwayTeamTag = function(game){
|
||||
if(game.practice){
|
||||
return scheduleTeamTags._getAwayPracticeTeamTag();
|
||||
}
|
||||
return scheduleTeamTags._getTeamTag(game.away);
|
||||
};
|
||||
|
||||
scheduleTeamTags.getHomeTeamTag = function(game){
|
||||
if(game.practice){
|
||||
return scheduleTeamTags._getHomePracticeTeamTag();
|
||||
}
|
||||
return scheduleTeamTags._getTeamTag(game.home);
|
||||
};
|
||||
|
||||
|
||||
|
||||
return scheduleTeamTags;
|
||||
})
|
||||
@@ -1,131 +0,0 @@
|
||||
define(['m', '_', 'util'], function (m, _, util) {
|
||||
|
||||
var topNavBar = {};
|
||||
|
||||
topNavBar._urlMapping = [
|
||||
{name: 'Accueil', path: '', fa: 'fa-home'},
|
||||
{name: 'Nouvelles', path: 'nouvelles', fa: 'fa-newspaper-o'},
|
||||
{name: 'Calendrier', path: 'calendrier', fa: 'fa-calendar', includeSubPath: true},
|
||||
{name: 'Règlement', path: 'reglement', fa: 'fa-legal'},
|
||||
{name: 'Membre', path: 'membre', fa: 'fa-lock'},
|
||||
// {name: 'Historique', path: 'historique', fa: 'fa-history'},
|
||||
{name: 'Nous Joindre', path: 'contact', fa: 'fa-phone'}
|
||||
];
|
||||
|
||||
topNavBar.controller = function(){
|
||||
var model = {};
|
||||
model.openDropdown = false;
|
||||
return model;
|
||||
};
|
||||
|
||||
topNavBar._getUrlForId = function(id_){
|
||||
return '#/' + id_;
|
||||
};
|
||||
|
||||
topNavBar._isActive = function(id_, includeSubPath){
|
||||
if(includeSubPath){
|
||||
return window.location.hash.startsWith(topNavBar._getUrlForId(id_));
|
||||
}
|
||||
return topNavBar._getUrlForId(id_) == window.location.hash;
|
||||
};
|
||||
topNavBar._getItemIcon = function(item){
|
||||
return m('i.fa.' + item.fa);
|
||||
};
|
||||
|
||||
topNavBar._getLargeItem = function(item){
|
||||
var class_ = topNavBar._isActive(item.path, item.includeSubPath) ? 'uk-active' : '';
|
||||
var url = topNavBar._getUrlForId(item.path);
|
||||
return m("li", {class: class_},
|
||||
m("a", {href: url},
|
||||
m('div', topNavBar._getItemIcon(item), ' ', item.name)
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
topNavBar._getMediumItem = function(item){
|
||||
var class_ = topNavBar._isActive(item.path) ? 'uk-active' : '';
|
||||
var url = topNavBar._getUrlForId(item.path);
|
||||
return m("li", {class: class_},
|
||||
m("a", {href: url},
|
||||
topNavBar._getItemIcon(item), ' ', item.name
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
topNavBar._getSmallItem = function(item){
|
||||
var class_ = topNavBar._isActive(item.path) ? 'uk-active' : '';
|
||||
var url = topNavBar._getUrlForId(item.path);
|
||||
return m("li", {class: class_},
|
||||
m("a", {href: url},
|
||||
topNavBar._getItemIcon(item),
|
||||
' ',
|
||||
item.name
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
topNavBar.largeTopNav = function(){
|
||||
return [
|
||||
m('li.uk-parent', m('div.uk-navbar-brand', util.facebookLink())),
|
||||
_.map(topNavBar._urlMapping, topNavBar._getLargeItem)
|
||||
];
|
||||
};
|
||||
|
||||
topNavBar.mediumTopNav = function(){
|
||||
return [
|
||||
m('li.uk-parent', m('div.uk-navbar-brand', util.facebookLink())),
|
||||
_.map(topNavBar._urlMapping, topNavBar._getMediumItem)
|
||||
];
|
||||
};
|
||||
|
||||
topNavBar.dropdown = function(){
|
||||
return m('div.uk-dropdown',
|
||||
m('ul.uk-nav.uk-nav-navbar.uk-dropdown-navbar',
|
||||
_.map(topNavBar._urlMapping, topNavBar._getSmallItem)
|
||||
));
|
||||
};
|
||||
|
||||
topNavBar.toggleDropdown = function(model){
|
||||
return function(){
|
||||
model.openDropdown = !model.openDropdown;
|
||||
};
|
||||
};
|
||||
|
||||
topNavBar.clickElsewhere = function(model){
|
||||
var style = {
|
||||
position: 'fixed',
|
||||
top: '0px',
|
||||
bottom: '0px',
|
||||
left: '0px',
|
||||
right: '0px',
|
||||
background: 'black',
|
||||
opacity: 0.5,
|
||||
'z-index': 2
|
||||
};
|
||||
var attrs = {style: style, onclick: topNavBar.toggleDropdown(model)};
|
||||
return m('div', attrs);
|
||||
};
|
||||
|
||||
topNavBar.smallTopNav = function(model){
|
||||
var class_ = model.openDropdown ? 'uk-open' : '';
|
||||
var attrs = {class: class_, onclick: topNavBar.toggleDropdown(model)};
|
||||
var ret = [
|
||||
m('li.uk-parent', m('div.uk-navbar-brand', util.facebookLink())),
|
||||
m('li.uk-parent[data-uk-dropdown][aria-expanded]', attrs, m('a', m('i.fa.fa-bars'), ' Menu'), topNavBar.dropdown()),
|
||||
];
|
||||
if(model.openDropdown){
|
||||
ret.push(topNavBar.clickElsewhere(model));
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
|
||||
topNavBar.view = function(model){
|
||||
return m("nav.uk-navbar.uk-navbar-attached", [
|
||||
m("ul.uk-navbar-nav.uk-visible-large.uk-navbar-content.uk-navbar-center", topNavBar.largeTopNav()),
|
||||
m("ul.uk-navbar-nav.uk-visible-medium", topNavBar.mediumTopNav()),
|
||||
m("ul.uk-navbar-nav.uk-visible-small", topNavBar.smallTopNav(model)),
|
||||
]);
|
||||
};
|
||||
|
||||
return topNavBar;
|
||||
});
|
||||
@@ -1,65 +0,0 @@
|
||||
// LESS related
|
||||
@import "uikit/dist/scss/uikit-mixins.scss";
|
||||
@import "uikit/dist/scss/core/variables.scss";
|
||||
|
||||
// Phenix colors
|
||||
|
||||
$navbar-background: #f08d28; //#dabd5e;
|
||||
|
||||
$panel-box-background: #fce3ca;
|
||||
$table-striped-background: #fce3ca;
|
||||
$navbar-nav-active-background: #fce3ca;
|
||||
$navbar-nav-hover-background: #fce3ca;
|
||||
$panel-box-secondary-background: #fce3ca;
|
||||
$badge-background: #fce3ca;
|
||||
$badge-color: black;
|
||||
|
||||
// Defaults
|
||||
@import "uikit/dist/scss/core/base.scss";
|
||||
|
||||
// Layout
|
||||
@import "uikit/dist/scss/core/grid.scss";
|
||||
@import "uikit/dist/scss/core/panel.scss";
|
||||
@import "uikit/dist/scss/core/block.scss";
|
||||
@import "uikit/dist/scss/core/article.scss";
|
||||
@import "uikit/dist/scss/core/comment.scss";
|
||||
@import "uikit/dist/scss/core/cover.scss";
|
||||
|
||||
// Navs
|
||||
@import "uikit/dist/scss/core/nav.scss";
|
||||
@import "uikit/dist/scss/core/navbar.scss";
|
||||
@import "uikit/dist/scss/core/subnav.scss";
|
||||
@import "uikit/dist/scss/core/breadcrumb.scss";
|
||||
@import "uikit/dist/scss/core/pagination.scss";
|
||||
@import "uikit/dist/scss/core/tab.scss";
|
||||
@import "uikit/dist/scss/core/thumbnav.scss";
|
||||
|
||||
// Elements
|
||||
@import "uikit/dist/scss/core/list.scss";
|
||||
@import "uikit/dist/scss/core/description-list.scss";
|
||||
@import "uikit/dist/scss/core/table.scss";
|
||||
@import "uikit/dist/scss/core/form.scss";
|
||||
|
||||
// Common
|
||||
@import "uikit/dist/scss/core/button.scss";
|
||||
@import "uikit/dist/scss/core/icon.scss";
|
||||
@import "uikit/dist/scss/core/close.scss";
|
||||
@import "uikit/dist/scss/core/badge.scss";
|
||||
@import "uikit/dist/scss/core/alert.scss";
|
||||
@import "uikit/dist/scss/core/thumbnail.scss";
|
||||
@import "uikit/dist/scss/core/overlay.scss";
|
||||
@import "uikit/dist/scss/core/column.scss";
|
||||
@import "uikit/dist/scss/core/animation.scss";
|
||||
|
||||
// JavaScript
|
||||
@import "uikit/dist/scss/core/dropdown.scss";
|
||||
@import "uikit/dist/scss/core/modal.scss";
|
||||
@import "uikit/dist/scss/core/offcanvas.scss";
|
||||
@import "uikit/dist/scss/core/switcher.scss";
|
||||
|
||||
// Need to be loaded last
|
||||
@import "uikit/dist/scss/core/text.scss";
|
||||
@import "uikit/dist/scss/core/utility.scss";
|
||||
@import "uikit/dist/scss/core/flex.scss";
|
||||
@import "uikit/dist/scss/core/contrast.scss";
|
||||
@import "uikit/dist/scss/core/print.scss";
|
||||
@@ -1,9 +0,0 @@
|
||||
@import "custom_uikit";
|
||||
.foo{
|
||||
border: solid;
|
||||
}
|
||||
|
||||
.ph-footer{
|
||||
background-color: $navbar-background;
|
||||
// height: 200px;
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
import { Application } from "jsr:@oak/oak/application";
|
||||
import { Router } from "jsr:@oak/oak/router";
|
||||
import { GameService } from "./server/game-service.ts";
|
||||
import { Game } from "./server/types.ts";
|
||||
import staticFiles from "https://deno.land/x/static_files@1.1.6/mod.ts";
|
||||
import vento from "https://deno.land/x/vento@v0.9.1/mod.ts";
|
||||
import { LoginService } from "./server/login-service.ts";
|
||||
|
||||
const env = vento();
|
||||
setInterval(() => env.cache.clear(), 1000);
|
||||
const gameService = new GameService(await Deno.openKv());
|
||||
const loginService = LoginService.officialLoginService();
|
||||
|
||||
const router = new Router();
|
||||
|
||||
router.get("/", async (ctx) => {
|
||||
const template = await env.load("templates/home.vto");
|
||||
const result = await template({ tab: "home" });
|
||||
ctx.response.body = result.content;
|
||||
});
|
||||
|
||||
router.get("/calendrier", async (ctx) => {
|
||||
const template = await env.load("templates/calendrier.vto");
|
||||
const result = await template({
|
||||
tab: "calendrier",
|
||||
});
|
||||
ctx.response.body = result.content;
|
||||
});
|
||||
|
||||
router.get("/nouvelles", async (ctx) => {
|
||||
const template = await env.load("templates/nouvelles.vto");
|
||||
const result = await template({ tab: "nouvelles" });
|
||||
ctx.response.body = result.content;
|
||||
});
|
||||
|
||||
router.get("/contact", async (ctx) => {
|
||||
const template = await env.load("templates/contact.vto");
|
||||
const result = await template({ tab: "contact" });
|
||||
ctx.response.body = result.content;
|
||||
});
|
||||
|
||||
router.get("/reglement", async (ctx) => {
|
||||
const template = await env.load("templates/reglement.vto");
|
||||
const result = await template({ tab: "reglement" });
|
||||
ctx.response.body = result.content;
|
||||
});
|
||||
|
||||
router.get("/login", async (ctx) => {
|
||||
const username = ctx.request.url.searchParams.get("username") || "";
|
||||
const password = ctx.request.url.searchParams.get("password") || "";
|
||||
|
||||
if (!(await loginService.validateCredentials(username, password))) {
|
||||
ctx.response.status = 403;
|
||||
return;
|
||||
}
|
||||
await loginService.login(ctx);
|
||||
ctx.response.redirect("/membre/games-editor/today");
|
||||
});
|
||||
|
||||
const memberRouter = new Router();
|
||||
|
||||
memberRouter.use(async (ctx, next) => {
|
||||
const isLoggedIn = await loginService.isLoggedIn(ctx);
|
||||
if (ctx.request.url.pathname !== "/membre" && !isLoggedIn) {
|
||||
ctx.response.redirect("/membre");
|
||||
return;
|
||||
}
|
||||
ctx.params.isLoggedIn = isLoggedIn;
|
||||
await next();
|
||||
});
|
||||
|
||||
memberRouter.get("/", async (ctx) => {
|
||||
const template = await env.load("templates/membre.vto");
|
||||
const result = await template({
|
||||
tab: "membre",
|
||||
isLoggedIn: ctx.params.isLoggedIn,
|
||||
});
|
||||
ctx.response.body = result.content;
|
||||
});
|
||||
|
||||
function today(): Date {
|
||||
const date = new Date().toLocaleDateString("fr-CA", {
|
||||
timeZone: "America/New_York",
|
||||
});
|
||||
return new Date(date);
|
||||
}
|
||||
|
||||
memberRouter.get("/games-editor/today", async (ctx) => {
|
||||
const template = await env.load("templates/partials/games-editor.vto");
|
||||
const games = await gameService.getAllGames();
|
||||
const lastGameDay = games
|
||||
.map((g) => g.date)
|
||||
.filter((d) => new Date(d) <= today())
|
||||
.sort()
|
||||
.reverse()[0];
|
||||
|
||||
const result = await template({
|
||||
tab: "membre",
|
||||
selectedYear: null,
|
||||
isToday: true,
|
||||
games: games.filter((g) => g.date === lastGameDay),
|
||||
years: [...new Set(games.map((x) => x.year))].sort().reverse(),
|
||||
});
|
||||
ctx.response.body = result.content;
|
||||
});
|
||||
|
||||
memberRouter.get("/games-editor/:year", async (ctx) => {
|
||||
const template = await env.load("templates/partials/games-editor.vto");
|
||||
const games = await gameService.getAllGames();
|
||||
const selectedYear = parseInt(ctx.params.year);
|
||||
const result = await template({
|
||||
tab: "membre",
|
||||
selectedYear: selectedYear,
|
||||
games: games.filter((g) => g.year === selectedYear),
|
||||
years: [...new Set(games.map((x) => x.year))].sort().reverse(),
|
||||
});
|
||||
ctx.response.body = result.content;
|
||||
});
|
||||
|
||||
memberRouter.get("/new-game-editor", async (ctx) => {
|
||||
const template = await env.load("templates/partials/new-games-editor.vto");
|
||||
const result = await template({
|
||||
tab: "membre",
|
||||
});
|
||||
ctx.response.body = result.content;
|
||||
});
|
||||
|
||||
memberRouter.post("/new-game", async (ctx) => {
|
||||
const payload = await ctx.request.body.form();
|
||||
const preGame = {
|
||||
date: payload.get("game-date"),
|
||||
time: payload.get("game-time"),
|
||||
away: payload.get("away-team"),
|
||||
home: payload.get("home-team"),
|
||||
};
|
||||
const [game, error] = await gameService.createNewGame(preGame);
|
||||
|
||||
if (error !== "") {
|
||||
const template = await env.load("templates/partials/new-game-error.vto");
|
||||
const result = await template({
|
||||
tab: "membre",
|
||||
error: error,
|
||||
});
|
||||
ctx.response.status = 500;
|
||||
ctx.response.body = result.content;
|
||||
return;
|
||||
}
|
||||
|
||||
const template = await env.load("templates/partials/single-game-editor.vto");
|
||||
const result = await template({
|
||||
tab: "membre",
|
||||
game: game,
|
||||
});
|
||||
ctx.response.headers.set("game-id", game?.id ?? "");
|
||||
ctx.response.body = result.content;
|
||||
});
|
||||
|
||||
memberRouter.delete("/games/:gameId", async (ctx) => {
|
||||
if (!(await loginService.isLoggedIn(ctx))) {
|
||||
ctx.response.redirect("/membre");
|
||||
return;
|
||||
}
|
||||
const success = await gameService.deleteGameById(ctx.params.gameId);
|
||||
ctx.response.body = `${success}`;
|
||||
});
|
||||
|
||||
memberRouter.post("/games/:gameId", async (ctx) => {
|
||||
if (!(await loginService.isLoggedIn(ctx))) {
|
||||
ctx.response.redirect("/membre");
|
||||
return;
|
||||
}
|
||||
const payload = await ctx.request.body.form();
|
||||
let preGame = {
|
||||
awayScore: payload.get("away-score") ?? null,
|
||||
homeScore: payload.get("home-score") ?? null,
|
||||
rain: payload.get("game-type") === "rain",
|
||||
practice: payload.get("game-type") === "practice",
|
||||
};
|
||||
|
||||
preGame = Object.fromEntries(
|
||||
Object.entries(preGame).filter(([_, v]) => v !== null),
|
||||
) as Partial<Game>;
|
||||
|
||||
const success = await gameService.updateGame(ctx.params.gameId, preGame);
|
||||
ctx.response.body = success
|
||||
? `<i class="fa fa-floppy-o" aria-hidden="true"></i>`
|
||||
: `<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>`;
|
||||
});
|
||||
|
||||
const apiRouter = new Router();
|
||||
|
||||
apiRouter.get("/results/:year.json", async (ctx) => {
|
||||
ctx.response.json = true;
|
||||
const games = await gameService.getAllGames();
|
||||
ctx.response.body = games
|
||||
.filter((g) => g.year == ctx.params.year)
|
||||
.map((g) => {
|
||||
g[g.home] = parseInt(g.homeScore);
|
||||
g[g.away] = parseInt(g.awayScore);
|
||||
return g;
|
||||
});
|
||||
});
|
||||
|
||||
apiRouter.get("/available-years.json", async (ctx) => {
|
||||
ctx.response.json = true;
|
||||
const games = await gameService.getAllGames();
|
||||
ctx.response.body = [...new Set(games.map((g) => g.year))];
|
||||
});
|
||||
|
||||
router.use("/membre", memberRouter.routes());
|
||||
router.use("/api", apiRouter.routes());
|
||||
|
||||
const app = new Application();
|
||||
app.use(router.routes());
|
||||
|
||||
app.use(staticFiles("static", { brotli: true, fetch: true }));
|
||||
|
||||
await app.listen({ port: 8000 });
|
||||
@@ -0,0 +1,323 @@
|
||||
import { Game, PreGame } from "./types.ts";
|
||||
import {
|
||||
assertEquals,
|
||||
assertNotEquals,
|
||||
} from "https://deno.land/std@0.224.0/assert/mod.ts";
|
||||
|
||||
type GamePrimaryKey = ["phenix", "games", string];
|
||||
|
||||
type date = [number, number, number];
|
||||
type time = [number, number];
|
||||
type DateIndex = ["phenix", "indexes", "game-date", ...date, ...time];
|
||||
|
||||
export class GameService {
|
||||
readonly kv: Deno.Kv;
|
||||
private readonly DATE_VALIDATOR =
|
||||
/^(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})$/;
|
||||
private readonly TIME_VALIDATOR = /^(?<hour>\d{1,2})(:|h)(?<minute>\d{1,2})$/;
|
||||
private readonly VALID_TEAMS: string[] = [
|
||||
"jaune",
|
||||
"rouge",
|
||||
"bleu",
|
||||
"gris",
|
||||
"vert",
|
||||
"noir",
|
||||
"orange",
|
||||
"mauve",
|
||||
];
|
||||
|
||||
constructor(kv: Deno.Kv) {
|
||||
this.kv = kv;
|
||||
}
|
||||
|
||||
private chronologicalGameOrder(game1: Game, game2: Game): number {
|
||||
if (game1.date < game2.date) {
|
||||
return 1;
|
||||
}
|
||||
if (game1.date > game2.date) {
|
||||
return -1;
|
||||
}
|
||||
if (game1.time < game2.time) {
|
||||
return 1;
|
||||
}
|
||||
if (game1.time > game2.time) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
async getAllGames(): Promise<Game[]> {
|
||||
const ite = this.kv.list<Game>({ prefix: ["phenix", "games"] });
|
||||
return (await Array.fromAsync(ite))
|
||||
.map((e) => e.value)
|
||||
.sort(this.chronologicalGameOrder);
|
||||
}
|
||||
|
||||
private gamePrimaryKey(id: string): GamePrimaryKey {
|
||||
return ["phenix", "games", id];
|
||||
}
|
||||
|
||||
private dateIndex(date: string, time: string): DateIndex | null {
|
||||
let destructedDate = this.DATE_VALIDATOR.exec(date)?.groups;
|
||||
let destructedTime = this.TIME_VALIDATOR.exec(time)?.groups;
|
||||
|
||||
if (!destructedDate || !destructedTime) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return [
|
||||
"phenix",
|
||||
"indexes",
|
||||
"game-date",
|
||||
parseInt(destructedDate.year),
|
||||
parseInt(destructedDate.month),
|
||||
parseInt(destructedDate.day),
|
||||
parseInt(destructedTime.hour),
|
||||
parseInt(destructedTime.minute),
|
||||
];
|
||||
}
|
||||
|
||||
private cleanTime(raw: string): string {
|
||||
const groups = this.TIME_VALIDATOR.exec(raw)!.groups!;
|
||||
return `${groups.hour.padStart(2, "0")}:${groups.minute.padStart(2, "0")}`;
|
||||
}
|
||||
|
||||
private cleanDate(raw: string): string {
|
||||
const groups = this.DATE_VALIDATOR.exec(raw)!.groups!;
|
||||
return `${groups.year}-${groups.month.padStart(2, "0")}-${groups.day.padStart(2, "0")}`;
|
||||
}
|
||||
|
||||
private extractYearFromDate(date: string): number {
|
||||
return parseInt(this.DATE_VALIDATOR.exec(date)!.groups!.year);
|
||||
}
|
||||
|
||||
private createGame(preGame: PreGame): Game {
|
||||
const ret = {
|
||||
...preGame,
|
||||
id: crypto.randomUUID(),
|
||||
practice: false,
|
||||
rain: false,
|
||||
year: this.extractYearFromDate(preGame.date),
|
||||
homeScore: null,
|
||||
awayScore: null,
|
||||
};
|
||||
ret.time = this.cleanTime(ret.time);
|
||||
ret.date = this.cleanDate(ret.date);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
private validatePregate(preGame: PreGame): string {
|
||||
if (!this.DATE_VALIDATOR.test(preGame.date)) {
|
||||
return `Invalide date format ${preGame.date}`;
|
||||
}
|
||||
if (!this.TIME_VALIDATOR.test(preGame.time)) {
|
||||
return `Invalide time format ${preGame.time}`;
|
||||
}
|
||||
if (!this.VALID_TEAMS.includes(preGame.away)) {
|
||||
return `Invalide away format ${preGame.away}`;
|
||||
}
|
||||
if (!this.VALID_TEAMS.includes(preGame.home)) {
|
||||
return `Invalide home format ${preGame.home}`;
|
||||
}
|
||||
if (preGame.home === preGame.away) {
|
||||
return `Home and away teams must be different (received ${preGame.home} for both)`;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
async createNewGame(preGame: PreGame): Promise<[Game | null, string]> {
|
||||
if (this.validatePregate(preGame) !== "") {
|
||||
return [null, this.validatePregate(preGame)];
|
||||
}
|
||||
const game = this.createGame(preGame);
|
||||
const dateIndex = this.dateIndex(game.date, game.time);
|
||||
if (!dateIndex) {
|
||||
return [null, "Cound not parse date or time"];
|
||||
}
|
||||
const precondition = await this.kv.get<string>(dateIndex);
|
||||
if (precondition.value !== null) {
|
||||
return [null, "game already exists " + precondition.value];
|
||||
}
|
||||
|
||||
const res = await this.kv
|
||||
.atomic()
|
||||
.check(precondition)
|
||||
.set(this.gamePrimaryKey(game.id), game)
|
||||
.set(dateIndex, game.id)
|
||||
.commit();
|
||||
if (!res.ok) {
|
||||
return [null, "Transaction failed"];
|
||||
}
|
||||
|
||||
return [game, ""];
|
||||
}
|
||||
|
||||
async getGameById(id: string): Promise<Game | null> {
|
||||
const res = await this.kv.get<Game>(this.gamePrimaryKey(id));
|
||||
return res.value;
|
||||
}
|
||||
|
||||
async deleteGameById(id: string): Promise<boolean> {
|
||||
const precond = await this.kv.get<Game>(this.gamePrimaryKey(id));
|
||||
if (precond.value === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const res = await this.kv
|
||||
.atomic()
|
||||
.check(precond)
|
||||
.delete(this.gamePrimaryKey(precond.value.id))
|
||||
.delete(this.dateIndex(precond.value.date, precond.value.time)!)
|
||||
.commit();
|
||||
return res.ok;
|
||||
}
|
||||
|
||||
async updateGame(id: string, partial: Partial<Game>): Promise<boolean> {
|
||||
delete partial.id;
|
||||
const precond = await this.kv.get<Game>(this.gamePrimaryKey(id));
|
||||
if (precond.value === null) {
|
||||
return false;
|
||||
}
|
||||
const res = await this.kv
|
||||
.atomic()
|
||||
.check(precond)
|
||||
.delete(this.gamePrimaryKey(precond.value.id))
|
||||
.delete(this.dateIndex(precond.value.date, precond.value.time)!)
|
||||
.set(
|
||||
this.dateIndex(precond.value.date, precond.value.time)!,
|
||||
precond.value.id,
|
||||
)
|
||||
.set(this.gamePrimaryKey(precond.value.id), {
|
||||
...precond.value,
|
||||
...partial,
|
||||
})
|
||||
.commit();
|
||||
return res.ok;
|
||||
}
|
||||
}
|
||||
|
||||
Deno.test("saving simple games", async (t) => {
|
||||
const kv = await Deno.openKv();
|
||||
const service = new GameService(kv);
|
||||
|
||||
async function deleteAllKeys() {
|
||||
const keys = kv.list({ prefix: [] });
|
||||
for await (const entry of keys) {
|
||||
await kv.delete(entry.key);
|
||||
}
|
||||
}
|
||||
|
||||
function validePreGame(seed: number): PreGame {
|
||||
let year = ((645 * seed + 162) % 10000) + 1;
|
||||
let month = ((335 * seed + 71) % 12) + 1;
|
||||
let day = ((72625 * seed + 176) % 28) + 1;
|
||||
return {
|
||||
date: `${(year + "").padStart(4, "0")}-${(month + "").padStart(2, "0")}-${(day + "").padStart(2, "0")}`,
|
||||
time: "18:45",
|
||||
away: "jaune",
|
||||
home: "rouge",
|
||||
};
|
||||
}
|
||||
|
||||
await deleteAllKeys();
|
||||
|
||||
await t.step("creating games", async () => {
|
||||
const preGame = validePreGame(7276);
|
||||
const [game, error] = await service.createNewGame(preGame);
|
||||
assertEquals(error, "");
|
||||
const ret = await service.getGameById(game!.id);
|
||||
assertEquals(game, ret);
|
||||
});
|
||||
|
||||
await deleteAllKeys();
|
||||
|
||||
await t.step("creating games with old date format", async () => {
|
||||
const preGame = validePreGame(7276);
|
||||
preGame.date = "2017-8-5";
|
||||
const [game, error] = await service.createNewGame(preGame);
|
||||
assertEquals(error, "");
|
||||
assertEquals(game?.date, "2017-08-05");
|
||||
});
|
||||
|
||||
await deleteAllKeys();
|
||||
|
||||
await t.step("creating games with old time format", async () => {
|
||||
const preGame = validePreGame(7276);
|
||||
preGame.time = "9:00";
|
||||
const [game, error] = await service.createNewGame(preGame);
|
||||
assertEquals(error, "");
|
||||
assertEquals(game?.time, "09:00");
|
||||
});
|
||||
|
||||
await deleteAllKeys();
|
||||
|
||||
await t.step(
|
||||
"saving two games in the same timeslot should fail",
|
||||
async () => {
|
||||
const preGame = validePreGame(7276);
|
||||
let [_, error] = await service.createNewGame(preGame);
|
||||
assertEquals(error, "");
|
||||
[_, error] = await service.createNewGame(preGame);
|
||||
assertNotEquals(error, "");
|
||||
},
|
||||
);
|
||||
|
||||
await deleteAllKeys();
|
||||
|
||||
await t.step("saving games with bad fields", async () => {
|
||||
let i = 0;
|
||||
for (const key of Object.keys(validePreGame(7276))) {
|
||||
let [_, error] = await service.createNewGame({
|
||||
...validePreGame(7262 + i),
|
||||
[key]: `Broken ${key}`,
|
||||
});
|
||||
assertNotEquals(error, "");
|
||||
i++;
|
||||
}
|
||||
});
|
||||
|
||||
await t.step("saving games with the same home and away teams", async () => {
|
||||
const preGame = validePreGame(7276);
|
||||
preGame.home = preGame.away;
|
||||
let [_, error] = await service.createNewGame(preGame);
|
||||
assertNotEquals(error, "");
|
||||
});
|
||||
|
||||
await deleteAllKeys();
|
||||
|
||||
await t.step("listing games", async () => {
|
||||
for (let i = 0; i < 10; i++) {
|
||||
await service.createNewGame(validePreGame(666 + i));
|
||||
}
|
||||
assertEquals((await service.getAllGames()).length, 10);
|
||||
});
|
||||
|
||||
await deleteAllKeys();
|
||||
|
||||
await t.step("deleting games", async () => {
|
||||
let [game, error] = await service.createNewGame(validePreGame(8992));
|
||||
await service.deleteGameById(game!.id);
|
||||
assertEquals((await service.getAllGames()).length, 0);
|
||||
|
||||
[game, error] = await service.createNewGame(validePreGame(8992));
|
||||
assertEquals(error, "");
|
||||
});
|
||||
|
||||
await deleteAllKeys();
|
||||
|
||||
await t.step("updating game scores", async () => {
|
||||
let [game, _] = await service.createNewGame(validePreGame(8992));
|
||||
const ret = await service.updateGame(game!.id, {
|
||||
homeScore: 10,
|
||||
awayScore: 32,
|
||||
});
|
||||
assertEquals(ret, true);
|
||||
game = await service.getGameById(game!.id);
|
||||
assertEquals(game!.homeScore, 10);
|
||||
assertEquals(game!.awayScore, 32);
|
||||
});
|
||||
|
||||
await deleteAllKeys();
|
||||
await kv.close();
|
||||
});
|
||||
@@ -0,0 +1,111 @@
|
||||
import {
|
||||
assert,
|
||||
assertFalse,
|
||||
} from "https://deno.land/std@0.224.0/assert/mod.ts";
|
||||
|
||||
type User = { username: string; passwordHashWithSalt: string };
|
||||
|
||||
const officialUsers: User[] = [
|
||||
{
|
||||
username: "marqueur",
|
||||
passwordHashWithSalt:
|
||||
"5603007580f73044864e7a0b66744f405406eaaf28fa514d724ccf11d010bd89:070b1a477e6a877d44f31961dc0402a9f3258465eed73ab6a9110c461ac68714",
|
||||
},
|
||||
];
|
||||
|
||||
export class LoginService {
|
||||
private readonly users: User[];
|
||||
private readonly sessionKey: string;
|
||||
|
||||
constructor(users: User[], sessionKey: string) {
|
||||
this.users = users;
|
||||
this.sessionKey = sessionKey;
|
||||
}
|
||||
|
||||
public static officialLoginService(): LoginService {
|
||||
return new LoginService(
|
||||
officialUsers,
|
||||
Deno.env.get("SESSION_KEY") || "dev-only",
|
||||
);
|
||||
}
|
||||
|
||||
private async hashMessage(message: string): Promise<string> {
|
||||
const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array
|
||||
const hashBuffer = await crypto.subtle.digest("SHA-256", msgUint8); // hash the message
|
||||
const hashArray = Array.from(new Uint8Array(hashBuffer)); // convert buffer to byte array
|
||||
const hashHex = hashArray
|
||||
.map((b) => b.toString(16).padStart(2, "0"))
|
||||
.join(""); // convert bytes to hex string
|
||||
return hashHex;
|
||||
}
|
||||
|
||||
private async shittyHmac(message: string, salt: string): Promise<string> {
|
||||
const h1 = await this.hashMessage(message + salt);
|
||||
const h2 = await this.hashMessage(salt + message);
|
||||
return await this.hashMessage(h1 + h2);
|
||||
}
|
||||
|
||||
async hashPassword(password: string): Promise<string> {
|
||||
const salt = await this.hashMessage(`${Math.random()}`);
|
||||
const hash = await this.shittyHmac(password, salt);
|
||||
return `${salt}:${hash}`;
|
||||
}
|
||||
|
||||
async verifyPassword(
|
||||
password: string,
|
||||
passwordHashWithSalt: string,
|
||||
): Promise<boolean> {
|
||||
const [passwordSalt, passwordHash] = passwordHashWithSalt.split(":");
|
||||
return passwordHash === (await this.shittyHmac(password, passwordSalt));
|
||||
}
|
||||
|
||||
async validateCredentials(
|
||||
username: string,
|
||||
password: string,
|
||||
): Promise<boolean> {
|
||||
for (const user of this.users) {
|
||||
if (user.username === username) {
|
||||
return this.verifyPassword(password, user.passwordHashWithSalt);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
async login(ctx: any): Promise<void> {
|
||||
const nDays = 90;
|
||||
const maxAgesInSecond = nDays * 24 * 3600;
|
||||
const maxUnixEpoch = Math.floor(Date.now() / 1000) + maxAgesInSecond;
|
||||
|
||||
await ctx.cookies.set("phenix-session", `${maxUnixEpoch}`, {
|
||||
maxAge: maxAgesInSecond,
|
||||
});
|
||||
await ctx.cookies.set(
|
||||
"phenix-session-sign",
|
||||
await this.shittyHmac(`${maxUnixEpoch}`, this.sessionKey),
|
||||
{
|
||||
maxAge: maxAgesInSecond,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
async isLoggedIn(ctx: any): Promise<boolean> {
|
||||
const expiration = await ctx.cookies.get("phenix-session");
|
||||
const signature = await ctx.cookies.get("phenix-session-sign");
|
||||
if (signature !== (await this.shittyHmac(expiration, this.sessionKey))) {
|
||||
return false;
|
||||
}
|
||||
if (!expiration || !/^\d+$/.test(expiration)) {
|
||||
return false;
|
||||
}
|
||||
return Date.now() < parseInt(expiration) * 1000;
|
||||
}
|
||||
}
|
||||
|
||||
Deno.test("login service", async (t) => {
|
||||
await t.step("hashing password", async () => {
|
||||
const service = new LoginService([]);
|
||||
const passwordHashWithSalt = await service.hashPassword("qwerty");
|
||||
assert(await service.verifyPassword("qwerty", passwordHashWithSalt));
|
||||
assertFalse(await service.verifyPassword("ytrewq", passwordHashWithSalt));
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,19 @@
|
||||
export type Game = {
|
||||
id: string;
|
||||
date: string;
|
||||
time: string;
|
||||
home: string;
|
||||
away: string;
|
||||
year: number;
|
||||
homeScore: number | null;
|
||||
awayScore: number | null;
|
||||
practice: boolean;
|
||||
rain: boolean;
|
||||
};
|
||||
|
||||
export type PreGame = {
|
||||
date: string;
|
||||
time: string;
|
||||
home: string;
|
||||
away: string;
|
||||
};
|
||||
File diff suppressed because it is too large.
Load diff
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loaded 100 of 136 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user