Merge pull request #5763 from mikeconley/device-migration-3.0-sync

Device migration 3.0 branch sync with main branch
This commit is contained in:
Mike Conley 2023-11-09 12:35:28 -05:00 коммит произвёл GitHub
Родитель 1c88b4ea54 7923d0d368
Коммит 41bf3412c1
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
15 изменённых файлов: 245 добавлений и 97 удалений

16
.vscode/settings.json поставляемый
Просмотреть файл

@ -1,19 +1,5 @@
{
"python.defaultInterpreterPath": "/venv/bin/python",
"python.formatting.provider": "none",
"python.formatting.blackPath": "/venv/bin/black",
"python.formatting.blackArgs": [
"--config=/app/pyproject.toml"
],
"python.linting.enabled": true,
"python.linting.flake8Enabled": false,
"python.linting.pylintEnabled": true,
"python.linting.pylintArgs": [
"--disable=C0111",
"--enable=W0614",
"--load-plugins=pylint_django",
"--django-settings-module=kitsune.settings"
],
"python.autoComplete.extraPaths": [
"/vendor"
],
@ -35,7 +21,7 @@
]
},
"[jinja-html]": {
"editor.formatOnSave": true,
"editor.formatOnSave": false,
"editor.defaultFormatter": "HookyQR.beautify"
},
"[jsonc]": {

Просмотреть файл

@ -10,8 +10,8 @@
<p>
{% trans %}
Mozilla support is fully powered by our volunteer community that is
helping hundreds of users everyday. This community is formed by
Mozilla support forum is fully powered by our volunteer community that helps
hundreds of users every day. This community is formed by
passionate Firefox and Thunderbird users who take some of their
spare time to help others. We couldn't do it without your passion
and enthusiasm. Your contribution, as minor as it might seem, has
@ -23,30 +23,23 @@
<p><strong>{{ _('Tell us about yourself!') }}</strong></p>
<p>
{% trans intro_url='/forums/contributors', irc_url='https://client01.chat.mibbit.com/?server=irc.mozilla.org&channel=#sumo' %}
{% trans intro_url='/forums/contributors', matrix_url='https://chat.mozilla.org/#/room/#SUMO:mozilla.org' %}
We are always very happy to hear from new people who like helping
on the forums so if you havent met our community yet
<a href="{{ intro_url }}">
please take a minute to introduce yourself
</a>.
on the forums so if you havent met our community yet,
<a href="{{ intro_url }}">please take a minute to introduce yourself</a>.
If you want to stay low-profile, thats also ok :). You can also
find us all hanging out on IRC, on the
<a href="{{ irc_url }}">
#sumo channel
</a>.
find us all hanging out on Matrix, on the <a href="{{ matrix_url }}">#sumo channel</a>.
{% endtrans %}
</p>
<p><strong>{{ _('Learn new things') }}</strong></p>
<p>
{% trans training_url='/kb/introduction-contributor-quality-training?utm_source=training&utm_medium=1intro&utm_term=cqt&utm_campaign=Contributorqualitytraining' %}
{% trans onboarding_url='/kb/how-contribute-support-forum?utm_source=onboardingemail&utm_medium=1intro&utm_term=cqt&utm_campaign=ContribOnboarding' %}
If you are interested in learning more about how this whole support
thing works, check out our
<a href="{{ training_url }}">
contributor training
</a>.
This includes some cool troubleshooting info, guidelines, how-to
<a href="{{ onboarding_url }}">contributor guidelines</a>.
This includes some cool troubleshooting info, how-to
questions, and info about where to find more help if stuck.
{% endtrans %}
</p>
@ -54,16 +47,14 @@
<p><strong>{{ _('Stay in touch') }}</strong></p>
<p>
{% trans forums_url='/forums/contributors', blog_url='https://blog.mozilla.org/sumo/', twitter_url='https://twitter.com/sumo_mozilla', meetings_url='https://wiki.mozilla.org/Support/Weekly_Meetings' %}
{% trans forums_url='/forums/contributors', blog_url='https://blog.mozilla.org/sumo/', twitter_url='https://twitter.com/sumo_mozilla', meetings_url='https://wiki.mozilla.org/Support/Weekly_Meetings', participate_url='/kb/how-participate-sumo-contributor-meetings' %}
Finally, if you want to follow all news related to SUMO, dont
forget about our
<a href="{{ forums_url }}">community forums</a>,
<a href="{{ blog_url }}">official blog</a> and
<a href="{{ twitter_url }}">Twitter account</a>.
We also
<a href="{{ meetings_url }}">
meet almost every Monday
</a> - and you can join us.
<a href="{{ meetings_url }}">meet every month</a> - and you can <a href="{{ participate_url }}">join us</a>.
{% endtrans %}
</p>

Просмотреть файл

@ -6,12 +6,13 @@ made somebody's day!
{% endtrans %}
{% trans %}
Mozilla support is fully powered by our volunteer community that is helping
hundreds of users everyday. This community is formed by passionate Firefox and
Thunderbird users who take some of their spare time to help others. We couldn't
do it without your passion and enthusiasm. Your contribution, as minor as it
might seem, has tremendous value. Solving one issue in the support forums can
help up to 1000 users a day!
Mozilla support forum is fully powered by our volunteer community that helps
hundreds of users every day. This community is formed by
passionate Firefox and Thunderbird users who take some of their
spare time to help others. We couldn't do it without your passion
and enthusiasm. Your contribution, as minor as it might seem, has
tremendous value. Solving one issue in the support forums can help
up to 1000 users a day!
{% endtrans %}
---
@ -19,16 +20,16 @@ help up to 1000 users a day!
{% trans %}
We are always very happy to hear from new people who like helping on the forums
so if you havent met our community yet please take a minute to introduce
so if you havent met our community yet, please take a minute to introduce
yourself. If you want to stay low-profile, thats also ok :). You can also find
us all hanging out on IRC, on the #sumo channel on irc.mozilla.org.
us all hanging out on Matrix, on the #sumo channel.
{% endtrans %}
* Introductions - https://{{ host }}/forums/contributors
* IRC - https://www.mibbit.com/?server=irc.mozilla.org&channel=#sumo
* Matrix - https://chat.mozilla.org/#/room/#SUMO:mozilla.org
{% trans url='https://' + host + '/forums/contributors' %}
The community forum is at {{ url }} .
The community forum is at {{ url }}.
{% endtrans %}
---
@ -36,11 +37,11 @@ The community forum is at {{ url }} .
{% trans %}
If you are interested in learning more about how this whole support thing
works, check out our contributor training. This includes some cool
troubleshooting info, guidelines, how-to questions, and info about where to
works, check out our contributor guidelines. This includes some cool
troubleshooting info, how-to questions, and info about where to
find more help if stuck.
{% endtrans %}
https://{{ host }}/kb/introduction-contributor-quality-training
https://{{ host }}/kb/how-contribute-support-forum?utm_source=onboardingemail&utm_medium=1intro&utm_term=cqt&utm_campaign=ContribOnboarding
---
{{ _('Stay in touch') }}
@ -54,8 +55,13 @@ Finally, if you want to follow all news related to SUMO, dont forget about ou
* {{ _('Twitter account') }} - https://twitter.com/sumo_mozilla
* {{ _('Weekly meetings') }} - https://wiki.mozilla.org/Support/Weekly_Meetings
{% trans %}
We also meet every month and you can join us.
{% endtrans %}
* {{ _('Contributor meetings') }} - https://{{ host }}/kb/how-participate-sumo-contributor-meetings
{% trans %}
Thank you once more. We are looking forward to seeing you more often around
SUMO! Keep rocking!
{% endtrans %}
{% endautoescape %}
{% endautoescape %}

Просмотреть файл

@ -29,25 +29,19 @@
<p>
If you want to get in touch with other people localizing SUMO in your
language,
<a href="/forums/l10n-forum/711196?last=64679">
go to our l10n forums
language, go to our
<a href="/forums/l10n-forum/">
l10n forum
</a>.
You can also find people hanging out on IRC at
<a href="https://www.mibbit.com/?server=irc.mozilla.org&channel=%23sumo-l10ns">
#sumo-l10ns
</a>
and
<a href="https://www.mibbit.com/?server=irc.mozilla.org&channel=%23sumo">
#sumo.
</a>
You can also find people hanging out on Matrix at
<a href="https://chat.mozilla.org/#/room/#SUMO:mozilla.org">#sumo channel</a>.
</p>
<p><strong>Stay in touch</strong></p>
<p>
Finally, if you want to follow all news related to SUMO, dont forget about
Finally, if you want to follow all news related to SUMO, dont forget about our
<a href="/forums/contributors">
our community forums
community forums
</a>,
<a href="https://blog.mozilla.org/sumo/">
official blog
@ -58,9 +52,9 @@
</a>.
We also
<a href="https://wiki.mozilla.org/Support/Weekly_Meetings">
meet almost every Monday
meet every month
</a>
- and you can join us.
- and you can <a href="/kb/how-participate-sumo-contributor-meetings">join us</a>.
</p>
<p><strong>Keep rocking</strong></p>

Просмотреть файл

@ -22,11 +22,10 @@ localizing skills!
* Locale Page - https://{{ host }}/kb/locales
If you want to get in touch with other people localizing SUMO in your language
you can check out the forums or our IRC channels.
you can check out the forums or Matrix.
* L10n forums - https://{{ host }}/forums/l10n-forum/711196?last=64679
* L10n IRC channel - https://www.mibbit.com/?server=irc.mozilla.org&channel=%23sumo-l10ns
* General SUMO IRC channel - https://www.mibbit.com/?server=irc.mozilla.org&channel=%23sumo
* Matrix sumo channel - https://chat.mozilla.org/#/room/#SUMO:mozilla.org
---
Stay in touch
@ -37,6 +36,7 @@ Finally, if you want to follow all news related to SUMO, dont forget about ou
* Official blog - https://blog.mozilla.org/sumo/
* Twitter account - https://twitter.com/sumo_mozilla
* Weekly meetings - https://wiki.mozilla.org/Support/Weekly_Meetings
* Join contributor meetings - https://{{ host }}/kb/how-participate-sumo-contributor-meetings
---
Keep rocking

Просмотреть файл

@ -49,7 +49,7 @@ class WelcomeEmailsTests(TestCase):
# Check that one link used the right host.
assert "https://testserver/forums/contributors" in mail.outbox[0].body
assert (
"The community forum is at https://testserver/forums/contributors ."
"The community forum is at https://testserver/forums/contributors."
in mail.outbox[0].body
)
# Assumption: links will be done consistently, and so this is enough testing.

Просмотреть файл

@ -18,7 +18,7 @@
<td>
{{ number(row.num_visits) }}
{% if row.visits_ratio %}
<div class="absolute-graph" data-absolute-graph={{ row.visits_ratio * 100 }}></div>
<div class="absolute-graph" data-absolute-graph="{{ row.visits_ratio * 100 }}%"></div>
{% endif %}
</td>
<td class="status {% if not row.latest_revision %}needs-review{% endif %}">

Просмотреть файл

@ -20,7 +20,7 @@
{{ number(row.visits) }}
</td>
<td>
<div class="absolute-graph" data-absolute-graph="{{ row.percent }}"></div>
<div class="absolute-graph" data-absolute-graph="{{ row.percent }}%"></div>
</td>
<td class="status">
{% if row.updated is defined %}
@ -28,14 +28,14 @@
{% elif row.custom %}
<div class="custom">{{ row.column4_data }}</div>
{% else %}
{% if row.status %}
{% if row.status and row.status_class != "ok" %}
<a href="{{ row.status_url }}">
{{ row.status }}
{% if row.status_class %}<span class="{{ row.status_class }}"></span>{% endif %}
</a>
{% else %}
{# For having a bullet char without a link #}
<span class="{{ row.status_class }}"></span>
<span class="{{ row.status_class }}">{{ row.status }}</span>
{% endif %}
{% endif %}
</td>

Просмотреть файл

@ -41,16 +41,15 @@
{{ row.title }}
<div>{{ row.description }}</div>
</td>
<td colspan="2">
<td>
{% trans numerator=number(row.numerator), denominator=number(row.denominator) %}
{{ numerator }} of {{ denominator }}
{{ numerator }}
<small>of {{ denominator }}</small>
{% endtrans %}
</td>
</tr>
<tr>
<td colspan="3">
<td>
{{ row.percent }}%
<div class="percent-graph">
<span>{{ row.percent }}%</span>
<div style="width: {{ row.percent }}%"{% if should_color %} class="{{ 'best' if row.percent == 100 else ('better' if row.percent >= 20 else 'bad') }}"{% endif %}></div>
</div>
</td>

Просмотреть файл

@ -74,7 +74,7 @@ most_visited_translation_from = (
REVIEW_STATUSES = {
1: (_lazy("Review Needed"), "wiki.document_revisions", "review"),
0: ("", "", "ok"),
0: ("Updated", "", "ok"),
}
SIGNIFICANCE_STATUSES = {
MEDIUM_SIGNIFICANCE: (_lazy("Update Needed"), "wiki.edit_document", "update"),
@ -710,7 +710,7 @@ class CategoryReadout(Readout):
def _format_row(self, row):
(slug, title, visits, needs_changes, needs_review, unready_for_l10n) = row
if needs_review:
status, view_name, dummy = REVIEW_STATUSES[needs_review]
status, view_name, _ = REVIEW_STATUSES[needs_review]
elif needs_changes:
status = _lazy("Changes Needed")
view_name = "wiki.document_revisions"
@ -718,7 +718,7 @@ class CategoryReadout(Readout):
status = _lazy("Changes Not Ready For Localization")
view_name = "wiki.document_revisions"
else:
status, view_name, dummy = REVIEW_STATUSES[0]
status, view_name, _ = REVIEW_STATUSES[0]
return dict(
title=title,

Просмотреть файл

@ -395,7 +395,7 @@ class TemplateTests(ReadoutTestCase):
self.assertEqual(1, len(self.rows(locale=locale, product=p)))
self.assertEqual(t.title, self.row(locale=locale, product=p)["title"])
self.assertEqual("", self.row(locale=locale, product=p)["status"])
self.assertEqual("Updated", self.row(locale=locale, product=p)["status"])
def test_needs_changes(self):
"""Test status for article that needs changes"""
@ -450,7 +450,7 @@ class HowToContributeTests(ReadoutTestCase):
self.assertEqual(1, len(self.rows(locale=locale, product=p)))
self.assertEqual(d2.title, self.row(locale=locale, product=p)["title"])
self.assertEqual("", self.row(locale=locale, product=p)["status"])
self.assertEqual("Updated", self.row(locale=locale, product=p)["status"])
class AdministrationTests(ReadoutTestCase):
@ -469,7 +469,7 @@ class AdministrationTests(ReadoutTestCase):
self.assertEqual(1, len(self.rows(locale=locale, product=p)))
self.assertEqual(d2.title, self.row(locale=locale, product=p)["title"])
self.assertEqual("", self.row(locale=locale, product=p)["status"])
self.assertEqual("Updated", self.row(locale=locale, product=p)["status"])
class MostVisitedTranslationsTests(ReadoutTestCase):
@ -533,7 +533,7 @@ class MostVisitedTranslationsTests(ReadoutTestCase):
translation = TranslatedRevisionFactory(document__locale="de", is_approved=True)
row = self.row()
self.assertEqual(row["title"], translation.document.title)
self.assertEqual(str(row["status"]), "")
self.assertEqual(str(row["status"]), "Updated")
self.assertEqual(row["status_class"], "ok")
def test_one_rejected_revision(self):

Просмотреть файл

@ -1,13 +1,185 @@
/* L10n and Contributor Dashboards */
@use '../config' as c;
@use 'protocol/css/includes/lib' as p;
.absolute-graph {
.dashboards table {
border-collapse: collapse;
text-align: left;
}
.dashboards tr:nth-child(even) {
background-color: var(--color-shade-bg);
}
.dashboards td,
.dashboards th {
padding: p.$spacing-sm p.$spacing-xs;
}
.dashboards td {
vertical-align: middle;
}
.dashboards table.overview small {
font-size: 80%;
color: #999;
white-space: nowrap;
}
.dashboards div.percent-graph {
background-color: #f3f3f3;
height: 10px;
}
.dashboards div.percent-graph div {
background-color: #dfdfdf;
height: 10px;
}
.dashboards div.absolute-graph {
display: block;
background-color: p.$color-green-60;
height: 1em;
}
.dashboards #overview-options,
.dashboards .table-footer {
margin: 0;
padding: p.$spacing-md 0;
}
.dashboards #overview-options label {
font-weight: bold;
}
.dashboards .table-footer {
font-size: 90%;
}
.dashboards table.documents .users {
font-size: 90%;
color: #999;
}
.dashboards table.overview td:nth-child(2) {
text-align: right;
}
.dashboards table.overview td:nth-child(4) {
width: 50%;
}
.dashboards table.documents td:nth-child(1) {
width: p.$content-xs;
}
.dashboards table.documents td:nth-child(2) {
padding-right: p.$spacing-xs;
text-align: right;
width: p.$layout-xl;
}
.dashboards table.documents td:nth-child(3),
.dashboards table.documents th:nth-child(3) {
padding-left: 0;
width: p.$layout-2xl;
}
.dashboards table.documents td:nth-child(4),
.dashboards table.documents th:nth-child(4) {
text-align: center;
vertical-align: middle;
width: p.$content-xs;
}
.dashboards table.busy {
opacity: 0.5;
}
.dashboards ul.readout-modes {
padding: p.$spacing-xs 0px;
}
.dashboards ul.readout-modes li {
display: inline-block;
background: var(--color-marketing-gray-02);
border-radius: p.$border-radius-sm;
cursor: pointer;
list-style: none;
margin: p.$spacing-sm p.$spacing-xs;
padding: p.$spacing-xs;
width: calc(25% - p.$spacing-md);
text-align: center;
}
.dashboards ul.readout-modes li:hover {
background: var(--color-marketing-gray-01);
}
.dashboards ul.readout-modes li.active {
background: var(--color-click);
}
.dashboards ul.readout-modes li.active:hover {
background: #4978bc;
}
.dashboards ul.readout-modes li.active a {
color: #fff;
}
.dashboards-detail h1 {
display: inline-block;
}
.dashboards summary.with-mode-selectors {
display: inline;
}
.dashboards details table {
display: block; /* Makes collapse animation work */
}
/* Status badges */
.dashboards td.status:has(.review),
.dashboards td.status:has(.out-of-date) {
.dashboards td.status:has(.out-of-date){
background-color: var(--color-warning);
}
.dashboards td.status {
.update:after {
content: '\25C6';
color: #f8e687;
}
.out-of-date:after {
content: '\25C6';
color: orange;
}
.untranslated:after {
content: '\25B2';
color: red;
}
.ok:after {
content: '\25CF';
color: #add575;
margin-left: p.$spacing-xs;
}
}
.dashboards td a {
text-decoration:none;
&:hover {
text-decoration:underline;
}
}
.dashboards td a:has(span.ok) {
&:hover {
text-decoration:none;
cursor: initial;
}
&:visited {
color: inherit;
}
}

Просмотреть файл

@ -27,11 +27,11 @@
<li {{ active|class_selected('edit') }}>
<a href="{{ url('wiki.edit_document', document.slug) }}">{{ _('Edit Article') }}</a>
</li>
{% if document.allows(user, 'edit') %}
<li {{ active|class_selected('edit_metadata') }}>
<a href="{{ url('wiki.edit_document_metadata', document.slug) }}">{{ _('Edit Article Metadata') }}</a>
</li>
{% endif %}
{% endif %}
{% if document and document.allows(user, 'edit') and document.allows(user, 'create_revision') %}
<li {{ active|class_selected('edit_metadata') }}>
<a href="{{ url('wiki.edit_document_metadata', document.slug) }}">{{ _('Edit Article Metadata') }}</a>
</li>
{% endif %}
{% if document and not document.is_archived and document.is_localizable %}
<li {{ active|class_selected('localize') }}>

8
poetry.lock сгенерированный
Просмотреть файл

@ -851,13 +851,13 @@ Django = ">=3.2"
[[package]]
name = "django"
version = "4.1.12"
version = "4.1.13"
description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
optional = false
python-versions = ">=3.8"
files = [
{file = "Django-4.1.12-py3-none-any.whl", hash = "sha256:e92ce8f240a856615e96d8b955707f824c29ea0f51dff4f76777caa5e113ec72"},
{file = "Django-4.1.12.tar.gz", hash = "sha256:d02483ad49872238fa59875c1269293fe4f17ecee13c121893607cc0b284696b"},
{file = "Django-4.1.13-py3-none-any.whl", hash = "sha256:04ab3f6f46d084a0bba5a2c9a93a3a2eb3fe81589512367a75f79ee8acf790ce"},
{file = "Django-4.1.13.tar.gz", hash = "sha256:94a3f471e833c8f124ee7a2de11e92f633991d975e3fa5bdd91e8abd66426318"},
]
[package.dependencies]
@ -4506,4 +4506,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"]
[metadata]
lock-version = "2.0"
python-versions = "^3.11"
content-hash = "6e78d397c9b65561674e927b2ee6b92753741d0cfa05cc943c3214544847f239"
content-hash = "9704ab7a7599dee4b0f9a90ea5250680d4c2475f15c0e6a73f4e836be66faa45"

Просмотреть файл

@ -16,7 +16,7 @@ license = "BSD 3-Clause"
[tool.poetry.dependencies]
python = "^3.11"
APScheduler = "^3.10.0"
Django = "4.1.12"
Django = "4.1.13"
babis = "^0.2.4"
Pillow = "^9.4.0"
bleach = {version = "^6.0.0", extras = ["css"]}