kopia lustrzana https://github.com/OpenDroneMap/WebODM
Merge pull request #23 from pierotofy/master
Dashboard text additions, timezone handling in node processing viewpull/26/head
commit
da48c63cda
|
@ -19,6 +19,8 @@
|
|||
color: white;
|
||||
text-decoration: none;
|
||||
background-color: #2c3e50; }
|
||||
#navbar-top ul#side-menu li {
|
||||
word-break: break-word; }
|
||||
#navbar-top .navbar-top-links li a.dropdown-toggle {
|
||||
height: 50px; }
|
||||
#navbar-top .user-profile {
|
||||
|
@ -32,6 +34,8 @@ ul#side-menu.nav a {
|
|||
|
||||
.content {
|
||||
clear: both; }
|
||||
.content h1, .content h2, .content h3, .content h4, .content h5 {
|
||||
padding-top: 4px; }
|
||||
|
||||
.top-buffer {
|
||||
margin-top: 15px; }
|
||||
|
@ -45,4 +49,7 @@ ul#side-menu.nav a {
|
|||
table.table-first-col-bold td:first-child {
|
||||
font-weight: bold; }
|
||||
|
||||
button span.glyphicon {
|
||||
margin-right: 4px; }
|
||||
|
||||
/*# sourceMappingURL=main.css.map */
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"version": 3,
|
||||
"mappings": "AAAA,WAAW;EACP,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,IAAI;EAChB,gBAAgB,EAAE,OAAO;EAEzB,yBAAa;IACT,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,GAAG;EAEhB,wBAAY;IACR,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,GAAG;EAGpB,8BAAkB;IACd,KAAK,EAAE,KAAK;IACZ,eAAe,EAAE,IAAI;EAIrB,+CAAiB;IACb,KAAK,EAAE,KAAK;EAGhB,qHAAyB;IACrB,gBAAgB,EAAE,OAAO;EAM7B,kEAAgB;IACZ,KAAK,EAAE,KAAK;IACZ,eAAe,EAAE,IAAI;IACrB,gBAAgB,EAAE,OAAO;EAIjC,kDAAsC;IAClC,MAAM,EAAE,IAAI;EAGhB,yBAAa;IACT,OAAO,EAAE,KAAK;IAEd,gCAAM;MACF,SAAS,EAAE,GAAG;MACd,KAAK,EAAE,IAAI;;AAMnB,kBAAC;EACG,KAAK,EAAE,IAAI;;AAInB,QAAQ;EACJ,KAAK,EAAE,IAAI;;AAGf,WAAY;EACR,UAAU,EAAE,IAAI;;AAGpB,eAAe;EACX,gBAAgB,EAAE,KAAK;;AAG3B,MAAM;EACF,aAAa,EAAE,IAAI;;AAInB,yCAAc;EACV,WAAW,EAAE,IAAI",
|
||||
"mappings": "AAAA,WAAW;EACP,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,IAAI;EAChB,gBAAgB,EAAE,OAAO;EAEzB,yBAAa;IACT,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,GAAG;EAEhB,wBAAY;IACR,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,GAAG;EAGpB,8BAAkB;IACd,KAAK,EAAE,KAAK;IACZ,eAAe,EAAE,IAAI;EAIrB,+CAAiB;IACb,KAAK,EAAE,KAAK;EAGhB,qHAAyB;IACrB,gBAAgB,EAAE,OAAO;EAM7B,kEAAgB;IACZ,KAAK,EAAE,KAAK;IACZ,eAAe,EAAE,IAAI;IACrB,gBAAgB,EAAE,OAAO;EAG7B,2BAAE;IACE,UAAU,EAAE,UAAU;EAI9B,kDAAsC;IAClC,MAAM,EAAE,IAAI;EAGhB,yBAAa;IACT,OAAO,EAAE,KAAK;IAEd,gCAAM;MACF,SAAS,EAAE,GAAG;MACd,KAAK,EAAE,IAAI;;AAMnB,kBAAC;EACG,KAAK,EAAE,IAAI;;AAInB,QAAQ;EACJ,KAAK,EAAE,IAAI;EACX,+DAAc;IACV,WAAW,EAAE,GAAG;;AAIxB,WAAY;EACR,UAAU,EAAE,IAAI;;AAGpB,eAAe;EACX,gBAAgB,EAAE,KAAK;;AAG3B,MAAM;EACF,aAAa,EAAE,IAAI;;AAInB,yCAAc;EACV,WAAW,EAAE,IAAI;;AAIzB,qBAAqB;EACjB,YAAY,EAAE,GAAG",
|
||||
"sources": ["main.scss"],
|
||||
"names": [],
|
||||
"file": "main.css"
|
||||
|
|
|
@ -34,6 +34,10 @@
|
|||
text-decoration: none;
|
||||
background-color: #2c3e50;
|
||||
}
|
||||
|
||||
li{
|
||||
word-break: break-word;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-top-links li a.dropdown-toggle{
|
||||
|
@ -58,6 +62,9 @@ ul#side-menu.nav{
|
|||
|
||||
.content{
|
||||
clear: both;
|
||||
h1,h2,h3,h4,h5{
|
||||
padding-top: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.top-buffer {
|
||||
|
@ -77,3 +84,7 @@ table.table-first-col-bold{
|
|||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
button i.glyphicon{
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,41 @@
|
|||
{% extends "app/logged_in_base.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block content %}
|
||||
<div class="test">Hello dashboard</div>
|
||||
{% if show_welcome %}
|
||||
<h3>{% trans 'Welcome!' %}</h3>
|
||||
{% else %}
|
||||
<h3>{% trans 'Dashboard' %}</h3>
|
||||
{% endif %}
|
||||
|
||||
{% if no_processingnodes %}
|
||||
{% trans 'Add a Processing Node' as add_processing_node %}
|
||||
{% with nodeodm_link='<a href="https://github.com/pierotofy/node-OpenDroneMap" target="_blank">node-OpenDroneMap</a>' api_link='<a href="https://github.com/pierotofy/node-OpenDroneMap/blob/master/docs/index.adoc" target="_blank">API</a>' %}
|
||||
<p>
|
||||
{% blocktrans %}
|
||||
To get started, "{{ add_processing_node }}". A processing node is a computer running an instance of {{ nodeodm_link }} or some other software that implements this {{ api_link }}.
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
{% endwith %}
|
||||
<button class="btn btn-primary" onclick="location.href='{% url "admin:nodeodm_processingnode_add" %}';"><i class="fa fa-plus-circle"></i> {{ add_processing_node }}</button>
|
||||
|
||||
{% else %}
|
||||
|
||||
{% if no_projects %}
|
||||
{% trans 'Upload Images' as upload_images %}
|
||||
<p>
|
||||
{% blocktrans %} To create a new project, press the "{{ upload_images }}" button. {% endblocktrans %}
|
||||
</p>
|
||||
<button class="btn btn-primary"><i class="glyphicon glyphicon-upload"></i> {{ upload_images }}</button>
|
||||
{% endif %}
|
||||
|
||||
|
||||
<p>
|
||||
<ul>
|
||||
<li>{% trans 'Need at least 5 images' %}</li>
|
||||
<li>{% trans 'Images must overlap by 60% or more' %}</li>
|
||||
</ul>
|
||||
</p>
|
||||
{% endif %}
|
||||
<!-- <h4>Projects</h4> -->
|
||||
{% endblock %}
|
||||
|
|
|
@ -208,11 +208,11 @@
|
|||
</a>
|
||||
<ul class="dropdown-menu dropdown-user">
|
||||
<li class="user-profile">
|
||||
Hello, {{ user.username }}<br/>
|
||||
{% trans 'Hello' %}, {{ user.username }}<br/>
|
||||
<span class="email">{{ user.email }}</span>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="/logout/"><i class="fa fa-sign-out fa-fw"></i> Logout</a>
|
||||
<li><a href="/logout/"><i class="fa fa-sign-out fa-fw"></i> {% trans 'Logout' %}</a>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- /.dropdown-user -->
|
||||
|
@ -235,7 +235,7 @@
|
|||
</div>
|
||||
</li>-->
|
||||
<li>
|
||||
<a href="/dashboard/"><i class="fa fa-dashboard fa-fw"></i> Dashboard</a>
|
||||
<a href="/dashboard/"><i class="fa fa-dashboard fa-fw"></i> {% trans 'Dashboard' %}</a>
|
||||
</li>
|
||||
<!--<li>
|
||||
<a href="#"><i class="fa fa-plane fa-fw"></i> Mission Planner</a>
|
||||
|
@ -252,18 +252,18 @@
|
|||
</li>
|
||||
{% endfor %}
|
||||
<li>
|
||||
<a href="/admin/nodeodm/processingnode/add/"><span class="fa fa-plus-circle"></span> Add New</a>
|
||||
<a href="{% url 'admin:nodeodm_processingnode_add' %}"><span class="fa fa-plus-circle"></span> Add New</a>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- /.nav-second-level -->
|
||||
</li>
|
||||
{% if user.is_superuser %}
|
||||
<li>
|
||||
<a href="/admin/"><i class="fa fa-gears fa-fw"></i> Admin Panel</a>
|
||||
<a href="/admin/"><i class="fa fa-gears fa-fw"></i> {% trans 'Administration' %}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a href="#"><i class="fa fa-life-saver fa-fw"></i> Documentation</a>
|
||||
<a href="#"><i class="fa fa-life-saver fa-fw"></i> {% trans 'Documentation' %}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% extends "app/logged_in_base.html" %}
|
||||
{% load i18n %}
|
||||
{% load i18n tz %}
|
||||
|
||||
{% block content %}
|
||||
<h3>Processing Node</h3>
|
||||
|
@ -22,13 +22,19 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>{% trans "Last Refreshed" %}</td>
|
||||
<td>{{ processing_node.last_refreshed }}</td> <!-- TODO: timezone? -->
|
||||
<td>{{ processing_node.last_refreshed|timesince }} {% trans 'ago' %} ({{ processing_node.last_refreshed|localtime }})</td> <!-- TODO: timezone? -->
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{% trans "Options (JSON)" %}</td>
|
||||
<td><div id="processing_node_json"></div></td>
|
||||
</tr>
|
||||
</table>
|
||||
{% if user.is_superuser %}
|
||||
<div class="text-center">
|
||||
<button class="btn btn-default" onclick="location.href='{% url "admin:nodeodm_processingnode_change" processing_node.id %}';"><i class="glyphicon glyphicon-pencil"></i> {% trans "Edit" %}</button>
|
||||
<button class="btn btn-danger" onclick="location.href='{% url "admin:nodeodm_processingnode_delete" processing_node.id %}';"><i class="glyphicon glyphicon-trash"></i> {% trans "Delete" %}</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
<script>
|
||||
$(function(){
|
||||
// TODO: we'll need a prettier console library to display stuff like
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.http import HttpResponse
|
||||
from nodeodm.models import ProcessingNode
|
||||
from .models import Project
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
|
||||
|
@ -10,7 +11,13 @@ def index(request):
|
|||
|
||||
@login_required
|
||||
def dashboard(request):
|
||||
return render(request, 'app/dashboard.html', {'title': 'Dashboard'})
|
||||
no_projects = Project.objects.count() == 0
|
||||
no_processingnodes = ProcessingNode.objects.count() == 0 and no_projects
|
||||
|
||||
return render(request, 'app/dashboard.html', {'title': 'Dashboard',
|
||||
'no_projects': no_projects,
|
||||
'no_processingnodes': no_processingnodes,
|
||||
'show_welcome': no_projects and no_processingnodes})
|
||||
|
||||
@login_required
|
||||
def processing_node(request, processing_node_id):
|
||||
|
|
|
@ -115,7 +115,7 @@ AUTH_PASSWORD_VALIDATORS = [
|
|||
# https://docs.djangoproject.com/en/1.10/topics/i18n/
|
||||
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
TIME_ZONE = 'UTC'
|
||||
TIME_ZONE = None # Use local server time
|
||||
USE_I18N = True
|
||||
USE_L10N = True
|
||||
USE_TZ = True
|
||||
|
|
Ładowanie…
Reference in New Issue