1
0
Fork 0
satnogs-db/db/templates/base/satellite.html

437 lines
23 KiB
HTML

{% extends "base/home.html" %}
{% load tags %}
{% load staticfiles %}
{% block title %} - {{ satellite }}{% endblock %}
{% block css %}
<link rel="stylesheet" href="{% static 'lib/bootstrap-daterangepicker/daterangepicker.css' %}">
<link rel="stylesheet" href="{% static 'lib/mapbox.js/mapbox.css' %}">
{% endblock css %}
{% block top %}{% endblock %}
{% block content %}
<!-- Satellite Overview Section -->
<div class="row">
<div class="col-md-12 satellite-panels">
<div class="panel panel-default panel-satellite">
<div class="panel-heading">
<div class="satellite-title" data-telemetry="{{ satellite.has_telemetry_data }}"
data-url="{% url 'satellite_position' satellite.norad_cat_id %}">
{{ satellite }}
</div>
<span class="label satellite-status" data-status="{{ satellite.status }}">
{{ satellite.status }}
</span>
{% if satellite.names %}
<div class="satellite-names-full hidden-xs">{{ satellite.names }}</div>
{% endif %}
</div>
<div class="row panel-body">
<div class="col-sm-3">
<div>
<img src="{{ satellite.get_image }}" alt="{{ satellite.name }}" class="satellite-img-full">
</div>
<div class="satellite-description">
{{ satellite.get_description|safe }}
</div>
</div>
<div class="col-sm-9">
<div id="map" data-mapboxid="{{ mapbox_id }}" data-mapboxtoken="{{ mapbox_token }}"></div>
</div>
</div>
</div>
</div>
</div>
<!-- Transmitters Section -->
<div class="row">
<div class="col-md-12 satellite-panels">
<div class="panel panel-default panel-satellite">
<div class="panel-heading">
<div class="satellite-title">
Transmitters <span class="badge hidden-xs">{{ satellite.transmitters.count }}</span>
{% if suggestions %}
<div class="suggestions-counter label label-default hidden-xs">
{{ suggestions.count }} suggestion{{ suggestions.count|pluralize }} pending
</div>
{% endif %}
</div>
<div class="satellite-suggest pull-right">
<button type="button"
class="btn btn-primary btn-sm"
data-toggle="modal" data-target="#NewSuggestionModal">
<span class="glyphicon glyphicon-plus" title="Suggest edits"></span> Suggest <span class="hidden-xs">New Transmitter</span>
</button>
</div>
</div>
<div class="row panel-body">
<div class="col-md-12">
<div class="row">
{% for transmitter in satellite.transmitters.all %}
<div class="col-md-4">
<div class="panel {% if transmitter.alive %}panel-primary{% else %}panel-danger{% endif %} panel-transmitter">
<div class="panel-heading">
<h3 class="panel-title">
<span class="transmitter-title">{{ transmitter.description }}</span>
<button type="button"
class="btn btn-default btn-sm pull-right suggest-transmitter"
data-toggle="modal"
data-target="#EditSuggestionModal-{{ transmitter.id }}">
<span class="glyphicon glyphicon-edit" title="Suggest edits"></span>
</button>
</h3>
</div>
<div class="row panel-body">
<div class="col-md-12">
{% if transmitter.alive %}
{% include "includes/field.html" with name="Alive" value=transmitter.alive %}
{% endif %}
{% if transmitter.mode %}
{% include "includes/field.html" with name="Mode" value=transmitter.mode %}
{% endif %}
{% if transmitter.invert %}
{% include "includes/field.html" with name="Invert" value=transmitter.invert %}
{% endif %}
{% if transmitter.baud %}
{% include "includes/field.html" with name="Baud" value=transmitter.baud %}
{% endif %}
{% if transmitter.uplink_low %}
{% include "includes/field.html" with name="Uplink Low" value=transmitter.uplink_low|frq hz=transmitter.uplink_low %}
{% endif %}
{% if transmitter.uplink_high %}
{% include "includes/field.html" with name="Uplink High" value=transmitter.uplink_high|frq hz=transmitter.uplink_high %}
{% endif %}
{% if transmitter.downlink_low %}
{% include "includes/field.html" with name="Downlink Low" value=transmitter.downlink_low|frq hz=transmitter.downlink_low %}
{% endif %}
{% if transmitter.downlink_high %}
{% include "includes/field.html" with name="Downlink High" value=transmitter.downlink_high|frq hz=transmitter.downlink_high %}
{% endif %}
</div>
</div>
</div>
<!-- Edit Suggestion Modal -->
<div class="modal fade" id="EditSuggestionModal-{{ transmitter.id }}" tabindex="-1" role="dialog" aria-labelledby="EditSuggestionModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="EditSuggestionModalLabel">Suggest an edit to this Transmitter</h4>
</div>
{% if request.user.is_authenticated %}
<form action="{% url 'suggestion' %}" method="post" id="editsuggestion-form">{% csrf_token %}
<div class="modal-body">
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Description</div>
<input type="text" class="form-control" name="description" value="{{ transmitter.description }}">
</div>
<div class="input-group transmitter-element-suggest">
<input type="checkbox" value="1" name="alive" {% if transmitter.alive %}checked{% endif %}> Alive
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Uplink Low</div>
<input type="number" class="form-control" name="uplink_low" value="{{ transmitter.uplink_low|default_if_none:'' }}">
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Uplink High</div>
<input type="number" class="form-control" name="uplink_high" value="{{ transmitter.uplink_high|default_if_none:'' }}">
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Downlink Low</div>
<input type="number" class="form-control" name="downlink_low" value="{{ transmitter.downlink_low|default_if_none:'' }}">
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Downlink High</div>
<input type="number" class="form-control" name="downlink_high" value="{{ transmitter.downlink_high|default_if_none:'' }}">
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Mode</div>
<select class="form-control" name="mode">
<option value="" selected></option>
{% for mode in modes %}
<option value="{{ mode.id }}" {% ifequal transmitter.mode mode %}selected{% endifequal %}>
{{ mode }}
</option>
{% endfor %}
</select>
</div>
<div class="input-group transmitter-element-suggest">
<input type="checkbox" value="1" name="invert" {% if transmitter.invert %}checked{% endif %}> Invert
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Baud Rate</div>
<input type="number" class="form-control" name="baud" value="{{ transmitter.baud|default_if_none:'' }}">
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Citation URL</div>
<input type="text" class="form-control" name="citation" required>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Send</button>
</div>
<input type="hidden" name="transmitter" value="{{ transmitter.pk }}">
<input type="hidden" name="satellite" value="{{ satellite.pk }}">
</form>
{% else %}
<div class="modal-body">
<div class="text-danger">You need to login first to add a new suggestion.</div>
</div>
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal">Close</button>
<a href="{% url 'account_login' %}" class="btn btn-primary">Log In</a>
</div>
{% endif %}
</div>
</div>
</div>
</div>
{% if forloop.counter|divisibleby:3 %}
</div>
{% if not loop.last %}
<div class="row">
{% endif %}
{% endif %}
{% empty %}
<div class="row panel-body">
<div class="col-md-12">
<span class="text-danger">No approved transmitters yet for this Satellite.</span>
</div>
</div>
{% endfor %}
</div>
{% if request.user.is_superuser %}
<hr>
<div class="row">
{% for suggestion in suggestions %}
<div class="col-md-4">
<div class="panel panel-{% if suggestion.transmitter %}info{% else %}warning{% endif %} panel-transmitter">
<div class="panel-heading">
<h3 class="panel-title">
<span class="transmitter-title">{{ suggestion.description }}</span>
<a type="button" href="{% url 'admin:base_suggestion_change' suggestion.id %}"
target="_blank" title="Edit on admin"
class="btn btn-default btn-sm pull-right suggest-transmitter">
<span class="glyphicon glyphicon-wrench" ></span>
</a>
</h3>
</div>
<div class="row panel-body">
<div class="col-md-12">
{% if suggestion.alive %}
{% include "includes/field.html" with name="Alive" value=suggestion.alive original=suggestion.transmitter.alive %}
{% endif %}
{% if suggestion.mode %}
{% include "includes/field.html" with name="Mode" value=suggestion.mode original=suggestion.transmitter.mode %}
{% endif %}
{% if suggestion.invert %}
{% include "includes/field.html" with name="Invert" value=suggestion.invert original=suggestion.transmitter.invert %}
{% endif %}
{% if suggestion.baud %}
{% include "includes/field.html" with name="Baud" value=suggestion.baud original=suggestion.transmitter.baud %}
{% endif %}
{% if suggestion.uplink_low %}
{% include "includes/field.html" with name="Uplink Low" value=suggestion.uplink_low|frq original=suggestion.transmitter.uplink_low|frq hz=transmitter.uplink_low %}
{% endif %}
{% if suggestion.uplink_high %}
{% include "includes/field.html" with name="Uplink High" value=suggestion.uplink_high|frq original=suggestion.transmitter.uplink_high|frq hz=transmitter.uplink_high %}
{% endif %}
{% if suggestion.downlink_low %}
{% include "includes/field.html" with name="Downlink Low" value=suggestion.downlink_low|frq original=suggestion.transmitter.downlink_low|frq hz=transmitter.downlink_low %}
{% endif %}
{% if suggestion.downlink_high %}
{% include "includes/field.html" with name="Downlink High" value=suggestion.downlink_high|frq original=suggestion.transmitter.downlink_high|frq hz=transmitter.downlink_high %}
{% endif %}
{% if suggestion.citation %}
{% include "includes/field.html" with name="Citation" value=suggestion.citation|urlizetrunc:35 %}
{% endif %}
</div>
</div>
</div>
</div>
{% if forloop.counter|divisibleby:2 %}
</div>
{% if not loop.last %}
<div class="row">
{% endif %}
{% endif %}
{% endfor %}
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
<!-- Telemetry Decoded Section -->
<div id="telemetry" class="row hidden-xs hidden-sm">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 satellite-panels">
<div class="panel panel-default panel-satellite">
<div class="panel-heading">
<div class="satellite-title" id="telemetry-block" data-satid="{{ satellite.norad_cat_id }}">
Telemetry (decoded)
</div>
</div>
<div class="row panel-body">
<div class="panel-satellite chart">
<div class="col-md-3 panel-satellite">
<div class="input-group datepicker">
<span class="input-group-addon">Date range</span>
<input type="text" name="daterange"/>
</div>
<ul id="telemetry-descriptors">
</ul>
<div id="data-available" class="text-danger">
</div>
</div>
</div>
</div>
<div class="panel-footer">
<span class="badge">Decoded: {{ telemetry_data_count }}</span>
</div>
</div>
</div>
</div>
<script id="telemetryDescriptorsTemplate" type="text/template">
<li class="list-group-item telemetry-key" data-key="<%- key %>" data-unit="<%- unit %>"><%- description %></li>
</script>
<!-- Telemetry Frames Section -->
{% if satellite.telemetry_data.count %}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 satellite-panels">
<div class="panel panel-default panel-satellite">
<div class="panel-heading">
<div class="satellite-title" id="telemetry-block" data-satid="{{ satellite.norad_cat_id }}">
Telemetry (frames)
</div>
</div>
{% if request.user.is_authenticated %}
<div class="row panel-body">
<div class="panel-satellite chart">
<div class="col-md-3 panel-satellite">
<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="glyphicon glyphicon-download"></span> Download <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="{% url 'request_export_all' norad=satellite.norad_cat_id %}">Everything</a></li>
<li><a href="{% url 'request_export' norad=satellite.norad_cat_id period=1 %}">Last week</a></li>
<li><a href="{% url 'request_export' norad=satellite.norad_cat_id period=2 %}">Last month</a></li>
</ul>
</div>
</div>
</div>
</div>
{% endif %}
<div class="panel-footer">
<span class="badge">Frames: {{ satellite.telemetry_data.count }}</span>
Latest frame submitted on {{ latest_frame.timestamp|date:'Y-m-d H:i:s' }} by
{{ latest_frame.observer }}
</div>
</div>
</div>
</div>
{% endif %}
<!-- Suggestion Modal -->
<div class="modal fade" id="NewSuggestionModal" tabindex="-1" role="dialog" aria-labelledby="NewSuggestionModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="NewSuggestionModalLabel">Suggest a new Transmitter</h4>
</div>
{% if request.user.is_authenticated %}
<form action="{% url 'suggestion' %}" method="post" id="newsuggestion-form">{% csrf_token %}
<div class="modal-body">
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Description</div>
<input type="text" class="form-control" name="description">
</div>
<div class="input-group transmitter-element-suggest">
<input type="checkbox" value="1" name="alive" checked> Alive
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Uplink_Low</div>
<input type="number" class="form-control" name="uplink_low">
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Uplink High</div>
<input type="number" class="form-control" name="uplink_high">
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Downlink Low</div>
<input type="number" class="form-control" name="downlink_low">
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Downlink High</div>
<input type="number" class="form-control" name="downlink_high">
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Mode</div>
<select class="form-control" name="mode">
<option value="" selected></option>
{% for mode in modes %}
<option value="{{ mode.id }}">
{{ mode }}
</option>
{% endfor %}
</select>
</div>
<div class="input-group transmitter-element-suggest">
<input type="checkbox" value="1" name="invert"> Invert
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Baud Rate</div>
<input type="number" class="form-control" name="baud">
</div>
<div class="input-group transmitter-element-suggest">
<div class="input-group-addon">Citation URL</div>
<input type="url" class="form-control" name="citation" required>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Send</button>
</div>
<input type="hidden" name="satellite" value="{{ satellite.pk }}">
</form>
{% else %}
<div class="modal-body">
<div class="text-danger">You need to login first to add a new suggestion.</div>
</div>
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal">Close</button>
<a href="{% url 'account_login' %}" class="btn btn-primary">Log In</a>
</div>
{% endif %}
</div>
</div>
</div>
{% endblock %}
{% block javascript %}
<script src="{% static 'lib/underscore/underscore-min.js' %}"></script>
<script src="{% static 'lib/backbone/backbone-min.js' %}"></script>
<script src="{% static 'lib/d3/build/d3.min.js' %}"></script>
<script src="{% static 'lib/moment/min/moment.min.js' %}"></script>
<script src="{% static 'lib/bootstrap-daterangepicker/daterangepicker.js' %}"></script>
<script src="{% static 'lib/mapbox.js/mapbox.js' %}"></script>
<script src="{% static 'js/app.backbone.js' %}"></script>
<script src="{% static 'lib/gpredict.js/dist/gpredict.min.js' %}"></script>
<script src="{% static 'js/map.js' %}"></script>
{% endblock %}