Initial commit

This commit is contained in:
2018-03-31 18:26:40 +02:00
commit 94f0009144
54 changed files with 9069 additions and 0 deletions

6
templates/404.html Normal file
View File

@@ -0,0 +1,6 @@
{% extends "base.html" %}
{% set page_title = '404' %}
{% block title_actions %}
<small>Page could not be found</small>
{% endblock %}

View File

@@ -0,0 +1,56 @@
{% macro render_field(field, prefix=None, suffix=None, layout=True, label=True) %}
{% if field.type == 'HiddenField' %}
{{ field(**kwargs) }}
{% else %}
{% if layout %}
<div class="form-group{% if field.errors %} has-error{% endif %}">
{% if field.type == 'BooleanField' %}
<div class="col-xs-3"></div>
{% elif label %}
{{ field.label(class_='col-xs-3 control-label') }}
{% endif %}
<div class="col-xs-9">
{% endif %}
{{ render_field_inner(field, prefix, suffix, label=label, **kwargs) }}
{% if layout %}
</div>
</div>
{% endif %}
{% endif %}
{% endmacro %}
{% macro render_field_inner(field, prefix=None, suffix=None, label=True) %}
{% if field.type == 'BooleanField' %}<div class="checkbox"><label for="{{ field.id }}">{% endif %}
{% if prefix or suffix %}<div class="input-group">{% endif %}
{% if prefix %}<span class="input-group-addon">{{ prefix }}</span>{% endif %}
{% if field.type == 'BooleanField' %}
{{ field(**kwargs) }} {% if label %}{{ field.label.text }}{% endif %}
{% else %}
{{ field(class_='form-control', **kwargs) }}
{% endif %}
{% if suffix %}<span class="input-group-addon">{{ suffix }}</span>{% endif %}
{% if prefix or suffix %}</div>{% endif %}
{% if field.description %}
<span class="help-block">{{ field.description }}</span>
{% endif %}
{% if field.errors %}
{% for error in field.errors %}
<span class="help-block">{{ error }}</span>
{% endfor %}
{% endif %}
{% if field.type == 'BooleanField' %}</label></div>{% endif %}
{% endmacro %}
{% macro render_submit(label='Submit', class_='btn btn-primary', layout=True) %}
{% if layout %}
<div class="form-group">
<div class="col-xs-9 col-xs-offset-3">
{% endif %}
<button type="submit" class="{{ class_ }}">{{ label }}</button>
{% if layout %}
</div>
</div>
{% endif %}
{% endmacro %}

View File

@@ -0,0 +1,32 @@
{% macro social_register(provider_id, display_name) %}
<form action="{{ url_for('social.login', provider_id=provider_id) }}" method="POST">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<button type="submit" class="btn btn-primary btn-large">Register with {{ display_name }}</button>
</form>
{% endmacro %}
{% macro social_login(provider_id, display_name) %}
<form action="{{ url_for('social.login', provider_id=provider_id) }}" method="POST">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<button type="submit" class="btn btn-primary btn-large">Login with {{ display_name }}</button>
</form>
{% endmacro %}
{% macro show_provider_button(provider_id, display_name, conn, btn_type='primary') %}
{% if conn %}
{#
<form action="{{ url_for('social.remove_connection', provider_id=conn.provider_id, provider_user_id=conn.provider_user_id) }}?__METHOD_OVERRIDE__=DELETE" method="POST">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<div class="btn-group" role="group" aria-label="...">
<button type="submit" class="btn btn-{{ btn_type }}">Disconnect {{ display_name }}</button>
</div>
</form>
#}
<button type="button" class="btn btn-default invite-friends">Invite {{ display_name }} friends&nbsp;&nbsp;<i class="glyphicon glyphicon-share-alt"></i></button>
{% else %}
<form action="{{ url_for('social.connect', provider_id=provider_id) }}" method="POST">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<button type="submit" class="btn btn-{{ btn_type }}">Connect {{ display_name }}</button>
</form>
{% endif %}
{% endmacro %}

View File

@@ -0,0 +1,32 @@
{% import 'admin/static.html' as admin_static with context %}
{% macro dropdown(actions, btn_class='dropdown-toggle') -%}
<a class="{{ btn_class }}" data-toggle="dropdown" href="javascript:void(0)"><b>{{ _gettext('With selected') }}</b><b class="caret"></b></a>
<ul class="dropdown-menu">
{% for p in actions %}
<li>
<a href="javascript:void(0)" onclick="return modelActions.execute('{{ p[0] }}');">{{ _gettext(p[1]) }}</a>
</li>
{% endfor %}
</ul>
{% endmacro %}
{% macro form(actions, url) %}
{% if actions %}
<form id="action_form" action="{{ url }}" method="POST" style="display: none">
{% if csrf_token %}
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
{% endif %}
<input type="hidden" id="action" name="action" />
</form>
{% endif %}
{% endmacro %}
{% macro script(message, actions, actions_confirmation) %}
{% if actions %}
<script src="{{ admin_static.url(filename='admin/js/actions-1.0.0.js') }}"></script>
<script language="javascript">
var modelActions = new AdminModelActions({{ message|tojson|safe }}, {{ actions_confirmation|tojson|safe }});
</script>
{% endif %}
{% endmacro %}

27
templates/admin/base.html Normal file
View File

@@ -0,0 +1,27 @@
{% extends 'base.html' %}
{% import 'admin/layout.html' as layout with context -%}
{% import 'admin/static.html' as admin_static with context %}
{% block head_css %}{{ super() }}
<link href="{{ admin_static.url(filename='admin/css/bootstrap3/admin.css') }}" rel="stylesheet">
{% endblock %}
{% block content %}
<div class="col-md-2">
<ul class="nav nav-pills nav-stacked">
{{ layout.menu() }}
{{ layout.menu_links() }}
</ul>
</div>
<div class="col-md-10">
{% set render_ctx = h.resolve_ctx() %}
{% block body %}{% endblock %}
</div>
{% endblock %}
{% block tail_js %}{{ super() }}
<script src="{{ admin_static.url(filename='vendor/moment-2.8.4.min.js') }}" type="text/javascript"></script>
<script src="{{ admin_static.url(filename='vendor/select2/select2.min.js') }}" type="text/javascript"></script>
{{ pagedown.include_pagedown() }}
{% endblock %}

View File

@@ -0,0 +1,18 @@
{% extends 'admin/model/list.html' %}
{% block list_row_actions %}{{ super() }}
{% if admin_view.can_impersonate %}
<form class="icon" method="POST" action="{{ get_url('.impersonate_view') }}">
{{ delete_form.id(value=get_pk_value(row)) }}
{{ delete_form.url(value=return_url) }}
{% if delete_form.csrf_token %}
{{ delete_form.csrf_token }}
{% elif csrf_token %}
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
{% endif %}
<button onclick="return confirm('{{ _gettext('Are you sure you want to impersonate as this user?') }}');" title="Impersonate user">
<span class="glyphicon glyphicon-eye-open"></span>
</button>
</form>
{% endif %}
{% endblock %}

123
templates/base.html Normal file
View File

@@ -0,0 +1,123 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
{% block head_meta %}
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
{% endblock %}
<title>{{ config['PROJECT_NAME'] }}{% if page_title %} - {{ page_title }}{% endif %}</title>
{% block head_css %}
<link rel="stylesheet" href="{{ static('css/bootstrap.css') }}" media="screen">
<link rel="stylesheet" href="{{ static('css/base.css') }}" media="screen">
{% endblock -%}
{%- block head %}{% endblock -%}
{%- block head_tail -%}{%- endblock -%}
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<a href="/" class="navbar-brand"><i class="glyphicon glyphicon-stats"></i>&nbsp;{{ config['PROJECT_NAME'] }}
{%- if config['DEBUG'] or config.get('BRAND_NOTE') %} <small>{{ config.get('BRAND_NOTE', 'development') }}</small>{% endif -%}
</a>
<button class="navbar-toggle" type="button" data-toggle="collapse" data-target="#navbar-main">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="navbar-collapse collapse" id="navbar-main">
{% macro navbar_link(href, title=None) %}
<li{% if href == request.endpoint and request.view_args == kwargs %} class="active"{% endif %}>
<a href="{{ url_for(href, **kwargs) }}">{% if not title %}{{ caller() }}{% else %}{{ title }}{% endif %}</a>
</li>
{% endmacro %}
{% block main_menu %}
{# Here add your main menu items, eg: #}
{# navbar_link('friends.index', 'Friends') #}
{% endblock %}
<ul class="nav navbar-nav navbar-right">
{{ navbar_link('flatpages.show', 'FAQ', slug='faq') }}
{% if current_user.is_authenticated() %}
{% if current_user.is_superuser or current_user.roles %}
{{ navbar_link('admin.index', 'Admin') }}
{% endif %}
<p class="navbar-text">{{ current_user }}</p>
{{ navbar_link('security.logout', 'Logout') }}
{% else %}
{{ navbar_link('security.register', 'Sign up') }}
{{ navbar_link('security.login', 'Login') }}
{% endif %}
</ul>
</div>
</div>
</div>
<div class="container">
{% block messages %}
{% with messages = get_flashed_messages(with_categories=True) +
config.get('GLOBAL_FLASHED_MESSAGES', []) %}
{% if messages %}
{% for category, message in messages %}
{% set category = 'info' if category == 'message' else category %}
<div class="alert alert-{{ category }}">
{{ message }}
</div>
{% endfor %}
{% endif %}
{% endwith %}
{% endblock %}
{% block page_title %}
{% if page_title %}
<h1 class="page-header">{{ page_title }}
{% block title_actions %}
{% endblock %}
</h1>
{% endif %}
{% endblock %}
{% block content %}{% endblock %}
</div>
</div>
<footer class="container text-right">
{{ config['PROJECT_NAME'] }}
</footer>
{% block tail_js %}
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="{{ static('js/bootstrap.min.js') }}"></script>
<script src="{{ static('js/scripts.js') }}"></script>
{% if config.get('SOCIAL_FACEBOOK') %}
<!-- Facebook SDK START -->
<script>
window.fbAsyncInit = function() {
FB.init({
appId : {{ config['SOCIAL_FACEBOOK']['consumer_key'] }},
cookie : true,
xfbml : true,
version : 'v2.3',
});
};
// Load the SDK asynchronously
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<!-- Facebook SDK END -->
{% endif %}
{% endblock -%}
{%- block tail %}
{% endblock %}
</body>
</html>

View File

@@ -0,0 +1,17 @@
{% extends "base.html" %}
{% set page_title = page.title %}
{% block content %}
{% if page.content %}
{{ page.content|markdown }}
{% endif %}
{% if page.subpages %}
<hr>
<ul>
{% for sub in page.subpages %}
<li><a href="{{ url_for('flatpages.show', slug=sub.slug) }}">{{ sub.title }}</a></li>
{% endfor %}
</ul>
{% endif %}
{% endblock %}

4
templates/index.html Normal file
View File

@@ -0,0 +1,4 @@
{% extends "base.html" %}
{% block content -%}
{%- endblock %}

View File

@@ -0,0 +1,13 @@
{% extends "base.html" %}
{% set page_title = 'Change password' %}
{% from "_formhelpers.html" import render_field, render_submit %}
{% block content %}
<form action="{{ url_for_security('change_password') }}" method="POST" class="form-horizontal col-md-6 col-md-offset-3">
{{ change_password_form.hidden_tag() }}
{{ render_field(change_password_form.password) }}
{{ render_field(change_password_form.new_password) }}
{{ render_field(change_password_form.new_password_confirm) }}
{{ render_submit() }}
</form>
{% endblock %}

View File

@@ -0,0 +1,15 @@
{% extends "base.html" %}
{% set page_title = 'Registration' %}
{% from "_formhelpers.html" import render_field, render_submit %}
{% block content %}
<form action="{{ url_for('friends.confirm_social') }}" method="POST" class="form-horizontal col-md-6 col-md-offset-3">
{{ form.hidden_tag() }}
<div class="col-xs-9 col-xs-offset-3">
<span class="help-block">You will be registered as <strong>{{ session['failed_login_connection']['full_name'] }}</strong>.</span>
<span class="help-block">Please confirm your address.</span>
</div>
{{ render_field(form.email) }}
{{ render_submit() }}
</form>
{% endblock %}

View File

@@ -0,0 +1,11 @@
{% extends "base.html" %}
{% set page_title = 'Password reset' %}
{% from "_formhelpers.html" import render_field, render_submit %}
{% block content %}
<form action="{{ url_for_security('forgot_password') }}" method="POST" class="form-horizontal col-md-6 col-md-offset-3">
{{ forgot_password_form.hidden_tag() }}
{{ render_field(forgot_password_form.email) }}
{{ render_submit() }}
</form>
{% endblock %}

View File

@@ -0,0 +1,12 @@
{% extends "base.html" %}
{% set page_title = 'Invitation' %}
{% from "_formhelpers.html" import render_field, render_submit %}
{% block content %}
<form action="{{ url_for('friends.invited', token=invite_token) }}" method="POST" class="form-horizontal col-md-6 col-md-offset-3">
{{ invite_form.hidden_tag() }}
{{ render_field(invite_form.password) }}
{{ render_field(invite_form.password_confirm) }}
{{ render_submit() }}
</form>
{% endblock %}

View File

@@ -0,0 +1,23 @@
{% extends "base.html" %}
{% set page_title = 'Login' %}
{% from "_formhelpers.html" import render_field, render_submit %}
{% from "_socialhelpers.html" import social_login %}
{% block content %}
<form action="{{ url_for_security('login') }}" method="POST" class="form-horizontal col-md-6 col-md-offset-3">
{{ login_user_form.hidden_tag() }}
{{ render_field(login_user_form.email) }}
{{ render_field(login_user_form.password) }}
{{ render_field(login_user_form.remember) }}
{{ render_field(login_user_form.next) }}
<div class="form-group">
<div class="col-xs-9 col-xs-offset-3">
{{ render_submit(layout=False) }}
<a href="{{ url_for_security('forgot_password') }}" class="btn btn-default">Forgot password?</a>
</div>
</div>
</form>
<div class="col-md-3">
{{ social_login('facebook', 'Facebook') }}
</div>
{% endblock %}

View File

@@ -0,0 +1,20 @@
{% extends "base.html" %}
{% set page_title = 'Registration' %}
{% from "_formhelpers.html" import render_field, render_submit %}
{% from "_socialhelpers.html" import social_register %}
{% block content %}
<div class="container-fluid">
<div class="col-md-6 col-md-offset-3">
<form action="{{ url_for_security('register') }}" method="POST" class="form-horizontal">
{{ register_user_form.hidden_tag() }}
{{ render_field(register_user_form.email) }}
{{ render_field(register_user_form.password) }}
{{ render_submit() }}
</form>
</div>
<div class="col-md-3">
{{ social_register('facebook', 'Facebook') }}
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,12 @@
{% extends "base.html" %}
{% set page_title = 'Password reset' %}
{% from "_formhelpers.html" import render_field, render_submit %}
{% block content %}
<form action="{{ url_for_security('reset_password', token=reset_password_token) }}" method="POST" class="form-horizontal col-md-6 col-md-offset-3">
{{ reset_password_form.hidden_tag() }}
{{ render_field(reset_password_form.password) }}
{{ render_field(reset_password_form.password_confirm) }}
{{ render_submit() }}
</form>
{% endblock %}