Merge branch 'master' into oauth_redirect
# Conflicts: # realms/modules/auth/views.py
This commit is contained in:
commit
2ce6c2d314
41 changed files with 350 additions and 213 deletions
|
@ -1,29 +0,0 @@
|
|||
{% from 'macros.html' import render_form, render_field %}
|
||||
{% if config.get('AUTH_LOCAL_ENABLE') %}
|
||||
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#ldap-modal">
|
||||
<i class="fa fa-folder-open-o"></i> Login with LDAP
|
||||
</button>
|
||||
|
||||
<div class="modal fade" id="ldap-modal" tabindex="-1" role="dialog" aria-labelledby="ldap-login">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="ldap-login">LDAP Login</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
{% call render_form(form, action_url=url_for('auth.ldap.login'), action_text='Login', btn_class='btn btn-primary') %}
|
||||
{{ render_field(form.username, placeholder='Username', type='text', required=1) }}
|
||||
{{ render_field(form.password, placeholder='Password', type='password', required=1) }}
|
||||
{% endcall %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<h3><i class="fa fa-folder-open-o"></i> LDAP Login</h3>
|
||||
{% call render_form(form, action_url=url_for('auth.ldap.login'), action_text='Login', btn_class='btn btn-primary') %}
|
||||
{{ render_field(form.username, placeholder='Username', type='text', required=1) }}
|
||||
{{ render_field(form.password, placeholder='Password', type='password', required=1) }}
|
||||
{% endcall %}
|
||||
{% endif %}
|
|
@ -1,5 +0,0 @@
|
|||
{% from 'macros.html' import render_form, render_field %}
|
||||
{% call render_form(form, action_url=url_for('auth.local.login'), action_text='Login', btn_class='btn btn-primary') %}
|
||||
{{ render_field(form.email, placeholder='Email', type='email', required=1) }}
|
||||
{{ render_field(form.password, placeholder='Password', type='password', required=1) }}
|
||||
{% endcall %}
|
|
@ -1,4 +0,0 @@
|
|||
{% extends 'layout.html' %}
|
||||
{% block body %}
|
||||
{{ forms|safe }}
|
||||
{% endblock %}
|
|
@ -1,13 +0,0 @@
|
|||
{% extends 'layout.html' %}
|
||||
{% from 'macros.html' import render_form, render_field %}
|
||||
{% block body %}
|
||||
{% call render_form(form, action_url=url_for('auth.local.register'), action_text='Register', btn_class='btn btn-primary') %}
|
||||
{{ render_field(form.username, placeholder='Username', type='username', **{"required": 1, "data-parsley-type": "alphanum"}) }}
|
||||
{{ render_field(form.email, placeholder='Email', type='email', required=1) }}
|
||||
{{ render_field(form.password, placeholder='Password', type='password', **{"required": 1, "data-parsley-minlength": "6"}) }}
|
||||
{{ render_field(form.confirm, placeholder='Confirm Password', type='password', **{"required": 1, "data-parsley-minlength": "6"}) }}
|
||||
{% if config.RECAPTCHA_ENABLE %}
|
||||
{{ render_field(form.recaptcha) }}
|
||||
{% endif %}
|
||||
{% endcall %}
|
||||
{% endblock %}
|
|
@ -1,5 +0,0 @@
|
|||
{% extends 'layout.html' %}
|
||||
{% from 'macros.html' import render_form, render_field %}
|
||||
{% block body %}
|
||||
|
||||
{% endblock %}
|
|
@ -2,5 +2,8 @@
|
|||
{% block body %}
|
||||
|
||||
<h1>Page Not Found</h1>
|
||||
{% if error is defined %}
|
||||
<h4>{{ error.description }}</h4>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
</div>
|
||||
</form>
|
||||
</li>
|
||||
{% if current_user.is_authenticated() %}
|
||||
{% if current_user.is_authenticated %}
|
||||
<li class="dropdown user-avatar">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
||||
<span>
|
||||
|
@ -109,7 +109,7 @@
|
|||
{% endfor %}
|
||||
|
||||
var User = {};
|
||||
User.is_authenticated = {{ current_user.is_authenticated()|tojson }};
|
||||
User.is_authenticated = {{ current_user.is_authenticated|tojson }};
|
||||
{% for attr in ['username', 'email'] %}
|
||||
User.{{ attr }} = {{ current_user[attr]|tojson }};
|
||||
{% endfor %}
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
{% extends 'layout.html' %}
|
||||
{% block body %}
|
||||
{% if results %}
|
||||
<h3>Results for <em class="text-info">{{ request.args.get('q') }}</em></h3>
|
||||
<div class="list-group">
|
||||
{% for r in results %}
|
||||
<a href="{{ url_for('wiki.page', name=r['name']) }}" class="list-group-item">
|
||||
<h4 class="list-group-item-heading">{{ r['name'] }}</h4>
|
||||
<p class="list-group-item-text">
|
||||
{{ r['content'][:100] }}
|
||||
</p>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
<h3>No results found for <em class="text-info">{{ request.args.get('q') }}</em></h3>
|
||||
{% endif %}
|
||||
{% endblock %}
|
|
@ -1,16 +0,0 @@
|
|||
{% extends 'layout.html' %}
|
||||
{% block body %}
|
||||
|
||||
<h2>History for <strong>{{ name }}</strong></h2>
|
||||
<div class="pull-right">
|
||||
<a href="{{ url_for('wiki.commit', name=name, sha=old) }}" class="btn btn-default btn-sm">View Old</a>
|
||||
<a href="{{ url_for('wiki.commit', name=name, sha=new) }}" class="btn btn-info btn-sm">View New</a>
|
||||
</div>
|
||||
<p>
|
||||
<a class="btn btn-default btn-sm" href="{{ url_for('wiki.history', name=name) }}">Back to History</a>
|
||||
</p>
|
||||
{{ diff|safe }}
|
||||
<p>
|
||||
<a class="btn btn-default btn-sm" href="{{ url_for('wiki.history', name=name) }}">Back to History</a>
|
||||
</p>
|
||||
{% endblock %}
|
|
@ -1,173 +0,0 @@
|
|||
{% extends 'layout.html' %}
|
||||
{% block js %}
|
||||
<script>
|
||||
var Commit = {};
|
||||
Commit.info = {{ info|tojson }};
|
||||
|
||||
var PAGE_NAME = '{{ name }}';
|
||||
</script>
|
||||
<script src="{{ url_for('static', filename='js/editor.js') }}"></script>
|
||||
|
||||
{% if partials %}
|
||||
<script>
|
||||
$(function() {
|
||||
{% for name, value in partials.items() %}
|
||||
{% if name and value %}
|
||||
try {
|
||||
Handlebars.registerPartial({{ name|tojson|safe }}, {{ value.data|tojson|safe }});
|
||||
} catch (e) {
|
||||
// no data?
|
||||
}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if config.get('COLLABORATION') %}
|
||||
<script src="{{ url_for('static', filename='js/collaboration/main.js') }}"></script>
|
||||
{% endif %}
|
||||
|
||||
{% if config.get('COLLABORATION') == 'firepad' %}
|
||||
<script>
|
||||
Config['FIREBASE_HOSTNAME'] = {{ config.get('FIREBASE_HOSTNAME')|tojson }};
|
||||
</script>
|
||||
<script src="https://cdn.firebase.com/js/client/1.0.17/firebase.js"></script>
|
||||
<script src="https://cdn.firebase.com/libs/firepad/1.0.0/firepad.min.js"></script>
|
||||
<script src="{{ url_for('static', filename='js/collaboration/firepad.js') }}"></script>
|
||||
{% endif %}
|
||||
|
||||
{% if config.get('COLLABORATION') == 'togetherjs' %}
|
||||
<script src="{{ url_for('static', filename='js/collaboration/togetherjs.js') }}"></script>
|
||||
<script src="https://togetherjs.com/togetherjs-min.js"></script>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div id="app-wrap">
|
||||
<div id="app-controls" class="row">
|
||||
<div class="col-xs-4 col-md-3">
|
||||
<input id="page-name" type="text" class="form-control input-sm" name="name"
|
||||
placeholder="Name" value="{{- name -}}" />
|
||||
</div>
|
||||
<div class="col-xs-4 col-md-3">
|
||||
<input id="page-message" type="text" class="form-control input-sm" name="page-message"
|
||||
placeholder="Comment" value="" />
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-xs-4 text-right">
|
||||
|
||||
{% if config.get('COLLABORATION') %}
|
||||
<div class="btn-group">
|
||||
<button style='display:none' class="btn btn-danger btn-sm" id="end-collaboration">
|
||||
<i class="fa fa-comments-o"></i>
|
||||
<span class="hidden-xs">End Collaboration</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="btn-group">
|
||||
<button style='display:none' class="btn btn-default btn-sm" id="loading-collaboration" type="button">
|
||||
<i class="fa fa-cog fa-spin"></i>
|
||||
<span class="hidden-xs">Loading</span>
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="dropdown btn-group">
|
||||
<button class="btn btn-default btn-sm dropdown-toggle" type="button" id="editor-actions"
|
||||
data-toggle="dropdown" title="Actions">
|
||||
<i class="fa fa-cog"></i>
|
||||
<span class="hidden-xs hidden-sm">Actions <i class="fa fa-caret-down"></i></span>
|
||||
</button>
|
||||
|
||||
<ul class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="editor-actions">
|
||||
{% if config.get('COLLABORATION') %}
|
||||
<li role="presentation">
|
||||
<a role="menuitem" tabindex="-1" href="#" id="start-collaboration">Collaborate</a>
|
||||
</li>
|
||||
<li role="presentation" class="divider"></li>
|
||||
{% endif %}
|
||||
<li role="presentation">
|
||||
<a role="menuitem" tabindex="-1" href="#" id="discard-draft-btn">Delete Draft</a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a role="menuitem" tabindex="-1" href="#" id="delete-page-btn">Delete Page</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="dropdown btn-group">
|
||||
<button id="theme-list-btn" type="button" class="dropdown-toggle btn btn-default btn-sm"
|
||||
data-toggle="dropdown" title="Change Theme">
|
||||
<i class="fa fa-paint-brush"></i>
|
||||
<span class="hidden-xs hidden-sm">Theme <i class="fa fa-caret-down"></i></span>
|
||||
</button>
|
||||
<ul id="theme-list" class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="theme-list">
|
||||
<li><a tabindex="-1" href="#" data-value="chrome" >Chrome</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="clouds" >Clouds</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="clouds_midnight" >Clouds Midnight</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="cobalt" >Cobalt</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="crimson_editor" >Crimson Editor</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="dawn" class="selected">Dawn</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="dreamweaver" >Dreamweaver</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="eclipse" >Eclipse</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="idle_fingers" >idleFingers</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="kr_theme" >krTheme</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="merbivore" >Merbivore</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="merbivore_soft" >Merbivore Soft</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="mono_industrial" >Mono Industrial</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="monokai" >Monokai</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="pastel_on_dark">Pastel on Dark</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="solarized_dark" >Solarized Dark</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="solarized_light" >Solarized Light</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="textmate" >TextMate</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="tomorrow" >Tomorrow</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="tomorrow_night">Tomorrow Night</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="tomorrow_night_blue" >Tomorrow Night Blue</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="tomorrow_night_bright" >Tomorrow Night Bright</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="tomorrow_night_eighties" >Tomorrow Night 80s</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="twilight" >Twilight</a></li>
|
||||
<li><a tabindex="-1" href="#" data-value="vibrant_ink" >Vibrant Ink</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="btn-group">
|
||||
{% if name in config['WIKI_LOCKED_PAGES'] %}
|
||||
<a class="btn btn-danger btn-sm">
|
||||
<i class="fa fa-lock"></i>
|
||||
<span class="hidden-xs">Locked</span>
|
||||
</a>
|
||||
{% else %}
|
||||
<a id="submit-btn" class="btn btn-primary btn-sm">
|
||||
<i class="fa fa-save"></i>
|
||||
<span class="hidden-xs">Save</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="entry-markdown active">
|
||||
<header class="floatingheader" id="entry-markdown-header">
|
||||
<small>Markdown</small>
|
||||
<a class="markdown-help" href=""><span class="hidden">What is Markdown?</span></a>
|
||||
</header>
|
||||
<section id="entry-markdown-content" class="entry-markdown-content">
|
||||
<div id="editor-{{ name | b64encode }}" data-submitbtn='submit-btn' data-themeselect="theme-list" data-mode="markdown"
|
||||
data-preview="preview" class="editor">{{ content }}</div>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<section class="entry-preview">
|
||||
<header class="floatingheader" id="entry-preview-header">
|
||||
<small>Preview</small>
|
||||
</header>
|
||||
<section class="entry-preview-content">
|
||||
<div id="preview"></div>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -1,60 +0,0 @@
|
|||
{% extends 'layout.html' %}
|
||||
{% block body %}
|
||||
|
||||
<h2>History for <strong>{{ name }}</strong></h2>
|
||||
<p>
|
||||
<a class="btn btn-default btn-sm compare-revisions">Compare Revisions</a>
|
||||
</p>
|
||||
|
||||
<table class="table table-bordered revision-tbl">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Name</th>
|
||||
<th>Revision Message</th>
|
||||
<th>Date</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for h in history %}
|
||||
<tr>
|
||||
<td class="checkbox-cell text-center">
|
||||
{% if h.type != 'delete' %}
|
||||
<input type="checkbox" name="versions[]" value="{{ h.sha }}" />
|
||||
{% endif %}
|
||||
</td>
|
||||
<td><img src="{{ h.gravatar }}?s=20" class="avatar"/> {{ h.author }}</td>
|
||||
<td><a href="{{ url_for('wiki.commit', name=name, sha=h.sha) }}" class='label label-primary'>View</a> {{ h.message }} </td>
|
||||
<td>{{ h.time|datetime }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
<p>
|
||||
<a class="btn btn-default btn-sm compare-revisions">Compare Revisions</a>
|
||||
</p>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script>
|
||||
$(function(){
|
||||
$('.revision-tbl :checkbox').change(function () {
|
||||
var $cs=$(this).closest('.revision-tbl').find(':checkbox:checked');
|
||||
if ($cs.length > 2) {
|
||||
this.checked=false;
|
||||
}
|
||||
});
|
||||
|
||||
$(".compare-revisions").click(function(){
|
||||
var $cs = $('.revision-tbl').find(':checkbox:checked');
|
||||
if ($cs.length != 2) return;
|
||||
var revs = [];
|
||||
$.each($cs, function(i, v){
|
||||
revs.push(v.value);
|
||||
});
|
||||
revs.reverse();
|
||||
revs = revs.join("..");
|
||||
location.href = "{{ config.RELATIVE_PATH }}/_compare/{{ name }}/" + revs;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
|
@ -1,43 +0,0 @@
|
|||
{% extends 'layout.html' %}
|
||||
|
||||
{% block js %}
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('.data-table').dataTable({'aaSorting': [[0, "asc"], [1, "asc"]]});
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h2>Index of <a href="{{ url_for('wiki.index') }}">/</a>
|
||||
{%- set parts = path.split('/') -%}
|
||||
{%- for dir in parts if dir -%}
|
||||
<a href="{{ url_for('wiki.index', path='/'.join(parts[:loop.index])) }}">{{ dir }}/</a>
|
||||
{%- endfor -%}
|
||||
</h2>
|
||||
<table class="table table-bordered data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 1px;"></th>
|
||||
<th>Name</th>
|
||||
<th class="hidden-xs">Bytes</th>
|
||||
<th class="hidden-xs hidden-sm">Created</th>
|
||||
<th>Modified</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for file in index %}
|
||||
<tr>
|
||||
{% if file['dir'] %}
|
||||
<td><i class="fa fa-folder-open-o"><span style="display:none;">Dir</span></i></td>
|
||||
<td><a href="{{ url_for('wiki.index', path=file['name']) }}">{{ file['name'][path|length:] }}</a></td>
|
||||
{% else %}
|
||||
<td><i class="fa fa-file-text-o"><span style="display:none;">Page</span></i></td>
|
||||
<td><a href="{{ url_for('wiki.page', name=file['name']) }}">{{ file['name'][path|length:] }}</a></td>
|
||||
{% endif %}
|
||||
<td class="hidden-xs">{{ file['size'] }}</td>
|
||||
<td>{{ file['ctime']|datetime }}</td>
|
||||
<td class="hidden-xs hidden-sm">{{ file['mtime']|datetime }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endblock %}
|
|
@ -1,34 +0,0 @@
|
|||
{% extends 'layout.html' %}
|
||||
{% block page_menu %}
|
||||
<div class="controls pull-right">
|
||||
<a class="btn btn-default btn-sm" href="{{ url_for('wiki.edit', name=name) }}">Edit</a>
|
||||
<a class="btn btn-default btn-sm" href="{{ url_for('wiki.history', name=name) }}">History</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% if commit %}
|
||||
<div id="page-action-bar">
|
||||
<form method="POST" action="{{ url_for('wiki.revert') }}" class="ajax-form" data-redirect="{{ url_for('wiki.page', name=name) }}">
|
||||
<input type="hidden" value="{{ name }}" name="name" />
|
||||
<input type="hidden" value="{{ commit }}" name="commit" />
|
||||
<input type="submit" class="btn btn-danger btn-sm" title="Revert back to this revision" value="Revert" />
|
||||
</form>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div id="page-content"></div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script>
|
||||
$(function(){
|
||||
{% if partials %}
|
||||
{% for name, value in partials.items() %}
|
||||
Handlebars.registerPartial({{ name|tojson|safe }}, {{ value.data|tojson|safe }});
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
$("#page-content").html(MDR.convert({{ page.data|tojson|safe }})).show();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
Loading…
Add table
Add a link
Reference in a new issue