Compare 87b40bf ... +1 ... c0d7fda

Coverage Reach
admin/views/pages/edit.py admin/views/pages/create.py admin/views/pages/revisions.py admin/views/pages/workflow.py admin/views/pages/preview.py admin/views/pages/search.py admin/views/pages/history.py admin/views/pages/moderation.py admin/views/pages/move.py admin/views/pages/copy.py admin/views/pages/listing.py admin/views/pages/lock.py admin/views/pages/unpublish.py admin/views/pages/delete.py admin/views/pages/ordering.py admin/views/pages/usage.py admin/views/pages/utils.py admin/views/workflows.py admin/views/generic.py admin/views/account.py admin/views/mixins.py admin/views/chooser.py admin/views/reports.py admin/views/collections.py admin/views/home.py admin/views/page_privacy.py admin/views/collection_privacy.py admin/views/userbar.py admin/views/tags.py admin/rich_text/converters/html_to_contentstate.py admin/rich_text/converters/editor_html.py admin/rich_text/converters/html_ruleset.py admin/rich_text/converters/contentstate_models.py admin/rich_text/converters/contentstate.py admin/rich_text/editors/hallo.py admin/rich_text/editors/draftail/__init__.py admin/rich_text/editors/draftail/features.py admin/rich_text/__init__.py admin/edit_handlers.py admin/forms/collections.py admin/forms/workflows.py admin/forms/pages.py admin/forms/models.py admin/forms/choosers.py admin/forms/view_restrictions.py admin/forms/tags.py admin/forms/auth.py admin/forms/search.py admin/forms/__init__.py admin/compare.py admin/widgets/chooser.py admin/widgets/datetime.py admin/widgets/button.py admin/widgets/filtered_select.py admin/widgets/tags.py admin/widgets/workflows.py admin/widgets/button_select.py admin/widgets/auto_height_text.py admin/widgets/__init__.py admin/wagtail_hooks.py admin/templatetags/wagtailadmin_tags.py admin/templatetags/wagtailuserbar.py admin/action_menu.py admin/mail.py admin/api/serializers.py admin/api/views.py admin/api/filters.py admin/api/urls.py admin/filters.py admin/auth.py admin/menu.py admin/userbar.py admin/viewsets/model.py admin/viewsets/__init__.py admin/viewsets/base.py admin/checks.py admin/search.py admin/urls/__init__.py admin/urls/pages.py admin/urls/collections.py admin/urls/workflows.py admin/urls/reports.py admin/urls/password_reset.py admin/site_summary.py admin/messages.py admin/log_action_registry.py admin/staticfiles.py admin/navigation.py admin/models.py admin/signal_handlers.py admin/modal_workflow.py admin/localization.py admin/apps.py admin/jinja2tags.py admin/datetimepicker.py admin/blocks.py admin/signals.py admin/__init__.py contrib/modeladmin/views.py contrib/modeladmin/options.py contrib/modeladmin/helpers/button.py contrib/modeladmin/helpers/permission.py contrib/modeladmin/helpers/url.py contrib/modeladmin/helpers/search.py contrib/modeladmin/helpers/__init__.py contrib/modeladmin/templatetags/modeladmin_tags.py contrib/modeladmin/mixins.py contrib/modeladmin/menus.py contrib/modeladmin/forms.py contrib/modeladmin/apps.py contrib/modeladmin/__init__.py contrib/redirects/views.py contrib/redirects/base_formats.py contrib/redirects/management/commands/import_redirects.py contrib/redirects/models.py contrib/redirects/forms.py contrib/redirects/tmp_storages.py contrib/redirects/middleware.py contrib/redirects/utils.py contrib/redirects/wagtail_hooks.py contrib/redirects/apps.py contrib/redirects/urls.py contrib/redirects/permissions.py contrib/redirects/__init__.py contrib/postgres_search/backend.py contrib/postgres_search/query.py contrib/postgres_search/utils.py contrib/postgres_search/models.py contrib/postgres_search/apps.py contrib/postgres_search/__init__.py contrib/forms/views.py contrib/forms/models.py contrib/forms/forms.py contrib/forms/utils.py contrib/forms/edit_handlers.py contrib/forms/wagtail_hooks.py contrib/forms/apps.py contrib/forms/urls.py contrib/forms/__init__.py contrib/frontend_cache/tests.py contrib/frontend_cache/backends.py contrib/frontend_cache/utils.py contrib/frontend_cache/signal_handlers.py contrib/frontend_cache/apps.py contrib/frontend_cache/__init__.py contrib/search_promotions/tests.py contrib/search_promotions/views.py contrib/search_promotions/forms.py contrib/search_promotions/wagtail_hooks.py contrib/search_promotions/models.py contrib/search_promotions/templatetags/wagtailsearchpromotions_tags.py contrib/search_promotions/apps.py contrib/search_promotions/admin_urls.py contrib/search_promotions/__init__.py contrib/routable_page/tests.py contrib/routable_page/models.py contrib/routable_page/templatetags/wagtailroutablepage_tags.py contrib/routable_page/apps.py contrib/routable_page/__init__.py contrib/settings/views.py contrib/settings/models.py contrib/settings/jinja2tags.py contrib/settings/registry.py contrib/settings/context_processors.py contrib/settings/forms.py contrib/settings/templatetags/wagtailsettings_tags.py contrib/settings/wagtail_hooks.py contrib/settings/apps.py contrib/settings/urls.py contrib/settings/permissions.py contrib/settings/__init__.py contrib/table_block/tests.py contrib/table_block/blocks.py contrib/table_block/templatetags/table_block_tags.py contrib/table_block/apps.py contrib/table_block/__init__.py contrib/sitemaps/tests.py contrib/sitemaps/sitemap_generator.py contrib/sitemaps/views.py contrib/sitemaps/apps.py contrib/sitemaps/__init__.py contrib/styleguide/views.py contrib/styleguide/wagtail_hooks.py contrib/styleguide/tests.py contrib/styleguide/apps.py contrib/styleguide/__init__.py core/models.py core/blocks/field_block.py core/blocks/stream_block.py core/blocks/base.py core/blocks/struct_block.py core/blocks/list_block.py core/blocks/static_block.py core/blocks/__init__.py core/blocks/utils.py core/management/commands/fixtree.py core/management/commands/publish_scheduled_pages.py core/management/commands/create_log_entries_from_revisions.py core/management/commands/replace_text.py core/management/commands/purge_revisions.py core/management/commands/move_pages.py core/management/commands/set_url_paths.py core/permission_policies/collections.py core/permission_policies/base.py core/permission_policies/__init__.py core/query.py core/rich_text/rewriters.py core/rich_text/feature_registry.py core/rich_text/__init__.py core/rich_text/pages.py core/utils.py core/templatetags/wagtailcore_tags.py core/fields.py core/whitelist.py core/treebeard.py core/wagtail_hooks.py core/hooks.py core/jinja2tags.py core/views.py core/signal_handlers.py core/forms.py core/workflows.py core/sites.py core/signals.py core/urls.py core/apps.py core/url_routing.py core/compat.py core/permissions.py core/__init__.py core/exceptions.py images/views/images.py images/views/multiple.py images/views/chooser.py images/views/serve.py images/models.py images/image_operations.py images/rect.py images/templatetags/wagtailimages_tags.py images/wagtail_hooks.py images/fields.py images/rich_text/contentstate.py images/rich_text/editor_html.py images/rich_text/__init__.py images/formats.py images/api/v2/views.py images/api/v2/serializers.py images/api/fields.py images/api/admin/views.py images/api/admin/serializers.py images/forms.py images/checks.py images/utils.py images/blocks.py images/widgets.py images/jinja2tags.py images/signal_handlers.py images/edit_handlers.py images/__init__.py images/apps.py images/shortcuts.py images/admin.py images/admin_urls.py images/permissions.py images/urls.py images/exceptions.py search/backends/elasticsearch2.py search/backends/base.py search/backends/db.py search/backends/elasticsearch7.py search/backends/__init__.py search/backends/elasticsearch5.py search/backends/elasticsearch6.py search/index.py search/management/commands/update_index.py search/management/commands/search_garbage_collect.py search/management/commands/wagtail_update_index.py search/utils.py search/models.py search/query.py search/views/queries.py search/signal_handlers.py search/apps.py search/queryset.py search/wagtail_hooks.py search/urls/admin.py search/forms.py search/__init__.py users/tests.py users/forms.py users/views/users.py users/views/groups.py users/wagtail_hooks.py users/templatetags/wagtailusers_tags.py users/models.py users/utils.py users/apps.py users/widgets.py users/urls/users.py users/__init__.py snippets/tests.py snippets/views/snippets.py snippets/views/chooser.py snippets/wagtail_hooks.py snippets/widgets.py snippets/models.py snippets/blocks.py snippets/permissions.py snippets/templatetags/wagtailsnippets_admin_tags.py snippets/edit_handlers.py snippets/apps.py snippets/urls.py snippets/__init__.py api/v2/views.py api/v2/serializers.py api/v2/utils.py api/v2/filters.py api/v2/router.py api/v2/signal_handlers.py api/v2/pagination.py api/v2/apps.py api/v2/__init__.py api/conf.py api/__init__.py documents/views/documents.py documents/views/chooser.py documents/views/serve.py documents/views/multiple.py documents/models.py documents/wagtail_hooks.py documents/rich_text/editor_html.py documents/rich_text/contentstate.py documents/rich_text/__init__.py documents/api/v2/views.py documents/api/v2/serializers.py documents/api/admin/views.py documents/forms.py documents/widgets.py documents/blocks.py documents/__init__.py documents/apps.py documents/signal_handlers.py documents/admin.py documents/edit_handlers.py documents/admin_urls.py documents/permissions.py documents/urls.py embeds/finders/oembed.py embeds/finders/embedly.py embeds/finders/__init__.py embeds/finders/base.py embeds/oembed_providers.py embeds/rich_text/contentstate.py embeds/rich_text/__init__.py embeds/rich_text/editor_html.py embeds/blocks.py embeds/models.py embeds/views/chooser.py embeds/embeds.py embeds/wagtail_hooks.py embeds/templatetags/wagtailembeds_tags.py embeds/format.py embeds/apps.py embeds/exceptions.py embeds/forms.py embeds/urls.py embeds/__init__.py utils/setup.py utils/sendfile.py utils/sendfile_streaming_backend.py utils/deprecation.py utils/decorators.py utils/version.py utils/widgets.py utils/apps.py utils/loading.py utils/urlpatterns.py utils/utils.py sites/tests.py sites/views.py sites/wagtail_hooks.py sites/forms.py sites/apps.py sites/__init__.py locales/tests.py locales/views.py locales/wagtail_hooks.py locales/forms.py locales/utils.py locales/apps.py locales/__init__.py bin/wagtail.py __init__.py

Flags

Flags have been temporarily removed from this view while the flagging feature is refactored for better performance and user experience.

You can still use flags when viewing individual files. Flag-level thresholds will also remain on pull and merge requests in your repository provider.

More information can be found in our documentation.


@@ -1,7 +1,8 @@
Loading
1 -
from wagtail.core.models import Collection, Site, Task, Workflow
1 +
from wagtail.core.models import Collection, Locale, Site, Task, Workflow
2 2
from wagtail.core.permission_policies import ModelPermissionPolicy
3 3
4 4
site_permission_policy = ModelPermissionPolicy(Site)
5 5
collection_permission_policy = ModelPermissionPolicy(Collection)
6 6
task_permission_policy = ModelPermissionPolicy(Task)
7 7
workflow_permission_policy = ModelPermissionPolicy(Workflow)
8 +
locale_permission_policy = ModelPermissionPolicy(Locale)

@@ -0,0 +1,188 @@
Loading
1 +
from django.contrib.messages import get_messages
2 +
from django.test import TestCase
3 +
from django.urls import reverse
4 +
5 +
from wagtail.core.models import Locale
6 +
from wagtail.tests.utils import WagtailTestUtils
7 +
8 +
9 +
class TestLocaleIndexView(TestCase, WagtailTestUtils):
10 +
    def setUp(self):
11 +
        self.login()
12 +
13 +
    def get(self, params={}):
14 +
        return self.client.get(reverse('wagtaillocales:index'), params)
15 +
16 +
    def test_simple(self):
17 +
        response = self.get()
18 +
        self.assertEqual(response.status_code, 200)
19 +
        self.assertTemplateUsed(response, 'wagtaillocales/index.html')
20 +
21 +
22 +
class TestLocaleCreateView(TestCase, WagtailTestUtils):
23 +
    def setUp(self):
24 +
        self.login()
25 +
        self.english = Locale.objects.get()
26 +
27 +
    def get(self, params={}):
28 +
        return self.client.get(reverse('wagtaillocales:add'), params)
29 +
30 +
    def post(self, post_data={}):
31 +
        return self.client.post(reverse('wagtaillocales:add'), post_data)
32 +
33 +
    def test_default_language(self):
34 +
        # we should have loaded with a single locale
35 +
        self.assertEqual(self.english.language_code, 'en')
36 +
        self.assertEqual(self.english.get_display_name(), "English")
37 +
38 +
    def test_simple(self):
39 +
        response = self.get()
40 +
        self.assertEqual(response.status_code, 200)
41 +
        self.assertTemplateUsed(response, 'wagtaillocales/create.html')
42 +
43 +
        self.assertEqual(response.context['form'].fields['language_code'].choices, [
44 +
            ('fr', 'French')
45 +
        ])
46 +
47 +
    def test_create(self):
48 +
        response = self.post({
49 +
            'language_code': "fr",
50 +
        })
51 +
52 +
        # Should redirect back to index
53 +
        self.assertRedirects(response, reverse('wagtaillocales:index'))
54 +
55 +
        # Check that the locale was created
56 +
        self.assertTrue(Locale.objects.filter(language_code='fr').exists())
57 +
58 +
    def test_duplicate_not_allowed(self):
59 +
        response = self.post({
60 +
            'language_code': "en",
61 +
        })
62 +
63 +
        # Should return the form with errors
64 +
        self.assertEqual(response.status_code, 200)
65 +
        self.assertFormError(response, 'form', 'language_code', ['Select a valid choice. en is not one of the available choices.'])
66 +
67 +
    def test_language_code_must_be_in_settings(self):
68 +
        response = self.post({
69 +
            'language_code': "ja",
70 +
        })
71 +
72 +
        # Should return the form with errors
73 +
        self.assertEqual(response.status_code, 200)
74 +
        self.assertFormError(response, 'form', 'language_code', ['Select a valid choice. ja is not one of the available choices.'])
75 +
76 +
77 +
class TestLocaleEditView(TestCase, WagtailTestUtils):
78 +
    def setUp(self):
79 +
        self.login()
80 +
        self.english = Locale.objects.get()
81 +
82 +
    def get(self, params=None, locale=None):
83 +
        locale = locale or self.english
84 +
        return self.client.get(reverse('wagtaillocales:edit', args=[locale.id]), params or {})
85 +
86 +
    def post(self, post_data=None, locale=None):
87 +
        post_data = post_data or {}
88 +
        locale = locale or self.english
89 +
        post_data.setdefault('language_code', locale.language_code)
90 +
        return self.client.post(reverse('wagtaillocales:edit', args=[locale.id]), post_data)
91 +
92 +
    def test_simple(self):
93 +
        response = self.get()
94 +
        self.assertEqual(response.status_code, 200)
95 +
        self.assertTemplateUsed(response, 'wagtaillocales/edit.html')
96 +
97 +
        self.assertEqual(response.context['form'].fields['language_code'].choices, [
98 +
            ('en', 'English'),  # Note: Current value is displayed even though it's in use
99 +
            ('fr', 'French')
100 +
        ])
101 +
102 +
    def test_invalid_language(self):
103 +
        invalid = Locale.objects.create(language_code='foo')
104 +
105 +
        response = self.get(locale=invalid)
106 +
107 +
        self.assertEqual(response.status_code, 200)
108 +
        self.assertTemplateUsed(response, 'wagtaillocales/edit.html')
109 +
110 +
        self.assertEqual(response.context['form'].fields['language_code'].choices, [
111 +
            (None, 'Select a new language'),  # This is shown instead of the current value if invalid
112 +
            ('fr', 'French')
113 +
        ])
114 +
115 +
    def test_edit(self):
116 +
        response = self.post({
117 +
            'language_code': 'fr',
118 +
        })
119 +
120 +
        # Should redirect back to index
121 +
        self.assertRedirects(response, reverse('wagtaillocales:index'))
122 +
123 +
        # Check that the locale was edited
124 +
        self.english.refresh_from_db()
125 +
        self.assertEqual(self.english.language_code, 'fr')
126 +
127 +
    def test_edit_duplicate_not_allowed(self):
128 +
        french = Locale.objects.create(language_code='fr')
129 +
130 +
        response = self.post({
131 +
            'language_code': "en",
132 +
        }, locale=french)
133 +
134 +
        # Should return the form with errors
135 +
        self.assertEqual(response.status_code, 200)
136 +
        self.assertFormError(response, 'form', 'language_code', ['Select a valid choice. en is not one of the available choices.'])
137 +
138 +
    def test_edit_language_code_must_be_in_settings(self):
139 +
        response = self.post({
140 +
            'language_code': "ja",
141 +
        })
142 +
143 +
        # Should return the form with errors
144 +
        self.assertEqual(response.status_code, 200)
145 +
        self.assertFormError(response, 'form', 'language_code', ['Select a valid choice. ja is not one of the available choices.'])
146 +
147 +
148 +
class TestLocaleDeleteView(TestCase, WagtailTestUtils):
149 +
    def setUp(self):
150 +
        self.login()
151 +
        self.english = Locale.objects.get()
152 +
153 +
    def get(self, params={}, locale=None):
154 +
        locale = locale or self.english
155 +
        return self.client.get(reverse('wagtaillocales:delete', args=[locale.id]), params)
156 +
157 +
    def post(self, post_data={}, locale=None):
158 +
        locale = locale or self.english
159 +
        return self.client.post(reverse('wagtaillocales:delete', args=[locale.id]), post_data)
160 +
161 +
    def test_simple(self):
162 +
        response = self.get()
163 +
        self.assertEqual(response.status_code, 200)
164 +
        self.assertTemplateUsed(response, 'wagtailadmin/generic/confirm_delete.html')
165 +
166 +
    def test_delete_locale(self):
167 +
        french = Locale.objects.create(language_code='fr')
168 +
169 +
        response = self.post(locale=french)
170 +
171 +
        # Should redirect back to index
172 +
        self.assertRedirects(response, reverse('wagtaillocales:index'))
173 +
174 +
        # Check that the locale was deleted
175 +
        self.assertFalse(Locale.objects.filter(language_code='fr').exists())
176 +
177 +
    def test_cannot_delete_locales_with_pages(self):
178 +
        response = self.post()
179 +
180 +
        self.assertEqual(response.status_code, 200)
181 +
182 +
        # Check error message
183 +
        messages = list(get_messages(response.wsgi_request))
184 +
        self.assertEqual(messages[0].level_tag, 'error')
185 +
        self.assertEqual(messages[0].message, "This locale cannot be deleted because there are pages and/or other objects using it.\n\n\n\n\n")
186 +
187 +
        # Check that the locale was not deleted
188 +
        self.assertTrue(Locale.objects.filter(language_code='en').exists())

@@ -347,6 +347,9 @@
Loading
347 347
        except cls.DoesNotExist:
348 348
            return cls.get_default()
349 349
350 +
    def language_code_is_valid(self):
351 +
        return self.language_code in get_content_languages()
352 +
350 353
    def get_display_name(self):
351 354
        return get_content_languages().get(self.language_code)
352 355

@@ -0,0 +1, @@
Loading
1 +
default_app_config = 'wagtail.locales.apps.WagtailLocalesAppConfig'

@@ -0,0 +1,8 @@
Loading
1 +
from django.apps import AppConfig
2 +
from django.utils.translation import gettext_lazy as _
3 +
4 +
5 +
class WagtailLocalesAppConfig(AppConfig):
6 +
    name = 'wagtail.locales'
7 +
    label = 'wagtaillocales'
8 +
    verbose_name = _("Wagtail locales")

Click to load this diff.
Loading diff...

Click to load this diff.
Loading diff...

Click to load this diff.
Loading diff...

Click to load this diff.
Loading diff...

Learn more Showing 271 files with coverage changes found.

Changes in wagtail/snippets/tests.py
-849
+849
Loading file...
Changes in wagtail/embeds/blocks.py
-42
+42
Loading file...
Changes in wagtail/core/management/commands/move_pages.py
-14
+14
Loading file...
Changes in wagtail/contrib/styleguide/tests.py
-10
+10
Loading file...
Changes in wagtail/contrib/sitemaps/tests.py
-131
+131
Loading file...
Changes in wagtail/contrib/table_block/tests.py
-174
+174
Loading file...
Changes in wagtail/contrib/search_promotions/tests.py
-164
+164
Loading file...
Changes in wagtail/snippets/blocks.py
-16
+16
Loading file...
Changes in wagtail/core/management/commands/set_url_paths.py
-12
+12
Loading file...
Changes in wagtail/users/tests.py
-671
-2
+673
Loading file...
Changes in wagtail/contrib/frontend_cache/tests.py
-200
-1
+201
Loading file...
Changes in wagtail/sites/tests.py
-163
-1
+164
Loading file...
Changes in wagtail/contrib/redirects/management/commands/import_redirects.py
-94
+94
Loading file...
Changes in wagtail/contrib/routable_page/tests.py
-183
+183
Loading file...
Changes in wagtail/api/v2/signal_handlers.py
-37
-2
+39
Loading file...
Changes in wagtail/contrib/forms/edit_handlers.py
-16
-1
+17
Loading file...
Changes in wagtail/core/management/commands/purge_revisions.py
-29
-1
+30
Loading file...
Changes in wagtail/core/management/commands/replace_text.py
-29
-1
+30
Loading file...
Changes in wagtail/core/management/commands/create_log_entries_from_revisions.py
-37
-3
+40
Loading file...
Changes in wagtail/api/v2/utils.py
-100
-1
+101
Loading file...
Changes in wagtail/admin/widgets/filtered_select.py
-42
+42
Loading file...
Changes in wagtail/admin/views/chooser.py
-98
-5
+103
Loading file...
Changes in wagtail/core/management/commands/fixtree.py
-57
-6
+63
Loading file...
Changes in wagtail/api/v2/filters.py
-78
-2
+80
Loading file...
Changes in wagtail/core/treebeard.py
-38
-1
+39
Loading file...
Changes in wagtail/contrib/frontend_cache/backends.py
-80
-4
+84
Loading file...
Changes in wagtail/admin/views/pages/listing.py
-28
+28
Loading file...
Changes in wagtail/admin/views/page_privacy.py
-25
-2
+27
Loading file...
Changes in wagtail/users/templatetags/wagtailusers_tags.py
-23
+23
Loading file...
Changes in wagtail/contrib/redirects/views.py
-111
-5
+116
Loading file...
Changes in wagtail/admin/views/pages/create.py
-99
-5
+104
Loading file...
Changes in wagtail/admin/api/filters.py
-18
+18
Loading file...
Changes in wagtail/snippets/views/snippets.py
-105
-10
+115
Loading file...
Changes in wagtail/core/workflows.py
-11
+11
Loading file...
Changes in wagtail/core/whitelist.py
-40
-1
+41
Loading file...
Changes in wagtail/contrib/redirects/utils.py
-21
+21
Loading file...
Changes in wagtail/admin/views/pages/lock.py
-25
+25
Loading file...
Changes in wagtail/admin/views/pages/utils.py
-4
+4
Loading file...
Changes in wagtail/embeds/embeds.py
-20
-1
+21
Loading file...
Changes in wagtail/admin/views/pages/edit.py
-157
-15
+172
Loading file...
Changes in wagtail/admin/compare.py
-244
-18
+262
Loading file...
Changes in wagtail/snippets/templatetags/wagtailsnippets_admin_tags.py
-9
+9
Loading file...
Changes in wagtail/contrib/table_block/templatetags/table_block_tags.py
-9
+9
Loading file...
Changes in wagtail/contrib/frontend_cache/utils.py
-52
-2
+54
Loading file...
Changes in wagtail/admin/views/pages/move.py
-30
-4
+34
Loading file...
Changes in wagtail/contrib/forms/views.py
-118
-8
+126
Loading file...
Changes in wagtail/contrib/settings/views.py
-35
-1
+36
Loading file...
Changes in wagtail/admin/forms/pages.py
-45
-3
+48
Loading file...
Changes in wagtail/users/views/users.py
-85
-13
+98
Loading file...
Changes in wagtail/api/v2/pagination.py
-19
-2
+21
Loading file...
Changes in wagtail/api/v2/views.py
-157
-7
+164
Loading file...
Changes in wagtail/admin/mail.py
-120
-6
+126
Loading file...
Changes in wagtail/admin/views/pages/preview.py
-48
-2
+52
Loading file...
Changes in wagtail/contrib/search_promotions/views.py
-52
-6
+58
Loading file...
Changes in wagtail/admin/views/pages/revisions.py
-62
-7
+69
Loading file...
Changes in wagtail/admin/rich_text/converters/editor_html.py
-61
+61
Loading file...
Changes in wagtail/core/blocks/stream_block.py
-129
-1
+130
Loading file...
Changes in wagtail/api/v2/serializers.py
-78
-1
+79
Loading file...
Changes in wagtail/admin/views/mixins.py
-76
-3
+79
Loading file...
Changes in wagtail/contrib/sitemaps/sitemap_generator.py
-16
+16
Loading file...
Changes in wagtail/contrib/settings/models.py
-29
+29
Loading file...
Changes in wagtail/admin/views/account.py
-91
-7
+98
Loading file...
Changes in wagtail/contrib/modeladmin/views.py
-330
-29
+359
Loading file...
Changes in wagtail/contrib/routable_page/templatetags/wagtailroutablepage_tags.py
-7
+7
Loading file...
Changes in wagtail/admin/views/pages/unpublish.py
-21
-4
+25
Loading file...
Changes in wagtail/embeds/format.py
-7
+7
Loading file...
Changes in wagtail/snippets/views/chooser.py
-21
-2
+23
Loading file...
Changes in wagtail/contrib/modeladmin/templatetags/modeladmin_tags.py
-64
-3
+67
Loading file...
Changes in wagtail/contrib/forms/forms.py
-52
-3
+55
Loading file...
Changes in wagtail/contrib/sitemaps/views.py
-10
-1
+11
Loading file...
Changes in wagtail/admin/views/tags.py
-10
-1
+11
Loading file...
Changes in wagtail/documents/rich_text/contentstate.py
-10
+10
Loading file...
Changes in wagtail/admin/rich_text/converters/html_to_contentstate.py
-110
+1
+109
Loading file...
Changes in wagtail/admin/views/pages/delete.py
-17
-3
+20
Loading file...
Changes in wagtail/admin/views/pages/copy.py
-23
-5
+28
Loading file...
Changes in wagtail/contrib/settings/templatetags/wagtailsettings_tags.py
-7
+7
Loading file...
Changes in wagtail/admin/views/pages/search.py
-36
-6
+42
Loading file...
Changes in wagtail/contrib/redirects/forms.py
-31
+31
Loading file...
Changes in wagtail/admin/log_action_registry.py
-18
+18
Loading file...
Changes in wagtail/embeds/finders/embedly.py
-18
-2
+20
Loading file...
Changes in wagtail/admin/templatetags/wagtailuserbar.py
-23
-1
+24
Loading file...
Changes in wagtail/admin/forms/workflows.py
-43
-3
+46
Loading file...
Changes in wagtail/admin/views/pages/history.py
-31
-2
+33
Loading file...
Changes in wagtail/contrib/table_block/blocks.py
-38
+1
+37
Loading file...
Changes in wagtail/admin/action_menu.py
-107
-4
+111
Loading file...
Changes in wagtail/core/permission_policies/base.py
-60
-1
+61
Loading file...
Changes in wagtail/utils/loading.py
-4
+4
Loading file...
Changes in wagtail/core/blocks/utils.py
-3
+3
Loading file...
Changes in wagtail/embeds/finders/oembed.py
-25
+25
Loading file...
Changes in wagtail/contrib/modeladmin/helpers/button.py
-57
-20
+77
Loading file...
Changes in wagtail/users/forms.py
-121
-4
+125
Loading file...
Changes in wagtail/admin/views/workflows.py
-181
-18
+199
Loading file...
Changes in wagtail/core/query.py
-81
+12
+69
Loading file...
Changes in wagtail/core/blocks/field_block.py
-171
-5
+176
Loading file...
Changes in wagtail/core/models.py
-854
+6
+848
Loading file...
Changes in wagtail/admin/forms/view_restrictions.py
-11
+11
Loading file...
Changes in wagtail/contrib/modeladmin/helpers/search.py
-16
-1
+17
Loading file...
Changes in wagtail/admin/views/pages/moderation.py
-24
-7
+31
Loading file...
Changes in wagtail/core/templatetags/wagtailcore_tags.py
-48
+5
+43
Loading file...
Changes in wagtail/admin/widgets/button_select.py
-8
+8
Loading file...
Changes in wagtail/snippets/widgets.py
-12
+12
Loading file...
Changes in wagtail/utils/widgets.py
-7
+7
Loading file...
Changes in wagtail/contrib/modeladmin/forms.py
-7
+7
Loading file...
Changes in wagtail/contrib/settings/jinja2tags.py
-20
-2
+22
Loading file...
Changes in wagtail/core/utils.py
-46
+5
+41
Loading file...
Changes in wagtail/contrib/search_promotions/forms.py
-15
-1
+16
Loading file...
Changes in wagtail/admin/widgets/chooser.py
-36
+4
+32
Loading file...
Changes in wagtail/users/utils.py
-9
+1
+8
Loading file...
Changes in wagtail/contrib/routable_page/models.py
-33
-4
+37
Loading file...
Changes in wagtail/admin/widgets/button.py
-28
-1
+29
Loading file...
Changes in wagtail/users/views/groups.py
-44
-3
+47
Loading file...
Changes in wagtail/admin/api/views.py
-15
+15
Loading file...
Changes in wagtail/embeds/templatetags/wagtailembeds_tags.py
-5
+5
Loading file...
Changes in wagtail/contrib/settings/context_processors.py
-15
-1
+16
Loading file...
Changes in wagtail/admin/views/pages/usage.py
-7
-1
+8
Loading file...
Changes in wagtail/admin/messages.py
-15
+15
Loading file...
Changes in wagtail/core/blocks/list_block.py
-36
-4
+40
Loading file...
Changes in wagtail/admin/rich_text/editors/hallo.py
-39
-2
+41
Loading file...
Changes in wagtail/users/widgets.py
-2
+2
Loading file...
Changes in wagtail/core/management/commands/publish_scheduled_pages.py
-23
-6
+29
Loading file...
Changes in wagtail/contrib/forms/models.py
-65
+65
Loading file...
Changes in wagtail/embeds/views/chooser.py
-13
-5
+18
Loading file...
Changes in wagtail/contrib/modeladmin/helpers/permission.py
-25
+25
Loading file...
Changes in wagtail/core/rich_text/pages.py
-7
+7
Loading file...
Changes in wagtail/core/rich_text/rewriters.py
-22
+22
Loading file...
Changes in wagtail/core/blocks/struct_block.py
-41
+41
Loading file...
Changes in wagtail/admin/views/collections.py
-36
+36
Loading file...
Changes in wagtail/admin/views/pages/workflow.py
-39
-7
+46
Loading file...
Changes in wagtail/admin/views/userbar.py
-8
-2
+10
Loading file...
Changes in wagtail/contrib/styleguide/views.py
-18
+18
Loading file...
Changes in wagtail/core/jinja2tags.py
-12
-3
+15
Loading file...
Changes in wagtail/core/views.py
-10
+10
Loading file...
Changes in wagtail/embeds/rich_text/editor_html.py
-5
+5
Loading file...
Changes in wagtail/snippets/edit_handlers.py
-5
+5
Loading file...
Changes in wagtail/admin/views/generic.py
-57
-11
+68
Loading file...
Changes in wagtail/core/blocks/base.py
-73
+4
+69
Loading file...
Changes in wagtail/admin/edit_handlers.py
-156
+12
+144
Loading file...
Changes in wagtail/images/rich_text/contentstate.py
-7
+7
Loading file...
Changes in wagtail/api/v2/router.py
-14
-1
+15
Loading file...
Changes in wagtail/core/permission_policies/collections.py
-42
+3
+39
Loading file...
Changes in wagtail/admin/auth.py
-33
+6
+27
Loading file...
Changes in wagtail/admin/forms/collections.py
-44
-1
+45
Loading file...
Changes in wagtail/contrib/search_promotions/templatetags/wagtailsearchpromotions_tags.py
-3
+3
Loading file...
Changes in wagtail/core/blocks/static_block.py
-5
+5
Loading file...
Changes in wagtail/contrib/redirects/middleware.py
-13
+4
+9
Loading file...
Changes in wagtail/admin/rich_text/converters/contentstate_models.py
-16
+16
Loading file...
Changes in wagtail/contrib/modeladmin/options.py
-100
-1
+101
Loading file...
Changes in wagtail/admin/api/serializers.py
-12
-1
+13
Loading file...
Changes in wagtail/core/wagtail_hooks.py
-15
+15
Loading file...
Changes in wagtail/contrib/postgres_search/query.py
-27
+3
+24
Loading file...
Changes in wagtail/admin/views/reports.py
-32
-2
+34
Loading file...
Changes in wagtail/contrib/modeladmin/mixins.py
-10
-1
+11
Loading file...
Changes in wagtail/admin/forms/auth.py
-5
+5
Loading file...
Changes in wagtail/contrib/redirects/models.py
-20
+20
Loading file...
Changes in wagtail/admin/userbar.py
-21
-11
+32
Loading file...
Changes in wagtail/contrib/redirects/tmp_storages.py
-16
-1
+17
Loading file...
Changes in wagtail/admin/forms/tags.py
-6
+1
+5
Loading file...
Changes in wagtail/admin/templatetags/wagtailadmin_tags.py
-84
-4
+88
Loading file...
Changes in wagtail/contrib/settings/forms.py
-5
+5
Loading file...
Changes in wagtail/admin/widgets/datetime.py
-20
+4
+16
Loading file...
Changes in wagtail/core/fields.py
-25
-1
+26
Loading file...
Changes in wagtail/admin/wagtail_hooks.py
-92
-4
+96
Loading file...
Changes in wagtail/core/sites.py
-4
+1
+3
Loading file...
Changes in wagtail/contrib/redirects/base_formats.py
-28
+28
Loading file...
Changes in wagtail/admin/widgets/workflows.py
-5
+5
Loading file...
Changes in wagtail/embeds/rich_text/contentstate.py
-4
+4
Loading file...
Changes in wagtail/admin/widgets/auto_height_text.py
-2
+1
+1
Loading file...
Changes in wagtail/admin/site_summary.py
-11
-1
+12
Loading file...
Changes in wagtail/admin/forms/choosers.py
-7
+7
Loading file...
Changes in wagtail/admin/checks.py
-15
+4
+11
Loading file...
Changes in wagtail/images/blocks.py
-6
+6
Loading file...
Changes in wagtail/images/api/v2/serializers.py
-2
+2
Loading file...
Changes in wagtail/images/widgets.py
-5
+5
Loading file...
Changes in wagtail/documents/widgets.py
-5
+5
Loading file...
Changes in wagtail/contrib/modeladmin/helpers/url.py
-8
+2
+6
Loading file...
Changes in wagtail/admin/rich_text/__init__.py
-4
+2
+2
Loading file...
Changes in wagtail/core/signal_handlers.py
-4
+4
Loading file...
Changes in wagtail/admin/rich_text/converters/html_ruleset.py
-11
+4
+7
Loading file...
Changes in wagtail/admin/filters.py
-21
-3
+24
Loading file...
Changes in wagtail/documents/api/v2/serializers.py
-2
+2
Loading file...
Changes in wagtail/snippets/wagtail_hooks.py
-7
-1
+8
Loading file...
Changes in wagtail/contrib/postgres_search/backend.py
-74
+5
+69
Loading file...
Changes in wagtail/contrib/settings/registry.py
-8
+8
Loading file...
Changes in wagtail/admin/navigation.py
-4
+2
+2
Loading file...
Changes in wagtail/admin/widgets/tags.py
-4
+2
+2
Loading file...
Changes in wagtail/admin/localization.py
-2
+2
Loading file...
Changes in wagtail/admin/staticfiles.py
-4
+2
+2
Loading file...
Changes in wagtail/users/models.py
-5
+5
Loading file...
Changes in wagtail/embeds/models.py
-6
-2
+8
Loading file...
Changes in wagtail/core/rich_text/__init__.py
-7
+7
Loading file...
Changes in wagtail/sites/forms.py
-2
+2
Loading file...
Changes in wagtail/contrib/forms/utils.py
-3
+1
+2
Loading file...
Changes in wagtail/images/api/fields.py
-2
+2
Loading file...
Changes in wagtail/contrib/frontend_cache/signal_handlers.py
-2
+2
Loading file...
Changes in wagtail/contrib/postgres_search/utils.py
-9
+4
+5
Loading file...
Changes in wagtail/users/wagtail_hooks.py
-6
+6
Loading file...
Changes in wagtail/admin/views/pages/ordering.py
-3
-2
+5
Loading file...
Changes in wagtail/admin/forms/models.py
-4
+4
Loading file...
Changes in wagtail/admin/modal_workflow.py
-1
+1
Loading file...
Changes in wagtail/embeds/finders/__init__.py
-2
+1
+1
Loading file...
Changes in wagtail/admin/rich_text/editors/draftail/__init__.py
-4
+2
+2
Loading file...
Changes in wagtail/images/edit_handlers.py
-1
+1
Loading file...
Changes in wagtail/documents/wagtail_hooks.py
-6
+6
Loading file...
Changes in wagtail/embeds/rich_text/__init__.py
-1
+1
Loading file...
Changes in wagtail/admin/views/home.py
-5
+2
+3
Loading file...
Changes in wagtail/admin/rich_text/editors/draftail/features.py
-2
+1
+1
Loading file...
Changes in wagtail/admin/urls/__init__.py
-2
+2
Loading file...
Changes in wagtail/core/hooks.py
-2
+1
+1
Loading file...
Changes in wagtail/contrib/search_promotions/wagtail_hooks.py
-1
+1
Loading file...
Changes in wagtail/contrib/redirects/wagtail_hooks.py
-1
+1
Loading file...
Changes in wagtail/sites/wagtail_hooks.py
-1
+1
Loading file...
Changes in wagtail/snippets/models.py
-1
+1
Loading file...
Changes in wagtail/images/wagtail_hooks.py
-3
-1
+4
Loading file...
Changes in wagtail/embeds/wagtail_hooks.py
-1
+1
Loading file...
Changes in wagtail/utils/decorators.py
-1
+1
Loading file...
Changes in wagtail/core/rich_text/feature_registry.py
-2
+1
+1
Loading file...
Changes in wagtail/search/backends/base.py
-5
+2
+3
Loading file...
Changes in wagtail/admin/rich_text/converters/contentstate.py
-1
+1
Loading file...
Changes in wagtail/search/backends/db.py
-2
+1
+1
Loading file...
Changes in wagtail/admin/search.py
-1
+1
Loading file...
Changes in wagtail/documents/models.py
-1
+1
Loading file...
Changes in wagtail/search/index.py
-2
+1
+1
Loading file...
Changes in wagtail/images/models.py
-1
+1
Loading file...
client/src/components/Icon/Icon.js
Loading file...
client/src/components/Explorer/ExplorerPanel.js
Loading file...
client/src/components/Explorer/reducers/nodes.js
Loading file...
client/src/components/LoadingSpinner/LoadingSpinner.js
Loading file...
client/src/includes/initSubmenus.js
Loading file...
client/src/components/Draftail/blocks/ImageBlock.js
Loading file...
client/src/components/Draftail/decorators/TooltipEntity.js
Loading file...
client/src/api/admin.js
Loading file...
client/src/components/Explorer/Explorer.js
Loading file...
client/src/components/Explorer/reducers/explorer.js
Loading file...
client/src/config/wagtailConfig.js
Loading file...
client/src/api/client.js
Loading file...
wagtail/admin/static_src/wagtailadmin/js/page-editor.js
Loading file...
client/src/includes/initSkipLink.js
Loading file...
wagtail/admin/static_src/wagtailadmin/app/wagtailadmin.entry.js
Loading file...
client/src/components/Button/Button.js
Loading file...
client/src/components/Explorer/ExplorerToggle.js
Loading file...
client/src/utils/focus.js
Loading file...
client/src/components/Explorer/PageCount.js
Loading file...
client/src/components/Explorer/ExplorerItem.js
Loading file...
client/src/components/Draftail/decorators/Link.js
Loading file...
client/src/components/Explorer/index.js
Loading file...
client/src/components/Draftail/Tooltip/Tooltip.js
Loading file...
client/src/components/Draftail/DraftUtils.js
Loading file...
client/src/components/PublicationStatus/PublicationStatus.js
Loading file...
client/src/components/Draftail/index.js
Loading file...
client/src/utils/actions.js
Loading file...
client/src/components/Draftail/EditorFallback/EditorFallback.js
Loading file...
client/src/components/Draftail/decorators/Document.js
Loading file...
wagtail/admin/static_src/wagtailadmin/js/vendor/urlify.js
Loading file...
client/src/components/Explorer/ExplorerHeader.js
Loading file...
client/src/components/Draftail/blocks/MediaBlock.js
Loading file...
client/src/components/Portal/Portal.js
Loading file...
wagtail/admin/static_src/wagtailadmin/app/draftail.entry.js
Loading file...
client/src/components/Explorer/actions.js
Loading file...
client/src/components/UpgradeNotification/index.js
Loading file...
client/src/components/Draftail/sources/ModalWorkflowSource.js
Loading file...
client/src/components/Transition/Transition.js
Loading file...
client/src/utils/version.js
Loading file...
wagtail/admin/static_src/wagtailadmin/js/vendor/jquery-3.5.1.min.js
Loading file...
client/src/components/Draftail/blocks/EmbedBlock.js
Loading file...
New file wagtail/locales/tests.py
New
Loading file...
New file wagtail/locales/forms.py
New
Loading file...
New file wagtail/locales/__init__.py
New
Loading file...
New file wagtail/locales/apps.py
New
Loading file...
New file wagtail/locales/wagtail_hooks.py
New
Loading file...
New file wagtail/locales/views.py
New
Loading file...
New file wagtail/locales/utils.py
New
Loading file...
Files Coverage
wagtail -42.09% 47.87%
Project Totals (393 files) 47.87%
Loading