initial upload
This commit is contained in:
8
cao_blogr/templates/404.jinja2
Normal file
8
cao_blogr/templates/404.jinja2
Normal file
@@ -0,0 +1,8 @@
|
||||
{% extends "layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="content">
|
||||
<h1><span class="font-semi-bold">Pyramid</span> <span class="smaller">Starter project</span></h1>
|
||||
<p class="lead"><span class="font-semi-bold">404</span> Page Not Found</p>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
33
cao_blogr/templates/apropos.jinja2
Normal file
33
cao_blogr/templates/apropos.jinja2
Normal file
@@ -0,0 +1,33 @@
|
||||
{% extends "layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
<br />
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<div class="panel panel-default text-center">
|
||||
<div class="panel-body">
|
||||
<blockquote>
|
||||
L'argent qu'on possède est l'instrument de la liberté; celui qu'on pourchasse est celui de la servitude.
|
||||
</blockquote>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<h4>Rousseau</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-5">
|
||||
<div class="panel panel-default text-center">
|
||||
<div class="panel-body">
|
||||
<blockquote>
|
||||
L'intelligence ce n'est pas ce que l'on sait mais ce que l'on fait quand on ne sait pas.
|
||||
<br />
|
||||
</blockquote>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<h4>Jean Piaget</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
31
cao_blogr/templates/blog.jinja2
Normal file
31
cao_blogr/templates/blog.jinja2
Normal file
@@ -0,0 +1,31 @@
|
||||
{% extends "cao_blogr:templates/layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
{% if request.authenticated_userid %}
|
||||
<p>
|
||||
<a href="{{ request.route_url('home') }}">[ Retour ]</a>
|
||||
<a href="{{ request.route_url('blog_edit', id=entry.id) }}">[ Modifier ]</a>
|
||||
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<hr/>
|
||||
<p>{{ entry.body_html | safe }}</p>
|
||||
<hr/>
|
||||
{% if request.authenticated_userid %}
|
||||
<p>
|
||||
Topic : <strong>{{ entry.topic }}</strong>
|
||||
|
|
||||
Tag : <strong>{{ entry.tag }}</strong>
|
||||
|
|
||||
Créé le : <strong>{{ entry.created.strftime("%d-%m-%Y - %H:%M") }}</strong>
|
||||
|
|
||||
Modifié le : <strong>{{ entry.edited.strftime("%d-%m-%Y - %H:%M") }}</strong>
|
||||
</p>
|
||||
{% else %}
|
||||
<p>
|
||||
Créé : <strong title="{{ entry.created }}">{{ entry.created_in_words }}</strong>
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
51
cao_blogr/templates/blog_edit.jinja2
Normal file
51
cao_blogr/templates/blog_edit.jinja2
Normal file
@@ -0,0 +1,51 @@
|
||||
{% extends "cao_blogr:templates/layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
<form action="{{ url }}" method="post" class="form">
|
||||
|
||||
{% for error in form.title.errors %}
|
||||
<div class="error">{{ error }}</div>
|
||||
{% endfor %}
|
||||
<div class="form-group">
|
||||
<label for="title">{{ form.title.label }}</label>
|
||||
{{ form.title(class_='form-control') }}
|
||||
</div>
|
||||
|
||||
{% for error in form.body.errors %}
|
||||
<div class="error">{{ error }}</div>
|
||||
{% endfor %}
|
||||
<div class="form-group">
|
||||
<label for="body">{{ form.body.label }}</label>
|
||||
{{ form.body(class_='form-control', cols="35", rows="20") }}
|
||||
</div>
|
||||
|
||||
{% for error in form.topic.errors %}
|
||||
<div class="error">{{ error }}</div>
|
||||
{% endfor %}
|
||||
<div class="form-group">
|
||||
<label for="title">{{ form.topic.label }}</label>
|
||||
{{ form.topic(class_='form-control') }}
|
||||
</div>
|
||||
|
||||
{% for error in form.tag.errors %}
|
||||
<div class="text-danger">{{ error }}</div>
|
||||
{% endfor %}
|
||||
<div class="form-group">
|
||||
<label for="title">{{ form.tag.label }}</label>
|
||||
{{ form.tag(class_='form-control') }}
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<a class="btn btn-default" href="{{ request.route_url('home') }}"><span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||
{% if action == 'edit' %}
|
||||
<button class="btn btn-warning" type="submit" name="form.deleted">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
34
cao_blogr/templates/home.jinja2
Normal file
34
cao_blogr/templates/home.jinja2
Normal file
@@ -0,0 +1,34 @@
|
||||
{% extends "layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% if request.authenticated_userid %}
|
||||
<p><a href="{{ request.route_url('blog_edit', id='0') }}">
|
||||
[Nouveau post]</a>
|
||||
</p>
|
||||
{% endif%}
|
||||
|
||||
{% if paginator.items %}
|
||||
|
||||
{% for entry in paginator.items %}
|
||||
<div class="col-xs-10">
|
||||
{{ entry.created.strftime("%d-%m-%Y") }}
|
||||
<a href="{{ request.route_url('blog', id=entry.id, slug=entry.slug) }}">
|
||||
<span class="glyphicon glyphicon-triangle-right"></span> {{ entry.title }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-2">
|
||||
<span class="glyphicon glyphicon-triangle-left"></span> {{ entry.tag }}
|
||||
</div>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
{{ paginator.pager() |safe }}
|
||||
|
||||
{% else %}
|
||||
|
||||
<p>No blog entries found.</p>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
104
cao_blogr/templates/layout.jinja2
Normal file
104
cao_blogr/templates/layout.jinja2
Normal file
@@ -0,0 +1,104 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="pyramid web application">
|
||||
<link rel="shortcut icon" href="{{request.static_url('cao_blogr:static/pyramid-16x16.png')}}">
|
||||
|
||||
<title>{{page_title}}</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
|
||||
|
||||
<!-- Custom styles for this scaffold -->
|
||||
<link href="{{request.static_url('cao_blogr:static/theme.css')}}" rel="stylesheet">
|
||||
|
||||
<!-- HTML5 shiv and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js" integrity="sha384-0s5Pv64cNZJieYFkXYOTId2HMA2Lfb6q2nAcx2n0RTLUnCAoTTsS0nKEO27XyKcY" crossorigin="anonymous"></script>
|
||||
<script src="//oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js" integrity="sha384-ZoaMbDF+4LeFxg6WdScQ9nnR1QC2MIRxA1O9KWEXQwns1G8UNyIEZIQidzb0T1fo" crossorigin="anonymous"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<nav class="navbar navbar-default navbar-fixed-top">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="{{ request.route_url('home') }}">CTP Blog</a>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse" id="myNavbar">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li><a href="#band">TAGS</a></li>
|
||||
<li><a href="{{ request.route_url('apropos')}}">A PROPOS</a></li>
|
||||
<li><a href="{{ request.route_url('page_search') }}"><span class="glyphicon glyphicon-search"></span></a></li>
|
||||
<!-- si anonyme, lien pour se connecter -->
|
||||
{% if request.authenticated_userid %}
|
||||
<li><a href="{{request.route_url('logout')}}">
|
||||
<span class="glyphicon glyphicon-log-out"></span> {{request.authenticated_userid}}</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{request.route_url('login')}}"><span class="glyphicon glyphicon-log-in"></span></a></li>
|
||||
{% endif %}
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<!-- Container (The Page Template Section) -->
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<!-- Display Page Title -->
|
||||
{% if page_title %}
|
||||
<h1>{{ page_title }}</h1>
|
||||
{% endif %}
|
||||
<br />
|
||||
<div id="messages">
|
||||
{% for queue in ['', 'info', 'success', 'warning', 'danger'] %}
|
||||
{% for message in request.session.pop_flash(queue) %}
|
||||
<div class="alert alert-{{queue}}">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
{{ message }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<!-- display page content-->
|
||||
{% block content %}
|
||||
<p>No content</p>
|
||||
{% endblock content %}
|
||||
<br />
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="text-center">
|
||||
<div class="row">
|
||||
<p class="text-center">© 2017 - Phuoc Cao
|
||||
|
||||
{% if request.authenticated_userid == 'admin' %}
|
||||
 | <a href="{{request.route_url('users')}}" alt = "Utilisateurs">
|
||||
<span class="glyphicon glyphicon-user"></span></a>
|
||||
{% endif %}
|
||||
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- Bootstrap core JavaScript
|
||||
================================================== -->
|
||||
<!-- Placed at the end of the document so the pages load faster -->
|
||||
<script src="//code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
|
||||
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</html>
|
||||
28
cao_blogr/templates/login.jinja2
Normal file
28
cao_blogr/templates/login.jinja2
Normal file
@@ -0,0 +1,28 @@
|
||||
{% extends "layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-offset-4 col-md-5 well">
|
||||
|
||||
<form action="{{request.route_url('login')}}" method="post">
|
||||
<h2>Se connecter</h2>
|
||||
<div class="form-group">
|
||||
<input type="text" name="username" class="form-control" placeholder="Identifiant">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="password" name="password" class="form-control" placeholder="Mot de passe">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="submit" value="Se connecter" class="btn btn-primary">
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
|
||||
{% endblock %}
|
||||
34
cao_blogr/templates/user_add.jinja2
Normal file
34
cao_blogr/templates/user_add.jinja2
Normal file
@@ -0,0 +1,34 @@
|
||||
{% extends "cao_blogr:templates/layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<form action="{{request.route_url('user_add', name=name)}}" method="post" class="form">
|
||||
|
||||
{% for error in form.username.errors %}
|
||||
<div class="error">{{ error }}</div>
|
||||
{% endfor %}
|
||||
|
||||
<div class="form-group">
|
||||
<label for="title">{{form.username.label}}</label>
|
||||
{{form.username(class_='form-control')}}
|
||||
</div>
|
||||
|
||||
{% for error in form.password.errors %}
|
||||
<div class="error">{{error}}</div>
|
||||
{% endfor %}
|
||||
|
||||
<div class="form-group">
|
||||
<label for="body">{{form.password.label}}</label>
|
||||
{{form.password(class_='form-control')}}
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<a class="btn btn-default" href="{{ request.route_url('users') }}"><span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
30
cao_blogr/templates/user_pwd.jinja2
Normal file
30
cao_blogr/templates/user_pwd.jinja2
Normal file
@@ -0,0 +1,30 @@
|
||||
{% extends "cao_blogr:templates/layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<form action="{{ request.route_url('user_pwd', name=entry.name) }}" method="post" class="form">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password">Nouveau mot de passe</label></label>
|
||||
<input type="password" name="new_password" class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="form-control-static text-success">
|
||||
<strong>Dernière connexion</strong> :
|
||||
{{ entry.last_logged.strftime("%d-%m-%Y - %H:%M") }}</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<a class="btn btn-default" href="{{ request.route_url('users') }}"><span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||
{% if name != 'new' %}
|
||||
<button class="btn btn-warning" type="submit" name="form.deleted">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
32
cao_blogr/templates/users.jinja2
Normal file
32
cao_blogr/templates/users.jinja2
Normal file
@@ -0,0 +1,32 @@
|
||||
{% extends "layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
<p>
|
||||
<a href="{{ request.route_url('home' ) }}" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<a href="{{ request.route_url('user_add', name='new') }}" class="btn btn-success" role="button">
|
||||
<span class="glyphicon glyphicon-plus"></span> Nouvel utilisateur</a>
|
||||
</p>
|
||||
|
||||
<table id="users_list" class="table table-striped table-bordered table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>No Id</th>
|
||||
<th>Nom</th>
|
||||
<th>Dernière connexion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for entry in users %}
|
||||
<tr>
|
||||
<td>{{ entry.id }}</td>
|
||||
<td>
|
||||
<a href="{{ request.route_url('user_pwd', name=entry.name) }}">
|
||||
{{ entry.name }}
|
||||
</a>
|
||||
</td>
|
||||
<td>{{ entry.last_logged.strftime("%d-%m-%Y - %H:%M") }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user