Browse Source

Remplacement de tout les espaces par des tabs, préparation a la Pull Request

pull/5/head
Eragon 1 year ago
parent
commit
3ad43a45a0
24 changed files with 509 additions and 509 deletions
  1. +1
    -1
      V5.py
  2. +17
    -17
      app/forms.py
  3. +18
    -18
      app/models.py
  4. +63
    -63
      app/routes.py
  5. +7
    -7
      app/templates/base/alerts.html.j2
  6. +7
    -7
      app/templates/base/base.html.j2
  7. +3
    -3
      app/templates/base/container.html.j2
  8. +25
    -25
      app/templates/base/errors.html.j2
  9. +6
    -6
      app/templates/base/footer.html.j2
  10. +8
    -8
      app/templates/base/head.html.j2
  11. +12
    -12
      app/templates/base/header.html.j2
  12. +88
    -88
      app/templates/base/navbar.html.j2
  13. +56
    -56
      app/templates/base/navbar/account.html.j2
  14. +21
    -21
      app/templates/base/navbar/forum.html.j2
  15. +19
    -19
      app/templates/base/navbar/news.html.j2
  16. +53
    -53
      app/templates/base/navbar/programs.html.j2
  17. +11
    -11
      app/templates/base/navbar/sprites.html.j2
  18. +24
    -24
      app/templates/base/navbar/tools.html.j2
  19. +11
    -11
      app/templates/base/navbar/tutorials.html.j2
  20. +3
    -3
      app/templates/index.html.j2
  21. +17
    -17
      app/templates/login.html.j2
  22. +33
    -33
      app/templates/register.html.j2
  23. +2
    -2
      app/templates/validation.html.j2
  24. +4
    -4
      config.py

+ 1
- 1
V5.py View File

@@ -4,4 +4,4 @@ from app.models import User, Post

@app.shell_context_processor
def make_shell_context():
return {'db': db, 'User': User, 'Post': Post}
return {'db': db, 'User': User, 'Post': Post}

+ 17
- 17
app/forms.py View File

@@ -5,25 +5,25 @@ from app.models import User


class LoginForm(FlaskForm):
username = StringField('Pseudonyme :', validators=[DataRequired()])
password = PasswordField('Mot de passe :', validators=[DataRequired()])
remember_me = BooleanField('Se souvenir de moi :')
submit = SubmitField('Connexion')
username = StringField('Pseudonyme :', validators=[DataRequired()])
password = PasswordField('Mot de passe :', validators=[DataRequired()])
remember_me = BooleanField('Se souvenir de moi :')
submit = SubmitField('Connexion')


class RegistrationForm(FlaskForm):
username = StringField('Pseudonyme :', validators=[DataRequired()])
email = StringField('Adresse Email :', validators=[DataRequired(), Email()])
password = PasswordField('Mot de passe :', validators=[DataRequired()])
password2 = PasswordField('Répéter le mot de passe', validators=[DataRequired(), EqualTo('password')])
submit = SubmitField('S\'enregistrer')
username = StringField('Pseudonyme :', validators=[DataRequired()])
email = StringField('Adresse Email :', validators=[DataRequired(), Email()])
password = PasswordField('Mot de passe :', validators=[DataRequired()])
password2 = PasswordField('Répéter le mot de passe', validators=[DataRequired(), EqualTo('password')])
submit = SubmitField('S\'enregistrer')

def validate_username(self, username):
user = User.query.filter_by(username=username.data).first()
if user is not None:
raise ValidationError('Pseudo indisponible.')
def validate_username(self, username):
user = User.query.filter_by(username=username.data).first()
if user is not None:
raise ValidationError('Pseudo indisponible.')

def validate_email(self, email):
user = User.query.filter_by(email=email.data).first()
if user is not None:
raise ValidationError('Adresse email déjà utilisé.')
def validate_email(self, email):
user = User.query.filter_by(email=email.data).first()
if user is not None:
raise ValidationError('Adresse email déjà utilisé.')

+ 18
- 18
app/models.py View File

@@ -5,32 +5,32 @@ from werkzeug.security import generate_password_hash, check_password_hash


class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(128))
posts = db.relationship('Post', backref='author', lazy='dynamic')
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(128))
posts = db.relationship('Post', backref='author', lazy='dynamic')

def __repr__(self):
return '<User {}>'.format(self.username)
def __repr__(self):
return '<User {}>'.format(self.username)

def set_password(self, password):
self.password_hash = generate_password_hash(password)
def set_password(self, password):
self.password_hash = generate_password_hash(password)

def check_password(self, password):
return check_password_hash(self.password_hash, password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)


@login.user_loader
def load_user(id):
return User.query.get(int(id))
return User.query.get(int(id))


class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.String(140))
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.String(140))
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

def __repr__(self):
return '<Post {}>'.format(self.body)
def __repr__(self):
return '<Post {}>'.format(self.body)

+ 63
- 63
app/routes.py View File

@@ -9,58 +9,58 @@ from app.models import User
@app.route('/', methods=['GET', 'POST'])
def index():

form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash('pseudo ou mot de passe invalide')
return redirect(url_for('index'))
login_user(user, remember=form.remember_me.data)
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash('pseudo ou mot de passe invalide')
return redirect(url_for('index'))
login_user(user, remember=form.remember_me.data)

return render_template('index.html.j2', form=form)
return render_template('index.html.j2', form=form)


@app.route('/logout/')
def logout():
logout_user()
return redirect(url_for('index'))
logout_user()
return redirect(url_for('index'))


@app.route('/register', methods=['GET', 'POST'])
def register():
if current_user.is_authenticated:
return redirect(url_for('index'))
form = LoginForm()
form2 = RegistrationForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash('pseudo ou mot de passe invalide')
return redirect(url_for('index'))
login_user(user, remember=form.remember_me.data)
if form2.validate_on_submit():
user = User(username=form2.username.data, email=form2.email.data)
user.set_password(form2.password.data)
db.session.add(user)
db.session.commit()
flash('Congratulations, you are now a registered user!')
return redirect(url_for('validation'))
return render_template('register.html.j2', title='Register', form=form,
form2=form2)
if current_user.is_authenticated:
return redirect(url_for('index'))
form = LoginForm()
form2 = RegistrationForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash('pseudo ou mot de passe invalide')
return redirect(url_for('index'))
login_user(user, remember=form.remember_me.data)
if form2.validate_on_submit():
user = User(username=form2.username.data, email=form2.email.data)
user.set_password(form2.password.data)
db.session.add(user)
db.session.commit()
flash('Congratulations, you are now a registered user!')
return redirect(url_for('validation'))
return render_template('register.html.j2', title='Register', form=form,
form2=form2)


@app.route('/register/validation/')
def validation():
if current_user.is_authenticated:
return redirect(url_for('index'))
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash('pseudo ou mot de passe invalide')
return redirect(url_for('index'))
login_user(user, remember=form.remember_me.data)
return render_template('validation.html.j2', form=form)
if current_user.is_authenticated:
return redirect(url_for('index'))
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash('pseudo ou mot de passe invalide')
return redirect(url_for('index'))
login_user(user, remember=form.remember_me.data)
return render_template('validation.html.j2', form=form)


@app.errorhandler(400)
@@ -72,32 +72,32 @@ def validation():
@app.errorhandler(501)
@app.errorhandler(503)
def ma_page_erreur(error):
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash('pseudo ou mot de passe invalide')
return redirect(url_for('index'))
login_user(user, remember=form.remember_me.data)
return render_template("base/errors.html.j2", error_code=error.code,
form=form), error.code
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash('pseudo ou mot de passe invalide')
return redirect(url_for('index'))
login_user(user, remember=form.remember_me.data)
return render_template("base/errors.html.j2", error_code=error.code,
form=form), error.code


@app.route('/error/<int:error>')
def errors(error):
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash('pseudo ou mot de passe invalide')
return redirect(url_for('index'))
login_user(user, remember=form.remember_me.data)
if(error == 400 or error == 401 or error == 403 or error == 404 or
error == 418 or error == 500 or error == 501 or error == 503):
error_code = error
else:
error_code = 404
error = 404
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash('pseudo ou mot de passe invalide')
return redirect(url_for('index'))
login_user(user, remember=form.remember_me.data)
if(error == 400 or error == 401 or error == 403 or error == 404 or
error == 418 or error == 500 or error == 501 or error == 503):
error_code = error
else:
error_code = 404
error = 404

return render_template("base/errors.html.j2", error_code=error_code,
form=form), error
return render_template("base/errors.html.j2", error_code=error_code,
form=form), error

+ 7
- 7
app/templates/base/alerts.html.j2 View File

@@ -2,13 +2,13 @@
{% if messages %}
{% for message in messages %}
<div class="alert error" style="top: 95px;" onclick="close_important(this)">
<svg style='width:24px;height:24px' viewBox='0 0 24 24'>
<path fill="#727272" d="M12,2L1,21H23M12,6L19.53,19H4.47M11,10V14H13V10M11,16V18H13V16"></path>
</svg>
<span>
{{ message }}
</span>
<input type="button" class="flat" value="MASQUER" onclick="setCookie('pc_notif_2', 'true');"></input>
<svg style='width:24px;height:24px' viewBox='0 0 24 24'>
<path fill="#727272" d="M12,2L1,21H23M12,6L19.53,19H4.47M11,10V14H13V10M11,16V18H13V16"></path>
</svg>
<span>
{{ message }}
</span>
<input type="button" class="flat" value="MASQUER" onclick="setCookie('pc_notif_2', 'true');"></input>
</div>
{% endfor %}
{% endif %}

+ 7
- 7
app/templates/base/base.html.j2 View File

@@ -1,16 +1,16 @@
<!DOCTYPE html>
<html lang="fr-FR">
{% include "base/head.html.j2" %}
{% include "base/head.html.j2" %}
<body>
{% include "base/navbar.html.j2" %}
{% include "base/navbar.html.j2" %}

{% block container %}
{% endblock container %}
{% block container %}
{% endblock container %}

{% include "base/footer.html.j2" %}
{% include "base/footer.html.j2" %}

{% include "base/alerts.html.j2" %}
{% include "base/alerts.html.j2" %}

{% include "base/scripts.html.j2" %}
{% include "base/scripts.html.j2" %}
</body>
</html>

+ 3
- 3
app/templates/base/container.html.j2 View File

@@ -2,9 +2,9 @@

{% block container %}
<div id="container">
{% include "base/header.html.j2" %}
{% include "base/header.html.j2" %}

{% block content %}
{% endblock content %}
{% block content %}
{% endblock content %}
</div>
{% endblock container %}

+ 25
- 25
app/templates/base/errors.html.j2 View File

@@ -2,19 +2,19 @@

{% block content %}
<section class="home-pinned-content">
<p>
Erreur {{ error_code }}
<br>
{% if error_code == 400 %}
Bad Request : Votre requête semble mal formée.
{% elif error_code == 401 %}
Unauthorized : Une authentification est nécessaire pour accéder à la ressource.
<br>
Veuillez vous connecter à l'aide du panneau sur la gauche.
{% elif error_code == 403 %}
Forbidden : Cette page vous est interdite. Désolé, si vous pensez que c'est une erreur ou que vous voulez avoir accès à cette page malgré tout veuillez contacter un administrateur.
{% elif error_code == 404 %}
Not Found : La page n'existe pas ou plus, si vous avez rentré l'url à la main vérifiez de ne pas vous être trompé.
<p>
Erreur {{ error_code }}
<br>
{% if error_code == 400 %}
Bad Request : Votre requête semble mal formée.
{% elif error_code == 401 %}
Unauthorized : Une authentification est nécessaire pour accéder à la ressource.
<br>
Veuillez vous connecter à l'aide du panneau sur la gauche.
{% elif error_code == 403 %}
Forbidden : Cette page vous est interdite. Désolé, si vous pensez que c'est une erreur ou que vous voulez avoir accès à cette page malgré tout veuillez contacter un administrateur.
{% elif error_code == 404 %}
Not Found : La page n'existe pas ou plus, si vous avez rentré l'url à la main vérifiez de ne pas vous être trompé.
<pre> /| /‾‾‾‾‾‾‾\ /| |\ | /‾‾‾‾‾\ –––––––––
/ | / \ / | | \ | / \ |
/ | | | / | | \ | / \ |
@@ -36,17 +36,17 @@
| \ / \ / | \ | | /
| \ / \ / | \ | | /
| \_____/ \_____/ | \| |_______/</pre>
{% elif error_code == 418 %}
Oups! Il semblerai que vous m'ayez demandé du café mais je suis une théière.
<br>
Vous voulez une tasse de thé à la place de votre café?
{% elif error_code == 500 %}
Internal Server Error : Erreur interne du serveur. Rassurez vous vous n'êtes pas en cause c'est sans doute un développeur qui à fait l'imbécile. Si cette page s'affiche trop souvent essayez de contacter un administrateur par mail à <a href="mailto: devs@planet-casio.com">devs@planet-casio.com</a>.
{% elif error_code == 501 %}
Not Implemented : La fonctionnalité réclamée n'est pas supportée par le serveur. Désolé si cette fonctionnalité vous tient à cœur vous pouvez la proposer sur le <a href="/#">forum</a>.
{% elif error_code == 503 %}
Service Unavailable : Service temporairement indisponible ou en maintenance. Patientez!
{% endif %}
</p>
{% elif error_code == 418 %}
Oups! Il semblerai que vous m'ayez demandé du café mais je suis une théière.
<br>
Vous voulez une tasse de thé à la place de votre café?
{% elif error_code == 500 %}
Internal Server Error : Erreur interne du serveur. Rassurez vous vous n'êtes pas en cause c'est sans doute un développeur qui à fait l'imbécile. Si cette page s'affiche trop souvent essayez de contacter un administrateur par mail à <a href="mailto: devs@planet-casio.com">devs@planet-casio.com</a>.
{% elif error_code == 501 %}
Not Implemented : La fonctionnalité réclamée n'est pas supportée par le serveur. Désolé si cette fonctionnalité vous tient à cœur vous pouvez la proposer sur le <a href="/#">forum</a>.
{% elif error_code == 503 %}
Service Unavailable : Service temporairement indisponible ou en maintenance. Patientez!
{% endif %}
</p>
</section>
{% endblock %}

+ 6
- 6
app/templates/base/footer.html.j2 View File

@@ -1,8 +1,8 @@
<footer>
<p>Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas
affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite.</p>
<p>Les fichiers, programmes et autres publications présents sur Planète Casio restent la
propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des
copyrights.</p>
<p>CASIO est une marque déposée par CASIO Computer Co., Ltd.</p>
<p>Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas
affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite.</p>
<p>Les fichiers, programmes et autres publications présents sur Planète Casio restent la
propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des
copyrights.</p>
<p>CASIO est une marque déposée par CASIO Computer Co., Ltd.</p>
</footer>

+ 8
- 8
app/templates/base/head.html.j2 View File

@@ -1,12 +1,12 @@
<head>
<title>Planète Casio</title>
<title>Planète Casio</title>

<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">

<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href={{url_for('static', filename = 'css/global.css')}}>
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href={{url_for('static', filename = 'css/navbar.css')}}>
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href={{url_for('static', filename = 'css/container.css')}}>
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href={{url_for('static', filename = 'css/responsive.css')}}>
<link rel="stylesheet" media="all and (max-width: 699px)" type="text/css" href={{url_for('static', filename = 'css/light.css')}}>
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href={{url_for('static', filename = 'css/global.css')}}>
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href={{url_for('static', filename = 'css/navbar.css')}}>
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href={{url_for('static', filename = 'css/container.css')}}>
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href={{url_for('static', filename = 'css/responsive.css')}}>
<link rel="stylesheet" media="all and (max-width: 699px)" type="text/css" href={{url_for('static', filename = 'css/light.css')}}>
</head>

+ 12
- 12
app/templates/base/header.html.j2 View File

@@ -1,15 +1,15 @@
<header>
<form>
<input type="search" placeholder="Recherche" />
<a role="button" onclick="this.parentNode.submit();" href="#" class="light-hidden">
<svg viewBox="0 0 24 24">
<path fill="#adb0b4"d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z"></path>
</svg>
</a>
</form>
<form>
<input type="search" placeholder="Recherche" />
<a role="button" onclick="this.parentNode.submit();" href="#" class="light-hidden">
<svg viewBox="0 0 24 24">
<path fill="#adb0b4"d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z"></path>
</svg>
</a>
</form>

<div id="spotlight">
<a href="#">Concours</a>
<a href="#">Jeu du mois</a>
</div>
<div id="spotlight">
<a href="#">Concours</a>
<a href="#">Jeu du mois</a>
</div>
</header>

+ 88
- 88
app/templates/base/navbar.html.j2 View File

@@ -1,90 +1,90 @@
<nav>
<ul id="light-menu">
<a id="logo" href="{{ url_for('index') }}">
<img src="{{ url_for('static',filename= 'images/logo_noshadow.png') }}" alt="logo"/>
</a>
<li>
<a role="button" label="Compte" tabindex="0">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M12,19.2C9.5,19.2 7.29,17.92 6,16C6.03,14 10,12.9 12,12.9C14,12.9 17.97,14 18,16C16.71,17.92 14.5,19.2 12,19.2M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z"></path>
</svg>
<div>Compte</div>
</a>
</li>
<li>
<a role="button" label="Actualités" tabindex="0">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M20,11H4V8H20M20,15H13V13H20M20,19H13V17H20M11,19H4V13H11M20.33,4.67L18.67,3L17,4.67L15.33,3L13.67,4.67L12,3L10.33,4.67L8.67,3L7,4.67L5.33,3L3.67,4.67L2,3V19A2,2 0 0,0 4,21H20A2,2 0 0,0 22,19V3L20.33,4.67Z"></path>
</svg>
<div>Actualités</div>
</a>
</li>
<li>
<a role="button" label="Forum" tabindex="0">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M17,12V3A1,1 0 0,0 16,2H3A1,1 0 0,0 2,3V17L6,13H16A1,1 0 0,0 17,12M21,6H19V15H6V17A1,1 0 0,0 7,18H18L22,22V7A1,1 0 0,0 21,6Z"></path>
</svg>
<div>Forum</div>
</a>
</li>
<li>
<a role="button" label="Programmes" tabindex="0">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M8,3A2,2 0 0,0 6,5V9A2,2 0 0,1 4,11H3V13H4A2,2 0 0,1 6,15V19A2,2 0 0,0 8,21H10V19H8V14A2,2 0 0,0 6,12A2,2 0 0,0 8,10V5H10V3M16,3A2,2 0 0,1 18,5V9A2,2 0 0,0 20,11H21V13H20A2,2 0 0,0 18,15V19A2,2 0 0,1 16,21H14V19H16V14A2,2 0 0,1 18,12A2,2 0 0,1 16,10V5H14V3H16Z"></path>
</svg>
<div>Programmes</div>
</a>
</li>
<li>
<a role="button" label="Tutoriels" tabindex="0">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M12,3L1,9L12,15L21,10.09V17H23V9M5,13.18V17.18L12,21L19,17.18V13.18L12,17L5,13.18Z"></path>
</svg>
<div>Tutoriels</div>
</a>
</li>
<li>
<a role="button" label="Sprites" tabindex="0">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M20.71,4.63L19.37,3.29C19,2.9 18.35,2.9 17.96,3.29L9,12.25L11.75,15L20.71,6.04C21.1,5.65 21.1,5 20.71,4.63M7,14A3,3 0 0,0 4,17C4,18.31 2.84,19 2,19C2.92,20.22 4.5,21 6,21A4,4 0 0,0 10,17A3,3 0 0,0 7,14Z"></path>
</svg>
<div>Sprites</div>
</a>
</li>
<li>
<a href="#" label="Outils">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M22.7,19L13.6,9.9C14.5,7.6 14,4.9 12.1,3C10.1,1 7.1,0.6 4.7,1.7L9,6L6,9L1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1C4.8,14 7.5,14.5 9.8,13.6L18.9,22.7C19.3,23.1 19.9,23.1 20.3,22.7L22.6,20.4C23.1,20 23.1,19.3 22.7,19Z"></path>
</svg>
<div>Outils</div>
</a>
</li>
</ul>
<div id="menu">
{% include "base/navbar/account.html.j2" %}
{% include "base/navbar/news.html.j2" %}
{% include "base/navbar/forum.html.j2" %}
{% include "base/navbar/programs.html.j2" %}
{% include "base/navbar/tutorials.html.j2" %}
{% include "base/navbar/sprites.html.j2" %}
{% include "base/navbar/tools.html.j2" %}
{% if current_user.is_authenticated %}
{% endif %}
</div>
<ul id="light-menu">
<a id="logo" href="{{ url_for('index') }}">
<img src="{{ url_for('static',filename= 'images/logo_noshadow.png') }}" alt="logo"/>
</a>
<li>
<a role="button" label="Compte" tabindex="0">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M12,19.2C9.5,19.2 7.29,17.92 6,16C6.03,14 10,12.9 12,12.9C14,12.9 17.97,14 18,16C16.71,17.92 14.5,19.2 12,19.2M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z"></path>
</svg>
<div>Compte</div>
</a>
</li>
<li>
<a role="button" label="Actualités" tabindex="0">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M20,11H4V8H20M20,15H13V13H20M20,19H13V17H20M11,19H4V13H11M20.33,4.67L18.67,3L17,4.67L15.33,3L13.67,4.67L12,3L10.33,4.67L8.67,3L7,4.67L5.33,3L3.67,4.67L2,3V19A2,2 0 0,0 4,21H20A2,2 0 0,0 22,19V3L20.33,4.67Z"></path>
</svg>
<div>Actualités</div>
</a>
</li>
<li>
<a role="button" label="Forum" tabindex="0">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M17,12V3A1,1 0 0,0 16,2H3A1,1 0 0,0 2,3V17L6,13H16A1,1 0 0,0 17,12M21,6H19V15H6V17A1,1 0 0,0 7,18H18L22,22V7A1,1 0 0,0 21,6Z"></path>
</svg>
<div>Forum</div>
</a>
</li>
<li>
<a role="button" label="Programmes" tabindex="0">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M8,3A2,2 0 0,0 6,5V9A2,2 0 0,1 4,11H3V13H4A2,2 0 0,1 6,15V19A2,2 0 0,0 8,21H10V19H8V14A2,2 0 0,0 6,12A2,2 0 0,0 8,10V5H10V3M16,3A2,2 0 0,1 18,5V9A2,2 0 0,0 20,11H21V13H20A2,2 0 0,0 18,15V19A2,2 0 0,1 16,21H14V19H16V14A2,2 0 0,1 18,12A2,2 0 0,1 16,10V5H14V3H16Z"></path>
</svg>
<div>Programmes</div>
</a>
</li>
<li>
<a role="button" label="Tutoriels" tabindex="0">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M12,3L1,9L12,15L21,10.09V17H23V9M5,13.18V17.18L12,21L19,17.18V13.18L12,17L5,13.18Z"></path>
</svg>
<div>Tutoriels</div>
</a>
</li>
<li>
<a role="button" label="Sprites" tabindex="0">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M20.71,4.63L19.37,3.29C19,2.9 18.35,2.9 17.96,3.29L9,12.25L11.75,15L20.71,6.04C21.1,5.65 21.1,5 20.71,4.63M7,14A3,3 0 0,0 4,17C4,18.31 2.84,19 2,19C2.92,20.22 4.5,21 6,21A4,4 0 0,0 10,17A3,3 0 0,0 7,14Z"></path>
</svg>
<div>Sprites</div>
</a>
</li>
<li>
<a href="#" label="Outils">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M22.7,19L13.6,9.9C14.5,7.6 14,4.9 12.1,3C10.1,1 7.1,0.6 4.7,1.7L9,6L6,9L1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1C4.8,14 7.5,14.5 9.8,13.6L18.9,22.7C19.3,23.1 19.9,23.1 20.3,22.7L22.6,20.4C23.1,20 23.1,19.3 22.7,19Z"></path>
</svg>
<div>Outils</div>
</a>
</li>
</ul>
<div id="menu">
{% include "base/navbar/account.html.j2" %}
{% include "base/navbar/news.html.j2" %}
{% include "base/navbar/forum.html.j2" %}
{% include "base/navbar/programs.html.j2" %}
{% include "base/navbar/tutorials.html.j2" %}
{% include "base/navbar/sprites.html.j2" %}
{% include "base/navbar/tools.html.j2" %}
{% if current_user.is_authenticated %}
{% endif %}
</div>
</nav>

+ 56
- 56
app/templates/base/navbar/account.html.j2 View File

@@ -1,65 +1,65 @@
{% if current_user.is_authenticated %}
<div>
<h2>
<img src="{{ url_for('static', filename= 'images/3864.png') }}">
{{ current_user.username }}
</h2>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M20,2A2,2 0 0,1 22,4V16A2,2 0 0,1 20,18H6L2,22V4C2,2.89 2.9,2 4,2H20M4,4V17.17L5.17,16H20V4H4M6,7H18V9H6V7M6,11H15V13H6V11Z"></path>
</svg>
Notifications
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M2,2V11C2,12 3,13 4,13H6.2C6.6,15 7.9,16.7 11,17V19.1C8.8,19.3 8,20.4 8,21.7V22H16V21.7C16,20.4 15.2,19.3 13,19.1V17C16.1,16.7 17.4,15 17.8,13H20C21,13 22,12 22,11V2H18C17.1,2 16,3 16,4H8C8,3 6.9,2 6,2H2M4,4H6V6L6,11H4V4M18,4H20V11H18V6L18,4M8,6H16V11.5C16,13.43 15.42,15 12,15C8.59,15 8,13.43 8,11.5V6Z"></path>
</svg>
Trophées
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z"></path>
</svg>
Topics favoris
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M3,1H19A1,1 0 0,1 20,2V6A1,1 0 0,1 19,7H3A1,1 0 0,1 2,6V2A1,1 0 0,1 3,1M3,9H19A1,1 0 0,1 20,10V10.67L17.5,9.56L11,12.44V15H3A1,1 0 0,1 2,14V10A1,1 0 0,1 3,9M3,17H11C11.06,19.25 12,21.4 13.46,23H3A1,1 0 0,1 2,22V18A1,1 0 0,1 3,17M8,5H9V3H8V5M8,13H9V11H8V13M8,21H9V19H8V21M4,3V5H6V3H4M4,11V13H6V11H4M4,19V21H6V19H4M17.5,12L22,14V17C22,19.78 20.08,22.37 17.5,23C14.92,22.37 13,19.78 13,17V14L17.5,12M17.5,13.94L15,15.06V17.72C15,19.26 16.07,20.7 17.5,21.06V13.94Z"></path>
</svg>
Panel d'administration
</a>
<h2>
<img src="{{ url_for('static', filename= 'images/3864.png') }}">
{{ current_user.username }}
</h2>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M20,2A2,2 0 0,1 22,4V16A2,2 0 0,1 20,18H6L2,22V4C2,2.89 2.9,2 4,2H20M4,4V17.17L5.17,16H20V4H4M6,7H18V9H6V7M6,11H15V13H6V11Z"></path>
</svg>
Notifications
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M2,2V11C2,12 3,13 4,13H6.2C6.6,15 7.9,16.7 11,17V19.1C8.8,19.3 8,20.4 8,21.7V22H16V21.7C16,20.4 15.2,19.3 13,19.1V17C16.1,16.7 17.4,15 17.8,13H20C21,13 22,12 22,11V2H18C17.1,2 16,3 16,4H8C8,3 6.9,2 6,2H2M4,4H6V6L6,11H4V4M18,4H20V11H18V6L18,4M8,6H16V11.5C16,13.43 15.42,15 12,15C8.59,15 8,13.43 8,11.5V6Z"></path>
</svg>
Trophées
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z"></path>
</svg>
Topics favoris
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M3,1H19A1,1 0 0,1 20,2V6A1,1 0 0,1 19,7H3A1,1 0 0,1 2,6V2A1,1 0 0,1 3,1M3,9H19A1,1 0 0,1 20,10V10.67L17.5,9.56L11,12.44V15H3A1,1 0 0,1 2,14V10A1,1 0 0,1 3,9M3,17H11C11.06,19.25 12,21.4 13.46,23H3A1,1 0 0,1 2,22V18A1,1 0 0,1 3,17M8,5H9V3H8V5M8,13H9V11H8V13M8,21H9V19H8V21M4,3V5H6V3H4M4,11V13H6V11H4M4,19V21H6V19H4M17.5,12L22,14V17C22,19.78 20.08,22.37 17.5,23C14.92,22.37 13,19.78 13,17V14L17.5,12M17.5,13.94L15,15.06V17.72C15,19.26 16.07,20.7 17.5,21.06V13.94Z"></path>
</svg>
Panel d'administration
</a>

<hr />
<hr />

<a href="account.html.j2">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z"></path>
</svg>
Paramètres
</a>
<a href="{{ url_for('logout') }}">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M17,17.25V14H10V10H17V6.75L22.25,12L17,17.25M13,2A2,2 0 0,1 15,4V8H13V4H4V20H13V16H15V20A2,2 0 0,1 13,22H4A2,2 0 0,1 2,20V4A2,2 0 0,1 4,2H13Z"></path>
</svg>
Déconnexion
</a>
<a href="account.html.j2">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z"></path>
</svg>
Paramètres
</a>
<a href="{{ url_for('logout') }}">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M17,17.25V14H10V10H17V6.75L22.25,12L17,17.25M13,2A2,2 0 0,1 15,4V8H13V4H4V20H13V16H15V20A2,2 0 0,1 13,22H4A2,2 0 0,1 2,20V4A2,2 0 0,1 4,2H13Z"></path>
</svg>
Déconnexion
</a>
</div>
{% else %}
<div>
<h2>
Invité
</h2>
<form method="post" action="" class="login with-ajax">
{{ form.hidden_tag() }}
<p>
{{ form.username(size=32, placeholder="Identifiant") }}
{{ form.password(size=32, placeholder="Mot de passe") }}
</p>
<p>{{ form.submit() }}</p>
<p>{{ form.remember_me.label }} {{ form.remember_me() }}</p>
</form>
<hr />
<a href="{{ url_for('register') }}">Mot de passe oublié ?</a>
<a href="{{ url_for('register') }}">Inscription</a>
<h2>
Invité
</h2>
<form method="post" action="" class="login with-ajax">
{{ form.hidden_tag() }}
<p>
{{ form.username(size=32, placeholder="Identifiant") }}
{{ form.password(size=32, placeholder="Mot de passe") }}
</p>
<p>{{ form.submit() }}</p>
<p>{{ form.remember_me.label }} {{ form.remember_me() }}</p>
</form>
<hr />
<a href="{{ url_for('register') }}">Mot de passe oublié ?</a>
<a href="{{ url_for('register') }}">Inscription</a>
</div>
{% endif %}

+ 21
- 21
app/templates/base/navbar/forum.html.j2 View File

@@ -1,25 +1,25 @@
<div>
<h2>
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M17,12V3A1,1 0 0,0 16,2H3A1,1 0 0,0 2,3V17L6,13H16A1,1 0 0,0 17,12M21,6H19V15H6V17A1,1 0 0,0 7,18H18L22,22V7A1,1 0 0,0 21,6Z"></path>
</svg>
Forum
</h2>
<a href="/forum">Vie communautaire</a>
<a href="/forum">Projets de programmation</a>
<a href="/forum">Questions et problèmes</a>
<a href="/forum">Discussions</a>
<a href="/forum">Administration</a>
<a href="/forum">CreativeCalc</a>
<h2>
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M17,12V3A1,1 0 0,0 16,2H3A1,1 0 0,0 2,3V17L6,13H16A1,1 0 0,0 17,12M21,6H19V15H6V17A1,1 0 0,0 7,18H18L22,22V7A1,1 0 0,0 21,6Z"></path>
</svg>
Forum
</h2>
<a href="/forum">Vie communautaire</a>
<a href="/forum">Projets de programmation</a>
<a href="/forum">Questions et problèmes</a>
<a href="/forum">Discussions</a>
<a href="/forum">Administration</a>
<a href="/forum">CreativeCalc</a>

<hr />
<hr />

<h3>Derniers commentaires</h3>
<ul>
<li><a href="/forum">Legolas</a> sur <a href="#">Bugs de la v5</a></li>
<li><a href="/forum">Dark Storm</a> sur <a href="#">fxSDK support</a></li>
<li><a href="/forum">Gollum</a> sur <a href="#">Le nom de topic qui fout le bordel car il est trop long…</a></li>
<li><a href="/forum">Lephenixnoir</a> sur <a href="#">fxSDK support</a></li>
<li><a href="/forum">Kristaba</a> sur <a href="#">FiXos, le retour</a></li>
</ul>
<h3>Derniers commentaires</h3>
<ul>
<li><a href="/forum">Legolas</a> sur <a href="#">Bugs de la v5</a></li>
<li><a href="/forum">Dark Storm</a> sur <a href="#">fxSDK support</a></li>
<li><a href="/forum">Gollum</a> sur <a href="#">Le nom de topic qui fout le bordel car il est trop long…</a></li>
<li><a href="/forum">Lephenixnoir</a> sur <a href="#">fxSDK support</a></li>
<li><a href="/forum">Kristaba</a> sur <a href="#">FiXos, le retour</a></li>
</ul>
</div>

+ 19
- 19
app/templates/base/navbar/news.html.j2 View File

@@ -1,23 +1,23 @@
<div>
<h2>
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M20,11H4V8H20M20,15H13V13H20M20,19H13V17H20M11,19H4V13H11M20.33,4.67L18.67,3L17,4.67L15.33,3L13.67,4.67L12,3L10.33,4.67L8.67,3L7,4.67L5.33,3L3.67,4.67L2,3V19A2,2 0 0,0 4,21H20A2,2 0 0,0 22,19V3L20.33,4.67Z"></path>
</svg>
Actualités
</h2>
<a href="#">Casio</a>
<a href="#">Arduino</a>
<a href="#">Projets communautaires</a>
<a href="#">Divers</a>
<h2>
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M20,11H4V8H20M20,15H13V13H20M20,19H13V17H20M11,19H4V13H11M20.33,4.67L18.67,3L17,4.67L15.33,3L13.67,4.67L12,3L10.33,4.67L8.67,3L7,4.67L5.33,3L3.67,4.67L2,3V19A2,2 0 0,0 4,21H20A2,2 0 0,0 22,19V3L20.33,4.67Z"></path>
</svg>
Actualités
</h2>
<a href="#">Casio</a>
<a href="#">Arduino</a>
<a href="#">Projets communautaires</a>
<a href="#">Divers</a>

<hr />
<hr />

<h3>Derniers articles</h3>
<ul>
<li><a href="#">Un nouvel OS pour les Graph 75</a></li>
<li><a href="#">Les 7 Days CPC arrivent bientôt</a></li>
<li><a href="#">Résultats de jeu du mois de Février 2017</a></li>
<li><a href="#">Test du shield relai Sainsmart pour Arduino</a></li>
<li><a href="#">Un nouveau tutoriel sur le C-engine</a></li>
</ul>
<h3>Derniers articles</h3>
<ul>
<li><a href="#">Un nouvel OS pour les Graph 75</a></li>
<li><a href="#">Les 7 Days CPC arrivent bientôt</a></li>
<li><a href="#">Résultats de jeu du mois de Février 2017</a></li>
<li><a href="#">Test du shield relai Sainsmart pour Arduino</a></li>
<li><a href="#">Un nouveau tutoriel sur le C-engine</a></li>
</ul>
</div>

+ 53
- 53
app/templates/base/navbar/programs.html.j2 View File

@@ -1,60 +1,60 @@
<div>
<h2>
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M8,3A2,2 0 0,0 6,5V9A2,2 0 0,1 4,11H3V13H4A2,2 0 0,1 6,15V19A2,2 0 0,0 8,21H10V19H8V14A2,2 0 0,0 6,12A2,2 0 0,0 8,10V5H10V3M16,3A2,2 0 0,1 18,5V9A2,2 0 0,0 20,11H21V13H20A2,2 0 0,0 18,15V19A2,2 0 0,1 16,21H14V19H16V14A2,2 0 0,1 18,12A2,2 0 0,1 16,10V5H14V3H16Z"></path>
</svg>
Programmes
</h2>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M7,6H17A6,6 0 0,1 23,12A6,6 0 0,1 17,18C15.22,18 13.63,17.23 12.53,16H11.47C10.37,17.23 8.78,18 7,18A6,6 0 0,1 1,12A6,6 0 0,1 7,6M6,9V11H4V13H6V15H8V13H10V11H8V9H6M15.5,12A1.5,1.5 0 0,0 14,13.5A1.5,1.5 0 0,0 15.5,15A1.5,1.5 0 0,0 17,13.5A1.5,1.5 0 0,0 15.5,12M18.5,9A1.5,1.5 0 0,0 17,10.5A1.5,1.5 0 0,0 18.5,12A1.5,1.5 0 0,0 20,10.5A1.5,1.5 0 0,0 18.5,9Z"></path>
</svg>
Jeux
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M19,19H5V8H19M19,3H18V1H16V3H8V1H6V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M16.53,11.06L15.47,10L10.59,14.88L8.47,12.76L7.41,13.82L10.59,17L16.53,11.06Z"></path>
</svg>
Utilitaires
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M21,16H3V4H21M21,2H3C1.89,2 1,2.89 1,4V16A2,2 0 0,0 3,18H10V20H8V22H16V20H14V18H21A2,2 0 0,0 23,16V4C23,2.89 22.1,2 21,2Z"></path>
</svg>
Logiciels
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z"></path>
</svg>
Top 20
</a>
<h2>
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M8,3A2,2 0 0,0 6,5V9A2,2 0 0,1 4,11H3V13H4A2,2 0 0,1 6,15V19A2,2 0 0,0 8,21H10V19H8V14A2,2 0 0,0 6,12A2,2 0 0,0 8,10V5H10V3M16,3A2,2 0 0,1 18,5V9A2,2 0 0,0 20,11H21V13H20A2,2 0 0,0 18,15V19A2,2 0 0,1 16,21H14V19H16V14A2,2 0 0,1 18,12A2,2 0 0,1 16,10V5H14V3H16Z"></path>
</svg>
Programmes
</h2>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M7,6H17A6,6 0 0,1 23,12A6,6 0 0,1 17,18C15.22,18 13.63,17.23 12.53,16H11.47C10.37,17.23 8.78,18 7,18A6,6 0 0,1 1,12A6,6 0 0,1 7,6M6,9V11H4V13H6V15H8V13H10V11H8V9H6M15.5,12A1.5,1.5 0 0,0 14,13.5A1.5,1.5 0 0,0 15.5,15A1.5,1.5 0 0,0 17,13.5A1.5,1.5 0 0,0 15.5,12M18.5,9A1.5,1.5 0 0,0 17,10.5A1.5,1.5 0 0,0 18.5,12A1.5,1.5 0 0,0 20,10.5A1.5,1.5 0 0,0 18.5,9Z"></path>
</svg>
Jeux
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M19,19H5V8H19M19,3H18V1H16V3H8V1H6V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M16.53,11.06L15.47,10L10.59,14.88L8.47,12.76L7.41,13.82L10.59,17L16.53,11.06Z"></path>
</svg>
Utilitaires
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M21,16H3V4H21M21,2H3C1.89,2 1,2.89 1,4V16A2,2 0 0,0 3,18H10V20H8V22H16V20H14V18H21A2,2 0 0,0 23,16V4C23,2.89 22.1,2 21,2Z"></path>
</svg>
Logiciels
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z"></path>
</svg>
Top 20
</a>

<hr />
<hr />

<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z" />
</svg>
Recherche avancée
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z" />
</svg>
Recherche avancée
</a>

<hr />
<hr />

<h3>Sélection de la semaine</h3>
<ul>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/fruit_ninja.gif') }}">Fruit Ninja</a></li>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/clonelab.gif') }}">Clonelab</a></li>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/gravity_duck.png') }}">Gravity Duck</a></li>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/calcraft.gif') }}">Calcraft</a></li>
</ul>
<h3>Sélection de la semaine</h3>
<ul>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/fruit_ninja.gif') }}">Fruit Ninja</a></li>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/clonelab.gif') }}">Clonelab</a></li>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/gravity_duck.png') }}">Gravity Duck</a></li>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/calcraft.gif') }}">Calcraft</a></li>
</ul>

<hr />
<h3>Coup de cœur</h3>
<ul>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/fruit_ninja.gif') }}">Fruit Ninja</a></li>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/clonelab.gif') }}">Clonelab</a></li>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/gravity_duck.png') }}">Gravity Duck</a></li>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/calcraft.gif')}}">Calcraft</a></li>
</ul>
<hr />
<h3>Coup de cœur</h3>
<ul>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/fruit_ninja.gif') }}">Fruit Ninja</a></li>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/clonelab.gif') }}">Clonelab</a></li>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/gravity_duck.png') }}">Gravity Duck</a></li>
<li><a href="#"><img src="{{ url_for('static', filename = 'images/calcraft.gif')}}">Calcraft</a></li>
</ul>
</div>

+ 11
- 11
app/templates/base/navbar/sprites.html.j2 View File

@@ -1,13 +1,13 @@
<div>
<h2>
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M20.71,4.63L19.37,3.29C19,2.9 18.35,2.9 17.96,3.29L9,12.25L11.75,15L20.71,6.04C21.1,5.65 21.1,5 20.71,4.63M7,14A3,3 0 0,0 4,17C4,18.31 2.84,19 2,19C2.92,20.22 4.5,21 6,21A4,4 0 0,0 10,17A3,3 0 0,0 7,14Z"></path>
</svg>
Sprites
</h2>
<a href="#">Personnages</a>
<a href="#">Environnement</a>
<a href="#">Objets</a>
<a href="#">Interfaces</a>
<a href="#">Générateur</a>
<h2>
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M20.71,4.63L19.37,3.29C19,2.9 18.35,2.9 17.96,3.29L9,12.25L11.75,15L20.71,6.04C21.1,5.65 21.1,5 20.71,4.63M7,14A3,3 0 0,0 4,17C4,18.31 2.84,19 2,19C2.92,20.22 4.5,21 6,21A4,4 0 0,0 10,17A3,3 0 0,0 7,14Z"></path>
</svg>
Sprites
</h2>
<a href="#">Personnages</a>
<a href="#">Environnement</a>
<a href="#">Objets</a>
<a href="#">Interfaces</a>
<a href="#">Générateur</a>
</div>

+ 24
- 24
app/templates/base/navbar/tools.html.j2 View File

@@ -1,27 +1,27 @@
<div>
<h2>
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M22.7,19L13.6,9.9C14.5,7.6 14,4.9 12.1,3C10.1,1 7.1,0.6 4.7,1.7L9,6L6,9L1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1C4.8,14 7.5,14.5 9.8,13.6L18.9,22.7C19.3,23.1 19.9,23.1 20.3,22.7L22.6,20.4C23.1,20 23.1,19.3 22.7,19Z"></path>
</svg>
Outils
</h2>
<h2>
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M22.7,19L13.6,9.9C14.5,7.6 14,4.9 12.1,3C10.1,1 7.1,0.6 4.7,1.7L9,6L6,9L1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1C4.8,14 7.5,14.5 9.8,13.6L18.9,22.7C19.3,23.1 19.9,23.1 20.3,22.7L22.6,20.4C23.1,20 23.1,19.3 22.7,19Z"></path>
</svg>
Outils
</h2>

<a href="https://git.planet-casio.com/">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M2.6,10.59L8.38,4.8L10.07,6.5C9.83,7.35 10.22,8.28 11,8.73V14.27C10.4,14.61 10,15.26 10,16A2,2 0 0,0 12,18A2,2 0 0,0 14,16C14,15.26 13.6,14.61 13,14.27V9.41L15.07,11.5C15,11.65 15,11.82 15,12A2,2 0 0,0 17,14A2,2 0 0,0 19,12A2,2 0 0,0 17,10C16.82,10 16.65,10 16.5,10.07L13.93,7.5C14.19,6.57 13.71,5.55 12.78,5.16C12.35,5 11.9,4.96 11.5,5.07L9.8,3.38L10.59,2.6C11.37,1.81 12.63,1.81 13.41,2.6L21.4,10.59C22.19,11.37 22.19,12.63 21.4,13.41L13.41,21.4C12.63,22.19 11.37,22.19 10.59,21.4L2.6,13.41C1.81,12.63 1.81,11.37 2.6,10.59Z"></path>
</svg>
Forge GitLab
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M14.97,18.95L12.41,12.92C11.39,14.91 10.27,17 9.31,18.95C9.3,18.96 8.84,18.95 8.84,18.95C7.37,15.5 5.85,12.1 4.37,8.68C4.03,7.84 2.83,6.5 2,6.5C2,6.4 2,6.18 2,6.05H7.06V6.5C6.46,6.5 5.44,6.9 5.7,7.55C6.42,9.09 8.94,15.06 9.63,16.58C10.1,15.64 11.43,13.16 12,12.11C11.55,11.23 10.13,7.93 9.71,7.11C9.39,6.57 8.58,6.5 7.96,6.5C7.96,6.35 7.97,6.25 7.96,6.06L12.42,6.07V6.47C11.81,6.5 11.24,6.71 11.5,7.29C12.1,8.53 12.45,9.42 13,10.57C13.17,10.23 14.07,8.38 14.5,7.41C14.76,6.76 14.37,6.5 13.29,6.5C13.3,6.38 13.3,6.17 13.3,6.07C14.69,6.06 16.78,6.06 17.15,6.05V6.47C16.44,6.5 15.71,6.88 15.33,7.46L13.5,11.3C13.68,11.81 15.46,15.76 15.65,16.2L19.5,7.37C19.2,6.65 18.34,6.5 18,6.5C18,6.37 18,6.2 18,6.05L22,6.08V6.1L22,6.5C21.12,6.5 20.57,7 20.25,7.75C19.45,9.54 17,15.24 15.4,18.95C15.4,18.95 14.97,18.95 14.97,18.95Z"></path>
</svg>
Casio Universal Wiki
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M19,8L15,12H18A6,6 0 0,1 12,18C11,18 10.03,17.75 9.2,17.3L7.74,18.76C8.97,19.54 10.43,20 12,20A8,8 0 0,0 20,12H23M6,12A6,6 0 0,1 12,6C13,6 13.97,6.25 14.8,6.7L16.26,5.24C15.03,4.46 13.57,4 12,4A8,8 0 0,0 4,12H1L5,16L9,12"></path>
</svg>
SH4 Compatibility Tool
</a>
<a href="https://git.planet-casio.com/">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M2.6,10.59L8.38,4.8L10.07,6.5C9.83,7.35 10.22,8.28 11,8.73V14.27C10.4,14.61 10,15.26 10,16A2,2 0 0,0 12,18A2,2 0 0,0 14,16C14,15.26 13.6,14.61 13,14.27V9.41L15.07,11.5C15,11.65 15,11.82 15,12A2,2 0 0,0 17,14A2,2 0 0,0 19,12A2,2 0 0,0 17,10C16.82,10 16.65,10 16.5,10.07L13.93,7.5C14.19,6.57 13.71,5.55 12.78,5.16C12.35,5 11.9,4.96 11.5,5.07L9.8,3.38L10.59,2.6C11.37,1.81 12.63,1.81 13.41,2.6L21.4,10.59C22.19,11.37 22.19,12.63 21.4,13.41L13.41,21.4C12.63,22.19 11.37,22.19 10.59,21.4L2.6,13.41C1.81,12.63 1.81,11.37 2.6,10.59Z"></path>
</svg>
Forge GitLab
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M14.97,18.95L12.41,12.92C11.39,14.91 10.27,17 9.31,18.95C9.3,18.96 8.84,18.95 8.84,18.95C7.37,15.5 5.85,12.1 4.37,8.68C4.03,7.84 2.83,6.5 2,6.5C2,6.4 2,6.18 2,6.05H7.06V6.5C6.46,6.5 5.44,6.9 5.7,7.55C6.42,9.09 8.94,15.06 9.63,16.58C10.1,15.64 11.43,13.16 12,12.11C11.55,11.23 10.13,7.93 9.71,7.11C9.39,6.57 8.58,6.5 7.96,6.5C7.96,6.35 7.97,6.25 7.96,6.06L12.42,6.07V6.47C11.81,6.5 11.24,6.71 11.5,7.29C12.1,8.53 12.45,9.42 13,10.57C13.17,10.23 14.07,8.38 14.5,7.41C14.76,6.76 14.37,6.5 13.29,6.5C13.3,6.38 13.3,6.17 13.3,6.07C14.69,6.06 16.78,6.06 17.15,6.05V6.47C16.44,6.5 15.71,6.88 15.33,7.46L13.5,11.3C13.68,11.81 15.46,15.76 15.65,16.2L19.5,7.37C19.2,6.65 18.34,6.5 18,6.5C18,6.37 18,6.2 18,6.05L22,6.08V6.1L22,6.5C21.12,6.5 20.57,7 20.25,7.75C19.45,9.54 17,15.24 15.4,18.95C15.4,18.95 14.97,18.95 14.97,18.95Z"></path>
</svg>
Casio Universal Wiki
</a>
<a href="#">
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M19,8L15,12H18A6,6 0 0,1 12,18C11,18 10.03,17.75 9.2,17.3L7.74,18.76C8.97,19.54 10.43,20 12,20A8,8 0 0,0 20,12H23M6,12A6,6 0 0,1 12,6C13,6 13.97,6.25 14.8,6.7L16.26,5.24C15.03,4.46 13.57,4 12,4A8,8 0 0,0 4,12H1L5,16L9,12"></path>
</svg>
SH4 Compatibility Tool
</a>
</div>

+ 11
- 11
app/templates/base/navbar/tutorials.html.j2 View File

@@ -1,13 +1,13 @@
<div>
<h2>
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M12,3L1,9L12,15L21,10.09V17H23V9M5,13.18V17.18L12,21L19,17.18V13.18L12,17L5,13.18Z"></path>
</svg>
Tutoriels
</h2>
<a href="/tutoriels/basiccasio">Basic Casio</a>
<a href="/tutoriels/ccplusplus">C/C++ Casio</a>
<a href="/tutoriels/arduino">Arduino</a>
<hr>
<a href="/tutoriels/faq">Foire aux questions (FAQ)</a>
<h2>
<svg viewBox="0 0 24 24">
<path fill="#ffffff" d="M12,3L1,9L12,15L21,10.09V17H23V9M5,13.18V17.18L12,21L19,17.18V13.18L12,17L5,13.18Z"></path>
</svg>
Tutoriels
</h2>
<a href="/tutoriels/basiccasio">Basic Casio</a>
<a href="/tutoriels/ccplusplus">C/C++ Casio</a>
<a href="/tutoriels/arduino">Arduino</a>
<hr>
<a href="/tutoriels/faq">Foire aux questions (FAQ)</a>
</div>

+ 3
- 3
app/templates/index.html.j2 View File

@@ -2,8 +2,8 @@

{% block content %}
<section class="home-pinned-content">
<div>
<p>du contenu....</p>
</div>
<div>
<p>du contenu....</p>
</div>
</section>
{% endblock %}

+ 17
- 17
app/templates/login.html.j2 View File

@@ -3,23 +3,23 @@
{% block content %}
<h1>Sign In</h1>
<form action="" method="post">
{{ form.hidden_tag() }}
<p>
{{ form.username.label }}<br>
{{ form.username(size=32) }}<br>
{% for error in form.username.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form.password.label }}<br>
{{ form.password(size=32) }}<br>
{% for error in form.password.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
<p>{{ form.submit() }}</p>
{{ form.hidden_tag() }}
<p>
{{ form.username.label }}<br>
{{ form.username(size=32) }}<br>
{% for error in form.username.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form.password.label }}<br>
{{ form.password(size=32) }}<br>
{% for error in form.password.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
<p>{{ form.submit() }}</p>
</form>
<p>New User? <a href="{{ url_for('register') }}">Click to Register!</a></p>
{% endblock %}

+ 33
- 33
app/templates/register.html.j2 View File

@@ -3,39 +3,39 @@
{% block content %}
<section class="home-pinned-content">

<h1>Inscription :</h1>
<h1>Inscription :</h1>

<form action="" method="post">
{{ form2.hidden_tag() }}
<p>
{{ form2.username.label }}<br>
{{ form2.username(size=32) }}<br>
{% for error in form2.username.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form2.email.label }}<br>
{{ form2.email(size=64) }}<br>
{% for error in form2.email.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form2.password.label }}<br>
{{ form2.password(size=32) }}<br>
{% for error in form2.password.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form2.password2.label }}<br>
{{ form2.password2(size=32) }}<br>
{% for error in form2.password2.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form2.submit() }}</p>
</form>
<form action="" method="post">
{{ form2.hidden_tag() }}
<p>
{{ form2.username.label }}<br>
{{ form2.username(size=32) }}<br>
{% for error in form2.username.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form2.email.label }}<br>
{{ form2.email(size=64) }}<br>
{% for error in form2.email.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form2.password.label }}<br>
{{ form2.password(size=32) }}<br>
{% for error in form2.password.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form2.password2.label }}<br>
{{ form2.password2(size=32) }}<br>
{% for error in form2.password2.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form2.submit() }}</p>
</form>
</section>
{% endblock %}

+ 2
- 2
app/templates/validation.html.j2 View File

@@ -4,8 +4,8 @@
<section class="home-pinned-content">

<div>
<p>ici il y aura la page qui demande de checker les mails pour valider</p><br>
<a href="{{url_for('index')}}">Retour à la page d'acceuil</a>
<p>ici il y aura la page qui demande de checker les mails pour valider</p><br>
<a href="{{url_for('index')}}">Retour à la page d'acceuil</a>
</div>
</section>
{% endblock content %}

+ 4
- 4
config.py View File

@@ -3,7 +3,7 @@ basedir = os.path.abspath(os.path.dirname(__file__))


class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY') or 'a-random-secret-key'
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'app.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
SECRET_KEY = os.environ.get('SECRET_KEY') or 'a-random-secret-key'
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'app.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False

Loading…
Cancel
Save