diff --git a/Makefile b/Makefile index dea78db..0964b91 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,8 @@ +.PHONY: things +all: makemessages compilemessages + makemessages: - python manage.py makemessages -l de --extension=html,txt,jinja,py + python manage.py makemessages -l de --extension=html,txt,jinja,py --ignore "node_modules/*" compilemessages: python manage.py compilemessages diff --git a/campaigns/templates/campaigns/campaign_detail.jinja b/campaigns/templates/campaigns/campaign_detail.jinja index e2a4fe8..686355c 100644 --- a/campaigns/templates/campaigns/campaign_detail.jinja +++ b/campaigns/templates/campaigns/campaign_detail.jinja @@ -20,6 +20,6 @@ {% trans %}Homepage{% endtrans %} - {% endif %} + {% trans %}Export{% endtrans %} {% endblock %} diff --git a/campaigns/templates/campaigns/campaign_export.jinja b/campaigns/templates/campaigns/campaign_export.jinja new file mode 100644 index 0000000..4cf4f09 --- /dev/null +++ b/campaigns/templates/campaigns/campaign_export.jinja @@ -0,0 +1,13 @@ +{% extends "tenantbase.jinja" %} + +{% block title %}{% trans %}Export{% endtrans %}{% endblock %} + +{% block content %} +

{% trans %}Export{% endtrans %}

+ +

{% trans trimmed %} + RPGnotes is an experimental website. + To avoid lock-in of campaign data, you can always export all of your data here: + {% endtrans %}

+ {% trans %}Export{% endtrans %} +{% endblock %} diff --git a/campaigns/urls.py b/campaigns/urls.py index 953e739..cf3b58b 100644 --- a/campaigns/urls.py +++ b/campaigns/urls.py @@ -5,5 +5,7 @@ from campaigns import views as campaign_views urlpatterns = [ path("", campaign_views.CampaignDetailView.as_view(), name="campaigndetail"), path("edit", campaign_views.CampaignEditView.as_view(), name="campaignedit"), + path("export", campaign_views.ExportHelpView.as_view(), name="export"), + path("export/data", campaign_views.export, name="exportdata"), path("delete", campaign_views.CampaignDeleteView.as_view(), name="campaigndelete"), ] diff --git a/campaigns/views.py b/campaigns/views.py index 7e5c0b5..cbaedaa 100644 --- a/campaigns/views.py +++ b/campaigns/views.py @@ -1,14 +1,23 @@ from django.contrib.auth.mixins import LoginRequiredMixin +from django.core import serializers from django.core.mail import mail_admins +from django.http import HttpResponse, HttpRequest, JsonResponse from django.shortcuts import redirect from django.urls import reverse_lazy from django.utils.text import slugify from django.views import generic +from django.views.generic import TemplateView from tenant_users.tenants.tasks import provision_tenant from campaigns.forms import CampaignForm from campaigns.models import Campaign +from characters.models import Character from common.middlewares import demo_campaign_id +from days.models import Session, IngameDay +from factions.models import Faction +from locations.models import Location +from loot.models import Loot, LootType +from notes.models import Note from users.models import TenantUser @@ -86,3 +95,28 @@ class CampaignDeleteView(LoginRequiredMixin, generic.DeleteView): self.object: Campaign = self.get_object() self.object.delete_tenant() return redirect("http://test.localhost:8000/") + + +class ExportHelpView(TemplateView): + template_name = "campaigns/campaign_export.jinja" + + +def export(request: HttpRequest) -> HttpResponse: + models = { + "characters": Character, + "sessions": Session, + "ingameday": IngameDay, + "factions": Faction, + "locations": Location, + "loottype": LootType, + "loot": Loot, + "notes": Note, + + } + data = {} + for name, obj in models.items(): + data[name] = serializers.serialize("python", obj.objects.all()) + + data["campaign"] = serializers.serialize("python", [request.tenant])[0] + # return JsonResponse({"c": list(Character.objects.all().values())}) + return JsonResponse(data, safe=False) diff --git a/common/views.py b/common/views.py index bb55728..373e0a0 100644 --- a/common/views.py +++ b/common/views.py @@ -52,13 +52,13 @@ def save_draft(request: HttpRequest) -> HttpResponse: @condition(etag_func=calc_etag) -def debug_css(request): +def debug_css(request: HttpRequest) -> HttpResponse: css, source_map = get_css(debug=True) return HttpResponse(css, content_type="text/css") @condition(etag_func=calc_etag) -def debug_css_sourcemap(request): +def debug_css_sourcemap(request: HttpRequest) -> HttpResponse: css, source_map = get_css(debug=True) return HttpResponse(source_map, content_type="application/json") diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 418b7a5..38c4c5e 100644 Binary files a/locale/de/LC_MESSAGES/django.mo and b/locale/de/LC_MESSAGES/django.mo differ diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 93b2694..1297e38 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-07-05 21:15+0200\n" +"POT-Creation-Date: 2022-11-30 14:01+0100\n" "PO-Revision-Date: 2022-06-19 14:13+0200\n" "Last-Translator: Lukas Winkler \n" "Language-Team: \n" @@ -18,7 +18,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.1\n" -#: campaigns/models.py:12 common/models/nameslugmodel.py:8 loot/models.py:14 +#: campaigns/models.py:12 common/models/nameslugmodel.py:8 loot/models.py:24 #: users/models.py:10 msgid "Name" msgstr "Name" @@ -47,15 +47,29 @@ msgstr "" msgid "Homepage" msgstr "Startseite" +#: campaigns/templates/campaigns/campaign_detail.jinja:24 +#: campaigns/templates/campaigns/campaign_export.jinja:3 +#: campaigns/templates/campaigns/campaign_export.jinja:6 +#: campaigns/templates/campaigns/campaign_export.jinja:12 +msgid "Export" +msgstr "Export" + #: campaigns/templates/campaigns/campaign_edit.jinja:5 msgid "Add new campaign" msgstr "Neue Campagne erstellen" #: campaigns/templates/campaigns/campaign_edit.jinja:9 -#: loot/templates/loot/edit.jinja:27 loot/templates/loot/edit.jinja:30 +#: loot/templates/loot/edit.jinja:18 loot/templates/loot/edit.jinja:21 msgid "Add" msgstr "Hinzufügen" +#: campaigns/templates/campaigns/campaign_export.jinja:8 +msgid "" +"RPGnotes is an experimental website. To avoid lock-in of campaign data, you " +"can always export all of your data here:" +msgstr "RPGnotes ist eine experimentelle Webseite. Damit Campaign-Daten weiterverwendet werden können, " +"können hier immer alle Daten exportiert werden:" + #: campaigns/templates/campaigns/campaign_overview.jinja:3 #: campaigns/templates/campaigns/campaign_overview.jinja:9 msgid "Campaign Overview" @@ -92,7 +106,7 @@ msgid "Faction" msgstr "Fraktion" #: characters/models.py:41 characters/templates/characters/detail.jinja:61 -#: locations/models.py:26 loot/models.py:28 +#: locations/models.py:26 loot/models.py:38 #: loot/templates/loot/overview.jinja:17 msgid "Location" msgstr "Ort" @@ -133,7 +147,7 @@ msgstr "Charakter hinzufügen" #: days/templates/days/day_detail.jinja:24 #: factions/templates/factions/detail.jinja:24 #: locations/templates/locations/detail.jinja:22 -#: loot/templates/loot/overview.jinja:60 notes/templates/notes/detail.jinja:22 +#: loot/templates/loot/overview.jinja:62 notes/templates/notes/detail.jinja:22 msgid "Edit" msgstr "Bearbeiten" @@ -206,7 +220,7 @@ msgstr "Mitglieder" msgid "Part of" msgstr "Teil von" -#: locations/models.py:22 loot/models.py:18 notes/models.py:22 +#: locations/models.py:22 loot/models.py:28 notes/models.py:22 msgid "Image" msgstr "Bild" @@ -222,27 +236,36 @@ msgstr "Ort hinzufügen" msgid "Contains" msgstr "Enthält" -#: loot/models.py:15 loot/templates/loot/overview.jinja:14 +#: loot/models.py:25 loot/templates/loot/overview.jinja:14 msgid "Quantity" msgstr "Anzahl" -#: loot/models.py:16 +#: loot/models.py:26 msgid "Value (Gold)" msgstr "Wert (Gold)" -#: loot/models.py:17 +#: loot/models.py:27 msgid "Weight (lb)" msgstr "Gewicht (lb)" -#: loot/models.py:22 loot/templates/loot/overview.jinja:16 +#: loot/models.py:32 loot/templates/loot/overview.jinja:16 msgid "Claimant" msgstr "Beansprucht von" -#: loot/models.py:31 +#: loot/models.py:41 msgid "Magic Item" msgstr "Magisches Item" -#: loot/models.py:35 loot/models.py:36 loot/templates/loot/overview.jinja:3 +#: loot/models.py:42 +msgid "Former" +msgstr "Ehemalig" + +#: loot/models.py:46 loot/templates/loot/overview.jinja:18 +#: loot/templates/loot/overview.jinja:77 +msgid "Type" +msgstr "Typ" + +#: loot/models.py:51 loot/models.py:52 loot/templates/loot/overview.jinja:3 #: loot/templates/loot/overview.jinja:6 templates/tenantbase.jinja:42 msgid "Loot" msgstr "Loot" @@ -252,45 +275,43 @@ msgstr "Loot" msgid "Edit \"%(object)s\"" msgstr "\"%(object)s\" bearbeiten" -#: loot/templates/loot/edit.jinja:7 loot/templates/loot/edit.jinja:9 -#: loot/templates/loot/edit.jinja:11 loot/templates/loot/edit.jinja:13 -msgid "Delete" -msgstr "Löschen" - -#: loot/templates/loot/edit.jinja:16 +#: loot/templates/loot/edit.jinja:7 msgid "Add new" msgstr "Neu erstellen" -#: loot/templates/loot/edit.jinja:22 -#, fuzzy -#| msgid "Session" +#: loot/templates/loot/edit.jinja:15 msgid "Add Session" -msgstr "Session" +msgstr "Session hinzufügen" -#: loot/templates/loot/edit.jinja:27 loot/templates/loot/edit.jinja:30 +#: loot/templates/loot/edit.jinja:18 loot/templates/loot/edit.jinja:21 #: templates/common/languageselect.jinja:17 #: templates/registration/registration_form.jinja:9 #: users/templates/users/edit.jinja:10 msgid "Save" msgstr "Speichern" +#: loot/templates/loot/edit.jinja:24 loot/templates/loot/edit.jinja:26 +#: loot/templates/loot/edit.jinja:28 loot/templates/loot/edit.jinja:30 +msgid "Delete" +msgstr "Löschen" + #: loot/templates/loot/overview.jinja:13 msgid "Item" msgstr "Objekt" -#: loot/templates/loot/overview.jinja:15 loot/templates/loot/overview.jinja:83 +#: loot/templates/loot/overview.jinja:15 loot/templates/loot/overview.jinja:89 msgid "Total Value" msgstr "Gesamtwert" -#: loot/templates/loot/overview.jinja:67 +#: loot/templates/loot/overview.jinja:69 msgid "Value each" msgstr "Wert pro Stück" -#: loot/templates/loot/overview.jinja:71 +#: loot/templates/loot/overview.jinja:73 msgid "Weight" msgstr "Gewicht" -#: loot/templates/loot/overview.jinja:86 +#: loot/templates/loot/overview.jinja:92 msgid "Add Loot" msgstr "Loot hinzufügen" @@ -306,11 +327,11 @@ msgstr "Notizen" msgid "Add Note" msgstr "Notiz hinzufügen" -#: rpg_notes/settings.py:196 +#: rpg_notes/settings.py:197 msgid "German" msgstr "Deutsch" -#: rpg_notes/settings.py:197 +#: rpg_notes/settings.py:198 msgid "English" msgstr "Englisch" @@ -332,16 +353,17 @@ msgid "Permission Denied" msgstr "Zugriff verweigert" #: templates/403.jinja:10 -#, python-format -msgid "You might want to go back to the homepage." +msgid "" +"You might want to go back to the homepage." msgstr "" -"Du möchtest vielleicht zurück zur Startseite gehen." +"Du möchtest vielleicht zurück zur Startseite gehen." -#: templates/base.jinja:37 templates/tenantbase.jinja:88 +#: templates/base.jinja:39 templates/tenantbase.jinja:88 msgid "Log out" msgstr "Abmelden" -#: templates/base.jinja:39 templates/common/homepage.jinja:20 +#: templates/base.jinja:41 templates/common/homepage.jinja:20 #: templates/registration/login.jinja:21 msgid "Log in" msgstr "Anmelden" @@ -361,7 +383,7 @@ msgstr "Zurück" #: templates/common/homepage.jinja:10 msgid "" "An experimental, collaborative note taking app and wiki optimized for RPG " -"games." +"games" msgstr "" "Eine experimentelle, kollaborative Notiz-App und Wiki optimiert für RPGs" diff --git a/templates/common/homepage.jinja b/templates/common/homepage.jinja index 7b5cff4..7407dd0 100644 --- a/templates/common/homepage.jinja +++ b/templates/common/homepage.jinja @@ -8,7 +8,7 @@

{% trans trimmed %} - An experimental, collaborative note taking app and wiki optimized for RPG games. + An experimental, collaborative note taking app and wiki optimized for RPG games {% endtrans %}