<meta http-equiv="X-UA-Compatible" content="IE=edge"> | <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||||
<meta name="viewport" content="width=device-width, initial-scale=1"> | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
<title>COPIM online toolkit</title> | <title>COPIM online toolkit</title> | ||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css" /> | |||||
<!-- Bootstrap CSS --> | |||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> | |||||
</head> | </head> | ||||
<body> | <body> | ||||
<section class="hero is-primary is-fullheight"> | |||||
<div class="hero-head"> | |||||
<nav class="navbar"> | |||||
<div class="container"> | |||||
<div id="navbarMenuHeroA" class="navbar-menu"> | |||||
<div class="navbar-end"> | |||||
<a href="{{ url_for('main.index') }}" class="navbar-item"> | |||||
Home | |||||
</a> | |||||
{% if current_user.is_authenticated %} | |||||
<a href="{{ url_for('tool.create') }}" class="navbar-item"> | |||||
Add tool | |||||
</a> | |||||
{% endif %} | |||||
{% if current_user.is_authenticated %} | |||||
<a href="{{ url_for('main.profile') }}" class="navbar-item"> | |||||
Profile | |||||
</a> | |||||
{% endif %} | |||||
{% if not current_user.is_authenticated %} | |||||
<a href="{{ url_for('auth.login') }}" class="navbar-item"> | |||||
Login | |||||
</a> | |||||
<a href="{{ url_for('auth.signup') }}" class="navbar-item"> | |||||
Sign Up | |||||
</a> | |||||
{% endif %} | |||||
{% if current_user.is_authenticated %} | |||||
<a href="{{ url_for('auth.logout') }}" class="navbar-item"> | |||||
Logout | |||||
</a> | |||||
{% endif %} | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</nav> | |||||
<nav class="navbar navbar-expand-md navbar-light bg-light"> | |||||
<a class="navbar-brand" href="{{ url_for('main.index')}}">COPIM online toolkit</a> | |||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> | |||||
<span class="navbar-toggler-icon"></span> | |||||
</button> | |||||
<div class="collapse navbar-collapse" id="navbarNav"> | |||||
<ul class="navbar-nav"> | |||||
<li class="nav-item"> | |||||
<a href="{{ url_for('main.index') }}" class="nav-link"> | |||||
Home | |||||
</a> | |||||
</li> | |||||
{% if current_user.is_authenticated %} | |||||
<li class="nav-item"> | |||||
<a href="{{ url_for('tool.create') }}" class="nav-link"> | |||||
Add tool | |||||
</a> | |||||
</li> | |||||
{% endif %} | |||||
{% if current_user.is_authenticated %} | |||||
<li class="nav-item"> | |||||
<a href="{{ url_for('main.profile') }}" class="nav-link"> | |||||
Profile | |||||
</a> | |||||
</li> | |||||
{% endif %} | |||||
{% if not current_user.is_authenticated %} | |||||
<li class="nav-item"> | |||||
<a href="{{ url_for('auth.login') }}" class="nav-link"> | |||||
Login | |||||
</a> | |||||
</li> | |||||
<li class="nav-item"> | |||||
<a href="{{ url_for('auth.signup') }}" class="nav-link"> | |||||
Sign Up | |||||
</a> | |||||
</li> | |||||
{% endif %} | |||||
{% if current_user.is_authenticated %} | |||||
<li class="nav-item"> | |||||
<a href="{{ url_for('auth.logout') }}" class="nav-link"> | |||||
Logout | |||||
</a> | |||||
</li> | |||||
{% endif %} | |||||
</ul> | |||||
</div> | </div> | ||||
</nav> | |||||
<div class="hero-body"> | |||||
<div class="container has-text-centered"> | |||||
{% block content %} | |||||
{% endblock %} | |||||
<div class="container"> | |||||
{% with messages = get_flashed_messages() %} | |||||
{% if messages %} | |||||
<div class="alert alert-danger"> | |||||
{{ messages[0] }} | |||||
</div> | </div> | ||||
</div> | |||||
</section> | |||||
{% endif %} | |||||
{% endwith %} | |||||
{% block content %} | |||||
{% endblock %} | |||||
</div> | |||||
<!-- Optional JavaScript --> | |||||
<!-- jQuery first, then Popper.js, then Bootstrap JS --> | |||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> | |||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> | |||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> | |||||
</body> | </body> | ||||
</html> | </html> |
{% extends "base.html" %} | {% extends "base.html" %} | ||||
{% block content %} | {% block content %} | ||||
<div class="column is-4 is-offset-4"> | |||||
<h3 class="title">Add a new tool</h3> | |||||
<div class="box"> | |||||
{% with messages = get_flashed_messages() %} | |||||
{% if messages %} | |||||
<div class="notification is-danger"> | |||||
{{ messages[0] }} | |||||
</div> | |||||
{% endif %} | |||||
{% endwith %} | |||||
<h1>{% block title %} Add a New Tool {% endblock %}</h1> | |||||
<form method="POST" action="/create"> | <form method="POST" action="/create"> | ||||
<div class="field"> | |||||
<div class="control"> | |||||
<input class="input is-large" type="text" name="name" placeholder="Tool name" autofocus=""> | |||||
</div> | |||||
<div class="form-group"> | |||||
<label for="name">Name</label> | |||||
<input class="form-control" type="text" name="name" placeholder="Tool name" autofocus=""> | |||||
</div> | </div> | ||||
<div class="field"> | |||||
<div class="control"> | |||||
<textarea class="input is-large" type="text" name="description" placeholder="Tool description" autofocus=""></textarea> | |||||
</div> | |||||
<div class="form-group"> | |||||
<label for="description">Description</label> | |||||
<textarea class="form-control" type="text" name="description" placeholder="Tool description" autofocus=""></textarea> | |||||
</div> | </div> | ||||
<button class="button is-block is-info is-large is-fullwidth">Submit</button> | |||||
<button type="submit" class="btn btn-primary">Submit</button> | |||||
</form> | </form> | ||||
</div> | </div> | ||||
</div> | </div> |
{% extends "base.html" %} | {% extends "base.html" %} | ||||
{% block content %} | {% block content %} | ||||
<div class="column is-4 is-offset-4"> | |||||
<h3 class="title">Login</h3> | |||||
<div class="box"> | |||||
{% with messages = get_flashed_messages() %} | |||||
{% if messages %} | |||||
<div class="notification is-danger"> | |||||
{{ messages[0] }} | |||||
</div> | |||||
{% endif %} | |||||
{% endwith %} | |||||
<h1>{% block title %} Login {% endblock %}</h1> | |||||
<form method="POST" action="/login"> | <form method="POST" action="/login"> | ||||
<div class="field"> | |||||
<div class="control"> | |||||
<input class="input is-large" type="email" name="email" placeholder="Your Email" autofocus=""> | |||||
</div> | |||||
<div class="form-group"> | |||||
<input class="form-control" type="email" name="email" placeholder="Your Email" autofocus=""> | |||||
</div> | </div> | ||||
<div class="field"> | |||||
<div class="control"> | |||||
<input class="input is-large" type="password" name="password" placeholder="Your Password"> | |||||
</div> | |||||
<div class="form-group"> | |||||
<input class="form-control" type="password" name="password" placeholder="Your Password"> | |||||
</div> | </div> | ||||
<div class="field"> | |||||
<div class="form-group"> | |||||
<label class="checkbox"> | <label class="checkbox"> | ||||
<input type="checkbox"> | <input type="checkbox"> | ||||
Remember me | Remember me | ||||
</label> | </label> | ||||
</div> | </div> | ||||
<button class="button is-block is-info is-large is-fullwidth">Login</button> | |||||
<button class="btn btn-primary">Login</button> | |||||
</form> | </form> | ||||
</div> | |||||
</div> | |||||
{% endblock %} | {% endblock %} |
{% extends "base.html" %} | {% extends "base.html" %} | ||||
{% block content %} | {% block content %} | ||||
<div class="column is-4 is-offset-4"> | |||||
<h3 class="title">Sign Up</h3> | |||||
<div class="box"> | |||||
{% with messages = get_flashed_messages() %} | |||||
{% if messages %} | |||||
<div class="notification is-danger"> | |||||
{{ messages[0] }}. Go to <a href="{{ url_for('auth.login') }}">login page</a>. | |||||
</div> | |||||
{% endif %} | |||||
{% endwith %} | |||||
<h1>{% block title %} Sign Up {% endblock %}</h1> | |||||
<form method="POST" action="/signup"> | <form method="POST" action="/signup"> | ||||
<div class="field"> | |||||
<div class="control"> | |||||
<input class="input is-large" type="email" name="email" placeholder="Email" autofocus=""> | |||||
</div> | |||||
<div class="form-group"> | |||||
<input class="form-control" type="email" name="email" placeholder="Email" autofocus=""> | |||||
</div> | </div> | ||||
<div class="field"> | |||||
<div class="control"> | |||||
<input class="input is-large" type="text" name="name" placeholder="Name" autofocus=""> | |||||
</div> | |||||
<div class="form-group"> | |||||
<input class="form-control" type="text" name="name" placeholder="Name" autofocus=""> | |||||
</div> | </div> | ||||
<div class="field"> | |||||
<div class="control"> | |||||
<input class="input is-large" type="password" name="password" placeholder="Password"> | |||||
</div> | |||||
<div class="form-group"> | |||||
<input class="form-control" type="password" name="password" placeholder="Password"> | |||||
</div> | </div> | ||||
<button class="button is-block is-info is-large is-fullwidth">Sign Up</button> | |||||
<button class="btn btn-primary">Sign Up</button> | |||||
</form> | </form> | ||||
</div> | </div> | ||||
</div> | </div> |
from flask import Blueprint, render_template, request, flash | |||||
from flask import Blueprint, render_template, request, flash, redirect, url_for | |||||
from flask_login import login_required, current_user | from flask_login import login_required, current_user | ||||
from .models import Tool | from .models import Tool | ||||
from . import db | from . import db |