diff --git a/app/blueprints/api/endpoints.py b/app/blueprints/api/endpoints.py index 85026e4b..7224d0d5 100644 --- a/app/blueprints/api/endpoints.py +++ b/app/blueprints/api/endpoints.py @@ -804,6 +804,11 @@ def json_schema(): "type": ["string", "null"], "format": "uri" }, + "translation_url": { + "description": "URL to send users interested in translating your package", + "type": ["string", "null"], + "format": "uri" + } }, }) diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py index c07a4422..c71f75f1 100644 --- a/app/blueprints/packages/packages.py +++ b/app/blueprints/packages/packages.py @@ -270,6 +270,7 @@ class PackageForm(FlaskForm): forums = IntegerField(lazy_gettext("Forum Topic ID"), [Optional(), NumberRange(0, 999999)]) video_url = StringField(lazy_gettext("Video URL"), [Optional(), URL()], filters=[lambda x: x or None]) donate_url = StringField(lazy_gettext("Donate URL"), [Optional(), URL()], filters=[lambda x: x or None]) + translation_url = StringField(lazy_gettext("Translation URL"), [Optional(), URL()], filters=[lambda x: x or None]) submit = SubmitField(lazy_gettext("Save")) @@ -323,6 +324,7 @@ def handle_create_edit(package: typing.Optional[Package], form: PackageForm, aut "forums": form.forums.data, "video_url": form.video_url.data, "donate_url": form.donate_url.data, + "translation_url": form.translation_url.data, }) if wasNew: diff --git a/app/flatpages/help/api.md b/app/flatpages/help/api.md index 6f30be25..8113a2fd 100644 --- a/app/flatpages/help/api.md +++ b/app/flatpages/help/api.md @@ -101,6 +101,7 @@ curl -X DELETE https://content.minetest.net/api/delete-token/ \ * `forums`: forum topic ID. * `video_url`: URL to a video. * `donate_url`: URL to a donation page. + * `translation_url`: URL to send users interested in translating your package. * `game_support`: Array of game support information objects. Not currently documented, as subject to change. * GET `/api/packages///hypertext/` * Converts the long description to [Minetest Markup Language](https://github.com/minetest/minetest/blob/master/doc/lua_api.md#markup-language) diff --git a/app/flatpages/help/package_config.md b/app/flatpages/help/package_config.md index c2bb2e7a..60d6546c 100644 --- a/app/flatpages/help/package_config.md +++ b/app/flatpages/help/package_config.md @@ -76,6 +76,7 @@ It should be a JSON dictionary with one or more of the following optional keys: * `forums`: forum topic ID. * `video_url`: URL to a video. * `donate_url`: URL to a donation page. +* `translation_url`: URL to send users interested in translating your package. Use `null` or `[]` to unset fields where relevant. diff --git a/app/logic/packages.py b/app/logic/packages.py index 43b95448..ae4f2dca 100644 --- a/app/logic/packages.py +++ b/app/logic/packages.py @@ -66,6 +66,7 @@ ALLOWED_FIELDS = { "forums": int, "video_url": str, "donate_url": str, + "translation_url": str, } ALIASES = { @@ -125,7 +126,7 @@ def do_edit_package(user: User, package: Package, was_new: bool, was_web: bool, validate(data) - for field in ["short_desc", "desc", "website", "issueTracker", "repo", "video_url", "donate_url"]: + for field in ["short_desc", "desc", "website", "issueTracker", "repo", "video_url", "donate_url", "translation_url"]: if field in data and has_blocked_domains(data[field], user.username, f"{field} of {package.get_id()}"): raise LogicError(403, lazy_gettext("Linking to blocked sites is not allowed")) @@ -148,7 +149,7 @@ def do_edit_package(user: User, package: Package, was_new: bool, was_web: bool, raise LogicError(403, "Never gonna give you up / Never gonna let you down / Never gonna run around and desert you") for key in ["name", "title", "short_desc", "desc", "type", "dev_state", "license", "media_license", - "repo", "website", "issueTracker", "forums", "video_url", "donate_url"]: + "repo", "website", "issueTracker", "forums", "video_url", "donate_url", "translation_url"]: if key in data: setattr(package, key, data[key]) diff --git a/app/models/packages.py b/app/models/packages.py index 7181d37a..bbf4c3e5 100644 --- a/app/models/packages.py +++ b/app/models/packages.py @@ -586,6 +586,7 @@ class Package(db.Model): "forums": self.forums, "video_url": self.video_url, "donate_url": self.donate_url_actual, + "translation_url": self.translation_url, "tags": sorted([x.name for x in self.tags]), "content_warnings": sorted([x.name for x in self.content_warnings]), diff --git a/app/templates/packages/create_edit.html b/app/templates/packages/create_edit.html index ce6fbaec..af795f35 100644 --- a/app/templates/packages/create_edit.html +++ b/app/templates/packages/create_edit.html @@ -119,6 +119,7 @@ has_view=True) }} {{ render_field(form.video_url, class_="pkg_meta", hint=_("YouTube videos will be shown in an embed.")) }} {{ render_field(form.donate_url, class_="pkg_meta", hint=_("If blank, the author's donation URL will be used instead.")) }} + {{ render_field(form.translation_url, class_="pkg_meta", hint=_("How can users translate your package? ie: weblate URL or a help page")) }}
{{ render_submit_field(form.submit) }}
diff --git a/app/templates/packages/view.html b/app/templates/packages/view.html index 9396665f..dd60e27a 100644 --- a/app/templates/packages/view.html +++ b/app/templates/packages/view.html @@ -224,6 +224,12 @@ {{ _("Issue Tracker") }} {% endif %} + {% if package.translation_url %} + + + {{ _("Translate") }} + + {% endif %} {{ _("Statistics") }}