Add station screen display
1
.gitignore
vendored
@ -44,6 +44,7 @@ env/
|
||||
.venv/
|
||||
venv/
|
||||
db.sqlite3
|
||||
db.sqlite3-journal
|
||||
|
||||
# Don't git index
|
||||
whoosh_index/
|
||||
|
@ -15,8 +15,9 @@ Including another URLconf
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from django.urls import path
|
||||
from django.urls import path, include
|
||||
|
||||
urlpatterns = [
|
||||
path("admin/", admin.site.urls),
|
||||
path("admin/", admin.site.urls, name="admin"),
|
||||
path("gtfs/", include("sncfgtfs.urls"), name="gtfs"),
|
||||
]
|
||||
|
@ -1,4 +1,5 @@
|
||||
from django.contrib import admin
|
||||
from django.utils.safestring import mark_safe
|
||||
|
||||
from sncfgtfs.models import Agency, Stop, Route, Trip, StopTime, Calendar, CalendarDate, \
|
||||
Transfer, FeedInfo
|
||||
@ -6,44 +7,76 @@ from sncfgtfs.models import Agency, Stop, Route, Trip, StopTime, Calendar, Calen
|
||||
|
||||
@admin.register(Agency)
|
||||
class AgencyAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
list_display = ('name', 'id', 'url', 'timezone',)
|
||||
search_fields = ('name',)
|
||||
|
||||
|
||||
@admin.register(Stop)
|
||||
class StopAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
list_display = ('name', 'id', 'lat', 'lon', 'location_type',)
|
||||
list_filter = ('location_type',)
|
||||
search_fields = ('name', 'id',)
|
||||
ordering = ('name',)
|
||||
autocomplete_fields = ('parent_station',)
|
||||
|
||||
|
||||
@admin.register(Route)
|
||||
class RouteAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
list_display = ('long_name', 'short_name', 'id', 'type',)
|
||||
list_filter = ('type',)
|
||||
search_fields = ('long_name', 'short_name', 'id',)
|
||||
ordering = ('long_name',)
|
||||
autocomplete_fields = ('agency',)
|
||||
|
||||
|
||||
@admin.register(Trip)
|
||||
class TripAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
list_display = ('id', 'route', 'service', 'headsign', 'direction_id',)
|
||||
list_filter = ('direction_id', 'service__transport_type',)
|
||||
search_fields = ('id', 'route__long_name', 'service', 'headsign',)
|
||||
ordering = ('route', 'service',)
|
||||
|
||||
|
||||
@admin.register(StopTime)
|
||||
class StopTimeAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
list_display = ('trip', 'stop', 'arrival_time', 'departure_time', 'arrival_next_day',
|
||||
'stop_sequence', 'pickup_type', 'drop_off_type',)
|
||||
list_filter = ('arrival_next_day', 'pickup_type', 'drop_off_type', 'trip__service__transport_type',)
|
||||
search_fields = ('trip__id', 'stop__name', 'arrival_time', 'departure_time',)
|
||||
ordering = ('trip', 'stop_sequence',)
|
||||
autocomplete_fields = ('trip', 'stop',)
|
||||
|
||||
|
||||
@admin.register(Calendar)
|
||||
class CalendarAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
list_display = ('id', 'transport_type', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday',
|
||||
'saturday', 'sunday', 'start_date', 'end_date',)
|
||||
list_filter = ('transport_type', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday',
|
||||
'start_date', 'end_date',)
|
||||
search_fields = ('id', 'start_date', 'end_date',)
|
||||
ordering = ('transport_type', 'id',)
|
||||
|
||||
|
||||
@admin.register(CalendarDate)
|
||||
class CalendarDateAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
list_display = ('id', 'service_id', 'date', 'exception_type',)
|
||||
list_filter = ('exception_type', 'date', 'service__transport_type',)
|
||||
search_fields = ('id', 'date',)
|
||||
ordering = ('date', 'service_id',)
|
||||
|
||||
|
||||
@admin.register(Transfer)
|
||||
class TransferAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
list_display = ('from_stop', 'to_stop', 'transfer_type', 'min_transfer_time',)
|
||||
list_filter = ('transfer_type',)
|
||||
search_fields = ('from_stop__stop_name', 'to_stop__stop_name',)
|
||||
autocomplete_fields = ('from_stop', 'to_stop',)
|
||||
|
||||
|
||||
@admin.register(FeedInfo)
|
||||
class FeedInfoAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
list_display = ('feed_publisher_name', 'feed_publisher_url', 'feed_lang', 'feed_start_date',
|
||||
'feed_end_date', 'feed_version',)
|
||||
search_fields = ('feed_publisher_name', 'feed_publisher_url', 'feed_lang', 'feed_start_date',
|
||||
'feed_end_date', 'feed_version',)
|
||||
ordering = ('feed_publisher_name',)
|
||||
|
@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 1.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-01-26 21:12+0100\n"
|
||||
"POT-Creation-Date: 2024-01-27 10:44+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Emmy D'Anello <ynerant@emy.lu>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -13,433 +13,480 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: sncfgtfs/models.py:6
|
||||
msgid "TGV"
|
||||
msgstr "TGV"
|
||||
|
||||
#: sncfgtfs/models.py:7
|
||||
msgid "TER"
|
||||
msgstr "TER"
|
||||
|
||||
#: sncfgtfs/models.py:8
|
||||
msgid "Intercités"
|
||||
msgstr "Intercités"
|
||||
|
||||
#: sncfgtfs/models.py:9
|
||||
msgid "Transilien"
|
||||
msgstr "Transilien"
|
||||
|
||||
#: sncfgtfs/models.py:13
|
||||
msgid "Stop/platform"
|
||||
msgstr "Arrêt / quai"
|
||||
|
||||
#: sncfgtfs/models.py:7
|
||||
#: sncfgtfs/models.py:14
|
||||
msgid "Station"
|
||||
msgstr "Gare"
|
||||
|
||||
#: sncfgtfs/models.py:8
|
||||
#: sncfgtfs/models.py:15
|
||||
msgid "Entrance/exit"
|
||||
msgstr "Entrée / sortie"
|
||||
|
||||
#: sncfgtfs/models.py:9
|
||||
#: sncfgtfs/models.py:16
|
||||
msgid "Generic node"
|
||||
msgstr "Nœud générique"
|
||||
|
||||
#: sncfgtfs/models.py:10
|
||||
#: sncfgtfs/models.py:17
|
||||
msgid "Boarding area"
|
||||
msgstr "Zone d'embarquement"
|
||||
|
||||
#: sncfgtfs/models.py:14
|
||||
#: sncfgtfs/models.py:21
|
||||
msgid "No information"
|
||||
msgstr "Pas d'information"
|
||||
|
||||
#: sncfgtfs/models.py:15
|
||||
#: sncfgtfs/models.py:22
|
||||
msgid "Possible"
|
||||
msgstr "Possible"
|
||||
|
||||
#: sncfgtfs/models.py:16 sncfgtfs/models.py:46
|
||||
#: sncfgtfs/models.py:23 sncfgtfs/models.py:53
|
||||
msgid "Not possible"
|
||||
msgstr "Impossible"
|
||||
|
||||
#: sncfgtfs/models.py:20
|
||||
#: sncfgtfs/models.py:27
|
||||
msgid "Regular"
|
||||
msgstr "Régulier"
|
||||
|
||||
#: sncfgtfs/models.py:21
|
||||
#: sncfgtfs/models.py:28
|
||||
msgid "None"
|
||||
msgstr "Aucun"
|
||||
|
||||
#: sncfgtfs/models.py:22
|
||||
#: sncfgtfs/models.py:29
|
||||
msgid "Must phone agency"
|
||||
msgstr "Doit téléphoner à l'agence"
|
||||
|
||||
#: sncfgtfs/models.py:23
|
||||
#: sncfgtfs/models.py:30
|
||||
msgid "Must coordinate with driver"
|
||||
msgstr "Doit se coordonner avec læ conducteurice"
|
||||
|
||||
#: sncfgtfs/models.py:27
|
||||
#: sncfgtfs/models.py:34
|
||||
msgid "Tram"
|
||||
msgstr "Tram"
|
||||
|
||||
#: sncfgtfs/models.py:28
|
||||
#: sncfgtfs/models.py:35
|
||||
msgid "Metro"
|
||||
msgstr "Métro"
|
||||
|
||||
#: sncfgtfs/models.py:29
|
||||
#: sncfgtfs/models.py:36
|
||||
msgid "Rail"
|
||||
msgstr "Rail"
|
||||
|
||||
#: sncfgtfs/models.py:30
|
||||
#: sncfgtfs/models.py:37
|
||||
msgid "Bus"
|
||||
msgstr "Bus"
|
||||
|
||||
#: sncfgtfs/models.py:31
|
||||
#: sncfgtfs/models.py:38
|
||||
msgid "Ferry"
|
||||
msgstr "Ferry"
|
||||
|
||||
#: sncfgtfs/models.py:32
|
||||
#: sncfgtfs/models.py:39
|
||||
msgid "Cable car"
|
||||
msgstr "Câble"
|
||||
|
||||
#: sncfgtfs/models.py:33
|
||||
#: sncfgtfs/models.py:40
|
||||
msgid "Gondola"
|
||||
msgstr "Gondole"
|
||||
|
||||
#: sncfgtfs/models.py:34
|
||||
#: sncfgtfs/models.py:41
|
||||
msgid "Funicular"
|
||||
msgstr "Funiculaire"
|
||||
|
||||
#: sncfgtfs/models.py:38
|
||||
#: sncfgtfs/models.py:45
|
||||
msgid "Outbound"
|
||||
msgstr "Vers l'extérieur"
|
||||
|
||||
#: sncfgtfs/models.py:39
|
||||
#: sncfgtfs/models.py:46
|
||||
msgid "Inbound"
|
||||
msgstr "Vers l'intérieur"
|
||||
|
||||
#: sncfgtfs/models.py:43
|
||||
#: sncfgtfs/models.py:50
|
||||
msgid "Recommended"
|
||||
msgstr "Recommandé"
|
||||
|
||||
#: sncfgtfs/models.py:44
|
||||
#: sncfgtfs/models.py:51
|
||||
msgid "Timed"
|
||||
msgstr "Correspondance programmée"
|
||||
|
||||
#: sncfgtfs/models.py:45
|
||||
#: sncfgtfs/models.py:52
|
||||
msgid "Minimum time"
|
||||
msgstr "Temps de correspondance minimum requis"
|
||||
|
||||
#: sncfgtfs/models.py:53 sncfgtfs/models.py:177
|
||||
#: sncfgtfs/models.py:57
|
||||
msgid "Added"
|
||||
msgstr "Ajouté"
|
||||
|
||||
#: sncfgtfs/models.py:58
|
||||
msgid "Removed"
|
||||
msgstr "Supprimé"
|
||||
|
||||
#: sncfgtfs/models.py:65 sncfgtfs/models.py:209
|
||||
msgid "Agency ID"
|
||||
msgstr "ID de l'agence"
|
||||
|
||||
#: sncfgtfs/models.py:59
|
||||
#: sncfgtfs/models.py:71
|
||||
msgid "Agency name"
|
||||
msgstr "Nom de l'agence"
|
||||
|
||||
#: sncfgtfs/models.py:63
|
||||
#: sncfgtfs/models.py:75
|
||||
msgid "Agency URL"
|
||||
msgstr "URL de l'agence"
|
||||
|
||||
#: sncfgtfs/models.py:68
|
||||
#: sncfgtfs/models.py:80
|
||||
msgid "Agency timezone"
|
||||
msgstr "Fuseau horaire de l'agence"
|
||||
|
||||
#: sncfgtfs/models.py:73
|
||||
#: sncfgtfs/models.py:85
|
||||
msgid "Agency language"
|
||||
msgstr "Langue de l'agence"
|
||||
|
||||
#: sncfgtfs/models.py:78
|
||||
#: sncfgtfs/models.py:91
|
||||
msgid "Agency phone"
|
||||
msgstr "Téléphone de l'agence"
|
||||
|
||||
#: sncfgtfs/models.py:96
|
||||
msgid "Agency email"
|
||||
msgstr "Adresse email de l'agence"
|
||||
|
||||
#: sncfgtfs/models.py:104
|
||||
msgid "Agency"
|
||||
msgstr "Agence"
|
||||
|
||||
#: sncfgtfs/models.py:79
|
||||
#: sncfgtfs/models.py:105
|
||||
msgid "Agencies"
|
||||
msgstr "Agences"
|
||||
|
||||
#: sncfgtfs/models.py:86 sncfgtfs/models.py:307
|
||||
#: sncfgtfs/models.py:112 sncfgtfs/models.py:366
|
||||
msgid "Stop ID"
|
||||
msgstr "ID de l'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:91
|
||||
#: sncfgtfs/models.py:117
|
||||
msgid "Stop code"
|
||||
msgstr "Code de l'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:97
|
||||
#: sncfgtfs/models.py:123
|
||||
msgid "Stop name"
|
||||
msgstr "Nom de l'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:102
|
||||
#: sncfgtfs/models.py:128
|
||||
msgid "Stop description"
|
||||
msgstr "Description de l'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:107
|
||||
#: sncfgtfs/models.py:133
|
||||
msgid "Stop longitude"
|
||||
msgstr "Longitude de l'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:111
|
||||
#: sncfgtfs/models.py:137
|
||||
msgid "Stop latitude"
|
||||
msgstr "Latitude de l'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:116
|
||||
#: sncfgtfs/models.py:142
|
||||
msgid "Zone ID"
|
||||
msgstr "ID de la zone"
|
||||
|
||||
#: sncfgtfs/models.py:120
|
||||
#: sncfgtfs/models.py:146
|
||||
msgid "Stop URL"
|
||||
msgstr "URL de l'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:125
|
||||
#: sncfgtfs/models.py:151
|
||||
msgid "Location type"
|
||||
msgstr "Type de localisation"
|
||||
|
||||
#: sncfgtfs/models.py:134
|
||||
#: sncfgtfs/models.py:160
|
||||
msgid "Parent station"
|
||||
msgstr "Gare parente"
|
||||
|
||||
#: sncfgtfs/models.py:140
|
||||
#: sncfgtfs/models.py:168
|
||||
msgid "Stop timezone"
|
||||
msgstr "Fuseau horaire de l'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:146
|
||||
#: sncfgtfs/models.py:174
|
||||
msgid "Level ID"
|
||||
msgstr "ID du niveau"
|
||||
|
||||
#: sncfgtfs/models.py:151
|
||||
#: sncfgtfs/models.py:179
|
||||
msgid "Wheelchair boarding"
|
||||
msgstr "Embarquement en fauteuil roulant"
|
||||
|
||||
#: sncfgtfs/models.py:159
|
||||
#: sncfgtfs/models.py:187
|
||||
msgid "Platform code"
|
||||
msgstr "Code du quai"
|
||||
|
||||
#: sncfgtfs/models.py:163
|
||||
#: sncfgtfs/models.py:195
|
||||
msgid "Stop"
|
||||
msgstr "Arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:164
|
||||
#: sncfgtfs/models.py:196
|
||||
msgid "Stops"
|
||||
msgstr "Arrêts"
|
||||
|
||||
#: sncfgtfs/models.py:171 sncfgtfs/models.py:233
|
||||
msgid "Route ID"
|
||||
msgstr "ID de la ligne"
|
||||
#: sncfgtfs/models.py:203 sncfgtfs/models.py:340 sncfgtfs/models.py:469
|
||||
#: sncfgtfs/models.py:506
|
||||
msgid "ID"
|
||||
msgstr "Identifiant"
|
||||
|
||||
#: sncfgtfs/models.py:182
|
||||
#: sncfgtfs/models.py:215
|
||||
msgid "Route short name"
|
||||
msgstr "Nom court de la ligne"
|
||||
|
||||
#: sncfgtfs/models.py:187
|
||||
#: sncfgtfs/models.py:220
|
||||
msgid "Route long name"
|
||||
msgstr "Nom long de la ligne"
|
||||
|
||||
#: sncfgtfs/models.py:192
|
||||
#: sncfgtfs/models.py:225
|
||||
msgid "Route description"
|
||||
msgstr "Description de la ligne"
|
||||
|
||||
#: sncfgtfs/models.py:197
|
||||
#: sncfgtfs/models.py:230
|
||||
msgid "Route type"
|
||||
msgstr "Type de ligne"
|
||||
|
||||
#: sncfgtfs/models.py:202
|
||||
#: sncfgtfs/models.py:235
|
||||
msgid "Route URL"
|
||||
msgstr "URL de la ligne"
|
||||
|
||||
#: sncfgtfs/models.py:208
|
||||
#: sncfgtfs/models.py:241
|
||||
msgid "Route color"
|
||||
msgstr "Couleur de la ligne"
|
||||
|
||||
#: sncfgtfs/models.py:214
|
||||
#: sncfgtfs/models.py:247
|
||||
msgid "Route text color"
|
||||
msgstr "Couleur du texte de la ligne"
|
||||
|
||||
#: sncfgtfs/models.py:219
|
||||
#: sncfgtfs/models.py:255 sncfgtfs/models.py:269
|
||||
msgid "Route"
|
||||
msgstr "Ligne"
|
||||
|
||||
#: sncfgtfs/models.py:220
|
||||
#: sncfgtfs/models.py:256
|
||||
msgid "Routes"
|
||||
msgstr "Lignes"
|
||||
|
||||
#: sncfgtfs/models.py:227 sncfgtfs/models.py:293
|
||||
#: sncfgtfs/models.py:263
|
||||
msgid "Trip ID"
|
||||
msgstr "ID du trajet"
|
||||
|
||||
#: sncfgtfs/models.py:238 sncfgtfs/models.py:349 sncfgtfs/models.py:397
|
||||
msgid "Service ID"
|
||||
msgstr "ID du service"
|
||||
#: sncfgtfs/models.py:276 sncfgtfs/models.py:475
|
||||
msgid "Service"
|
||||
msgstr "Service"
|
||||
|
||||
#: sncfgtfs/models.py:243
|
||||
#: sncfgtfs/models.py:282
|
||||
msgid "Trip headsign"
|
||||
msgstr "Destination du trajet"
|
||||
|
||||
#: sncfgtfs/models.py:249
|
||||
#: sncfgtfs/models.py:288
|
||||
msgid "Trip short name"
|
||||
msgstr "Nom court du trajet"
|
||||
|
||||
#: sncfgtfs/models.py:254
|
||||
#: sncfgtfs/models.py:293
|
||||
msgid "Direction"
|
||||
msgstr "Direction"
|
||||
|
||||
#: sncfgtfs/models.py:261
|
||||
#: sncfgtfs/models.py:300
|
||||
msgid "Block ID"
|
||||
msgstr "ID du bloc"
|
||||
|
||||
#: sncfgtfs/models.py:267
|
||||
#: sncfgtfs/models.py:306
|
||||
msgid "Shape ID"
|
||||
msgstr "ID de la forme"
|
||||
|
||||
#: sncfgtfs/models.py:272
|
||||
#: sncfgtfs/models.py:311
|
||||
msgid "Wheelchair accessible"
|
||||
msgstr "Accessible en fauteuil roulant"
|
||||
|
||||
#: sncfgtfs/models.py:279
|
||||
#: sncfgtfs/models.py:318
|
||||
msgid "Bikes allowed"
|
||||
msgstr "Vélos autorisés"
|
||||
|
||||
#: sncfgtfs/models.py:285
|
||||
#: sncfgtfs/models.py:332 sncfgtfs/models.py:346
|
||||
msgid "Trip"
|
||||
msgstr "Trajet"
|
||||
|
||||
#: sncfgtfs/models.py:286
|
||||
#: sncfgtfs/models.py:333
|
||||
msgid "Trips"
|
||||
msgstr "Trajets"
|
||||
|
||||
#: sncfgtfs/models.py:297
|
||||
#: sncfgtfs/models.py:351
|
||||
msgid "Arrival time"
|
||||
msgstr "Heure d'arrivée"
|
||||
|
||||
#: sncfgtfs/models.py:301
|
||||
#: sncfgtfs/models.py:355
|
||||
msgid "Departure time"
|
||||
msgstr "Heure de départ"
|
||||
|
||||
#: sncfgtfs/models.py:311
|
||||
#: sncfgtfs/models.py:359
|
||||
msgid "Arrival next day"
|
||||
msgstr "Arrivée le jour suivant"
|
||||
|
||||
#: sncfgtfs/models.py:371
|
||||
msgid "Stop sequence"
|
||||
msgstr "Séquence de l'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:316
|
||||
#: sncfgtfs/models.py:376
|
||||
msgid "Stop headsign"
|
||||
msgstr "Destination de l'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:321
|
||||
#: sncfgtfs/models.py:381
|
||||
msgid "Pickup type"
|
||||
msgstr "Type de prise en charge"
|
||||
|
||||
#: sncfgtfs/models.py:328
|
||||
#: sncfgtfs/models.py:388
|
||||
msgid "Drop off type"
|
||||
msgstr "Type de dépose"
|
||||
|
||||
#: sncfgtfs/models.py:335
|
||||
#: sncfgtfs/models.py:395
|
||||
msgid "Timepoint"
|
||||
msgstr "Ponctualité"
|
||||
|
||||
#: sncfgtfs/models.py:341
|
||||
#: sncfgtfs/models.py:404
|
||||
msgid "Stop time"
|
||||
msgstr "Heure d'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:342
|
||||
#: sncfgtfs/models.py:405
|
||||
msgid "Stop times"
|
||||
msgstr "Heures d'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:353
|
||||
#: sncfgtfs/models.py:412
|
||||
msgid "Service ID"
|
||||
msgstr "ID du service"
|
||||
|
||||
#: sncfgtfs/models.py:416
|
||||
msgid "Monday"
|
||||
msgstr "Lundi"
|
||||
|
||||
#: sncfgtfs/models.py:357
|
||||
#: sncfgtfs/models.py:420
|
||||
msgid "Tuesday"
|
||||
msgstr "Mardi"
|
||||
|
||||
#: sncfgtfs/models.py:361
|
||||
#: sncfgtfs/models.py:424
|
||||
msgid "Wednesday"
|
||||
msgstr "Mercredi"
|
||||
|
||||
#: sncfgtfs/models.py:365
|
||||
#: sncfgtfs/models.py:428
|
||||
msgid "Thursday"
|
||||
msgstr "Jeudi"
|
||||
|
||||
#: sncfgtfs/models.py:369
|
||||
#: sncfgtfs/models.py:432
|
||||
msgid "Friday"
|
||||
msgstr "Vendredi"
|
||||
|
||||
#: sncfgtfs/models.py:373
|
||||
#: sncfgtfs/models.py:436
|
||||
msgid "Saturday"
|
||||
msgstr "Samedi"
|
||||
|
||||
#: sncfgtfs/models.py:377
|
||||
#: sncfgtfs/models.py:440
|
||||
msgid "Sunday"
|
||||
msgstr "Dimanche"
|
||||
|
||||
#: sncfgtfs/models.py:381
|
||||
#: sncfgtfs/models.py:444
|
||||
msgid "Start date"
|
||||
msgstr "Date de début"
|
||||
|
||||
#: sncfgtfs/models.py:385
|
||||
#: sncfgtfs/models.py:448
|
||||
msgid "End date"
|
||||
msgstr "Date de fin"
|
||||
|
||||
#: sncfgtfs/models.py:389
|
||||
#: sncfgtfs/models.py:453 sncfgtfs/models.py:490
|
||||
msgid "Transport type"
|
||||
msgstr "Type de transport"
|
||||
|
||||
#: sncfgtfs/models.py:461
|
||||
msgid "Calendar"
|
||||
msgstr "Calendrier"
|
||||
|
||||
#: sncfgtfs/models.py:390
|
||||
#: sncfgtfs/models.py:462
|
||||
msgid "Calendars"
|
||||
msgstr "Calendriers"
|
||||
|
||||
#: sncfgtfs/models.py:401
|
||||
#: sncfgtfs/models.py:480
|
||||
msgid "Date"
|
||||
msgstr "Date"
|
||||
|
||||
#: sncfgtfs/models.py:405
|
||||
#: sncfgtfs/models.py:484
|
||||
msgid "Exception type"
|
||||
msgstr "Type d'exception"
|
||||
|
||||
#: sncfgtfs/models.py:409
|
||||
#: sncfgtfs/models.py:498
|
||||
msgid "Calendar date"
|
||||
msgstr "Date du calendrier"
|
||||
|
||||
#: sncfgtfs/models.py:410
|
||||
#: sncfgtfs/models.py:499
|
||||
msgid "Calendar dates"
|
||||
msgstr "Dates du calendrier"
|
||||
|
||||
#: sncfgtfs/models.py:417
|
||||
#: sncfgtfs/models.py:512
|
||||
msgid "From stop"
|
||||
msgstr "Depuis l'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:424
|
||||
#: sncfgtfs/models.py:519
|
||||
msgid "To stop"
|
||||
msgstr "Jusqu'à l'arrêt"
|
||||
|
||||
#: sncfgtfs/models.py:429
|
||||
#: sncfgtfs/models.py:524
|
||||
msgid "Transfer type"
|
||||
msgstr "Type de correspondance"
|
||||
|
||||
#: sncfgtfs/models.py:435
|
||||
#: sncfgtfs/models.py:530
|
||||
msgid "Minimum transfer time"
|
||||
msgstr "Temps de correspondance minimum"
|
||||
|
||||
#: sncfgtfs/models.py:440
|
||||
#: sncfgtfs/models.py:535
|
||||
msgid "Transfer"
|
||||
msgstr "Correspondance"
|
||||
|
||||
#: sncfgtfs/models.py:441
|
||||
#: sncfgtfs/models.py:536
|
||||
msgid "Transfers"
|
||||
msgstr "Correspondances"
|
||||
|
||||
#: sncfgtfs/models.py:447
|
||||
msgid "Feed ID"
|
||||
msgstr "ID du flux"
|
||||
|
||||
#: sncfgtfs/models.py:452
|
||||
#: sncfgtfs/models.py:542
|
||||
msgid "Feed publisher name"
|
||||
msgstr "Nom de l'éditeur du flux"
|
||||
|
||||
#: sncfgtfs/models.py:456
|
||||
#: sncfgtfs/models.py:546
|
||||
msgid "Feed publisher URL"
|
||||
msgstr "URL de l'éditeur du flux"
|
||||
|
||||
#: sncfgtfs/models.py:461
|
||||
#: sncfgtfs/models.py:551
|
||||
msgid "Feed language"
|
||||
msgstr "Langue du flux"
|
||||
|
||||
#: sncfgtfs/models.py:465
|
||||
#: sncfgtfs/models.py:555
|
||||
msgid "Feed start date"
|
||||
msgstr "Date de début du flux"
|
||||
|
||||
#: sncfgtfs/models.py:469
|
||||
#: sncfgtfs/models.py:559
|
||||
msgid "Feed end date"
|
||||
msgstr "Date de fin du flux"
|
||||
|
||||
#: sncfgtfs/models.py:474
|
||||
#: sncfgtfs/models.py:564
|
||||
msgid "Feed version"
|
||||
msgstr "Version du flux"
|
||||
|
||||
#: sncfgtfs/models.py:478
|
||||
#: sncfgtfs/models.py:568
|
||||
msgid "Feed info"
|
||||
msgstr "Information du flux"
|
||||
|
||||
#: sncfgtfs/models.py:479
|
||||
#: sncfgtfs/models.py:569
|
||||
msgid "Feed infos"
|
||||
msgstr "Informations du flux"
|
||||
|
||||
#~ msgid "Route ID"
|
||||
#~ msgstr "ID de la ligne"
|
||||
|
||||
#~ msgid "Feed ID"
|
||||
#~ msgstr "ID du flux"
|
||||
|
BIN
sncfgtfs/static/assets/fonts/avenir-black.woff
Normal file
BIN
sncfgtfs/static/assets/fonts/avenir-book.woff
Normal file
BIN
sncfgtfs/static/assets/fonts/avenir-lighter.woff
Normal file
BIN
sncfgtfs/static/assets/fonts/avenir-medium.woff
Normal file
BIN
sncfgtfs/static/assets/fonts/icons.eot
Normal file
588
sncfgtfs/static/assets/fonts/icons.svg
Normal file
After Width: | Height: | Size: 286 KiB |
BIN
sncfgtfs/static/assets/fonts/icons.ttf
Normal file
BIN
sncfgtfs/static/assets/fonts/icons.woff
Normal file
BIN
sncfgtfs/static/assets/fonts/icons.woff2
Normal file
After Width: | Height: | Size: 9.9 KiB |
After Width: | Height: | Size: 20 KiB |
BIN
sncfgtfs/static/assets/img/brand/favicons/apple-touch-icon.png
Normal file
After Width: | Height: | Size: 7.2 KiB |
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/assets/img/docs/favicons/mstile-150x150.png"/>
|
||||
<TileColor>#00aba9</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
BIN
sncfgtfs/static/assets/img/brand/favicons/favicon-16x16.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
sncfgtfs/static/assets/img/brand/favicons/favicon-32x32.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
sncfgtfs/static/assets/img/brand/favicons/favicon.ico
Normal file
After Width: | Height: | Size: 15 KiB |
19
sncfgtfs/static/assets/img/brand/favicons/manifest.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "",
|
||||
"short_name": "",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/docs/favicons/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/docs/favicons/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"display": "standalone"
|
||||
}
|
BIN
sncfgtfs/static/assets/img/brand/favicons/mstile-150x150.png
Normal file
After Width: | Height: | Size: 7.1 KiB |
@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="1596.000000pt" height="1596.000000pt" viewBox="0 0 1596.000000 1596.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.11, written by Peter Selinger 2001-2013
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,1596.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M688 12165 c-2 -2 -93 -6 -203 -9 -280 -9 -317 -16 -393 -73 -27 -20
|
||||
-67 -77 -61 -85 2 -2 -3 -14 -11 -27 -10 -20 -12 -765 -12 -3990 l0 -3967 22
|
||||
-52 c28 -64 96 -127 154 -143 44 -12 14060 -17 14124 -5 111 21 153 73 216
|
||||
272 27 82 70 217 96 299 27 83 76 236 110 340 34 105 63 197 65 205 2 8 26 85
|
||||
53 170 28 85 83 256 122 380 103 325 121 379 141 440 10 30 55 170 99 310 45
|
||||
140 104 325 132 410 27 85 51 160 52 165 3 13 108 342 146 455 24 74 78 246
|
||||
86 275 2 6 53 165 114 355 61 190 113 352 115 360 2 8 14 44 25 80 79 243 86
|
||||
286 62 359 -8 24 -33 61 -55 82 -83 81 -646 418 -1102 659 -478 253 -1069 527
|
||||
-1580 732 -82 33 -163 66 -180 73 -16 8 -96 38 -176 69 -579 220 -1264 448
|
||||
-1854 615 -99 28 -202 58 -230 66 -27 8 -120 33 -205 55 -85 23 -177 48 -205
|
||||
55 -50 14 -598 149 -645 159 -14 3 -115 26 -225 51 -110 25 -209 47 -220 50
|
||||
-11 2 -96 20 -190 40 -191 40 -298 62 -336 69 -14 2 -73 13 -130 25 -57 11
|
||||
-115 23 -129 25 -14 3 -50 9 -80 15 -30 6 -71 13 -90 16 -19 3 -42 8 -50 10
|
||||
-8 2 -31 7 -50 10 -19 3 -57 10 -85 15 -27 5 -63 12 -80 15 -60 10 -621 104
|
||||
-660 110 -22 3 -53 8 -70 11 -16 2 -43 6 -60 9 -41 6 -443 64 -480 70 -16 2
|
||||
-84 11 -150 20 -66 8 -136 18 -155 21 -19 3 -54 7 -78 9 -23 3 -55 7 -70 9
|
||||
-15 3 -52 8 -82 11 -30 3 -66 8 -80 10 -14 2 -50 7 -80 10 -30 3 -89 10 -130
|
||||
15 -101 12 -156 19 -215 25 -99 11 -141 15 -230 25 -49 5 -117 12 -150 15 -33
|
||||
3 -103 10 -155 15 -52 5 -122 12 -155 15 -57 5 -97 8 -217 20 -29 3 -84 8
|
||||
-123 10 -38 3 -90 8 -115 10 -25 3 -83 7 -130 10 -47 3 -101 7 -120 10 -19 2
|
||||
-82 7 -140 10 -58 3 -125 8 -150 10 -79 7 -233 17 -300 20 -36 2 -112 6 -170
|
||||
9 -186 12 -262 16 -395 21 -71 3 -168 7 -215 10 -124 6 -382 16 -560 21 -176
|
||||
6 -1717 13 -1722 9z m2979 -3469 c89 -4 170 -8 180 -10 10 -2 49 -7 86 -11 37
|
||||
-3 76 -8 85 -10 9 -1 42 -6 72 -11 30 -4 57 -8 60 -9 3 -1 26 -5 53 -9 26 -5
|
||||
47 -11 47 -15 0 -3 -16 -56 -35 -116 -19 -61 -56 -176 -82 -258 l-47 -147 -40
|
||||
6 c-22 3 -43 7 -46 9 -3 2 -21 6 -40 9 -19 3 -46 8 -60 10 -149 28 -289 40
|
||||
-470 40 -125 0 -283 -9 -330 -19 -13 -2 -42 -7 -65 -10 -204 -28 -404 -110
|
||||
-533 -220 -35 -30 -84 -112 -98 -165 -43 -168 91 -283 616 -529 226 -106 587
|
||||
-286 690 -345 368 -209 568 -396 651 -610 73 -187 36 -407 -106 -631 -21 -33
|
||||
-41 -62 -45 -65 -3 -3 -14 -16 -23 -30 -60 -88 -237 -238 -372 -316 -63 -36
|
||||
-100 -55 -200 -99 -90 -40 -332 -109 -455 -130 -19 -3 -60 -10 -90 -15 -30 -5
|
||||
-80 -12 -110 -16 -30 -3 -66 -7 -80 -10 -106 -17 -603 -25 -760 -11 -78 7
|
||||
-317 39 -385 52 -72 14 -303 66 -331 76 -17 5 -42 12 -55 14 -112 22 -619 201
|
||||
-619 219 0 2 17 42 39 88 21 45 49 106 61 133 13 28 42 91 65 140 23 50 52
|
||||
114 65 143 17 38 29 52 40 48 8 -2 73 -30 143 -60 185 -81 509 -185 659 -211
|
||||
15 -3 59 -12 96 -20 38 -7 90 -17 118 -20 27 -3 61 -8 76 -11 160 -31 578 -36
|
||||
743 -9 116 19 124 21 212 45 329 90 481 327 347 541 -51 81 -201 204 -364 298
|
||||
-30 17 -156 81 -280 142 -541 265 -689 347 -864 478 -346 261 -458 537 -345
|
||||
851 108 298 398 527 849 670 36 11 74 22 85 25 11 2 38 9 60 15 120 30 300 63
|
||||
425 76 25 2 63 6 85 8 22 3 101 8 175 11 74 4 136 8 137 9 3 2 153 -1 310 -8z
|
||||
m7368 0 c109 -9 276 -26 304 -31 9 -2 24 -4 34 -4 13 -1 16 -7 13 -23 -6 -28
|
||||
-183 -545 -191 -558 -4 -6 -18 -8 -33 -5 -212 36 -760 41 -977 10 -22 -3 -56
|
||||
-8 -75 -11 -270 -36 -614 -165 -835 -313 -212 -142 -374 -320 -479 -529 -58
|
||||
-114 -107 -267 -120 -372 -3 -25 -8 -56 -11 -70 -8 -37 -8 -218 0 -275 55
|
||||
-418 326 -723 767 -863 143 -46 258 -70 433 -89 144 -16 666 -8 785 12 14 2
|
||||
41 6 60 9 19 3 60 10 90 16 30 6 66 14 80 16 14 3 28 8 31 12 3 4 26 72 52
|
||||
152 25 80 82 260 127 400 45 140 111 347 147 460 36 113 78 243 93 290 15 47
|
||||
37 117 49 155 37 116 162 507 176 550 8 22 48 148 90 280 64 200 216 679 230
|
||||
723 3 6 10 12 17 13 61 2 2830 0 2833 -2 3 -4 -159 -532 -169 -548 -4 -5 -421
|
||||
-9 -983 -9 -538 -1 -995 -1 -1015 -1 -36 -1 -38 -3 -52 -48 -8 -27 -35 -113
|
||||
-61 -193 -96 -298 -215 -671 -215 -674 0 -2 381 -4 846 -4 465 0 848 -2 850
|
||||
-4 2 -3 -7 -38 -20 -79 -13 -41 -51 -160 -85 -265 l-61 -191 -833 -1 c-457 -1
|
||||
-842 -1 -853 -2 -20 0 -24 -6 -40 -65 -1 -5 -41 -131 -89 -280 -48 -148 -95
|
||||
-297 -105 -330 -10 -33 -39 -125 -65 -205 -26 -80 -73 -228 -104 -329 -58
|
||||
-183 -58 -184 -96 -202 -124 -61 -537 -170 -770 -204 -22 -4 -47 -8 -55 -10
|
||||
-8 -2 -44 -7 -80 -11 -36 -3 -68 -8 -71 -10 -3 -2 -41 -6 -84 -10 -44 -3 -87
|
||||
-7 -96 -9 -112 -22 -659 -22 -775 -1 -11 2 -50 7 -89 12 -38 4 -72 8 -75 9 -3
|
||||
0 -27 5 -55 10 -243 42 -470 116 -690 227 -55 27 -107 56 -116 64 -8 8 -19 14
|
||||
-23 14 -15 0 -163 109 -247 183 -214 187 -385 464 -444 717 -36 156 -34 152
|
||||
-58 148 -23 -3 -37 -39 -135 -348 -17 -52 -53 -165 -80 -250 -28 -85 -78 -243
|
||||
-112 -350 -34 -107 -69 -215 -77 -240 -8 -25 -16 -49 -17 -55 -2 -5 -9 -29
|
||||
-16 -52 l-13 -43 -428 0 -428 0 -11 43 c-57 219 -251 780 -329 949 -11 26 -21
|
||||
49 -21 52 0 3 -11 29 -24 58 -13 29 -40 91 -61 138 -126 280 -299 613 -475
|
||||
915 -77 133 -181 298 -283 452 l-121 182 -17 -47 c-14 -38 -159 -483 -164
|
||||
-502 -3 -11 -38 -120 -135 -420 -56 -173 -126 -391 -156 -485 -30 -93 -60
|
||||
-172 -66 -176 -21 -13 -37 3 -54 54 -23 70 -78 179 -127 252 -48 70 -175 200
|
||||
-264 269 -35 27 -63 52 -63 56 0 3 30 98 66 211 73 228 225 700 304 944 29 88
|
||||
53 165 54 170 1 6 7 24 13 40 6 17 41 125 78 240 36 116 69 219 73 229 8 18
|
||||
25 19 400 19 290 -1 396 -4 406 -13 8 -6 57 -66 108 -133 515 -672 973 -1477
|
||||
1261 -2217 24 -63 50 -133 57 -155 l13 -40 28 85 c32 97 163 510 186 585 9 28
|
||||
29 88 44 135 15 47 55 171 88 275 32 105 98 312 146 460 124 388 216 678 271
|
||||
850 26 83 50 154 54 158 7 8 740 16 740 8 0 -2 -25 -80 -56 -175 -30 -94 -57
|
||||
-175 -58 -181 -2 -5 -6 -17 -9 -25 -6 -15 -58 -185 -63 -205 -1 -5 -16 -51
|
||||
-33 -102 -37 -111 -38 -123 -8 -123 14 0 58 35 127 101 86 83 268 229 356 287
|
||||
153 99 365 206 549 275 104 39 331 107 405 122 14 3 63 12 110 21 47 9 92 18
|
||||
101 19 9 2 40 6 69 10 29 4 62 8 72 10 11 2 63 7 116 11 53 3 99 8 101 10 6 6
|
||||
612 -3 696 -10z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.1 KiB |
BIN
sncfgtfs/static/assets/img/brand/sncf-immobilier-logo.png
Normal file
After Width: | Height: | Size: 5.4 KiB |
BIN
sncfgtfs/static/assets/img/brand/sncf-logistics-logo.png
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
sncfgtfs/static/assets/img/brand/sncf-logo.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
sncfgtfs/static/assets/img/brand/sncf-reseau-logo.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
sncfgtfs/static/assets/img/docs/design-bootstrap.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
sncfgtfs/static/assets/img/docs/designmetier-bootstrap.png
Normal file
After Width: | Height: | Size: 60 KiB |
22
sncfgtfs/static/assets/img/flags/english.svg
Normal file
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="26px" height="26px" viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 49.3 (51167) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Icons/Langages/english</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Icons/Langages/english" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M7.9224,24.9701 L7.9224,18.9461 L3.0644,21.3741 C4.3714,22.9231 6.0294,24.1661 7.9224,24.9701" id="Fill-1" fill="#00247D"></path>
|
||||
<path d="M18.0781,24.9701 C19.9701,24.1661 21.6291,22.9231 22.9351,21.3741 L18.0781,18.9461 L18.0781,24.9701 Z" id="Fill-3" fill="#00247D"></path>
|
||||
<path d="M3.064,4.6258 L7.922,7.0548 L7.922,1.0298 C6.03,1.8338 4.371,3.0768 3.064,4.6258" id="Fill-5" fill="#00247D"></path>
|
||||
<path d="M18.0781,1.0301 L18.0781,7.0541 L22.9351,4.6261 C21.6291,3.0761 19.9701,1.8341 18.0781,1.0301" id="Fill-7" fill="#00247D"></path>
|
||||
<path d="M7.9224,7.0545 L3.0644,4.6255 C2.8414,4.8885 2.6344,5.1645 2.4344,5.4455 L7.3864,7.9225 L1.0304,7.9225 C0.8704,8.2975 0.7304,8.6815 0.6064,9.0745 C0.5154,9.3615 0.4444,9.6575 0.3744,9.9535 L2.3644,9.9535 L9.9534,9.9535 L9.9534,9.2055 L9.9534,8.0705 L9.9534,0.3735 C9.2544,0.5415 8.5724,0.7535 7.9224,1.0305 L7.9224,7.0545 Z" id="Fill-9" fill="#FFFFFF"></path>
|
||||
<path d="M25.626,9.9535 C25.555,9.6575 25.484,9.3615 25.394,9.0745 C25.27,8.6825 25.129,8.2975 24.97,7.9225 L18.613,7.9225 L23.566,5.4455 C23.365,5.1645 23.158,4.8895 22.936,4.6255 L18.078,7.0545 L18.078,1.0305 C17.428,0.7535 16.746,0.5415 16.047,0.3735 L16.047,8.0705 L16.047,9.2055 L16.047,9.9535 L23.636,9.9535 L25.626,9.9535 Z" id="Fill-11" fill="#FFFFFF"></path>
|
||||
<path d="M0.374,16.0462 C0.445,16.3422 0.516,16.6382 0.606,16.9262 C0.73,17.3172 0.871,17.7022 1.03,18.0772 L7.387,18.0772 L2.434,20.5542 C2.635,20.8352 2.842,21.1102 3.064,21.3742 L7.922,18.9452 L7.922,24.9702 C8.572,25.2452 9.254,25.4572 9.953,25.6262 L9.953,17.9302 L9.953,16.7942 L9.953,16.0462 L2.365,16.0462 L0.374,16.0462 Z" id="Fill-13" fill="#FFFFFF"></path>
|
||||
<path d="M16.0469,16.0462 L16.0469,16.7942 L16.0469,17.9302 L16.0469,25.6262 C16.7459,25.4572 17.4279,25.2452 18.0779,24.9702 L18.0779,18.9452 L22.9359,21.3742 C23.1579,21.1102 23.3649,20.8352 23.5669,20.5542 L18.6129,18.0772 L24.9699,18.0772 C25.1289,17.7022 25.2699,17.3172 25.3939,16.9252 C25.4849,16.6382 25.5549,16.3422 25.6259,16.0462 L23.6359,16.0462 L16.0469,16.0462 Z" id="Fill-15" fill="#FFFFFF"></path>
|
||||
<path d="M23.5664,5.4456 L18.6134,7.9226 L24.9694,7.9226 C24.5954,7.0406 24.1174,6.2156 23.5664,5.4456" id="Fill-17" fill="#CF142B"></path>
|
||||
<path d="M23.5664,20.554 C24.1174,19.784 24.5954,18.959 24.9694,18.077 L18.6134,18.077 L23.5664,20.554 Z" id="Fill-19" fill="#CF142B"></path>
|
||||
<path d="M2.4341,20.554 L7.3871,18.077 L1.0301,18.077 C1.4051,18.959 1.8831,19.784 2.4341,20.554" id="Fill-21" fill="#CF142B"></path>
|
||||
<path d="M2.4341,5.4456 C1.8831,6.2156 1.4051,7.0406 1.0301,7.9226 L7.3871,7.9226 L2.4341,5.4456 Z" id="Fill-23" fill="#CF142B"></path>
|
||||
<path d="M25.6582,10.077 C25.6482,10.035 25.6362,9.995 25.6262,9.953 L23.6362,9.953 L16.0472,9.953 L16.0472,9.205 L16.0472,8.07 L16.0472,0.374 C15.0672,0.139 14.0512,0 13.0002,0 C11.9492,0 10.9322,0.139 9.9532,0.374 L9.9532,8.07 L9.9532,9.205 L9.9532,9.953 L2.3652,9.953 L0.3742,9.953 C0.3642,9.995 0.3512,10.035 0.3422,10.077 C0.1252,11.018 0.0002,11.994 0.0002,13 C0.0002,14.006 0.1252,14.982 0.3422,15.923 C0.3512,15.964 0.3642,16.005 0.3742,16.046 L2.3652,16.046 L9.9532,16.046 L9.9532,16.794 L9.9532,17.93 L9.9532,25.626 C10.9322,25.862 11.9492,26 13.0002,26 C14.0512,26 15.0672,25.862 16.0472,25.626 L16.0472,17.93 L16.0472,16.794 L16.0472,16.046 L23.6362,16.046 L25.6262,16.046 C25.6362,16.005 25.6482,15.964 25.6582,15.923 C25.8752,14.982 26.0002,14.006 26.0002,13 C26.0002,11.994 25.8752,11.018 25.6582,10.077" id="Fill-25" fill="#CF142B"></path>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.0 KiB |
12
sncfgtfs/static/assets/img/flags/french.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="26px" height="26px" viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 49.3 (51167) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Icons/Langages/french</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Icons/Langages/french" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M13,26 C14.637,26 16.195,25.688 17.636,25.14 L17.636,0.861 C16.195,0.313 14.637,0 13,0 C11.363,0 9.805,0.313 8.364,0.861 L8.364,25.14 C9.805,25.688 11.363,26 13,26" id="Fill-1" fill="#FFFFFF"></path>
|
||||
<path d="M26,13 C26,7.437 22.531,2.723 17.636,0.861 L17.636,25.14 C22.531,23.277 26,18.562 26,13" id="Fill-3" fill="#FF0000"></path>
|
||||
<path d="M0,13 C0,18.562 3.469,23.277 8.364,25.14 L8.364,0.861 C3.469,2.723 0,7.437 0,13" id="Fill-5" fill="#0088CE"></path>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 968 B |
12
sncfgtfs/static/assets/img/flags/german.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="26px" height="26px" viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 49.3 (51167) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Icons/Langages/deutsch</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Icons/Langages/deutsch" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M0,13 C0,14.637 0.313,16.195 0.861,17.636 L25.14,17.636 C25.687,16.195 26,14.637 26,13 C26,11.363 25.687,9.805 25.14,8.364 L0.861,8.364 C0.313,9.805 0,11.363 0,13" id="Fill-1" fill="#FF0000"></path>
|
||||
<path d="M13,26 C18.562,26 23.277,22.531 25.14,17.636 L0.861,17.636 C2.723,22.531 7.437,26 13,26" id="Fill-3" fill="#FECE00"></path>
|
||||
<path d="M13,0 C7.437,0 2.723,3.469 0.861,8.364 L25.14,8.364 C23.277,3.469 18.562,0 13,0" id="Fill-5" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 969 B |
16145
sncfgtfs/static/bootstrap-sncf.css
vendored
Normal file
1
sncfgtfs/static/bootstrap-sncf.css.map
Normal file
16152
sncfgtfs/static/bootstrap-sncf.darkmode.css
vendored
Normal file
1
sncfgtfs/static/bootstrap-sncf.darkmode.css.map
Normal file
3
sncfgtfs/static/bootstrap-sncf.darkmode.min.css
vendored
Normal file
76703
sncfgtfs/static/bootstrap-sncf.js
vendored
Normal file
1
sncfgtfs/static/bootstrap-sncf.js.map
Normal file
3
sncfgtfs/static/bootstrap-sncf.min.css
vendored
Normal file
91
sncfgtfs/static/bootstrap-sncf.min.js
vendored
Normal file
53
sncfgtfs/templates/sncfgtfs/gare.html
Normal file
@ -0,0 +1,53 @@
|
||||
{% load static %}
|
||||
|
||||
<!doctype html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Horaires en gare de {{ stop.name }}</title>
|
||||
|
||||
<link title="Dark mode" rel="stylesheet" href="{% static "bootstrap-sncf.darkmode.min.css" %}">
|
||||
|
||||
<script src="{% static "bootstrap-sncf.min.js" %}"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Horaires en gare de {{ stop.name }}</h1>
|
||||
|
||||
<form>
|
||||
<div class="row">
|
||||
<div class="col-auto">
|
||||
<label for="date">Afficher le tableau à un autre moment</label>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<input name="date" type="date" class="form-control" value="{{ query_date|date:"Y-m-d" }}">
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<input name="time" type="time" class="form-control form-inline" value="{{ query_time|time:"H:i" }}">
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<input type="submit" class="form-control form-inline">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Heure</th>
|
||||
<th>Destination</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for departure in next_departures %}
|
||||
<tr>
|
||||
<td>{{ departure.departure_time }}</td>
|
||||
<td>
|
||||
<h3>{{ departure.trip.destination }}</h3>
|
||||
{% for trip_stop in departure.trip.stop_times.all %}{% if trip_stop.stop_sequence > departure.stop_sequence %}{% if trip_stop.drop_off_type == 0 %}{{ trip_stop.stop.name }}{% if trip_stop.pickup_type == 0 %}, {% endif %}{% endif %}{% endif %}{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
7
sncfgtfs/urls.py
Normal file
@ -0,0 +1,7 @@
|
||||
from django.urls import path
|
||||
|
||||
from sncfgtfs import views
|
||||
|
||||
urlpatterns = [
|
||||
path('gare/<str:gare>/', views.GareView.as_view(), name='gare'),
|
||||
]
|
@ -1,3 +1,46 @@
|
||||
from django.shortcuts import render
|
||||
from datetime import date, datetime, time
|
||||
|
||||
# Create your views here.
|
||||
from django.db.models import Q
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from sncfgtfs.models import Stop, StopTime, CalendarDate, Calendar
|
||||
|
||||
|
||||
class GareView(TemplateView):
|
||||
template_name = "sncfgtfs/gare.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
stop = Stop.objects.get(name__iexact=kwargs["gare"], location_type=1)
|
||||
context['stop'] = stop
|
||||
next_departures = []
|
||||
|
||||
now = datetime.now()
|
||||
if self.request.GET.get('date', None):
|
||||
query_date = date.fromisoformat(self.request.GET['date'])
|
||||
else:
|
||||
query_date = now.date()
|
||||
if self.request.GET.get('time', None):
|
||||
query_time = time.fromisoformat(self.request.GET['time'])
|
||||
else:
|
||||
query_time = now.time()
|
||||
context['query_date'] = query_date
|
||||
context['query_time'] = query_time
|
||||
|
||||
qs = StopTime.objects.none()
|
||||
for child in Stop.objects.filter(name__iexact=kwargs["gare"], location_type=0).all():
|
||||
qs_child = StopTime.objects.filter(stop=child, pickup_type=0, departure_time__gte=query_time)
|
||||
qs_child = qs_child.filter(Q(trip__service_id__in=CalendarDate.objects.filter(
|
||||
date=query_date, exception_type=1).values_list('service_id'))
|
||||
| Q(trip__service_id__in=Calendar.objects.filter(
|
||||
start_date__lte=query_date,
|
||||
end_date__gte=query_date,
|
||||
**{f"{query_date:%A}".lower(): True})
|
||||
.filter(~Q(id__in=CalendarDate.objects.filter(
|
||||
date=query_date, exception_type=2).values_list('service_id')))
|
||||
.values_list('id')))
|
||||
qs = qs.union(qs_child)
|
||||
next_departures += qs.order_by("departure_time")[:20].all()
|
||||
print(len(next_departures))
|
||||
context['next_departures'] = next_departures
|
||||
return context
|
||||
|