diff --git a/.env-dist b/.env-dist index 01d4db5..ec8df3e 100644 --- a/.env-dist +++ b/.env-dist @@ -10,3 +10,7 @@ ALLOWED_HOSTS= # Database DATABASE_URL=sqlite:///db.sqlite3 + +# Mapbox +MAPBOX_TOKEN= +MAPBOX_MAP_ID= diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3fd05f0..56d48e9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1 +1,5 @@ +# Contributing to SatNOGS Network + +Thank you for your interest in contributing to SatNOGS! + Please read the `Contribution Guidelines` in [satnogs-network documentation](http://docs.satnogs.org/network/contribute.html). diff --git a/README.md b/README.md index e113763..17d6cb3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # SatNOGS Network -SatNOGS Network is a Django based application, implementing a global scheduling and monitoring network for ground station operations. +SatNOGS Network is a web application, implementing a global scheduling and monitoring network for ground station operations. + It features multiple observers to multiple intrumentation functionality and manages observation jobs and results. ## Install and Contribute @@ -9,4 +10,6 @@ See the [documentation](http://docs.satnogs.org/network/). ## License -[MPL-2.0](LICENSE) +© 2014-2015 [Libre Space Foundation](http://librespacefoundation.org). + +Licensed under the [MPL-2.0](LICENSE). diff --git a/network/base/views.py b/network/base/views.py index 7e40714..451bee2 100644 --- a/network/base/views.py +++ b/network/base/views.py @@ -1,6 +1,7 @@ import ephem from datetime import datetime, timedelta +from django.conf import settings from django.contrib import messages from django.views.decorators.http import require_POST from django.shortcuts import get_object_or_404, render, redirect @@ -22,7 +23,9 @@ def index(request): ctx = { 'latest_observations': observations.filter(end__lt=now()), 'scheduled_observations': observations.filter(end__gte=now()), - 'featured_station': featured_station + 'featured_station': featured_station, + 'mapbox_id': settings.MAPBOX_MAP_ID, + 'mapbox_token': settings.MAPBOX_TOKEN } return render(request, 'base/home.html', ctx) @@ -146,7 +149,9 @@ def station_view(request, id): antennas = Antenna.objects.all() return render(request, 'base/station_view.html', - {'station': station, 'form': form, 'antennas': antennas}) + {'station': station, 'form': form, 'antennas': antennas, + 'mapbox_id': settings.MAPBOX_MAP_ID, + 'mapbox_token': settings.MAPBOX_TOKEN}) @require_POST diff --git a/network/settings/base.py b/network/settings/base.py index bc6105c..bfe9c99 100644 --- a/network/settings/base.py +++ b/network/settings/base.py @@ -161,3 +161,8 @@ DATABASES = {'default': dj_database_url.parse(DATABASE_URL)} REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.DjangoFilterBackend',) } + +# Mapbox API +MAPBOX_GEOCODE_URL = 'https://api.tiles.mapbox.com/v4/geocode/mapbox.places/' +MAPBOX_MAP_ID = getenv('MAPBOX_MAP_ID', '') +MAPBOX_TOKEN = getenv('MAPBOX_TOKEN', '') diff --git a/network/static/css/app.css b/network/static/css/app.css index 73bfdc6..60030f3 100644 --- a/network/static/css/app.css +++ b/network/static/css/app.css @@ -59,6 +59,10 @@ body { font-family:'ClearSans'; } +a:hover { + text-decoration: none; +} + .alert-debug { color: black; background-color: white; @@ -98,6 +102,14 @@ body { margin-right: 5px; } +footer { + margin-bottom: 10px; +} + +.footer-options { + padding: 10px; +} + #main-navbar { margin-top: 2%; } diff --git a/network/static/js/home.js b/network/static/js/home.js index 0b4fd9b..4fc6335 100644 --- a/network/static/js/home.js +++ b/network/static/js/home.js @@ -1,9 +1,16 @@ -L.mapbox.accessToken = 'pk.eyJ1IjoicGllcnJvcyIsImEiOiJhTVZyWmE4In0.kl2j9fi24LDXfB3MNdN76w'; -var map = L.mapbox.map('map', 'pierros.jbf6la1j',{ - zoomControl: false -}).setView([40, 0], 3); - $(document).ready(function() { + 'use strict'; + + var mapboxid = $('div#map').data('mapboxid'); + var mapboxtoken = $('div#map').data('mapboxtoken'); + + L.mapbox.accessToken = mapboxtoken; + L.mapbox.config.FORCE_HTTPS = true; + var map = L.mapbox.map('map', mapboxid, { + zoomControl: false + }).setView([40, 0], 3); + var LocLayer = L.mapbox.featureLayer().addTo(map); + $('#successful a.toggle').click(function (e) { e.preventDefault() $(this).tab('show') diff --git a/network/static/js/station_view.js b/network/static/js/station_view.js index 212cc95..14d38c6 100644 --- a/network/static/js/station_view.js +++ b/network/static/js/station_view.js @@ -3,8 +3,14 @@ $(document).ready(function() { var station_info = $('#station-info').data(); // Init the map - L.mapbox.accessToken = 'pk.eyJ1IjoicGllcnJvcyIsImEiOiJhTVZyWmE4In0.kl2j9fi24LDXfB3MNdN76w'; - var map = L.mapbox.map('map-station', 'pierros.jbf6la1j',{ + 'use strict'; + + var mapboxid = $('div#map-station').data('mapboxid'); + var mapboxtoken = $('div#map-station').data('mapboxtoken'); + + L.mapbox.accessToken = mapboxtoken; + L.mapbox.config.FORCE_HTTPS = true; + var map = L.mapbox.map('map-station', mapboxid,{ zoomControl: false }).setView([station_info.lat, station_info.lng], 6); diff --git a/network/templates/base.html b/network/templates/base.html index 550c09b..ed1e037 100644 --- a/network/templates/base.html +++ b/network/templates/base.html @@ -70,9 +70,18 @@
{% if messages %} - {% for message in messages %} -
{{ message }}
- {% endfor %} +
+
+ {% for notification in messages %} + + {% endfor %} +
+
{% endif %} {% block content %}{% endblock content %} @@ -84,11 +93,19 @@ diff --git a/network/templates/base/about.html b/network/templates/base/about.html index 2db70f1..1b0d8ba 100644 --- a/network/templates/base/about.html +++ b/network/templates/base/about.html @@ -6,18 +6,26 @@

About

- SatNOGS network is under active development and not fully - operational for Ground Station operators yet. Meanwhile you can join us by: -

Building a ground station

+ SatNOGS network is a global management interface to facilitate multiple ground station + operations remotely. An observer is able to take advantage of the full network of + SatNOGS ground stations around the world. +

Observations

+ The network is open to anyone. Any observer is able to utilize all available Ground Stations + and communicate with Satellites. All observations results are public + and all data are distributed freely under the + Creative Commons Atribution-Share Alike license. +

Ground Stations

Whether you own satellite ground station equipment or you want to build one you can head to SatNOGS Project site to get up to date documentation and info on how to build a SatNOGS ground station (still under development).

Coding

- Fluent in Python and/or JS? We need you to help with satnogs-network Django application. Visit - our Github issues page to - start filling issues or code fixes for existing ones. Detailed contribution and development documentation - is also availble here. + Fluent in Python and/or JS? We need you to help with satnogs-network web application. Take a look to our + source code or visit + our issues tracker + to start filling bugs, feature requests or code fixes for existing ones. + Detailed contribution and development documentation is also availble at + docs.satnogs.org.
{% endblock content %} diff --git a/network/templates/base/home.html b/network/templates/base/home.html index 1bdc538..a350783 100644 --- a/network/templates/base/home.html +++ b/network/templates/base/home.html @@ -10,13 +10,12 @@ {% endblock css %} {% block prenav-content %} -
+
{% endblock prenav-content %} {% block content %}
- {% if request.user.is_authenticated %} - {% else %} + {% if not request.user.is_authenticated %}

Ground stations swarm control, at your fingertips. @@ -72,6 +71,7 @@ {% endfor %}

+
- -
@@ -129,7 +128,10 @@ - + - + {% if station.location %} diff --git a/network/templates/users/user_detail.html b/network/templates/users/user_detail.html index bc3963c..7844f91 100644 --- a/network/templates/users/user_detail.html +++ b/network/templates/users/user_detail.html @@ -8,7 +8,7 @@ {% block content %}
-

{% avatar user 50 %} {{ user.get_full_name }} ({{ user.username }}) +

{% avatar user 50 %} {{ user.displayname }} {% if user == request.user %}
My Info @@ -43,13 +43,28 @@

- - + + {% if station.location %} + + {% else %} + + {% endif %}
{{ observation.satellite.name }} {% frq observation.transponder.downlink_low %} {{ observation.transponder.mode }}{{ observation.start|date:"Y-m-d H:i:s" }}
{{ observation.end|date:"Y-m-d H:i:s" }}
+ {{ observation.start|date:"Y-m-d H:i:s" }}
+ {{ observation.end|date:"Y-m-d H:i:s" }} +
{{ observation.author.get_full_name }} @@ -186,18 +188,26 @@
- + {{ station.id }} {{ station.name }} + + {{ station.name }} + + {{ station.location }} @@ -48,7 +57,7 @@ - {{ station.owner.get_full_name }} + {{ station.owner.displayname }}
- + {{ station.id }} {{ station.name }}{{ station.lat }}, {{ station.lng }} + + {{ station.name }} + + + {{ station.location }} + {{ station.lat|floatformat:-3 }}, {{ station.lng|floatformat:-3 }}{{ station.alt}} m {% for antenna in station.antenna.all %} diff --git a/network/users/models.py b/network/users/models.py index 252b113..5aa02f1 100644 --- a/network/users/models.py +++ b/network/users/models.py @@ -18,6 +18,13 @@ class User(AbstractUser): bio = models.TextField(default='', validators=[MaxLengthValidator(1000)]) + @property + def displayname(self): + if self.get_full_name(): + return self.get_full_name() + else: + return self.username + def __unicode__(self): return self.username