From 762d8a7fe9ef6a805fa5eed23991da2d434c2410 Mon Sep 17 00:00:00 2001 From: Tung Huynh <31434093+huynhsontung@users.noreply.github.com> Date: Tue, 21 Apr 2020 23:48:00 -0700 Subject: [PATCH] Upgrade Wagtail to v2.7.2 (#4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adds Collections section to editor's guide * Add form media to users/edit.html (#5390) * Adds screen-reader-only text to the close button for modals (#5274, #5377) * Adds clearer text to the close button for modals * Use existing wagtailConfig.STRINGS to store the new translatable string for JS, rather than introducing a new library. * Update list of string constants for translation in the tests file * Remove aria-hidden on modal dialog close button * Ensure the 'add child page' button displays when focused (#5274, #5382) * Fix elasticsearch search backend tests broken by #5208 * Remove buggy tab order customisations in CMS admin (#5383, #5351) * Fix spelling (#5393) * Add labels to permission checkboxes for screen reader users (#5329, #5395) - adds a fieldset around checkboxes with the same name - add correct labels for object permissions table - Ensure that image and document permissions labels display correctly, and ensure that labels for the dropdowns for document and image collections are not display:none - Hide labels from sighted users in group edit / group add pages * Optimization of UserPagePermissionsProxy.revisions_for_moderation (#5311) revisions_for_moderation() was iterating over Page instances only to use their path attribute. The optimization uses values_list() over the GroupPagePermission queryset to retrieve only the page paths without having to create the model instances in memory. This saves roughly 50% of the runtime. * Re-add loading of Wagtail icon font for userbar. Fix #5397 (#5398) * Refactor submenu JS to remove jquery dep and move to wagtail-client (#5254) * Add more contextual information for screen readers in the explorer menu’s links (#5335, #5386) * Add dedicated accessibility section to v2.6 release notes (#5402) * Add process_child_object method to Page.copy * Add "exclude_fields" parameter to Page.copy Also, make the excluded fields take effect on child relations as well * Provide the original and copied pages to process_child_object() * Add tests for Page.copy() process_child_object and exclude_fields * Release notes for #5183 * Implement Page.with_content_json and add to docs (fixes #5199) * Tests for #5203 * Release notes for #5203 * Improve screen-reader labels for action links in page listing (#5274, #5380) * Move focus to the pages explorer menu when open (#5336, #5394) * Ensure that when you open the explorer the focus moves to the first link of the menu, and add a label for the explorer navigation * Add dialog role to pages explorer popup, and ensure that there is an option to close the dialog window when tabbing by making the close button visually hidden rather than display none * Added CI config to generate nightly builds from master (#5320) * Added CI config to generate nightly builds from master * Fix typo * Don't write __init__.py directly We need to import the original in the script * Update wagtail.utils.version This is based off a copy from Django master made just now and adds support for 'dev' versions. * Try pip install --user * Add screen-reader labels across multiple parts of the UI (#5274, #5339, #5372) * Rename _utilities.hidden.legacy.scss to _utilities.visuallyhidden.scss (#5404) We will always need visuallyhidden styles for screen readers. * Update CONTRIBUTORS.rst * added construction_hook_name to settings_menu (#5384) * Clarify new three month release policy * Adjust link label * Update third_party_tutorials.rst Add a detailed article about using GraphQL in Wagtail * Nightly: Upload builds to 'dist' subfolder * Nightly: Upload builds to 'dist' subfolder * Nightly: Keep latest.json public when updating * Nightly: Add script for testing nightly builds * Document the workaround for broken wagtailimages.Filter references in custom image migrations * Added missing is_stored_locally() to AbstractDocument * Datetime picker dispatches 'change' event * Also add change event to timepicker and datepicker * Search query normalisation no longer removes punctuation #5416 * Don't make assumptions about the username field The USERNAME_FIELD exists to allow customisation. Therefore we should make an assumption that `.username` exists on the model. Instead, we need to pull the required value from the USERNAME_FIELD and add in a fallback default. * Optimize admin.navigation.get_explorable_root_page Testing the queryset in the if clause was causing the whole queryset to be retrieved and populated from DB, all to check whether it was empty or not. The optimization is to rely on the strict behavior of first_common_ancestor, which raises an exception if the queryset is empty. * Fetch new translations from Transifex * Generate new strings for translation * Version bump to start work on 2.7 * Add 2.7 section to changelog and release notes * Fix update docs typo Only two Ss in accessor. Also make quotes consistent. * Remove features deprecated in 2.7 * Rotate deprecation warnings for 2.7 * Pin Squash docker image to a specific version (#5441) Recent builds have been breaking due to the following error: `/post_build.sh: line 2: npm: command not found`. I’m not entirely sure this is the fix, but it looks like this `latest` tag is now resolving to `3.7.4-buster` (https://hub.docker.com/_/python). Debian Buster got released 2 weeks ago. It feels safer to have a pinned dependency, and Stretch is probably what it was resolving to before. * Add a `construct_page_listing_buttons` hook This hook mimics the functiolity provided by `construct_page_action_menu` in that it constructs the final list of buttons to be shown in the wagtail admin interface. This means that within this function button's can be removed, added or re-ordered. See #4925 * Updated feature detection notes * Fix broken pipenv/docutils dependency on CircleCI * Break long file titles on multi file upload listing * Fix docs title to break for long filenames * Release note for #5431 * Add https support for scribd oembed provider (#739) Currently scribd defaults to https for their sharing links - http still works but if you copy&paste quickly you may think it's broken * Fix the required styles on title fields (#5440) * Change StreamField group labels color so labels are visible. Fix #5455 (#5462) * use lighter grey for streamfield group label for accessible contrast * Fix jcrop holder image having no alt tag * Pass down process_child_object when copying recursively * Delay dirty form check data snapshot to avoid race conditions. Fix #4978 (#5469) User interaction with the form within the 10s delay also won’t trigger the confirmation message. There will still be race condition issues if form widgets like rich text take 10+ seconds to initialise – but that doesn’t seem likely. * Add release notes for 2.5.2 * Fetch new translations from Transifex * Fill in release date for 2.5.2 * Fill in release date for 2.6 * Make image fallback work for images with big/small aspect ratios. Fix #5472 (#5474) * Add support for phone links in rich text This is mainly copy paste of Liam Brenner work (#3776) but with a few fixes to make it work with Draftail. Since mailto:-links is supported i think it is reasonable to support tel:-links as well * Apply escaping to JS translation strings. Fixes #5477 * Add release notes for 2.6.1 * Prevent exception when attempting to delete a model with a protected 1-to-1 relation Modeladmin handles notification to the user if a model instance has protected ForeignKey relationships. However, if the protected relation is a OneToOneField it raises an exception: File ".../wagtail/wagtail/contrib/modeladmin/views.py", line 742, in post for obj in qs.all(): AttributeError: 'MyRelatedModel' object has no attribute 'all' because qs in this case is the related instance rather than a queryset of related instances (as is the case for a ForeignKey). This commit handles the OneToOneField case as well. * Move and refactor upgrade notification JS * Clarify CHANGELOG instructions in "Committing code" docs (#5483) * Fill in release date for 2.6.1 * Add labels to snippet bulk edit checkboxes for screen reader users. Fix #5328 (#5463) * Resolve DeprecationWarning (#5485) Resolves "DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working" - see #5484 * Use xenial for all travis builds * Test against Python 3.8 dev build * Add (failing) test for middleware responses during preview Responses returned by middleware (e.g. authentication failure) while creating the dummy request for a page preview. However, the current (broken) behaviour is to ignore the response, and attempt to serve the preview using the resulting request - which is likely to have incompletely-applied middleware, leading to hard-to-debug issues (usually involving a missing request.site). * Introduce make_preview_request method to supersede dummy_request Django-1.10-style middleware inherently doesn't support applying middleware to the request independently of running the view function, as the design of dummy_request requires. The current implementation of dummy_request unwittingly works around this by running the entire request/response cycle on the page's live URL (regardless of whether the page actually exists there at that moment), throwing away the response, and returning the request object to be used a second time (at which point it will be hopefully be populated with middleware-supplied attributes such as request.user and request.site - unless something caused the middleware to abort). The new make_preview_request method wraps the call to serve_preview inside the middleware processing, so there is no longer a bogus 'background' request and no response has to be thrown away (meaning that any response returned by middleware will be correctly returned). Fixes #3546 * Update dummy_request tests to use make_preview_request * Deprecation note for dummy_request * Release note for #5427 * Don't use page admin title when editing rich text (#5491) When editing a rich text field and entering a link to a page whose Page type overrides get_admin_display_title, the custom admin display title is used both when browsing to select the page to link to and also when viewing the rich text editor. The first behavior is consistent with how custom admin display titles are used throughout the admin, but the second behavior is not. The Wagtail user should be able to use the rich text field as a reasonable preview of what the rendered content will look like for the end user. To do this, the "real" page title should be used, not the admin one. This commit alters the data that gets passed to the rich text editor so that its title is the real page title and not the admin one. Fixes issue 5131. * Properly check permissions when viewing revisions (#5490) Currently any user with any page permission can view any page revision. This commit fixes that, and ensures that the user has publish or edit permission on the page before showing a page revision. If not, the user is presented with a 403. This maintains the current behavior if the user has no page permissions, which is to redirect to the admin home page. New tests have been added to cover these changes. Fixes issue 5426. * Fix pageurl and slugurl handling of situations where request.site is null (#5501) * Add caption field to TableBlock * Create caption field added to table block widget Caption allows for users users with screen readers to be able to understand the contents of a table. * Fixed bugs in javascript and typos * Updated documentation and change log * Fixed table caption bug and requested pr edits * Fixed table caption bug and request pr edits * Removed changes in changelog.txt * Fixed bug and requested PR edits * Output form media on add/edit/chooser image forms with custom models * Add tests for custom image on multiple image uploader * Output form media on image add/edit views * Output form media for 'add image' form within image chooser modal Note: this won't work reliably if the media is hosted on a CDN, because script tags inserted as part of a jQuery DOM insertion (as modals are) are loaded asynchronously and not guaranteed to complete loading before inline scripts are run. It's better than not having the includes there at all though... * Upgrade minimum 6.x release for Elasticsearch to 6.4.0 Fix doc and test on ES6 python client compat This commit changes the statement that version < 6.3.1 of the elasticsearch python client should be used to instead state that 6.4.0 is fine. It also update the tests to reflect the statement. Initially the `update_all_types` argument has been used to work around an issue described in: https://github.com/wagtail/wagtail/issues/2968 This argument was removed in elasticsearch-py 6.3.1 and making use of it was raising an error. With 6.4.0 nothing is raising anymore. * Add ability to create anchor link tab within rich text link - add tests - Update changelog & release notes * Update Changelog * Upgrade django-taggit to 1.x django-taggit 1.x drops Python 2.x support and thus the dependency on django.utils.six; this is a prerequisite for supporting Django 3.0. The signature of TaggableManager.value_from_object has changed to return a list of Tags (previously it was a QuerySet of TaggedItems) and so search indexing and comparison need to be updated accordingly. There is a corresponding fix to ClusterTaggableManager in django-modelcluster 5.0. * Fix failing tests due to different HTML escaping in Django 3.0 - Fix password reset tests - Fix test for invalid-slug message - Update changelog/release notes * Fixes layout for the FileField * Allow users to change their first and last name * Move locale-related functions from wagtail.admin.utils to wagtail.admin.locale * Move model-related functions from wagtail.admin.utils to wagtail.admin.models * Move authentication-related functions from wagtail.admin.utils to wagtail.admin.auth * Move authentication-related functions from wagtail.admin.decorators to wagtail.admin.auth * Move email functions from wagtail.admin.utils to wagtail.admin.mail * Move get_site_for_user to wagtail.admin.navigation * Update docs with new locations of wagtail.admin.utils definitions * Fix MovedDefinitionHandler deprecation warnings to point to the import location * Update wagtail.admin.utils and wagtail.admin.decorators imports to new locations. Fixes #5507 * Make try/catch AttributeError less all-encompassing * Update references to wagtailadmin in comment * Fix mention of non-existing PageLinkHandler.get_identifier Refs #5184 * fix(docs/customization): Add models import to fix example (#5520) * Remove Unidecode from postgres_search. Fix #5001 (#5514) * Updated contributors & changelog * Add telephone number links to release notes * Replace streamfield CSS with react-streamfield CSS * Update list / struct / stream block markup to match react-streamfield CSS * Fix streamfield tests for updated markup * Updates broken JS tests. * Updates to react-streamfield 0.9.5. * Release note for StreamField design update (#5476) * Update release schedule info and move dates table to the wiki Document release schedule in readme * update docs for TabbedInterface (#5374) * Allow content to define the tab width on xs screens to stop cutting off text (#5392) * Break listing titles by word so action buttons are visible on smaller screens (#5429) * Changed Snippet Chooser AJAX delay from 50ms to 200ms, to remove laggy typing. (#5439) 50ms is the equivalent of about 200 words per minute, so typing slower than that meant that the javascript would send an AJAX request between every single keystroke. This change makes the javascript wait for 200ms between keystrokes, which lets you finish typing the word you're looking for before it sends an AJAX request. * Update CONTRIBUTORS.rst Correction to contributor's name per request by email * Add wagtail nightly to readme * Add note about CurrentSiteMiddleware incompatibility As per https://github.com/wagtail/wagtail/issues/2840#issuecomment-522697801 * fix: Language chosen in user preferences persists on subsequent requests (#4310) * Add SECURITY.md (#5536) Adds security.md to be consistent with github's interface * Fix compatibility with pylint-django (#5538) It's not possible to use wagtail in a project with pylint and the pylint-django plugin. Pylint-django does not work with foreign keys that are referenced by their string names. See: https://github.com/PyCQA/pylint-django#known-issues If we simply replace the string name with the foreign-key class, linting on wagtail projects is fixed. Also see: https://github.com/PyCQA/pylint/issues/2995 https://github.com/PyCQA/pylint-django/issues/241 * Add setting to disable email management This commit adds WAGTAIL_EMAIL_MANAGEMENT_ENABLED setting that defaults to True, but when disabled, hides the 'Change email' button in account management view, and disables the associated route. This is useful when using external authentication method like LDAP or OpenID Connect where email management is handled elsewhere. Wagtail already includes WAGTAIL_PASSWORD_MANAGEMENT_ENABLED setting. This is almost exact copy of that implementation. * Replaced SafeText with SafeString. * Replaced use of force_text with force_str. * Updated the block id initialization (#5552) The current block id generation only sets the id as the block is serialized for storage in the database, which means that the id is unavailable in the block until it is pulled back from the database. In my debugging this caused the id to be set to new values up to 3 times when saving a brand new page (each time with a new id). This updated logic applies the new id to the actual block which makes it available right away and prevents the id from being regenerated. * Stopped inheriting from object. * Fixed broken email header when hosting static files remotely (#5543) Fixes #5525 * Split up wagtail.admin.tests.test_pages_views * Fix Postgres search indexing on Postgres 9.4 and Django >=2.2.1 Fixes #5547 As of Django 2.2.1, Value expressions within a SearchVector must specify an output_field: https://code.djangoproject.com/ticket/30446 * Release note for #5559 * Fix soundcloud embed regex * Update core team list in CONTRIBUTORS.rst * Fill in release date for 2.6.2 * Fetch new translations from Transifex * Add translator credits * Add core team alumni section to contributors * Marks preview models for translation * Fix class selector mapping (#5571) The markup is wrong which results in code not working properly. * add WAGTAILDOCS_SERVE_METHOD setting to allow serving files from underlying storage * Documentation tweaks for WAGTAILDOCS_SERVE_METHOD As suggested by @chosak - https://github.com/wagtail/wagtail/pull/5296#discussion_r324252497 , https://github.com/wagtail/wagtail/pull/5296#discussion_r324257167 * Additional tests for document.url and serve view behaviour * Release note for #5296 * Update configuration.rst (#5576) * Add ability to hide 'Submit for Moderation' in action menu using setting WAGTAIL_MODERATION_ENABLED. When set to false, SubmitForModerationMenuItem method is_shown returns false (#5574) * allow image page sizes to be configurable (#5568) * Updating FieldDoesNotExist imports to all be django.core.exceptions. (#5581) * Test Django master against django-modelcluster master * Eliminate dependency on default User model from style guide Fixes #5442. Building a User object for david@torchbox.com may cause problems if a custom user model is in use, and is redundant anyhow because there's no longer a registered gravatar for that email - we should just hard-code the default blank avatar instead. * Update more FieldDoesNotExist imports as per #5581 * Add role="table" to TableBlock output As per https://twitter.com/SaraSoueidan/status/1177622630763028480, certain browsers apply heuristics to decide whether `` elements exist for layout or data purposes, and adjust the behaviour of their accessibility features accordingly. Given that TableBlock intentionally doesn't allow markup within cells, we can be reasonably sure that any tables created with it are genuine data tables, and should therefore indicate that using `role="table"`. * Make DraftailRichTextArea be considered as visible (#5583) * Make it possible to override the url used by Page._get_dummy_headers() * Changed height's description to match width's. (#5593) * Add a note on 'Previewing and Submitting for Moderation' page about potential disabled moderation * Add new docs page 'Changing rich text representation' (#5579) * Add new docs page 'Changing rich text representation' describing how to subclass Format to provide a custom image html representation in rich text * Output form media on add/edit/chooser document forms with custom models Similar to eaad01308142337739d7edd9f08bd8e714be23f0, but for Document * Deduplicate creation of fake file in document tests * Add separate GitHub issue templates for feature requests and bugs. Fix #5560 (#5594) * Add cache-busting parameter to admin static files Fixes #5493 * Disable querystrings if a storage backend with hashed filenames is active * Added upgrade note about disabling version strings * Release note for #5527 * Implements ES7 support (#5611) * Implements ES7 support * Linter fix * Adds docs * isort fix * Fixes typo * Release notes for #5611 * Allow default item in action menu to be overridden with construct_page_action_menu hook Fixes #5438 * Add 'Page locked' as a distinct menu item * Revise action menu ordering so that the first (not last) item is picked as the default Addresses backwards compatibility of existing action menu hooks, as per https://github.com/wagtail/wagtail/pull/5500#pullrequestreview-286868977 * Update construct_page_action_menu example Now avoids redefining the whole list, and reflects the fact that the first (rather than last) item is picked as the default. * Add release note about template change for action menu items * Clarify that menu item order attribute is ignored in construct_page_action_menu * Release note for #5500 / #5612 * Add acknowledgement to The Motley Fool * Remove mentions of Django 3.0 compatibility from release notes Work on compatibility is ongoing while Django 3.0 is still in development; we don't want this to be misinterpreted as a statement of formal Django 3.0 support (which we can't promise until the final release) * Add example of template rendering to TableBlock docs Addresses #5540 * Added 'image uploads in forms' to third party tutorials * Fix multiple minor documentation issues - Typo in readme (verb did not agree with the subject) - Grammatical error in topics/pages - #5364 - Update URL config code block in getting-started/integrating-into-django * Replace format() placeholders in translatable strings with % formatting Fixes #5539. Transifex and Django's makemessages command have validation to catch invalid placeholder variables within translated strings - for example, where the translator has translated the variable name - but these only recognise old-style `%` formatting, not the `format` method, and so it's better for us to standardise on % formatting. To reduce the burden on translators having to re-translate these strings, only the ones using named placeholders (`"Edited page {title}"`) rather than numeric ones (`"Edited page {0}"`) have been changed - hopefully the latter give less room for error. Also fixed some incorrect use of plurals (verbose_name vs verbose_name_plural) in snippet confirmation messages. * Docs - Add AbstractUser import to custom user model - `from django.contrib.auth.models import AbstractUser` - revise a previous changelog entry to clarify 'clean up' vs 'fix' * Recommend signals rather than hooks for model-level customisations As per #5620 - signals are often overlooked as a way of customising model-level behaviour. We should recommend them over admin hooks where possible, as they aren't reliant on users taking one particular path through the admin - for example, an 'add document' signal will be triggered regardless of whether a document is created through the single uploader, multiple uploader, chooser model or a scripted task, whereas a hook would not catch all of these cases. * Formalise Python 3.8 support * Make copy of ES6 settings before setting max_ngram_diff (#5625) * Change string based reference to class based * Add model to PersonAdmin in documentation * Replace rawgit.com links with jsdelivr rawgit will be shut down soon * Add thanks to squash.io * [5225] Take number of frames into account when limiting image size * Revert "Formalise Python 3.8 support" This reverts commit ddbbaea288361efb6be537932d5f609e75e2f3c7. * Add webp support * Support format-webp and allow changing default formatting * Add tests for webp format conversion * Release note for #5249 / #5629 * Add documentation for how to use alternative image tags This adds documentation for alternative image tags such as `` and ``. * Improvements to "Alternative HTML tags" based on review feedback * syntax => keyword * Rename wagtail/admin/locale.py to localization.py Having a module called locale interferes with Django's makemessages / compilemessages commands :-( * Changelog cleanup * note Python 3.8 support as provisional * Remove mentions of minor doc fixes (there are many more fixes beyond the ones mentioned here, and including them all in the release notes would add too much noise...) * Fetch new translations from transifex * Remove redundant ugettext_lazy from non-text labels * Generate new strings for translation * Version bump to 2.7rc1 * Ensure admin API always uses SessionAuthentication backend Fixes #5585 and (at least partly) #5628 * Release note for #5643 in 2.6.3 * Release note for #5643 in 2.7 * Version bump to 2.7rc2 * Formalise Python 3.8 support * Mark Python 3.8 support as official in changelog * Avoid calling versioned_static from static form media definitions (#5644) * Avoid calling versioned_static from static form media definitions Fixes #5632 Defining media definitions with `class Media:` means that those lines are evaluated on application startup; this means that they cannot contain calls to the Django static file finder, because ManifestStaticFilesStorage doesn't work until collectstatic has completed. Fix this by making those definitions into `def media(self):` methods. * Add test to confirm that inheritance still works with dynamic form media definitions * Fetch new translations from Transifex * Fixed 2.6.3 date in Changelog and updated username on Contributors * Added label 'URL' for external link - Regression - missing label for external link URL field in link chooser - Resolves #5656 * Fix contributor name - incorrectly added the issue creator not the PR creator - updated name to the correct one - Stefani Castellanos * Fetch new translations from Transifex * Fill in release date for 2.7 * Version bump to 2.7 final * Version bump to 2.7.1 * Move all usage of versioned_static to media methods (#5694) * Release notes for #5694 * Fill in release date for 2.7.1 * Apply proper HTML escaping on StreamField block comparisons An individual StreamField block in the comparison view may be rendered as a plain value (for blocks that are unchanged, added or deleted) or a diff (for blocks that are changed). In both cases, the output is returned as HTML, but must not contain any unescaped editor-supplied HTML. For CharBlock, TextBlock and RawHTMLBlock, the block value is escaped so that any HTML tags in the content are shown verbatim. For RichTextBlock and any other block types that do not override the default comparison behaviour, we take the basic (non-templated) HTML rendering of the block and extract text-only content from it. This is then returned in HTML-escaped form for the plain view, and run through diff_text().to_html() for the diff view (which handles escaping itself). * Don't mark the translatable string 'None' as safe * Release notes for 2.7.2 * Version bump to 2.7.2 * fix syntax * bug fix * remove invalid import * fix more imports * fix testapp migrations * fix images and core migrations * fix image field help text * add js to AdminImageRenditionChooser * fix image chooser * continue fixing image chooser * add missing js files back to image chooser * add onload to image chooser * fix search backend Co-authored-by: Eric Dyken Co-authored-by: Matt Westcott Co-authored-by: Helen Chapman Co-authored-by: Andy Babic Co-authored-by: jordan-bauer <31709951+jordan-bauer@users.noreply.github.com> Co-authored-by: Coen van der Kamp Co-authored-by: John Carter Co-authored-by: Fidel Ramos Co-authored-by: Thibaud Colas Co-authored-by: Jonny Scholes Co-authored-by: Karl Hobley Co-authored-by: Karl Hobley Co-authored-by: Mikalai Radchuk Co-authored-by: jordan_bauer Co-authored-by: Tom Dyson Co-authored-by: Jaroslaw Zabiello Co-authored-by: Jonny Co-authored-by: Michael Hearn Co-authored-by: William Blackie Co-authored-by: Andrew Miller Co-authored-by: Michael van Tellingen Co-authored-by: Daniele Procida Co-authored-by: kevinhowbrook Co-authored-by: Rodrigo Co-authored-by: Cameron Lamb Co-authored-by: Catherine Farman Co-authored-by: Kalob Taulien <4743971+KalobTaulien@users.noreply.github.com> Co-authored-by: Iman Syed <52247241+imansyed000@users.noreply.github.com> Co-authored-by: mien Co-authored-by: Neal Todd Co-authored-by: Martey Dodoo Co-authored-by: John Carter Co-authored-by: Andy Chosak Co-authored-by: Samir Shah Co-authored-by: rjpruitt16 Co-authored-by: Jonathan Liuti Co-authored-by: Iman Syed Co-authored-by: Mikalai Radchuk Co-authored-by: Sergey Fedoseev Co-authored-by: Sanyam Khurana <8039608+CuriousLearner@users.noreply.github.com> Co-authored-by: Pavel Denisov Co-authored-by: Kalob Taulien Co-authored-by: Bertrand Bordage Co-authored-by: Zac Connelly Co-authored-by: Robert Rollins Co-authored-by: pvetch Co-authored-by: Bojan Mihelac Co-authored-by: Sarath Kumar Somana Co-authored-by: Dani Hodovic Co-authored-by: Janne Alatalo Co-authored-by: Mads Jensen Co-authored-by: Colin Klein <40399371+colink-eb@users.noreply.github.com> Co-authored-by: Edy Co-authored-by: Kiril Staikov Co-authored-by: Saptak S Co-authored-by: Dawid Bugajewski Co-authored-by: Tobias McNulty Co-authored-by: Dawn Wages Co-authored-by: jacobtm Co-authored-by: Brian Whitton Co-authored-by: Tim White Co-authored-by: Mike Janger Co-authored-by: jacobtoppm <55137073+jacobtoppm@users.noreply.github.com> Co-authored-by: Prithvi MK <32909711+pmk21@users.noreply.github.com> Co-authored-by: pySilver Co-authored-by: a-mere-peasant <50142453+a-mere-peasant@users.noreply.github.com> Co-authored-by: David Thompson Co-authored-by: LB (Ben Johnston) Co-authored-by: Thijs Baaijen Co-authored-by: Andreas Bernacca Co-authored-by: frmdstryr Co-authored-by: David <2297074+dwasyl@users.noreply.github.com> Co-authored-by: Stefani Castellanos Co-authored-by: Alex Tomkins --- .circleci/config.yml | 81 + .circleci/trigger-nightly-build.sh | 9 + .coveragerc | 1 + .eslintignore | 17 +- .eslintrc | 4 + CONTRIBUTING.md => .github/CONTRIBUTING.md | 0 .../BUG_REPORT.md} | 17 +- .github/ISSUE_TEMPLATE/FEATURE_REQUEST.md | 42 + .github/ISSUE_TEMPLATE/QUESTION.md | 16 + .github/PULL_REQUEST_TEMPLATE.md | 1 + .github/squash-logo.svg | 1 + .github/wagtail-screenshot-with-browser.png | Bin 0 -> 450644 bytes .github/wagtail.svg | 64 + .gitignore | 5 + docs/readthedocs.yml => .readthedocs.yml | 1 + .squash.yml | 23 + .stylelintrc.yaml | 79 +- .travis.yml | 86 +- .tx/config | 2 + CHANGELOG.txt | 481 +- CONTRIBUTORS.rst | 220 +- LICENSE | 18 +- MANIFEST.in | 2 +- Makefile | 5 +- README.md | 117 + README.rst | 91 - SECURITY.md | 4 + SPONSORS.md | 17 + circle.yml | 19 - client/package-lock.json | 613 - client/package.json | 8 +- client/scss/_components.scss | 4 - client/scss/_settings.scss | 2 + client/scss/_tools.breakpoints.scss | 14 - client/scss/_tools.scss | 10 + client/scss/components/_breadcrumb.scss | 108 + client/scss/components/_button.scss | 528 + client/scss/components/_chooser.scss | 143 + .../scss/components/_dropdown.legacy.scss | 186 - client/scss/components/_dropdown.scss | 66 + client/scss/components/_footer.scss | 76 + client/scss/components/_forms.scss | 420 + client/scss/components/_grid.legacy.scss | 98 + .../scss/components/_header.scss | 10 +- client/scss/components/_help-block.scss | 62 + .../scss/components/_human-readable-date.scss | 21 + .../scss/components/_icons.scss | 35 +- .../scss/components/_indicator.scss | 0 client/scss/components/_link.legacy.scss | 12 + .../scss/components/_listing.scss | 88 +- client/scss/components/_loading-mask.scss | 36 + .../scss/components/_logo.scss | 22 +- .../scss/components/_main-nav.scss | 176 +- .../scss/components/_media-placeholder.scss | 17 + .../scss/components/_messages.capability.scss | 14 + .../scss/components/_messages.scss | 17 +- client/scss/components/_messages.status.scss | 9 + .../scss/components/_modals.scss | 57 +- .../scss/components/_privacy-indicator.scss | 20 + .../scss/components/_progressbar.scss | 0 client/scss/components/_status-tag.scss | 37 + .../scss/components/_tabs.scss | 29 +- client/scss/components/_tag.scss | 37 + .../scss/components/_tooltips.scss | 0 client/scss/components/browser-message.scss | 5 + client/scss/elements/_elements.scss | 35 + client/scss/elements/_forms.scss | 219 + client/scss/elements/_typography.scss | 93 + client/scss/generic/_generic.scss | 1 + client/scss/objects/_avatar.scss | 35 + client/scss/{ => objects}/_objects.scss | 9 + client/scss/overrides/_pages.homepage.scss | 3 + .../scss/overrides/_pages.page-explorer.scss | 3 + .../scss/overrides/_utilities.dropdowns.scss | 105 + client/scss/overrides/_utilities.focus.scss | 11 + .../_utilities.hidden.scss} | 24 +- client/scss/overrides/_utilities.legacy.scss | 55 + .../overrides/_utilities.text.legacy.scss | 3 + client/scss/overrides/_utilities.text.scss | 11 + .../overrides/_utilities.visuallyhidden.scss | 7 + .../overrides/_vendor.datetimepicker.scss | 10 +- client/scss/overrides/_vendor.tagit.scss | 43 + client/scss/settings/_variables.icons.scss | 89 + client/scss/settings/_variables.scss | 120 + client/scss/styles.scss | 165 +- client/scss/tools/_functions.breakpoints.scss | 33 + client/scss/tools/_mixins.breakpoints.scss | 32 + client/scss/tools/_mixins.fonts.scss | 26 + .../scss/tools/_mixins.general.scss | 20 +- .../scss/tools/_mixins.grid.scss | 4 +- client/src/cli/component.js | 90 - client/src/cli/index.js | 15 - client/src/components/Button/Button.js | 4 + client/src/components/Button/Button.test.js | 6 +- .../Button/__snapshots__/Button.test.js.snap | 18 + client/src/components/Draftail/DraftUtils.js | 44 + .../components/Draftail/DraftUtils.test.js | 121 + client/src/components/Draftail/Draftail.scss | 8 + .../Draftail/EditorFallback/EditorFallback.js | 149 + .../EditorFallback/EditorFallback.scss | 22 + .../EditorFallback/EditorFallback.test.js | 145 + .../__snapshots__/EditorFallback.test.js.snap | 143 + .../Draftail/__snapshots__/index.test.js.snap | 5 + .../Draftail/blocks/MediaBlock.scss | 7 +- .../Draftail/blocks/MediaBlock.test.js | 8 +- .../Draftail/decorators/Document.js | 20 +- .../components/Draftail/decorators/Link.js | 19 +- .../Draftail/decorators/Link.test.js | 16 +- .../Draftail/decorators/TooltipEntity.js | 11 +- .../Draftail/decorators/TooltipEntity.scss | 4 + .../Draftail/decorators/TooltipEntity.test.js | 17 + .../__snapshots__/Document.test.js.snap | 6 +- .../__snapshots__/TooltipEntity.test.js.snap | 2 + client/src/components/Draftail/index.js | 64 +- client/src/components/Draftail/index.test.js | 6 +- .../Draftail/sources/ModalWorkflowSource.js | 80 +- .../sources/ModalWorkflowSource.test.js | 43 +- .../ModalWorkflowSource.test.js.snap | 49 +- client/src/components/Explorer/Explorer.scss | 21 +- .../src/components/Explorer/ExplorerItem.js | 12 +- .../src/components/Explorer/ExplorerItem.scss | 4 +- .../src/components/Explorer/ExplorerPanel.js | 7 +- .../src/components/Explorer/ExplorerToggle.js | 4 +- .../Explorer/ExplorerToggle.test.js | 2 +- client/src/components/Explorer/PageCount.js | 1 - .../__snapshots__/ExplorerHeader.test.js.snap | 3 + .../__snapshots__/ExplorerItem.test.js.snap | 25 +- .../__snapshots__/ExplorerPanel.test.js.snap | 45 +- .../__snapshots__/ExplorerToggle.test.js.snap | 35 +- .../__snapshots__/PageCount.test.js.snap | 2 - client/src/components/Explorer/index.js | 2 +- .../src/components/Hallo/_hallotoolbar.scss | 12 +- .../Portal/__snapshots__/Portal.test.js.snap | 16 +- .../components/StreamField/StreamField.scss | 58 + .../src/components/Transition/Transition.js | 4 + .../components/Transition/Transition.test.js | 4 + .../__snapshots__/Transition.test.js.snap | 15 + .../components/UpgradeNotification/index.js | 40 + client/src/includes/initSubmenus.js | 50 + client/src/index.js | 21 +- client/src/index.test.js | 5 + client/src/utils/focus.js | 30 + client/src/utils/focus.test.js | 48 + client/src/utils/utils.test.js | 18 + client/src/utils/version.js | 23 + client/template/README.mst | 9 - client/template/component.mst | 13 - client/template/component.test.mst | 15 - client/template/style.mst | 5 - client/tests/stubs.js | 22 +- client/webpack/base.config.js | 4 + client/webpack/dev.config.js | 3 - client/webpack/prod.config.js | 2 + codecov.yml | 6 + conftest.py | 5 + docs/_static/css/custom.css | 73 +- .../images/collections_add_to_collection.png | Bin 0 -> 129166 bytes .../images/collections_create_collection.png | Bin 0 -> 41026 bytes ...ctions_create_collection_upload_images.png | Bin 0 -> 30344 bytes .../images/collections_edit_img_view.png | Bin 0 -> 276980 bytes docs/_static/images/collections_list.png | Bin 0 -> 44983 bytes .../images/collections_privacy_button.png | Bin 0 -> 5259 bytes .../images/collections_privacy_overlay.png | Bin 0 -> 31520 bytes .../releasenotes_2_7_streamfield_styles.png | Bin 0 -> 97356 bytes .../screen08.5_reorder_page_handles.png | Bin 12054 -> 3205 bytes ...lignment.png => screen18_image_format.png} | Bin .../images/screen21_video_in_editor.png | Bin 89176 -> 17707 bytes docs/_static/images/screen27_docs_icon.png | Bin 3652 -> 1395 bytes docs/_static/images/screen28_docs_form.png | Bin 44879 -> 18936 bytes docs/_static/images/screen40_table_block.png | Bin 57416 -> 89705 bytes docs/_static/images/tutorial/tutorial_1.png | Bin 154054 -> 94537 bytes docs/_static/js/wagtailspace.js | 33 + docs/advanced_topics/api/v2/configuration.rst | 15 +- docs/advanced_topics/api/v2/usage.rst | 16 +- .../customisation/admin_templates.rst | 37 +- .../customisation/custom_user_models.rst | 8 +- .../customisation/extending_draftail.rst | 98 +- .../customisation/extending_hallo.rst | 10 +- docs/advanced_topics/customisation/index.rst | 1 + .../customisation/page_editing_interface.rst | 24 +- .../customisation/rich_text_internals.rst | 280 + docs/advanced_topics/deploying.rst | 40 +- .../documents/custom_document_model.rst | 2 +- docs/advanced_topics/embeds.rst | 4 +- docs/advanced_topics/i18n/index.rst | 28 +- .../changing_rich_text_representation.rst | 57 + .../images/custom_image_model.rst | 6 +- .../images/feature_detection.rst | 68 +- .../images/image_file_formats.rst | 47 + .../images/image_serve_view.rst | 35 +- docs/advanced_topics/images/index.rst | 2 + docs/advanced_topics/jinja2.rst | 6 +- docs/advanced_topics/performance.rst | 8 +- docs/advanced_topics/privacy.rst | 3 +- docs/advanced_topics/settings.rst | 263 +- docs/advanced_topics/testing.rst | 62 + .../advanced_topics/third_party_tutorials.rst | 15 + docs/conf.py | 13 +- docs/contributing/committing.rst | 7 +- docs/contributing/css_guidelines.rst | 28 +- docs/contributing/developing.rst | 63 +- docs/contributing/general_guidelines.rst | 7 + docs/contributing/html_guidelines.rst | 17 + docs/contributing/index.rst | 14 + docs/contributing/javascript_guidelines.rst | 17 +- docs/contributing/release_process.rst | 9 +- .../promoted_search_results.rst | 8 +- .../documents_images_snippets/collections.rst | 40 + .../documents_images_snippets/documents.rst | 2 +- .../documents_images_snippets/images.rst | 2 +- .../documents_images_snippets/index.rst | 7 +- .../documents_images_snippets/snippets.rst | 7 +- .../the_explorer_page.rst | 4 +- .../new_pages/creating_body_content.rst | 2 +- .../new_pages/inserting_images.rst | 10 +- .../new_pages/inserting_links.rst | 1 + .../new_pages/inserting_videos.rst | 9 +- ...eviewing_and_submitting_for_moderation.rst | 4 +- docs/favicon.ico | Bin 0 -> 2666 bytes docs/getting_started/index.rst | 34 +- .../integrating_into_django.rst | 18 +- docs/getting_started/tutorial.rst | 140 +- docs/index.rst | 1 + .../reference/contrib/forms/customisation.rst | 63 +- docs/reference/contrib/forms/index.rst | 4 +- docs/reference/contrib/frontendcache.rst | 18 +- .../modeladmin/create_edit_delete_views.rst | 51 +- docs/reference/contrib/modeladmin/index.rst | 180 +- .../contrib/modeladmin/indexview.rst | 118 +- .../contrib/modeladmin/inspectview.rst | 4 +- .../contrib/modeladmin/menu_item.rst | 2 +- docs/reference/contrib/modeladmin/primer.rst | 123 +- .../modeladmin/tips_and_tricks/index.rst | 10 + .../tips_and_tricks/reversing_urls.rst | 134 + docs/reference/contrib/postgres_search.rst | 10 +- docs/reference/contrib/searchpromotions.rst | 4 - docs/reference/contrib/settings.rst | 9 +- docs/reference/contrib/sitemaps.rst | 9 +- docs/reference/contrib/table_block.rst | 106 +- docs/reference/hooks.rst | 234 +- docs/reference/management_commands.rst | 12 +- docs/reference/pages/model_recipes.rst | 30 +- docs/reference/pages/model_reference.rst | 14 +- docs/reference/pages/panels.rst | 56 +- docs/reference/pages/theory.rst | 4 +- docs/reference/project_template.rst | 16 +- docs/reference/signals.rst | 4 +- docs/releases/0.4.rst | 2 +- docs/releases/0.7.rst | 4 +- docs/releases/0.8.3.rst | 2 +- docs/releases/1.0.rst | 2 +- docs/releases/1.1.rst | 4 +- docs/releases/1.10.rst | 2 +- docs/releases/1.12.3.rst | 4 +- docs/releases/1.12.4.rst | 19 + docs/releases/1.12.5.rst | 17 + docs/releases/1.12.6.rst | 16 + docs/releases/1.12.rst | 2 +- docs/releases/1.13.1.rst | 4 +- docs/releases/1.13.2.rst | 19 + docs/releases/1.13.3.rst | 17 + docs/releases/1.13.4.rst | 16 + docs/releases/1.13.rst | 3 + docs/releases/1.2.rst | 2 +- docs/releases/1.6.1.rst | 2 +- docs/releases/1.8.rst | 2 +- docs/releases/2.0.1.rst | 23 + docs/releases/2.0.2.rst | 18 + docs/releases/2.0.rst | 6 +- docs/releases/2.1.1.rst | 18 + docs/releases/2.1.2.rst | 17 + docs/releases/2.1.3.rst | 16 + docs/releases/2.1.rst | 111 + docs/releases/2.2.1.rst | 17 + docs/releases/2.2.2.rst | 17 + docs/releases/2.2.rst | 77 + docs/releases/2.3.rst | 103 + docs/releases/2.4.rst | 83 + docs/releases/2.5.1.rst | 16 + docs/releases/2.5.2.rst | 16 + docs/releases/2.5.rst | 158 + docs/releases/2.6.1.rst | 16 + docs/releases/2.6.2.rst | 16 + docs/releases/2.6.3.rst | 16 + docs/releases/2.6.rst | 121 + docs/releases/2.7.1.rst | 16 + docs/releases/2.7.2.rst | 10 + docs/releases/2.7.rst | 174 + docs/releases/index.rst | 27 + docs/releases/upgrading.rst | 135 +- docs/spelling_wordlist.txt | 17 + docs/support.rst | 5 + docs/topics/images.rst | 50 +- docs/topics/pages.rst | 31 +- docs/topics/permissions.rst | 4 +- docs/topics/search/backends.rst | 31 +- docs/topics/search/indexing.rst | 35 +- docs/topics/search/searching.rst | 32 +- docs/topics/snippets.rst | 10 +- docs/topics/streamfield.rst | 69 +- docs/topics/writing_templates.rst | 31 +- etc/nginx.conf.sample | 8 +- gulpfile.js/config.js | 1 + gulpfile.js/tasks/watch.js | 2 +- package-lock.json | 13797 ++++++++++------ package.json | 35 +- runtests.py | 21 +- scripts/get-translator-credits.py | 14 +- scripts/nightly/get_version.py | 31 + scripts/nightly/upload.py | 27 + scripts/travis/install_elasticsearch6.sh | 3 + scripts/travis/install_elasticsearch7.sh | 3 + setup.cfg | 7 +- setup.py | 52 +- tox.ini | 30 +- wagtail/__init__.py | 5 +- wagtail/admin/action_menu.py | 256 + wagtail/admin/api/endpoints.py | 3 + wagtail/admin/apps.py | 3 +- wagtail/admin/auth.py | 174 + wagtail/admin/checks.py | 80 + wagtail/admin/compare.py | 221 +- wagtail/admin/decorators.py | 40 +- wagtail/admin/edit_handlers.py | 272 +- wagtail/admin/forms.py | 576 - wagtail/admin/forms/__init__.py | 5 + wagtail/admin/forms/auth.py | 30 + wagtail/admin/forms/choosers.py | 60 + wagtail/admin/forms/collections.py | 240 + wagtail/admin/forms/models.py | 81 + wagtail/admin/forms/pages.py | 135 + wagtail/admin/forms/search.py | 12 + wagtail/admin/forms/view_restrictions.py | 34 + wagtail/admin/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 718 bytes wagtail/admin/locale/af/LC_MESSAGES/django.po | 41 + wagtail/admin/locale/ar/LC_MESSAGES/django.mo | Bin 9682 -> 36084 bytes wagtail/admin/locale/ar/LC_MESSAGES/django.po | 1117 +- wagtail/admin/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 15901 bytes wagtail/admin/locale/be/LC_MESSAGES/django.po | 542 + wagtail/admin/locale/bg/LC_MESSAGES/django.mo | Bin 12027 -> 10554 bytes wagtail/admin/locale/bg/LC_MESSAGES/django.po | 103 +- wagtail/admin/locale/ca/LC_MESSAGES/django.mo | Bin 29257 -> 27100 bytes wagtail/admin/locale/ca/LC_MESSAGES/django.po | 429 +- wagtail/admin/locale/cs/LC_MESSAGES/django.mo | Bin 17745 -> 35565 bytes wagtail/admin/locale/cs/LC_MESSAGES/django.po | 1078 +- wagtail/admin/locale/cy/LC_MESSAGES/django.mo | Bin 1116 -> 1116 bytes wagtail/admin/locale/cy/LC_MESSAGES/django.po | 20 +- wagtail/admin/locale/da/LC_MESSAGES/django.mo | Bin 544 -> 21342 bytes wagtail/admin/locale/da/LC_MESSAGES/django.po | 1079 ++ wagtail/admin/locale/de/LC_MESSAGES/django.mo | Bin 34999 -> 40115 bytes wagtail/admin/locale/de/LC_MESSAGES/django.po | 981 +- wagtail/admin/locale/el/LC_MESSAGES/django.mo | Bin 37210 -> 33299 bytes wagtail/admin/locale/el/LC_MESSAGES/django.po | 401 +- wagtail/admin/locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes wagtail/admin/locale/en/LC_MESSAGES/django.po | 1439 +- wagtail/admin/locale/es/LC_MESSAGES/django.mo | Bin 33699 -> 33850 bytes wagtail/admin/locale/es/LC_MESSAGES/django.po | 739 +- wagtail/admin/locale/eu/LC_MESSAGES/django.mo | Bin 4262 -> 3135 bytes wagtail/admin/locale/eu/LC_MESSAGES/django.po | 53 +- wagtail/admin/locale/fa/LC_MESSAGES/django.mo | Bin 35031 -> 32419 bytes wagtail/admin/locale/fa/LC_MESSAGES/django.po | 575 +- wagtail/admin/locale/fi/LC_MESSAGES/django.mo | Bin 24985 -> 23435 bytes wagtail/admin/locale/fi/LC_MESSAGES/django.po | 347 +- wagtail/admin/locale/fr/LC_MESSAGES/django.mo | Bin 33813 -> 34828 bytes wagtail/admin/locale/fr/LC_MESSAGES/django.po | 792 +- wagtail/admin/locale/gl/LC_MESSAGES/django.mo | Bin 24793 -> 23146 bytes wagtail/admin/locale/gl/LC_MESSAGES/django.po | 334 +- .../admin/locale/he_IL/LC_MESSAGES/django.mo | Bin 17499 -> 16917 bytes .../admin/locale/he_IL/LC_MESSAGES/django.po | 328 +- .../admin/locale/hr_HR/LC_MESSAGES/django.mo | Bin 2678 -> 2389 bytes .../admin/locale/hr_HR/LC_MESSAGES/django.po | 54 +- wagtail/admin/locale/hu/LC_MESSAGES/django.mo | Bin 9484 -> 38423 bytes wagtail/admin/locale/hu/LC_MESSAGES/django.po | 1424 +- .../admin/locale/id_ID/LC_MESSAGES/django.mo | Bin 31410 -> 32503 bytes .../admin/locale/id_ID/LC_MESSAGES/django.po | 729 +- .../admin/locale/is_IS/LC_MESSAGES/django.mo | Bin 31146 -> 34248 bytes .../admin/locale/is_IS/LC_MESSAGES/django.po | 736 +- wagtail/admin/locale/it/LC_MESSAGES/django.mo | Bin 32750 -> 34627 bytes wagtail/admin/locale/it/LC_MESSAGES/django.po | 821 +- wagtail/admin/locale/ja/LC_MESSAGES/django.mo | Bin 20979 -> 38550 bytes wagtail/admin/locale/ja/LC_MESSAGES/django.po | 1008 +- wagtail/admin/locale/ka/LC_MESSAGES/django.mo | Bin 3156 -> 2939 bytes wagtail/admin/locale/ka/LC_MESSAGES/django.po | 108 +- wagtail/admin/locale/ko/LC_MESSAGES/django.mo | Bin 31966 -> 35200 bytes wagtail/admin/locale/ko/LC_MESSAGES/django.po | 769 +- wagtail/admin/locale/lt/LC_MESSAGES/django.mo | Bin 32285 -> 31439 bytes wagtail/admin/locale/lt/LC_MESSAGES/django.po | 683 +- wagtail/admin/locale/lv/LC_MESSAGES/django.mo | Bin 20890 -> 20003 bytes wagtail/admin/locale/lv/LC_MESSAGES/django.po | 373 +- wagtail/admin/locale/mn/LC_MESSAGES/django.mo | Bin 1037 -> 32962 bytes wagtail/admin/locale/mn/LC_MESSAGES/django.po | 1200 +- wagtail/admin/locale/nb/LC_MESSAGES/django.mo | Bin 32530 -> 31386 bytes wagtail/admin/locale/nb/LC_MESSAGES/django.po | 713 +- wagtail/admin/locale/nl/LC_MESSAGES/django.mo | Bin 19163 -> 17668 bytes wagtail/admin/locale/nl/LC_MESSAGES/django.po | 320 +- .../admin/locale/nl_NL/LC_MESSAGES/django.mo | Bin 33342 -> 38063 bytes .../admin/locale/nl_NL/LC_MESSAGES/django.po | 887 +- wagtail/admin/locale/pl/LC_MESSAGES/django.mo | Bin 34668 -> 39661 bytes wagtail/admin/locale/pl/LC_MESSAGES/django.po | 910 +- .../admin/locale/pt_BR/LC_MESSAGES/django.mo | Bin 33806 -> 38634 bytes .../admin/locale/pt_BR/LC_MESSAGES/django.po | 873 +- .../admin/locale/pt_PT/LC_MESSAGES/django.mo | Bin 25799 -> 23672 bytes .../admin/locale/pt_PT/LC_MESSAGES/django.po | 353 +- wagtail/admin/locale/ro/LC_MESSAGES/django.mo | Bin 34574 -> 34644 bytes wagtail/admin/locale/ro/LC_MESSAGES/django.po | 745 +- wagtail/admin/locale/ru/LC_MESSAGES/django.mo | Bin 43127 -> 43830 bytes wagtail/admin/locale/ru/LC_MESSAGES/django.po | 731 +- .../admin/locale/sk_SK/LC_MESSAGES/django.mo | Bin 33116 -> 30887 bytes .../admin/locale/sk_SK/LC_MESSAGES/django.po | 609 +- wagtail/admin/locale/sl/LC_MESSAGES/django.mo | Bin 20753 -> 21150 bytes wagtail/admin/locale/sl/LC_MESSAGES/django.po | 423 +- wagtail/admin/locale/sv/LC_MESSAGES/django.mo | Bin 33102 -> 34063 bytes wagtail/admin/locale/sv/LC_MESSAGES/django.po | 774 +- .../admin/locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 22976 bytes .../admin/locale/tet/LC_MESSAGES/django.po | 1113 ++ wagtail/admin/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 48239 bytes wagtail/admin/locale/th/LC_MESSAGES/django.po | 1436 ++ wagtail/admin/locale/tr/LC_MESSAGES/django.mo | Bin 8583 -> 15479 bytes wagtail/admin/locale/tr/LC_MESSAGES/django.po | 523 +- wagtail/admin/locale/uk/LC_MESSAGES/django.mo | Bin 10149 -> 44780 bytes wagtail/admin/locale/uk/LC_MESSAGES/django.po | 1301 +- wagtail/admin/locale/zh/LC_MESSAGES/django.mo | Bin 10288 -> 9149 bytes wagtail/admin/locale/zh/LC_MESSAGES/django.po | 230 +- .../admin/locale/zh_CN/LC_MESSAGES/django.mo | Bin 29401 -> 0 bytes .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 34625 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 886 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 29911 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 1408 ++ wagtail/admin/localization.py | 116 + wagtail/admin/mail.py | 114 + wagtail/admin/menu.py | 13 +- wagtail/admin/modal_workflow.py | 24 +- wagtail/admin/models.py | 54 +- wagtail/admin/navigation.py | 29 +- .../converters/contentstate_models.py | 10 +- .../admin/rich_text/converters/editor_html.py | 53 +- .../rich_text/converters/html_ruleset.py | 28 +- .../converters/html_to_contentstate.py | 21 +- .../rich_text/editors/draftail/__init__.py | 49 +- .../rich_text/editors/draftail/features.py | 33 +- wagtail/admin/rich_text/editors/hallo.py | 57 +- wagtail/admin/search.py | 2 +- wagtail/admin/site_summary.py | 39 +- .../wagtailadmin/app/draftail.entry.js | 12 +- .../wagtailadmin/app/draftail.entry.test.js | 6 +- .../wagtailadmin/app/wagtailadmin.entry.js | 31 +- .../app/wagtailadmin.entry.test.js | 4 + .../wagtailadmin/fonts/opensans-bold.ttf | Bin 224676 -> 0 bytes .../fonts/opensans-bolditalic.ttf | Bin 251060 -> 0 bytes .../wagtailadmin/fonts/opensans-italic.ttf | Bin 258188 -> 0 bytes .../wagtailadmin/fonts/opensans-light.ttf | Bin 216824 -> 0 bytes .../fonts/opensans-lightitalic.ttf | Bin 263108 -> 0 bytes .../wagtailadmin/fonts/opensans-regular.ttf | Bin 218988 -> 0 bytes .../wagtailadmin/fonts/opensans-semibold.ttf | Bin 218428 -> 0 bytes .../fonts/opensans-semibolditalic.ttf | Bin 262136 -> 0 bytes .../wagtailadmin/fonts/robotoslab-bold.ttf | Bin 334048 -> 0 bytes .../wagtailadmin/fonts/robotoslab-regular.ttf | Bin 331256 -> 0 bytes .../wagtailadmin/fonts/wagtail-icomoon.json | 2866 ++-- .../static_src/wagtailadmin/fonts/wagtail.eot | Bin 23060 -> 0 bytes .../static_src/wagtailadmin/fonts/wagtail.svg | 85 - .../static_src/wagtailadmin/fonts/wagtail.ttf | Bin 22896 -> 0 bytes .../wagtailadmin/fonts/wagtail.woff | Bin 22972 -> 24140 bytes .../images/default-user-avatar.png | Bin 0 -> 1665 bytes .../wagtailadmin/js/blocks/sequence.js | 8 +- .../wagtailadmin/js/blocks/stream.js | 21 +- .../admin/static_src/wagtailadmin/js/core.js | 27 +- .../wagtailadmin/js/date-time-chooser.js | 93 + .../wagtailadmin/js/hallo-bootstrap.js | 3 +- .../js/hallo-plugins/hallo-wagtaillink.js | 13 +- .../wagtailadmin/js/modal-workflow.js | 19 +- .../wagtailadmin/js/page-chooser-modal.js | 162 + .../wagtailadmin/js/page-chooser.js | 1 + .../static_src/wagtailadmin/js/page-editor.js | 109 +- .../wagtailadmin/js/page-editor.test.js | 32 + .../wagtailadmin/js/privacy-switch.js | 37 +- .../static_src/wagtailadmin/js/submenu.js | 21 - .../wagtailadmin/js/upgrade_notify.js | 48 - .../js/vendor/jquery.datetimepicker.js | 2036 ++- .../wagtailadmin/js/vendor/tag-it.js | 2 +- .../wagtailadmin/js/vendor/urlify.js | 9 + .../wagtailadmin/scss/_font-icons.scss | 19 - .../static_src/wagtailadmin/scss/_fonts.scss | 25 - .../wagtailadmin/scss/_helpers.scss | 2 + .../wagtailadmin/scss/_variables-icons.scss | 85 - .../wagtailadmin/scss/_variables.scss | 88 - .../scss/components/_formatters.scss | 274 - .../wagtailadmin/scss/components/_forms.scss | 1255 -- .../scss/components/_streamfield.scss | 402 - .../scss/components/_typography.scss | 162 - .../static_src/wagtailadmin/scss/core.scss | 458 - .../wagtailadmin/scss/layouts/404.scss | 8 +- .../scss/layouts/compare-revisions.scss | 6 +- .../wagtailadmin/scss/layouts/home.scss | 24 +- .../wagtailadmin/scss/layouts/login.scss | 10 +- .../scss/layouts/page-editor.scss | 97 +- .../wagtailadmin/scss/panels/draftail.scss | 4 +- .../wagtailadmin/scss/panels/hallo.scss | 3 +- .../wagtailadmin/scss/panels/streamfield.scss | 1 + .../static_src/wagtailadmin/scss/userbar.scss | 12 +- wagtail/admin/staticfiles.py | 55 + wagtail/admin/templates/wagtailadmin/404.html | 6 +- .../wagtailadmin/account/account.html | 44 +- .../wagtailadmin/account/change_avatar.html | 28 + .../wagtailadmin/account/change_email.html | 20 + .../wagtailadmin/account/change_name.html | 20 + .../wagtailadmin/account/change_password.html | 2 +- .../account/current_time_zone.html | 20 + .../account/password_reset/complete.html | 8 +- .../account/password_reset/confirm.html | 72 +- .../account/password_reset/done.html | 10 +- .../account/password_reset/form.html | 17 +- .../templates/wagtailadmin/admin_base.html | 55 +- .../admin/templates/wagtailadmin/base.html | 18 +- .../wagtailadmin/block_forms/list.html | 10 +- .../wagtailadmin/block_forms/list_member.html | 14 +- .../wagtailadmin/block_forms/sequence.html | 24 +- .../block_forms/sequence_member.html | 32 +- .../wagtailadmin/block_forms/stream.html | 2 - .../block_forms/stream_member.html | 21 +- .../wagtailadmin/block_forms/stream_menu.html | 23 +- .../wagtailadmin/block_forms/struct.html | 25 +- .../wagtailadmin/chooser/_link_types.html | 14 +- .../wagtailadmin/chooser/_search_results.html | 2 +- .../wagtailadmin/chooser/anchor_link.html | 17 + .../templates/wagtailadmin/chooser/browse.js | 97 - .../wagtailadmin/chooser/email_link.js | 11 - .../wagtailadmin/chooser/external_link.js | 11 - .../chooser/external_link_chosen.js | 4 - .../wagtailadmin/chooser/phone_link.html | 17 + .../collection_privacy/ancestor_privacy.html | 2 +- .../collection_privacy/set_privacy.js | 27 - .../collection_privacy/set_privacy_done.js | 4 - .../collections/_privacy_switch.html | 12 +- .../wagtailadmin/collections/edit.html | 6 +- .../wagtailadmin/collections/index.html | 4 +- .../edit_handlers/chooser_panel.html | 2 +- .../edit_handlers/help_panel.html | 6 + .../edit_handlers/inline_panel_child.html | 2 +- .../edit_handlers/object_list.html | 18 +- .../edit_handlers/tabbed_interface.html | 8 +- .../wagtailadmin/generic/create.html | 10 + .../templates/wagtailadmin/generic/edit.html | 10 + .../admin/templates/wagtailadmin/home.html | 10 +- .../home/pages_for_moderation.html | 17 +- .../wagtailadmin/home/recent_edits.html | 8 +- .../wagtailadmin/home/site_summary_pages.html | 12 +- .../home/upgrade_notification.html | 9 +- .../admin/templates/wagtailadmin/login.html | 10 +- .../wagtailadmin/notifications/base.html | 4 +- .../page_privacy/ancestor_privacy.html | 2 +- .../wagtailadmin/page_privacy/set_privacy.js | 27 - .../page_privacy/set_privacy_done.js | 4 - .../wagtailadmin/pages/_edit_switches.html | 2 + .../wagtailadmin/pages/_editor_css.html | 6 +- .../wagtailadmin/pages/_editor_js.html | 39 +- .../wagtailadmin/pages/_lock_switch.html | 9 +- .../wagtailadmin/pages/_privacy_switch.html | 20 +- .../wagtailadmin/pages/action_menu/menu.html | 13 + .../pages/action_menu/menu_item.html | 5 + .../pages/action_menu/page_locked.html | 2 + .../pages/action_menu/publish.html | 2 + .../pages/action_menu/save_draft.html | 2 + .../templates/wagtailadmin/pages/copy.html | 6 + .../templates/wagtailadmin/pages/create.html | 82 +- .../templates/wagtailadmin/pages/edit.html | 140 +- .../templates/wagtailadmin/pages/index.html | 10 +- .../pages/listing/_button_with_dropdown.html | 9 +- .../wagtailadmin/pages/listing/_list.html | 12 +- .../pages/listing/_list_choose.html | 4 + .../pages/listing/_list_explore.html | 2 +- .../_page_parent_page_title_choose.html | 11 + .../pages/listing/_page_title_choose.html | 6 +- .../pages/listing/_page_title_explore.html | 4 +- .../pages/listing/_page_title_move.html | 4 +- .../pages/listing/_pagination.html | 4 +- .../pages/listing/_table_headers_explore.html | 57 +- .../pages/move_choose_destination.html | 2 +- .../wagtailadmin/pages/preview_error.html | 2 +- .../wagtailadmin/pages/revisions/compare.html | 6 +- .../wagtailadmin/pages/revisions/list.html | 19 +- .../wagtailadmin/pages/search_results.html | 27 +- .../collection_member_permissions_form.html | 5 +- ...collection_member_permissions_formset.html | 2 +- .../shared/ajax_pagination_nav.html | 18 + .../wagtailadmin/shared/animated_logo.html | 12 +- .../wagtailadmin/shared/breadcrumb.html | 28 +- .../shared/chooser_breadcrumb.html | 2 +- .../shared/datetimepicker_translations.html | 29 - .../templates/wagtailadmin/shared/field.html | 2 +- .../templates/wagtailadmin/shared/header.html | 5 +- .../templates/wagtailadmin/shared/icon.html | 2 + .../wagtailadmin/shared/main_nav.html | 6 +- .../shared/menu_submenu_item.html | 6 +- .../wagtailadmin/shared/messages.html | 2 +- .../wagtailadmin/shared/page_status_tag.html | 9 +- .../wagtailadmin/shared/pagination_nav.html | 49 +- .../wagtailadmin/shared/search_other.html | 4 +- .../wagtailadmin/shared/user_avatar.html | 4 +- .../wagtailadmin/shared/wagtail_icon.html | 9 + .../templates/wagtailadmin/skeleton.html | 18 +- .../templates/wagtailadmin/userbar/base.html | 6 +- .../widgets/auto_height_text_input.html | 1 + .../wagtailadmin/widgets/chooser.html | 6 +- .../wagtailadmin/widgets/date_input.html | 1 + .../wagtailadmin/widgets/datetime_input.html | 1 + .../widgets/draftail_rich_text_area.html | 1 + .../widgets/hallo_rich_text_area.html | 1 + .../wagtailadmin/widgets/tag_widget.html | 9 + .../wagtailadmin/widgets/time_input.html | 1 + wagtail/admin/templatetags/gravatar.py | 44 - .../admin/templatetags/wagtailadmin_tags.py | 178 +- wagtail/admin/templatetags/wagtailui_tags.py | 17 + wagtail/admin/tests/api/test_documents.py | 2 - wagtail/admin/tests/api/test_images.py | 18 +- wagtail/admin/tests/api/test_pages.py | 8 +- wagtail/admin/tests/benches.py | 86 + wagtail/admin/tests/pages/__init__.py | 0 .../tests/pages/test_content_type_use_view.py | 20 + wagtail/admin/tests/pages/test_copy_page.py | 447 + wagtail/admin/tests/pages/test_create_page.py | 897 + wagtail/admin/tests/pages/test_dashboard.py | 92 + wagtail/admin/tests/pages/test_delete_page.py | 204 + wagtail/admin/tests/pages/test_edit_page.py | 1634 ++ .../admin/tests/pages/test_explorer_view.py | 544 + wagtail/admin/tests/pages/test_moderation.py | 383 + wagtail/admin/tests/pages/test_move_page.py | 130 + .../admin/tests/pages/test_page_locking.py | 201 + wagtail/admin/tests/pages/test_page_search.py | 177 + wagtail/admin/tests/pages/test_preview.py | 163 + wagtail/admin/tests/pages/test_revisions.py | 460 + .../admin/tests/pages/test_unpublish_page.py | 181 + wagtail/admin/tests/pages/test_view_draft.py | 78 + wagtail/admin/tests/pages/timestamps.py | 19 + .../admin/tests/test_account_management.py | 308 +- wagtail/admin/tests/test_admin_search.py | 2 +- wagtail/admin/tests/test_buttons_hooks.py | 2 +- wagtail/admin/tests/test_collections_views.py | 10 + wagtail/admin/tests/test_compare.py | 366 +- wagtail/admin/tests/test_contentstate.py | 121 +- wagtail/admin/tests/test_dbwhitelister.py | 31 - wagtail/admin/tests/test_edit_handlers.py | 287 +- wagtail/admin/tests/test_forms.py | 2 +- wagtail/admin/tests/test_html_ruleset.py | 8 + wagtail/admin/tests/test_moderation_list.py | 98 + wagtail/admin/tests/test_page_chooser.py | 267 +- wagtail/admin/tests/test_pages_views.py | 4827 ------ wagtail/admin/tests/test_privacy.py | 8 +- wagtail/admin/tests/test_rich_text.py | 287 +- wagtail/admin/tests/test_site_summary.py | 83 + wagtail/admin/tests/test_templatetags.py | 85 + wagtail/admin/tests/test_views.py | 62 + wagtail/admin/tests/test_widgets.py | 104 +- wagtail/admin/tests/tests.py | 65 +- wagtail/admin/urls/__init__.py | 20 +- wagtail/admin/urls/password_reset.py | 22 +- wagtail/admin/utils.py | 312 +- wagtail/admin/views/account.py | 210 +- wagtail/admin/views/chooser.py | 139 +- wagtail/admin/views/collection_privacy.py | 12 +- wagtail/admin/views/collections.py | 8 +- wagtail/admin/views/generic.py | 10 +- wagtail/admin/views/home.py | 18 +- wagtail/admin/views/mixins.py | 2 +- wagtail/admin/views/page_privacy.py | 12 +- wagtail/admin/views/pages.py | 253 +- wagtail/admin/wagtail_hooks.py | 217 +- wagtail/admin/widgets.py | 115 +- wagtail/api/v2/apps.py | 3 +- wagtail/api/v2/endpoints.py | 48 +- wagtail/api/v2/filters.py | 15 +- wagtail/api/v2/pagination.py | 18 +- wagtail/api/v2/serializers.py | 13 +- wagtail/api/v2/tests/test_documents.py | 47 +- wagtail/api/v2/tests/test_images.py | 64 +- wagtail/api/v2/tests/test_pages.py | 100 +- wagtail/api/v2/tests/tests.py | 2 - wagtail/api/v2/utils.py | 7 + wagtail/bin/wagtail.py | 8 + wagtail/contrib/forms/apps.py | 3 +- .../forms/locale/ar/LC_MESSAGES/django.mo | Bin 2026 -> 4732 bytes .../forms/locale/ar/LC_MESSAGES/django.po | 105 +- .../forms/locale/ca/LC_MESSAGES/django.mo | Bin 3867 -> 3867 bytes .../forms/locale/ca/LC_MESSAGES/django.po | 4 +- .../forms/locale/cs/LC_MESSAGES/django.mo | Bin 2143 -> 4374 bytes .../forms/locale/cs/LC_MESSAGES/django.po | 121 +- .../forms/locale/cy/LC_MESSAGES/django.mo | Bin 821 -> 821 bytes .../forms/locale/cy/LC_MESSAGES/django.po | 4 +- .../forms/locale/de/LC_MESSAGES/django.mo | Bin 4091 -> 4221 bytes .../forms/locale/de/LC_MESSAGES/django.po | 25 +- .../forms/locale/el/LC_MESSAGES/django.mo | Bin 4752 -> 4752 bytes .../forms/locale/el/LC_MESSAGES/django.po | 4 +- .../forms/locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../forms/locale/en/LC_MESSAGES/django.po | 24 +- .../forms/locale/es/LC_MESSAGES/django.mo | Bin 4239 -> 4293 bytes .../forms/locale/es/LC_MESSAGES/django.po | 9 +- .../forms/locale/fa/LC_MESSAGES/django.mo | Bin 4175 -> 4291 bytes .../forms/locale/fa/LC_MESSAGES/django.po | 10 +- .../forms/locale/fi/LC_MESSAGES/django.mo | Bin 2918 -> 2918 bytes .../forms/locale/fi/LC_MESSAGES/django.po | 6 +- .../forms/locale/fr/LC_MESSAGES/django.mo | Bin 4280 -> 4337 bytes .../forms/locale/fr/LC_MESSAGES/django.po | 13 +- .../forms/locale/gl/LC_MESSAGES/django.mo | Bin 2667 -> 2667 bytes .../forms/locale/gl/LC_MESSAGES/django.po | 4 +- .../forms/locale/he_IL/LC_MESSAGES/django.mo | Bin 1880 -> 1974 bytes .../forms/locale/he_IL/LC_MESSAGES/django.po | 7 +- .../forms/locale/hu/LC_MESSAGES/django.mo | Bin 959 -> 4294 bytes .../forms/locale/hu/LC_MESSAGES/django.po | 165 +- .../forms/locale/id_ID/LC_MESSAGES/django.mo | Bin 578 -> 3917 bytes .../forms/locale/id_ID/LC_MESSAGES/django.po | 178 +- .../forms/locale/is_IS/LC_MESSAGES/django.mo | Bin 4036 -> 4224 bytes .../forms/locale/is_IS/LC_MESSAGES/django.po | 19 +- .../forms/locale/it/LC_MESSAGES/django.mo | Bin 3977 -> 4054 bytes .../forms/locale/it/LC_MESSAGES/django.po | 16 +- .../forms/locale/ja/LC_MESSAGES/django.mo | Bin 2754 -> 4384 bytes .../forms/locale/ja/LC_MESSAGES/django.po | 74 +- .../forms/locale/ka/LC_MESSAGES/django.mo | Bin 516 -> 521 bytes .../forms/locale/ka/LC_MESSAGES/django.po | 6 +- .../forms/locale/ko/LC_MESSAGES/django.mo | Bin 3938 -> 4092 bytes .../forms/locale/ko/LC_MESSAGES/django.po | 16 +- .../forms/locale/lt/LC_MESSAGES/django.mo | Bin 4236 -> 4503 bytes .../forms/locale/lt/LC_MESSAGES/django.po | 22 +- .../forms/locale/lv/LC_MESSAGES/django.mo | Bin 1180 -> 1180 bytes .../forms/locale/lv/LC_MESSAGES/django.po | 4 +- .../forms/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 3987 bytes .../forms/locale/mn/LC_MESSAGES/django.po | 186 + .../forms/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 6083 bytes .../forms/locale/my/LC_MESSAGES/django.po | 199 + .../forms/locale/nb/LC_MESSAGES/django.mo | Bin 4069 -> 4105 bytes .../forms/locale/nb/LC_MESSAGES/django.po | 9 +- .../forms/locale/nl/LC_MESSAGES/django.mo | Bin 2580 -> 2580 bytes .../forms/locale/nl/LC_MESSAGES/django.po | 4 +- .../forms/locale/nl_NL/LC_MESSAGES/django.mo | Bin 4134 -> 4269 bytes .../forms/locale/nl_NL/LC_MESSAGES/django.po | 16 +- .../forms/locale/pl/LC_MESSAGES/django.mo | Bin 4322 -> 4452 bytes .../forms/locale/pl/LC_MESSAGES/django.po | 15 +- .../forms/locale/pt_BR/LC_MESSAGES/django.mo | Bin 4116 -> 4208 bytes .../forms/locale/pt_BR/LC_MESSAGES/django.po | 12 +- .../forms/locale/pt_PT/LC_MESSAGES/django.mo | Bin 3258 -> 3258 bytes .../forms/locale/pt_PT/LC_MESSAGES/django.po | 4 +- .../forms/locale/ro/LC_MESSAGES/django.mo | Bin 4318 -> 4391 bytes .../forms/locale/ro/LC_MESSAGES/django.po | 11 +- .../forms/locale/ru/LC_MESSAGES/django.mo | Bin 5306 -> 5306 bytes .../forms/locale/ru/LC_MESSAGES/django.po | 8 +- .../forms/locale/sk_SK/LC_MESSAGES/django.mo | Bin 4216 -> 4383 bytes .../forms/locale/sk_SK/LC_MESSAGES/django.po | 12 +- .../forms/locale/sl/LC_MESSAGES/django.mo | Bin 1889 -> 1889 bytes .../forms/locale/sl/LC_MESSAGES/django.po | 4 +- .../forms/locale/sv/LC_MESSAGES/django.mo | Bin 3886 -> 4037 bytes .../forms/locale/sv/LC_MESSAGES/django.po | 15 +- .../forms/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 5823 bytes .../forms/locale/th/LC_MESSAGES/django.po | 200 + .../forms/locale/tr/LC_MESSAGES/django.mo | Bin 3051 -> 3051 bytes .../forms/locale/tr/LC_MESSAGES/django.po | 4 +- .../forms/locale/uk/LC_MESSAGES/django.mo | Bin 963 -> 5536 bytes .../forms/locale/uk/LC_MESSAGES/django.po | 189 +- .../forms/locale/zh_CN/LC_MESSAGES/django.mo | Bin 3704 -> 0 bytes .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 3921 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 28 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 3855 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 197 + wagtail/contrib/forms/models.py | 6 +- .../wagtailforms/index_submissions.html | 20 +- .../templates/wagtailforms/list_forms.html | 4 +- .../wagtailforms/list_submissions.html | 1 - wagtail/contrib/forms/tests/test_views.py | 22 +- wagtail/contrib/forms/views.py | 3 +- wagtail/contrib/frontend_cache/apps.py | 3 +- wagtail/contrib/frontend_cache/backends.py | 2 +- wagtail/contrib/frontend_cache/tests.py | 102 +- wagtail/contrib/frontend_cache/utils.py | 36 +- wagtail/contrib/modeladmin/apps.py | 3 +- .../contrib/modeladmin/helpers/__init__.py | 7 +- wagtail/contrib/modeladmin/helpers/button.py | 6 +- wagtail/contrib/modeladmin/helpers/search.py | 72 + .../locale/ar/LC_MESSAGES/django.mo | Bin 1339 -> 4719 bytes .../locale/ar/LC_MESSAGES/django.po | 139 +- .../locale/ca/LC_MESSAGES/django.mo | Bin 4592 -> 4336 bytes .../locale/ca/LC_MESSAGES/django.po | 16 +- .../locale/cs/LC_MESSAGES/django.mo | Bin 1135 -> 4521 bytes .../locale/cs/LC_MESSAGES/django.po | 158 +- .../locale/de/LC_MESSAGES/django.mo | Bin 4706 -> 4918 bytes .../locale/de/LC_MESSAGES/django.po | 41 +- .../locale/el/LC_MESSAGES/django.mo | Bin 4920 -> 4601 bytes .../locale/el/LC_MESSAGES/django.po | 18 +- .../locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../locale/en/LC_MESSAGES/django.po | 70 +- .../locale/es/LC_MESSAGES/django.mo | Bin 4666 -> 4485 bytes .../locale/es/LC_MESSAGES/django.po | 21 +- .../locale/fa/LC_MESSAGES/django.mo | Bin 5126 -> 4857 bytes .../locale/fa/LC_MESSAGES/django.po | 18 +- .../locale/fi/LC_MESSAGES/django.mo | Bin 4440 -> 4188 bytes .../locale/fi/LC_MESSAGES/django.po | 16 +- .../locale/fr/LC_MESSAGES/django.mo | Bin 4833 -> 4721 bytes .../locale/fr/LC_MESSAGES/django.po | 27 +- .../locale/gl/LC_MESSAGES/django.mo | Bin 4649 -> 4396 bytes .../locale/gl/LC_MESSAGES/django.po | 16 +- .../locale/hu/LC_MESSAGES/django.mo | Bin 553 -> 4766 bytes .../locale/hu/LC_MESSAGES/django.po | 213 +- .../locale/id_ID/LC_MESSAGES/django.mo | Bin 0 -> 4290 bytes .../locale/id_ID/LC_MESSAGES/django.po | 210 + .../locale/is_IS/LC_MESSAGES/django.mo | Bin 4681 -> 4494 bytes .../locale/is_IS/LC_MESSAGES/django.po | 21 +- .../locale/it/LC_MESSAGES/django.mo | Bin 4626 -> 4487 bytes .../locale/it/LC_MESSAGES/django.po | 26 +- .../locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 4602 bytes .../locale/ja/LC_MESSAGES/django.po | 220 + .../locale/ko/LC_MESSAGES/django.mo | Bin 4728 -> 4539 bytes .../locale/ko/LC_MESSAGES/django.po | 21 +- .../locale/lt/LC_MESSAGES/django.mo | Bin 4663 -> 4475 bytes .../locale/lt/LC_MESSAGES/django.po | 21 +- .../locale/lv/LC_MESSAGES/django.mo | Bin 565 -> 565 bytes .../locale/lv/LC_MESSAGES/django.po | 4 +- .../locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 2942 bytes .../locale/mn/LC_MESSAGES/django.po | 154 + .../locale/nb/LC_MESSAGES/django.mo | Bin 4474 -> 4277 bytes .../locale/nb/LC_MESSAGES/django.po | 23 +- .../locale/nl_NL/LC_MESSAGES/django.mo | Bin 4650 -> 4850 bytes .../locale/nl_NL/LC_MESSAGES/django.po | 36 +- .../locale/pl/LC_MESSAGES/django.mo | Bin 4747 -> 4920 bytes .../locale/pl/LC_MESSAGES/django.po | 38 +- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 4680 -> 4820 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 32 +- .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 4611 -> 4361 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 16 +- .../locale/ro/LC_MESSAGES/django.mo | Bin 4650 -> 4421 bytes .../locale/ro/LC_MESSAGES/django.po | 21 +- .../locale/ru/LC_MESSAGES/django.mo | Bin 5840 -> 5573 bytes .../locale/ru/LC_MESSAGES/django.po | 16 +- .../locale/sk_SK/LC_MESSAGES/django.mo | Bin 4618 -> 4383 bytes .../locale/sk_SK/LC_MESSAGES/django.po | 19 +- .../locale/sv/LC_MESSAGES/django.mo | Bin 4539 -> 4341 bytes .../locale/sv/LC_MESSAGES/django.po | 20 +- .../locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 3802 bytes .../locale/tet/LC_MESSAGES/django.po | 203 + .../locale/th/LC_MESSAGES/django.mo | Bin 0 -> 5941 bytes .../locale/th/LC_MESSAGES/django.po | 208 + .../locale/tr/LC_MESSAGES/django.mo | Bin 786 -> 786 bytes .../locale/tr/LC_MESSAGES/django.po | 4 +- .../locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 5552 bytes .../locale/uk/LC_MESSAGES/django.po | 217 + .../locale/vi/LC_MESSAGES/django.mo | Bin 1012 -> 1012 bytes .../locale/vi/LC_MESSAGES/django.po | 6 +- .../locale/zh_CN/LC_MESSAGES/django.mo | Bin 4419 -> 0 bytes .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 4616 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 35 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 4229 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 207 + wagtail/contrib/modeladmin/options.py | 79 +- .../scss/breadcrumbs_page.scss | 11 + .../wagtailmodeladmin/scss/index.scss | 16 +- .../templates/modeladmin/choose_parent.html | 17 +- .../templates/modeladmin/create.html | 9 +- .../templates/modeladmin/delete.html | 1 + .../modeladmin/templates/modeladmin/edit.html | 4 +- .../includes/header_with_breadcrumb.html | 5 + .../modeladmin/includes/search_form.html | 4 +- .../templates/modeladmin/index.html | 8 +- .../templates/modeladmin/inspect.html | 15 +- .../templatetags/modeladmin_tags.py | 4 +- .../tests/test_modeladmin_edit_handlers.py | 131 + .../modeladmin/tests/test_page_modeladmin.py | 88 +- .../modeladmin/tests/test_search_handlers.py | 138 + .../tests/test_simple_modeladmin.py | 173 +- wagtail/contrib/modeladmin/views.py | 195 +- wagtail/contrib/postgres_search/apps.py | 11 +- wagtail/contrib/postgres_search/backend.py | 407 +- .../migrations/0001_initial.py | 6 - .../migrations/0002_add_autocomplete.py | 49 + wagtail/contrib/postgres_search/models.py | 34 +- .../postgres_search/tests/test_backend.py | 114 + .../postgres_search/tests/test_stemming.py | 44 + wagtail/contrib/postgres_search/utils.py | 24 +- wagtail/contrib/redirects/apps.py | 3 +- .../redirects/locale/ar/LC_MESSAGES/django.mo | Bin 2075 -> 3653 bytes .../redirects/locale/ar/LC_MESSAGES/django.po | 83 +- .../redirects/locale/bg/LC_MESSAGES/django.mo | Bin 2866 -> 2636 bytes .../redirects/locale/bg/LC_MESSAGES/django.po | 24 +- .../redirects/locale/ca/LC_MESSAGES/django.mo | Bin 3206 -> 3048 bytes .../redirects/locale/ca/LC_MESSAGES/django.po | 23 +- .../redirects/locale/cs/LC_MESSAGES/django.mo | Bin 901 -> 3536 bytes .../redirects/locale/cs/LC_MESSAGES/django.po | 130 +- .../redirects/locale/de/LC_MESSAGES/django.mo | Bin 3386 -> 3411 bytes .../redirects/locale/de/LC_MESSAGES/django.po | 23 +- .../redirects/locale/el/LC_MESSAGES/django.mo | Bin 4152 -> 3944 bytes .../redirects/locale/el/LC_MESSAGES/django.po | 25 +- .../redirects/locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../redirects/locale/en/LC_MESSAGES/django.po | 31 +- .../redirects/locale/es/LC_MESSAGES/django.mo | Bin 3272 -> 3340 bytes .../redirects/locale/es/LC_MESSAGES/django.po | 18 +- .../redirects/locale/fa/LC_MESSAGES/django.mo | Bin 3590 -> 3443 bytes .../redirects/locale/fa/LC_MESSAGES/django.po | 22 +- .../redirects/locale/fi/LC_MESSAGES/django.mo | Bin 3295 -> 3138 bytes .../redirects/locale/fi/LC_MESSAGES/django.po | 25 +- .../redirects/locale/fr/LC_MESSAGES/django.mo | Bin 3331 -> 3372 bytes .../redirects/locale/fr/LC_MESSAGES/django.po | 23 +- .../redirects/locale/gl/LC_MESSAGES/django.mo | Bin 3224 -> 2995 bytes .../redirects/locale/gl/LC_MESSAGES/django.po | 25 +- .../locale/he_IL/LC_MESSAGES/django.mo | Bin 1776 -> 1870 bytes .../locale/he_IL/LC_MESSAGES/django.po | 10 +- .../redirects/locale/hu/LC_MESSAGES/django.mo | Bin 797 -> 3388 bytes .../redirects/locale/hu/LC_MESSAGES/django.po | 124 +- .../locale/id_ID/LC_MESSAGES/django.mo | Bin 663 -> 3046 bytes .../locale/id_ID/LC_MESSAGES/django.po | 111 +- .../locale/is_IS/LC_MESSAGES/django.mo | Bin 3315 -> 3326 bytes .../locale/is_IS/LC_MESSAGES/django.po | 24 +- .../redirects/locale/it/LC_MESSAGES/django.mo | Bin 3191 -> 3267 bytes .../redirects/locale/it/LC_MESSAGES/django.po | 18 +- .../redirects/locale/ja/LC_MESSAGES/django.mo | Bin 3419 -> 3522 bytes .../redirects/locale/ja/LC_MESSAGES/django.po | 20 +- .../redirects/locale/ka/LC_MESSAGES/django.mo | Bin 704 -> 709 bytes .../redirects/locale/ka/LC_MESSAGES/django.po | 6 +- .../redirects/locale/ko/LC_MESSAGES/django.mo | Bin 3423 -> 3505 bytes .../redirects/locale/ko/LC_MESSAGES/django.po | 18 +- .../redirects/locale/lt/LC_MESSAGES/django.mo | Bin 3362 -> 3244 bytes .../redirects/locale/lt/LC_MESSAGES/django.po | 33 +- .../redirects/locale/lv/LC_MESSAGES/django.mo | Bin 1619 -> 1619 bytes .../redirects/locale/lv/LC_MESSAGES/django.po | 7 +- .../redirects/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 3430 bytes .../redirects/locale/mn/LC_MESSAGES/django.po | 149 + .../redirects/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1799 bytes .../redirects/locale/my/LC_MESSAGES/django.po | 65 + .../redirects/locale/nb/LC_MESSAGES/django.mo | Bin 3220 -> 3119 bytes .../redirects/locale/nb/LC_MESSAGES/django.po | 30 +- .../redirects/locale/nl/LC_MESSAGES/django.mo | Bin 3274 -> 3037 bytes .../redirects/locale/nl/LC_MESSAGES/django.po | 25 +- .../locale/nl_NL/LC_MESSAGES/django.mo | Bin 3225 -> 3303 bytes .../locale/nl_NL/LC_MESSAGES/django.po | 21 +- .../redirects/locale/pl/LC_MESSAGES/django.mo | Bin 3508 -> 3543 bytes .../redirects/locale/pl/LC_MESSAGES/django.po | 23 +- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 3314 -> 3330 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 14 +- .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 3292 -> 3113 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 24 +- .../redirects/locale/ro/LC_MESSAGES/django.mo | Bin 3365 -> 3480 bytes .../redirects/locale/ro/LC_MESSAGES/django.po | 25 +- .../redirects/locale/ru/LC_MESSAGES/django.mo | Bin 4274 -> 3975 bytes .../redirects/locale/ru/LC_MESSAGES/django.po | 33 +- .../locale/sk_SK/LC_MESSAGES/django.mo | Bin 3370 -> 3195 bytes .../locale/sk_SK/LC_MESSAGES/django.po | 32 +- .../redirects/locale/sl/LC_MESSAGES/django.mo | Bin 3324 -> 2995 bytes .../redirects/locale/sl/LC_MESSAGES/django.po | 33 +- .../redirects/locale/sv/LC_MESSAGES/django.mo | Bin 3222 -> 3301 bytes .../redirects/locale/sv/LC_MESSAGES/django.po | 19 +- .../locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 3007 bytes .../locale/tet/LC_MESSAGES/django.po | 140 + .../redirects/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 4975 bytes .../redirects/locale/th/LC_MESSAGES/django.po | 154 + .../redirects/locale/tr/LC_MESSAGES/django.mo | Bin 963 -> 965 bytes .../redirects/locale/tr/LC_MESSAGES/django.po | 6 +- .../redirects/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 4130 bytes .../redirects/locale/uk/LC_MESSAGES/django.po | 145 + .../redirects/locale/zh/LC_MESSAGES/django.mo | Bin 1964 -> 1964 bytes .../redirects/locale/zh/LC_MESSAGES/django.po | 6 +- .../{zh_CN => zh_Hans}/LC_MESSAGES/django.mo | Bin 3000 -> 3050 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 19 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 2894 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 137 + wagtail/contrib/redirects/middleware.py | 6 + .../0006_redirect_increase_max_length.py | 18 + wagtail/contrib/redirects/models.py | 6 +- .../templates/wagtailredirects/add.html | 6 + .../templates/wagtailredirects/edit.html | 6 + .../templates/wagtailredirects/list.html | 2 +- .../templates/wagtailredirects/results.html | 6 +- wagtail/contrib/redirects/tests.py | 51 + wagtail/contrib/redirects/views.py | 14 +- wagtail/contrib/routable_page/apps.py | 3 +- wagtail/contrib/routable_page/models.py | 14 +- .../templatetags/wagtailroutablepage_tags.py | 4 +- wagtail/contrib/routable_page/tests.py | 130 +- wagtail/contrib/search_promotions/apps.py | 3 +- wagtail/contrib/search_promotions/forms.py | 4 +- .../locale/ar/LC_MESSAGES/django.mo | Bin 2405 -> 4953 bytes .../locale/ar/LC_MESSAGES/django.po | 79 +- .../locale/be/LC_MESSAGES/django.mo | Bin 0 -> 3868 bytes .../locale/be/LC_MESSAGES/django.po | 136 + .../locale/bg/LC_MESSAGES/django.mo | Bin 1487 -> 1241 bytes .../locale/bg/LC_MESSAGES/django.po | 22 +- .../locale/ca/LC_MESSAGES/django.mo | Bin 4541 -> 4372 bytes .../locale/ca/LC_MESSAGES/django.po | 22 +- .../locale/cs/LC_MESSAGES/django.mo | Bin 639 -> 4878 bytes .../locale/cs/LC_MESSAGES/django.po | 165 +- .../locale/de/LC_MESSAGES/django.mo | Bin 4692 -> 4745 bytes .../locale/de/LC_MESSAGES/django.po | 22 +- .../locale/el/LC_MESSAGES/django.mo | Bin 5732 -> 5524 bytes .../locale/el/LC_MESSAGES/django.po | 24 +- .../locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../locale/en/LC_MESSAGES/django.po | 24 +- .../locale/es/LC_MESSAGES/django.mo | Bin 4645 -> 4732 bytes .../locale/es/LC_MESSAGES/django.po | 17 +- .../locale/fa/LC_MESSAGES/django.mo | Bin 5180 -> 5019 bytes .../locale/fa/LC_MESSAGES/django.po | 21 +- .../locale/fi/LC_MESSAGES/django.mo | Bin 4331 -> 4174 bytes .../locale/fi/LC_MESSAGES/django.po | 24 +- .../locale/fr/LC_MESSAGES/django.mo | Bin 4766 -> 4844 bytes .../locale/fr/LC_MESSAGES/django.po | 20 +- .../locale/gl/LC_MESSAGES/django.mo | Bin 4633 -> 4428 bytes .../locale/gl/LC_MESSAGES/django.po | 24 +- .../locale/he_IL/LC_MESSAGES/django.mo | Bin 2235 -> 2329 bytes .../locale/he_IL/LC_MESSAGES/django.po | 9 +- .../locale/hu/LC_MESSAGES/django.mo | Bin 777 -> 4543 bytes .../locale/hu/LC_MESSAGES/django.po | 150 +- .../locale/id_ID/LC_MESSAGES/django.mo | Bin 621 -> 4354 bytes .../locale/id_ID/LC_MESSAGES/django.po | 140 +- .../locale/is_IS/LC_MESSAGES/django.mo | Bin 4302 -> 4323 bytes .../locale/is_IS/LC_MESSAGES/django.po | 21 +- .../locale/it/LC_MESSAGES/django.mo | Bin 4634 -> 4728 bytes .../locale/it/LC_MESSAGES/django.po | 17 +- .../locale/ja/LC_MESSAGES/django.mo | Bin 4527 -> 4635 bytes .../locale/ja/LC_MESSAGES/django.po | 17 +- .../locale/ka/LC_MESSAGES/django.mo | Bin 693 -> 698 bytes .../locale/ka/LC_MESSAGES/django.po | 6 +- .../locale/ko/LC_MESSAGES/django.mo | Bin 4651 -> 4745 bytes .../locale/ko/LC_MESSAGES/django.po | 17 +- .../locale/lt/LC_MESSAGES/django.mo | Bin 4679 -> 4561 bytes .../locale/lt/LC_MESSAGES/django.po | 32 +- .../locale/lv/LC_MESSAGES/django.mo | Bin 1520 -> 1519 bytes .../locale/lv/LC_MESSAGES/django.po | 6 +- .../locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 1645 bytes .../locale/mn/LC_MESSAGES/django.po | 88 + .../locale/nb/LC_MESSAGES/django.mo | Bin 4328 -> 4238 bytes .../locale/nb/LC_MESSAGES/django.po | 29 +- .../locale/nl/LC_MESSAGES/django.mo | Bin 4234 -> 4021 bytes .../locale/nl/LC_MESSAGES/django.po | 22 +- .../locale/nl_NL/LC_MESSAGES/django.mo | Bin 4554 -> 4644 bytes .../locale/nl_NL/LC_MESSAGES/django.po | 20 +- .../locale/pl/LC_MESSAGES/django.mo | Bin 4791 -> 4844 bytes .../locale/pl/LC_MESSAGES/django.po | 24 +- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 4538 -> 4554 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 14 +- .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 4590 -> 4402 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 24 +- .../locale/ro/LC_MESSAGES/django.mo | Bin 4666 -> 4726 bytes .../locale/ro/LC_MESSAGES/django.po | 17 +- .../locale/ru/LC_MESSAGES/django.mo | Bin 6124 -> 5825 bytes .../locale/ru/LC_MESSAGES/django.po | 32 +- .../locale/sk_SK/LC_MESSAGES/django.mo | Bin 4743 -> 4588 bytes .../locale/sk_SK/LC_MESSAGES/django.po | 28 +- .../locale/sl/LC_MESSAGES/django.mo | Bin 4667 -> 4356 bytes .../locale/sl/LC_MESSAGES/django.po | 34 +- .../locale/sv/LC_MESSAGES/django.mo | Bin 4439 -> 4526 bytes .../locale/sv/LC_MESSAGES/django.po | 18 +- .../locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 2870 bytes .../locale/tet/LC_MESSAGES/django.po | 125 + .../locale/th/LC_MESSAGES/django.mo | Bin 0 -> 6457 bytes .../locale/th/LC_MESSAGES/django.po | 177 + .../locale/tr/LC_MESSAGES/django.mo | Bin 925 -> 927 bytes .../locale/tr/LC_MESSAGES/django.po | 6 +- .../locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 4123 bytes .../locale/uk/LC_MESSAGES/django.po | 138 + .../locale/zh/LC_MESSAGES/django.mo | Bin 1307 -> 1307 bytes .../locale/zh/LC_MESSAGES/django.po | 6 +- .../{zh_CN => zh_Hans}/LC_MESSAGES/django.mo | Bin 4167 -> 4227 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 15 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 4071 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 161 + .../wagtailsearchpromotions/add.html | 5 +- .../wagtailsearchpromotions/edit.html | 5 +- .../wagtailsearchpromotions/list.html | 2 +- .../wagtailsearchpromotions/results.html | 4 +- wagtail/contrib/search_promotions/views.py | 11 +- .../search_promotions/wagtail_hooks.py | 6 +- wagtail/contrib/settings/forms.py | 10 +- .../settings/locale/af/LC_MESSAGES/django.mo | Bin 507 -> 507 bytes .../settings/locale/af/LC_MESSAGES/django.po | 4 +- .../settings/locale/ar/LC_MESSAGES/django.mo | Bin 1056 -> 1149 bytes .../settings/locale/ar/LC_MESSAGES/django.po | 14 +- .../settings/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 1265 bytes .../settings/locale/be/LC_MESSAGES/django.po | 44 + .../settings/locale/ca/LC_MESSAGES/django.mo | Bin 940 -> 1045 bytes .../settings/locale/ca/LC_MESSAGES/django.po | 13 +- .../settings/locale/cs/LC_MESSAGES/django.mo | Bin 966 -> 1117 bytes .../settings/locale/cs/LC_MESSAGES/django.po | 18 +- .../settings/locale/cy/LC_MESSAGES/django.mo | Bin 955 -> 882 bytes .../settings/locale/cy/LC_MESSAGES/django.po | 8 +- .../settings/locale/da/LC_MESSAGES/django.mo | Bin 577 -> 1017 bytes .../settings/locale/da/LC_MESSAGES/django.po | 19 +- .../settings/locale/de/LC_MESSAGES/django.mo | Bin 952 -> 1110 bytes .../settings/locale/de/LC_MESSAGES/django.po | 20 +- .../settings/locale/el/LC_MESSAGES/django.mo | Bin 1065 -> 959 bytes .../settings/locale/el/LC_MESSAGES/django.po | 12 +- .../settings/locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../settings/locale/en/LC_MESSAGES/django.po | 14 +- .../settings/locale/es/LC_MESSAGES/django.mo | Bin 930 -> 1025 bytes .../settings/locale/es/LC_MESSAGES/django.po | 12 +- .../settings/locale/fa/LC_MESSAGES/django.mo | Bin 1023 -> 956 bytes .../settings/locale/fa/LC_MESSAGES/django.po | 10 +- .../settings/locale/fi/LC_MESSAGES/django.mo | Bin 927 -> 859 bytes .../settings/locale/fi/LC_MESSAGES/django.po | 8 +- .../settings/locale/fr/LC_MESSAGES/django.mo | Bin 956 -> 1038 bytes .../settings/locale/fr/LC_MESSAGES/django.po | 11 +- .../settings/locale/gl/LC_MESSAGES/django.mo | Bin 933 -> 865 bytes .../settings/locale/gl/LC_MESSAGES/django.po | 8 +- .../locale/he_IL/LC_MESSAGES/django.mo | Bin 924 -> 1156 bytes .../locale/he_IL/LC_MESSAGES/django.po | 16 +- .../locale/hr_HR/LC_MESSAGES/django.mo | Bin 0 -> 706 bytes .../locale/hr_HR/LC_MESSAGES/django.po | 33 + .../settings/locale/hu/LC_MESSAGES/django.mo | Bin 764 -> 1096 bytes .../settings/locale/hu/LC_MESSAGES/django.po | 20 +- .../locale/id_ID/LC_MESSAGES/django.mo | Bin 940 -> 1027 bytes .../locale/id_ID/LC_MESSAGES/django.po | 11 +- .../locale/is_IS/LC_MESSAGES/django.mo | Bin 964 -> 1073 bytes .../locale/is_IS/LC_MESSAGES/django.po | 13 +- .../settings/locale/it/LC_MESSAGES/django.mo | Bin 944 -> 1043 bytes .../settings/locale/it/LC_MESSAGES/django.po | 12 +- .../settings/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 1037 bytes .../settings/locale/ja/LC_MESSAGES/django.po | 44 + .../settings/locale/ko/LC_MESSAGES/django.mo | Bin 934 -> 1007 bytes .../settings/locale/ko/LC_MESSAGES/django.po | 11 +- .../settings/locale/lt/LC_MESSAGES/django.mo | Bin 1004 -> 1004 bytes .../settings/locale/lt/LC_MESSAGES/django.po | 13 +- .../settings/locale/lv/LC_MESSAGES/django.mo | Bin 930 -> 905 bytes .../settings/locale/lv/LC_MESSAGES/django.po | 15 +- .../settings/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 992 bytes .../settings/locale/mn/LC_MESSAGES/django.po | 39 + .../settings/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1345 bytes .../settings/locale/my/LC_MESSAGES/django.po | 42 + .../settings/locale/nb/LC_MESSAGES/django.mo | Bin 930 -> 1020 bytes .../settings/locale/nb/LC_MESSAGES/django.po | 12 +- .../settings/locale/nl/LC_MESSAGES/django.mo | Bin 949 -> 883 bytes .../settings/locale/nl/LC_MESSAGES/django.po | 8 +- .../locale/nl_NL/LC_MESSAGES/django.mo | Bin 962 -> 1133 bytes .../locale/nl_NL/LC_MESSAGES/django.po | 18 +- .../settings/locale/pl/LC_MESSAGES/django.mo | Bin 1086 -> 1252 bytes .../settings/locale/pl/LC_MESSAGES/django.po | 18 +- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 949 -> 1116 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 17 +- .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 952 -> 886 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 8 +- .../settings/locale/ro/LC_MESSAGES/django.mo | Bin 987 -> 1061 bytes .../settings/locale/ro/LC_MESSAGES/django.po | 11 +- .../settings/locale/ru/LC_MESSAGES/django.mo | Bin 1176 -> 1293 bytes .../settings/locale/ru/LC_MESSAGES/django.po | 14 +- .../locale/sk_SK/LC_MESSAGES/django.mo | Bin 930 -> 907 bytes .../locale/sk_SK/LC_MESSAGES/django.po | 11 +- .../settings/locale/sl/LC_MESSAGES/django.mo | Bin 941 -> 1060 bytes .../settings/locale/sl/LC_MESSAGES/django.po | 15 +- .../settings/locale/sv/LC_MESSAGES/django.mo | Bin 940 -> 1040 bytes .../settings/locale/sv/LC_MESSAGES/django.po | 14 +- .../settings/locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 1016 bytes .../settings/locale/tet/LC_MESSAGES/django.po | 44 + .../settings/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 1268 bytes .../settings/locale/th/LC_MESSAGES/django.po | 44 + .../settings/locale/tr/LC_MESSAGES/django.mo | Bin 922 -> 997 bytes .../settings/locale/tr/LC_MESSAGES/django.po | 10 +- .../settings/locale/uk/LC_MESSAGES/django.mo | Bin 847 -> 1381 bytes .../settings/locale/uk/LC_MESSAGES/django.po | 22 +- .../settings/locale/zh/LC_MESSAGES/django.mo | Bin 724 -> 724 bytes .../settings/locale/zh/LC_MESSAGES/django.po | 4 +- .../locale/zh_CN/LC_MESSAGES/django.mo | Bin 923 -> 0 bytes .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 1059 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 18 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 981 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 41 + wagtail/contrib/settings/models.py | 4 +- .../templates/wagtailsettings/edit.html | 9 +- wagtail/contrib/settings/tests/test_admin.py | 21 +- wagtail/contrib/settings/views.py | 30 +- wagtail/contrib/sitemaps/apps.py | 3 +- wagtail/contrib/sitemaps/sitemap_generator.py | 22 +- wagtail/contrib/sitemaps/tests.py | 63 +- wagtail/contrib/sitemaps/views.py | 7 +- wagtail/contrib/styleguide/apps.py | 3 +- .../locale/ar/LC_MESSAGES/django.mo | Bin 1029 -> 1092 bytes .../locale/ar/LC_MESSAGES/django.po | 12 +- .../locale/be/LC_MESSAGES/django.mo | Bin 0 -> 1322 bytes .../locale/be/LC_MESSAGES/django.po | 52 + .../locale/ca/LC_MESSAGES/django.mo | Bin 891 -> 895 bytes .../locale/ca/LC_MESSAGES/django.po | 6 +- .../locale/cs/LC_MESSAGES/django.mo | Bin 762 -> 1048 bytes .../locale/cs/LC_MESSAGES/django.po | 22 +- .../locale/de/LC_MESSAGES/django.mo | Bin 891 -> 967 bytes .../locale/de/LC_MESSAGES/django.po | 10 +- .../locale/el/LC_MESSAGES/django.mo | Bin 1029 -> 1029 bytes .../locale/el/LC_MESSAGES/django.po | 8 +- .../locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../locale/en/LC_MESSAGES/django.po | 10 +- .../locale/es/LC_MESSAGES/django.mo | Bin 886 -> 962 bytes .../locale/es/LC_MESSAGES/django.po | 9 +- .../locale/fa/LC_MESSAGES/django.mo | Bin 931 -> 942 bytes .../locale/fa/LC_MESSAGES/django.po | 8 +- .../locale/fi/LC_MESSAGES/django.mo | Bin 850 -> 873 bytes .../locale/fi/LC_MESSAGES/django.po | 6 +- .../locale/fr/LC_MESSAGES/django.mo | Bin 913 -> 1015 bytes .../locale/fr/LC_MESSAGES/django.po | 12 +- .../locale/gl/LC_MESSAGES/django.mo | Bin 884 -> 888 bytes .../locale/gl/LC_MESSAGES/django.po | 6 +- .../locale/hu/LC_MESSAGES/django.mo | Bin 871 -> 935 bytes .../locale/hu/LC_MESSAGES/django.po | 10 +- .../locale/id_ID/LC_MESSAGES/django.mo | Bin 535 -> 971 bytes .../locale/id_ID/LC_MESSAGES/django.po | 31 +- .../locale/is_IS/LC_MESSAGES/django.mo | Bin 926 -> 985 bytes .../locale/is_IS/LC_MESSAGES/django.po | 10 +- .../locale/it/LC_MESSAGES/django.mo | Bin 898 -> 970 bytes .../locale/it/LC_MESSAGES/django.po | 10 +- .../locale/ja/LC_MESSAGES/django.mo | Bin 894 -> 957 bytes .../locale/ja/LC_MESSAGES/django.po | 10 +- .../locale/ka/LC_MESSAGES/django.mo | Bin 566 -> 575 bytes .../locale/ka/LC_MESSAGES/django.po | 8 +- .../locale/ko/LC_MESSAGES/django.mo | Bin 874 -> 959 bytes .../locale/ko/LC_MESSAGES/django.po | 9 +- .../locale/lt/LC_MESSAGES/django.mo | Bin 980 -> 1051 bytes .../locale/lt/LC_MESSAGES/django.po | 11 +- .../locale/lv/LC_MESSAGES/django.mo | Bin 772 -> 771 bytes .../locale/lv/LC_MESSAGES/django.po | 6 +- .../locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 1110 bytes .../locale/mn/LC_MESSAGES/django.po | 50 + .../locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1270 bytes .../locale/my/LC_MESSAGES/django.po | 50 + .../locale/nb/LC_MESSAGES/django.mo | Bin 878 -> 959 bytes .../locale/nb/LC_MESSAGES/django.po | 10 +- .../locale/nl/LC_MESSAGES/django.mo | Bin 866 -> 866 bytes .../locale/nl/LC_MESSAGES/django.po | 6 +- .../locale/nl_NL/LC_MESSAGES/django.mo | Bin 886 -> 961 bytes .../locale/nl_NL/LC_MESSAGES/django.po | 11 +- .../locale/pl/LC_MESSAGES/django.mo | Bin 1015 -> 1087 bytes .../locale/pl/LC_MESSAGES/django.po | 8 +- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 903 -> 904 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 6 +- .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 906 -> 910 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 6 +- .../locale/ro/LC_MESSAGES/django.mo | Bin 908 -> 983 bytes .../locale/ro/LC_MESSAGES/django.po | 9 +- .../locale/ru/LC_MESSAGES/django.mo | Bin 1190 -> 1294 bytes .../locale/ru/LC_MESSAGES/django.po | 14 +- .../locale/sk_SK/LC_MESSAGES/django.mo | Bin 947 -> 995 bytes .../locale/sk_SK/LC_MESSAGES/django.po | 7 +- .../locale/sl/LC_MESSAGES/django.mo | Bin 976 -> 976 bytes .../locale/sl/LC_MESSAGES/django.po | 6 +- .../locale/sv/LC_MESSAGES/django.mo | Bin 883 -> 953 bytes .../locale/sv/LC_MESSAGES/django.po | 10 +- .../locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 942 bytes .../locale/tet/LC_MESSAGES/django.po | 50 + .../locale/th/LC_MESSAGES/django.mo | Bin 0 -> 1141 bytes .../locale/th/LC_MESSAGES/django.po | 50 + .../locale/tr/LC_MESSAGES/django.mo | Bin 888 -> 882 bytes .../locale/tr/LC_MESSAGES/django.po | 6 +- .../locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 1417 bytes .../locale/uk/LC_MESSAGES/django.po | 53 + .../locale/zh/LC_MESSAGES/django.mo | Bin 488 -> 499 bytes .../locale/zh/LC_MESSAGES/django.po | 6 +- .../locale/zh_CN/LC_MESSAGES/django.mo | Bin 857 -> 0 bytes .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 925 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 10 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 942 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 49 + .../wagtailstyleguide/scss/styleguide.scss | 117 +- .../templates/wagtailstyleguide/base.html | 483 +- wagtail/contrib/styleguide/views.py | 2 +- wagtail/contrib/table_block/apps.py | 3 +- wagtail/contrib/table_block/blocks.py | 44 +- .../locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 926 bytes .../locale/ar/LC_MESSAGES/django.po | 36 + .../locale/be/LC_MESSAGES/django.mo | Bin 0 -> 1107 bytes .../locale/be/LC_MESSAGES/django.po | 37 + .../locale/ca/LC_MESSAGES/django.mo | Bin 772 -> 776 bytes .../locale/ca/LC_MESSAGES/django.po | 6 +- .../locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 918 bytes .../locale/cs/LC_MESSAGES/django.po | 36 + .../locale/de/LC_MESSAGES/django.mo | Bin 797 -> 1105 bytes .../locale/de/LC_MESSAGES/django.po | 21 +- .../locale/el/LC_MESSAGES/django.mo | Bin 876 -> 876 bytes .../locale/el/LC_MESSAGES/django.po | 8 +- .../locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../locale/en/LC_MESSAGES/django.po | 24 +- .../locale/es/LC_MESSAGES/django.mo | Bin 762 -> 839 bytes .../locale/es/LC_MESSAGES/django.po | 11 +- .../locale/fa/LC_MESSAGES/django.mo | Bin 770 -> 781 bytes .../locale/fa/LC_MESSAGES/django.po | 8 +- .../locale/fi/LC_MESSAGES/django.mo | Bin 729 -> 752 bytes .../locale/fi/LC_MESSAGES/django.po | 6 +- .../locale/fr/LC_MESSAGES/django.mo | Bin 765 -> 863 bytes .../locale/fr/LC_MESSAGES/django.po | 10 +- .../locale/gl/LC_MESSAGES/django.mo | Bin 776 -> 780 bytes .../locale/gl/LC_MESSAGES/django.po | 6 +- .../locale/hu/LC_MESSAGES/django.mo | Bin 789 -> 1127 bytes .../locale/hu/LC_MESSAGES/django.po | 20 +- .../locale/id_ID/LC_MESSAGES/django.mo | Bin 0 -> 843 bytes .../locale/id_ID/LC_MESSAGES/django.po | 35 + .../locale/is_IS/LC_MESSAGES/django.mo | Bin 800 -> 863 bytes .../locale/is_IS/LC_MESSAGES/django.po | 10 +- .../locale/it/LC_MESSAGES/django.mo | Bin 788 -> 862 bytes .../locale/it/LC_MESSAGES/django.po | 10 +- .../locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 863 bytes .../locale/ja/LC_MESSAGES/django.po | 35 + .../locale/ko/LC_MESSAGES/django.mo | Bin 748 -> 834 bytes .../locale/ko/LC_MESSAGES/django.po | 11 +- .../locale/lt/LC_MESSAGES/django.mo | Bin 842 -> 913 bytes .../locale/lt/LC_MESSAGES/django.po | 11 +- .../locale/lv/LC_MESSAGES/django.mo | Bin 556 -> 555 bytes .../locale/lv/LC_MESSAGES/django.po | 6 +- .../locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 928 bytes .../locale/mn/LC_MESSAGES/django.po | 35 + .../locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1032 bytes .../locale/my/LC_MESSAGES/django.po | 35 + .../locale/nb/LC_MESSAGES/django.mo | Bin 766 -> 829 bytes .../locale/nb/LC_MESSAGES/django.po | 11 +- .../locale/nl_NL/LC_MESSAGES/django.mo | Bin 774 -> 1103 bytes .../locale/nl_NL/LC_MESSAGES/django.po | 21 +- .../locale/pl/LC_MESSAGES/django.mo | Bin 903 -> 1231 bytes .../locale/pl/LC_MESSAGES/django.po | 18 +- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 796 -> 860 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 9 +- .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 792 -> 790 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 6 +- .../locale/ro/LC_MESSAGES/django.mo | Bin 763 -> 859 bytes .../locale/ro/LC_MESSAGES/django.po | 11 +- .../locale/ru/LC_MESSAGES/django.mo | Bin 997 -> 1094 bytes .../locale/ru/LC_MESSAGES/django.po | 10 +- .../locale/sk_SK/LC_MESSAGES/django.mo | Bin 798 -> 851 bytes .../locale/sk_SK/LC_MESSAGES/django.po | 9 +- .../locale/sv/LC_MESSAGES/django.mo | Bin 736 -> 810 bytes .../locale/sv/LC_MESSAGES/django.po | 10 +- .../locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 817 bytes .../locale/tet/LC_MESSAGES/django.po | 35 + .../locale/th/LC_MESSAGES/django.mo | Bin 0 -> 1043 bytes .../locale/th/LC_MESSAGES/django.po | 35 + .../locale/tr/LC_MESSAGES/django.mo | Bin 521 -> 523 bytes .../locale/tr/LC_MESSAGES/django.po | 6 +- .../locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 1170 bytes .../locale/uk/LC_MESSAGES/django.po | 38 + .../locale/zh_CN/LC_MESSAGES/django.mo | Bin 726 -> 0 bytes .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 1034 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 19 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 812 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 34 + .../vendor/handsontable-0.24.2.full.min.css | 31 - .../vendor/handsontable-6.2.2.full.min.css | 37 + .../static/table_block/js/table.js | 54 +- .../js/vendor/handsontable-0.24.2.full.min.js | 82 - .../js/vendor/handsontable-6.2.2.full.min.js | 41 + .../templates/table_block/blocks/table.html | 19 +- .../templates/table_block/widgets/table.html | 24 +- .../table_block/templatetags/__init__.py | 0 .../templatetags/table_block_tags.py | 17 + wagtail/contrib/table_block/tests.py | 181 +- wagtail/core/apps.py | 3 +- wagtail/core/blocks/base.py | 46 +- wagtail/core/blocks/field_block.py | 126 +- wagtail/core/blocks/list_block.py | 8 +- wagtail/core/blocks/static_block.py | 2 +- wagtail/core/blocks/stream_block.py | 80 +- wagtail/core/blocks/struct_block.py | 7 +- wagtail/core/blocks/utils.py | 2 +- wagtail/core/fields.py | 4 +- wagtail/core/locale/ar/LC_MESSAGES/django.mo | Bin 2590 -> 8493 bytes wagtail/core/locale/ar/LC_MESSAGES/django.po | 194 +- wagtail/core/locale/bg/LC_MESSAGES/django.mo | Bin 2300 -> 2300 bytes wagtail/core/locale/bg/LC_MESSAGES/django.po | 4 +- wagtail/core/locale/ca/LC_MESSAGES/django.mo | Bin 6668 -> 6579 bytes wagtail/core/locale/ca/LC_MESSAGES/django.po | 8 +- wagtail/core/locale/cs/LC_MESSAGES/django.mo | Bin 2099 -> 7496 bytes wagtail/core/locale/cs/LC_MESSAGES/django.po | 267 +- wagtail/core/locale/de/LC_MESSAGES/django.mo | Bin 7451 -> 7552 bytes wagtail/core/locale/de/LC_MESSAGES/django.po | 27 +- wagtail/core/locale/el/LC_MESSAGES/django.mo | Bin 8760 -> 8645 bytes wagtail/core/locale/el/LC_MESSAGES/django.po | 8 +- wagtail/core/locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes wagtail/core/locale/en/LC_MESSAGES/django.po | 176 +- wagtail/core/locale/es/LC_MESSAGES/django.mo | Bin 7483 -> 7516 bytes wagtail/core/locale/es/LC_MESSAGES/django.po | 16 +- wagtail/core/locale/fa/LC_MESSAGES/django.mo | Bin 8244 -> 8138 bytes wagtail/core/locale/fa/LC_MESSAGES/django.po | 10 +- wagtail/core/locale/fi/LC_MESSAGES/django.mo | Bin 4991 -> 4991 bytes wagtail/core/locale/fi/LC_MESSAGES/django.po | 4 +- wagtail/core/locale/fr/LC_MESSAGES/django.mo | Bin 7498 -> 7543 bytes wagtail/core/locale/fr/LC_MESSAGES/django.po | 19 +- wagtail/core/locale/gl/LC_MESSAGES/django.mo | Bin 5153 -> 5153 bytes wagtail/core/locale/gl/LC_MESSAGES/django.po | 4 +- .../core/locale/he_IL/LC_MESSAGES/django.mo | Bin 1373 -> 1467 bytes .../core/locale/he_IL/LC_MESSAGES/django.po | 7 +- wagtail/core/locale/hu/LC_MESSAGES/django.mo | Bin 4896 -> 7756 bytes wagtail/core/locale/hu/LC_MESSAGES/django.po | 152 +- .../core/locale/id_ID/LC_MESSAGES/django.mo | Bin 7243 -> 7217 bytes .../core/locale/id_ID/LC_MESSAGES/django.po | 25 +- .../core/locale/is_IS/LC_MESSAGES/django.mo | Bin 6695 -> 7411 bytes .../core/locale/is_IS/LC_MESSAGES/django.po | 47 +- wagtail/core/locale/it/LC_MESSAGES/django.mo | Bin 6956 -> 7190 bytes wagtail/core/locale/it/LC_MESSAGES/django.po | 29 +- wagtail/core/locale/ja/LC_MESSAGES/django.mo | Bin 4851 -> 7919 bytes wagtail/core/locale/ja/LC_MESSAGES/django.po | 124 +- wagtail/core/locale/ka/LC_MESSAGES/django.mo | Bin 648 -> 653 bytes wagtail/core/locale/ka/LC_MESSAGES/django.po | 6 +- wagtail/core/locale/ko/LC_MESSAGES/django.mo | Bin 7565 -> 7633 bytes wagtail/core/locale/ko/LC_MESSAGES/django.po | 17 +- wagtail/core/locale/lt/LC_MESSAGES/django.mo | Bin 7670 -> 7697 bytes wagtail/core/locale/lt/LC_MESSAGES/django.po | 18 +- wagtail/core/locale/lv/LC_MESSAGES/django.mo | Bin 1279 -> 1279 bytes wagtail/core/locale/lv/LC_MESSAGES/django.po | 4 +- wagtail/core/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 7312 bytes wagtail/core/locale/mn/LC_MESSAGES/django.po | 284 + wagtail/core/locale/nb/LC_MESSAGES/django.mo | Bin 7167 -> 7104 bytes wagtail/core/locale/nb/LC_MESSAGES/django.po | 11 +- wagtail/core/locale/nl/LC_MESSAGES/django.mo | Bin 4208 -> 4208 bytes wagtail/core/locale/nl/LC_MESSAGES/django.po | 4 +- .../core/locale/nl_NL/LC_MESSAGES/django.mo | Bin 7323 -> 7452 bytes .../core/locale/nl_NL/LC_MESSAGES/django.po | 20 +- wagtail/core/locale/pl/LC_MESSAGES/django.mo | Bin 7496 -> 7619 bytes wagtail/core/locale/pl/LC_MESSAGES/django.po | 32 +- .../core/locale/pt_BR/LC_MESSAGES/django.mo | Bin 7419 -> 7453 bytes .../core/locale/pt_BR/LC_MESSAGES/django.po | 14 +- .../core/locale/pt_PT/LC_MESSAGES/django.mo | Bin 6740 -> 6649 bytes .../core/locale/pt_PT/LC_MESSAGES/django.po | 8 +- wagtail/core/locale/ro/LC_MESSAGES/django.mo | Bin 7370 -> 7413 bytes wagtail/core/locale/ro/LC_MESSAGES/django.po | 16 +- wagtail/core/locale/ru/LC_MESSAGES/django.mo | Bin 9640 -> 9771 bytes wagtail/core/locale/ru/LC_MESSAGES/django.po | 19 +- .../core/locale/sk_SK/LC_MESSAGES/django.mo | Bin 7318 -> 7268 bytes .../core/locale/sk_SK/LC_MESSAGES/django.po | 11 +- wagtail/core/locale/sl/LC_MESSAGES/django.mo | Bin 3827 -> 3827 bytes wagtail/core/locale/sl/LC_MESSAGES/django.po | 4 +- wagtail/core/locale/sv/LC_MESSAGES/django.mo | Bin 7218 -> 7282 bytes wagtail/core/locale/sv/LC_MESSAGES/django.po | 16 +- wagtail/core/locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 2430 bytes wagtail/core/locale/tet/LC_MESSAGES/django.po | 109 + wagtail/core/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 11110 bytes wagtail/core/locale/th/LC_MESSAGES/django.po | 319 + wagtail/core/locale/tr/LC_MESSAGES/django.mo | Bin 3258 -> 3258 bytes wagtail/core/locale/tr/LC_MESSAGES/django.po | 4 +- wagtail/core/locale/uk/LC_MESSAGES/django.mo | Bin 2729 -> 9576 bytes wagtail/core/locale/uk/LC_MESSAGES/django.po | 286 +- wagtail/core/locale/zh/LC_MESSAGES/django.mo | Bin 1708 -> 1708 bytes wagtail/core/locale/zh/LC_MESSAGES/django.po | 4 +- .../core/locale/zh_CN/LC_MESSAGES/django.mo | Bin 6658 -> 0 bytes .../core/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 6831 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 31 +- .../core/locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 6726 bytes .../core/locale/zh_Hant/LC_MESSAGES/django.po | 316 + .../core/management/commands/replace_text.py | 4 +- wagtail/core/migrations/0030_page_archived.py | 2 +- ...lection_permissions_verbose_name_plural.py | 17 + .../migrations/0043_merge_20200415_1543.py | 14 + wagtail/core/models.py | 375 +- wagtail/core/permission_policies/base.py | 14 +- .../core/permission_policies/collections.py | 6 +- wagtail/core/query.py | 30 +- wagtail/core/rich_text/__init__.py | 45 +- wagtail/core/rich_text/feature_registry.py | 16 +- wagtail/core/rich_text/pages.py | 44 +- wagtail/core/rich_text/rewriters.py | 22 +- wagtail/core/templatetags/wagtailcore_tags.py | 69 +- wagtail/core/tests/test_blocks.py | 251 +- wagtail/core/tests/test_jinja2.py | 4 + wagtail/core/tests/test_page_model.py | 284 +- wagtail/core/tests/test_page_permissions.py | 127 +- wagtail/core/tests/test_page_queryset.py | 44 + wagtail/core/tests/test_rich_text.py | 105 +- wagtail/core/tests/test_sites.py | 37 +- wagtail/core/tests/test_streamfield.py | 21 +- wagtail/core/tests/tests.py | 91 +- wagtail/core/urls.py | 2 +- wagtail/core/utils.py | 4 +- wagtail/core/wagtail_hooks.py | 4 +- wagtail/core/whitelist.py | 2 +- wagtail/documents/apps.py | 3 +- wagtail/documents/forms.py | 8 +- .../documents/locale/ar/LC_MESSAGES/django.mo | Bin 2650 -> 6986 bytes .../documents/locale/ar/LC_MESSAGES/django.po | 174 +- .../documents/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 5000 bytes .../documents/locale/be/LC_MESSAGES/django.po | 205 + .../documents/locale/bg/LC_MESSAGES/django.mo | Bin 2726 -> 2517 bytes .../documents/locale/bg/LC_MESSAGES/django.po | 24 +- .../documents/locale/ca/LC_MESSAGES/django.mo | Bin 5383 -> 4663 bytes .../documents/locale/ca/LC_MESSAGES/django.po | 66 +- .../documents/locale/cs/LC_MESSAGES/django.mo | Bin 3526 -> 6440 bytes .../documents/locale/cs/LC_MESSAGES/django.po | 141 +- .../documents/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 1447 bytes .../documents/locale/da/LC_MESSAGES/django.po | 86 + .../documents/locale/de/LC_MESSAGES/django.mo | Bin 6040 -> 6922 bytes .../documents/locale/de/LC_MESSAGES/django.po | 79 +- .../documents/locale/el/LC_MESSAGES/django.mo | Bin 6753 -> 5854 bytes .../documents/locale/el/LC_MESSAGES/django.po | 63 +- .../documents/locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../documents/locale/en/LC_MESSAGES/django.po | 160 +- .../documents/locale/es/LC_MESSAGES/django.mo | Bin 5896 -> 6276 bytes .../documents/locale/es/LC_MESSAGES/django.po | 78 +- .../documents/locale/fa/LC_MESSAGES/django.mo | Bin 6093 -> 5423 bytes .../documents/locale/fa/LC_MESSAGES/django.po | 56 +- .../documents/locale/fi/LC_MESSAGES/django.mo | Bin 5502 -> 4760 bytes .../documents/locale/fi/LC_MESSAGES/django.po | 65 +- .../documents/locale/fr/LC_MESSAGES/django.mo | Bin 6030 -> 7002 bytes .../documents/locale/fr/LC_MESSAGES/django.po | 106 +- .../documents/locale/gl/LC_MESSAGES/django.mo | Bin 5433 -> 4631 bytes .../documents/locale/gl/LC_MESSAGES/django.po | 66 +- .../locale/he_IL/LC_MESSAGES/django.mo | Bin 2564 -> 2658 bytes .../locale/he_IL/LC_MESSAGES/django.po | 10 +- .../documents/locale/hu/LC_MESSAGES/django.mo | Bin 3278 -> 6893 bytes .../documents/locale/hu/LC_MESSAGES/django.po | 165 +- .../locale/id_ID/LC_MESSAGES/django.mo | Bin 2494 -> 5216 bytes .../locale/id_ID/LC_MESSAGES/django.po | 130 +- .../locale/is_IS/LC_MESSAGES/django.mo | Bin 5407 -> 6249 bytes .../locale/is_IS/LC_MESSAGES/django.po | 99 +- .../documents/locale/it/LC_MESSAGES/django.mo | Bin 5872 -> 6353 bytes .../documents/locale/it/LC_MESSAGES/django.po | 82 +- .../documents/locale/ja/LC_MESSAGES/django.mo | Bin 3928 -> 7355 bytes .../documents/locale/ja/LC_MESSAGES/django.po | 138 +- .../documents/locale/ka/LC_MESSAGES/django.mo | Bin 1388 -> 1393 bytes .../documents/locale/ka/LC_MESSAGES/django.po | 6 +- .../documents/locale/ko/LC_MESSAGES/django.mo | Bin 5625 -> 6288 bytes .../documents/locale/ko/LC_MESSAGES/django.po | 77 +- .../documents/locale/lt/LC_MESSAGES/django.mo | Bin 5722 -> 5372 bytes .../documents/locale/lt/LC_MESSAGES/django.po | 93 +- .../documents/locale/lv/LC_MESSAGES/django.mo | Bin 2386 -> 2386 bytes .../documents/locale/lv/LC_MESSAGES/django.po | 7 +- .../documents/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 5631 bytes .../documents/locale/mn/LC_MESSAGES/django.po | 238 + .../documents/locale/nb/LC_MESSAGES/django.mo | Bin 5700 -> 5050 bytes .../documents/locale/nb/LC_MESSAGES/django.po | 71 +- .../documents/locale/nl/LC_MESSAGES/django.mo | Bin 3477 -> 3247 bytes .../documents/locale/nl/LC_MESSAGES/django.po | 25 +- .../locale/nl_NL/LC_MESSAGES/django.mo | Bin 5873 -> 6736 bytes .../locale/nl_NL/LC_MESSAGES/django.po | 83 +- .../documents/locale/pl/LC_MESSAGES/django.mo | Bin 6172 -> 7263 bytes .../documents/locale/pl/LC_MESSAGES/django.po | 85 +- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 5838 -> 6796 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 75 +- .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 5476 -> 4717 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 63 +- .../documents/locale/ro/LC_MESSAGES/django.mo | Bin 5957 -> 6470 bytes .../documents/locale/ro/LC_MESSAGES/django.po | 83 +- .../documents/locale/ru/LC_MESSAGES/django.mo | Bin 7418 -> 6335 bytes .../documents/locale/ru/LC_MESSAGES/django.po | 86 +- .../locale/sk_SK/LC_MESSAGES/django.mo | Bin 5731 -> 5020 bytes .../locale/sk_SK/LC_MESSAGES/django.po | 70 +- .../documents/locale/sl/LC_MESSAGES/django.mo | Bin 5344 -> 4382 bytes .../documents/locale/sl/LC_MESSAGES/django.po | 68 +- .../documents/locale/sv/LC_MESSAGES/django.mo | Bin 5626 -> 6294 bytes .../documents/locale/sv/LC_MESSAGES/django.po | 89 +- .../locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 1585 bytes .../locale/tet/LC_MESSAGES/django.po | 88 + .../documents/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 8817 bytes .../documents/locale/th/LC_MESSAGES/django.po | 288 + .../documents/locale/tr/LC_MESSAGES/django.mo | Bin 3781 -> 3421 bytes .../documents/locale/tr/LC_MESSAGES/django.po | 27 +- .../documents/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 6718 bytes .../documents/locale/uk/LC_MESSAGES/django.po | 251 + .../documents/locale/zh/LC_MESSAGES/django.mo | Bin 2069 -> 2822 bytes .../documents/locale/zh/LC_MESSAGES/django.po | 62 +- .../locale/zh_CN/LC_MESSAGES/django.mo | Bin 5192 -> 0 bytes .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 6213 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 81 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 5810 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 285 + .../migrations/0008_document_file_size.py | 18 + .../0009_document_verbose_name_plural.py | 17 + .../migrations/0010_document_file_hash.py | 18 + wagtail/documents/models.py | 80 +- wagtail/documents/rich_text/__init__.py | 23 + .../contentstate.py} | 44 +- wagtail/documents/rich_text/editor_html.py | 30 + .../wagtaildocs/js/document-chooser-modal.js | 141 + .../wagtaildocs/js/document-chooser.js | 1 + .../js/hallo-plugins/hallo-wagtaildoclink.js | 3 +- .../wagtaildocs/scss/add-multiple.scss | 5 +- .../wagtaildocs/chooser/chooser.html | 2 + .../templates/wagtaildocs/chooser/chooser.js | 108 - .../wagtaildocs/chooser/document_chosen.js | 4 - .../wagtaildocs/chooser/results.html | 22 +- .../templates/wagtaildocs/documents/add.html | 7 + .../wagtaildocs/documents/confirm_delete.html | 1 + .../templates/wagtaildocs/documents/edit.html | 12 +- .../templates/wagtaildocs/documents/list.html | 15 +- .../wagtaildocs/documents/results.html | 4 +- .../wagtaildocs/documents/usage.html | 4 +- .../homepage/site_summary_documents.html | 4 +- .../templates/wagtaildocs/multiple/add.html | 38 +- wagtail/documents/tests/test_admin_views.py | 317 +- .../tests/test_collection_privacy.py | 3 +- .../documents/tests/test_document_chooser.py | 188 + wagtail/documents/tests/test_models.py | 8 +- wagtail/documents/tests/test_rich_text.py | 60 +- wagtail/documents/tests/test_search.py | 7 +- wagtail/documents/tests/test_views.py | 130 +- wagtail/documents/tests/utils.py | 7 + wagtail/documents/views/chooser.py | 56 +- wagtail/documents/views/documents.py | 63 +- wagtail/documents/views/multiple.py | 26 +- wagtail/documents/views/serve.py | 28 +- wagtail/documents/wagtail_hooks.py | 35 +- wagtail/documents/widgets.py | 9 + wagtail/embeds/apps.py | 3 +- wagtail/embeds/blocks.py | 15 +- wagtail/embeds/finders/embedly.py | 2 +- wagtail/embeds/finders/oembed.py | 2 +- wagtail/embeds/forms.py | 13 +- .../embeds/locale/ar/LC_MESSAGES/django.mo | Bin 674 -> 1636 bytes .../embeds/locale/ar/LC_MESSAGES/django.po | 40 +- .../embeds/locale/bg/LC_MESSAGES/django.mo | Bin 1318 -> 1318 bytes .../embeds/locale/bg/LC_MESSAGES/django.po | 14 +- .../embeds/locale/ca/LC_MESSAGES/django.mo | Bin 1278 -> 1278 bytes .../embeds/locale/ca/LC_MESSAGES/django.po | 14 +- .../embeds/locale/cs/LC_MESSAGES/django.mo | Bin 1197 -> 1406 bytes .../embeds/locale/cs/LC_MESSAGES/django.po | 32 +- .../embeds/locale/cy/LC_MESSAGES/django.mo | Bin 1217 -> 1217 bytes .../embeds/locale/cy/LC_MESSAGES/django.po | 14 +- .../embeds/locale/de/LC_MESSAGES/django.mo | Bin 1268 -> 1345 bytes .../embeds/locale/de/LC_MESSAGES/django.po | 28 +- .../embeds/locale/el/LC_MESSAGES/django.mo | Bin 1448 -> 1448 bytes .../embeds/locale/el/LC_MESSAGES/django.po | 14 +- .../embeds/locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../embeds/locale/en/LC_MESSAGES/django.po | 26 +- .../embeds/locale/es/LC_MESSAGES/django.mo | Bin 1270 -> 1368 bytes .../embeds/locale/es/LC_MESSAGES/django.po | 20 +- .../embeds/locale/fa/LC_MESSAGES/django.mo | Bin 1325 -> 1331 bytes .../embeds/locale/fa/LC_MESSAGES/django.po | 16 +- .../embeds/locale/fi/LC_MESSAGES/django.mo | Bin 1175 -> 1175 bytes .../embeds/locale/fi/LC_MESSAGES/django.po | 14 +- .../embeds/locale/fr/LC_MESSAGES/django.mo | Bin 1238 -> 1351 bytes .../embeds/locale/fr/LC_MESSAGES/django.po | 29 +- .../embeds/locale/gl/LC_MESSAGES/django.mo | Bin 1243 -> 1243 bytes .../embeds/locale/gl/LC_MESSAGES/django.po | 14 +- .../embeds/locale/he_IL/LC_MESSAGES/django.mo | Bin 1226 -> 1320 bytes .../embeds/locale/he_IL/LC_MESSAGES/django.po | 17 +- .../embeds/locale/hu/LC_MESSAGES/django.mo | Bin 538 -> 1412 bytes .../embeds/locale/hu/LC_MESSAGES/django.po | 41 +- .../embeds/locale/id_ID/LC_MESSAGES/django.mo | Bin 0 -> 1303 bytes .../embeds/locale/id_ID/LC_MESSAGES/django.po | 57 + .../embeds/locale/is_IS/LC_MESSAGES/django.mo | Bin 1338 -> 1463 bytes .../embeds/locale/is_IS/LC_MESSAGES/django.po | 26 +- .../embeds/locale/it/LC_MESSAGES/django.mo | Bin 1196 -> 1297 bytes .../embeds/locale/it/LC_MESSAGES/django.po | 24 +- .../embeds/locale/ja/LC_MESSAGES/django.mo | Bin 1239 -> 1395 bytes .../embeds/locale/ja/LC_MESSAGES/django.po | 26 +- .../embeds/locale/ko/LC_MESSAGES/django.mo | Bin 1266 -> 1397 bytes .../embeds/locale/ko/LC_MESSAGES/django.po | 27 +- .../embeds/locale/lt/LC_MESSAGES/django.mo | Bin 1255 -> 1357 bytes .../embeds/locale/lt/LC_MESSAGES/django.po | 24 +- .../embeds/locale/lv/LC_MESSAGES/django.mo | Bin 612 -> 612 bytes .../embeds/locale/lv/LC_MESSAGES/django.po | 10 +- .../embeds/locale/mn/LC_MESSAGES/django.mo | Bin 636 -> 645 bytes .../embeds/locale/mn/LC_MESSAGES/django.po | 12 +- .../embeds/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 499 bytes .../embeds/locale/my/LC_MESSAGES/django.po | 23 + .../embeds/locale/nb/LC_MESSAGES/django.mo | Bin 1242 -> 1296 bytes .../embeds/locale/nb/LC_MESSAGES/django.po | 19 +- .../embeds/locale/nl/LC_MESSAGES/django.mo | Bin 1187 -> 1187 bytes .../embeds/locale/nl/LC_MESSAGES/django.po | 14 +- .../embeds/locale/nl_NL/LC_MESSAGES/django.mo | Bin 1240 -> 1334 bytes .../embeds/locale/nl_NL/LC_MESSAGES/django.po | 23 +- .../embeds/locale/pl/LC_MESSAGES/django.mo | Bin 1386 -> 1478 bytes .../embeds/locale/pl/LC_MESSAGES/django.po | 20 +- .../embeds/locale/pt_BR/LC_MESSAGES/django.mo | Bin 1271 -> 1272 bytes .../embeds/locale/pt_BR/LC_MESSAGES/django.po | 16 +- .../embeds/locale/pt_PT/LC_MESSAGES/django.mo | Bin 1269 -> 1269 bytes .../embeds/locale/pt_PT/LC_MESSAGES/django.po | 14 +- .../embeds/locale/ro/LC_MESSAGES/django.mo | Bin 1328 -> 1434 bytes .../embeds/locale/ro/LC_MESSAGES/django.po | 22 +- .../embeds/locale/ru/LC_MESSAGES/django.mo | Bin 1608 -> 1608 bytes .../embeds/locale/ru/LC_MESSAGES/django.po | 16 +- .../embeds/locale/sk_SK/LC_MESSAGES/django.mo | Bin 1222 -> 1270 bytes .../embeds/locale/sk_SK/LC_MESSAGES/django.po | 17 +- .../embeds/locale/sl/LC_MESSAGES/django.mo | Bin 1270 -> 1270 bytes .../embeds/locale/sl/LC_MESSAGES/django.po | 14 +- .../embeds/locale/sv/LC_MESSAGES/django.mo | Bin 1209 -> 1356 bytes .../embeds/locale/sv/LC_MESSAGES/django.po | 26 +- .../embeds/locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 1294 bytes .../embeds/locale/tet/LC_MESSAGES/django.po | 62 + .../embeds/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 1791 bytes .../embeds/locale/th/LC_MESSAGES/django.po | 59 + .../embeds/locale/tr/LC_MESSAGES/django.mo | Bin 721 -> 721 bytes .../embeds/locale/tr/LC_MESSAGES/django.po | 10 +- .../embeds/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 1862 bytes .../embeds/locale/uk/LC_MESSAGES/django.po | 61 + .../embeds/locale/zh/LC_MESSAGES/django.mo | Bin 1067 -> 1067 bytes .../embeds/locale/zh/LC_MESSAGES/django.po | 14 +- .../embeds/locale/zh_CN/LC_MESSAGES/django.mo | Bin 1156 -> 0 bytes .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 1272 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 28 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 1291 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 57 + .../0004_embed_verbose_name_plural.py | 17 + .../0005_specify_thumbnail_url_max_length.py | 18 + wagtail/embeds/models.py | 3 +- wagtail/embeds/oembed_providers.py | 297 +- wagtail/embeds/rich_text/__init__.py | 26 + .../contentstate.py} | 51 +- wagtail/embeds/rich_text/editor_html.py | 41 + .../wagtailembeds/js/embed-chooser-modal.js | 23 + .../js/hallo-plugins/hallo-wagtailembeds.js | 1 + .../wagtailembeds/chooser/chooser.js | 19 - .../wagtailembeds/chooser/embed_chosen.js | 4 - wagtail/embeds/tests/__init__.py | 0 .../embeds/{tests.py => tests/test_embeds.py} | 162 +- wagtail/embeds/tests/test_rich_text.py | 110 + wagtail/embeds/views/chooser.py | 41 +- wagtail/embeds/wagtail_hooks.py | 14 +- wagtail/images/api/v2/endpoints.py | 6 +- wagtail/images/api/v2/serializers.py | 17 +- wagtail/images/apps.py | 3 +- wagtail/images/blocks.py | 19 + wagtail/images/fields.py | 97 +- wagtail/images/formats.py | 25 +- wagtail/images/forms.py | 2 +- wagtail/images/image_operations.py | 19 +- wagtail/images/jinja2tags.py | 14 + .../images/locale/ar/LC_MESSAGES/django.mo | Bin 5182 -> 8374 bytes .../images/locale/ar/LC_MESSAGES/django.po | 167 +- .../images/locale/bg/LC_MESSAGES/django.mo | Bin 2435 -> 2202 bytes .../images/locale/bg/LC_MESSAGES/django.po | 24 +- .../images/locale/ca/LC_MESSAGES/django.mo | Bin 7786 -> 7119 bytes .../images/locale/ca/LC_MESSAGES/django.po | 74 +- .../images/locale/cs/LC_MESSAGES/django.mo | Bin 7037 -> 8539 bytes .../images/locale/cs/LC_MESSAGES/django.po | 127 +- .../images/locale/de/LC_MESSAGES/django.mo | Bin 8293 -> 8931 bytes .../images/locale/de/LC_MESSAGES/django.po | 94 +- .../images/locale/el/LC_MESSAGES/django.mo | Bin 10150 -> 9252 bytes .../images/locale/el/LC_MESSAGES/django.po | 71 +- .../images/locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../images/locale/en/LC_MESSAGES/django.po | 181 +- .../images/locale/es/LC_MESSAGES/django.mo | Bin 8303 -> 8185 bytes .../images/locale/es/LC_MESSAGES/django.po | 70 +- .../images/locale/fa/LC_MESSAGES/django.mo | Bin 8874 -> 8267 bytes .../images/locale/fa/LC_MESSAGES/django.po | 63 +- .../images/locale/fi/LC_MESSAGES/django.mo | Bin 7630 -> 6998 bytes .../images/locale/fi/LC_MESSAGES/django.po | 70 +- .../images/locale/fr/LC_MESSAGES/django.mo | Bin 8425 -> 9046 bytes .../images/locale/fr/LC_MESSAGES/django.po | 108 +- .../images/locale/gl/LC_MESSAGES/django.mo | Bin 7642 -> 6955 bytes .../images/locale/gl/LC_MESSAGES/django.po | 74 +- .../images/locale/he_IL/LC_MESSAGES/django.mo | Bin 5401 -> 5121 bytes .../images/locale/he_IL/LC_MESSAGES/django.po | 26 +- .../images/locale/hr_HR/LC_MESSAGES/django.mo | Bin 613 -> 613 bytes .../images/locale/hu/LC_MESSAGES/django.mo | Bin 1593 -> 8819 bytes .../images/locale/hu/LC_MESSAGES/django.po | 342 +- .../images/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 555 bytes .../images/locale/id_ID/LC_MESSAGES/django.mo | Bin 859 -> 7577 bytes .../images/locale/id_ID/LC_MESSAGES/django.po | 328 +- .../images/locale/is_IS/LC_MESSAGES/django.mo | Bin 7960 -> 8184 bytes .../images/locale/is_IS/LC_MESSAGES/django.po | 89 +- .../images/locale/it/LC_MESSAGES/django.mo | Bin 8179 -> 8759 bytes .../images/locale/it/LC_MESSAGES/django.po | 87 +- .../images/locale/ja/LC_MESSAGES/django.mo | Bin 6950 -> 9215 bytes .../images/locale/ja/LC_MESSAGES/django.po | 129 +- .../images/locale/ka/LC_MESSAGES/django.mo | Bin 1852 -> 1857 bytes .../images/locale/ka/LC_MESSAGES/django.po | 8 +- .../images/locale/ko/LC_MESSAGES/django.mo | Bin 8300 -> 8504 bytes .../images/locale/ko/LC_MESSAGES/django.po | 77 +- .../images/locale/lt/LC_MESSAGES/django.mo | Bin 8248 -> 7990 bytes .../images/locale/lt/LC_MESSAGES/django.po | 104 +- .../images/locale/lv/LC_MESSAGES/django.mo | Bin 4141 -> 4095 bytes .../images/locale/lv/LC_MESSAGES/django.po | 10 +- .../images/locale/mn/LC_MESSAGES/django.mo | Bin 2298 -> 7565 bytes .../images/locale/mn/LC_MESSAGES/django.po | 237 +- .../images/locale/nb/LC_MESSAGES/django.mo | Bin 7922 -> 7425 bytes .../images/locale/nb/LC_MESSAGES/django.po | 84 +- .../images/locale/nl/LC_MESSAGES/django.mo | Bin 6495 -> 5815 bytes .../images/locale/nl/LC_MESSAGES/django.po | 58 +- .../images/locale/nl_NL/LC_MESSAGES/django.mo | Bin 8334 -> 9011 bytes .../images/locale/nl_NL/LC_MESSAGES/django.po | 88 +- .../images/locale/pl/LC_MESSAGES/django.mo | Bin 8532 -> 9355 bytes .../images/locale/pl/LC_MESSAGES/django.po | 93 +- .../images/locale/pt_BR/LC_MESSAGES/django.mo | Bin 8147 -> 8743 bytes .../images/locale/pt_BR/LC_MESSAGES/django.po | 77 +- .../images/locale/pt_PT/LC_MESSAGES/django.mo | Bin 7906 -> 7237 bytes .../images/locale/pt_PT/LC_MESSAGES/django.po | 70 +- .../images/locale/ro/LC_MESSAGES/django.mo | Bin 8378 -> 8370 bytes .../images/locale/ro/LC_MESSAGES/django.po | 82 +- .../images/locale/ru/LC_MESSAGES/django.mo | Bin 10608 -> 10458 bytes .../images/locale/ru/LC_MESSAGES/django.po | 115 +- .../images/locale/sk_SK/LC_MESSAGES/django.mo | Bin 8205 -> 7535 bytes .../images/locale/sk_SK/LC_MESSAGES/django.po | 80 +- .../images/locale/sl/LC_MESSAGES/django.mo | Bin 7123 -> 6197 bytes .../images/locale/sl/LC_MESSAGES/django.po | 76 +- .../images/locale/sv/LC_MESSAGES/django.mo | Bin 7790 -> 8164 bytes .../images/locale/sv/LC_MESSAGES/django.po | 95 +- .../images/locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 3146 bytes .../images/locale/tet/LC_MESSAGES/django.po | 147 + .../images/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 11367 bytes .../images/locale/th/LC_MESSAGES/django.po | 379 + .../images/locale/tr/LC_MESSAGES/django.mo | Bin 4609 -> 4493 bytes .../images/locale/tr/LC_MESSAGES/django.po | 23 +- .../images/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 10192 bytes .../images/locale/uk/LC_MESSAGES/django.po | 369 + .../images/locale/zh/LC_MESSAGES/django.mo | Bin 1692 -> 1692 bytes .../images/locale/zh/LC_MESSAGES/django.po | 7 +- .../images/locale/zh_CN/LC_MESSAGES/django.mo | Bin 7358 -> 0 bytes .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 8168 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 93 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 7324 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 370 + .../migrations/0020_add-verbose-name.py | 17 + .../images/migrations/0021_image_file_hash.py | 18 + .../migrations/0023_merge_20200415_1549.py | 14 + wagtail/images/models.py | 97 +- wagtail/images/rich_text.py | 118 - wagtail/images/rich_text/__init__.py | 29 + wagtail/images/rich_text/contentstate.py | 56 + wagtail/images/rich_text/editor_html.py | 48 + .../wagtailimages/js/focal-point-chooser.js | 12 +- .../js/hallo-plugins/hallo-wagtailimage.js | 3 +- .../wagtailimages/js/image-chooser-modal.js | 369 + .../wagtailimages/js/image-chooser.js | 16 +- .../wagtailimages/scss/add-multiple.scss | 5 +- .../scss/focal-point-chooser.scss | 4 +- .../wagtailimages/chooser/chooser.html | 3 + .../wagtailimages/chooser/chooser.js | 125 - .../wagtailimages/chooser/image_chosen.js | 4 - .../wagtailimages/chooser/results.html | 6 +- .../wagtailimages/chooser/select_format.js | 11 - .../wagtailimages/chooser/select_rendition.js | 191 - .../homepage/site_summary_images.html | 4 +- .../templates/wagtailimages/images/add.html | 7 + .../wagtailimages/images/confirm_delete.html | 1 + .../templates/wagtailimages/images/edit.html | 132 +- .../wagtailimages/images/results.html | 20 +- .../wagtailimages/images/results_image.html | 2 +- .../wagtailimages/images/url_generator.html | 8 +- .../templates/wagtailimages/images/usage.html | 4 +- .../templates/wagtailimages/multiple/add.html | 26 +- .../wagtailimages/widgets/compare.html | 2 +- .../wagtailimages/widgets/image_chooser.html | 4 +- .../images/templatetags/wagtailimages_tags.py | 20 +- wagtail/images/tests/test_admin_views.py | 335 +- wagtail/images/tests/test_image_operations.py | 120 +- wagtail/images/tests/test_jinja2.py | 23 + wagtail/images/tests/test_models.py | 10 + wagtail/images/tests/test_rich_text.py | 143 +- wagtail/images/tests/test_signal_handlers.py | 14 +- wagtail/images/tests/tests.py | 88 +- wagtail/images/tests/urls.py | 1 + wagtail/images/tests/utils.py | 7 + wagtail/images/utils.py | 2 +- wagtail/images/views/chooser.py | 129 +- wagtail/images/views/images.py | 38 +- wagtail/images/views/multiple.py | 31 +- wagtail/images/views/serve.py | 14 +- wagtail/images/wagtail_hooks.py | 45 +- wagtail/images/widgets.py | 34 + wagtail/project_template/Dockerfile | 8 +- .../home/static/css/welcome_page.css | 204 + .../home/templates/home/home_page.html | 18 +- .../home/templates/home/welcome_page.html | 52 + .../project_name/settings/base.py | 5 + .../project_name/settings/dev.py | 2 + .../project_name/templates/500.html | 6 +- .../project_name/templates/base.html | 6 +- wagtail/project_template/requirements.txt | 4 +- wagtail/search/.gitignore | 1 + wagtail/search/apps.py | 3 +- wagtail/search/backends/base.py | 131 +- wagtail/search/backends/db.py | 67 +- wagtail/search/backends/elasticsearch2.py | 238 +- wagtail/search/backends/elasticsearch5.py | 7 +- wagtail/search/backends/elasticsearch6.py | 64 + wagtail/search/backends/elasticsearch7.py | 99 + wagtail/search/index.py | 57 +- .../search/locale/ar/LC_MESSAGES/django.mo | Bin 1570 -> 1618 bytes .../search/locale/ar/LC_MESSAGES/django.po | 12 +- .../search/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 1684 bytes .../search/locale/be/LC_MESSAGES/django.po | 57 + .../search/locale/bg/LC_MESSAGES/django.mo | Bin 897 -> 902 bytes .../search/locale/bg/LC_MESSAGES/django.po | 6 +- .../search/locale/ca/LC_MESSAGES/django.mo | Bin 1347 -> 1351 bytes .../search/locale/ca/LC_MESSAGES/django.po | 6 +- .../search/locale/cs/LC_MESSAGES/django.mo | Bin 555 -> 1477 bytes .../search/locale/cs/LC_MESSAGES/django.po | 42 +- .../search/locale/cy/LC_MESSAGES/django.mo | Bin 695 -> 695 bytes .../search/locale/cy/LC_MESSAGES/django.po | 6 +- .../search/locale/de/LC_MESSAGES/django.mo | Bin 1319 -> 1364 bytes .../search/locale/de/LC_MESSAGES/django.po | 9 +- .../search/locale/el/LC_MESSAGES/django.mo | Bin 1658 -> 1658 bytes .../search/locale/el/LC_MESSAGES/django.po | 6 +- .../search/locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../search/locale/en/LC_MESSAGES/django.po | 8 +- .../search/locale/es/LC_MESSAGES/django.mo | Bin 1364 -> 1413 bytes .../search/locale/es/LC_MESSAGES/django.po | 9 +- .../search/locale/fa/LC_MESSAGES/django.mo | Bin 1319 -> 1315 bytes .../search/locale/fa/LC_MESSAGES/django.po | 8 +- .../search/locale/fi/LC_MESSAGES/django.mo | Bin 1272 -> 1295 bytes .../search/locale/fi/LC_MESSAGES/django.po | 6 +- .../search/locale/fr/LC_MESSAGES/django.mo | Bin 1356 -> 1431 bytes .../search/locale/fr/LC_MESSAGES/django.po | 11 +- .../search/locale/gl/LC_MESSAGES/django.mo | Bin 1328 -> 1332 bytes .../search/locale/gl/LC_MESSAGES/django.po | 6 +- .../search/locale/he_IL/LC_MESSAGES/django.mo | Bin 927 -> 1026 bytes .../search/locale/he_IL/LC_MESSAGES/django.po | 9 +- .../search/locale/hu/LC_MESSAGES/django.mo | Bin 529 -> 1390 bytes .../search/locale/hu/LC_MESSAGES/django.po | 40 +- .../search/locale/id_ID/LC_MESSAGES/django.mo | Bin 510 -> 1385 bytes .../search/locale/id_ID/LC_MESSAGES/django.po | 42 +- .../search/locale/is_IS/LC_MESSAGES/django.mo | Bin 1389 -> 1455 bytes .../search/locale/is_IS/LC_MESSAGES/django.po | 11 +- .../search/locale/it/LC_MESSAGES/django.mo | Bin 1311 -> 1355 bytes .../search/locale/it/LC_MESSAGES/django.po | 10 +- .../search/locale/ja/LC_MESSAGES/django.mo | Bin 1385 -> 1434 bytes .../search/locale/ja/LC_MESSAGES/django.po | 10 +- .../search/locale/ka/LC_MESSAGES/django.mo | Bin 825 -> 834 bytes .../search/locale/ka/LC_MESSAGES/django.po | 8 +- .../search/locale/ko/LC_MESSAGES/django.mo | Bin 1344 -> 1395 bytes .../search/locale/ko/LC_MESSAGES/django.po | 9 +- .../search/locale/lt/LC_MESSAGES/django.mo | Bin 1421 -> 1492 bytes .../search/locale/lt/LC_MESSAGES/django.po | 11 +- .../search/locale/lv/LC_MESSAGES/django.mo | Bin 1371 -> 1370 bytes .../search/locale/lv/LC_MESSAGES/django.po | 6 +- .../search/locale/mn/LC_MESSAGES/django.mo | Bin 507 -> 1096 bytes .../search/locale/mn/LC_MESSAGES/django.po | 31 +- .../search/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1541 bytes .../search/locale/my/LC_MESSAGES/django.po | 50 + .../search/locale/nb/LC_MESSAGES/django.mo | Bin 1279 -> 1334 bytes .../search/locale/nb/LC_MESSAGES/django.po | 10 +- .../search/locale/nl/LC_MESSAGES/django.mo | Bin 1270 -> 1270 bytes .../search/locale/nl/LC_MESSAGES/django.po | 6 +- .../search/locale/nl_NL/LC_MESSAGES/django.mo | Bin 1291 -> 1340 bytes .../search/locale/nl_NL/LC_MESSAGES/django.po | 11 +- .../search/locale/pl/LC_MESSAGES/django.mo | Bin 1442 -> 1494 bytes .../search/locale/pl/LC_MESSAGES/django.po | 8 +- .../search/locale/pt_BR/LC_MESSAGES/django.mo | Bin 1357 -> 1358 bytes .../search/locale/pt_BR/LC_MESSAGES/django.po | 6 +- .../search/locale/pt_PT/LC_MESSAGES/django.mo | Bin 1389 -> 1387 bytes .../search/locale/pt_PT/LC_MESSAGES/django.po | 6 +- .../search/locale/ro/LC_MESSAGES/django.mo | Bin 1330 -> 1378 bytes .../search/locale/ro/LC_MESSAGES/django.po | 9 +- .../search/locale/ru/LC_MESSAGES/django.mo | Bin 1715 -> 1772 bytes .../search/locale/ru/LC_MESSAGES/django.po | 12 +- .../search/locale/sk_SK/LC_MESSAGES/django.mo | Bin 1382 -> 1435 bytes .../search/locale/sk_SK/LC_MESSAGES/django.po | 9 +- .../search/locale/sl/LC_MESSAGES/django.mo | Bin 1344 -> 1344 bytes .../search/locale/sl/LC_MESSAGES/django.po | 6 +- .../search/locale/sv/LC_MESSAGES/django.mo | Bin 1279 -> 1332 bytes .../search/locale/sv/LC_MESSAGES/django.po | 10 +- .../search/locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 1316 bytes .../search/locale/tet/LC_MESSAGES/django.po | 57 + .../search/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 1828 bytes .../search/locale/th/LC_MESSAGES/django.po | 57 + .../search/locale/tr/LC_MESSAGES/django.mo | Bin 1214 -> 1219 bytes .../search/locale/tr/LC_MESSAGES/django.po | 6 +- .../search/locale/uk/LC_MESSAGES/django.mo | Bin 788 -> 1725 bytes .../search/locale/uk/LC_MESSAGES/django.po | 38 +- .../search/locale/zh/LC_MESSAGES/django.mo | Bin 780 -> 785 bytes .../search/locale/zh/LC_MESSAGES/django.po | 6 +- .../{zh_CN => zh_Hans}/LC_MESSAGES/django.mo | Bin 1219 -> 1257 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 10 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 1274 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 55 + .../management/commands/update_index.py | 18 +- .../commands/wagtail_update_index.py | 4 + ...0004_querydailyhits_verbose_name_plural.py | 17 + wagtail/search/models.py | 1 + wagtail/search/query.py | 168 +- wagtail/search/queryset.py | 13 +- wagtail/search/signal_handlers.py | 3 + .../wagtailsearch/js/query-chooser-modal.js | 61 + .../wagtailsearch/queries/chooser/chooser.js | 59 - .../queries/chooser/results.html | 2 +- .../wagtailsearch/queries/chooser_field.js | 1 + .../tests/elasticsearch_common_tests.py | 46 +- wagtail/search/tests/test_backends.py | 315 +- wagtail/search/tests/test_db_backend.py | 33 +- .../tests/test_elasticsearch2_backend.py | 137 +- .../tests/test_elasticsearch5_backend.py | 135 +- .../tests/test_elasticsearch6_backend.py | 817 + .../tests/test_elasticsearch7_backend.py | 813 + wagtail/search/tests/test_frontend.py | 131 - wagtail/search/tests/test_index_functions.py | 6 +- wagtail/search/tests/test_indexed_class.py | 2 +- wagtail/search/tests/test_page_search.py | 2 +- wagtail/search/tests/test_queries.py | 21 +- wagtail/search/urls/__init__.py | 1 - wagtail/search/urls/frontend.py | 9 - wagtail/search/utils.py | 10 +- wagtail/search/views/__init__.py | 1 - wagtail/search/views/frontend.py | 108 - wagtail/search/views/queries.py | 11 +- wagtail/sites/apps.py | 3 +- wagtail/sites/locale/ar/LC_MESSAGES/django.mo | Bin 1038 -> 1735 bytes wagtail/sites/locale/ar/LC_MESSAGES/django.po | 35 +- wagtail/sites/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 1849 bytes wagtail/sites/locale/be/LC_MESSAGES/django.po | 73 + wagtail/sites/locale/ca/LC_MESSAGES/django.mo | Bin 1438 -> 1442 bytes wagtail/sites/locale/ca/LC_MESSAGES/django.po | 9 +- wagtail/sites/locale/cs/LC_MESSAGES/django.mo | Bin 528 -> 1569 bytes wagtail/sites/locale/cs/LC_MESSAGES/django.po | 61 +- wagtail/sites/locale/de/LC_MESSAGES/django.mo | Bin 1536 -> 1580 bytes wagtail/sites/locale/de/LC_MESSAGES/django.po | 14 +- wagtail/sites/locale/el/LC_MESSAGES/django.mo | Bin 1852 -> 1852 bytes wagtail/sites/locale/el/LC_MESSAGES/django.po | 11 +- wagtail/sites/locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes wagtail/sites/locale/en/LC_MESSAGES/django.po | 21 +- wagtail/sites/locale/es/LC_MESSAGES/django.mo | Bin 1487 -> 1532 bytes wagtail/sites/locale/es/LC_MESSAGES/django.po | 12 +- wagtail/sites/locale/fa/LC_MESSAGES/django.mo | Bin 1646 -> 1642 bytes wagtail/sites/locale/fa/LC_MESSAGES/django.po | 11 +- wagtail/sites/locale/fi/LC_MESSAGES/django.mo | Bin 1438 -> 1440 bytes wagtail/sites/locale/fi/LC_MESSAGES/django.po | 9 +- wagtail/sites/locale/fr/LC_MESSAGES/django.mo | Bin 1445 -> 1515 bytes wagtail/sites/locale/fr/LC_MESSAGES/django.po | 14 +- wagtail/sites/locale/gl/LC_MESSAGES/django.mo | Bin 1511 -> 1515 bytes wagtail/sites/locale/gl/LC_MESSAGES/django.po | 9 +- .../sites/locale/he_IL/LC_MESSAGES/django.mo | Bin 892 -> 986 bytes .../sites/locale/he_IL/LC_MESSAGES/django.po | 7 +- wagtail/sites/locale/hu/LC_MESSAGES/django.mo | Bin 791 -> 1546 bytes wagtail/sites/locale/hu/LC_MESSAGES/django.po | 50 +- .../sites/locale/id_ID/LC_MESSAGES/django.mo | Bin 1498 -> 1547 bytes .../sites/locale/id_ID/LC_MESSAGES/django.po | 13 +- .../sites/locale/is_IS/LC_MESSAGES/django.mo | Bin 1517 -> 1544 bytes .../sites/locale/is_IS/LC_MESSAGES/django.po | 14 +- wagtail/sites/locale/it/LC_MESSAGES/django.mo | Bin 1449 -> 1489 bytes wagtail/sites/locale/it/LC_MESSAGES/django.po | 13 +- wagtail/sites/locale/ja/LC_MESSAGES/django.mo | Bin 917 -> 1642 bytes wagtail/sites/locale/ja/LC_MESSAGES/django.po | 35 +- wagtail/sites/locale/ka/LC_MESSAGES/django.mo | Bin 553 -> 558 bytes wagtail/sites/locale/ka/LC_MESSAGES/django.po | 6 +- wagtail/sites/locale/ko/LC_MESSAGES/django.mo | Bin 1528 -> 1581 bytes wagtail/sites/locale/ko/LC_MESSAGES/django.po | 12 +- wagtail/sites/locale/lt/LC_MESSAGES/django.mo | Bin 1611 -> 1682 bytes wagtail/sites/locale/lt/LC_MESSAGES/django.po | 14 +- wagtail/sites/locale/lv/LC_MESSAGES/django.mo | Bin 885 -> 884 bytes wagtail/sites/locale/lv/LC_MESSAGES/django.po | 6 +- wagtail/sites/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 1683 bytes wagtail/sites/locale/mn/LC_MESSAGES/django.po | 74 + wagtail/sites/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 2161 bytes wagtail/sites/locale/my/LC_MESSAGES/django.po | 74 + wagtail/sites/locale/nb/LC_MESSAGES/django.mo | Bin 1488 -> 1537 bytes wagtail/sites/locale/nb/LC_MESSAGES/django.po | 12 +- wagtail/sites/locale/nl/LC_MESSAGES/django.mo | Bin 859 -> 859 bytes wagtail/sites/locale/nl/LC_MESSAGES/django.po | 4 +- .../sites/locale/nl_NL/LC_MESSAGES/django.mo | Bin 1461 -> 1508 bytes .../sites/locale/nl_NL/LC_MESSAGES/django.po | 14 +- wagtail/sites/locale/pl/LC_MESSAGES/django.mo | Bin 1602 -> 1644 bytes wagtail/sites/locale/pl/LC_MESSAGES/django.po | 33 +- .../sites/locale/pt_BR/LC_MESSAGES/django.mo | Bin 1453 -> 1454 bytes .../sites/locale/pt_BR/LC_MESSAGES/django.po | 9 +- .../sites/locale/pt_PT/LC_MESSAGES/django.mo | Bin 1473 -> 1471 bytes .../sites/locale/pt_PT/LC_MESSAGES/django.po | 9 +- wagtail/sites/locale/ro/LC_MESSAGES/django.mo | Bin 1480 -> 1525 bytes wagtail/sites/locale/ro/LC_MESSAGES/django.po | 12 +- wagtail/sites/locale/ru/LC_MESSAGES/django.mo | Bin 1824 -> 1823 bytes wagtail/sites/locale/ru/LC_MESSAGES/django.po | 11 +- .../sites/locale/sk_SK/LC_MESSAGES/django.mo | Bin 1508 -> 1556 bytes .../sites/locale/sk_SK/LC_MESSAGES/django.po | 10 +- wagtail/sites/locale/sl/LC_MESSAGES/django.mo | Bin 951 -> 951 bytes wagtail/sites/locale/sl/LC_MESSAGES/django.po | 4 +- wagtail/sites/locale/sv/LC_MESSAGES/django.mo | Bin 1434 -> 1494 bytes wagtail/sites/locale/sv/LC_MESSAGES/django.po | 13 +- .../sites/locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 1502 bytes .../sites/locale/tet/LC_MESSAGES/django.po | 75 + wagtail/sites/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 2116 bytes wagtail/sites/locale/th/LC_MESSAGES/django.po | 74 + wagtail/sites/locale/tr/LC_MESSAGES/django.mo | Bin 990 -> 992 bytes wagtail/sites/locale/tr/LC_MESSAGES/django.po | 6 +- wagtail/sites/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 1973 bytes wagtail/sites/locale/uk/LC_MESSAGES/django.po | 77 + .../{zh_CN => zh_Hans}/LC_MESSAGES/django.mo | Bin 1416 -> 1455 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 13 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 1469 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 73 + .../sites/templates/wagtailsites/index.html | 15 +- wagtail/snippets/apps.py | 3 +- .../snippets/locale/ar/LC_MESSAGES/django.mo | Bin 1409 -> 3622 bytes .../snippets/locale/ar/LC_MESSAGES/django.po | 100 +- .../snippets/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 3942 bytes .../snippets/locale/be/LC_MESSAGES/django.po | 157 + .../snippets/locale/bg/LC_MESSAGES/django.mo | Bin 2572 -> 2169 bytes .../snippets/locale/bg/LC_MESSAGES/django.po | 26 +- .../snippets/locale/ca/LC_MESSAGES/django.mo | Bin 3214 -> 2626 bytes .../snippets/locale/ca/LC_MESSAGES/django.po | 42 +- .../snippets/locale/cs/LC_MESSAGES/django.mo | Bin 779 -> 4015 bytes .../snippets/locale/cs/LC_MESSAGES/django.po | 165 +- .../snippets/locale/de/LC_MESSAGES/django.mo | Bin 3868 -> 4602 bytes .../snippets/locale/de/LC_MESSAGES/django.po | 84 +- .../snippets/locale/el/LC_MESSAGES/django.mo | Bin 3817 -> 3058 bytes .../snippets/locale/el/LC_MESSAGES/django.po | 44 +- .../snippets/locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../snippets/locale/en/LC_MESSAGES/django.po | 112 +- .../snippets/locale/es/LC_MESSAGES/django.mo | Bin 3697 -> 3701 bytes .../snippets/locale/es/LC_MESSAGES/django.po | 45 +- .../snippets/locale/fa/LC_MESSAGES/django.mo | Bin 3839 -> 2901 bytes .../snippets/locale/fa/LC_MESSAGES/django.po | 50 +- .../snippets/locale/fi/LC_MESSAGES/django.mo | Bin 3221 -> 2646 bytes .../snippets/locale/fi/LC_MESSAGES/django.po | 44 +- .../snippets/locale/fr/LC_MESSAGES/django.mo | Bin 3763 -> 3881 bytes .../snippets/locale/fr/LC_MESSAGES/django.po | 60 +- .../snippets/locale/gl/LC_MESSAGES/django.mo | Bin 3257 -> 2631 bytes .../snippets/locale/gl/LC_MESSAGES/django.po | 44 +- .../locale/he_IL/LC_MESSAGES/django.mo | Bin 1451 -> 1545 bytes .../locale/he_IL/LC_MESSAGES/django.po | 13 +- .../snippets/locale/hu/LC_MESSAGES/django.mo | Bin 1057 -> 4539 bytes .../snippets/locale/hu/LC_MESSAGES/django.po | 159 +- .../locale/id_ID/LC_MESSAGES/django.mo | Bin 1011 -> 3261 bytes .../locale/id_ID/LC_MESSAGES/django.po | 116 +- .../locale/is_IS/LC_MESSAGES/django.mo | Bin 3629 -> 3806 bytes .../locale/is_IS/LC_MESSAGES/django.po | 59 +- .../snippets/locale/it/LC_MESSAGES/django.mo | Bin 3756 -> 3813 bytes .../snippets/locale/it/LC_MESSAGES/django.po | 54 +- .../snippets/locale/ja/LC_MESSAGES/django.mo | Bin 3331 -> 3880 bytes .../snippets/locale/ja/LC_MESSAGES/django.po | 64 +- .../snippets/locale/ka/LC_MESSAGES/django.mo | Bin 792 -> 797 bytes .../snippets/locale/ka/LC_MESSAGES/django.po | 12 +- .../snippets/locale/ko/LC_MESSAGES/django.mo | Bin 3662 -> 3715 bytes .../snippets/locale/ko/LC_MESSAGES/django.po | 50 +- .../snippets/locale/lt/LC_MESSAGES/django.mo | Bin 3640 -> 3058 bytes .../snippets/locale/lt/LC_MESSAGES/django.po | 72 +- .../snippets/locale/lv/LC_MESSAGES/django.mo | Bin 1639 -> 1442 bytes .../snippets/locale/lv/LC_MESSAGES/django.po | 18 +- .../snippets/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 4139 bytes .../snippets/locale/mn/LC_MESSAGES/django.po | 183 + .../snippets/locale/nb/LC_MESSAGES/django.mo | Bin 3647 -> 2814 bytes .../snippets/locale/nb/LC_MESSAGES/django.po | 58 +- .../snippets/locale/nl/LC_MESSAGES/django.mo | Bin 3121 -> 2538 bytes .../snippets/locale/nl/LC_MESSAGES/django.po | 42 +- .../locale/nl_NL/LC_MESSAGES/django.mo | Bin 3808 -> 4581 bytes .../locale/nl_NL/LC_MESSAGES/django.po | 79 +- .../snippets/locale/pl/LC_MESSAGES/django.mo | Bin 3981 -> 4816 bytes .../snippets/locale/pl/LC_MESSAGES/django.po | 86 +- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 3717 -> 4431 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 73 +- .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 3257 -> 2675 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 44 +- .../snippets/locale/ro/LC_MESSAGES/django.mo | Bin 3757 -> 3769 bytes .../snippets/locale/ro/LC_MESSAGES/django.po | 50 +- .../snippets/locale/ru/LC_MESSAGES/django.mo | Bin 4280 -> 3903 bytes .../snippets/locale/ru/LC_MESSAGES/django.po | 84 +- .../locale/sk_SK/LC_MESSAGES/django.mo | Bin 3655 -> 2711 bytes .../locale/sk_SK/LC_MESSAGES/django.po | 61 +- .../snippets/locale/sl/LC_MESSAGES/django.mo | Bin 3331 -> 2599 bytes .../snippets/locale/sl/LC_MESSAGES/django.po | 52 +- .../snippets/locale/sv/LC_MESSAGES/django.mo | Bin 3498 -> 3743 bytes .../snippets/locale/sv/LC_MESSAGES/django.po | 58 +- .../snippets/locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 3605 bytes .../snippets/locale/tet/LC_MESSAGES/django.po | 181 + .../snippets/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 5008 bytes .../snippets/locale/th/LC_MESSAGES/django.po | 176 + .../snippets/locale/tr/LC_MESSAGES/django.mo | Bin 1482 -> 1381 bytes .../snippets/locale/tr/LC_MESSAGES/django.po | 14 +- .../snippets/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 3579 bytes .../snippets/locale/uk/LC_MESSAGES/django.po | 145 + .../snippets/locale/zh/LC_MESSAGES/django.mo | Bin 2244 -> 1865 bytes .../snippets/locale/zh/LC_MESSAGES/django.po | 26 +- .../locale/zh_CN/LC_MESSAGES/django.mo | Bin 3485 -> 0 bytes .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 4309 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 85 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 3554 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 175 + wagtail/snippets/models.py | 10 +- .../js/snippet-chooser-modal.js | 62 + .../wagtailsnippets/js/snippet-chooser.js | 1 + .../js/snippet-multiple-select.js | 103 + .../wagtailsnippets/chooser/choose.js | 57 - .../wagtailsnippets/chooser/chosen.js | 4 - .../wagtailsnippets/chooser/results.html | 6 +- .../snippets/confirm_delete.html | 41 +- .../wagtailsnippets/snippets/create.html | 7 +- .../wagtailsnippets/snippets/edit.html | 17 +- .../wagtailsnippets/snippets/index.html | 4 +- .../wagtailsnippets/snippets/list.html | 31 +- .../wagtailsnippets/snippets/results.html | 4 +- .../wagtailsnippets/snippets/type_index.html | 14 +- .../wagtailsnippets/snippets/usage.html | 4 +- wagtail/snippets/tests.py | 198 +- wagtail/snippets/urls.py | 1 + wagtail/snippets/views/chooser.py | 25 +- wagtail/snippets/views/snippets.py | 104 +- wagtail/snippets/wagtail_hooks.py | 5 +- wagtail/snippets/widgets.py | 9 + wagtail/tests/benchmark.py | 27 + wagtail/tests/context_processors.py | 2 +- wagtail/tests/customuser/fields.py | 7 +- wagtail/tests/customuser/models.py | 7 + wagtail/tests/demosite/models.py | 5 +- wagtail/tests/dummy_external_storage.py | 12 +- wagtail/tests/middleware.py | 15 + wagtail/tests/modeladmintest/apps.py | 3 +- .../fixtures/modeladmintest_test.json | 16 + .../0006_contributor_person_visitor.py | 43 + .../modeladmintest/migrations/0007_friend.py | 23 + .../migrations/0008_solobook.py | 22 + wagtail/tests/modeladmintest/models.py | 78 + wagtail/tests/modeladmintest/wagtail_hooks.py | 43 +- wagtail/tests/non_root_urls.py | 2 - wagtail/tests/routablepage/apps.py | 3 +- wagtail/tests/search/apps.py | 3 +- wagtail/tests/search/models.py | 9 +- wagtail/tests/settings.py | 22 +- wagtail/tests/snippets/apps.py | 3 +- wagtail/tests/testapp/apps.py | 3 +- wagtail/tests/testapp/fixtures/test.json | 75 +- wagtail/tests/testapp/forms.py | 23 + .../tests/testapp/migrations/0001_initial.py | 5 +- .../testapp/migrations/0005_streampage.py | 29 - .../0030_formclassadditionalfieldpage.py | 28 + .../0031_customdocument_file_size.py | 18 + .../migrations/0032_auto_20180505_0008.py | 23 + ...033_eventpagespeaker_related_query_name.py | 18 + .../0034_advertwithuuidcustomprimarykey.py | 26 + .../0035_streamfieldmigrationmodels.py | 47 + ...36_streamfieldmigrationmodels_add_field.py | 33 + ...0037_customdocument_verbose_name_plural.py | 17 + .../0038_singletonpageviamaxcount.py | 25 + .../0039_customdocument_description.py | 18 + .../0040_customdocument_file_hash.py | 18 + .../testapp/migrations/0041_secretpage.py | 28 + .../0042_simplechildpage_simpleparentpage.py | 35 + .../0043_customdocument_fancy_description.py | 19 + .../migrations/0044_auto_20200415_1544.py | 49 + .../testapp/migrations/0044_rawhtmlblock.py | 21 + wagtail/tests/testapp/models.py | 169 +- wagtail/tests/testapp/views.py | 2 +- wagtail/tests/testapp/wagtail_hooks.py | 93 +- wagtail/tests/urls.py | 8 +- wagtail/tests/urls_multilang.py | 9 + wagtail/tests/utils/form_data.py | 2 +- wagtail/users/apps.py | 3 +- wagtail/users/forms.py | 94 +- wagtail/users/locale/ar/LC_MESSAGES/django.mo | Bin 5031 -> 7460 bytes wagtail/users/locale/ar/LC_MESSAGES/django.po | 104 +- wagtail/users/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 8391 bytes wagtail/users/locale/be/LC_MESSAGES/django.po | 284 + wagtail/users/locale/bg/LC_MESSAGES/django.mo | Bin 3425 -> 3092 bytes wagtail/users/locale/bg/LC_MESSAGES/django.po | 27 +- wagtail/users/locale/ca/LC_MESSAGES/django.mo | Bin 6383 -> 6136 bytes wagtail/users/locale/ca/LC_MESSAGES/django.po | 29 +- wagtail/users/locale/cs/LC_MESSAGES/django.mo | Bin 4941 -> 7828 bytes wagtail/users/locale/cs/LC_MESSAGES/django.po | 152 +- wagtail/users/locale/de/LC_MESSAGES/django.mo | Bin 7036 -> 7700 bytes wagtail/users/locale/de/LC_MESSAGES/django.po | 64 +- wagtail/users/locale/el/LC_MESSAGES/django.mo | Bin 8273 -> 7939 bytes wagtail/users/locale/el/LC_MESSAGES/django.po | 31 +- wagtail/users/locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes wagtail/users/locale/en/LC_MESSAGES/django.po | 177 +- wagtail/users/locale/es/LC_MESSAGES/django.mo | Bin 6779 -> 7453 bytes wagtail/users/locale/es/LC_MESSAGES/django.po | 47 +- wagtail/users/locale/fa/LC_MESSAGES/django.mo | Bin 7246 -> 7112 bytes wagtail/users/locale/fa/LC_MESSAGES/django.po | 31 +- wagtail/users/locale/fi/LC_MESSAGES/django.mo | Bin 6478 -> 6217 bytes wagtail/users/locale/fi/LC_MESSAGES/django.po | 32 +- wagtail/users/locale/fr/LC_MESSAGES/django.mo | Bin 6934 -> 7598 bytes wagtail/users/locale/fr/LC_MESSAGES/django.po | 53 +- wagtail/users/locale/gl/LC_MESSAGES/django.mo | Bin 5719 -> 5419 bytes wagtail/users/locale/gl/LC_MESSAGES/django.po | 30 +- .../users/locale/he_IL/LC_MESSAGES/django.mo | Bin 5505 -> 5502 bytes .../users/locale/he_IL/LC_MESSAGES/django.po | 15 +- .../users/locale/hr_HR/LC_MESSAGES/django.mo | Bin 2153 -> 2153 bytes .../users/locale/hr_HR/LC_MESSAGES/django.po | 4 +- wagtail/users/locale/hu/LC_MESSAGES/django.mo | Bin 754 -> 7584 bytes wagtail/users/locale/hu/LC_MESSAGES/django.po | 304 +- wagtail/users/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 3592 bytes wagtail/users/locale/hy/LC_MESSAGES/django.po | 100 + .../users/locale/id_ID/LC_MESSAGES/django.mo | Bin 696 -> 6925 bytes .../users/locale/id_ID/LC_MESSAGES/django.po | 284 +- .../users/locale/is_IS/LC_MESSAGES/django.mo | Bin 6846 -> 7581 bytes .../users/locale/is_IS/LC_MESSAGES/django.po | 57 +- wagtail/users/locale/it/LC_MESSAGES/django.mo | Bin 6678 -> 7337 bytes wagtail/users/locale/it/LC_MESSAGES/django.po | 49 +- wagtail/users/locale/ja/LC_MESSAGES/django.mo | Bin 5787 -> 7767 bytes wagtail/users/locale/ja/LC_MESSAGES/django.po | 99 +- wagtail/users/locale/ka/LC_MESSAGES/django.mo | Bin 1591 -> 1596 bytes wagtail/users/locale/ka/LC_MESSAGES/django.po | 6 +- wagtail/users/locale/ko/LC_MESSAGES/django.mo | Bin 6808 -> 7601 bytes wagtail/users/locale/ko/LC_MESSAGES/django.po | 51 +- wagtail/users/locale/lt/LC_MESSAGES/django.mo | Bin 6866 -> 6748 bytes wagtail/users/locale/lt/LC_MESSAGES/django.po | 40 +- wagtail/users/locale/lv/LC_MESSAGES/django.mo | Bin 4035 -> 3962 bytes wagtail/users/locale/lv/LC_MESSAGES/django.po | 12 +- wagtail/users/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 9008 bytes wagtail/users/locale/mn/LC_MESSAGES/django.po | 332 + wagtail/users/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 7069 bytes wagtail/users/locale/my/LC_MESSAGES/django.po | 204 + wagtail/users/locale/nb/LC_MESSAGES/django.mo | Bin 6568 -> 6645 bytes wagtail/users/locale/nb/LC_MESSAGES/django.po | 48 +- wagtail/users/locale/nl/LC_MESSAGES/django.mo | Bin 5457 -> 5391 bytes wagtail/users/locale/nl/LC_MESSAGES/django.po | 12 +- .../users/locale/nl_NL/LC_MESSAGES/django.mo | Bin 6888 -> 7587 bytes .../users/locale/nl_NL/LC_MESSAGES/django.po | 64 +- wagtail/users/locale/pl/LC_MESSAGES/django.mo | Bin 7050 -> 7752 bytes wagtail/users/locale/pl/LC_MESSAGES/django.po | 58 +- .../users/locale/pt_BR/LC_MESSAGES/django.mo | Bin 6797 -> 7507 bytes .../users/locale/pt_BR/LC_MESSAGES/django.po | 54 +- .../users/locale/pt_PT/LC_MESSAGES/django.mo | Bin 6099 -> 5855 bytes .../users/locale/pt_PT/LC_MESSAGES/django.po | 30 +- wagtail/users/locale/ro/LC_MESSAGES/django.mo | Bin 6876 -> 7553 bytes wagtail/users/locale/ro/LC_MESSAGES/django.po | 49 +- wagtail/users/locale/ru/LC_MESSAGES/django.mo | Bin 8956 -> 9457 bytes wagtail/users/locale/ru/LC_MESSAGES/django.po | 68 +- .../users/locale/sk_SK/LC_MESSAGES/django.mo | Bin 7148 -> 7012 bytes .../users/locale/sk_SK/LC_MESSAGES/django.po | 40 +- wagtail/users/locale/sl/LC_MESSAGES/django.mo | Bin 5764 -> 5362 bytes wagtail/users/locale/sl/LC_MESSAGES/django.po | 38 +- wagtail/users/locale/sv/LC_MESSAGES/django.mo | Bin 6577 -> 7327 bytes wagtail/users/locale/sv/LC_MESSAGES/django.po | 50 +- .../users/locale/tet/LC_MESSAGES/django.mo | Bin 0 -> 7040 bytes .../users/locale/tet/LC_MESSAGES/django.po | 323 + wagtail/users/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 10576 bytes wagtail/users/locale/th/LC_MESSAGES/django.po | 319 + wagtail/users/locale/tr/LC_MESSAGES/django.mo | Bin 2867 -> 2867 bytes wagtail/users/locale/tr/LC_MESSAGES/django.po | 6 +- wagtail/users/locale/uk/LC_MESSAGES/django.mo | Bin 2122 -> 9194 bytes wagtail/users/locale/uk/LC_MESSAGES/django.po | 230 +- wagtail/users/locale/vi/LC_MESSAGES/django.mo | Bin 3411 -> 3326 bytes wagtail/users/locale/vi/LC_MESSAGES/django.po | 12 +- wagtail/users/locale/zh/LC_MESSAGES/django.mo | Bin 2437 -> 2370 bytes wagtail/users/locale/zh/LC_MESSAGES/django.po | 9 +- .../users/locale/zh_CN/LC_MESSAGES/django.mo | Bin 6030 -> 0 bytes .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 6684 bytes .../{zh_CN => zh_Hans}/LC_MESSAGES/django.po | 62 +- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 6741 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 315 + .../0007_userprofile_current_time_zone.py | 18 + .../migrations/0008_userprofile_avatar.py | 19 + .../0009_userprofile_verbose_name_plural.py | 17 + wagtail/users/models.py | 32 +- .../wagtailusers/scss/groups_edit.scss | 4 +- .../templates/wagtailusers/groups/create.html | 5 +- .../templates/wagtailusers/groups/edit.html | 6 +- .../includes/formatted_permissions.html | 110 +- .../groups/includes/group_form_js.html | 11 +- .../includes/page_permissions_form.html | 2 +- .../includes/page_permissions_formset.html | 2 +- .../templates/wagtailusers/groups/index.html | 1 - .../templates/wagtailusers/groups/list.html | 6 +- .../wagtailusers/groups/results.html | 2 +- .../templates/wagtailusers/users/create.html | 13 +- .../templates/wagtailusers/users/edit.html | 11 + .../templates/wagtailusers/users/index.html | 1 - .../templates/wagtailusers/users/list.html | 29 +- .../templates/wagtailusers/users/results.html | 4 +- .../users/templatetags/wagtailusers_tags.py | 4 +- wagtail/users/tests.py | 111 +- wagtail/users/utils.py | 21 + wagtail/users/views/groups.py | 22 + wagtail/users/views/users.py | 16 +- wagtail/users/wagtail_hooks.py | 18 +- wagtail/utils/deprecation.py | 59 +- wagtail/utils/l18n/CHANGES.rst | 76 + wagtail/utils/l18n/CONTRIBUTORS.rst | 18 + wagtail/utils/l18n/LICENSE.txt | 21 + wagtail/utils/l18n/README.rst | 210 + wagtail/utils/l18n/__init__.py | 4 + wagtail/utils/l18n/__maps.py | 920 ++ .../utils/l18n/locale/cs/LC_MESSAGES/l18n.mo | Bin 0 -> 15675 bytes .../utils/l18n/locale/de/LC_MESSAGES/l18n.mo | Bin 0 -> 12014 bytes .../utils/l18n/locale/en/LC_MESSAGES/l18n.mo | Bin 0 -> 639 bytes .../utils/l18n/locale/fr/LC_MESSAGES/l18n.mo | Bin 0 -> 15541 bytes .../utils/l18n/locale/zh/LC_MESSAGES/l18n.mo | Bin 0 -> 27555 bytes wagtail/utils/l18n/maps.py | 26 + wagtail/utils/l18n/translation.py | 275 + wagtail/utils/l18n/utils.py | 32 + wagtail/utils/l18n/version.py | 40 + wagtail/utils/pagination.py | 37 - wagtail/utils/sendfile.py | 4 +- wagtail/utils/version.py | 27 +- wagtail/utils/widgets.py | 2 +- 2341 files changed, 95535 insertions(+), 42221 deletions(-) create mode 100644 .circleci/config.yml create mode 100755 .circleci/trigger-nightly-build.sh rename CONTRIBUTING.md => .github/CONTRIBUTING.md (100%) rename .github/{ISSUE_TEMPLATE.md => ISSUE_TEMPLATE/BUG_REPORT.md} (62%) create mode 100644 .github/ISSUE_TEMPLATE/FEATURE_REQUEST.md create mode 100644 .github/ISSUE_TEMPLATE/QUESTION.md create mode 100644 .github/squash-logo.svg create mode 100644 .github/wagtail-screenshot-with-browser.png create mode 100644 .github/wagtail.svg rename docs/readthedocs.yml => .readthedocs.yml (66%) create mode 100644 .squash.yml create mode 100644 README.md delete mode 100644 README.rst create mode 100644 SECURITY.md create mode 100644 SPONSORS.md delete mode 100644 circle.yml delete mode 100644 client/package-lock.json delete mode 100644 client/scss/_components.scss create mode 100644 client/scss/_settings.scss delete mode 100644 client/scss/_tools.breakpoints.scss create mode 100644 client/scss/_tools.scss create mode 100644 client/scss/components/_breadcrumb.scss create mode 100644 client/scss/components/_button.scss create mode 100644 client/scss/components/_chooser.scss rename wagtail/admin/static_src/wagtailadmin/scss/components/_dropdowns.scss => client/scss/components/_dropdown.legacy.scss (56%) create mode 100644 client/scss/components/_dropdown.scss create mode 100644 client/scss/components/_footer.scss create mode 100644 client/scss/components/_forms.scss create mode 100644 client/scss/components/_grid.legacy.scss rename {wagtail/admin/static_src/wagtailadmin => client}/scss/components/_header.scss (93%) create mode 100644 client/scss/components/_help-block.scss create mode 100644 client/scss/components/_human-readable-date.scss rename {wagtail/admin/static_src/wagtailadmin => client}/scss/components/_icons.scss (87%) rename {wagtail/admin/static_src/wagtailadmin => client}/scss/components/_indicator.scss (100%) create mode 100644 client/scss/components/_link.legacy.scss rename {wagtail/admin/static_src/wagtailadmin => client}/scss/components/_listing.scss (90%) create mode 100644 client/scss/components/_loading-mask.scss rename {wagtail/admin/static_src/wagtailadmin => client}/scss/components/_logo.scss (85%) rename {wagtail/admin/static_src/wagtailadmin => client}/scss/components/_main-nav.scss (73%) create mode 100644 client/scss/components/_media-placeholder.scss create mode 100644 client/scss/components/_messages.capability.scss rename {wagtail/admin/static_src/wagtailadmin => client}/scss/components/_messages.scss (82%) create mode 100644 client/scss/components/_messages.status.scss rename {wagtail/admin/static_src/wagtailadmin => client}/scss/components/_modals.scss (65%) create mode 100644 client/scss/components/_privacy-indicator.scss rename {wagtail/admin/static_src/wagtailadmin => client}/scss/components/_progressbar.scss (100%) create mode 100644 client/scss/components/_status-tag.scss rename {wagtail/admin/static_src/wagtailadmin => client}/scss/components/_tabs.scss (84%) create mode 100644 client/scss/components/_tag.scss rename {wagtail/admin/static_src/wagtailadmin => client}/scss/components/_tooltips.scss (100%) create mode 100644 client/scss/components/browser-message.scss create mode 100644 client/scss/elements/_elements.scss create mode 100644 client/scss/elements/_forms.scss create mode 100644 client/scss/elements/_typography.scss create mode 100644 client/scss/generic/_generic.scss create mode 100644 client/scss/objects/_avatar.scss rename client/scss/{ => objects}/_objects.scss (51%) create mode 100644 client/scss/overrides/_pages.homepage.scss create mode 100644 client/scss/overrides/_pages.page-explorer.scss create mode 100644 client/scss/overrides/_utilities.dropdowns.scss create mode 100644 client/scss/overrides/_utilities.focus.scss rename client/scss/{_utilities.scss => overrides/_utilities.hidden.scss} (51%) create mode 100644 client/scss/overrides/_utilities.legacy.scss create mode 100644 client/scss/overrides/_utilities.text.legacy.scss create mode 100644 client/scss/overrides/_utilities.text.scss create mode 100644 client/scss/overrides/_utilities.visuallyhidden.scss rename wagtail/admin/static_src/wagtailadmin/scss/components/_datetimepicker.scss => client/scss/overrides/_vendor.datetimepicker.scss (96%) create mode 100644 client/scss/overrides/_vendor.tagit.scss create mode 100644 client/scss/settings/_variables.icons.scss create mode 100644 client/scss/settings/_variables.scss create mode 100644 client/scss/tools/_functions.breakpoints.scss create mode 100644 client/scss/tools/_mixins.breakpoints.scss create mode 100644 client/scss/tools/_mixins.fonts.scss rename wagtail/admin/static_src/wagtailadmin/scss/_mixins.scss => client/scss/tools/_mixins.general.scss (83%) rename wagtail/admin/static_src/wagtailadmin/scss/_grid.scss => client/scss/tools/_mixins.grid.scss (96%) delete mode 100644 client/src/cli/component.js delete mode 100755 client/src/cli/index.js create mode 100644 client/src/components/Draftail/DraftUtils.js create mode 100644 client/src/components/Draftail/DraftUtils.test.js create mode 100644 client/src/components/Draftail/EditorFallback/EditorFallback.js create mode 100644 client/src/components/Draftail/EditorFallback/EditorFallback.scss create mode 100644 client/src/components/Draftail/EditorFallback/EditorFallback.test.js create mode 100644 client/src/components/Draftail/EditorFallback/__snapshots__/EditorFallback.test.js.snap create mode 100644 client/src/components/StreamField/StreamField.scss create mode 100644 client/src/components/UpgradeNotification/index.js create mode 100644 client/src/includes/initSubmenus.js create mode 100644 client/src/utils/focus.js create mode 100644 client/src/utils/focus.test.js create mode 100644 client/src/utils/utils.test.js create mode 100644 client/src/utils/version.js delete mode 100644 client/template/README.mst delete mode 100644 client/template/component.mst delete mode 100644 client/template/component.test.mst delete mode 100644 client/template/style.mst create mode 100644 docs/_static/images/collections_add_to_collection.png create mode 100644 docs/_static/images/collections_create_collection.png create mode 100644 docs/_static/images/collections_create_collection_upload_images.png create mode 100644 docs/_static/images/collections_edit_img_view.png create mode 100644 docs/_static/images/collections_list.png create mode 100644 docs/_static/images/collections_privacy_button.png create mode 100644 docs/_static/images/collections_privacy_overlay.png create mode 100644 docs/_static/images/releasenotes_2_7_streamfield_styles.png rename docs/_static/images/{screen18_image_alignment.png => screen18_image_format.png} (100%) create mode 100644 docs/_static/js/wagtailspace.js create mode 100644 docs/advanced_topics/customisation/rich_text_internals.rst create mode 100644 docs/advanced_topics/images/changing_rich_text_representation.rst create mode 100644 docs/advanced_topics/images/image_file_formats.rst create mode 100644 docs/contributing/general_guidelines.rst create mode 100644 docs/contributing/html_guidelines.rst create mode 100644 docs/editor_manual/documents_images_snippets/collections.rst create mode 100644 docs/favicon.ico create mode 100644 docs/reference/contrib/modeladmin/tips_and_tricks/index.rst create mode 100644 docs/reference/contrib/modeladmin/tips_and_tricks/reversing_urls.rst create mode 100644 docs/releases/1.12.4.rst create mode 100644 docs/releases/1.12.5.rst create mode 100644 docs/releases/1.12.6.rst create mode 100644 docs/releases/1.13.2.rst create mode 100644 docs/releases/1.13.3.rst create mode 100644 docs/releases/1.13.4.rst create mode 100644 docs/releases/2.0.1.rst create mode 100644 docs/releases/2.0.2.rst create mode 100644 docs/releases/2.1.1.rst create mode 100644 docs/releases/2.1.2.rst create mode 100644 docs/releases/2.1.3.rst create mode 100644 docs/releases/2.1.rst create mode 100644 docs/releases/2.2.1.rst create mode 100644 docs/releases/2.2.2.rst create mode 100644 docs/releases/2.2.rst create mode 100644 docs/releases/2.3.rst create mode 100644 docs/releases/2.4.rst create mode 100644 docs/releases/2.5.1.rst create mode 100644 docs/releases/2.5.2.rst create mode 100644 docs/releases/2.5.rst create mode 100644 docs/releases/2.6.1.rst create mode 100644 docs/releases/2.6.2.rst create mode 100644 docs/releases/2.6.3.rst create mode 100644 docs/releases/2.6.rst create mode 100644 docs/releases/2.7.1.rst create mode 100644 docs/releases/2.7.2.rst create mode 100644 docs/releases/2.7.rst create mode 100644 scripts/nightly/get_version.py create mode 100644 scripts/nightly/upload.py create mode 100755 scripts/travis/install_elasticsearch6.sh create mode 100755 scripts/travis/install_elasticsearch7.sh create mode 100644 wagtail/admin/action_menu.py create mode 100644 wagtail/admin/auth.py delete mode 100644 wagtail/admin/forms.py create mode 100644 wagtail/admin/forms/__init__.py create mode 100644 wagtail/admin/forms/auth.py create mode 100644 wagtail/admin/forms/choosers.py create mode 100644 wagtail/admin/forms/collections.py create mode 100644 wagtail/admin/forms/models.py create mode 100644 wagtail/admin/forms/pages.py create mode 100644 wagtail/admin/forms/search.py create mode 100644 wagtail/admin/forms/view_restrictions.py create mode 100644 wagtail/admin/locale/af/LC_MESSAGES/django.mo create mode 100644 wagtail/admin/locale/af/LC_MESSAGES/django.po create mode 100644 wagtail/admin/locale/be/LC_MESSAGES/django.mo create mode 100644 wagtail/admin/locale/be/LC_MESSAGES/django.po create mode 100644 wagtail/admin/locale/da/LC_MESSAGES/django.po create mode 100644 wagtail/admin/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/admin/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/admin/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/admin/locale/th/LC_MESSAGES/django.po delete mode 100644 wagtail/admin/locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 wagtail/admin/locale/zh_Hans/LC_MESSAGES/django.mo rename wagtail/admin/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (77%) create mode 100644 wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/admin/localization.py create mode 100644 wagtail/admin/mail.py delete mode 100755 wagtail/admin/static_src/wagtailadmin/fonts/opensans-bold.ttf delete mode 100755 wagtail/admin/static_src/wagtailadmin/fonts/opensans-bolditalic.ttf delete mode 100755 wagtail/admin/static_src/wagtailadmin/fonts/opensans-italic.ttf delete mode 100755 wagtail/admin/static_src/wagtailadmin/fonts/opensans-light.ttf delete mode 100755 wagtail/admin/static_src/wagtailadmin/fonts/opensans-lightitalic.ttf delete mode 100755 wagtail/admin/static_src/wagtailadmin/fonts/opensans-regular.ttf delete mode 100755 wagtail/admin/static_src/wagtailadmin/fonts/opensans-semibold.ttf delete mode 100755 wagtail/admin/static_src/wagtailadmin/fonts/opensans-semibolditalic.ttf delete mode 100755 wagtail/admin/static_src/wagtailadmin/fonts/robotoslab-bold.ttf delete mode 100755 wagtail/admin/static_src/wagtailadmin/fonts/robotoslab-regular.ttf mode change 100755 => 100644 wagtail/admin/static_src/wagtailadmin/fonts/wagtail-icomoon.json delete mode 100755 wagtail/admin/static_src/wagtailadmin/fonts/wagtail.eot delete mode 100755 wagtail/admin/static_src/wagtailadmin/fonts/wagtail.svg delete mode 100755 wagtail/admin/static_src/wagtailadmin/fonts/wagtail.ttf create mode 100644 wagtail/admin/static_src/wagtailadmin/images/default-user-avatar.png create mode 100644 wagtail/admin/static_src/wagtailadmin/js/date-time-chooser.js create mode 100644 wagtail/admin/static_src/wagtailadmin/js/page-chooser-modal.js create mode 100644 wagtail/admin/static_src/wagtailadmin/js/page-editor.test.js delete mode 100644 wagtail/admin/static_src/wagtailadmin/js/submenu.js delete mode 100644 wagtail/admin/static_src/wagtailadmin/js/upgrade_notify.js delete mode 100644 wagtail/admin/static_src/wagtailadmin/scss/_font-icons.scss delete mode 100644 wagtail/admin/static_src/wagtailadmin/scss/_fonts.scss create mode 100644 wagtail/admin/static_src/wagtailadmin/scss/_helpers.scss delete mode 100644 wagtail/admin/static_src/wagtailadmin/scss/_variables-icons.scss delete mode 100644 wagtail/admin/static_src/wagtailadmin/scss/_variables.scss delete mode 100644 wagtail/admin/static_src/wagtailadmin/scss/components/_formatters.scss delete mode 100644 wagtail/admin/static_src/wagtailadmin/scss/components/_forms.scss delete mode 100644 wagtail/admin/static_src/wagtailadmin/scss/components/_streamfield.scss delete mode 100644 wagtail/admin/static_src/wagtailadmin/scss/components/_typography.scss create mode 100644 wagtail/admin/static_src/wagtailadmin/scss/panels/streamfield.scss create mode 100644 wagtail/admin/staticfiles.py create mode 100644 wagtail/admin/templates/wagtailadmin/account/change_avatar.html create mode 100644 wagtail/admin/templates/wagtailadmin/account/change_email.html create mode 100644 wagtail/admin/templates/wagtailadmin/account/change_name.html create mode 100644 wagtail/admin/templates/wagtailadmin/account/current_time_zone.html create mode 100644 wagtail/admin/templates/wagtailadmin/chooser/anchor_link.html delete mode 100644 wagtail/admin/templates/wagtailadmin/chooser/browse.js delete mode 100644 wagtail/admin/templates/wagtailadmin/chooser/email_link.js delete mode 100644 wagtail/admin/templates/wagtailadmin/chooser/external_link.js delete mode 100644 wagtail/admin/templates/wagtailadmin/chooser/external_link_chosen.js create mode 100644 wagtail/admin/templates/wagtailadmin/chooser/phone_link.html delete mode 100644 wagtail/admin/templates/wagtailadmin/collection_privacy/set_privacy.js delete mode 100644 wagtail/admin/templates/wagtailadmin/collection_privacy/set_privacy_done.js create mode 100644 wagtail/admin/templates/wagtailadmin/edit_handlers/help_panel.html delete mode 100644 wagtail/admin/templates/wagtailadmin/page_privacy/set_privacy.js delete mode 100644 wagtail/admin/templates/wagtailadmin/page_privacy/set_privacy_done.js create mode 100644 wagtail/admin/templates/wagtailadmin/pages/_edit_switches.html create mode 100644 wagtail/admin/templates/wagtailadmin/pages/action_menu/menu.html create mode 100644 wagtail/admin/templates/wagtailadmin/pages/action_menu/menu_item.html create mode 100644 wagtail/admin/templates/wagtailadmin/pages/action_menu/page_locked.html create mode 100644 wagtail/admin/templates/wagtailadmin/pages/action_menu/publish.html create mode 100644 wagtail/admin/templates/wagtailadmin/pages/action_menu/save_draft.html create mode 100644 wagtail/admin/templates/wagtailadmin/pages/listing/_page_parent_page_title_choose.html create mode 100644 wagtail/admin/templates/wagtailadmin/shared/ajax_pagination_nav.html delete mode 100644 wagtail/admin/templates/wagtailadmin/shared/datetimepicker_translations.html create mode 100644 wagtail/admin/templates/wagtailadmin/shared/icon.html create mode 100644 wagtail/admin/templates/wagtailadmin/shared/wagtail_icon.html create mode 100644 wagtail/admin/templates/wagtailadmin/widgets/auto_height_text_input.html create mode 100644 wagtail/admin/templates/wagtailadmin/widgets/date_input.html create mode 100644 wagtail/admin/templates/wagtailadmin/widgets/datetime_input.html create mode 100644 wagtail/admin/templates/wagtailadmin/widgets/draftail_rich_text_area.html create mode 100644 wagtail/admin/templates/wagtailadmin/widgets/hallo_rich_text_area.html create mode 100644 wagtail/admin/templates/wagtailadmin/widgets/tag_widget.html create mode 100644 wagtail/admin/templates/wagtailadmin/widgets/time_input.html delete mode 100644 wagtail/admin/templatetags/gravatar.py create mode 100644 wagtail/admin/templatetags/wagtailui_tags.py create mode 100644 wagtail/admin/tests/benches.py create mode 100644 wagtail/admin/tests/pages/__init__.py create mode 100644 wagtail/admin/tests/pages/test_content_type_use_view.py create mode 100644 wagtail/admin/tests/pages/test_copy_page.py create mode 100644 wagtail/admin/tests/pages/test_create_page.py create mode 100644 wagtail/admin/tests/pages/test_dashboard.py create mode 100644 wagtail/admin/tests/pages/test_delete_page.py create mode 100644 wagtail/admin/tests/pages/test_edit_page.py create mode 100644 wagtail/admin/tests/pages/test_explorer_view.py create mode 100644 wagtail/admin/tests/pages/test_moderation.py create mode 100644 wagtail/admin/tests/pages/test_move_page.py create mode 100644 wagtail/admin/tests/pages/test_page_locking.py create mode 100644 wagtail/admin/tests/pages/test_page_search.py create mode 100644 wagtail/admin/tests/pages/test_preview.py create mode 100644 wagtail/admin/tests/pages/test_revisions.py create mode 100644 wagtail/admin/tests/pages/test_unpublish_page.py create mode 100644 wagtail/admin/tests/pages/test_view_draft.py create mode 100644 wagtail/admin/tests/pages/timestamps.py create mode 100644 wagtail/admin/tests/test_moderation_list.py delete mode 100644 wagtail/admin/tests/test_pages_views.py create mode 100644 wagtail/admin/tests/test_site_summary.py create mode 100644 wagtail/admin/tests/test_templatetags.py create mode 100644 wagtail/admin/tests/test_views.py create mode 100644 wagtail/contrib/forms/locale/mn/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/forms/locale/mn/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/forms/locale/my/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/forms/locale/my/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/forms/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/forms/locale/th/LC_MESSAGES/django.po delete mode 100644 wagtail/contrib/forms/locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/forms/locale/zh_Hans/LC_MESSAGES/django.mo rename wagtail/contrib/forms/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (89%) create mode 100644 wagtail/contrib/forms/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/forms/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/modeladmin/helpers/search.py create mode 100644 wagtail/contrib/modeladmin/locale/id_ID/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/modeladmin/locale/id_ID/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/modeladmin/locale/ja/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/modeladmin/locale/ja/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/modeladmin/locale/mn/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/modeladmin/locale/mn/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/modeladmin/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/modeladmin/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/modeladmin/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/modeladmin/locale/th/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/modeladmin/locale/uk/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/modeladmin/locale/uk/LC_MESSAGES/django.po delete mode 100644 wagtail/contrib/modeladmin/locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/modeladmin/locale/zh_Hans/LC_MESSAGES/django.mo rename wagtail/contrib/modeladmin/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (86%) create mode 100644 wagtail/contrib/modeladmin/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/modeladmin/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/modeladmin/static_src/wagtailmodeladmin/scss/breadcrumbs_page.scss create mode 100644 wagtail/contrib/modeladmin/templates/modeladmin/includes/header_with_breadcrumb.html create mode 100644 wagtail/contrib/modeladmin/tests/test_modeladmin_edit_handlers.py create mode 100644 wagtail/contrib/modeladmin/tests/test_search_handlers.py create mode 100644 wagtail/contrib/postgres_search/migrations/0002_add_autocomplete.py create mode 100644 wagtail/contrib/postgres_search/tests/test_stemming.py create mode 100644 wagtail/contrib/redirects/locale/mn/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/redirects/locale/mn/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/redirects/locale/my/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/redirects/locale/my/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/redirects/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/redirects/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/redirects/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/redirects/locale/th/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/redirects/locale/uk/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/redirects/locale/uk/LC_MESSAGES/django.po rename wagtail/contrib/redirects/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.mo (54%) rename wagtail/contrib/redirects/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (89%) create mode 100644 wagtail/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/redirects/migrations/0006_redirect_increase_max_length.py create mode 100644 wagtail/contrib/search_promotions/locale/be/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/search_promotions/locale/be/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/search_promotions/locale/mn/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/search_promotions/locale/mn/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/search_promotions/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/search_promotions/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/search_promotions/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/search_promotions/locale/th/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/search_promotions/locale/uk/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/search_promotions/locale/uk/LC_MESSAGES/django.po rename wagtail/contrib/search_promotions/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.mo (69%) rename wagtail/contrib/search_promotions/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (93%) create mode 100644 wagtail/contrib/search_promotions/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/search_promotions/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/settings/locale/be/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/settings/locale/be/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/settings/locale/hr_HR/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/settings/locale/hr_HR/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/settings/locale/ja/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/settings/locale/ja/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/settings/locale/mn/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/settings/locale/mn/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/settings/locale/my/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/settings/locale/my/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/settings/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/settings/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/settings/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/settings/locale/th/LC_MESSAGES/django.po delete mode 100644 wagtail/contrib/settings/locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/settings/locale/zh_Hans/LC_MESSAGES/django.mo rename wagtail/contrib/settings/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (67%) create mode 100644 wagtail/contrib/settings/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/settings/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/styleguide/locale/be/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/styleguide/locale/be/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/styleguide/locale/mn/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/styleguide/locale/mn/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/styleguide/locale/my/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/styleguide/locale/my/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/styleguide/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/styleguide/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/styleguide/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/styleguide/locale/th/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/styleguide/locale/uk/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/styleguide/locale/uk/LC_MESSAGES/django.po delete mode 100644 wagtail/contrib/styleguide/locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/styleguide/locale/zh_Hans/LC_MESSAGES/django.mo rename wagtail/contrib/styleguide/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (80%) create mode 100644 wagtail/contrib/styleguide/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/styleguide/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/table_block/locale/ar/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/table_block/locale/ar/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/table_block/locale/be/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/table_block/locale/be/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/table_block/locale/cs/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/table_block/locale/cs/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/table_block/locale/id_ID/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/table_block/locale/id_ID/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/table_block/locale/ja/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/table_block/locale/ja/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/table_block/locale/mn/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/table_block/locale/mn/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/table_block/locale/my/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/table_block/locale/my/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/table_block/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/table_block/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/table_block/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/table_block/locale/th/LC_MESSAGES/django.po create mode 100644 wagtail/contrib/table_block/locale/uk/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/table_block/locale/uk/LC_MESSAGES/django.po delete mode 100644 wagtail/contrib/table_block/locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/table_block/locale/zh_Hans/LC_MESSAGES/django.mo rename wagtail/contrib/table_block/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (61%) create mode 100644 wagtail/contrib/table_block/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/contrib/table_block/locale/zh_Hant/LC_MESSAGES/django.po delete mode 100755 wagtail/contrib/table_block/static/table_block/css/vendor/handsontable-0.24.2.full.min.css create mode 100644 wagtail/contrib/table_block/static/table_block/css/vendor/handsontable-6.2.2.full.min.css delete mode 100755 wagtail/contrib/table_block/static/table_block/js/vendor/handsontable-0.24.2.full.min.js create mode 100644 wagtail/contrib/table_block/static/table_block/js/vendor/handsontable-6.2.2.full.min.js create mode 100644 wagtail/contrib/table_block/templatetags/__init__.py create mode 100644 wagtail/contrib/table_block/templatetags/table_block_tags.py create mode 100644 wagtail/core/locale/mn/LC_MESSAGES/django.mo create mode 100644 wagtail/core/locale/mn/LC_MESSAGES/django.po create mode 100644 wagtail/core/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/core/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/core/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/core/locale/th/LC_MESSAGES/django.po delete mode 100644 wagtail/core/locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 wagtail/core/locale/zh_Hans/LC_MESSAGES/django.mo rename wagtail/core/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (91%) create mode 100644 wagtail/core/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/core/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/core/migrations/0041_group_collection_permissions_verbose_name_plural.py create mode 100644 wagtail/core/migrations/0043_merge_20200415_1543.py create mode 100644 wagtail/documents/locale/be/LC_MESSAGES/django.mo create mode 100644 wagtail/documents/locale/be/LC_MESSAGES/django.po create mode 100644 wagtail/documents/locale/da/LC_MESSAGES/django.mo create mode 100644 wagtail/documents/locale/da/LC_MESSAGES/django.po create mode 100644 wagtail/documents/locale/mn/LC_MESSAGES/django.mo create mode 100644 wagtail/documents/locale/mn/LC_MESSAGES/django.po create mode 100644 wagtail/documents/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/documents/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/documents/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/documents/locale/th/LC_MESSAGES/django.po create mode 100644 wagtail/documents/locale/uk/LC_MESSAGES/django.mo create mode 100644 wagtail/documents/locale/uk/LC_MESSAGES/django.po delete mode 100644 wagtail/documents/locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 wagtail/documents/locale/zh_Hans/LC_MESSAGES/django.mo rename wagtail/documents/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (76%) create mode 100644 wagtail/documents/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/documents/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/documents/migrations/0008_document_file_size.py create mode 100644 wagtail/documents/migrations/0009_document_verbose_name_plural.py create mode 100644 wagtail/documents/migrations/0010_document_file_hash.py create mode 100644 wagtail/documents/rich_text/__init__.py rename wagtail/documents/{rich_text.py => rich_text/contentstate.py} (56%) create mode 100644 wagtail/documents/rich_text/editor_html.py create mode 100644 wagtail/documents/static_src/wagtaildocs/js/document-chooser-modal.js delete mode 100644 wagtail/documents/templates/wagtaildocs/chooser/chooser.js delete mode 100644 wagtail/documents/templates/wagtaildocs/chooser/document_chosen.js create mode 100644 wagtail/documents/tests/test_document_chooser.py create mode 100644 wagtail/documents/tests/utils.py create mode 100644 wagtail/embeds/locale/id_ID/LC_MESSAGES/django.mo create mode 100644 wagtail/embeds/locale/id_ID/LC_MESSAGES/django.po create mode 100644 wagtail/embeds/locale/my/LC_MESSAGES/django.mo create mode 100644 wagtail/embeds/locale/my/LC_MESSAGES/django.po create mode 100644 wagtail/embeds/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/embeds/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/embeds/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/embeds/locale/th/LC_MESSAGES/django.po create mode 100644 wagtail/embeds/locale/uk/LC_MESSAGES/django.mo create mode 100644 wagtail/embeds/locale/uk/LC_MESSAGES/django.po delete mode 100644 wagtail/embeds/locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 wagtail/embeds/locale/zh_Hans/LC_MESSAGES/django.mo rename wagtail/embeds/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (80%) create mode 100644 wagtail/embeds/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/embeds/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/embeds/migrations/0004_embed_verbose_name_plural.py create mode 100644 wagtail/embeds/migrations/0005_specify_thumbnail_url_max_length.py create mode 100644 wagtail/embeds/rich_text/__init__.py rename wagtail/embeds/{rich_text.py => rich_text/contentstate.py} (51%) create mode 100644 wagtail/embeds/rich_text/editor_html.py create mode 100644 wagtail/embeds/static_src/wagtailembeds/js/embed-chooser-modal.js delete mode 100644 wagtail/embeds/templates/wagtailembeds/chooser/chooser.js delete mode 100644 wagtail/embeds/templates/wagtailembeds/chooser/embed_chosen.js create mode 100644 wagtail/embeds/tests/__init__.py rename wagtail/embeds/{tests.py => tests/test_embeds.py} (80%) create mode 100644 wagtail/embeds/tests/test_rich_text.py create mode 100644 wagtail/images/locale/hy/LC_MESSAGES/django.mo create mode 100644 wagtail/images/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/images/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/images/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/images/locale/th/LC_MESSAGES/django.po create mode 100644 wagtail/images/locale/uk/LC_MESSAGES/django.mo create mode 100644 wagtail/images/locale/uk/LC_MESSAGES/django.po delete mode 100644 wagtail/images/locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 wagtail/images/locale/zh_Hans/LC_MESSAGES/django.mo rename wagtail/images/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (83%) create mode 100644 wagtail/images/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/images/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/images/migrations/0020_add-verbose-name.py create mode 100644 wagtail/images/migrations/0021_image_file_hash.py create mode 100644 wagtail/images/migrations/0023_merge_20200415_1549.py delete mode 100644 wagtail/images/rich_text.py create mode 100644 wagtail/images/rich_text/__init__.py create mode 100644 wagtail/images/rich_text/contentstate.py create mode 100644 wagtail/images/rich_text/editor_html.py create mode 100644 wagtail/images/static_src/wagtailimages/js/image-chooser-modal.js delete mode 100644 wagtail/images/templates/wagtailimages/chooser/chooser.js delete mode 100644 wagtail/images/templates/wagtailimages/chooser/image_chosen.js delete mode 100644 wagtail/images/templates/wagtailimages/chooser/select_format.js delete mode 100644 wagtail/images/templates/wagtailimages/chooser/select_rendition.js create mode 100644 wagtail/project_template/home/static/css/welcome_page.css create mode 100644 wagtail/project_template/home/templates/home/welcome_page.html create mode 100644 wagtail/search/.gitignore create mode 100644 wagtail/search/backends/elasticsearch6.py create mode 100644 wagtail/search/backends/elasticsearch7.py create mode 100644 wagtail/search/locale/be/LC_MESSAGES/django.mo create mode 100644 wagtail/search/locale/be/LC_MESSAGES/django.po create mode 100644 wagtail/search/locale/my/LC_MESSAGES/django.mo create mode 100644 wagtail/search/locale/my/LC_MESSAGES/django.po create mode 100644 wagtail/search/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/search/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/search/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/search/locale/th/LC_MESSAGES/django.po rename wagtail/search/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.mo (56%) rename wagtail/search/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (86%) create mode 100644 wagtail/search/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/search/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/search/management/commands/wagtail_update_index.py create mode 100644 wagtail/search/migrations/0004_querydailyhits_verbose_name_plural.py create mode 100644 wagtail/search/static_src/wagtailsearch/js/query-chooser-modal.js delete mode 100644 wagtail/search/templates/wagtailsearch/queries/chooser/chooser.js create mode 100644 wagtail/search/tests/test_elasticsearch6_backend.py create mode 100644 wagtail/search/tests/test_elasticsearch7_backend.py delete mode 100644 wagtail/search/tests/test_frontend.py delete mode 100644 wagtail/search/urls/frontend.py delete mode 100644 wagtail/search/views/frontend.py create mode 100644 wagtail/sites/locale/be/LC_MESSAGES/django.mo create mode 100644 wagtail/sites/locale/be/LC_MESSAGES/django.po create mode 100644 wagtail/sites/locale/mn/LC_MESSAGES/django.mo create mode 100644 wagtail/sites/locale/mn/LC_MESSAGES/django.po create mode 100644 wagtail/sites/locale/my/LC_MESSAGES/django.mo create mode 100644 wagtail/sites/locale/my/LC_MESSAGES/django.po create mode 100644 wagtail/sites/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/sites/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/sites/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/sites/locale/th/LC_MESSAGES/django.po create mode 100644 wagtail/sites/locale/uk/LC_MESSAGES/django.mo create mode 100644 wagtail/sites/locale/uk/LC_MESSAGES/django.po rename wagtail/sites/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.mo (50%) rename wagtail/sites/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (88%) create mode 100644 wagtail/sites/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/sites/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/snippets/locale/be/LC_MESSAGES/django.mo create mode 100644 wagtail/snippets/locale/be/LC_MESSAGES/django.po create mode 100644 wagtail/snippets/locale/mn/LC_MESSAGES/django.mo create mode 100644 wagtail/snippets/locale/mn/LC_MESSAGES/django.po create mode 100644 wagtail/snippets/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/snippets/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/snippets/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/snippets/locale/th/LC_MESSAGES/django.po create mode 100644 wagtail/snippets/locale/uk/LC_MESSAGES/django.mo create mode 100644 wagtail/snippets/locale/uk/LC_MESSAGES/django.po delete mode 100644 wagtail/snippets/locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 wagtail/snippets/locale/zh_Hans/LC_MESSAGES/django.mo rename wagtail/snippets/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (62%) create mode 100644 wagtail/snippets/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/snippets/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/snippets/static_src/wagtailsnippets/js/snippet-chooser-modal.js create mode 100644 wagtail/snippets/static_src/wagtailsnippets/js/snippet-multiple-select.js delete mode 100644 wagtail/snippets/templates/wagtailsnippets/chooser/choose.js delete mode 100644 wagtail/snippets/templates/wagtailsnippets/chooser/chosen.js create mode 100644 wagtail/tests/benchmark.py create mode 100644 wagtail/tests/middleware.py create mode 100644 wagtail/tests/modeladmintest/migrations/0006_contributor_person_visitor.py create mode 100644 wagtail/tests/modeladmintest/migrations/0007_friend.py create mode 100644 wagtail/tests/modeladmintest/migrations/0008_solobook.py delete mode 100644 wagtail/tests/testapp/migrations/0005_streampage.py create mode 100644 wagtail/tests/testapp/migrations/0030_formclassadditionalfieldpage.py create mode 100644 wagtail/tests/testapp/migrations/0031_customdocument_file_size.py create mode 100644 wagtail/tests/testapp/migrations/0032_auto_20180505_0008.py create mode 100644 wagtail/tests/testapp/migrations/0033_eventpagespeaker_related_query_name.py create mode 100644 wagtail/tests/testapp/migrations/0034_advertwithuuidcustomprimarykey.py create mode 100644 wagtail/tests/testapp/migrations/0035_streamfieldmigrationmodels.py create mode 100644 wagtail/tests/testapp/migrations/0036_streamfieldmigrationmodels_add_field.py create mode 100644 wagtail/tests/testapp/migrations/0037_customdocument_verbose_name_plural.py create mode 100644 wagtail/tests/testapp/migrations/0038_singletonpageviamaxcount.py create mode 100644 wagtail/tests/testapp/migrations/0039_customdocument_description.py create mode 100644 wagtail/tests/testapp/migrations/0040_customdocument_file_hash.py create mode 100644 wagtail/tests/testapp/migrations/0041_secretpage.py create mode 100644 wagtail/tests/testapp/migrations/0042_simplechildpage_simpleparentpage.py create mode 100644 wagtail/tests/testapp/migrations/0043_customdocument_fancy_description.py create mode 100644 wagtail/tests/testapp/migrations/0044_auto_20200415_1544.py create mode 100644 wagtail/tests/testapp/migrations/0044_rawhtmlblock.py create mode 100644 wagtail/tests/urls_multilang.py create mode 100644 wagtail/users/locale/be/LC_MESSAGES/django.mo create mode 100644 wagtail/users/locale/be/LC_MESSAGES/django.po create mode 100644 wagtail/users/locale/hy/LC_MESSAGES/django.mo create mode 100644 wagtail/users/locale/hy/LC_MESSAGES/django.po create mode 100644 wagtail/users/locale/mn/LC_MESSAGES/django.mo create mode 100644 wagtail/users/locale/mn/LC_MESSAGES/django.po create mode 100644 wagtail/users/locale/my/LC_MESSAGES/django.mo create mode 100644 wagtail/users/locale/my/LC_MESSAGES/django.po create mode 100644 wagtail/users/locale/tet/LC_MESSAGES/django.mo create mode 100644 wagtail/users/locale/tet/LC_MESSAGES/django.po create mode 100644 wagtail/users/locale/th/LC_MESSAGES/django.mo create mode 100644 wagtail/users/locale/th/LC_MESSAGES/django.po delete mode 100644 wagtail/users/locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 wagtail/users/locale/zh_Hans/LC_MESSAGES/django.mo rename wagtail/users/locale/{zh_CN => zh_Hans}/LC_MESSAGES/django.po (85%) create mode 100644 wagtail/users/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 wagtail/users/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 wagtail/users/migrations/0007_userprofile_current_time_zone.py create mode 100644 wagtail/users/migrations/0008_userprofile_avatar.py create mode 100644 wagtail/users/migrations/0009_userprofile_verbose_name_plural.py create mode 100644 wagtail/utils/l18n/CHANGES.rst create mode 100644 wagtail/utils/l18n/CONTRIBUTORS.rst create mode 100644 wagtail/utils/l18n/LICENSE.txt create mode 100644 wagtail/utils/l18n/README.rst create mode 100644 wagtail/utils/l18n/__init__.py create mode 100644 wagtail/utils/l18n/__maps.py create mode 100644 wagtail/utils/l18n/locale/cs/LC_MESSAGES/l18n.mo create mode 100644 wagtail/utils/l18n/locale/de/LC_MESSAGES/l18n.mo create mode 100644 wagtail/utils/l18n/locale/en/LC_MESSAGES/l18n.mo create mode 100644 wagtail/utils/l18n/locale/fr/LC_MESSAGES/l18n.mo create mode 100644 wagtail/utils/l18n/locale/zh/LC_MESSAGES/l18n.mo create mode 100644 wagtail/utils/l18n/maps.py create mode 100644 wagtail/utils/l18n/translation.py create mode 100644 wagtail/utils/l18n/utils.py create mode 100644 wagtail/utils/l18n/version.py delete mode 100644 wagtail/utils/pagination.py diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000000..9ab1bf3469d --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,81 @@ +version: 2 + +jobs: + backend: + docker: + - image: circleci/python:3.6.4 + steps: + - checkout + - restore_cache: + keys: + - pip-packages-v1-{{ .Branch }} + - pip-packages-v1- + - run: pipenv install -e .[testing] + - save_cache: + paths: + - ~/.local/ + key: pip-package-v1-{{ .Branch }} + - run: pipenv run flake8 wagtail + - run: pipenv run isort --check-only --diff --recursive wagtail + # Filter out known false positives, while preserving normal output and error codes. + # See https://github.com/motet-a/jinjalint/issues/18. + # And https://circleci.com/docs/2.0/configuration-reference/#default-shell-options. + - run: + shell: /bin/bash -e + command: pipenv run jinjalint --parse-only wagtail | grep -v 'welcome_page.html:6:70' | tee /dev/tty | wc -l | grep -q '0' + - run: DATABASE_NAME=wagtail.db pipenv run python -u runtests.py + + frontend: + docker: + - image: circleci/node:8.11.3 + steps: + - checkout + - restore_cache: + keys: + - node-v1-{{ .Branch }}-{{ checksum "package-lock.json" }} + - node-v1-{{ .Branch }}- + - node-v1- + - run: npm install --no-save + - save_cache: + paths: + - ~/project/node_modules/ + key: node-v1-{{ .Branch }}-{{ checksum "package-lock.json" }} + - run: npm run lint:js + - run: npm run lint:css + - run: npm run test:unit:coverage -- --runInBand + - run: npm rebuild node-sass + - run: npm run dist + - run: bash <(curl -s https://codecov.io/bash) -F frontend + + nightly-build: + docker: + - image: circleci/python:3.7.3 + steps: + - checkout + - run: cd ~ && wget https://nodejs.org/dist/v8.7.0/node-v8.7.0-linux-x64.tar.gz + - run: cd /usr/local/ && sudo tar --strip-components 1 -xzf ~/node-v8.7.0-linux-x64.tar.gz + - run: pip install --user wheel boto3 + - run: npm install + - run: npm run dist + - run: PYTHONPATH=. python scripts/nightly/get_version.py > __init__.py + - run: mv __init__.py wagtail/__init__.py + - run: python setup.py bdist_wheel + - run: python scripts/nightly/upload.py + +workflows: + version: 2 + test: + jobs: + - backend + - frontend + + nightly: + jobs: + - nightly-build + triggers: + - schedule: + cron: "0 0 * * *" + filters: + branches: + only: + - master diff --git a/.circleci/trigger-nightly-build.sh b/.circleci/trigger-nightly-build.sh new file mode 100755 index 00000000000..3e2381cb4c2 --- /dev/null +++ b/.circleci/trigger-nightly-build.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# Triggers a nightly build for the latest commit on master +# Use this for testing changes to the nightly release process +# Call with the CIRCLE_API_USER_TOKEN set to your Personal API key +# You can find this under User Settings on Circle CI + +curl -u ${CIRCLE_API_USER_TOKEN}: \ + -d build_parameters[CIRCLE_JOB]=nightly-build \ + https://circleci.com/api/v1.1/project/github/wagtail/wagtail/tree/master diff --git a/.coveragerc b/.coveragerc index 5713778546d..e2e7969b81c 100644 --- a/.coveragerc +++ b/.coveragerc @@ -6,6 +6,7 @@ source = wagtail omit = */migrations/* + docs/conf.py [report] diff --git a/.eslintignore b/.eslintignore index cfadd5e8be6..87b4c4a9521 100644 --- a/.eslintignore +++ b/.eslintignore @@ -6,28 +6,13 @@ coverage/ gulp/ **/vendor/ gulpfile.js -client/src/cli wagtail/admin/static wagtail/documents/static wagtail/images/static wagtail/embeds/static +wagtail/search/static wagtail/snippets/static wagtail/users/static wagtail/admin/templates/wagtailadmin/edit_handlers/inline_panel.js wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/includes/searchpromotions_formset.js wagtail/users/templates/wagtailusers/groups/includes/page_permissions_formset.js -wagtail/snippets/templates/wagtailsnippets/chooser/chosen.js -wagtail/images/templates/wagtailimages/chooser/image_chosen.js -wagtail/images/templates/wagtailimages/chooser/chooser.js -wagtail/search/templates/wagtailsearch/queries/chooser/chooser.js -wagtail/images/templates/wagtailimages/chooser/select_format.js -wagtail/embeds/templates/wagtailembeds/chooser/embed_chosen.js -wagtail/embeds/templates/wagtailembeds/chooser/chooser.js -wagtail/documents/templates/wagtaildocs/chooser/chooser.js -wagtail/documents/templates/wagtaildocs/chooser/document_chosen.js -wagtail/admin/templates/wagtailadmin/page_privacy/set_privacy.js -wagtail/admin/templates/wagtailadmin/chooser/external_link_chosen.js -wagtail/admin/templates/wagtailadmin/chooser/external_link.js -wagtail/admin/templates/wagtailadmin/chooser/email_link.js -wagtail/admin/templates/wagtailadmin/chooser/browse.js -wagtail/admin/templates/wagtailadmin/page_privacy/set_privacy_done.js diff --git a/.eslintrc b/.eslintrc index 8034dc2c22e..f26ed0f8d28 100644 --- a/.eslintrc +++ b/.eslintrc @@ -11,5 +11,9 @@ "config": "client/webpack/prod.config.js" } } + }, + + "rules": { + "no-underscore-dangle": ["error", { "allow": ["__REDUX_DEVTOOLS_EXTENSION__"] }] } } diff --git a/CONTRIBUTING.md b/.github/CONTRIBUTING.md similarity index 100% rename from CONTRIBUTING.md rename to .github/CONTRIBUTING.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE/BUG_REPORT.md similarity index 62% rename from .github/ISSUE_TEMPLATE.md rename to .github/ISSUE_TEMPLATE/BUG_REPORT.md index 3e0d7496188..fb0a0a6399d 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.md @@ -1,12 +1,20 @@ +--- +name: "🐞 Bug Report" +about: Create a report to help us improve +title: '' +labels: 'type:Bug' +assignees: '' + +--- + Found a bug? Please fill out the sections below. 👍 ### Issue Summary A summary of the issue. -### Steps to Reproduce -It's essential that you provide enough information for someone else to replicate the problem you're seeing. Simply describing something that's broken on your current project is not enough! +### Steps to Reproduce 1. (for example) Start a new project with `wagtail start myproject` 2. Edit models.py as follows... @@ -14,9 +22,12 @@ It's essential that you provide enough information for someone else to replicate Any other relevant information. For example, why do you consider this a bug and what did you expect to happen instead? +* I have confirmed that this issue can be reproduced as described on a fresh Wagtail project: (yes / no) + + ### Technical details * Python version: Run `python --version`. * Django version: Look in your requirements.txt, or run `pip show django | grep Version`. -* Wagtail version: Hover over the Wagtail bird in the admin, or run `pip show wagtail | grep Version:`. +* Wagtail version: Look at the bottom of the Settings menu in the Wagtail admin, or run `pip show wagtail | grep Version:`. * Browser version: You can use http://www.whatsmybrowser.org/ to find this out. diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md new file mode 100644 index 00000000000..260f6a11dd1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md @@ -0,0 +1,42 @@ +--- +name: "🚀 Feature request" +about: Suggest an idea for improving Wagtail +title: '' +labels: 'type:Enhancement' +assignees: '' + +--- + +### Is your proposal related to a problem? + + + +(Write your answer here.) + +### Describe the solution you'd like + + + +(Describe your proposed solution here.) + +### Describe alternatives you've considered + + + +(Write your answer here.) + +### Additional context + + + +(Write your answer here.) diff --git a/.github/ISSUE_TEMPLATE/QUESTION.md b/.github/ISSUE_TEMPLATE/QUESTION.md new file mode 100644 index 00000000000..2a67eb3dab0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/QUESTION.md @@ -0,0 +1,16 @@ +--- +name: "⛔ Question" +about: Please use StackOverflow or Slack for support +title: '' +labels: '' +assignees: '' + +--- + +Please do not use GitHub for asking questions. Instead, if you have a general question about Wagtail or about building a site with Wagtail we encourage you to post on our Slack workspace instead of this issue tracker: https://github.com/wagtail/wagtail/wiki/Slack. The maintainers and other community members can provide help and answer your questions there. + +Please keep in mind that many of Wagtail's core and expert developers prefer to handle support queries through [Stack Overflow](https://stackoverflow.com/questions/tagged/wagtail), since the non-realtime format encourages more structured and fully-formed questions. Asking questions on Stack Overflow requires more up-front effort (see Stack Overflow's advice on how to ask a good question), but you may well find you get a better response as a result. + +If you've discovered a bug or would like to propose a change please use one of the other issue templates. + +Thanks! diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d6fffb30206..f291ac1fffa 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -5,4 +5,5 @@ Before submitting, please review the contributor guidelines \ No newline at end of file diff --git a/.github/wagtail-screenshot-with-browser.png b/.github/wagtail-screenshot-with-browser.png new file mode 100644 index 0000000000000000000000000000000000000000..f646fe167476d00ce7d57e0ec88631f427b9b6ca GIT binary patch literal 450644 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%0AeNJylOjcKyvk{4f_6CJL#+b=Fllvz%O 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 Y&h0BJmDqje`wy_?1?%%TQ;+-q1xrb%7 literal 0 HcmV?d00001 diff --git a/.github/wagtail.svg b/.github/wagtail.svg new file mode 100644 index 00000000000..84b04b9b6cc --- /dev/null +++ b/.github/wagtail.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore index 4aeb88bed39..6879e6fe99e 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,8 @@ npm-debug.log* *.idea/ /*.egg/ +/.cache/ +/.pytest_cache/ ### JetBrains .idea/ @@ -21,3 +23,6 @@ npm-debug.log* *.iws coverage/ client/node_modules + +### vscode +.vscode diff --git a/docs/readthedocs.yml b/.readthedocs.yml similarity index 66% rename from docs/readthedocs.yml rename to .readthedocs.yml index ec774c7203e..893e91364f7 100644 --- a/docs/readthedocs.yml +++ b/.readthedocs.yml @@ -1,3 +1,4 @@ python: version: 3.5 pip_install: true +requirements_file: null diff --git a/.squash.yml b/.squash.yml new file mode 100644 index 00000000000..9a0721594fa --- /dev/null +++ b/.squash.yml @@ -0,0 +1,23 @@ +deployments: + default: + dockerimage: python:3.7.4-stretch + build_steps: + - apt-get update && apt-get install -y libssl-dev libpq-dev git build-essential libfontconfig1 libfontconfig1-dev curl + - RUN bash -c "curl -sL https://deb.nodesource.com/setup_8.x | bash -" + - apt install -y nodejs + - pip install setuptools pip --upgrade --force-reinstall + - cd /code + post_build_steps: + - npm install --no-save + - npm run dist + - pip install /code + - mkdir /myproject + - cd /myproject + - wagtail start mysite + - cd /myproject/mysite + - python manage.py migrate + - echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin@example.com', 'changeme')" | python manage.py shell + launch_steps: + - cd /myproject/mysite + - python manage.py runserver 0.0.0.0:80 + run_options: -v ~/code:/code diff --git a/.stylelintrc.yaml b/.stylelintrc.yaml index 4c048515159..d379ab91eb2 100644 --- a/.stylelintrc.yaml +++ b/.stylelintrc.yaml @@ -1,78 +1,5 @@ ignoreFiles: - node_modules -plugins: - - stylelint-scss -# See https://github.com/stylelint/stylelint/blob/master/docs/user-guide/rules.md -rules: - block-closing-brace-newline-after: - - always - - ignoreAtRules: - # Ignore @if … @else in SCSS. - - if - - else - block-no-empty: true - block-opening-brace-space-before: always - color-hex-case: lower - color-hex-length: short - color-named: never - color-no-invalid-hex: true - comment-no-empty: true - declaration-bang-space-after: never - declaration-bang-space-before: always - declaration-block-no-duplicate-properties: true - declaration-block-no-redundant-longhand-properties: true - declaration-block-single-line-max-declarations: 1 - declaration-block-trailing-semicolon: always - declaration-colon-space-after: always - declaration-colon-space-before: never - declaration-property-value-blacklist: - - /^border/: [none] - - severity: error - declaration-no-important: true - font-family-no-duplicate-names: true - function-calc-no-unspaced-operator: true - function-comma-space-after: always - function-linear-gradient-no-nonstandard-direction: true - function-parentheses-space-inside: never - function-url-quotes: always - indentation: - - 4 - - severity: warning - length-zero-no-unit: true - max-nesting-depth: 3 - media-feature-name-no-unknown: true - no-empty-source: true - no-eol-whitespace: true - no-extra-semicolons: true - no-missing-end-of-source-newline: true - number-no-trailing-zeros: true - number-leading-zero: always - property-case: lower - property-no-unknown: true - rule-empty-line-before: - - always - - except: - - after-single-line-comment - - first-nested - scss/at-import-no-partial-leading-underscore: true - scss/at-import-partial-extension-blacklist: - - scss - scss/at-else-empty-line-before: never - selector-no-qualifying-type: - - true - - ignore: - - attribute - - class - selector-list-comma-newline-after: always - selector-max-id: 0 - selector-pseudo-element-no-unknown: true - selector-type-no-unknown: true - scss/at-rule-no-unknown: true - scss/media-feature-value-dollar-variable: always - scss/selector-no-redundant-nesting-selector: true - string-no-newline: true - string-quotes: single - unit-no-unknown: true - unit-case: lower - value-no-vendor-prefix: true - property-no-vendor-prefix: true + - build/**/* +extends: + - '@wagtail/stylelint-config-wagtail' diff --git a/.travis.yml b/.travis.yml index bf15973c5d2..365f738826f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,71 +1,77 @@ language: python cache: pip -dist: trusty +dist: xenial -# Use container-based infrastructure -sudo: false - -# Install JDK9 for Elasticsearch 5 addons: - apt: - packages: - - oracle-java9-installer - - oracle-java9-set-default + postgresql: "9.6" matrix: include: - - env: TOXENV=py34-dj111-postgres-noelasticsearch - python: 3.4 - - env: TOXENV=py34-dj111-sqlite-noelasticsearch - python: 3.4 - - env: TOXENV=py34-dj20-mysql-noelasticsearch - python: 3.4 - - env: TOXENV=py35-dj111-postgres-noelasticsearch - python: 3.5 - - env: TOXENV=py35-dj111-mysql-noelasticsearch - python: 3.5 - - env: TOXENV=py35-dj111-postgres-elasticsearch2 INSTALL_ELASTICSEARCH2=yes - python: 3.5 - sudo: true - env: TOXENV=py35-dj20-sqlite-noelasticsearch python: 3.5 - - env: TOXENV=py36-dj111-sqlite-noelasticsearch - python: 3.6 - - env: TOXENV=py36-dj111-postgres-noelasticsearch - python: 3.6 - - env: TOXENV=py36-dj111-mysql-noelasticsearch - python: 3.6 + - env: TOXENV=py35-dj21-mysql-noelasticsearch + python: 3.5 - env: TOXENV=py36-dj20-postgres-noelasticsearch python: 3.6 - - env: TOXENV=py36-dj111-postgres-elasticsearch2 INSTALL_ELASTICSEARCH2=yes + - env: TOXENV=py36-dj21-postgres-noelasticsearch python: 3.6 - sudo: true + - env: TOXENV=py37-dj21-postgres-noelasticsearch + python: 3.7 + - env: TOXENV=py37-dj22-sqlite-noelasticsearch + python: 3.7 + - env: TOXENV=py37-dj22-mysql-noelasticsearch + python: 3.7 + - env: TOXENV=py37-dj22-postgres-noelasticsearch + python: 3.7 + - env: TOXENV=py37-dj22stable-postgres-noelasticsearch + python: 3.7 + - env: TOXENV=py37-djmaster-postgres-noelasticsearch + python: 3.7 + - env: TOXENV=py38-dj22-postgres-noelasticsearch + python: 3.8 - env: TOXENV=py36-dj20-sqlite-elasticsearch2 INSTALL_ELASTICSEARCH2=yes python: 3.6 - sudo: true - - env: TOXENV=py36-dj111-postgres-elasticsearch5 INSTALL_ELASTICSEARCH5=yes + - env: TOXENV=py36-dj21-sqlite-elasticsearch2 INSTALL_ELASTICSEARCH2=yes + python: 3.6 + - env: TOXENV=py36-dj21-postgres-elasticsearch5 INSTALL_ELASTICSEARCH5=yes + python: 3.6 + - env: TOXENV=py36-dj20-postgres-elasticsearch6 INSTALL_ELASTICSEARCH6=yes python: 3.6 - sudo: true - - env: TOXENV=py36-dj20-postgres-elasticsearch5 INSTALL_ELASTICSEARCH5=yes + - env: TOXENV=py36-dj21-postgres-elasticsearch6 INSTALL_ELASTICSEARCH6=yes python: 3.6 - sudo: true + - env: TOXENV=py37-dj22-postgres-elasticsearch6 INSTALL_ELASTICSEARCH6=yes + python: 3.7 + - env: TOXENV=py37-dj22-postgres-elasticsearch7 INSTALL_ELASTICSEARCH7=yes + python: 3.7 + - env: TOXENV=py38-dj22-postgres-elasticsearch7 INSTALL_ELASTICSEARCH7=yes + python: 3.8 allow_failures: # Ignore failures on Elasticsearch tests because ES on Travis is intermittently flaky - - env: TOXENV=py35-dj111-postgres-elasticsearch2 INSTALL_ELASTICSEARCH2=yes - - env: TOXENV=py36-dj111-postgres-elasticsearch2 INSTALL_ELASTICSEARCH2=yes - env: TOXENV=py36-dj20-sqlite-elasticsearch2 INSTALL_ELASTICSEARCH2=yes - - env: TOXENV=py36-dj111-postgres-elasticsearch5 INSTALL_ELASTICSEARCH5=yes - - env: TOXENV=py36-dj20-postgres-elasticsearch5 INSTALL_ELASTICSEARCH5=yes + - env: TOXENV=py36-dj21-sqlite-elasticsearch2 INSTALL_ELASTICSEARCH2=yes + - env: TOXENV=py36-dj21-postgres-elasticsearch5 INSTALL_ELASTICSEARCH5=yes + - env: TOXENV=py36-dj20-postgres-elasticsearch6 INSTALL_ELASTICSEARCH6=yes + - env: TOXENV=py36-dj21-postgres-elasticsearch6 INSTALL_ELASTICSEARCH6=yes + - env: TOXENV=py37-dj22-postgres-elasticsearch6 INSTALL_ELASTICSEARCH6=yes + - env: TOXENV=py37-dj22-postgres-elasticsearch7 INSTALL_ELASTICSEARCH7=yes + - env: TOXENV=py38-dj22-postgres-elasticsearch7 INSTALL_ELASTICSEARCH7=yes + # allow failures against Django 2.2.x stable branch + - env: TOXENV=py37-dj22stable-postgres-noelasticsearch + # allow failures against Django master + - env: TOXENV=py37-djmaster-postgres-noelasticsearch # Services services: - elasticsearch + - mysql # Package installation install: - pip install tox codecov - 'if [[ -n "$INSTALL_ELASTICSEARCH2" ]]; then ./scripts/travis/install_elasticsearch2.sh; fi' - 'if [[ -n "$INSTALL_ELASTICSEARCH5" ]]; then ./scripts/travis/install_elasticsearch5.sh; fi' + - 'if [[ -n "$INSTALL_ELASTICSEARCH6" ]]; then ./scripts/travis/install_elasticsearch6.sh; fi' + - 'if [[ -n "$INSTALL_ELASTICSEARCH7" ]]; then ./scripts/travis/install_elasticsearch7.sh; fi' # Pre-test configuration before_script: @@ -78,7 +84,7 @@ script: tox after_success: - - codecov + - codecov -F backend # Who to notify about build results notifications: diff --git a/.tx/config b/.tx/config index c609ef4c8b3..6bb20bb546e 100644 --- a/.tx/config +++ b/.tx/config @@ -1,5 +1,6 @@ [main] host = https://www.transifex.com +lang_map = zh_CN:zh_Hans, zh-Hant:zh_Hant [wagtail.wagtailadmin] file_filter = wagtail/admin/locale//LC_MESSAGES/django.po @@ -96,3 +97,4 @@ file_filter = wagtail/contrib/table_block/locale//LC_MESSAGES/django.po source_file = wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po source_lang = en type = PO + diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 57b2c501fd2..e1f6d6c5ee6 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,6 +1,439 @@ Changelog ========= +2.7.2 (14.04.2020) +~~~~~~~~~~~~~~~~~~ + + * Fix: CVE-2020-11001 - prevent XSS attack via page revision comparison view (Vlad Gerasimenko, Matt Westcott) + + +2.7.1 (08.01.2020) +~~~~~~~~~~~~~~~~~~ + + * Fix: Management command startup checks under `ManifestStaticFilesStorage` no longer fail if `collectstatic` has not been run first (Alex Tomkins) + + +2.7 LTS (06.11.2019) +~~~~~~~~~~~~~~~~~~~~ + + * Improved StreamField design (Bertrand Bordage) + * Added WebP image support (frmdstryr, Karl Hobley, Matt Westcott) + * Added Elasticsearch 7 support (pySilver) + * Added Python 3.8 support (John Carter, Matt Westcott) + * Added `construct_page_listing_buttons` hook (Michael van Tellingen) + * Added more detailed documentation and troubleshooting for installing OpenCV for feature detection (Daniele Procida) + * Added Table Block caption for accessibility (Rahmi Pruitt) + * Move and refactor upgrade notification JS (Jonny Scholes) + * Add ability to insert internal anchor links/links with fragment identifiers in Draftail (rich text) fields (Iman Syed) + * Remove need for Elasticsearch `update_all_types` workaround, upgrade minimum release to 6.4.0 or above (Jonathan Liuti) + * Add ability for users to change their own name via the account settings page (Kevin Howbrook) + * Add ability to insert telephone numbers as links in Draftail (rich text) fields (Mikael Engström and Liam Brenner) + * Increase delay before search in the snippet chooser, to prevent redundant search request round trips (Robert Rollins) + * Add `WAGTAIL_EMAIL_MANAGEMENT_ENABLED` setting to determine whether users can change their email address (Janne Alatalo) + * Recognise Soundcloud artist URLs as embeddable (Kiril Staikov) + * Add `WAGTAILDOCS_SERVE_METHOD` setting to determine how document downloads will be linked to and served (Tobias McNulty, Matt Westcott) + * Add `WAGTAIL_MODERATION_ENABLED` setting to enable / disable the 'Submit for Moderation' option (Jacob Topp-Mugglestone) + * Added settings to customise pagination page size for the Images admin area (Brian Whitton) + * Added ARIA role to TableBlock output (Matt Westcott) + * Added cache-busting query parameters to static files within the Wagtail admin (Matt Westcott) + * Allow `register_page_action_menu_item` and `construct_page_action_menu` hooks to override the default menu action (Rahmi Pruitt, Matt Westcott) + * `WAGTAILIMAGES_MAX_IMAGE_PIXELS` limit now takes the number of animation frames into account (Karl Hobley) + * Fix: Added line breaks to long filenames on multiple image / document uploader (Kevin Howbrook) + * Fix: Added https support for Scribd oEmbed provider (Rodrigo) + * Fix: Changed StreamField group labels color so labels are visible (Catherine Farman) + * Fix: Prevented images with a very wide aspect ratio from being displayed distorted in the rich text editor (Iman Syed) + * Fix: Prevent exception when deleting a model with a protected One-to-one relationship (Neal Todd) + * Fix: Added labels to snippet bulk edit checkboxes for screen reader users (Martey Dodoo) + * Fix: Middleware responses during page preview are now properly returned to the user (Matt Westcott) + * Fix: Default text of page links in rich text uses the public page title rather than the admin display title (Andy Chosak) + * Fix: Specific page permission checks are now enforced when viewing a page revision (Andy Chosak) + * Fix: `pageurl` and `slugurl` tags no longer fail when `request.site` is `None` (Samir Shah) + * Fix: Output form media on add/edit image forms with custom models (Matt Westcott) + * Fix: Output form media on add/edit document forms with custom models (Sergey Fedoseev) + * Fix: Layout for the clear checkbox in default FileField widget (Mikalai Radchuk) + * Fix: Remove ASCII conversion from Postgres search backend, to support stemming in non-Latin alphabets (Pavel Denisov) + * Fix: Prevent tab labels on page edit view from being cut off on very narrow screens (Kevin Howbrook) + * Fix: Very long words in page listings are now broken where necessary (Kevin Howbrook) + * Fix: Language chosen in user preferences no longer persists on subsequent requests (Bojan Mihelac) + * Fix: Prevent new block IDs from being assigned on repeated calls to `StreamBlock.get_prep_value` (Colin Klein) + * Fix: Prevent broken images in notification emails when static files are hosted on a remote domain (Eduard Luca) + * Fix: Replace styleguide example avatar with default image to avoid issues when custom user model is used (Matt Westcott) + * Fix: `DraftailRichTextArea` is no longer treated as a hidden field by Django's form logic (Sergey Fedoseev) + * Fix: Replace format() placeholders in translatable strings with % formatting (Matt Westcott) + * Fix: Altering Django REST Framework's `DEFAULT_AUTHENTICATION_CLASSES` setting no longer breaks the page explorer menu and admin API (Matt Westcott) + * Fix: Regression - missing label for external link URL field in link chooser (Stefani Castellanos) + + +2.6.3 (22.10.2019) +~~~~~~~~~~~~~~~~~~ + + * Fix: Altering Django REST Framework's `DEFAULT_AUTHENTICATION_CLASSES` setting no longer breaks the page explorer menu and admin API (Matt Westcott) + + +2.6.2 (19.09.2019) +~~~~~~~~~~~~~~~~~~ + + * Fix: Prevent search indexing failures on Postgres 9.4 and Django >= 2.2.1 (Matt Westcott) + + +2.6.1 (05.08.2019) +~~~~~~~~~~~~~~~~~~ + + * Fix: Prevent Javascript errors caused by unescaped quote characters in translation strings (Matt Westcott) + + +2.6 (01.08.2019) +~~~~~~~~~~~~~~~~ + + * Removed support for Python 3.4 + * Added support for `short_description` for field labels in modeladmin's `InspectView` (Wesley van Lee) + * Rearranged SCSS folder structure to the client folder and split them approximately according to ITCSS. (Naomi Morduch Toubman, Jonny Scholes, Janneke Janssen, Hugo van den Berg) + * Added support for specifying cell alignment on TableBlock (Samuel Mendes) + * Added more informative error when a non-image object is passed to the `image` template tag (Deniz Dogan) + * Added more ARIA landmarks across the admin interface and welcome page for screen reader users to navigate the CMS more easily (Beth Menzies) + * Added ButtonHelper examples in the modelAdmin primer page within documentation (Kalob Taulien) + * Multiple clarifications, grammar and typo fixes throughout documentation (Dan Swain) + * Use correct URL in API example in documentation (Michael Bunsen) + * Move datetime widget initialiser JS into the widget's form media instead of page editor media (Matt Westcott) + * Add form field prefixes for input forms in chooser modals (Matt Westcott) + * Increase font-size across the whole admin (Beth Menzies, Katie Locke) + * Improved text color contrast across the whole admin (Beth Menzies, Katie Locke) + * Added consistent focus outline styles across the whole admin (Thibaud Colas) + * Removed version number from the logo link’s title. The version can now be found under the Settings menu (Thibaud Colas) + * Added "don't delete" option to confirmation screen when deleting images, documents and modeladmin models (Kevin Howbrook) + * Added `branding_title` template block for the admin title prefix (Dillen Meijboom) + * Add image dimensions in image gallery and image choosers for screen reader users (Helen Chapman) + * Added support for custom search handler classes to modeladmin's IndexView, and added a class that uses the default Wagtail search backend for searching (Seb Brown, Andy Babic) + * Improved heading structure for screen reader users navigating the CMS admin (Beth Menzies, Helen Chapman) + * Updated group edit view to expose the Permission object for each checkbox (George Hickman) + * Improve performance of Pages for Moderation panel (Fidel Ramos) + * Add more contextual information for screen readers in the explorer menu’s links (Helen Chapman) + * Added `process_child_object` and `exclude_fields` arguments to ``Page.copy()`` to make it easier for third-party apps to customise copy behavior (Karl Hobley) + * Added `Page.with_content_json()`, allowing revision content loading behaviour to be customised on a per-model basis (Karl Hobley) + * Improved screen-reader labels for action links in page listing (Helen Chapman, Katie Locke) + * Added screen-reader labels for table headings in page listing (Helen Chapman, Katie Locke) + * Added screen reader labels for page privacy toggle, edit lock, status tag in page explorer & edit views (Helen Chapman, Katie Locke) + * Added screen-reader labels for dashboard summary cards (Helen Chapman, Katie Locke) + * Added screen-reader labels for privacy toggle of collections (Helen Chapman, Katie Locke) + * Added `construct_settings_menu` hook (Jordan Bauer, Quadric) + * Fixed compatibility of date / time choosers with wagtail-react-streamfield (Mike Hearn) + * Performance optimization of several admin functions, including breadcrumbs, home and index pages (Fidel Ramos) + * Fix: ModelAdmin no longer fails when filtering over a foreign key relation (Jason Dilworth, Matt Westcott) + * Fix: The Wagtail version number is now visible within the Settings menu (Kevin Howbrook) + * Fix: Scaling images now rounds values to an integer so that images render without errors (Adrian Brunyate) + * Fix: Revised test decorator to ensure TestPageEditHandlers test cases run correctly (Alex Tomkins) + * Fix: Wagtail bird animation in admin now ends correctly on all browsers (Deniz Dogan) + * Fix: Explorer menu no longer shows sibling pages for which the user does not have access (Mike Hearn) + * Fix: Fixed occurences of invalid HTML across the CMS admin (Thibaud Colas) + * Fix: Admin HTML now includes the correct `dir` attribute for the active language (Andreas Bernacca) + * Fix: Fix type error when using `--chunk_size` argument on `./manage.py update_index` (Seb Brown) + * Fix: Avoid rendering entire form in EditHandler's `repr` method (Alex Tomkins) + * Fix: Add empty alt attributes to HTML output of Embedly and oEmbed embed finders (Andreas Bernacca) + * Fix: Add empty alt attributes to all images in the CMS admin (Andreas Bernacca) + * Fix: Make URL generator preview image alt translateable (Thibaud Colas) + * Fix: Clear pending AJAX request if error occurs on page chooser (Matt Westcott) + * Fix: Prevent text from overlapping in focal point editing UI (Beth Menzies) + * Fix: Screen readers now announce "Dashboard" for the main nav’s logo link instead of Wagtail’s version number (Thibaud Colas) + * Fix: Screen readers now treat page-level action dropdowns as navigation instead of menus (Helen Chapman) + * Fix: Make icon font implementation more screen-reader-friendly (Thibaud Colas) + * Fix: Remove duplicate labels in image gallery and image choosers for screen reader users (Helen Chapman) + * Fix: Restore custom "Date" icon for scheduled publishing panel in Edit page’s Settings tab (Helen Chapman) + * Fix: Added missing form media to user edit form template (Matt Westcott) + * Fix: Add a label to the modals’ “close” button for screen reader users (Helen Chapman, Katie Locke) + * Fix: Ensure the 'add child page' button displays when focused (Helen Chapman, Katie Locke) + * Fix: Remove tab order customisations in CMS admin (Jordan Bauer) + * Fix: Add labels to permission checkboxes for screen reader users (Helen Chapman, Katie Locke) + * Fix: Page.copy() no longer copies child objects when the accesssor name is included in `exclude_fields_in_copy` (Karl Hobley) + * Fix: Move focus to the pages explorer menu when open (Helen Chapman) + * Fix: Clicking the privacy toggle while the page is still loading no longer loads the wrong data in the page (Helen Chapman) + * Fix: Added missing `is_stored_locally` method to `AbstractDocument` (jonny5532) + * Fix: Query model no longer removes punctuation as part of string normalisation (William Blackie) + * Fix: Make login test helper work with user models with non-default username fields (Andrew Miller) + * Fix: Delay dirty form check to prevent "unsaved changes" warning from being wrongly triggered (Thibaud Colas) + + +2.5.2 (01.08.2019) +~~~~~~~~~~~~~~~~~~ + + * Fix: Delay dirty form check to prevent "unsaved changes" warning from being wrongly triggered (Thibaud Colas) + + +2.5.1 (07.05.2019) +~~~~~~~~~~~~~~~~~~ + + * Fix: Prevent crash when comparing StructBlocks in revision history (Adrian Turjak, Matt Westcott) + + +2.5 (24.04.2019) +~~~~~~~~~~~~~~~~ + + * Django 2.2 support (Matt Westcott, Andy Babic) + * Added support for customising EditHandler-based forms on a per-request basis (Bertrand Bordage) + * Added more informative error message when `|richtext` filter is applied to a non-string value (mukesh5) + * Automatic search indexing can now be disabled on a per-model basis via the `search_auto_update` attribute (Karl Hobley) + * Improved diffing of StreamFields when comparing page revisions (Karl Hobley) + * Highlight broken links to pages and missing documents in rich text (Brady Moe) + * Preserve links when copy-pasting rich text content from Wagtail to other tools (Thibaud Colas) + * Rich text to contentstate conversion now prioritises more specific rules, to accommodate `

` and `
` elements with attributes (Matt Westcott) + * Added limit image upload size by number of pixels (Thomas Elliott) + * Added `manage.py wagtail_update_index` alias to avoid clashes with `update_index` commands from other packages (Matt Westcott) + * Renamed `target_model` argument on `PageChooserBlock` to `page_type` (Loic Teixeira) + * `edit_handler` and `panels` can now be defined on a `ModelAdmin` definition (Thomas Kremmel) + * Add Learn Wagtail to third-party tutorials in documentation (Matt Westcott) + * Add a Django setting `TAG_LIMIT` to limit number of tags that can be added to any taggit model (Mani) + * Added instructions on how to generate urls for `ModelAdmin` to documentation (LB (Ben Johnston), Andy Babic) + * Added option to specify a fallback URL on `{% pageurl %}` (Arthur Holzner) + * Add support for more rich text formats, disabled by default: `blockquote`, `superscript`, `subscript`, `strikethrough`, `code` (Md Arifin Ibne Matin) + * Added `max_count_per_parent` option on page models to limit the number of pages of a given type that can be created under one parent page (Wesley van Lee) + * `StreamField` field blocks now accept a `validators` argument (Tom Usher) + * Added edit / delete buttons to snippet index and "don't delete" option to confirmation screen, for consistency with pages (Kevin Howbrook) + * Added support for Markdown shortcuts for inline formatting in rich text editor, e.g. `**` for bold, `_` for italic, etc. (Thibaud Colas) + * Added name attributes to all built-in page action menu items (LB (Ben Johnston)) + * Added validation on the filter string to the Jinja2 image template tag (Jonny Scholes) + * Changed the pages reordering UI toggle to make it easier to find (Katie Locke, Thibaud Colas) + * Added support for rich text link rewrite handlers for `external` and `email` links (Md Arifin Ibne Matin) + * Clarify installation instructions in documentation, especially regarding virtual environments. (Naomi Morduch Toubman) + * Fix: Set `SERVER_PORT` to 443 in `Page.dummy_request()` for HTTPS sites (Sergey Fedoseev) + * Fix: Include port number in `Host` header of `Page.dummy_request()` (Sergey Fedoseev) + * Fix: Validation error messages in `InlinePanel` no longer count towards `max_num` when disabling the 'add' button (Todd Dembrey, Thibaud Colas) + * Fix: Rich text to contentstate conversion now ignores stray closing tags (frmdstryr) + * Fix: Escape backslashes in `postgres_search` queries (Hammy Goonan) + * Fix: Parent page link in page chooser search results no longer navigates away (Asanka Lihiniyagoda, Sævar Öfjörð Magnússon) + * Fix: `routablepageurl` tag now correctly omits domain part when multiple sites exist at the same root (Gassan Gousseinov) + * Fix: Added missing collection column specifier on document listing template (Sergey Fedoseev) + * Fix: Page Copy will now also copy ParentalManyToMany field relations (LB (Ben Johnston)) + * Fix: Admin HTML header now includes correct language code (Matt Westcott) + * Fix: Unclear error message when saving image after focal point edit (Hugo van den Berg) + * Fix: `send_mail` now correctly uses the `html_message` kwarg for HTML messages (Tiago Requeijo) + * Fix: Page copying no longer allowed if page model has reached its `max_count` (Andy Babic) + * Fix: Don't show page type on page chooser button when multiple types are allowed (Thijs Kramer) + * Fix: Make sure page chooser search results correspond to the latest search by canceling previous requests (Esper Kuijs) + * Fix: Inform user when moving a page from one parent to another where there is an already existing page with the same slug (Casper Timmers) + * Fix: User add/edit forms now support form widgets with JS/CSS media (Damian Grinwis) + * Fix: Rich text processing now preserves non-breaking spaces instead of converting them to normal spaces (Wesley van Lee) + * Fix: Prevent autocomplete dropdowns from appearing over date choosers on Chrome (Kevin Howbrook) + * Fix: Prevent crash when logging HTTP errors from Cloudflare (Kevin Howbrook) + * Fix: Prevent rich text editor crash when filtering copy-pasted content and the last block is to be removed, e.g. unsupported image (Thibaud Colas) + * Fix: Removing rich text links / documents now also works when the text selection is backwards (Thibaud Colas) + * Fix: Prevent the rich text editor from crashing when copy-paste filtering removes all of its content (Thibaud Colas) + * Fix: Page chooser now respects custom `get_admin_display_title` methods on parent page and breadcrumb (Haydn Greatnews) + * Fix: Added consistent whitespace around sortable table headings (Matt Westcott) + * Fix: Moved locale names for Chinese (Simplified) and Chinese (Traditional) to `zh_Hans` and `zh_Hant` (Matt Westcott) + * Fix: Increase max length on `Embed.thumbnail_url` to 255 characters (Kevin Howbrook) + + +2.4 (19.12.2018) +~~~~~~~~~~~~~~~~ + + * Added support for Python 3.7 (Matt Westcott) + * Added `max_count` option on page models to limit the number of pages of a particular type that can be created (Dan Braghis) + * Document and image choosers now show the document / image's collection (Alejandro Garza, Janneke Janssen) + * Added new "Welcome to your Wagtail site" Starter Page when using wagtail start command (Timothy Allen, Scott Cranfill) + * Added ability to run individual tests through tox (Benjamin Bach) + * Collection listings are now ordered by name (Seb Brown) + * Added `file_hash` field to documents (Karl Hobley, Dan Braghis) + * Added last login to the user overview (Noah B Johnson) + * Changed design of image editing page (Janneke Janssen, Ben Enright) + * Added Slovak character map for JavaScript slug generation (Andy Chosak) + * Make documentation links on welcome page work for prereleases (Matt Westcott) + * Allow overridden `copy()` methods in `Page` subclasses to be called from the page copy view (Robert Rollins) + * Users without a preferred language set on their profile now use language selected by Django's `LocaleMiddleware` (Benjamin Bach) + * Added hooks to customise the actions menu on the page create/edit views (Matt Westcott) + * Cleanup: Use `functools.partial()` instead of `django.utils.functional.curry()` (Sergey Fedoseev) + * Squashed migrations for wagtailimages (Karl Hobley) + * Added `before_move_page` and `after_move_page` hooks (Maylon Pedroso) + * Bulk deletion button for snippets is now hidden until items are selected (Karl Hobley) + * Fix: Query objects returned from `PageQuerySet.type_q` can now be merged with `|` (Brady Moe) + * Fix: Add `rel="noopener noreferrer"` to target blank links (Anselm Bradford) + * Fix: Additional fields on custom document models now show on the multiple document upload view (Robert Rollins, Sergey Fedoseev) + * Fix: Help text is partially hidden when using a combination of BooleanField and FieldPanel in page model (Dzianis Sheka) + * Fix: Allow custom logos of any height in the admin menu (Meteor0id) + * Fix: Allow nav menu to take up all available space instead of scrolling (Meteor0id) + * Fix: Redirects now return 404 when destination is unspecified or a page with no site (Hillary Jeffrey) + * Fix: Refactor all breakpoint definitions, removing style overlaps (Janneke Janssen) + * Fix: Updated draftjs_exporter to 2.1.5 to fix bug in handling adjacent entities (Thibaud Colas) + * Fix: Page titles consisting only of stopwords now generate a non-empty default slug (Andy Chosak, Janneke Janssen) + * Fix: Sitemap generator now allows passing a sitemap instance in the URL configuration (Mitchel Cabuloy, Dan Braghis) + + +2.3 LTS (23.10.2018) +~~~~~~~~~~~~~~~~~~~~ + + * Added support for Django 2.1 (Ryan Verner, Matt Westcott) + * Improved colour contrast (Coen van der Kamp, Naomi Morduch Toubman, Naa Marteki Reed, Edd Baldry, Ben Enright) + * Added 'scale' image filter (Oliver Wilkerson) + * Added meta tag to prevent search engines from indexing admin pages (Karl Hobley) + * EmbedBlock now validates against recognised embed providers on save (Bertrand Bordage) + * Made cache control headers on Wagtail admin consistent with Django admin (Tomasz Knapik) + * Notification emails now include an "Auto-Submitted: auto-generated" header (Dan Braghis) + * Image chooser panels now show alt text as title (Samir Shah) + * Added `download_url` field to images in the API (Michael Harrison) + * Dummy requests for preview now preserve the HTTP Authorization header (Ben Dickinson) + * Fix: Respect next param on login (Loic Teixeira) + * Fix: InlinePanel now handles relations that specify a related_query_name (Aram Dulyan) + * Fix: before_delete_page / after_delete_page hooks now run within the same database transaction as the page deletion (Tomasz Knapik) + * Fix: Snippet chooser modal no longer fails on snippet models with UUID primary keys (Sævar Öfjörð Magnússon) + * Fix: Restored localisation in date/time pickers (David Moore, Thibaud Colas) + * Fix: Tag input field no longer treats 'б' on Russian keyboards as a comma (Michael Borisov) + * Fix: Disabled autocomplete dropdowns on date/time chooser fields (Janneke Janssen) + * Fix: Split up `wagtail.admin.forms` to make it less prone to circular imports (Matt Westcott) + * Fix: Disable linking to root page in rich text, making the page non-functional (Matt Westcott) + * Fix: Pages should be editable and save-able even if there are broken page or document links in rich text (Matt Westcott) + * Fix: Avoid redundant round-trips of JSON StreamField data on save, improving performance and preventing consistency issues on fixture loading (Andy Chosak, Matt Westcott) + * Fix: Users are not logged out when changing their own password through the Users area (Matt Westcott) + + +2.2.2 (29.08.2018) +~~~~~~~~~~~~~~~~~~ + + * Fix: Seek to the beginning of image files when uploading, to restore compatibility with django-storages Google Cloud and Azure backends (Mikalai Radchuk) + * Fix: Respect next param on login (Loic Teixeira) + + +2.2.1 (13.08.2018) +~~~~~~~~~~~~~~~~~~ + + * Fix: Pin Beautiful Soup to 4.6.0 due to further regressions in formatting empty elements (Matt Westcott) + * Fix: Prevent AppRegistryNotReady error when wagtail.contrib.sitemaps is in INSTALLED_APPS (Matt Westcott) + + +2.2 (10.08.2018) +~~~~~~~~~~~~~~~~ + + * Added faceted search using the `.facet()` method (Karl Hobley) + * Added page type filtering and ordering to the Wagtail admin page search (Karl Hobley) + * Added another valid AudioBoom oEmbed pattern (Bertrand Bordage) + * Added `annotate_score` support to PostgreSQL search backend (Bertrand Bordage) + * Pillow's image optimisation is now applied when saving PNG images (Dmitry Vasilev) + * JS / CSS media files can now be associated with Draftail feature definitions (Matt Westcott) + * The `{% slugurl %}` template tag is now site-aware (Samir Shah) + * Added `file_size` field to documents (Karl Hobley) + * Added `file_hash` field to images (Karl Hobley) + * Update documentation (configuring Django for Wagtail) to contain all current settings options (Matt Westcott, LB (Ben Johnston)) + * Added `defer` flag to `PageQuerySet.specific` (Karl Hobley) + * Snippets can now be deleted from the listing view (LB (Ben Johnston)) + * Increased max length of redirect URL field to 255 (Michael Harrison) + * Added documentation for new JS/CSS media files association with Draftail feature definitions (Ed Henderson) + * Added accessible colour contrast guidelines to the style guide (Catherine Farman) + * Admin modal views no longer rely on Javascript `eval()`, for better CSP compliance (Matt Westcott) + * Update editor guide for embeds and documents in rich text (Kevin Howbrook) + * Improved performance of sitemap generation (Michael van Tellingen, Bertrand Bordage) + * Added an internal API for autocomplete (Karl Hobley, Bertrand Bordage) + * Fix: Handle all exceptions from `Image.get_file_size` (Andrew Plummer) + * Fix: Fix display of breadcrumbs in ModelAdmin (LB (Ben Johnston)) + * Fix: Remove duplicate border radius of avatars (Benjamin Thurm) + * Fix: Site.get_site_root_paths() preferring other sites over the default when some sites share the same root_page (Andy Babic) + * Fix: Pages with missing model definitions no longer crash the API (Abdulmalik Abdulwahab) + * Fix: Rich text image chooser no longer skips format selection after a validation error (Matt Westcott) + * Fix: Null characters in URLs no longer crash the redirect middleware on PostgreSQL (Andrew Crewdson, Matt Westcott) + * Fix: Permission checks no longer prevent a non-live page from being unscheduled (Abdulmalik Abdulwahab) + * Fix: Copy-paste between Draftail editors now preserves all formatting/content (Thibaud Colas) + * Fix: Fix alignment of checkboxes and radio buttons on Firefox (Matt Westcott) + + +2.1.3 (13.08.2018) +~~~~~~~~~~~~~~~~~~ + + * Fix: Pin Beautiful Soup to 4.6.0 due to further regressions in formatting empty elements (Matt Westcott) + + +2.1.2 (06.08.2018) +~~~~~~~~~~~~~~~~~~ + + * Fix: Bundle the l18n package to avoid installation issues on systems with a non-Unicode locale (Matt Westcott) + * Fix: Mark Beautiful Soup 4.6.1 as incompatible due to bug in formatting empty elements (Matt Westcott) + + +2.1.1 (04.07.2018) +~~~~~~~~~~~~~~~~~~ + + * Fix: Site.get_site_root_paths() preferring other sites over the default when some sites share the same root_page (Andy Babic) + * Fix: Rich text image chooser no longer skips format selection after a validation error (Matt Westcott) + * Fix: Null characters in URLs no longer crash the redirect middleware on PostgreSQL (Matt Westcott) + + +2.1 (22.05.2018) +~~~~~~~~~~~~~~~~ + + * Add `HelpPanel` to add HTML within an edit form (Keving Chung) + * Added direct profile picture upload to account preferences (Daniel Chimeno, Pierre Geier, Matt Westcott) + * Added API endpoint for finding pages by HTML path (Karl Hobley) + * Added time zone setting to account preferences (David Moore) + * Added Elasticsearch 6 support (Karl Hobley) + * Persist tab hash in URL to allow direct navigation to tabs in the admin interface (Ben Weatherman) + * Animate the chevron icon when opening sub-menus in the admin (Carlo Ascani) + * Look through the target link and target page slug (in addition to the old slug) when searching for redirects in the admin (Michael Harrison) + * Remove support for IE6 to IE9 from project template (Samir Shah) + * Remove outdated X-UA-Compatible meta from admin template (Thibaud Colas) + * Add JavaScript source maps in production build for packaged Wagtail (Thibaud Colas) + * Removed `assert` statements from Wagtail API (Kim Chee Leong) + * Update `jquery-datetimepicker` dependency to make Wagtail more CSP-friendly (`unsafe-eval`) (Pomax) + * Added error notification when running the `wagtail` command on Python <3.4 (Matt Westcott) + * `update_index` management command now accepts a `--chunk_size` option to determine the number of items to load at once (Dave Bell) + * Added hook `register_account_menu_item` to add new account preference items (Michael van Tellingen) + * Added change email functionality from the account settings (Alejandro Garza, Alexs Mathilda) + * Add request parameter to edit handlers (Rajeev J Sebastian) + * ImageChooser now sets a default title based on filename (Coen van der Kamp) + * Added error handling to the Draftail editor (Thibaud Colas) + * Add new `wagtail_icon` template tag to facilitate making admin icons accessible (Sander Tuit) + * Set `ALLOWED_HOSTS` in the project template to allow any host in development (Tom Dyson) + * Expose reusable client-side code to build Draftail extensions (Thibaud Colas) + * Added `WAGTAILFRONTENDCACHE_LANGUAGES` setting to specify the languages whose URLs are to be purged when using `i18n_patterns` (PyMan Claudio Marinozzi) + * Added `extra_footer_actions` template blocks for customising the add/edit page views (Arthur Holzner) + * Fix: Status button on 'edit page' now links to the correct URL when live and draft slug differ (LB (Ben Johnston)) + * Fix: Image title text in the gallery and in the chooser now wraps for long filenames (LB (Ben Johnston), Luiz Boaretto) + * Fix: Move image editor action buttons to the bottom of the form on mobile (Julian Gallo) + * Fix: StreamField icons are now correctly sorted into groups on the 'append' menu (Tim Heap) + * Fix: Draftail now supports features specified via the `WAGTAILADMIN_RICH_TEXT_EDITORS` setting (Todd Dembrey) + * Fix: Password reset form no longer indicates whether the email is recognised, as per standard Django behaviour (Bertrand Bordage) + * Fix: `UserAttributeSimilarityValidator` is now correctly enforced on user creation / editing forms (Tim Heap) + * Fix: Focal area removal not working in IE11 and MS Edge (Thibaud Colas) + * Fix: Rewrite password change feedback message to be more user-friendly (Casper Timmers) + * Fix: Correct dropdown arrow styling in Firefox, IE11 (Janneke Janssen, Alexs Mathilda) + * Fix: Password reset no indicates specific validation errors on certain password restrictions (Lucas Moeskops) + * Fix: Confirmation page on page deletion now respects custom `get_admin_display_title` methods (Kim Chee Leong) + * Fix: Adding external link with selected text now includes text in link chooser (Tony Yates, Thibaud Colas, Alexs Mathilda) + * Fix: Editing setting object with no site configured no longer crashes (Harm Zeinstra) + * Fix: Creating a new object with inlines while mandatory fields are empty no longer crashes (Bertrand Bordage) + * Fix: Localization of image and apps verbose names + * Fix: Draftail editor no longer crashes after deleting image/embed using DEL key (Thibaud Colas) + * Fix: Breadcrumb navigation now respects custom `get_admin_display_title` methods (Arthur Holzner, Wietze Helmantel, Matt Westcott) + * Fix: Inconsistent order of heading features when adding h1, h5 or h6 as default feature for Hallo RichText editor (Loic Teixeira) + * Fix: Add invalid password reset link error message (Coen van der Kamp) + * Fix: Bypass select/prefetch related optimisation on `update_index` for `ParentalManyToManyField` to fix crash (Tim Kamanin) + * Fix: 'Add user' is now rendered as a button due to the use of quotes within translations (Benoît Vogel) + * Fix: Menu icon no longer overlaps with title in Modeladmin on mobile (Coen van der Kamp) + * Fix: Background color overflow within the Wagtail documentation (Sergey Fedoseev) + * Fix: Page count on homepage summary panel now takes account of user permissions (Andy Chosak) + * Fix: Explorer view now prevents navigating outside of the common ancestor of the user's permissions (Andy Chosak) + * Fix: Generate URL for the current site when multiple sites share the same root page (Codie Roelf) + * Fix: Restored ability to use non-model fields with FieldPanel (Matt Westcott, LB (Ben Johnston)) + * Fix: Stop revision comparison view from crashing when non-model FieldPanels are in use (LB (Ben Johnston)) + * Fix: Ordering in the page explorer now respects custom `get_admin_display_title` methods when sorting <100 pages (Matt Westcott) + * Fix: Use index-specific Elasticsearch endpoints for bulk insertion, for compatibility with providers that lock down the root endpoint (Karl Hobley) + * Fix: Fix usage URL on the document edit page (Jérôme Lebleu) + + +2.0.2 (13.08.2018) +~~~~~~~~~~~~~~~~~~ + + * Fix: Restored ability to use non-model fields with FieldPanel (Matt Westcott, LB (Ben Johnston)) + * Fix: Fix usage URL on the document edit page (Jérôme Lebleu) + * Fix: Pin Beautiful Soup to 4.6.0 due to further regressions in formatting empty elements (Matt Westcott) + + +2.0.1 (04.04.2018) +~~~~~~~~~~~~~~~~~~ + + * Added error notification when running the `wagtail` command on Python <3.4 (Matt Westcott) + * Added error handling to the Draftail editor (Thibaud Colas) + * Fix: Draftail now supports features specified via the `WAGTAILADMIN_RICH_TEXT_EDITORS` setting (Todd Dembrey) + * Fix: Password reset form no longer indicates whether the email is recognised, as per standard Django behaviour (Bertrand Bordage) + * Fix: `UserAttributeSimilarityValidator` is now correctly enforced on user creation / editing forms (Tim Heap) + * Fix: Editing setting object with no site configured no longer crashes (Harm Zeinstra) + * Fix: Creating a new object with inlines while mandatory fields are empty no longer crashes (Bertrand Bordage) + + 2.0 (28.02.2018) ~~~~~~~~~~~~~~~~ @@ -79,6 +512,28 @@ Changelog * Fix: Prevent style leak of Wagtail panel icons in widgets using ``h2`` elements (THibaud Colas) +1.13.4 (13.08.2018) +~~~~~~~~~~~~~~~~~~~ + + * Fix: Pin Beautiful Soup to 4.6.0 due to further regressions in formatting empty elements (Matt Westcott) + + +1.13.3 (13.08.2018) +~~~~~~~~~~~~~~~~~~~ + + * Fix: Pin django-taggit to <0.23 to restore Django 1.8 compatibility (Matt Westcott) + * Fix: Mark Beautiful Soup 4.6.1 as incompatible due to bug in formatting empty elements (Matt Westcott) + + +1.13.2 (04.07.2018) +~~~~~~~~~~~~~~~~~~~ + + * Fix: Fix support of `ATOMIC_REBUILD` for projects with Elasticsearch client >=1.7.0 (Mikalai Radchuk) + * Fix: Logging an indexing failure on an object with a non-ASCII representation no longer crashes on Python 2 (Aram Dulyan) + * Fix: Rich text image chooser no longer skips format selection after a validation error (Matt Westcott) + * Fix: Null characters in URLs no longer crash the redirect middleware on PostgreSQL (Matt Westcott) + + 1.13.1 (17.11.2017) ~~~~~~~~~~~~~~~~~~~ @@ -91,8 +546,8 @@ Changelog * Fix: Prevented intermittent failures on Postgres search backend when a field is defined as both a `SearchField` and a `FilterField` (Matt Westcott) -1.13 (16.10.2017) -~~~~~~~~~~~~~~~~~ +1.13 LTS (16.10.2017) +~~~~~~~~~~~~~~~~~~~~~ * Front-end cache invalidator now supports purging URLs as a batch (Karl Hobley) * Custom document model is now documented (Emily Horsman) @@ -123,6 +578,28 @@ Changelog * Fix: API listing views no longer fail when no site records are defined (Karl Hobley) +1.12.6 (13.08.2018) +~~~~~~~~~~~~~~~~~~~ + + * Fix: Pin Beautiful Soup to 4.6.0 due to further regressions in formatting empty elements (Matt Westcott) + + +1.12.5 (13.08.2018) +~~~~~~~~~~~~~~~~~~~ + + * Fix: Pin django-taggit to <0.23 to restore Django 1.8 compatibility (Matt Westcott) + * Fix: Mark Beautiful Soup 4.6.1 as incompatible due to bug in formatting empty elements (Matt Westcott) + + +1.12.4 (04.07.2018) +~~~~~~~~~~~~~~~~~~~ + + * Fix: Fix support of `ATOMIC_REBUILD` for projects with Elasticsearch client >=1.7.0 (Mikalai Radchuk) + * Fix: Logging an indexing failure on an object with a non-ASCII representation no longer crashes on Python 2 (Aram Dulyan) + * Fix: Rich text image chooser no longer skips format selection after a validation error (Matt Westcott) + * Fix: Null characters in URLs no longer crash the redirect middleware on PostgreSQL (Matt Westcott) + + 1.12.3 (17.11.2017) ~~~~~~~~~~~~~~~~~~~ diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index a90db2ce2d8..cbd4635f26d 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -4,17 +4,29 @@ Core team * Matthew Westcott (Torchbox) * Karl Hobley (Torchbox) * Tom Dyson (Torchbox) -* Mikalai Radchuk (Torchbox) -* Thibaud Colas (Springload) +* Thibaud Colas (Torchbox) * Janneke Janssen (Lukkien) * Mike Dingjan (Lab Digital) -* Rob Moorman (Moor Interactive) * Bertrand Bordage (NoriPyt) -* Emily Horsman (Little Weaver) * Loïc Teixeira (Springload) * Andy Chosak (consumerfinance.gov) * Will Barton (consumerfinance.gov) * LB Johnston +* Coen van der Kamp (Four Digits) +* Codie Roelf (Praekelt) +* Lisa Adams (Praekelt) +* Naomi Morduch Toubman +* Kalob Taulien +* Jonny Scholes (Neon Jungle) +* Andy Babic (Torchbox) +* Dan Braghis (Torchbox) + +Core team alumni +================ + +* Josh Barr +* Tim Heap +* Mikalai Radchuk Contributors ============ @@ -40,7 +52,6 @@ Contributors * Tom Talbot * Jeffrey Hearn * Robert Clark -* Tim Heap * Nathan Brizendine * Gordon Pendleton * John-Scott Atlakson @@ -83,7 +94,6 @@ Contributors * Alex Gleason * Ryan Pineo * Petr Vacha -* Josh Barr * Sævar Öfjörð Magnússon * Ashia Zawaduk * Denis Voskvitsov @@ -123,12 +133,12 @@ Contributors * Nicolas Kuttler * Juha Kujala * Eirik Krogstad +* Rob Moorman * Matthijs Melissen * Jonas Lergell * Danielle Madeley * Roel Bruggink * Yannick Chabbert -* Andy Babic * Tomas Olander * Andrew Tork Baker * Vincent Audebert @@ -146,7 +156,6 @@ Contributors * Stephen Rice * Behzad Nategh * Yann Fouillat (Gagaro) -* Jonny Scholev * Richard McMillan * Johannes Spielmann * Franklin Kingma @@ -246,12 +255,13 @@ Contributors * Lucas Moeskops * Rob van der Linde * Paul Kamp -* dwasyl +* David Wasylciw * Eugene Morozov * Levi Adler * Edwar Baron * Tomasz Knapik * Venelin Stoykov +* Emily Horsman * jcronyn * Ben Sturmfels * Anselm Bradford @@ -269,55 +279,197 @@ Contributors * Bruno Alla * Christopher Bledsoe (The Motley Fool) * Florent Osmont +* J Rob Gant * Mary Kate Fain * Dário Marcelino +* Dave Bell +* Ben Weatherman +* Carlo Ascani +* Julian Gallo * Dan Dietz +* Michael Harrison +* Todd Dembrey +* Sebastian Brestin +* Casper Timmers +* Kevin Chung +* Kim Chee Leong +* Dan Swain +* Alexs Mathilda +* Tony Yates +* Pomax +* Arthur Holzner +* Alejandro Garza +* Rajeev J Sebastian +* Sander Tuit +* Tim Kamanin +* Sergey Fedoseev +* Harm Zeinstra +* David Moore +* Pierre Geier +* Jérôme Lebleu +* Victor Miti +* Andrew Plummer +* Dmitry Vasilev +* Benjamin Thurm +* Ed Henderson +* Strother Scott +* Daniele Procida +* Catherine Farman +* Abdulmalik Abdulwahab +* Andrew Crewdson +* Aram Dulyan +* Kevin Howbrook +* Ryan Verner +* Oliver Wilkerson +* Matthew Schinckel +* Michael Borisov +* Dan Braghis +* Ben Dickinson +* Meteor0id +* Naa Marteki Reed +* Jorge Barata +* Brady Moe +* Yi Huang +* Stas Rudakou +* Abdulaziz Alfuhigi +* Dzianis Sheka +* Scott Cranfill +* gmmoraes +* Justin Focus +* Fedor Selitsky +* Seb Brown +* Noah B Johnson +* Hillary Jeffrey +* Nick Travis +* Maylon Pedroso +* Thijs Walcarius +* mukesh5 +* frmdstryr +* Aidarbek Suleimenov +* Matthew Linares +* Asanka Lihiniyagoda +* David Beitey +* Paul Vetch +* Vladimir Knobel +* Matt Collins +* Thomas Elliott +* damianosSemmle +* Evan Winter +* Neil Lyons +* Gassan Gousseinov +* Thomas Kremmel +* patta42 +* Esper Kuijs +* Damian Grinwis +* Wesley van Lee +* Md Arifin Ibne Matin +* Tom Usher +* Haydn Greatnews +* Katie Locke +* Cassidy Brooke +* dthompson86 +* Jason Dilworth +* Deniz Dogan +* Po-Chuan Hsieh +* scil +* Mike Hearn +* Samuel Mendes +* Adam Eikman +* Andreas Bernacca +* Alex Tomkins +* Beth Menzies +* Michael Bunsen +* Dillen Meijboom +* George Hickman +* Eric Dyken +* Jordan Bauer +* Fidel Ramos +* Quadric +* jonny5532 +* William Blackie +* Andrew Miller +* Rodrigo +* Iman Syed +* John Carter +* Jonathan Liuti +* Rahmi Pruitt +* Sanyam Khurana +* Pavel Denisov +* Mikael Engström +* Zac Connelly +* Sarath Kumar Somana +* Dani Hodovic +* Janne Alatalo +* Colin Klein +* Eduard Luca +* Kiril Staikov +* Saptak Sengupta +* Dawid Bugajewski +* Dawn Wages +* Jacob Topp-Mugglestone +* Brian Whitton +* Tim White +* Mike Janger +* Prithvi MK +* pySilver +* a-mere-peasant +* David T Thompson +* kailwallin +* ryanomor +* Thijs Baaijen +* Stefani Castellanos +* Vlad Gerasimenko Translators =========== -* Afrikaans: Jaco du Plessis -* Arabic: alfuhigi, Roger Allen, Ahmad Kiswani, Mohamed Mayla +* Afrikaans: Jaco du Plessis, Jared Osborn +* Arabic: Abdulaziz Alfuhigi, Roger Allen, Khaled Arnaout, Mohammed Abdul Gadir, Ahmad Kiswani, Mohamed Mayla, Ultraify Media +* Armenian: Vachagan * Basque: Unai Zalakain +* Belarusian: Stas Rudakou, Tatsiana Tsygan * Bulgarian: Lyuboslav Petrov +* Burmese: ime11 * Catalan: Antoni Aloy, David Llop, Roger Pons -* Chinese: hanfeng, Lihan Li, Leway Colin, Orangle Liu -* Chinese (China): hanfeng, Daniel Hwang, Jian Li, Listeng Teng, Feng Wang, Fred Zeng, Joey Zhao, Vincent Zhao, zhushajun -* Chinese (Taiwan): gogobook, Lihan Li, Jp Shieh -* Croatian (Croatia): Luka Matijević -* Czech: Ales Dvorak, Martin Galda, Sophy O, Ivan Pomykacz, Jiri Stepanek, Marek Turnovec, Stanislav Vasko -* Danish: Asger Sørensen +* Chinese: hanfeng, Lihan Li, Leway Colin, Orangle Liu, shengsheng gz +* Chinese (Simplified): Ed, hanfeng, Yi Huang, Daniel Hwang, Jian Li, Aosp T, Listeng Teng, Feng Wang, whuim, Fred Zeng, Joey Zhao, Vincent Zhao, zhushajun +* Chinese (Traditional): c o, gogobook, Lihan Li, Jp Shieh, Yeh Yen-Ke +* Croatian (Croatia): Ivica Dosen, Luka Matijević +* Czech: Ales Dvorak, Martin Galda, IT Management, Eva Mikesova, Mořeplavec, Sophy O, Martina Oleksakova, Ivan Pomykacz, Jiri Stepanek, Marek Turnovec, Mirek Zvolský +* Danish: Mads Kronborg, MRostgaard, Asger Sørensen * Dutch: benny_AT_it_digin.com, Bram, Brecht Dervaux, Huib Keemink, Thijs Kramer, Samuel Leeuwenburg, mahulst, Rob Moorman, Michael van Tellingen, Arne Turpyn -* Dutch (Netherlands): Bram, Kees Hink, Franklin Kingma, Maarten Kling, Thijs Kramer +* Dutch (Netherlands): Bram, Kees Hink, Coen van der Kamp, Franklin Kingma, Maarten Kling, Thijs Kramer, Meteor0id * Finnish: Eetu Häivälä, Niklas Jerva, Aarni Koskela, Rauli Laine, Glen Somerville, Juha Yrjölä -* French: Adrien, Timothy Allen, Sebastien Andrivet, Bertrand Bordage, André Bouatchidzé, Aurélien Debord, Romain Dorgueil, Tom Dyson, Antonin Enfrun, Axel Haustant, Léo, Pierre Marfoure, nahuel, Dominique Peretti, Loïc Teixeira, Benoît Vogel +* French: Adrien, Timothy Allen, Sebastien Andrivet, Bertrand Bordage, André Bouatchidzé, Aurélien Debord, Romain Dorgueil, Tom Dyson, Antonin Enfrun, Axel Haustant, Léo, Pierre Marfoure, nahuel, Sophy O, Dominique Peretti, fpoulain, Loïc Teixeira, Benoît Vogel * Galician: fooflare * Georgian: André Bouatchidzé -* German: Ettore Atalan, Patrick Craston, Henrik Kröger, Tammo van Lessen, Martin Löhle, Wasilis Mandratzis-Walz, Daniel Manser, m0rph3u5, Max Pfeiffer, Moritz Pfeiffer, Herbert Poul, Karl Sander, Tobias Schmidt, Johannes Spielmann, Raphael Stolt, Jannis Vajen, Vorlif, Matthew Westcott +* German: Ettore Atalan, Patrick Craston, Peter Dreuw, Johannes Fleck, Henrik Kröger, Tammo van Lessen, Martin Löhle, Wasilis Mandratzis-Walz, Daniel Manser, Matthias Martin, m0rph3u5, Max Pfeiffer, Moritz Pfeiffer, Herbert Poul, Karl Sander, Tobias Schmidt, Johannes Spielmann, Raphael Stolt, Benjamin Thurm, Norman Uekermann, Jannis Vajen, Vorlif, Matthew Westcott * Greek: Jim Dal, George Giannoulopoulos, Yiannis Inglessis, Wasilis Mandratzis-Walz, Nick Mavrakis, NeotheOne, Serafeim Papastefanos -* Hebrew (Israel): Lior Abazon, bjesus, Yossi Lalum, Oleg Sverdlov -* Hungarian: Laszlo Molnar, Kornél Novák Mergulhão +* Hebrew (Israel): Lior Abazon, bjesus, Yossi Lalum, Adi Ron, Oleg Sverdlov +* Hungarian: Istvan Farkas, Laszlo Molnar, Kornél Novák Mergulhão, BN, Aron Santa * Icelandic (Iceland): Arnar Tumi Þorsteinsson, Kjartan Sverrisson, Sævar Öfjörð Magnússon -* Indonesian (Indonesia): Sutrisno Efendi, Geek Pantura, Ronggo Radityo -* Italian: Edd Baldry, Claudio Bantaloukas, Gian-Maria Daffre, Giacomo Ghizzani, Carlo Miron, Alessio Di Stasio, Andrea Tagliazucchi -* Japanese: Sangmin Ahn, Shu Ishida, Daigo Shitara, Shimizu Taku +* Indonesian (Indonesia): atmosuwiryo, Sutrisno Efendi, Dzikri Hakim, Geek Pantura, Ronggo Radityo, M. Febrian Ramadhana +* Italian: Sandro Badalamenti, Edd Baldry, Claudio Bantaloukas, Guglielmo Celata, Gian-Maria Daffre, Giacomo Ghizzani, LB (Ben Johnston), Carlo Miron, Alessio Di Stasio, Andrea Tagliazucchi +* Japanese: Sangmin Ahn, Shuhei Hirota, Shu Ishida, Yudai Kobayashi, Tri Minh, Hideaki Oguchi, Tomo Mizoe, Safu9, Daigo Shitara, Shimizu Taku, umepon0626, Takuya Yamamoto * Korean: Kyungil Choi, Jihan Chung * Latvian: Reinis Rozenbergs, Maris Serzans * Lithuanian: Matas Dailyda -* Mongolian: Delgermurun Purevkhuu -* Norwegian Bokmål: Eirik Krogstad, Robin Skahjem-Eriksen +* Mongolian: Myagmarjav Enkhbileg, Delgermurun Purevkhuu +* Norwegian Bokmål: Eirik Krogstad, Robin Skahjem-Eriksen, Stein Strindhaug * Persian: Mohammad reza Jelveh, Mohammad Hossein Mojtahedi, Py Zenberg -* Polish: Konrad Lalik, Mateusz, Miłosz Miśkiewicz, Bartek Sielicki, utek, Grzegorz Wasilewski, Bartosz Wiśniewski +* Polish: Konrad Lalik, Miron Levitsky, Mateusz, Miłosz Miśkiewicz, Bartek Sielicki, utek, Grzegorz Wasilewski, Bartosz Wiśniewski * Portuguese (Brazil): Claudemiro Alves Feitosa Neto, Bruno Bertoldi, Luiz Boaretto, Gladson Brito, Thiago Cangussu, Gilson Filho, Joao Garcia, João Luiz Lorencetti, Marcio Mazza, Douglas Miranda, Guilherme Nabanete * Portuguese (Portugal): Gladson Brito, Thiago Cangussu, Tiago Henriques, Jose Lourenco, Nuno Matos, Douglas Miranda, Manuela Silva * Romanian: Dan Braghis -* Russian: ajk, Andrey Avdey, Daniil, gsstver, Sergey Khalymon, Sergey Komarov, Arseni M, Eugene MechanisM, Rustam Mirzaev, Mikalai Radchuk, Alexandr Romantsov, Nikita Viktorovich, Vassiliy Vorobyov +* Russian: ajk, Andrey Avdey, Daniil, Mikhail Gerasimov, gsstver, Sergey Khalymon, Sergey Komarov, Miron Levitskiy, Arseni M, Eugene MechanisM, Rustam Mirzaev, Alexander Penshin, Mikalai Radchuk, Alexandr Romantsov, Nikita Tonkoshkur, Tatsiana Tsygan, Nikita Viktorovich, Vassiliy Vorobyov * Slovak (Slovakia): Stevo Backor, dellax, Martin Janšto, Jozef Karabelly -* Slovenian: Mitja Pagon +* Slovenian: Mitja Pagon, Matej Stavanja * Spanish: Mauricio Baeza, Daniel Chimeno, fonso, fooflare, José Luis, Joaquín Tita, Unai Zalakain -* Swedish: Andreas Bergström, Jim Brouzoulis, Alexander Holmbäck, André Karlsson, Jon Karlsson, Ludwig Kjellström, Thomas Kunambi, Andreas Lans, Hannes Lohmander -* Turkish: Zafer Cengiz, Cihad Gündoǧdu, Ragıp Ünal +* Swedish: Philip Andersen, Andreas Bergström, Jim Brouzoulis, Alexander Holmbäck, André Karlsson, Jon Karlsson, Ludwig Kjellström, Thomas Kunambi, Andreas Lans, Hannes Lohmander +* Tetum: Alessandro, Joanico Barros, Peter Coward, Mariano de Deus, Onorio de Jesus Afonso, Mario Alves Pinto +* Thai: Amawalee Combe, Jon Combe, Walaksawan Vervoort +* Turkish: Umut Bektaş, Zafer Cengiz, Cihad Gündoǧdu, Ahmet Sarıcan, Ragıp Ünal * Turkish (Turkey): Saadettin Yasir Akel, Cihad Gündoǧdu, José Luis, Ragıp Ünal -* Ukrainian: Viktor Shytiuk, Mykola Zamkovoi -* Vietnamese: Luan Nguyen, Nguyễn Hồng Quân +* Ukrainian: Mikolai Incognito, Sergiy Shkodenko, Viktor Shytiuk, Zoriana Zaiats, Mykola Zamkovoi +* Vietnamese: Hồng Quân Nguyễn, Luan Nguyen * Welsh: Adam Hughes diff --git a/LICENSE b/LICENSE index c3d098f01f6..78f552b3d55 100644 --- a/LICENSE +++ b/LICENSE @@ -4,21 +4,21 @@ All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. - 3. Neither the name of Torchbox nor the names of its contributors may be used - to endorse or promote products derived from this software without - specific prior written permission. +* Neither the name of Torchbox nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON diff --git a/MANIFEST.in b/MANIFEST.in index ddd18ce9c80..5d7681b9c83 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,4 +1,4 @@ -include LICENSE *.rst *.txt +include LICENSE *.rst *.txt *.md graft wagtail prune wagtail/wagtailadmin/static_src global-exclude __pycache__ diff --git a/Makefile b/Makefile index 827bbb85c86..4ddce6ebe25 100644 --- a/Makefile +++ b/Makefile @@ -13,11 +13,14 @@ clean-pyc: develop: clean-pyc pip install -e .[testing,docs] - npm install && npm run build + npm install --no-save && npm run build lint: flake8 wagtail isort --check-only --diff --recursive wagtail + # Filter out known false positives, while preserving normal output and error codes. + # See https://github.com/motet-a/jinjalint/issues/18. + jinjalint --parse-only wagtail | grep -v 'welcome_page.html:6:70' | tee /dev/tty | wc -l | grep -q '0' npm run lint:css --silent npm run lint:js --silent diff --git a/README.md b/README.md new file mode 100644 index 00000000000..b5939088b3b --- /dev/null +++ b/README.md @@ -0,0 +1,117 @@ +

+ Wagtail +
+
+

+ +Wagtail is an open source content management system built on Django, with a strong community and commercial support. It's focused on user experience, and offers precise control for designers and developers. + +![Wagtail screenshot](https://cdn.jsdelivr.net/gh/wagtail/wagtail@master/.github/wagtail-screenshot-with-browser.png) + +### Features + +* A fast, attractive interface for authors +* Complete control over front-end design and structure +* Scales to millions of pages and thousands of editors +* Fast out of the box, cache-friendly when you need it +* Content API for 'headless' sites with de-coupled front-end +* Runs on a Raspberry Pi or a multi-datacenter cloud platform +* StreamField encourages flexible content without compromising structure +* Powerful, integrated search, using Elasticsearch or PostgreSQL +* Excellent support for images and embedded content +* Multi-site and multi-language ready +* Embraces and extends Django + +Find out more at [wagtail.io](https://wagtail.io/). + +### Getting started + +Wagtail works with [Python 3](https://www.python.org/downloads/), on any platform. + +To get started with Wagtail, run the following in a virtual environment: + +``` bash +pip install wagtail +wagtail start mysite +cd mysite +pip install -r requirements.txt +python manage.py migrate +python manage.py createsuperuser +python manage.py runserver +``` + +For detailed installation and setup docs, see [docs.wagtail.io](http://docs.wagtail.io/). + +### Who’s using it? + +Wagtail is used by NASA, Google, Oxfam, the NHS, Mozilla, MIT, the Red Cross, Salesforce, NBC, BMW, and the US and UK governments. Add your own Wagtail site to [madewithwagtail.org](http://madewithwagtail.org). + +### Documentation + +[docs.wagtail.io](http://docs.wagtail.io/) is the full reference for Wagtail, and includes guides for developers, designers and editors, alongside release notes and our roadmap. + +### Compatibility + +Wagtail supports: + +* Django 2.0.x, 2.1.x and 2.2.x +* Python 3.5, 3.6, 3.7 and 3.8 +* PostgreSQL, MySQL and SQLite as database backends + +Previous versions of Wagtail (1.13 and earlier) additionally supported Python 2.7 and Django 1.x. + +--- + +### Community Support + +There is an active community of Wagtail users and developers responding to questions on [Stack Overflow](http://stackoverflow.com/questions/tagged/wagtail). When posting questions, please read Stack Overflow's advice on [how to ask questions](http://stackoverflow.com/help/how-to-ask) and remember to tag your question "wagtail". + +For topics and discussions that do not fit Stack Overflow's question and answer format, we have a [Slack workspace](https://github.com/wagtail/wagtail/wiki/Slack) and a [Wagtail Support mailing list](https://groups.google.com/forum/#!forum/wagtail). Please respect the time and effort of volunteers by not asking the same question in multiple places. + +We maintain a curated list of third party packages, articles and other resources at [Awesome Wagtail](https://github.com/springload/awesome-wagtail). + +### Commercial Support + +Wagtail is sponsored by [Torchbox](https://torchbox.com/). If you need help implementing or hosting Wagtail, please contact us: hello@torchbox.com. See also [madewithwagtail.org/developers/](https://madewithwagtail.org/developers/) for expert Wagtail developers around the world. + +### Security + +We take the security of Wagtail, and related packages we maintain, seriously. If you have found a security issue with any of our projects please email us at [security@wagtail.io](mailto:security@wagtail.io) so we can work together to find and patch the issue. We appreciate responsible disclosure with any security related issues, so please contact us first before creating a Github issue. + +If you want to send an encrypted email (optional), the public key ID for security@wagtail.io is 0x6ba1e1a86e0f8ce8, and this public key is available from most commonly-used keyservers. + +### Release schedule + +Feature releases of Wagtail are released every three months. Selected releases are designated as Long Term Support (LTS) releases, and will receive maintenance updates for an extended period to address any security and data-loss related issues. For dates of past and upcoming releases and support periods, see [Release Schedule](https://github.com/wagtail/wagtail/wiki/Release-schedule). + +#### Nightly releases + +To try out the latest features before a release, we also create builds from master every night. You can find instructions on how to install the latest nightly release at https://releases.wagtail.io/nightly/index.html + +### Contributing + +If you're a Python or Django developer, fork the repo and get stuck in! We run a separate group for developers of Wagtail itself at https://groups.google.com/forum/#!forum/wagtail-developers (please note that this is not for support requests). + +You might like to start by reviewing the [contributing guidelines](http://docs.wagtail.io/en/latest/contributing/index.html) and checking issues with the [good first issue](https://github.com/wagtail/wagtail/labels/good%20first%20issue) label. + +We also welcome translations for Wagtail's interface. Translation work should be submitted through [Transifex](https://www.transifex.com/projects/p/wagtail/). + +### License +[BSD](https://github.com/wagtail/wagtail/blob/master/LICENSE) + +### Thanks + +We thank the following organisations for their services used in Wagtail's development: + +[![Browserstack](https://cdn.jsdelivr.net/gh/wagtail/wagtail@master/.github/browserstack-logo.svg)](https://www.browserstack.com/)
+[BrowserStack](https://www.browserstack.com/) provides the project with free access to their live web-based browser testing tool, and automated Selenium cloud testing. + +[![squash.io](https://cdn.jsdelivr.net/gh/wagtail/wagtail@master/.github/squash-logo.svg)](https://www.squash.io/)
+[Squash](https://www.squash.io/) provides the project with free test environments for reviewing pull requests. + + +[![Build Status](https://api.travis-ci.org/wagtail/wagtail.svg?branch=master)](https://travis-ci.org/wagtail/wagtail) +[![License](https://img.shields.io/badge/license-BSD-blue.svg)](https://opensource.org/licenses/BSD-3-Clause) +[![Version](https://img.shields.io/pypi/v/wagtail.svg)](https://pypi.python.org/pypi/wagtail/) +[![Coverage](http://codecov.io/github/wagtail/wagtail/coverage.svg?branch=master)](http://codecov.io/github/wagtail/wagtail?branch=master) +[![Slack](https://wagtail-slack.now.sh/badge.svg)](https://wagtail-slack.now.sh) diff --git a/README.rst b/README.rst deleted file mode 100644 index fb641aa9796..00000000000 --- a/README.rst +++ /dev/null @@ -1,91 +0,0 @@ -.. image:: https://api.travis-ci.org/wagtail/wagtail.svg?branch=master - :target: https://travis-ci.org/wagtail/wagtail -.. image:: https://img.shields.io/pypi/l/wagtail.svg - :target: https://pypi.python.org/pypi/wagtail/ -.. image:: https://img.shields.io/pypi/v/wagtail.svg - :target: https://pypi.python.org/pypi/wagtail/ -.. image:: http://codecov.io/github/wagtail/wagtail/coverage.svg?branch=master - :target: http://codecov.io/github/wagtail/wagtail?branch=master - - -Wagtail CMS -=========== - -Wagtail is a content management system built on Django. It's focused on user experience, -and offers precise control for designers and developers. - -.. image:: http://i.imgur.com/hSVerKq.jpg - :width: 728 px - -Features -~~~~~~~~ - -* A fast, attractive interface for authors and editors -* Complete control over design with standard Django templates -* Configure content types through standard Django models -* Fast out of the box. Cache-friendly if you need it -* Tightly integrated search -* Strong document and image management -* Wide support for embedded content -* Straightforward integration with existing Django apps -* Simple, configurable permissions -* Workflow support -* An extensible `form builder `_ -* Multi-site and multi-language support -* Excellent `test coverage `_ - -Find out more at `wagtail.io `_. - -Getting started -~~~~~~~~~~~~~~~ - -.. code-block:: sh - - pip install wagtail - wagtail start mysite - cd mysite - python manage.py migrate - python manage.py createsuperuser - python manage.py runserver - -then sign in at http://127.0.0.1:8000/admin/ - -For detailed installation and setup docs, see `docs.wagtail.io `_. - -Who's using it? -~~~~~~~~~~~~~~~ -`madewithwagtail.org `_ lists some of the public Wagtail sites we know about; please `add your own `_. - -Documentation -~~~~~~~~~~~~~ -`docs.wagtail.io `_ is the full reference for Wagtail, and includes guides for developers, designers and editors, alongside release notes and our roadmap. - -Community Support -~~~~~~~~~~~~~~~~~ -There is an active community of Wagtail users and developers responding to questions on `Stack Overflow `_. When posting questions, please read Stack Overflow's advice on `how to ask questions `_ and remember to tag your question with "wagtail". - -For topics and discussions that do not fit Stack Overflow's question-and-answer format, there is also a `Wagtail Support mailing list `_ and a `Slack workspace `_. - -Commercial Support -~~~~~~~~~~~~~~~~~~ -Wagtail is sponsored by `Torchbox `_. If you need help implementing or hosting Wagtail, please contact us: hello@torchbox.com. - -Thanks -~~~~~~ -We thank `BrowserStack `_, who provide the project with free access to their live web-based browser testing tool, and automated Selenium cloud testing. - -.. image:: https://cdn.rawgit.com/wagtail/wagtail/master/.github/browserstack-logo.svg - :target: https://www.browserstack.com/ - :width: 219 px - -Compatibility -~~~~~~~~~~~~~ -Wagtail supports Django 1.11.x and 2.0 on Python 3.4, 3.5 and 3.6. Supported database backends are PostgreSQL, MySQL and SQLite. - -Contributing -~~~~~~~~~~~~ -If you're a Python or Django developer, fork the repo and get stuck in! We run a separate group for developers of Wagtail itself at https://groups.google.com/forum/#!forum/wagtail-developers (please note that this is not for support requests). - -You might like to start by reviewing the `contributing guidelines `_ and checking issues with the `good first issue `_ label. - -We also welcome translations for Wagtail's interface. Translation work should be submitted through `Transifex `_. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000000..4f2b6694cc2 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,4 @@ +# Security +We take the security of Wagtail, and related packages we maintain, seriously. If you have found a security issue with any of our projects please email us at security@wagtail.io so we can work together to find and patch the issue. We appreciate responsible disclosure with any security related issues, so please contact us first before creating a Github issue. + +If you want to send an encrypted email (optional), the public key ID for security@wagtail.io is 0x6ba1e1a86e0f8ce8, and this public key is available from most commonly-used keyservers. diff --git a/SPONSORS.md b/SPONSORS.md new file mode 100644 index 00000000000..026bb0af5db --- /dev/null +++ b/SPONSORS.md @@ -0,0 +1,17 @@ +# Sponsors + +The following organisations and individuals supported the [Wagtail's First Hatch](https://www.kickstarter.com/projects/noripyt/wagtails-first-hatch) crowdfunding campaign: + +- [Springload](https://springload.nz/) +- [NetFM](https://netfm.org/) +- [Ambient Innovation](https://ambient-innovation.com/) +- [Shenberger Technology](http://shenbergertech.com/) +- [Type/Code](https://typecode.com/) +- [SharperTool](http://sharpertool.com/) +- [Overcast Software](https://www.overcast.io/) +- [Octave](https://octave.nz/) +- [Taywa](https://www.taywa.ch/) +- [Rock Kitchen Harris](https://www.rkh.co.uk/) +- [The Motley Fool](http://www.fool.com/) +- [R Strother Scott](https://twitter.com/rstrotherscott) +- [Beyond Media](http://beyond.works/) diff --git a/circle.yml b/circle.yml deleted file mode 100644 index 0f1d97e8c3c..00000000000 --- a/circle.yml +++ /dev/null @@ -1,19 +0,0 @@ -machine: - python: - version: 3.6.1 - node: - version: 8.9.3 - -dependencies: - pre: - - pip install -e .[testing] - -test: - override: - - flake8 wagtail - - isort --check-only --diff --recursive wagtail - - npm run lint:js - - npm run lint:css - - python -u runtests.py - - npm run test:unit:coverage -- --runInBand - - npm run dist diff --git a/client/package-lock.json b/client/package-lock.json deleted file mode 100644 index a8f129b9b59..00000000000 --- a/client/package-lock.json +++ /dev/null @@ -1,613 +0,0 @@ -{ - "name": "wagtail-client", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "mustache": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.2.1.tgz", - "integrity": "sha1-LEDKIcJ49TFQaCvPkJDkGjM5uHY=" - }, - "yargs": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.7.1.tgz", - "integrity": "sha1-5gQyZYozh/8mnAKOrN5KUS5Djf8=", - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "lodash.assign": "4.0.9", - "os-locale": "1.4.0", - "pkg-conf": "1.1.3", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1", - "set-blocking": "1.0.0", - "string-width": "1.0.1", - "window-size": "0.2.0", - "y18n": "3.2.1", - "yargs-parser": "2.4.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "1.0.1", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", - "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=" - } - } - }, - "wrap-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.0.0.tgz", - "integrity": "sha1-fTD4+HP5pbvDpk2ryNF34HGuQm8=", - "requires": { - "string-width": "1.0.1" - } - } - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "lodash.assign": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.0.9.tgz", - "integrity": "sha1-Cgcx2TWQ3dm6RYn61lqvbuCSF+M=", - "requires": { - "lodash.keys": "4.0.7", - "lodash.rest": "4.0.3" - }, - "dependencies": { - "lodash.keys": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-4.0.7.tgz", - "integrity": "sha1-MOGzvZjlTWoGEZkYEmhba8R8tjs=" - }, - "lodash.rest": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/lodash.rest/-/lodash.rest-4.0.3.tgz", - "integrity": "sha1-TBwyxAAoCHJQ+r9w1C4BUVSPSMU=" - } - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "1.0.0" - }, - "dependencies": { - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "1.0.0" - }, - "dependencies": { - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - } - } - } - } - }, - "pkg-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-1.1.3.tgz", - "integrity": "sha1-N45W1v0T6Iv7b0ol33qD+qvduls=", - "requires": { - "find-up": "1.1.2", - "load-json-file": "1.1.0", - "object-assign": "4.1.0", - "symbol": "0.2.3" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - }, - "dependencies": { - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - } - } - } - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "4.1.4", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.4.tgz", - "integrity": "sha1-7widKIDwM7ARgjzlyPrnmNp3Xb0=" - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.0" - }, - "dependencies": { - "error-ex": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", - "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=", - "requires": { - "is-arrayish": "0.2.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - } - } - } - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - }, - "dependencies": { - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - } - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "0.2.1" - }, - "dependencies": { - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - } - } - } - } - }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" - }, - "symbol": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/symbol/-/symbol-0.2.3.tgz", - "integrity": "sha1-O5hzuKkB5Hxu/iFSajrDcu8ou8c=" - } - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - }, - "dependencies": { - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - } - } - } - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.3.5", - "path-type": "1.1.0" - }, - "dependencies": { - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "4.1.4", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.4.tgz", - "integrity": "sha1-7widKIDwM7ARgjzlyPrnmNp3Xb0=" - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.0" - }, - "dependencies": { - "error-ex": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", - "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=", - "requires": { - "is-arrayish": "0.2.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - } - } - } - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - }, - "dependencies": { - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - } - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "0.2.1" - }, - "dependencies": { - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - } - } - } - } - }, - "normalize-package-data": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", - "integrity": "sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=", - "requires": { - "hosted-git-info": "2.1.5", - "is-builtin-module": "1.0.0", - "semver": "5.1.0", - "validate-npm-package-license": "3.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", - "integrity": "sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "1.1.1" - }, - "dependencies": { - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - } - } - }, - "semver": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz", - "integrity": "sha1-hfLPhVBGXE3wAM99hvawVBBqueU=" - }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.2" - }, - "dependencies": { - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "requires": { - "spdx-license-ids": "1.2.1" - }, - "dependencies": { - "spdx-license-ids": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.1.tgz", - "integrity": "sha1-0H6hek0v2TUfnZTi/5zsdBgP6PM=" - } - } - }, - "spdx-expression-parse": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.2.tgz", - "integrity": "sha1-1SsUtelnB3FECvIlvLVjEirEUvY=", - "requires": { - "spdx-exceptions": "1.0.4", - "spdx-license-ids": "1.2.1" - }, - "dependencies": { - "spdx-exceptions": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.4.tgz", - "integrity": "sha1-IguEI5EZrpBFqJLbgag/TOFvgP0=" - }, - "spdx-license-ids": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.1.tgz", - "integrity": "sha1-0H6hek0v2TUfnZTi/5zsdBgP6PM=" - } - } - } - } - } - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "4.1.4", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.4.tgz", - "integrity": "sha1-7widKIDwM7ARgjzlyPrnmNp3Xb0=" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - }, - "dependencies": { - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - } - } - } - } - } - } - } - } - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "set-blocking": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-1.0.0.tgz", - "integrity": "sha1-zV5dk4BI3xrJLf6S4fFq3WVvXsU=" - }, - "string-width": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.1.tgz", - "integrity": "sha1-ySEptvHX9SrPmvQkom44ZKBc6wo=", - "requires": { - "code-point-at": "1.0.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "code-point-at": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.0.0.tgz", - "integrity": "sha1-9psZLT99keOC5Lcb3bd4eGGasMY=", - "requires": { - "number-is-nan": "1.0.0" - }, - "dependencies": { - "number-is-nan": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz", - "integrity": "sha1-wCD1KcUoKt/dIz2R1LGBw9aG3Es=" - } - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.0" - }, - "dependencies": { - "number-is-nan": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz", - "integrity": "sha1-wCD1KcUoKt/dIz2R1LGBw9aG3Es=" - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", - "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=" - } - } - } - } - }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=" - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yargs-parser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.0.tgz", - "integrity": "sha1-HzZ9ycbPpWYLaXEjDzsnf8Xjrco=", - "requires": { - "camelcase": "2.1.1", - "lodash.assign": "4.0.9" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - } - } - } - } - } - } -} diff --git a/client/package.json b/client/package.json index c946623bac7..fe15f6b18ed 100644 --- a/client/package.json +++ b/client/package.json @@ -6,16 +6,10 @@ "license": "BSD-3-Clause", "author": "Wagtail", "main": "src/index.js", - "bin": { - "wagtail": "./src/cli/index.js" - }, "files": [ "src/index.js" ], "devDependencies": {}, - "dependencies": { - "mustache": "^2.2.1", - "yargs": "^4.2.0" - }, + "dependencies": {}, "scripts": {} } diff --git a/client/scss/_components.scss b/client/scss/_components.scss deleted file mode 100644 index 0e34b1b87a2..00000000000 --- a/client/scss/_components.scss +++ /dev/null @@ -1,4 +0,0 @@ -@import '../src/components/Transition/Transition'; -@import '../src/components/LoadingSpinner/LoadingSpinner'; -@import '../src/components/PublicationStatus/PublicationStatus'; -@import '../src/components/Explorer/Explorer'; diff --git a/client/scss/_settings.scss b/client/scss/_settings.scss new file mode 100644 index 00000000000..18a8986c127 --- /dev/null +++ b/client/scss/_settings.scss @@ -0,0 +1,2 @@ +@import 'settings/variables'; +@import 'settings/variables.icons'; diff --git a/client/scss/_tools.breakpoints.scss b/client/scss/_tools.breakpoints.scss deleted file mode 100644 index 4c9e72f3d7b..00000000000 --- a/client/scss/_tools.breakpoints.scss +++ /dev/null @@ -1,14 +0,0 @@ -$breakpoint-small: $breakpoint-mobile - 0.0625em; -$breakpoint-medium: $breakpoint-mobile; - -@mixin small { - @media only screen and (max-width: $breakpoint-small) { - @content; - } -} - -@mixin medium { - @media only screen and (min-width: $breakpoint-medium) { - @content; - } -} diff --git a/client/scss/_tools.scss b/client/scss/_tools.scss new file mode 100644 index 00000000000..3fa1ccd6d8a --- /dev/null +++ b/client/scss/_tools.scss @@ -0,0 +1,10 @@ +/* TOOLS +These are functions and mixins. +No CSS should be produced by these files. +*/ + +@import 'tools/functions.breakpoints'; +@import 'tools/mixins.breakpoints'; +@import 'tools/mixins.fonts'; +@import 'tools/mixins.general'; +@import 'tools/mixins.grid'; diff --git a/client/scss/components/_breadcrumb.scss b/client/scss/components/_breadcrumb.scss new file mode 100644 index 00000000000..41f97e7321a --- /dev/null +++ b/client/scss/components/_breadcrumb.scss @@ -0,0 +1,108 @@ +.breadcrumb { + @include unlist(); + @include clearfix(); + overflow: hidden; + padding-top: 1.4em; + font-size: 0.85em; + + li { + display: block; + float: left; + padding: 0.5em 1.3em; + position: relative; + text-decoration: none; + color: $color-white; + white-space: nowrap; + line-height: 1.5em; + + a, + span { + color: $color-white; + display: block; + max-width: 12em; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + line-height: 1.6em; + padding-right: 1em; + + &:after { + right: 0; + // z-index: 5; + position: absolute; + font-family: wagtail; + content: map-get($icons, 'arrow-right'); + padding-left: 20px; + font-size: 2em; + color: $color-teal-darker; + line-height: 0.9em; + } + } + + &:hover { + background: $color-teal-dark; + + a { + color: $color-white; + } + } + + &:hover:after { + border-left-color: $color-teal-dark; + } + + &.home { + a { + // stylelint-disable max-nesting-depth + padding-right: 0; + text-align: center; + width: 3em; + font-size: 1em; + text-overflow: clip; + + &:before { + font-size: 1.15rem; + line-height: 0.85em; + padding-top: 0.1em; + } + + &:after { + right: -0.3em; + } + } + } + } + + header & li { + &:before { + border-left: 1em solid $color-white; + position: absolute; + left: 0; + top: 0; + } + } + + &.single { + li a { + white-space: nowrap; + text-overflow: inherit; + max-width: 100%; + } + } + + @include media-breakpoint-up(sm) { + padding-top: 0; + background: $color-teal-darker; + margin-left: -($desktop-nice-padding); + margin-right: -($desktop-nice-padding); + + li { + a, + span { + &:after { + color: $color-teal; + } + } + } + } +} diff --git a/client/scss/components/_button.scss b/client/scss/components/_button.scss new file mode 100644 index 00000000000..66a9f6978e2 --- /dev/null +++ b/client/scss/components/_button.scss @@ -0,0 +1,528 @@ +// Core button style +// Note that these styles include methods to render buttons the same x-browser, described here: +// http: //cbjdigital.com/blog/2010/08/bulletproof_css_input_button_heights +// input[type=submit], +// input[type=reset], +// input[type=button], +.button { + border-radius: 3px; + font-family: Open Sans,Arial,sans-serif; + width: auto; + height: 2.4em; + padding: 0 1em; + font-size: 0.9em; + font-weight: normal; + vertical-align: middle; + display: inline-block; + background-color: $color-button; + border: 1px solid $color-button; + color: $color-white; + text-decoration: none; + text-transform: uppercase; + white-space: nowrap; + position: relative; + overflow: hidden; + box-sizing: border-box; + -webkit-font-smoothing: auto; + // stylelint-disable-next-line property-no-vendor-prefix + -moz-appearance: none; + + &:hover { + color: $color-teal; + } + + + &.yes { + background-color: $color-button-yes; + border: 1px solid $color-button-yes; + + &.button-secondary { + border: 1px solid $color-button-yes; + color: $color-button-yes; + background-color: transparent; + } + + &:hover { + color: $color-white; + border-color: transparent; + background-color: $color-button-yes-hover; + } + + &.button-nobg:hover { + color: $color-button-yes; + background-color: transparent; + } + } + + &.warning { + background-color: $color-button-warning; + border: 1px solid $color-button-warning; + + &.button-secondary { + border: 1px solid $color-button-warning; + color: $color-button-warning; + background-color: transparent; + } + + &:hover { + color: $color-white; + border-color: transparent; + background-color: $color-button-warning-hover; + } + + &.button-nobg:hover { + color: $color-button-warning; + background-color: transparent; + } + } + + + &.no, + &.serious { + background-color: $color-button-no; + border: 1px solid $color-button-no; + + &.button-secondary { + border: 1px solid $color-button-no; + color: $color-button-no; + background-color: transparent; + } + + &:hover { + color: $color-white; + border-color: transparent; + background-color: $color-button-no-hover; + } + + &.button-nobg:hover { + color: $color-button-no; + background-color: transparent; + } + } + + &.button-nobg { + border: 0; + background-color: transparent; + } + + &.bicolor { + border: 0; + padding-left: 3.5em; + + &:before { + font-size: 1rem; + position: absolute; + left: 0; + top: 0; + width: 2em; + line-height: 1.85em; + height: 100%; + text-align: center; + background-color: rgba(0, 0, 0, 0.2); + display: block; + border-top-left-radius: inherit; + border-bottom-left-radius: inherit; + } + } + + &.button-small.bicolor { + padding-left: 3.5em; + + &:before { + width: 2em; + font-size: 0.9rem; + line-height: 1.65em; + } + } + + + // + input[type=submit], + // + input[type=reset], + // + input[type=button], + + .button { + // + button { + margin-left: 1em; + } + + // A completely unstyled button + &.unbutton { + border-radius: 0; + width: auto; + height: auto; + padding: 0; + font-size: inherit; + font-weight: normal; + vertical-align: middle; + display: inline; + background-color: transparent; + border: 0; + color: inherit; + text-decoration: none; + text-transform: uppercase; + white-space: nowrap; + position: relative; + overflow: hidden; + box-sizing: border-box; + -webkit-font-smoothing: auto; + // stylelint-disable-next-line property-no-vendor-prefix + -moz-appearance: none; + } + + &:hover { + background-color: $color-button-hover; + color: $color-white; + border-color: transparent; + + &.hover-no { + background-color: $color-button-no; + } + } + + &.button-longrunning { + span { + @include transition(all 0.3s ease); + transform: scale(0.9); + display: inline-block; + height: 0.9em; + position: relative; + opacity: 0; + width: 0; + visibility: hidden; + text-align: center; + padding-right: 0; + } + + em { + font-style: normal; + } + + &.button-longrunning-active span { + transform: scale(1); + visibility: visible; + width: 1em; + opacity: 0.8; + padding-right: 0.5em; + } + + .icon-spinner:after { + text-align: center; + position: absolute; + left: 0; + margin: 0; + line-height: 1em; + display: inline-block; + font-size: 1em; + } + } + + &:disabled, + &[disabled], + &.disabled { + background-color: $color-grey-3; + border-color: $color-grey-3; + color: $color-grey-2; + cursor: default; + } + + &.button-secondary:disabled, + &.button-secondary[disabled], + &.button-secondary.disabled { + background-color: $color-white; + border-color: $color-grey-3; + color: $color-grey-3; + } + + &.button-nostroke { + border: 0; + } + + @include media-breakpoint-up(sm) { + font-size: 0.95em; + padding: 0 1.4em; + height: 3em; + + &.icon.text-replace { + width: 2.2rem; + height: 2.2rem; + + &:before { + line-height: 2.1em; + } + } + + &.button-small { + &.icon.text-replace { + height: 1.8rem; + width: 1.8rem; + + // stylelint-disable-next-line max-nesting-depth + &:before { + line-height: 1.7em; + } + } + } + + &.bicolor { + padding-left: 3.7em; + + &:before { + width: 2em; + line-height: 2.2em; + font-size: 1.1rem; + } + } + + &.button-small.bicolor { + // line-height: 2.2em; + padding-left: 3em; + + &:before { + width: 1.8em; + line-height: 1.65em; + } + } + } +} + + +.button-small { + padding: 0 0.8em; + height: 2em; + font-size: 0.95em; +} + +.button-secondary { + color: $color-button; + background-color: transparent; +} + +// Buttons which are only an icon +.button.icon.text-replace { + font-size: 0; // unavoidable duplication of setting in icons.scss + width: 1.8rem; + height: 1.8rem; + + &:before { + line-height: 1.7em; + } +} + +.button-neutral { + color: $color-grey-2; + + &:hover { + color: $color-teal; + } +} + +.yes { + background-color: $color-button-yes; + border: 1px solid $color-button-yes; + + &.button-secondary { + border: 1px solid $color-button-yes; + color: $color-button-yes; + background-color: transparent; + } + + &:hover { + color: $color-white; + border-color: transparent; + background-color: $color-button-yes-hover; + } + + &.button-nobg:hover { + color: $color-button-yes; + background-color: transparent; + } +} + +.no, +.serious { + background-color: $color-button-no; + border: 1px solid $color-button-no; + + &.button-secondary { + border: 1px solid $color-button-no; + color: $color-button-no; + background-color: transparent; + } + + &:hover { + color: $color-white; + border-color: transparent; + background-color: $color-button-no-hover; + } + + &.button-nobg:hover { + color: $color-button-no; + background-color: transparent; + } +} + +.button-nobg { + border: 0; + background-color: transparent; +} + +.bicolor { + border: 0; + padding-left: 3.5em; + + &:before { + font-size: 1rem; + position: absolute; + left: 0; + top: 0; + width: 2em; + line-height: 1.85em; + height: 100%; + text-align: center; + background-color: rgba(0, 0, 0, 0.2); + display: block; + } +} + +.button-small.bicolor { + padding-left: 3.5em; + + &:before { + width: 2em; + font-size: 0.8rem; + line-height: 1.65em; + } +} + + +a.button { + line-height: 2.4em; + height: auto; + + &.button-small { + line-height: 1.85em; + } + + @include media-breakpoint-up(sm) { + line-height: 2.9em; + } +} + +// Special styles to counteract Firefox's completely unwarranted assumptions about button styles +input[type=submit], +input[type=reset], +input[type=button], +button { + padding: 0 1em; + + @include media-breakpoint-up(sm) { + &.button-small { + height: 2em; + } + } +} + +.button-group { + @include clearfix; + + input[type=submit], + input[type=reset], + input[type=button], + .button, + button { + border-radius: 0; + float: left; + margin-right: 1px; + margin-left: 0; + + &:only-child { + border-radius: 3px; + } + + &:first-child { + border-radius: 3px 0 0 3px; + } + + &:last-child { + border-radius: 0 3px 3px 0; + margin-right: 0; + } + } + + &.button-group-square { + &, + input[type=submit], + input[type=reset], + input[type=button], + .button, + button { + border-radius: 0; + } + } +} + + +.multiple { + padding: 0; + max-width: 1024px - 50px; + overflow: hidden; + + > li { + @include row(); + border-radius: 2px; + position: relative; + overflow: hidden; + background-color: $color-white; + padding: 1em 10em 1em 1.5em; // 10em padding leaves room for controls + margin-bottom: 1em; + border: 1px solid lighten($color-grey-4, 3%); // really trying to avoid creating more greys, but this one is better than grey 4 or 5 + } + + &.moving { + position: relative; + } + + li.moving { + position: absolute; + width: 100%; + } + + fieldset { + padding-top: 0; + padding-bottom: 0; + } + + // Object controls + .controls { + position: absolute; + z-index: 1; + right: 1em; + top: 1em; + color: $color-white; + + li { + float: left; + margin-right: 1px; + + &:last-child { + margin-right: 0; + } + } + + .disabled { + display: none; + visibility: hidden; + } + } + +} + +// wrapper around add button for mutliple objects +.add { + font-weight: 700; + cursor: pointer; + margin-top: 0; + margin-bottom: 0; + padding-top: 1em; + padding-bottom: 2em; + clear: both; +} diff --git a/client/scss/components/_chooser.scss b/client/scss/components/_chooser.scss new file mode 100644 index 00000000000..907ea9f3d0b --- /dev/null +++ b/client/scss/components/_chooser.scss @@ -0,0 +1,143 @@ +/* +TODO this chooser style has been made more generic based on two identical +methods for choosing pages and images that were previously included in their +own less files in each app directory (and since deleted). It would be best if +an admin 'theme' provided all the design for a UI in a single place, but +should that be a series of overrides to the css provided from an app? If so, +perhaps those two previous less files should be re-instated and then +overriden here? hmm. +*/ + +.chooser { + // We show the 'chosen' state... + @include clearfix(); + + input[type=text] { + float: left; + width: 50%; + margin-right: 1em; + } + + .chosen { + display: block; + } + + .unchosen, + .chosen { + position: relative; + + &:before { + vertical-align: middle; + font-family: wagtail; + content: ''; + // position: relative + display: inline-block; + // float: left; + color: $color-grey-3; + line-height: 1em; + font-size: 2.5em; + margin-right: 0.3em; + } + } + + .unchosen { + display: none; + } + + .actions { + @include clearfix; + overflow: hidden; + + li { + float: left; + margin: 0.3em; + } + } + + // ...unless the .page-chooser has the 'blank' class set + &.blank { + .chosen { display: none; } + + .unchosen { display: block; } + } +} + +// standard way of doing a chooser where the chosen object's title is overlaid +.page-chooser, +.snippet-chooser, +.document-chooser { + .chosen { + .title { + color: $color-grey-1; + // display: block; + padding-left: 1em; + display: inline-block; + } + + .actions { + clear: both; + padding-top: 0.6em; + } + } +} + +.page-chooser { + .unchosen, + .chosen { + &:before { + content: map-get($icons, 'doc-empty-inverse'); + } + } +} + +.snippet-chooser { + .unchosen, + .chosen { + &:before { + content: map-get($icons, 'snippet'); + } + } +} + +.document-chooser { + .unchosen, + .chosen { + &:before { + content: map-get($icons, 'doc-full-inverse'); + } + } +} + +.image-chooser { + .unchosen, + .chosen { + &:before { + content: map-get($icons, 'image'); + } + } + + .chosen { + padding-left: $thumbnail-width; + + &:before { + content: ''; + } + + .preview-image { + float: left; + margin-left: -($thumbnail-width); + margin-right: 1em; + max-width: $thumbnail-width; + + // Resize standard Wagtail thumbnail size (165x165) to 130 for space-saving purposes. + // We could request a 130x130 rendition, but that's just unnecessary and burdens installations + // where images are store off-site with higher rendering times. + img { + max-width: $thumbnail-width; + max-height: $thumbnail-width; + height: auto; + width: auto; + } + } + } +} diff --git a/wagtail/admin/static_src/wagtailadmin/scss/components/_dropdowns.scss b/client/scss/components/_dropdown.legacy.scss similarity index 56% rename from wagtail/admin/static_src/wagtailadmin/scss/components/_dropdowns.scss rename to client/scss/components/_dropdown.legacy.scss index 39cb4015807..bc43f6a04e1 100644 --- a/wagtail/admin/static_src/wagtailadmin/scss/components/_dropdowns.scss +++ b/client/scss/components/_dropdown.legacy.scss @@ -227,189 +227,3 @@ .dropdown ul { @include transition(opacity 0.2s linear); } - - -// ============================================================================= -// Listing view smaller dropdowns -// ============================================================================= - -// .c-dropdown { -// } -.o-icon { - display: inline-block; - vertical-align: middle; - line-height: 1; - margin-top: -0.25rem; -} - -.c-dropdown__button { - display: inline-block; - box-sizing: border-box; - padding-left: 0.5rem; - padding-right: 0.25rem; - // Make this the same as the other buttons - line-height: 1.85; - border: solid 1px transparent; - border-radius: 2px; - font-size: 0.95em; - cursor: pointer; - -webkit-font-smoothing: subpixel-antialiased; - user-select: none; -} - -.c-dropdown__toggle { - display: inline-block; -} - -.c-dropdown__menu.c-dropdown__menu { - margin-top: 0.75rem; - padding: 0.75rem 1rem; - min-width: 8rem; - text-transform: none; - position: absolute; - z-index: 1; - animation: dropdownIn 0.1s ease-out backwards; - list-style: none; -} - -.c-dropdown__item { - margin-bottom: 0.375rem; - - &:hover { - .c-dropdown__indicator { - opacity: 0.6; - } - } -} - - - -.c-dropdown__item:last-child { - margin-bottom: 0; -} - -.c-dropdown__divider { - border-color: #555; - border-style: dotted; - margin-top: 12px; - margin-bottom: 12px; -} - -// ============================================================================= -// Arrows -// ============================================================================= -.u-arrow:before { - content: ''; - border: solid 0.35rem transparent; - display: block; - position: absolute; -} - -.u-arrow--tl:before { - bottom: 100%; - left: 1rem; -} - -// ============================================================================= -// Default dropdown theme -// ============================================================================= - -// .t-default { - -// } -.t-default .u-btn-current { - border-color: rgba(0, 0, 0, 0.15); - color: #43b1b0; -} - -.t-default .u-btn-current:hover { - background: #43b1b0; - color: #fff; - border-color: #43b1b0; -} - -.t-default .u-btn-current:active { - background: #333; - color: #fff; - border-color: #333; -} - -.t-inverted .u-btn-current { - border-color: rgba(0, 0, 0, 0.25); - color: #fff; -} - -.t-inverted .u-btn-current:hover { - background-color: $color-teal-darker; - border-color: $color-teal-darker; -} - -.t-inverted .u-btn-current:active { - border-color: rgba(0, 0, 0, 0.25); - background: #333; - color: #fff; -} - - -// ============================================================================= -// Dark theme -// ============================================================================= -.t-dark .u-link { - color: #fff; -} - -.t-dark .u-link:hover { - color: #aaa; -} - -.t-dark .u-background { - background: #333; -} - -.t-dark .u-arrow:before { - border-bottom-color: #333; -} - -@keyframes dropdownIn { - 0% { - opacity: 0; - } - - 100% { - opacity: 1; - } -} - -// ============================================================================= -// Light theme -// ============================================================================= -.t-light .u-link { - color: #333; -} - -.t-light .u-link:hover { - color: #aaa; -} - -.t-light .u-background { - background: #fff; - border-color: #ccc; -} - -.t-light .u-arrow:before { - border-bottom-color: #fff; -} - -// ============================================================================= -// States -// ============================================================================= -.u-toggle { - display: none; -} - -.is-open .u-toggle { - display: block; -} - - - diff --git a/client/scss/components/_dropdown.scss b/client/scss/components/_dropdown.scss new file mode 100644 index 00000000000..93b8065d39c --- /dev/null +++ b/client/scss/components/_dropdown.scss @@ -0,0 +1,66 @@ +// ============================================================================= +// Listing view smaller dropdowns +// ============================================================================= + +// .c-dropdown { +// } +.c-dropdown__button { + display: inline-block; + box-sizing: border-box; + padding-left: 0.5rem; + padding-right: 0.25rem; + // Make this the same as the other buttons + line-height: 1.85; + border: solid 1px transparent; + border-radius: 2px; + font-size: 0.95em; + cursor: pointer; + -webkit-font-smoothing: subpixel-antialiased; + user-select: none; +} + +.c-dropdown__toggle { + display: inline-block; +} + +.c-dropdown__menu.c-dropdown__menu { + margin-top: 0.75rem; + padding: 0.75rem 1rem; + min-width: 8rem; + text-transform: none; + position: absolute; + z-index: 1; + animation: dropdownIn 0.1s ease-out backwards; + list-style: none; +} + +.c-dropdown__item { + margin-bottom: 0.375rem; + + &:hover { + .c-dropdown__indicator { + opacity: 0.6; + } + } +} + +.c-dropdown__item:last-child { + margin-bottom: 0; +} + +.c-dropdown__divider { + border-color: #555; + border-style: dotted; + margin-top: 12px; + margin-bottom: 12px; +} + +@keyframes dropdownIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} diff --git a/client/scss/components/_footer.scss b/client/scss/components/_footer.scss new file mode 100644 index 00000000000..6d8ae3ea75a --- /dev/null +++ b/client/scss/components/_footer.scss @@ -0,0 +1,76 @@ +footer { + @include transition(bottom 0.5s ease 1s); + @include row(); + border-radius: 3px 3px 0 0; + box-shadow: 0 0 2px rgba(255, 255, 255, 0.5); + background: $color-grey-1; + position: fixed; + bottom: 0; + padding: 0.5em; + width: 90%; + margin: 0 5%; + color: $color-white; + + ul { + @include unlist(); + } + + li { + float: left; + } + + .actions { + width: 250px; + margin-right: $grid-gutter-width / 2; + } + + .preview .dropdown { + width: 250px; + } + + .meta { + float: right; + text-align: right; + padding: 7px $grid-gutter-width / 2; + font-size: 0.85em; + + p { + margin: 0; + margin-right: $grid-gutter-width; + white-space: nowrap; + } + + a { + color: inherit; + + &:hover { + color: $color-link; + } + } + } + + @include media-breakpoint-down(xs) { + .actions, + .preview, + .preview .dropdown { + width: 100%; + } + + .meta { + p { + white-space: normal; + width: 100%; + } + + .avatar { + left: auto; + } + } + } + + @include media-breakpoint-up(sm) { + margin-left: $desktop-nice-padding; + margin-right: $desktop-nice-padding; + width: calc(100% - #{$menu-width} - #{2 * $desktop-nice-padding}); + } +} diff --git a/client/scss/components/_forms.scss b/client/scss/components/_forms.scss new file mode 100644 index 00000000000..81e0e8b64b8 --- /dev/null +++ b/client/scss/components/_forms.scss @@ -0,0 +1,420 @@ +// These are the generic stylings for forms of any type. +// If you're styling something specific to the page editing interface, +// it probably ought to go in layouts/page-editor.scss + +// TODO: mixin, +// These these styles are currently in elements +// but the ones for the class should be here +// +// label, +// .label { +// text-transform: none; +// font-weight: bold; +// color: $color-grey-1; +// font-size: 1.1em; +// display: block; +// padding: 0 0 0.8em; +// margin: 0; +// line-height: 1.3em; +// +// .checkbox &, +// .radio & { +// display: inline; +// } +// } +.plain-checkbox-label { + // cancel heavy / floated label styles, for labels that should appear inline against checkboxes + + float: none; + color: inherit; + font-weight: inherit; + font-size: inherit; +} + +// TODO: mixin, +// These these styles are currently in elements +// but the ones for the classes should be here +// +// input, +// textarea, +// select, +// .halloeditor, +// .tagit { +// appearance: none; +// box-sizing: border-box; +// border-radius: 6px; +// width: 100%; +// font-family: Open Sans,Arial,sans-serif; +// border: 1px solid $color-input-border; +// padding: 0.9em 1.2em; +// background-color: $color-fieldset-hover; +// color: $color-text-input; +// font-size: 1.2em; +// font-weight: 300; +// +// &:hover { +// background-color: $color-white; +// } +// +// &:focus { +// background-color: $color-input-focus; +// border-color: $color-input-focus-border; +// } +// +// &:disabled, +// &[disabled], +// &:disabled:hover, +// &[disabled]:hover { +// background-color: inherit; +// cursor: default; +// color: $color-grey-4; +// } +// } + +// Reset the arrow on ``s in IE10+. +select::-ms-expand { + display: none; +} + +.file_field { + .input { + label { + float: none; + display: inline; + padding: 0; + } + + input[type=checkbox] { + margin-top: 5px; + } + + a { + &:after { + content: ' '; + display: block; + } + } + } +} + + +// radio and check boxes +input[type=radio], +input[type=checkbox] { + border-radius: 0; + cursor: pointer; + border: 0; +} + +input[type=radio] { + height: 12px; + width: auto; + position: relative; + margin-right: 27px; +} + +input[type=radio]:before { + border-radius: 100%; + font-family: wagtail; + font-style: normal; + text-align: center; + position: absolute; + top: -5px; + left: -2px; + cursor: pointer; + display: block; + content: map-get($icons, 'radio-full'); + width: 1em; + height: 1em; + line-height: 1.1em; + padding: 4px; + background-color: $color-white; + color: $color-grey-4; + border: 1px solid $color-grey-4; +} + +input[type=radio]:checked:before { + content: map-get($icons, 'radio-full'); + color: $color-teal; +} + +input[type=checkbox] { + height: 12px; + width: auto; + position: relative; + margin-right: 27px; +} + +input[type=checkbox]:before { + font-family: wagtail; + font-style: normal; + text-align: center; + position: absolute; + top: -5px; + cursor: pointer; + display: block; + content: map-get($icons, 'tick'); + line-height: 20px; + width: 20px; + height: 20px; + background-color: $color-white; + border: 1px solid $color-grey-4; + color: $color-white; +} + +input[type=checkbox]:checked:before { + color: $color-teal; +} + + +// Special styles to counteract Firefox's completely unwarranted assumptions about button styles +input[type=submit], +input[type=reset], +input[type=button], +button { + padding: 0 1em; + + @include media-breakpoint-up(sm) { + &.button-small { + height: 2em; + } + } +} + +// Transitions +fieldset, +input, +textarea, +select { + @include transition(background-color 0.2s ease); +} diff --git a/client/scss/elements/_typography.scss b/client/scss/elements/_typography.scss new file mode 100644 index 00000000000..ba4574f0ed1 --- /dev/null +++ b/client/scss/elements/_typography.scss @@ -0,0 +1,93 @@ +@include webfont(Open Sans, opensans-light, 300, normal); +@include webfont(Open Sans, opensans-regular, 400, normal); +@include webfont(Open Sans, opensans-semibold, 600, normal); +@include webfont(Open Sans, opensans-bold, 700, normal); +@include webfont(Roboto Slab, robotoslab-regular, 400, normal); +@include webfont(Roboto Slab, robotoslab-bold, 700, normal); + +body { + -webkit-font-smoothing: antialiased; // Do not remove! + font-family: Open Sans, Arial, sans-serif; + font-size: 85%; + line-height: 1.5em; + color: $color-text-base; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: normal; +} + +h1 { + line-height: 1.3em; + font-size: 1.5em; + text-transform: uppercase; + color: $color-grey-1; + font-weight: 600; + + span { + text-transform: none; + font-weight: 300; + } +} + +h2 { + text-transform: uppercase; + font-size: 1.3em; + font-family: Open Sans; + font-weight: 600; + color: $color-grey-2; +} + +p { + margin-top: 0; +} + +a { + // @include transition(color 0.2s ease, background-color 0.2s ease); + color: $color-link; + text-decoration: none; + + &:hover { + color: $color-link-hover; + } +} + +code { + box-shadow: inset 0 0 4px 0 rgba(0, 0, 0, 0.2); + background-color: $color-fieldset-hover; + padding: 2px 5px; +} + +kbd { + border-radius: 3px; + font-family: Open Sans, Arial, sans-serif; + border: 1px solid $color-grey-2; + border-color: rgba(0, 0, 0, 0.2); + padding: 0.3em 0.5em; +} + +dl, +dt, +dd { + padding: 0; + margin: 0; +} + +dl { + margin-top: 1em; +} + +dt { + color: $color-grey-2; + text-transform: uppercase; + font-size: 0.9em; +} + +dd { + margin-bottom: 1em; +} diff --git a/client/scss/generic/_generic.scss b/client/scss/generic/_generic.scss new file mode 100644 index 00000000000..441a18b24a4 --- /dev/null +++ b/client/scss/generic/_generic.scss @@ -0,0 +1 @@ +// generic styles go in this folder. diff --git a/client/scss/objects/_avatar.scss b/client/scss/objects/_avatar.scss new file mode 100644 index 00000000000..760ac1890af --- /dev/null +++ b/client/scss/objects/_avatar.scss @@ -0,0 +1,35 @@ +// user avatars +.avatar { + border-radius: 100%; + position: relative; + display: inline-block; + vertical-align: middle; + text-align: center; + overflow: hidden; + width: 50px; + height: 50px; + + img { + position: absolute; + z-index: 2; + top: 0; + left: 0; + right: 0; + border: 0; + } + + &.small { + vertical-align: middle; + margin: 0 0.5em; + width: 25px; + height: 25px; + } + + &.square { + border-radius: 0; + + &:before { + border-radius: 0; + } + } +} diff --git a/client/scss/_objects.scss b/client/scss/objects/_objects.scss similarity index 51% rename from client/scss/_objects.scss rename to client/scss/objects/_objects.scss index c62ae707d9b..b1ff5f7e583 100644 --- a/client/scss/_objects.scss +++ b/client/scss/objects/_objects.scss @@ -5,3 +5,12 @@ vertical-align: middle; line-height: 1.5; } + + +// For dropdowns +.o-icon { + display: inline-block; + vertical-align: middle; + line-height: 1; + margin-top: -0.25rem; +} diff --git a/client/scss/overrides/_pages.homepage.scss b/client/scss/overrides/_pages.homepage.scss new file mode 100644 index 00000000000..f903223a8fa --- /dev/null +++ b/client/scss/overrides/_pages.homepage.scss @@ -0,0 +1,3 @@ +.homepage h1 { + text-transform: none; +} diff --git a/client/scss/overrides/_pages.page-explorer.scss b/client/scss/overrides/_pages.page-explorer.scss new file mode 100644 index 00000000000..6579e27f4a5 --- /dev/null +++ b/client/scss/overrides/_pages.page-explorer.scss @@ -0,0 +1,3 @@ +.page-explorer h2 { + text-transform: none; +} diff --git a/client/scss/overrides/_utilities.dropdowns.scss b/client/scss/overrides/_utilities.dropdowns.scss new file mode 100644 index 00000000000..cae0b9628f4 --- /dev/null +++ b/client/scss/overrides/_utilities.dropdowns.scss @@ -0,0 +1,105 @@ +// ============================================================================= +// Arrows +// ============================================================================= +.u-arrow:before { + content: ''; + border: solid 0.35rem transparent; + display: block; + position: absolute; +} + +.u-arrow--tl:before { + bottom: 100%; + left: 1rem; +} + +// ============================================================================= +// Default dropdown theme +// ============================================================================= + +// .t-default { + +// } +.t-default .u-btn-current { + border-color: rgba(0, 0, 0, 0.15); + color: $color-teal; +} + +.t-default .u-btn-current:hover { + background: $color-teal; + color: #fff; + border-color: $color-teal; +} + +.t-default .u-btn-current:active { + background: #333; + color: #fff; + border-color: #333; +} + +.t-inverted .u-btn-current { + border-color: rgba(0, 0, 0, 0.35); + color: #fff; +} + +.t-inverted .u-btn-current:hover { + background-color: $color-teal-darker; + border-color: rgba(0, 0, 0, 0.35); +} + +.t-inverted .u-btn-current:active { + border-color: rgba(0, 0, 0, 0.35); + background: #333; + color: #fff; +} + + +// ============================================================================= +// Dark theme +// ============================================================================= +.t-dark .u-link { + color: #fff; +} + +.t-dark .u-link:hover { + color: #aaa; +} + +.t-dark .u-background { + background: #333; +} + +.t-dark .u-arrow:before { + border-bottom-color: #333; +} + +// ============================================================================= +// Light theme +// ============================================================================= +.t-light .u-link { + color: #333; +} + +.t-light .u-link:hover { + color: #aaa; +} + +.t-light .u-background { + background: #fff; + border-color: #ccc; +} + +.t-light .u-arrow:before { + border-bottom-color: #fff; +} + +// ============================================================================= +// States +// ============================================================================= +.u-toggle { + display: none; +} + +.is-open .u-toggle { + display: block; +} diff --git a/client/scss/overrides/_utilities.focus.scss b/client/scss/overrides/_utilities.focus.scss new file mode 100644 index 00000000000..e53f1aaf69a --- /dev/null +++ b/client/scss/overrides/_utilities.focus.scss @@ -0,0 +1,11 @@ +// stylelint-disable declaration-no-important +// Set global focus outline styles so they are consistent across the UI, +// without individual components having to explicitly define focus styles. +// Using !important because we want to enforce only one style is used across the UI. +.focus-outline-on *:focus { + outline: $focus-outline-width solid $color-focus-outline !important; +} + +.focus-outline-off *:focus { + outline: none !important; +} diff --git a/client/scss/_utilities.scss b/client/scss/overrides/_utilities.hidden.scss similarity index 51% rename from client/scss/_utilities.scss rename to client/scss/overrides/_utilities.hidden.scss index fb0bfbf4595..b2b697b0e36 100644 --- a/client/scss/_utilities.scss +++ b/client/scss/overrides/_utilities.hidden.scss @@ -3,38 +3,38 @@ display: none !important; } -.u-hidden\@medium { - @include medium { +.u-hidden\@sm { + @include media-breakpoint-up(sm) { display: none !important; } } -.u-hidden\@small { - @include small { +.u-hidden\@xs { + @include media-breakpoint-down(xs) { display: none !important; } } -.u-inline\@medium { - @include medium { +.u-inline\@sm { + @include media-breakpoint-up(sm) { display: inline !important; } } -.u-inline\@small { - @include small { +.u-inline\@xs { + @include media-breakpoint-down(xs) { display: inline !important; } } -.u-block\@medium { - @include medium { +.u-block\@sm { + @include media-breakpoint-up(sm) { display: block !important; } } -.u-block\@small { - @include small { +.u-block\@xs { + @include media-breakpoint-down(xs) { display: block !important; } } diff --git a/client/scss/overrides/_utilities.legacy.scss b/client/scss/overrides/_utilities.legacy.scss new file mode 100644 index 00000000000..9719d97cf0e --- /dev/null +++ b/client/scss/overrides/_utilities.legacy.scss @@ -0,0 +1,55 @@ +.clearfix { + @include clearfix(); +} + +.nice-padding { + padding-left: $mobile-nice-padding; + padding-right: $mobile-nice-padding; + + @include media-breakpoint-up(sm) { + padding-left: $desktop-nice-padding; + padding-right: $desktop-nice-padding; + } +} + +@include media-breakpoint-up(sm) { + .divider-before { + border-left: 1px solid $color-grey-4; + } + + .divider-after { + border-right: 1px solid $color-grey-4; + } + +} + +body.reordering { + overflow: visible; +} + +// Show a transparency grid in background +.show-transparency { + background: url('#{$images-root}transparency.svg'); +} + +// make a block-level element inline +.inline { + display: inline; +} + +.inline-block { + display: inline-block; +} + +.block { + display: block; +} + +.unlist { + @include unlist(); +} + +// utility class to allow things to be scrollable if their contents can't wrap more nicely +.overflow { + overflow: auto; +} diff --git a/client/scss/overrides/_utilities.text.legacy.scss b/client/scss/overrides/_utilities.text.legacy.scss new file mode 100644 index 00000000000..84e7d3602c9 --- /dev/null +++ b/client/scss/overrides/_utilities.text.legacy.scss @@ -0,0 +1,3 @@ +.unbold { + font-weight: normal; +} diff --git a/client/scss/overrides/_utilities.text.scss b/client/scss/overrides/_utilities.text.scss new file mode 100644 index 00000000000..9f97d0099a2 --- /dev/null +++ b/client/scss/overrides/_utilities.text.scss @@ -0,0 +1,11 @@ +.u-text-transform-uppercase { + text-transform: uppercase; +} + +.u-text-weight-normal { + font-weight: normal; +} + +.u-para { + margin-bottom: 1rem; +} diff --git a/client/scss/overrides/_utilities.visuallyhidden.scss b/client/scss/overrides/_utilities.visuallyhidden.scss new file mode 100644 index 00000000000..41166b92a50 --- /dev/null +++ b/client/scss/overrides/_utilities.visuallyhidden.scss @@ -0,0 +1,7 @@ +.visuallyvisible { + @include visuallyvisible; +} + +.visuallyhidden { + @include visuallyhidden; +} diff --git a/wagtail/admin/static_src/wagtailadmin/scss/components/_datetimepicker.scss b/client/scss/overrides/_vendor.datetimepicker.scss similarity index 96% rename from wagtail/admin/static_src/wagtailadmin/scss/components/_datetimepicker.scss rename to client/scss/overrides/_vendor.datetimepicker.scss index cbf22cb8126..10f6eeeeda7 100644 --- a/wagtail/admin/static_src/wagtailadmin/scss/components/_datetimepicker.scss +++ b/client/scss/overrides/_vendor.datetimepicker.scss @@ -84,7 +84,7 @@ float: left; &:before { - content: 'z'; + content: map-get($icons, 'arrow-left'); } } @@ -93,7 +93,7 @@ margin-left: 5px; &:before { - content: 'W'; + content: map-get($icons, 'home'); } } @@ -101,7 +101,7 @@ float: right; &:before { - content: 'n'; + content: map-get($icons, 'arrow-right'); } } @@ -127,11 +127,11 @@ } .xdsoft_prev:before { - content: 'e'; + content: map-get($icons, 'arrow-up'); } .xdsoft_next:before { - content: 'q'; + content: map-get($icons, 'arrow-down'); } .xdsoft_time_box { diff --git a/client/scss/overrides/_vendor.tagit.scss b/client/scss/overrides/_vendor.tagit.scss new file mode 100644 index 00000000000..88138fa230b --- /dev/null +++ b/client/scss/overrides/_vendor.tagit.scss @@ -0,0 +1,43 @@ +// taggit tagging +.tagit { + padding: 0.6em 1.2em; + + .tagit-choice { + border: 0; + } +} + +// Additional specificity (.admin_tag_widget ) required to override tagit stylesheets, +// which get added after the core CSS, and otherweise trump our styles. +.admin_tag_widget ul.tagit input[type='text'] { + padding: 0.2em 0.5em; +} + +// Additional specificity (.admin_tag_widget ) required to override tagit stylesheets, +// which get added after the core CSS, and otherweise trump our styles. +.admin_tag_widget ul.tagit li.tagit-choice-editable { + padding: 0 23px 0 0; +} + +.ui-front { // provided by jqueryui but not high enough an index + z-index: 1000; +} + +.tagit-close { + .ui-icon-close { + margin-left: 1em; + text-indent: 0; + background: none; + } + + .ui-icon-close:before { + font-family: wagtail; + display: block; + color: $color-grey-3; + content: map-get($icons, 'cross'); + } + + .ui-icon-close:hover:before { + color: $color-red; + } +} diff --git a/client/scss/settings/_variables.icons.scss b/client/scss/settings/_variables.icons.scss new file mode 100644 index 00000000000..8acf36debbd --- /dev/null +++ b/client/scss/settings/_variables.icons.scss @@ -0,0 +1,89 @@ +$icons: ( + 'arrow-down-big': '\e030', + 'arrow-down': '\e01a', + 'arrow-left': '\e022', + 'arrow-right': '\e017', + 'arrow-up-big': '\e02f', + 'arrow-up': '\e010', + 'arrows-up-down': '\e016', + 'bin': '\e038', + 'bold': '\e026', + 'chain-broken': '\e047', + 'code': '\e001', + 'cog': '\e020', + 'cogs': '\e00c', + 'collapse-down': '\e03f', + 'collapse-up': '\e03e', + 'cross': '\e012', + 'date': '\e045', + 'doc-empty-inverse': '\e00d', + 'doc-empty': '\e00e', + 'doc-full-inverse': '\e01b', + 'doc-full': '\e018', + 'download': '\e044', + 'edit': '\e00f', + 'folder-inverse': '\e014', + 'folder-open-1': '\e013', + 'folder-open-inverse': '\e01f', + 'folder': '\e01c', + 'form': '\e00b', + 'grip': '\e03b', + 'group': '\e031', + 'help': '\e041', + // help-inverse directly renders the corresponding character. + 'help-inverse': '?', + 'home': '\e035', + // horizontalrule is not rendered as an icon font – it uses a unicode dash character rendered with a fallback font. + 'horizontalrule': '\2014', + 'image': '\e019', + 'italic': '\e027', + 'link': '\e02c', + 'list-ol': '\e029', + 'list-ul': '\e028', + 'locked': '\e009', + 'logout': '\e049', + 'mail': '\e015', + 'media': '\e032', + 'no-view': '\e006', + 'openquote': '\e000', + 'order-down': '\e036', + 'order-up': '\e037', + 'order': '\e034', + 'password': '\e033', + 'pick': '\e03d', + 'pilcrow': '\e002', + 'placeholder': '\e003', + 'plus-inverse': '\e024', + 'plus': '\e01d', + 'radio-empty': '\e02e', + 'radio-full': '\e02d', + 'redirect': '\e03c', + 'repeat': '\e02b', + 'search': '\e011', + 'site': '\e007', + 'snippet': '\e025', + 'spinner': '\e03a', + 'strikethrough': '\e04a', + 'subscript': '\e04c', + 'success': '\e043', + 'superscript': '\e04b', + 'table': '\e048', + 'tag': '\e01e', + 'tick-inverse': '\e023', + 'tick': '\e021', + 'time': '\e008', + 'title': '\e046', + 'undo': '\e02a', + 'unlocked': '\e00a', + 'user': '\e004', + 'view': '\e005', + 'wagtail-inverse': '\e040', + 'wagtail': '\e039', + 'warning': '\e042', +); + +$icons-after: ( + 'arrow-down-after': map-get($icons, 'arrow-down'), + 'arrow-right-after': map-get($icons, 'arrow-right'), + 'arrow-up-after': map-get($icons, 'arrow-up'), +); diff --git a/client/scss/settings/_variables.scss b/client/scss/settings/_variables.scss new file mode 100644 index 00000000000..7c55f7029ff --- /dev/null +++ b/client/scss/settings/_variables.scss @@ -0,0 +1,120 @@ +// paths + +// We can't use absolute paths here, because those are dependent on Django's +// STATIC_URL setting. Instead, relative paths from the final location of the +// compiled CSS files are used. +// */ + +$static-root: '../../'; +$images-root: $static-root + 'wagtailadmin/images/'; +$font-root: '../../wagtailadmin/fonts/'; + +// grid settings +$grid-columns: 12; +$grid-gutter-width: 3%; +$grid-max-width: 1200px; +$grid-content-indent: 0.7; + +$mobile-nice-padding: 20px; +$desktop-nice-padding: 50px; + +// screen breakpoints +$breakpoints: ( + xs: 0, + sm: 50em, // 800px + md: 56.25em, // 900px + lg: 75em, // 1200px + xl: 100em, // 1440px +); + +// colours +$color-teal: #007d7e; +$color-teal-darker: darken(adjust-hue($color-teal, 1), 4); +$color-teal-dark: darken(adjust-hue($color-teal, 1), 7); + +$color-blue: #71b2d4; +$color-red: #cd3238; +$color-red-dark: #b4191f; +$color-orange: #e9b04d; +$color-orange-dark: #bb5b03; +$color-green: #189370; +$color-green-dark: #157b57; +$color-salmon: #f37e77; +$color-salmon-light: #fcf2f2; +$color-white: #fff; +$color-black: #000; + +// darker to lighter +$color-grey-1: darken($color-white, 80); +$color-grey-2: darken($color-white, 70); +$color-grey-3: darken($color-white, 15); +$color-grey-4: darken($color-white, 10); +$color-grey-5: darken($color-white, 2); + +$color-menu-text: darken($color-white, 20); + +$color-thead-bg: $color-grey-5; +$color-header-bg: $color-teal; + +$color-fieldset-hover: $color-grey-5; +$color-input-border: $color-grey-4; +$color-input-focus: lighten(desaturate($color-teal, 40), 72); +$color-input-focus-border: lighten(saturate($color-teal, 12), 10); +$color-input-error-bg: lighten(saturate($color-red, 28), 45); + +$color-button: $color-teal; +$color-button-hover: $color-teal-darker; +$color-button-yes: $color-green-dark; +$color-button-yes-hover: darken($color-button-yes, 8%); +$color-button-no: $color-red-dark; +$color-button-no-hover: darken($color-button-no, 20%); +$color-button-warning: $color-orange-dark; +$color-button-warning-hover: darken($color-button-warning, 20%); + +$color-link: $color-teal-darker; +$color-link-hover: $color-teal-dark; + +// The focus outline color is defined without reusing a named color variable +// because it shouldn’t be reused for anything else in the UI. +$color-focus-outline: #ffbf47; + +$color-text-base: darken($color-white, 85); +$color-text-input: darken($color-white, 90); + +// Color states +$color-state-live: #59b524; +$color-state-draft: #808080; +$color-state-absent: #ff8f11; +$color-state-live-draft: #43b1b0; + +// Fonts +$font-sans: Open Sans, Arial, sans-serif; +$font-serif: Roboto Slab, Georgia, serif; + +// misc sizing +$thumbnail-width: 130px; +$menu-width: 200px; +$menu-width-max: 320px; +$mobile-nav-indent: 50px; + +$focus-outline-width: 3px; + +$nav-wrapper-inner-z-index: 26; +$draftail-editor-z-index: $nav-wrapper-inner-z-index + 1; + +// Nav +$nav-grey-1: darken($color-white, 80); +$nav-grey-2: darken($color-white, 60); +$nav-item-hover-bg: rgba(100, 100, 100, 0.15); +$nav-item-active-bg: darken($color-white, 90); +$submenu-bg: darken($color-white, 85); +$footer-account: $nav-item-active-bg; +$footer-submenu: $submenu-bg; + +// Nav search +$nav-search-color: darken($color-white, 20); +$nav-search-border: darken($color-white, 40); +$nav-search-bg: $nav-grey-1; +$nav-search-hover-bg: $nav-item-hover-bg; +$nav-search-focus-color: $color-white; +$nav-search-focus-bg: $nav-item-hover-bg; diff --git a/client/scss/styles.scss b/client/scss/styles.scss index c79065e9e07..e65d405bd3a 100644 --- a/client/scss/styles.scss +++ b/client/scss/styles.scss @@ -1,8 +1,157 @@ -// ============================================================================= -// Wagtail CMS main stylesheet -// ============================================================================= - -@import 'tools.breakpoints'; -@import 'objects'; -@import 'components'; -@import 'utilities'; +/* ============================================================================= +/* Wagtail CMS main stylesheet +/* ============================================================================= + +REFERENCE + + * We organize our styles based on a combination of ITCSS and + the Sass 7-1 pattern. + * Classes should be written using BEM, which we modify to include a prefix. + * Every BEM block should have its own file. + +┌────────────┬────────────────────────┬──────────────┬────────┐ +│ Folder │ Contents │ ITCSS level │ Prefix │ +├────────────┼────────────────────────┼──────────────┼────────┤ +│ settings │ variables, maps, fonts │ 1 Settings │ │ +│ tools │ mixins, functions │ 2 Tools │ │ +│ generic │ resets │ 3 Generic │ │ +│ elements │ elements, no classes │ 4 Elements │ │ +│ objects │ classes │ 5 Objects │ o- │ +│ │ layout │ │ │ +│ components │ classes │ 6 Components │ c- │ +│ │ BEM blocks │ │ │ +│ overrides │ classes │ 7 Trumps │ u- │ +│ │ overrides, utilities │ │ │ +└────────────┴────────────────────────┴──────────────┴────────┘ + +SCSS: https://sass-lang.com/guide +ITCSS: https://www.creativebloq.com/web-design/manage-large-css-projects-itcss-101517528 +Sass 7-1 pattern: https://gist.github.com/rveitch/84cea9650092119527bc +BEM: http://getbem.com/ + + +OTHER PREFIXES + +┌────────┬─────────┐ +│ Prefix │ Purpose │ +├────────┼─────────┤ +│ t- │ theme │ +│ is- │ state │ +└────────┴─────────┘ + +==============================================================================*/ + + +/* SETTINGS +These are variables, maps, and fonts. +* No CSS should be produced by these files +*/ + +@import 'settings'; + + +/* TOOLS +These are functions and mixins. +* No CSS should be produced by these files. +*/ + +@import 'tools'; + + +/* GENERIC +This is for resets and other rules that affect large collections of bare elements. +* Changes to them should be very rare. +*/ + +// @import 'generic/generic'; + + +/* ELEMENTS +These are base styles for bare HTML elements. +* Changes to them should be very rare. +*/ + +@import 'elements/elements'; +@import 'elements/typography'; +@import 'elements/forms'; + + +/* OBJECTS +These are classes related to layout, known as 'objects' in ITCSS or OOCSS. +* This is for grids, wrappers, and other non-consmetic layout utilities. +* These classes are prefixed with `.o-`. +*/ + +@import 'objects/objects'; +@import 'objects/avatar'; + + +/* COMPONENTS +These are classes for components. +* These classes (unless legacy) are prefixed with `.c-`. +* React component styles live in the same folders as their React components, + which is the preferred pattern over housing them in the scss folder. +*/ + +@import '../src/components/Transition/Transition'; +@import '../src/components/LoadingSpinner/LoadingSpinner'; +@import '../src/components/PublicationStatus/PublicationStatus'; +@import '../src/components/Explorer/Explorer'; + +// Legacy +@import 'components/icons'; +@import 'components/tabs'; +@import 'components/dropdown'; +@import 'components/dropdown.legacy'; +@import 'components/help-block'; +@import 'components/modals'; +@import 'components/forms'; +@import 'components/button'; +@import 'components/chooser'; +@import 'components/tag'; +@import 'components/listing'; +@import 'components/messages'; +@import 'components/messages.capability'; +@import 'components/messages.status'; +@import 'components/header'; +@import 'components/progressbar'; +@import 'components/main-nav'; +@import 'components/indicator'; +@import 'components/tooltips'; +@import 'components/logo'; +@import 'components/grid.legacy'; +@import 'components/breadcrumb'; +@import 'components/footer'; +@import 'components/loading-mask'; +@import 'components/media-placeholder'; +@import 'components/human-readable-date'; +@import 'components/link.legacy'; +@import 'components/privacy-indicator'; +@import 'components/status-tag'; + + +/* OVERRIDES +These are classes that provide overrides. +* Higher specificity is allowed here because these are overrides and imported last. +*/ + +// VENDOR: overrides of vendor styles. +@import 'overrides/vendor.datetimepicker'; +@import 'overrides/vendor.tagit'; + + +// UTILITIES: classes that do one simple thing. +@import 'overrides/utilities.hidden'; +@import 'overrides/utilities.text'; +@import 'overrides/utilities.dropdowns'; +@import 'overrides/utilities.focus'; +@import 'overrides/utilities.visuallyhidden'; + +// Legacy utilities +@import 'overrides/utilities.text.legacy'; +@import 'overrides/utilities.legacy'; + + +// PAGES: page-specific overrides +@import 'overrides/pages.homepage'; +@import 'overrides/pages.page-explorer'; diff --git a/client/scss/tools/_functions.breakpoints.scss b/client/scss/tools/_functions.breakpoints.scss new file mode 100644 index 00000000000..c53b99898ce --- /dev/null +++ b/client/scss/tools/_functions.breakpoints.scss @@ -0,0 +1,33 @@ +// Based upon the fine work and thoughts from Bootstrap v4. +// +// Copyright 2011-2018 The Bootstrap Authors +// Copyright 2011-2018 Twitter, Inc. +// Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + +// Name of the next breakpoint, or null for the last breakpoint. +// +// >> breakpoint-next(sm) +// md +@function breakpoint-next($name) { + $breakpoint-names: map-keys($breakpoints); + $n: index($breakpoint-names, $name); + @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null); +} + +// Minimum breakpoint width. Null for the smallest (first) breakpoint. +// +// >> breakpoint-min(sm) +// 50em +@function breakpoint-min($name) { + $min: map-get($breakpoints, $name); + @return if($min != 0, $min, null); +} + +// Maximum breakpoint width. Null for the largest (last) breakpoint. +// +// >> breakpoint-max(sm) +// 56.1875em +@function breakpoint-max($name) { + $next: breakpoint-next($name); + @return if($next, breakpoint-min($next) - 0.0625em, null); +} diff --git a/client/scss/tools/_mixins.breakpoints.scss b/client/scss/tools/_mixins.breakpoints.scss new file mode 100644 index 00000000000..28bd6fac88f --- /dev/null +++ b/client/scss/tools/_mixins.breakpoints.scss @@ -0,0 +1,32 @@ +// Based upon the fine work and thoughts from Bootstrap v4. +// +// Copyright 2011-2018 The Bootstrap Authors +// Copyright 2011-2018 Twitter, Inc. +// Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + + +// Media of at least the minimum breakpoint width. No query for the smallest breakpoint. +// Makes the @content apply to the given breakpoint and wider. +@mixin media-breakpoint-up($name) { + $min: breakpoint-min($name); + @if $min { + @media screen and (min-width: $min) { + @content; + } + } @else { + @content; + } +} + +// Media of at most the maximum breakpoint width. No query for the largest breakpoint. +// Makes the @content apply to the given breakpoint and narrower. +@mixin media-breakpoint-down($name) { + $max: breakpoint-max($name); + @if $max { + @media screen and (max-width: $max) { + @content; + } + } @else { + @content; + } +} diff --git a/client/scss/tools/_mixins.fonts.scss b/client/scss/tools/_mixins.fonts.scss new file mode 100644 index 00000000000..877d1054bda --- /dev/null +++ b/client/scss/tools/_mixins.fonts.scss @@ -0,0 +1,26 @@ +/* +NB: Due to Wagtail's browser support the following @font-face formats are required: +- WOFF for modern browsers +- WOFF2 For super-modern browsers + +This example is all we need now: + +@font-face { + font-family: 'MyWebFont'; + src: url('myfont.woff2') format('woff2'), + url('myfont.woff') format('woff'); +} + +See https://css-tricks.com/snippets/css/using-font-face/ for more information. + +*/ + +@mixin webfont($fontname, $filestub, $weight, $style:normal) { + @font-face { + font-family: '#{$fontname}'; + src: url('#{$font-root}#{$filestub}.woff2') format('woff2'), + url('#{$font-root}#{$filestub}.woff') format('woff'); + font-weight: $weight; + font-style: $style; + } +} diff --git a/wagtail/admin/static_src/wagtailadmin/scss/_mixins.scss b/client/scss/tools/_mixins.general.scss similarity index 83% rename from wagtail/admin/static_src/wagtailadmin/scss/_mixins.scss rename to client/scss/tools/_mixins.general.scss index 583ac739327..1b826f489da 100644 --- a/wagtail/admin/static_src/wagtailadmin/scss/_mixins.scss +++ b/client/scss/tools/_mixins.general.scss @@ -1,9 +1,6 @@ // ============================================================================= // Mixins // ============================================================================= - -@import '../../../../../client/scss/tools.breakpoints'; - // Please note that the mixins partial shouldn't include any classes. This is so // it can be included in any file without accidentally producing output @@ -110,17 +107,6 @@ } -@mixin webfont($fontname, $filestub, $weight, $style:normal) { - @font-face { - font-family: '#{$fontname}'; - src: url('#{$font-root}#{$filestub}.woff2') format('woff2'), - url('#{$font-root}#{$filestub}.woff') format('woff'), - url('#{$font-root}#{$filestub}.ttf') format('truetype'); - font-weight: $weight; - font-style: $style; - } -} - // Applies given rules on hover, except for touch screens. // Relies on feature detection to add a no-touch class on the html element. @mixin hover { @@ -128,3 +114,9 @@ @content; } } + +// Where included, show the focus outline within focusable items instead of around them. +// This is useful when focusable items are tightly packed and there is no space in-between. +@mixin show-focus-outline-inside { + outline-offset: -1 * $focus-outline-width; +} diff --git a/wagtail/admin/static_src/wagtailadmin/scss/_grid.scss b/client/scss/tools/_mixins.grid.scss similarity index 96% rename from wagtail/admin/static_src/wagtailadmin/scss/_grid.scss rename to client/scss/tools/_mixins.grid.scss index 660e112a668..0b6ae790a85 100644 --- a/wagtail/admin/static_src/wagtailadmin/scss/_grid.scss +++ b/client/scss/tools/_mixins.grid.scss @@ -56,7 +56,7 @@ $padding: $grid-gutter-width * 0.5; padding-left: $mobile-nice-padding; padding-right: $mobile-nice-padding; - @include medium { + @include media-breakpoint-up(sm) { padding-left: $desktop-nice-padding; padding-right: $desktop-nice-padding; } @@ -66,7 +66,7 @@ $padding: $grid-gutter-width * 0.5; margin-left: $mobile-nice-padding; margin-right: $mobile-nice-padding; - @include medium { + @include media-breakpoint-up(sm) { margin-left: $desktop-nice-padding; margin-right: $desktop-nice-padding; } diff --git a/client/src/cli/component.js b/client/src/cli/component.js deleted file mode 100644 index 39997bbab7a..00000000000 --- a/client/src/cli/component.js +++ /dev/null @@ -1,90 +0,0 @@ -var path = require('path'); -var fs = require('fs'); -var Mustache = require('mustache'); - -var TEMPLATES = path.join(__dirname, '..', '..', 'template'); - -var files = [ -{ - name: 'component.js', - template: 'component.mst', - suffix: '.js', -}, -{ - name: 'style.scss', - template: 'style.mst' -}, -{ - name: 'README.md', - template: 'README.mst' -}, -{ - name: 'component.test.js', - template: 'component.test.mst', - suffix: '.test.js', -} -]; - - -// ============================================================================= -// Helper methods -// ============================================================================= - -function slugify(text) { - return text.toString().split(/(?=[A-Z])/).join('-').toLowerCase().trim() - .replace(/\s+/g, '-') // Replace spaces with - - .replace(/&/g, '-and-') // Replace & with 'and' - .replace(/[^\w\-]+/g, '') // Remove all non-word chars - .replace(/\-\-+/g, '-'); // Replace multiple - with single - -} - - -function write(name, data) { - fs.writeFile(name, data, function(err) { - if (err) { - return console.log('[ error ] ' + err); - } - console.log('[ created ] ' + name); - }); -} - - -// ============================================================================= -// Write files! -// ============================================================================= -function run(argv) { - var name = argv.name[0].toUpperCase() + argv.name.substring(1); - var slug = slugify(name); - var directory = path.join(argv.dir, slug); - - if (!fs.existsSync(directory)) { - fs.mkdirSync(directory); - } else { - console.warn('[ error ] ' + directory + ' already exists'); - return; - } - - files.forEach(function(file) { - var fileName = file.suffix ? name + file.suffix : file.name; - var template = fs.readFileSync(path.join(TEMPLATES, file.template), 'utf8'); - var newPath = path.join(directory, fileName); - var context = { - name: name, - slug: slug - }; - - write(newPath, Mustache.render(template, context)); - }); -} - - -function build(cli) { - return cli - .option('dir', { - default: process.env.PWD - }); -} - - -exports.handler = run; -exports.builder = build; diff --git a/client/src/cli/index.js b/client/src/cli/index.js deleted file mode 100755 index ac39b3e8d8f..00000000000 --- a/client/src/cli/index.js +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env node -var cli = require('yargs'); - -cli - .usage('Usage: $0 [options]') - .help('help'); - -cli - .command( - 'component ', - 'scaffold out a wagtail component', - require('./component')); - -cli - .argv; diff --git a/client/src/components/Button/Button.js b/client/src/components/Button/Button.js index 932755d079e..ec994244856 100644 --- a/client/src/components/Button/Button.js +++ b/client/src/components/Button/Button.js @@ -38,6 +38,7 @@ const Button = ({ target, preventDefault, onClick, + dialogTrigger, }) => { const hasText = children !== null; const iconName = isLoading ? 'spinner' : icon; @@ -54,6 +55,7 @@ const Button = ({ rel={target === '_blank' ? 'noopener noreferrer' : null} href={href} target={target} + aria-haspopup={dialogTrigger ? 'dialog' : null} > {hasText ? children : accessibleElt}
@@ -73,6 +75,7 @@ Button.propTypes = { onClick: PropTypes.func, isLoading: PropTypes.bool, preventDefault: PropTypes.bool, + dialogTrigger: PropTypes.bool, }; Button.defaultProps = { @@ -85,6 +88,7 @@ Button.defaultProps = { onClick: null, isLoading: false, preventDefault: true, + dialogTrigger: false, }; export default Button; diff --git a/client/src/components/Button/Button.test.js b/client/src/components/Button/Button.test.js index eb69fe977fc..611b2d2ab43 100644 --- a/client/src/components/Button/Button.test.js +++ b/client/src/components/Button/Button.test.js @@ -20,12 +20,16 @@ describe('Button', () => { expect(shallow( + )} + + + + {/* At first we propose reloading the editor. If it still crashes, reload the whole page. */} + {reloads < MAX_EDITOR_RELOADS ? ( + + ) : ( + + )} + + +
+
+
+ {STRINGS.EDITOR_CRASH} + + {showContent && ( + ', result) @@ -285,9 +309,9 @@ def test_render_form_content(self): event = EventPage(title='Abergavenny sheepdog trials') form = EventPageForm(instance=event) - tabbed_interface = self.event_page_tabbed_interface.bind_to_instance( + tabbed_interface = self.event_page_tabbed_interface.bind_to( instance=event, - form=form + form=form, ) result = tabbed_interface.render_form_content() @@ -300,13 +324,17 @@ def test_render_form_content(self): class TestObjectList(TestCase): def setUp(self): + self.request = RequestFactory().get('/') + user = AnonymousUser() # technically, Anonymous users cannot access the admin + self.request.user = user # a custom ObjectList for EventPage self.event_page_object_list = ObjectList([ FieldPanel('title', widget=forms.Textarea), FieldPanel('date_from'), FieldPanel('date_to'), InlinePanel('speakers', label="Speakers"), - ], heading='Event details', classname="shiny").bind_to_model(EventPage) + ], heading='Event details', classname="shiny").bind_to( + model=EventPage, request=self.request) def test_get_form_class(self): EventPageForm = self.event_page_object_list.get_form_class() @@ -323,9 +351,9 @@ def test_render(self): event = EventPage(title='Abergavenny sheepdog trials') form = EventPageForm(instance=event) - object_list = self.event_page_object_list.bind_to_instance( + object_list = self.event_page_object_list.bind_to( instance=event, - form=form + form=form, ) result = object_list.render() @@ -333,8 +361,8 @@ def test_render(self): # result should contain ObjectList furniture self.assertIn('
{% endfor %} -
-

{{ fp|capfirst }}

+
{{ fp.content_type.name |capfirst }} ({{ fp.content_type.app_label }}.{{ fp.content_type.model }}) @@ -20,4 +20,4 @@

{{ fp|capfirst }}<

\ No newline at end of file + diff --git a/wagtail/contrib/forms/templates/wagtailforms/list_submissions.html b/wagtail/contrib/forms/templates/wagtailforms/list_submissions.html index ede108e0e00..84cd1b63b52 100644 --- a/wagtail/contrib/forms/templates/wagtailforms/list_submissions.html +++ b/wagtail/contrib/forms/templates/wagtailforms/list_submissions.html @@ -30,7 +30,6 @@ {{ cell }} {% endfor %} - {% endfor %} diff --git a/wagtail/contrib/forms/tests/test_views.py b/wagtail/contrib/forms/tests/test_views.py index 2bca7640d3a..a562d6560af 100644 --- a/wagtail/contrib/forms/tests/test_views.py +++ b/wagtail/contrib/forms/tests/test_views.py @@ -2,7 +2,8 @@ import json from django.contrib.auth import get_user_model -from django.test import TestCase +from django.contrib.auth.models import AnonymousUser +from django.test import RequestFactory, TestCase from django.urls import reverse from wagtail.admin.edit_handlers import get_form_for_model @@ -20,6 +21,9 @@ class TestFormResponsesPanel(TestCase): def setUp(self): + self.request = RequestFactory().get('/') + user = AnonymousUser() # technically, Anonymous users cannot access the admin + self.request.user = user self.form_page = make_form_page() @@ -27,10 +31,8 @@ def setUp(self): FormPage, form_class=WagtailAdminPageForm ) - submissions_panel = FormSubmissionsPanel().bind_to_model(FormPage) - - self.panel = submissions_panel.bind_to_instance( - instance=self.form_page, form=self.FormPageForm()) + self.panel = FormSubmissionsPanel().bind_to( + instance=self.form_page, form=self.FormPageForm(), request=self.request) def test_render_with_submissions(self): """Show the panel with the count of submission and a link to the list_submissions view.""" @@ -56,6 +58,10 @@ def test_render_without_submissions(self): class TestFormResponsesPanelWithCustomSubmissionClass(TestCase): def setUp(self): + self.request = RequestFactory().get('/') + user = AnonymousUser() # technically, Anonymous users cannot access the admin + self.request.user = user + # Create a form page self.form_page = make_form_page_with_custom_submission() @@ -66,10 +72,8 @@ def setUp(self): self.test_user = get_user_model().objects.create_user( username='user-n1kola', password='123') - submissions_panel = FormSubmissionsPanel().bind_to_model(FormPageWithCustomSubmission) - - self.panel = submissions_panel.bind_to_instance(self.form_page, - self.FormPageForm()) + self.panel = FormSubmissionsPanel().bind_to( + instance=self.form_page, form=self.FormPageForm(), request=self.request) def test_render_with_submissions(self): """Show the panel with the count of submission and a link to the list_submissions view.""" diff --git a/wagtail/contrib/forms/views.py b/wagtail/contrib/forms/views.py index 5f9cbcab345..ac938d6b95e 100644 --- a/wagtail/contrib/forms/views.py +++ b/wagtail/contrib/forms/views.py @@ -13,7 +13,6 @@ from wagtail.contrib.forms.forms import SelectDateForm from wagtail.contrib.forms.utils import get_forms_for_user from wagtail.core.models import Page -from wagtail.utils.pagination import DEFAULT_PAGE_KEY def get_submissions_list_view(request, *args, **kwargs): @@ -27,7 +26,7 @@ class SafePaginateListView(ListView): """ Listing view with safe pagination, allowing incorrect or out of range values """ paginate_by = 20 - page_kwarg = DEFAULT_PAGE_KEY + page_kwarg = 'p' def paginate_queryset(self, queryset, page_size): """Paginate the queryset if needed with nice defaults on invalid param.""" diff --git a/wagtail/contrib/frontend_cache/apps.py b/wagtail/contrib/frontend_cache/apps.py index 0484c8b65ae..8757734515a 100644 --- a/wagtail/contrib/frontend_cache/apps.py +++ b/wagtail/contrib/frontend_cache/apps.py @@ -1,4 +1,5 @@ from django.apps import AppConfig +from django.utils.translation import ugettext_lazy as _ from wagtail.contrib.frontend_cache.signal_handlers import register_signal_handlers @@ -6,7 +7,7 @@ class WagtailFrontendCacheAppConfig(AppConfig): name = 'wagtail.contrib.frontend_cache' label = 'wagtailfrontendcache' - verbose_name = "Wagtail frontend cache" + verbose_name = _("Wagtail frontend cache") def ready(self): register_signal_handlers() diff --git a/wagtail/contrib/frontend_cache/backends.py b/wagtail/contrib/frontend_cache/backends.py index 88424b1ce16..281594d8af2 100644 --- a/wagtail/contrib/frontend_cache/backends.py +++ b/wagtail/contrib/frontend_cache/backends.py @@ -100,7 +100,7 @@ def purge_batch(self, urls): except requests.exceptions.HTTPError as e: for url in urls: - logger.error("Couldn't purge '%s' from Cloudflare. HTTPError: %d %s", url, e.response.status_code, e.message) + logging.exception("Couldn't purge '%s' from Cloudflare. HTTPError: %d", url, e.response.status_code) return if response_json['success'] is False: diff --git a/wagtail/contrib/frontend_cache/tests.py b/wagtail/contrib/frontend_cache/tests.py index c178a854fe3..5bebdc02b7b 100644 --- a/wagtail/contrib/frontend_cache/tests.py +++ b/wagtail/contrib/frontend_cache/tests.py @@ -1,4 +1,7 @@ -import mock +from unittest import mock +from urllib.error import HTTPError, URLError + +import requests from django.core.exceptions import ImproperlyConfigured from django.test import TestCase from django.test.utils import override_settings @@ -63,6 +66,60 @@ def test_cloudfront(self): self.assertEqual(backends['cloudfront'].cloudfront_distribution_id, 'frontend') + def test_http(self): + """Test that `HTTPBackend.purge` works when urlopen succeeds""" + self._test_http_with_side_effect(urlopen_side_effect=None) + + def test_http_httperror(self): + """Test that `HTTPBackend.purge` can handle `HTTPError`""" + http_error = HTTPError( + url='http://localhost:8000/home/events/christmas/', + code=500, + msg='Internal Server Error', + hdrs={}, + fp=None + ) + with self.assertLogs(level='ERROR') as log_output: + self._test_http_with_side_effect(urlopen_side_effect=http_error) + + self.assertIn( + "Couldn't purge 'http://www.wagtail.io/home/events/christmas/' from HTTP cache. HTTPError: 500 Internal Server Error", + log_output.output[0] + ) + + def test_http_urlerror(self): + """Test that `HTTPBackend.purge` can handle `URLError`""" + url_error = URLError(reason='just for tests') + with self.assertLogs(level='ERROR') as log_output: + self._test_http_with_side_effect(urlopen_side_effect=url_error) + self.assertIn( + "Couldn't purge 'http://www.wagtail.io/home/events/christmas/' from HTTP cache. URLError: just for tests", + log_output.output[0] + ) + + @mock.patch('wagtail.contrib.frontend_cache.backends.urlopen') + def _test_http_with_side_effect(self, urlopen_mock, urlopen_side_effect): + # given a backends configuration with one HTTP backend + backends = get_backends(backend_settings={ + 'varnish': { + 'BACKEND': 'wagtail.contrib.frontend_cache.backends.HTTPBackend', + 'LOCATION': 'http://localhost:8000', + }, + }) + self.assertEqual(set(backends.keys()), set(['varnish'])) + self.assertIsInstance(backends['varnish'], HTTPBackend) + # and mocked urlopen that may or may not raise network-related exception + urlopen_mock.side_effect = urlopen_side_effect + + # when making a purge request + backends.get('varnish').purge('http://www.wagtail.io/home/events/christmas/') + + # then no exception is raised + # and mocked urlopen is called with a proper purge request + self.assertEqual(urlopen_mock.call_count, 1) + (purge_request,), _call_kwargs = urlopen_mock.call_args + self.assertEqual(purge_request.full_url, 'http://localhost:8000/home/events/christmas/') + def test_cloudfront_validate_distribution_id(self): with self.assertRaises(ImproperlyConfigured): get_backends(backend_settings={ @@ -209,6 +266,18 @@ def test_purge_with_unroutable_page(self): page.save_revision().publish() self.assertEqual(PURGED_URLS, []) + @override_settings(ROOT_URLCONF='wagtail.tests.urls_multilang', + LANGUAGE_CODE='en', + WAGTAILFRONTENDCACHE_LANGUAGES=['en']) + def test_purge_on_publish_in_multilang_env(self): + from django.conf import settings + PURGED_URLS[:] = [] # reset PURGED_URLS to the empty list + page = EventIndex.objects.get(url_path='/home/events/') + page.save_revision().publish() + self.assertEqual(len(PURGED_URLS), len(settings.WAGTAILFRONTENDCACHE_LANGUAGES) * 2) + for isocode, description in settings.WAGTAILFRONTENDCACHE_LANGUAGES: + self.assertIn('http://localhost/%s/events/' % isocode, PURGED_URLS) + class TestPurgeBatchClass(TestCase): # Tests the .add_*() methods on PurgeBatch. The .purge() method is tested @@ -251,3 +320,34 @@ def test_multiple_calls(self): batch.purge() self.assertEqual(batch.urls, ['http://localhost/events/', 'http://localhost/events/past/', 'http://localhost/foo']) + + @mock.patch('wagtail.contrib.frontend_cache.backends.requests.delete') + def test_http_error_on_cloudflare_purge_batch(self, requests_delete_mock): + backend_settings = { + 'cloudflare': { + 'BACKEND': 'wagtail.contrib.frontend_cache.backends.CloudflareBackend', + 'EMAIL': 'test@test.com', + 'TOKEN': 'this is the token', + 'ZONEID': 'this is a zone id', + }, + } + + class MockResponse: + def __init__(self, status_code=200): + self.status_code = status_code + + http_error = requests.exceptions.HTTPError(response=MockResponse(status_code=500)) + requests_delete_mock.side_effect = http_error + + page = EventIndex.objects.get(url_path='/home/events/') + + batch = PurgeBatch() + batch.add_page(page) + + with self.assertLogs(level='ERROR') as log_output: + batch.purge(backend_settings=backend_settings) + + self.assertIn( + "Couldn't purge 'http://localhost/events/' from Cloudflare. HTTPError: 500", + log_output.output[0] + ) diff --git a/wagtail/contrib/frontend_cache/utils.py b/wagtail/contrib/frontend_cache/utils.py index e6af3cd1146..bb3b84d48b3 100644 --- a/wagtail/contrib/frontend_cache/utils.py +++ b/wagtail/contrib/frontend_cache/utils.py @@ -1,4 +1,6 @@ import logging +import re +from urllib.parse import urlparse, urlunparse from django.conf import settings from django.core.exceptions import ImproperlyConfigured @@ -54,12 +56,40 @@ def get_backends(backend_settings=None, backends=None): def purge_url_from_cache(url, backend_settings=None, backends=None): - for backend_name, backend in get_backends(backend_settings, backends).items(): - logger.info("[%s] Purging URL: %s", backend_name, url) - backend.purge(url) + purge_urls_from_cache([url], backend_settings=backend_settings, backends=backends) def purge_urls_from_cache(urls, backend_settings=None, backends=None): + # Convert each url to urls one for each managed language (WAGTAILFRONTENDCACHE_LANGUAGES setting). + # The managed languages are common to all the defined backends. + # This depends on settings.USE_I18N + languages = getattr(settings, 'WAGTAILFRONTENDCACHE_LANGUAGES', []) + if settings.USE_I18N and languages: + langs_regex = "^/(%s)/" % "|".join(languages) + new_urls = [] + + # Purge the given url for each managed language + for isocode, description in languages: + for url in urls: + up = urlparse(url) + new_url = urlunparse(( + up.scheme, + up.netloc, + re.sub(langs_regex, "/%s/" % isocode, up.path), + up.params, + up.query, + up.fragment + )) + + # Check for best performance. True if re.sub found no match + # It happens when i18n_patterns was not used in urls.py to serve content for different languages from different URLs + if new_url in new_urls: + continue + + new_urls.append(new_url) + + urls = new_urls + for backend_name, backend in get_backends(backend_settings, backends).items(): for url in urls: logger.info("[%s] Purging URL: %s", backend_name, url) diff --git a/wagtail/contrib/modeladmin/apps.py b/wagtail/contrib/modeladmin/apps.py index f19487aa9ea..64e6b4d9d5b 100644 --- a/wagtail/contrib/modeladmin/apps.py +++ b/wagtail/contrib/modeladmin/apps.py @@ -1,7 +1,8 @@ from django.apps import AppConfig +from django.utils.translation import ugettext_lazy as _ class WagtailModelAdminAppConfig(AppConfig): name = 'wagtail.contrib.modeladmin' label = 'wagtailmodeladmin' - verbose_name = "Wagtail ModelAdmin" + verbose_name = _("Wagtail ModelAdmin") diff --git a/wagtail/contrib/modeladmin/helpers/__init__.py b/wagtail/contrib/modeladmin/helpers/__init__.py index d7119085d8a..2fea64c5280 100644 --- a/wagtail/contrib/modeladmin/helpers/__init__.py +++ b/wagtail/contrib/modeladmin/helpers/__init__.py @@ -1,3 +1,4 @@ -from .button import ButtonHelper, PageButtonHelper # NOQA -from .permission import PagePermissionHelper, PermissionHelper # NOQA -from .url import AdminURLHelper, PageAdminURLHelper # NOQA +from .button import ButtonHelper, PageButtonHelper # NOQA +from .permission import PagePermissionHelper, PermissionHelper # NOQA +from .search import DjangoORMSearchHandler, WagtailBackendSearchHandler # NOQA +from .url import AdminURLHelper, PageAdminURLHelper # NOQA diff --git a/wagtail/contrib/modeladmin/helpers/button.py b/wagtail/contrib/modeladmin/helpers/button.py index a02e4769b19..a9a1884ab92 100644 --- a/wagtail/contrib/modeladmin/helpers/button.py +++ b/wagtail/contrib/modeladmin/helpers/button.py @@ -1,5 +1,5 @@ from django.contrib.admin.utils import quote -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.translation import ugettext as _ @@ -16,8 +16,8 @@ def __init__(self, view, request): self.request = request self.model = view.model self.opts = view.model._meta - self.verbose_name = force_text(self.opts.verbose_name) - self.verbose_name_plural = force_text(self.opts.verbose_name_plural) + self.verbose_name = force_str(self.opts.verbose_name) + self.verbose_name_plural = force_str(self.opts.verbose_name_plural) self.permission_helper = view.permission_helper self.url_helper = view.url_helper diff --git a/wagtail/contrib/modeladmin/helpers/search.py b/wagtail/contrib/modeladmin/helpers/search.py new file mode 100644 index 00000000000..6c8bc9fb0d9 --- /dev/null +++ b/wagtail/contrib/modeladmin/helpers/search.py @@ -0,0 +1,72 @@ +import operator +from functools import reduce + +from django.contrib.admin.utils import lookup_needs_distinct +from django.db.models import Q + +from wagtail.search.backends import get_search_backend + + +class BaseSearchHandler: + def __init__(self, search_fields): + self.search_fields = search_fields + + def search_queryset(self, queryset, search_term, **kwargs): + """ + Returns an iterable of objects from ``queryset`` matching the + provided ``search_term``. + """ + raise NotImplementedError() + + @property + def show_search_form(self): + """ + Returns a boolean that determines whether a search form should be + displayed in the IndexView UI. + """ + return True + + +class DjangoORMSearchHandler(BaseSearchHandler): + def search_queryset(self, queryset, search_term, **kwargs): + if not search_term or not self.search_fields: + return queryset + + orm_lookups = ['%s__icontains' % str(search_field) + for search_field in self.search_fields] + for bit in search_term.split(): + or_queries = [Q(**{orm_lookup: bit}) + for orm_lookup in orm_lookups] + queryset = queryset.filter(reduce(operator.or_, or_queries)) + opts = queryset.model._meta + for search_spec in orm_lookups: + if lookup_needs_distinct(opts, search_spec): + return queryset.distinct() + return queryset + + + @property + def show_search_form(self): + return bool(self.search_fields) + + +class WagtailBackendSearchHandler(BaseSearchHandler): + + default_search_backend = 'default' + + def search_queryset( + self, queryset, search_term, preserve_order=False, operator=None, + partial_match=True, backend=None, **kwargs + ): + if not search_term: + return queryset + + backend = get_search_backend(backend or self.default_search_backend) + return backend.search( + search_term, + queryset, + fields=self.search_fields or None, + operator=operator, + partial_match=partial_match, + order_by_relevance=not preserve_order, + ) diff --git a/wagtail/contrib/modeladmin/locale/ar/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/ar/LC_MESSAGES/django.mo index f76ace73fa7245eaed16bacd4f31c3c4c590bf51..3d8415da69df095309c01198ea0e3c513d876c94 100644 GIT binary patch literal 4719 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 delta 717 zcmYk2K~Gab5XYxjv8@znD<&9Bp2mcOyrl0Lku=C{0Y&!;90~Ym_`P>XE+VYU}aEr=FRyFP#*Ti#K)5WcuwHpb*D@!;@cxl9H*w%|)^_Z8nO&MC^5%Fk#>6_l^&`UB6WVXxq; zS-Merr08a`QdUzwjj4I~Q$Khf>q|Z?&C;D>dG3C}tIPz`@rkPgcGk6>e#>!k?!e_N zEOGmmJ+7X36|YpZhbDcMv)rtMI>&ZV*PqK?+xioK9Le(%uk(A}w0K9?c#RttzteTX z@>19J0`an5IQk`8vS8A|riC0j$YH?F922MJ2 U4(&}{@3VOMSYb!M;!SSQKW7?`kpKVy diff --git a/wagtail/contrib/modeladmin/locale/ar/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/ar/LC_MESSAGES/django.po index 69004847de1..73de7850bcd 100644 --- a/wagtail/contrib/modeladmin/locale/ar/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/ar/LC_MESSAGES/django.po @@ -3,13 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# abdulaziz alfuhigi , 2018 # Ahmad Kiswani , 2016 +# ultraify media , 2018 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Arabic (http://www.transifex.com/torchbox/wagtail/language/" "ar/)\n" @@ -23,27 +25,63 @@ msgstr "" msgid "Parent page" msgstr "صفحة الأم" +#, python-format +msgid "Add %s" +msgstr "اضف %s" + +#, python-format +msgid "Add a new %s" +msgstr "اضف جديد %s" + msgid "Inspect" msgstr "فحص" +#, python-format +msgid "Inspect this %s" +msgstr "افحص %s" + msgid "Edit" msgstr "تعديل" +#, python-format +msgid "Edit this %s" +msgstr "عدل %s" + msgid "Delete" msgstr "حذف" +#, python-format +msgid "Delete this %s" +msgstr "حذف %s" + msgid "Unpublish" msgstr "غير منشور" +#, python-format +msgid "Unpublish this %s" +msgstr "عدم نشر %s" + msgid "Copy" msgstr "انسخ" +#, python-format +msgid "Copy this %s" +msgstr "نسخ %s" + msgid "image" msgstr "صورة" msgid "Choose a parent page" msgstr "إختر صفحة أم" +#, python-format +msgid "" +"%(plural)s can be added to more than one place within your site. Which of " +"the following would you like to be the parent of your new page?" +msgstr "" +"%(plural)sيمكن إضافتها إلى أكثر من مكان واحد في موقعك. أي مما يلي تود أن " +"تكون أصل الصفحة الجديدة؟ " + msgid "Continue" msgstr "أكمل" @@ -53,23 +91,120 @@ msgstr "يتم الحفظ…" msgid "Save" msgstr "حفظ" +#, python-format +msgid "%(model_name)s could not be deleted" +msgstr "%(model_name)sلا يمكن حذفها " + +#, python-format +msgid "" +"'%(instance_name)s' is currently referenced by other objects, and cannot be " +"deleted without jeopardising data integrity. To delete it successfully, " +"first remove references from the following objects, then try again:" +msgstr "" +"'%(instance_name)s' تتم الإشارة إليها حاليًا بواسطة كائنات أخرى ، ولا يمكن " +"حذفها دون تعريض سلامة البيانات للخطر. لحذفها بنجاح ، قم أولاً بإزالة المراجع " +"من الكائنات التالية ، ثم حاول مرة أخرى:" + +msgid "Go back to listing" +msgstr "العودة إلى القائمة" + msgid "Yes, delete" msgstr "نعم, احذف" msgid "Home" msgstr "الصفحة الرئيسية" +#, python-format +msgid " By %(filter_title)s " +msgstr "بواسطة %(filter_title)s" + +#, python-format +msgid "Sorry, there are no %(name)s matching your search parameters." +msgstr "عذرًا ، لا توجد مطابقة لـ %(name)s عمليات البحث الخاصة بك." + msgid "Search for" msgstr "إبحث عن" +#, python-format +msgid "Search %(name)s" +msgstr "بحث %(name)s" + msgid "Filter" msgstr "فلتر" +#, python-format +msgid "" +"No %(name)s have been created yet. One of the following must be created " +"before you can add any %(name)s:" +msgstr "" +"لا %(name)s تم إنشاؤه بعد. يجب إنشاء أحد الإجراءات التالية قبل أن تتمكن من " +"إضافة أي %(name)s:" + +#, python-format +msgid "No %(name)s have been created yet." +msgstr "لا %(name)s تم إنشاؤه بعد." + +#, python-format +msgid "" +"\n" +" Why not add one?\n" +" " +msgstr "" +"\n" +"لماذا لا تضيف واحدة؟" + +#, python-format +msgid "Page %(current_page)s of %(num_pages)s." +msgstr "صفحة %(current_page)s من %(num_pages)s." + +#, python-format +msgid "Back to %(model_name)s list" +msgstr "الرجوع الى %(model_name)s القائمة" + msgid "Previous" msgstr "السابق" msgid "Next" msgstr "التالي" +#, python-format +msgid "The %s could not be created due to errors." +msgstr "لا يمكن إنشاء %s بسبب أخطاء." + msgid "New" msgstr "جديد" + +#, python-format +msgid "Create new %s" +msgstr "أنشئ %s جديد" + +msgid "Editing" +msgstr "جاري التعديل" + +#, python-format +msgid "Editing %s" +msgstr "جاري التعديل %s" + +#, python-format +msgid "The %s could not be saved due to errors." +msgstr "لا يمكن حفظ %s بسبب الأخطاء." + +#, python-format +msgid "Confirm deletion of %s" +msgstr "تأكيد حذف %s" + +#, python-format +msgid "" +"Are you sure you want to delete this %s? If other things in your site are " +"related to it, they may also be affected." +msgstr "" +"هل أنت متأكد أنك تريد حذف هذا %s؟ إذا كانت هناك أشياء أخرى في موقعك مرتبطة " +"بها ، فقد تتأثر أيضًا." + +msgid "Inspecting" +msgstr "يتم الفحص" + +#, python-format +msgid "Inspecting %s" +msgstr "يتم فحص %s" diff --git a/wagtail/contrib/modeladmin/locale/ca/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/ca/LC_MESSAGES/django.mo index a8584698c4351313290d24769087ed696b95b0b3..8e6d0b008ab6e49c6ef34c1e8d0101cf777a108c 100644 GIT binary patch delta 887 zcmX}q&r1|x9LMo*tZp`~x|)_h3U*z@P!?yDOa}zTE`nN^cnO3pHrC4u{yOMkFNF#k zk?l?Nq8?Sy%X$bDq<pb~-*gzryC4>Ql}8TK>JkMHbR>@1o&D$UCpt&#ga z_s1J%T^I_`(JJ!H-e4t`<1)r@2j}n`e#MvhWDy<@%7zUeG!C3YAY|DNdmBv&dx&bj6rO<=3!~^=*rR z4*Lo9!ammEXH4NS*5PxudmE>b%Vy}5e~-5?i&|g>wZJB}<1W_YB|gL$VdZ=1N?6|p z8EE1ZQbilbB|gIx&hvbaA62?ljA9Ny;31x3nsN}eAmf(@9sb^$4x z4-+kP9U4K5Zr-H+Pho*VaCB3`TSx(%-9 ky3Vtw@&4rG@YwK3I{qXvp7bM4uJ=Fp*mqmD=bg*o6$Z^&c>n+a delta 1144 zcmaLVUr1A77{~Faw52PZN(I>;HpOPiVmpwGQ4raM1yUqlcom0vVw1U5n}OO~kOfi@ zC_zC)7X_u=ghfFV-FR8iMR->UT|^fpgUFzZzCSbw!4BuVpZDnVKJW8BXA7Z)=F*3T z%In7E@NDOKxW=pl_g64*byk{<;St=7Z?G9Z<2Y8WGn>N+^kF~4Mm&Rg9K~%|#!Xne z-fRmtW0hIS5=_Wt9jJw!Sc5&t8cSj=_M_s4P;sNkZC4olIEjkCjSYAY75@ym?FB;s zXHoI*v4;Ka6B8Zw8)`uroA4*5u#qyuco8??G;-Th2F1U^YMe!F@D{bfM?8REaSyf< z)Qa7x`11_)>~EKuDDe%Xi*^@Pz|^v@aR=`Uc#F?dOZKb0PqRoZjnj@0cHso(@H?)h zjV!S;s-wRdhS5(umH!f!)T;YT^o^dQ7R;eqIgfSt1<7f@ki(ddV`^Oh71xA{+l@5M z5~vOwT7K_B#rL2Nm_p^t2I#+j3?uwO6;7ZM-9delN2m>-pelZer*IzC(oTYvD36M} zfZAXjb&zXFsNF;r^Z*ayV{F48b-Za3s$cp9U8rAqFRGv%>V!pX!7<#0Q@9h~)ld2> zoUKu&x^&1GPa}^S>df?1wD^)E1Gzpgb294=c*S6NB%RF{+-%Y-hJ(qoo?Gzx_S)(p zgQxrc4Ox+Zyq*$F4pkrB7mq}pNUS{=izS?RTa?Rx{8;3KcP^bz=dzK*;E&L5zQK^?n52UmD_aD;3uh;+p diff --git a/wagtail/contrib/modeladmin/locale/ca/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/ca/LC_MESSAGES/django.po index 45ec502cb70..1ef79b220f8 100644 --- a/wagtail/contrib/modeladmin/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/ca/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:08+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Catalan (http://www.transifex.com/torchbox/wagtail/language/" "ca/)\n" @@ -168,10 +168,6 @@ msgstr "Anterior" msgid "Next" msgstr "Següent" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "S'ha creat {model_name} '{instance}'." - #, python-format msgid "The %s could not be created due to errors." msgstr "No s'ha pogut crear el %s a causa d'errors." @@ -190,10 +186,6 @@ msgstr "Editant" msgid "Editing %s" msgstr "Editant %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' actualitzat." - #, python-format msgid "The %s could not be saved due to errors." msgstr "No s'ha pogut desar el %s a causa d'errors." @@ -210,10 +202,6 @@ msgstr "" "Segur que voleu eliminar aquest %s? Si hi ha altres elements del vostre lloc " "relacionats amb ell podrien veure's afectats." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' eliminat." - msgid "Inspecting" msgstr "Inspeccionant" diff --git a/wagtail/contrib/modeladmin/locale/cs/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/cs/LC_MESSAGES/django.mo index fa59f5462c8004017503bd7cfb975b7b4c21ac2e..5a0ce9fe77edb66c3024fee86545dee4f93af132 100644 GIT binary patch literal 4521 zcmbW3ON<;x8OI9}AS@6dgjXQ&#mU+;@y=tN2hP}QW3O#ugPkSbwH1S6)pXbF^iFrz zsJnW`GZH8VA_eit0gy3Hq%4w=I4l;5IIcmO9SI?kLxhwYNL)Z1xNzeF|9{WSzH9`h zHQm2{d{y;5>zhA5aPN;4jw;U2;(YC0O3m~B9$at~?p5krU=jQ{_zUn+a0C1{_*d{9 zFnNzs?*-4`@fRuX?#80(wnF3Rg^4|m>0AB_v|6>q8^*Sye25*3r{}sq}ego3fw?N9j4ekNo z0h{1I!F`|yWj_FZ2c+ItaiRPh;QPTFAm_gca{ga~bKvj5$HDs`Q~;jU#yu=Lg|Rbrt*@V(~ioLp;BNj}L(l!+7d<5KO?YfxiXc0=e#081)hGr{K%ro1lQt zz=@3SC6NB_f?V(WAjka#q(5$ep9bFq>CfMfzyAS*E7YGrj{D1){{Zn*|H6fO-w!9y z4-ewP=f^{;e4Ebil-dh24$QSja0gIbS)#GNcsdq*ffmLWXC<l2Jy0V^Ti-1VbH=fmQz!ttrHVF4#+2oO&710 z%~7>)x)8*v)3Im98t;<;T4f0bggt??3~oJWSMQ0%WQo}Nit$`JBRckJ03Ew!U9PUp zoU9m&b^RcvYQA<_g4mhmByhd5EZVU*Byf^uo@dguk%eJzMjAnqIxHO7j@ep2l}2Kt zT?TJz0=;5!Nl)~$4&s_RhNw=bIkeDRKESi|O`45wx*9%#lSW~|)UbRyJu0UgV?*io z3hNkz)flL!EjOX)GS5xyyB<0S6hstd481MX_C35eBJK^G$10gnkko zMnuiq81_daodSzAXi#^&c0ru+d%KrkChDsB#6X#ektgyLQzLB3ob&^yc-ip=#^o;= zAFOdI&t&x_m@w9wYEtM~8yR&vPTR0*!p)h+?>K}4QIJ=~V@QHE4O?oB4En+6MrVP<8qxOL1j9W7r|3ve6irRqGC=LNR@`K6z!^F}8q!^z~6XK0|#+ay6Mvs@5i zobfgvMA~`GtZ`P2W8Go%!S0V>`SNp(gkRV+^orX;MDV`Z4*~I zn=S`_>3FuBmKJSIrWT%CEamA5;nE3YX-y7PXP+s}R!g%_%k05gwYtALTdhK{^gMjb zN$(){ga>>-I|7v(XWZ zikCB(P+BxPs>yucAZmrCbM0EC((QK3jxz=glgn2ogDc&UTPopre8o#E#i_HW&z{`! zz-+lX#p1+nSz7G1VWC6HSFmvh@geb=I!TS2TUtC-I=Cgr<*==mPR5?~kq9+8SP$H$ zo;C5(sfD~llup?sN^2628b&(z#!?V+bOeFb(coMLh26o6)Fqgvg}t2i;Z~RL*jrc7 ziy_(BxGvUj={^U?vJ%9D^(e?2Ys;aJU^kD3H;1 z&YH2&mgSsTX(!ldxtw*wYo@NTo~b7qe*(B}Px|6Eu6s?iZZ^@D8{R}_S;rP@rQgE7 zYNQY2H1^C<%($mdZfW&8U!0*_8o-3q4c04z)fu7MUem)~Hu65Y4!i0ZRB0ISBbpwY zVw6dz?{qU;K~Q}i4p%{V#tUds?%gO4zzqHsZH6qd9pu#Tme@`h@HXz1)ur}e)wS{{ zrlya*9!awOZ=0!P@W^j7UuxoovSoikxHc)QOSD)o^{V z>LdROgVnr3C+!T$Gh9WEAQ$Vsu%IipD4mhDCe9zrld-FtJy2lsU=1nBF(|2tye`YJ z(4=iUd_@p5&+bUgu^9hL#Rj3RXFjtBzcUFnQpU>GVOHO? G)V~4g;t~=7 delta 668 zcmX|-Pe>b45XPTvj7ijJi>1^Ad{7dUvaq}UA&p&&7_S<&>7keM(md(nx(S<2G+yFa zCX(lLI}GYa z#1XrQr<8Z#0j+~Uum<*ko8SQW2@HXIU;z9E(%eD2J_aA6K5f_MU^nU(NZ(|*& zBw;kJ+PncfQU3;y5PuO7)ce>*CQm>zdI8eHYmnam0m;BWunP>r743GC-mQBs!RuljyKsL?41KM0#)s|Ig7GBr@r1 zx=`SKi83P!Zp$^ED0{cTXG5-OS0tM$mTD{`E$K=&TQFTVC)W_`uD2CRgmZSOlDEwA zNAGhuJDyThUC}1Erls}N3l)lF=aofSHOpqvRx-ksX|Agp<}^je+(cSU9mXP|j)l=l zUa~5Vu#92bFtic=nyWm`hwUjt=gB0uUm0W6)X>x?BP`qcVitr8ulK24tTxZ6@wS$C zg!eu==xs-z#FtjZhHzP~, 2018 # Marek Turnovec , 2016 +# Mirek Zvolský , 2019 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:08+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Czech (http://www.transifex.com/torchbox/wagtail/language/" "cs/)\n" @@ -17,7 +19,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "Wagtail ModelAdmin" +msgstr "Wagtail ModelAdmin" msgid "Parent page" msgstr "Nadřazená stránka" @@ -30,23 +36,54 @@ msgstr "Přidat %s" msgid "Add a new %s" msgstr "Přidat nový %s" +msgid "Inspect" +msgstr "Prozkoumat" + +#, python-format +msgid "Inspect this %s" +msgstr "Prozkoumat %s" + msgid "Edit" msgstr "Upravit" +#, python-format +msgid "Edit this %s" +msgstr "Editovat %s" + msgid "Delete" msgstr "Smazat" +#, python-format +msgid "Delete this %s" +msgstr "Přidat %s" + msgid "Unpublish" msgstr "Zrušit publikaci" +#, python-format +msgid "Unpublish this %s" +msgstr "Zrušit publikování %s" + msgid "Copy" msgstr "Kopírovat" +#, python-format +msgid "Copy this %s" +msgstr "Kopírovat %s" + msgid "image" msgstr "obrázek" msgid "Choose a parent page" -msgstr "Vybrat rodičovskou stránku" +msgstr "Zvolit rodičovskou stránku" + +#, python-format +msgid "" +"%(plural)s can be added to more than one place within your site. Which of " +"the following would you like to be the parent of your new page?" +msgstr "" +"%(plural)s mohou být přidány na více míst Vašeho webu. Vyberte, kam má být " +"Vaše nová stránka přidána." msgid "Continue" msgstr "Pokračovat" @@ -57,11 +94,124 @@ msgstr "Ukládání…" msgid "Save" msgstr "Uložit" +#, python-format +msgid "%(model_name)s could not be deleted" +msgstr "%(model_name)s nemohl být zrušen" + +#, python-format +msgid "" +"'%(instance_name)s' is currently referenced by other objects, and cannot be " +"deleted without jeopardising data integrity. To delete it successfully, " +"first remove references from the following objects, then try again:" +msgstr "" +"'%(instance_name)s' je právě odkazován jinými objekty a nemůže (nemohou) být " +"zrušen(y) s ohledem na integritu dat. Nejprve je potřeba odebrat odkazy z " +"těchot objektů; potom to zkuste znova:" + +msgid "Go back to listing" +msgstr "Zpět na seznam" + +msgid "Yes, delete" +msgstr "Ano, zrušit" + +msgid "Home" +msgstr "Domů" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Pomocí %(filter_title)s " + +#, python-format +msgid "Sorry, there are no %(name)s matching your search parameters." +msgstr "" +"Bohužel nejsou žádná %(name)s, která by odpovídala Vašemu parametru " +"vyhledávání." + +msgid "Search for" +msgstr "Hledat.." + +#, python-format +msgid "Search %(name)s" +msgstr "Hledat %(name)s" + +msgid "Filter" +msgstr "Filtr" + +#, python-format +msgid "" +"No %(name)s have been created yet. One of the following must be created " +"before you can add any %(name)s:" +msgstr "" +"Žádná %(name)s zatím nebyla vytvořena. Alespoň něco je potřeba vytvořit, než " +"budete moci přidávat %(name)s:" + +#, python-format +msgid "No %(name)s have been created yet." +msgstr "Žádný(á/é) %(name)s ještě nebyl(a/o) vytvořen(a/o)." + +#, python-format +msgid "" +"\n" +" Why not add one?\n" +" " +msgstr "" +"\n" +" Pojďme nějaký(ou/é) přidat?\n" +" " + +#, python-format +msgid "Page %(current_page)s of %(num_pages)s." +msgstr "Stránka %(current_page)s z %(num_pages)s." + +#, python-format +msgid "Back to %(model_name)s list" +msgstr "Zpátky na seznam %(model_name)s" + msgid "Previous" msgstr "Předchozí" msgid "Next" msgstr "Další" +#, python-format +msgid "The %s could not be created due to errors." +msgstr " %s nemohlo být vytvořeno kvůli chybám." + msgid "New" msgstr "Nový" + +#, python-format +msgid "Create new %s" +msgstr "Vytvořit nový(ou/é) %s" + +msgid "Editing" +msgstr "Editování" + +#, python-format +msgid "Editing %s" +msgstr "Editování %s" + +#, python-format +msgid "The %s could not be saved due to errors." +msgstr "%s nemohlo být uloženo kvůli chybám." + +#, python-format +msgid "Confirm deletion of %s" +msgstr "Potvrďte smazání %s" + +#, python-format +msgid "" +"Are you sure you want to delete this %s? If other things in your site are " +"related to it, they may also be affected." +msgstr "" +"Jste si jistý/á, že chcete zrušit %s? Jestliže se k tomu vztahují další věci " +"na Vašem webu, mohou být rovněž ovlivněny." + +msgid "Inspecting" +msgstr "Prohlíží se.." + +#, python-format +msgid "Inspecting %s" +msgstr "Prohlíží se %s" diff --git a/wagtail/contrib/modeladmin/locale/de/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/de/LC_MESSAGES/django.mo index 38469933455ac830d86eea2a9ccdd6a7d9ea6706..15dd470cce242250d998ba4eb5a32d674eac40da 100644 GIT binary patch delta 1751 zcma*nPiP!f9Ki8k>}un-NjEWS{8RI^n?LPl<8HUc7!b4+tFftnDi-TOr@Jqk(b=~; zGh1jC0-};AR&-mz>Y-pIP$~$4P-yiMMZtp?K~Ey$K?Lo^gC44Wf4dWvTCk6K`+4)` z{r$a}{XV-qH1}<9>Zp)zBi~5=q(fvU25a~s&8I|O#09(>yDt|R!ffLGi6L&H{%u^q zkML{Ud4&j<46GGdk3$$?32zXYlSK-BRIK1N_ziaAIb=@x4YlKW?7}n;b-;e?#sSoJ zW2o&)NK?5B(|9jx`#so;`%v50a4qvoNMQpNhfq7bf;!Pr)F8Zv+F=oI!BaSkUt$I) zt`r%@`%wEoi|g=tq>0R<_J0Gp<>~>O#(+W;~1<$7cbPtOs{tKk64_aRT4L>+vhR8P6e?^jy^*CyTm~B63o#xdw5Ap1-D> z$hvY({p8EY*O9Yi4Y}@4&rp*N^zWocp=o2A*247|^^7$Nt%ak$D<$$avTj(H#|7vyD0Wt*=~-8O*yn)Y%60jI8v)uZ19BhYCJF( zG~d)V@3N#X`O~Zi*9=g+i`SEELiYK9GOd z9`GZ^%I{!3lV)q7*lJfQn&P&}((SndDZR^!;`}3_=c2%i>*1uCs?U1P*~r`z*z(g$ zpQVp=Jas`JY#7Bh2;%<>Sk(qA%Tamu5*n_Ya1|TIV@nUM-;wIuZGAUtoKIKN9>Tij zkxZ_4kM(2gT%%UAp>M;6t1f+z+PKd;GkDpCEfzI!Wh2`R@s05~bJ(3_E;`S% z-rWI}Ko(LO#Gnvg7-)rW7B&&WViAg{-q_`pmk^4A2q~gB(f8-hg7{(&bI#|SXU=mj z|8t)4)jzMS-ku*jXQVWFDfyEIvn|*?gMzdzW_AjD@frLUSKxg-jk6lfe#Ce2NgSe> zgZnYW5p2T;_%yc6G+TfxaF$usGE^ALwxC|zhRygU@{VP(1&2`m4x{>wAU_+WXu=w* z{{@_nAENqSLw@!d#az6J>i<19Gr!%XqRsw+df@>s$A54Tm$1xsJc+aMW8`O_QmFsu z7{{Ba3BE&3a0g$)-!Oq|=(GmkK=nUH(aQYxHWdy09uh^ngj&Eyb-%%7wEx8SIi40q zKcoM7X(46^M+f%f2Ux}ba4BI_d5l-_Q87l1Zupq*ox;-5xar}*RIYb{u*Gs{@@E#`zzFu+(Iqn zC)5$#!%>XSGkXEgp)S=8Bsg}f?rqe9e??xgzflWmWEFil2RGnu#lMTn86Ic{Um|_& z2h;$+pjP}B>el~@D{&b&Op)7+oQSO@E3G5zNR)Jx9pp|mNcwu7A}7@#>5`^&{!7RT zf0~>iPbKCupR9>>AGAY-O-G`nh^%^8Gh2u|u zJJGJRbM0D}O-UhEcy())^xaM+9nZ659hZ`#w@8)R-I!my7>m`e#}1EOZah1q)*DaM zM&iF$ce}8|%ejJ!oaKwbfU~2;GVQlYLD3!e+K=W-VHA|I?s&VGt+*g^xz1_24DZW5 z+U2nUCg)**9hLHs%SL{0?R-;DwaZVY{nSP;mCB^M)+R|!J6`kq-GO|VFPHqSjF|D# z$rSxkewuz8Gs#Vp{rZA1@^@B(QdkJ0awX%v8bpz|%Y{+4Or^U>bI={^;lJ$Q-twW& zY`OSyQ(sUT7-p~jP8Sq2V?DD+8^&H~ULUKy)0!Cjx;5TV-RkxY?=9qydj~xoJY;Dq-Xbg=o644Y-L*rJSowb!sa-7P$d8IUODT2e, 2019 +# Henrik Kröger , 2018 +# Johannes Fleck, 2019 # Moritz Pfeiffer , 2016 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" -"Last-Translator: Matt Westcott \n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-31 14:37+0000\n" +"Last-Translator: Johannes Fleck\n" "Language-Team: German (http://www.transifex.com/torchbox/wagtail/language/" "de/)\n" "MIME-Version: 1.0\n" @@ -19,6 +23,9 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "Wagtail ModelAdmin" +msgstr "Wagtail ModelAdmin" + msgid "Parent page" msgstr "Übergeordnete Seite" @@ -52,11 +59,11 @@ msgid "Delete this %s" msgstr "%s löschen" msgid "Unpublish" -msgstr "Depublizieren" +msgstr "Veröffentlichung aufheben" #, python-format msgid "Unpublish this %s" -msgstr "%s depublizieren" +msgstr "Veröffentlichung von %s aufheben" msgid "Copy" msgstr "Kopieren" @@ -110,6 +117,9 @@ msgstr "Zurück zur Liste" msgid "Yes, delete" msgstr "Ja, löschen" +msgid "No, don't delete" +msgstr "Nein, nicht löschen" + msgid "Home" msgstr "Home" @@ -156,6 +166,9 @@ msgstr "" "Sie doch eine hinzu!\n" " " +msgid "Pagination" +msgstr "Seitennummerierung" + #, python-format msgid "Page %(current_page)s of %(num_pages)s." msgstr "Seite %(current_page)s von %(num_pages)s." @@ -170,9 +183,9 @@ msgstr "Vorherige" msgid "Next" msgstr "Nächste" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' erstellt." +#, python-format +msgid "%(model_name)s '%(instance)s' created." +msgstr "%(model_name)s '%(instance)s' erstellt." #, python-format msgid "The %s could not be created due to errors." @@ -192,9 +205,9 @@ msgstr "Bearbeiten" msgid "Editing %s" msgstr "%s bearbeiten" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' geändert." +#, python-format +msgid "%(model_name)s '%(instance)s' updated." +msgstr "%(model_name)s '%(instance)s' geändert." #, python-format msgid "The %s could not be saved due to errors." @@ -212,9 +225,9 @@ msgstr "" "Sind Sie sicher, dass Sie diese(s) %s löschen möchten? Andere Objekte, die " "damit verknüpft sind, können davon beeinträchtigt werden." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' gelöscht." +#, python-format +msgid "%(model_name)s '%(instance)s' deleted." +msgstr "%(model_name)s '%(instance)s' gelöscht." msgid "Inspecting" msgstr "Ansehen" diff --git a/wagtail/contrib/modeladmin/locale/el/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/el/LC_MESSAGES/django.mo index f3acba596f91a56700b3518b5af1c35162d9856f..92615dc21d5c336577ee8ad600d85788306aafdb 100644 GIT binary patch delta 1081 zcmZA0OGs2v9LMpabIlpk@lj?z%E_rQXS{W9;WSPri3&=Kk=jIy(8WX&R$xeEF)d1L zJnbyCs1o<#2~1GO~uXxP`B=lHFg%_n5+Z^4o$p z(8e691Rqcv-#`*(T4{6%@~;Q*f?nt?nrYgMYNpVKpnCm}7#(d!Db*LDg|*q;p$$-3 zFN4SO|J3FcjWlJrEH5ppjq1ynVUExgDvyE}Hiu~;nhv2380XV_JC22SKvfcj zGN?~fhj}Nm4=p=;-m(_1Sew4=OMib`yX`u*8xOgOq~pXK*KtY)Quf94*zoA^t($hw W(4BNLbjope#+^wz@r796Uf>^0VqGc# delta 1390 zcmaLWOGs2v9LMofYN=_anPyr|zDBdFGgCegg3K1B3#}m9h>3HdAss_4D6vT@!%aaU z^xE}Yq!g26k<_Ac)g5RX20@U^iU_hreSfzxLa;xc`?>e}KacxAXMPk-mPX!ZC5{@x zM=PM+SYk}0?i08WWr@a|#d2JO<5+|*aRg^^8TKX_lZGd-4~H=y=P(;{NXo$qOvar^ z*NAE6Mjcx*9ovvUbA-!E>_rmI5GrpNm*Ztj#p}qQxx*z3$58n%P7|ZyLGL#Czg);d-7g;x)Eo4Da&1n^{!S&)AA-jG`@Q!`1i+)$b>!(=U&5HSp}^ zbE`0fb$At3*|!)`$v$wSz5j-ln8|-v;SOAfdr^DWg~fOVHPOAeuTfj`5taWX{+vd6 z*7BT(9t@z)!hX!f!x_|HFHZAgsXmP3YEQ*rUR(hNLxzN*DE+< zZm8S}cG3-1bpuW3i(eL(n diff --git a/wagtail/contrib/modeladmin/locale/el/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/el/LC_MESSAGES/django.po index 54930c7e69e..4af6b5f7029 100644 --- a/wagtail/contrib/modeladmin/locale/el/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/el/LC_MESSAGES/django.po @@ -5,13 +5,13 @@ # Translators: # George Giannoulopoulos , 2017 # Nick Mavrakis , 2017 -# Yiannis Inglessis , 2016 +# Yiannis Inglessis , 2016 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Greek (http://www.transifex.com/torchbox/wagtail/language/" "el/)\n" @@ -153,10 +153,6 @@ msgstr "Προηγούμενο" msgid "Next" msgstr "Επόμενο" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' δημιουργήθηκε." - #, python-format msgid "The %s could not be created due to errors." msgstr "Το %s δεν μπόρεσε να δημιουργηθεί λόγω σφαλμάτων." @@ -175,10 +171,6 @@ msgstr "Υπό επεξεργασία" msgid "Editing %s" msgstr "Επεξεργάζεται %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' ενημερώθηκε." - #, python-format msgid "The %s could not be saved due to errors." msgstr "%s δεν μπορεί να αποθηκευτεί λόγω σφαλμάτων." @@ -196,10 +188,6 @@ msgstr "" "πράγματα στο site σας συσχετίζονται με αυτό, τότε μπορεί και αυτά να " "επηρρεαστούν." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' διαγράφηκε." - msgid "Inspecting" msgstr "Επισκόπηση" diff --git a/wagtail/contrib/modeladmin/locale/en/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/en/LC_MESSAGES/django.mo index a7b43aadb28debd1196578c1be4bda08f084ac0e..6420bb1ad72466dbfcfa24ee41530264faeb8eaa 100644 GIT binary patch delta 26 hcmeyx^owaimw=_Np@FWUnS!B(m4Sh_f#Jki4*+o&2si)$ delta 26 hcmeyx^owaimw<(?fswAEnS!CAm63(Efx*OC4*+oy2s!`& diff --git a/wagtail/contrib/modeladmin/locale/en/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/en/LC_MESSAGES/django.po index a54df90f45f..59a13b4519b 100644 --- a/wagtail/contrib/modeladmin/locale/en/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,11 +17,15 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: apps.py:8 +msgid "Wagtail ModelAdmin" +msgstr "" + #: forms.py:18 msgid "Parent page" msgstr "" -#: helpers/button.py:42 views.py:730 +#: helpers/button.py:42 views.py:671 #, python-format msgid "Add %s" msgstr "" @@ -40,7 +44,7 @@ msgstr "" msgid "Inspect this %s" msgstr "" -#: helpers/button.py:70 views.py:157 +#: helpers/button.py:70 views.py:160 msgid "Edit" msgstr "" @@ -49,7 +53,7 @@ msgstr "" msgid "Edit this %s" msgstr "" -#: helpers/button.py:84 templates/modeladmin/edit.html:15 views.py:761 +#: helpers/button.py:84 templates/modeladmin/edit.html:15 views.py:702 msgid "Delete" msgstr "" @@ -80,26 +84,26 @@ msgstr "" msgid "image" msgstr "" -#: templates/modeladmin/choose_parent.html:25 +#: templates/modeladmin/choose_parent.html:28 msgid "Choose a parent page" msgstr "" -#: templates/modeladmin/choose_parent.html:26 +#: templates/modeladmin/choose_parent.html:29 #, python-format msgid "" "%(plural)s can be added to more than one place within your site. Which of " "the following would you like to be the parent of your new page?" msgstr "" -#: templates/modeladmin/choose_parent.html:34 +#: templates/modeladmin/choose_parent.html:37 msgid "Continue" msgstr "" -#: templates/modeladmin/create.html:33 templates/modeladmin/edit.html:8 +#: templates/modeladmin/create.html:38 templates/modeladmin/edit.html:8 msgid "Saving…" msgstr "" -#: templates/modeladmin/create.html:34 templates/modeladmin/edit.html:9 +#: templates/modeladmin/create.html:39 templates/modeladmin/edit.html:9 msgid "Save" msgstr "" @@ -124,6 +128,10 @@ msgstr "" msgid "Yes, delete" msgstr "" +#: templates/modeladmin/delete.html:26 +msgid "No, don't delete" +msgstr "" + #: templates/modeladmin/includes/breadcrumb.html:3 msgid "Home" msgstr "" @@ -172,12 +180,16 @@ msgid "" " " msgstr "" +#: templates/modeladmin/index.html:77 +msgid "Pagination" +msgstr "" + #: templates/modeladmin/index.html:78 #, python-format msgid "Page %(current_page)s of %(num_pages)s." msgstr "" -#: templates/modeladmin/inspect.html:25 +#: templates/modeladmin/inspect.html:26 #, python-format msgid "Back to %(model_name)s list" msgstr "" @@ -190,66 +202,66 @@ msgstr "" msgid "Next" msgstr "" -#: views.py:151 -#, python-brace-format -msgid "{model_name} '{instance}' created." +#: views.py:153 +#, python-format +msgid "%(model_name)s '%(instance)s' created." msgstr "" -#: views.py:162 +#: views.py:165 #, python-format msgid "The %s could not be created due to errors." msgstr "" -#: views.py:652 +#: views.py:592 msgid "New" msgstr "" -#: views.py:677 +#: views.py:617 #, python-format msgid "Create new %s" msgstr "" -#: views.py:687 +#: views.py:627 msgid "Editing" msgstr "" -#: views.py:701 +#: views.py:641 #, python-format msgid "Editing %s" msgstr "" -#: views.py:704 -#, python-brace-format -msgid "{model_name} '{instance}' updated." +#: views.py:644 +#, python-format +msgid "%(model_name)s '%(instance)s' updated." msgstr "" -#: views.py:717 +#: views.py:658 #, python-format msgid "The %s could not be saved due to errors." msgstr "" -#: views.py:777 +#: views.py:718 #, python-format msgid "Confirm deletion of %s" msgstr "" -#: views.py:781 +#: views.py:722 #, python-format msgid "" "Are you sure you want to delete this %s? If other things in your site are " "related to it, they may also be affected." msgstr "" -#: views.py:790 -#, python-brace-format -msgid "{model} '{instance}' deleted." +#: views.py:731 +#, python-format +msgid "%(model_name)s '%(instance)s' deleted." msgstr "" -#: views.py:817 +#: views.py:767 msgid "Inspecting" msgstr "" -#: views.py:830 +#: views.py:780 #, python-format msgid "Inspecting %s" msgstr "" diff --git a/wagtail/contrib/modeladmin/locale/es/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/es/LC_MESSAGES/django.mo index 6d4f9afc1042be0516e02fed0e1b566918875a2a..282a7f8b3caa6b8bc60b4bea55a90829b5f1b5cf 100644 GIT binary patch delta 1069 zcmX}qPe>F|9Ki9P?P|8RncF|I4nu3Sxh~EYYApttU6hsV56D6Y(>kq#>kiEfX&v;E zho$JU#Ck|7LI{F7NC+LOLlkr<@Q^p@R+l<<=wjdBy7icOpZ8{dGw(OQH?KPu;`1A^ z@B^WloQF9dHi!)BI7CNFghlS)aomS5FplrBj6ZN4y+)BH9H!fe7tzOYJcMhw7k}Y? z3~d)_7MYiJ2E0S!s1GJEiakiI4B{>vMvcp%#*HI~OwmQqM~$Du7%rg3FCvF5(Y4|- zYWypVvc9}ypdb4g^?@}!g6lYmfAARQNw)>>B8ODzH2yK}z-810UZO7W7SG@(?8Ih* z5_l3d{wiG?>&tZpn(-{w7C@>gRn+ZR!h6g!+|<&2#G|-@_c2U4!o*cj7ha@%d+;fi zaTRsT1}LL$fsMM=w{f0#OO=6^?g?_pv%0HD^6~+9;}_JpZ}t1%>-T@7Ccas}-$EJM zn8#2*qyu%!I#CnotIxBo)St2B=rqtlO~^(4!dp0lk5Ef^fGqUiIER|pD6%_}LtVf^ zLZyUSi8;(-8I$-GQ@D-nG-0!?d#hCaTrjvWiu$4(So@if%GMqRF)Kr%_(2_M(@oRX z&Z+;nR2D*ohVGT0q34YqV^$%soT4$}PT0kPiD{=KIot0tnAw3X&a_pqE78dC)ag{( zOr?8`^r?(#Ce5^IMn*5BF4;F7-*HQ+^HyMIj1y-1e_UV2>`j`qNY?U$)D_Pv`9&*m zy^Jwp1%WYU`$67i&_B&|(w;fXz5L`gcXs7XWV5N~UuLzW96#`^3D+a9tyEoKE<0U@ OU35s<@?=O8Ey-WG@ delta 1244 zcmaLWOGs2v7{KvQW;8WlV;W>dQ)6k_)XXFzgMnZREki3?w2I5jWxB&Wa_&qo(^+JJ z6hRGIBbGC-{In@hfh@ zMuHmg0BZbc3K#RsIVw8vD3V1PLtVh_yfe6#_75E8cq$nE0_|IL(o{B+j*YknFJeDB ziPJRdLJCRW3ar8rtVcb9&Dd-L!6 z^6x{a8;a%MpFkJwEb0a?A#0SYmE>O+FqZ$}5pv5kg$BMxUC=w!9e&2+SjOy{(qYtZ zk8-HOFcDQ;(yi}4bPgi^mHC5xN15Bds@ENYh7q|(3 z;ySG3OVdp2V0vxOZFYE8`4$@UpP`?69gqG80y)zWDUka!j)}tTA=BRK4x2GEZHg5) zBBl()le7;fjJP@IZWyoiF;<^nx z?d?k$2|H$_lc}J4chY`3?(WW5w!6)U8IerFh}!LuxM9Wa?<@UNlxDuoB#j- diff --git a/wagtail/contrib/modeladmin/locale/es/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/es/LC_MESSAGES/django.po index 89133d53d35..3b6411c119d 100644 --- a/wagtail/contrib/modeladmin/locale/es/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/es/LC_MESSAGES/django.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 20:04+0000\n" -"Last-Translator: José Luis \n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" +"Last-Translator: Matt Westcott \n" "Language-Team: Spanish (http://www.transifex.com/torchbox/wagtail/language/" "es/)\n" "MIME-Version: 1.0\n" @@ -21,6 +21,9 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "Wagtail ModelAdmin" +msgstr "Wagtail Administrador de Modelos" + msgid "Parent page" msgstr "Página padre" @@ -171,10 +174,6 @@ msgstr "Anterior" msgid "Next" msgstr "Siguiente" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' creado." - #, python-format msgid "The %s could not be created due to errors." msgstr "El %s no puede ser creado debido a errores." @@ -193,10 +192,6 @@ msgstr "Editando" msgid "Editing %s" msgstr "Editando %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' actualizado." - #, python-format msgid "The %s could not be saved due to errors." msgstr "El %s no puede ser guardado debido a errores." @@ -213,10 +208,6 @@ msgstr "" "Está seguro de que quiere eliminar este %s? Si otras cosas en este sitio " "están relacionadas a esta, estas se verán afectadas también." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' eliminado." - msgid "Inspecting" msgstr "Inspeccionar" diff --git a/wagtail/contrib/modeladmin/locale/fa/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/fa/LC_MESSAGES/django.mo index 7dc379201b236c40bb03c449f5bc496e7aeed911..7b9428e1d6aaa2c146efc6514852f6b3fcf7c02b 100644 GIT binary patch delta 910 zcmX}qOK1~O6vpvW5?h@SydDlQV_*L+^C>X7cO;I-DD|L)Quav5&vHa4m0OBbLY&xch0@HQya;0JszzZ z$6>BLT$LuXF>H$vI1*8_o7jUp@e%goD_p=YxP}+Dm^EWaXv0w~Vg`5PD(=8KcH?i{ zYF0L<#f(0z3-w_F+cAmc*Z_85h{_vBWpoPGVUl%W~6+dDPm>quMKt_9axwpEusW#strwk<-=*>Tm$K5~EaDASmw!YQP25L@KDw`2xG}1LklI z(>TJ07{DUx{W7XjZ{rN0l6<8>9sY_hhLN<2y?M~OdF&!;6I<<8B-y;!;fx*J>8w&lw+C9f}P zCLA``Zm!8Bks3UdLc>v;Dsmm`a2w8JAui)h%-AII21hUrn`t)VMeM`@+=Z*S6}{;q z+p!QcL}C)6LoKO6O{~RCtVePrf?jM!jq5>;8$eFEMdQX%)c8A?gLhHmXOUB$(QLsv z)cDt!$@ub~j(+TC)Pz+mz;D=y`ApM~*U*CxkyD=1X#8_@;T-A!FHr}0ht>EAOR<=s zVmyNy-$#?p_%cXG3*SaoQN~dx@F3v}+{67B9AkUDRM#yUCn*nCP$!tovMgaK))41n z8FfO(Sw77_i@&fJ%kT;>WBcgbqoaHC3U%fys7v`3v+xJ%o_V;@=LM+GOK5Z}La6VL z;!Zq=q{wB|dPAuH)(El~GKHEqo5lKT;#}gvThzpliNLjl$=M=0Q4i|hT8ROiM^5=k zqlLX}ybibnbs`0*KW!D};wfxI2W_0sIV^I3P7-f5pqxgRst$EUE}$0d!x9`qO`OKP zxSTucPO-q27-3Ls_$gV64a=1^P2%L5}yCd9E9gOFCKBUJso{*VX95$0?!c6(hjG6k+ l)XjY}y>P=kG1De)CKd)4hyP^!{n~Y(Vjh{t3s(~nzX37&%1HnK diff --git a/wagtail/contrib/modeladmin/locale/fa/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/fa/LC_MESSAGES/django.po index 234ed251a1f..874f9406959 100644 --- a/wagtail/contrib/modeladmin/locale/fa/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/fa/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Persian (http://www.transifex.com/torchbox/wagtail/language/" "fa/)\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fa\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" msgid "Parent page" msgstr "صفحه والد" @@ -166,10 +166,6 @@ msgstr "قبلی" msgid "Next" msgstr "بعدی" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' ایجاد شد" - #, python-format msgid "The %s could not be created due to errors." msgstr "%s به دلیل بروز خطا ایجاد نشد" @@ -188,10 +184,6 @@ msgstr "در حال ویرایش" msgid "Editing %s" msgstr "ویرایش %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' بروزرسانی شد." - #, python-format msgid "The %s could not be saved due to errors." msgstr "به دلیل بروز خطا %s ذخیره نشد." @@ -208,10 +200,6 @@ msgstr "" "آیا مطمئن هستید که میخواهید %s را حذف کنید؟ اگر چیزهای دیگری در این سایت " "مرتبط با این شی هستند آنها نیز تحت تاثیر این حذف ممکن است قرار بگیرند." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' حذف شد." - msgid "Inspecting" msgstr "بازرسی" diff --git a/wagtail/contrib/modeladmin/locale/fi/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/fi/LC_MESSAGES/django.mo index 769597aee63cb4cc33c693214d27d772920506be..25beb79a5a24723be8298f024fb5318e6606d4df 100644 GIT binary patch delta 887 zcmX}q%}Z2K7{~FaMn}6kjJl`!~%qKw|FsCC0dC((*$d1L&~Zi6%;vEO@8dd_;vO#H5&puybh9A(blLbEC$SA5;UN~_DL%jp%rr}y zlVQdjmXG>l6hl~!#8^Fs(MQF#qTC0OyV=yJ(# zT?{nwFj7UE!ZnUz27CBj$jc~Bpe9&Gm39x0v66Bq;a$q61%z-Mi?J9#ph~}qs?2v( zo}ZXh$xaxM%l;s9+Bxd^<-h0GND(ZPbI8XCD!vSL6g9}^>>1`_3#u|*sD<^S&U^@& z%HCoGm&4RwfonX_1Yb}e;#W-I36^0y+ft$gD)AgDeg$ckqSN~g)WUbL7WYvf>tECn zhRCXoG@usN9AQ8Xdx=^|cVyKM)Dg9&ZvE#1kF{wnU4_Ej)|6@GW-ZGTy<~%_1Lg61_OYunn(a5yx>auHjA$ zY!T_iZfq5)Nt_dM$sp>332eh8@{FW0fJ3Np71X$KWS0pBKh{y>A7BSQM2(+Ac6rXQ z9p_Qw-(wr=%NI`cWxt_5u!dp$fm!UL%n07ZtvG}1@{~d2U!V`?Q5RT1UEnjG#1%Y( zJp}dOWz_f^3_;eH+ni|P`$!k1fm*<$rf+aR*Q+?i=LwMg3fD6{v>Uy&LlcKkTb{s= z_zbm>d$dyvo5lh@LCqJYtu_571Dt5flBfk_QCsOEYf2flz*=*DqB%c_G)bm#2R54X zbI98A5_x%9z#uN7c5DT;uh958yKDLOveS zLOW684dj*_M!kO=^@Yx0FP=yJiL31cf4=QB6Z$5vQ7e0g)Fex&g?vQ=SMd-Ad7Ti( zf_1;g-eYpAn>Nwn=;F|y-kwc*4tmpLBl(OoeAP{jI8`GumUD}xl$&;{5hH!wNtK+; zG1)kzT*&+zvMvF69ZgWL_|EmkqNW|S`VGs9+p(i2oB!g4=p|<~SIp(z=xOrA4coMc wv!XU}{c$rk`_q^4W;b4cxSTJQ|5sq)RU\n" "Language-Team: Finnish (http://www.transifex.com/torchbox/wagtail/language/" "fi/)\n" @@ -168,10 +168,6 @@ msgstr "Edellinen" msgid "Next" msgstr "Seuraava" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' luotu." - #, python-format msgid "The %s could not be created due to errors." msgstr "%s ei voitu luoda virheiden vuoksi." @@ -190,10 +186,6 @@ msgstr "Muokataan" msgid "Editing %s" msgstr "Muokataan %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' päivitetty." - #, python-format msgid "The %s could not be saved due to errors." msgstr "%s ei voitu tallentaa virheiden vuoksi." @@ -210,10 +202,6 @@ msgstr "" "Oletko varma, että haluat poistaa %s? Tämä saattaa vaikuttaa muihin " "sivustossa kohteeseen liityviin asioihin." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' poistettu." - msgid "Inspecting" msgstr "Tarkastellaan" diff --git a/wagtail/contrib/modeladmin/locale/fr/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/fr/LC_MESSAGES/django.mo index bf89811489bfb265d750da7164a70cf936c50c13..60745417c3768d303ac8d1938e6318bda6827610 100644 GIT binary patch delta 927 zcmYMyF=!J}7{Ku_HcgY%*wh+rE!CqEIv)>ZptVFFoz!-uu0G_uk9*zL$;ht>oKepcxmD z`(cq3KEfz|!e0D_JhDm?#C43|2KM1k)cJq#6o&YC6lXDw4(j};H2wGr_u_l(>>rV) zbn{}B7taDBYxtP4%h!F_yL)>>1D`XV!wB&hE==@lT=QR`Gl+L^4t2w?s3}}W-JqNNX#jE5)Q$K~AdgJZ4B%PR`Pc9= zF5+?gfHTXqC=GA%i(mIC!ar?>t67=4pEO4We%$Nv?U zcFIB8VZWdC)&B=E$Ru@~o0Bo`W!FG#f}!4=mbCY|E0f66(}1*)H91T@;st^OkqkY( zlw@lpxEPGjJ6U7Fsij;UIp)E{u~D#|hN@Ydo6pChEMmu?inxD?apn z6B1Wic(KllI{}e;X1_(h%&0v$v}<#Lb9k5j5{Ae-Tqn{A$aFms+uAJb-Pe;|6_CyEIa~7{z&9LM`Pl)CHr|QA=q14x*NJghv=Jpe~Td37p5{ z_!j%Ig5B!(lc<#%Mv5aBQGba$LnBI~fE~Dk`j4I=m6mQouVcjijn?MC1nnNbuNBbE zB>g@^#U>6Chlmu>Mf|zgn^;5}`;%7her32$|605My~BH1*{ySK>{O+ia+HXAfnYe) zNlSl9e6=Mw9rTuKy1dsl-`(@3n22P|j42s$vgyl47P5KzmvZT>S&YOMoLsS#&P|!c zSY)bT(j}AW*(POfHuHDNmI*f3VS@2O{)(9@StH(;(9nr~E19zF-iU1vr24y)T(#q4 z)>(7aDLVO_b&44WBB`WJo^7Sb>m5k;txneFtG$nniPdmZZ@?X!a}tr_-0W<@$(q7{ f9A&M%R*sv_?G8gBoN4Euv@Hkn7hEe>ZA|qWD5, 2019 +# Bertrand Bordage , 2018 # Léo , 2016 # Tom Dyson , 2016 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: French (http://www.transifex.com/torchbox/wagtail/language/" "fr/)\n" @@ -20,6 +22,9 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +msgid "Wagtail ModelAdmin" +msgstr "ModelAdmin Wagtail" + msgid "Parent page" msgstr "Page parente" @@ -110,6 +115,9 @@ msgstr "Retourner à la liste" msgid "Yes, delete" msgstr "Oui, supprimer" +msgid "No, don't delete" +msgstr "Non, ne pas supprimer" + msgid "Home" msgstr "Accueil" @@ -157,6 +165,9 @@ msgstr "" "\"%(url)s\">en ajouter un(e) ?\n" " " +msgid "Pagination" +msgstr "Pagination" + #, python-format msgid "Page %(current_page)s of %(num_pages)s." msgstr "Page %(current_page)s sur %(num_pages)s." @@ -171,10 +182,6 @@ msgstr "Précédent" msgid "Next" msgstr "Suivant" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' créé(e)." - #, python-format msgid "The %s could not be created due to errors." msgstr "Le/la %s ne peut être créé(e) du fait d'erreurs." @@ -193,10 +200,6 @@ msgstr "Modification" msgid "Editing %s" msgstr "Modification de %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' modifié(e)." - #, python-format msgid "The %s could not be saved due to errors." msgstr "Le/la %s ne peut être enregistré(e) du fait d'erreurs." @@ -213,10 +216,6 @@ msgstr "" "Êtes-vous sûr(e) de vouloir supprimer ce/cette %s ? Si d'autres éléments de " "votre site y sont liés, il se peut qu'ils soient également affectés." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' supprimé(e)." - msgid "Inspecting" msgstr "Inspection" diff --git a/wagtail/contrib/modeladmin/locale/gl/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/gl/LC_MESSAGES/django.mo index 76d8664d51470ad1147b36b5000d23cbba95e14b..3c28fa7502a93bf9495e9ea9040d2bfe770a1f5a 100644 GIT binary patch delta 887 zcmX}qO-K}R7{~EPcGaA8b=6|GJS?v7u{N`r+CT@%LrbP&5J;yCK|A<@Yln>XQuu-k z%DUi1ML{7DitJKE2QPN;(kU-`3ZkwZ?AZ4w((s?>^WT|g{x8pe-_-5aW=<-DdE>gy zUBkUnV0H&f0|c%}(CigP@e;0M96#VZ9^rQ!Dl{uXpHPZjIEB4<75A|kPw+DS!3$;? zbBfIv!>UjpMz9R)ksP~$A@ossDO6rB((Dnz!6&HvF|5RCRQ?>&EK4ZIJSu-1%b4HZ z(a~nVpg!2gT0FoJ{EdzHfaPAq8Kl`PLHSEqf_c;g8>k81;%)qdE%+CkFix`adkA6X zw}*5z@CZ^xOXC{H@Eo)Jj_^{Y-$4!Z8Rzh)J|b^|a%jRy%BB*(z?Zm;F|43`Isy-M z#P^Y*?I~tdvNRo<%@Fv;7Ldi-DpueoD(^kg>?1+%zoORg4fXyQRr(*O2~JT*RX|y^ zun_Xd;uywcIrUcwyLq4iQ>fApp#D75s2%@8O;pWlG*Rr_M%43Gq?u392JYcq9K>ea zLXC5XTF@zKLBa6(gDA^U=^Mg1Kah;lJG-kgk_ERUsWqusW0Hd+ zO7LPR^r8o;;72`Gs3<}a;>~&zy=Ya$gP=$+dJ_MmIg~S_#y>_*dBzaH z25S6kY$v~b;6@kw9rc3+?82XT8apX7f|qb5K0r>HVbJ(l^kM@w!7J1R^SBSc;tuR3 zs27i;#$RLzl3%WHqZ3acU6e`G0`50`i5q$Tfj8M6KeJ!wd5Vv8OOmuh6Aa*0ENOd) zbJIpGq=oir>pQT5Js8GGtm@u0xY51;h~$vpsIBy{9Bw6mx+R;C#mFw~z&_NtgQ#&w zn(t4bF34`aA3@!c^QiOJP-`3y(0{G$Hb3YDGZ@4dsI7gAn(!TJN4}u`sk~&@6_-&H z-9;_rQPZc*-=8C=%rWQ!<}roea686>`~OXJimX~u4Yi<&=JP|;EqQ`la2B`WC)|wQ zP~GP;*TuNiLlG!r{x9KM00(PQ>Gr{E0dqX(EL88%}E uaYoc6E}o1frhj?&v^mS?*Ag?<|0=Z7#ZfEkTv!ygq)I#M\n" "Language-Team: Galician (http://www.transifex.com/torchbox/wagtail/language/" "gl/)\n" @@ -169,10 +169,6 @@ msgstr "Previa" msgid "Next" msgstr "Seguinte" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' creada." - #, python-format msgid "The %s could not be created due to errors." msgstr "A %s non puido ser creada debido a erros." @@ -191,10 +187,6 @@ msgstr "Editando" msgid "Editing %s" msgstr "Editando %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' actualizada." - #, python-format msgid "The %s could not be saved due to errors." msgstr "A %s non puido ser gardada debido a erros." @@ -211,10 +203,6 @@ msgstr "" "¿Seguro que queres eliminar esta %s? Se outras cosas no teu sitio web fan " "referencia a ela, poderían tamén verse afectadas." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' eliminada." - msgid "Inspecting" msgstr "Inspeccionando" diff --git a/wagtail/contrib/modeladmin/locale/hu/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/hu/LC_MESSAGES/django.mo index a8c625eb2f656ec0a3be712517f75082c856c20b..12db5b1c12763f9dfb1be477e8de3833dbdc5ff6 100644 GIT binary patch literal 4766 zcmb7`%a0sK8Ndq&uO$Qs5W*w4;&|iTcxU$E5Seit$9DW!>`knAV-tjA)y&k)^!97$ zs@e67asUZMNe-4Qlt|`)vO>bF6iXmWK0qQ4jSq+e7Z99~;17UnIPmy=Jw3DI#o(kh zHNURzud2RhRsZ?^dtO&uU!#46_UjKQbrMD&;*aZ!V8D3m=6J?uTE7*Wl-14j+Jjf**r_hb*byg);7+@RM+g zmondj@IJT;id+?n+058Wek;z=_lF z8&KBiLeck9*?+m@Whi<02IQx%^Cx=z3Z8+#fs*GBpyXF!4T^m)LY7i3$WLwXC;Gky zCH_|-VJhYlJuthtWDfC@To2MdNE1Jc&v((pHi@5HGSB2C^&^+WTQ1Q<)|{hBPD~RL>nDxwWVUr^_w-CJi)P*Kr%bb{)5JbG zZ=O2*zNS_BXkSmyw1UXn?4l2RWM`dL(=&0}w9&=H#M0k8Jrg9(o1{T+uWn@4c-ySr zMT`mTdl2h&n|GY8k@liyVQ<~)axPZvM!n2nv~HM0^9IvxQ~OlMX=b(W@DxwzZe$u( zZv?&*B)XsWGVKCytNKDGXmoViLelD18b#?wkhJwiu^4hX3PPqyWoi-Wn#?9%1{9Md zc7sQ4dst2Qq;%6>9iUY&lL1j*6CulO1MTX4oibUb)B2iicsHj_(i8(En%mYD>ZU!f z*KEqV&A^Fjc*p1<@wS}>zF*a=Y3U6ecX2hWOcT(7*@F!%%~4a36JSU&9z>*ZEysJOlD zPb*#wak&(|7>8gep%N%b8Udi8WPcW`{DDh#9 z6Gi!`lbBFyEozF;sWi4~IdNUA8gV>R`CR0-Z)Lt`?FQ|VSI>(5Wf67^L9JV&Ro0*G zTVH(-BKkS%;lDCI?vX0w-e|JAZAk%1n5D90M=^=)4a4PYEHtN^X|mUsQCDa2I`7Mj zzbHYVEXC_HNiQz?Zq`*rE=Y_gB-|F&RK)9SX4iwX=hQh2lRy0M*YEyBowFvRL`Msc z`e>)lrCCOrODPe3S~B6E*!YHIU72yiStuj6F!na|Sf!k&snE%NWn_J`R}{U?vh;t6 zI@E0H9fB_;-CmtwchvZ99Nr72?M)Er71>IUG~*yqFIsAUSTrh#C2P-SscZ?AUdE(cCMZ@X#cD=V%YG%H7YZC6=MYkKPJbE}mibrG&SLpjy-(!%1`D~k)2#V7RQ zf!e~tzJ z%vpcvh1C<41KV=496N92c+yCls#s0V(mYfX20Q)i1qq;ew7Vpr42@Jw-smJV`m z$nkP$CeaTc(u=bPr_|I+kZ)z4Z6dzo$*Vi*V32QW+om3i6Ij^+8=C2^<(ouv=jp0; z>}V4Qi5#v`zU4E^oa^Rp2dvL;X8Fx%-R>0JF=ZQjAe`a|1IvtxXI!-Q3RM2Gp!b?ZYrxOF9z&LDp~ z(lH}~P)FhL5LSz(IKbzd>uH2bo#7D&Q72e8K1|62mxjjkWWo(&)#~{Tbc@YeQ+KocMm^t* z){M9!Gc`WCw%y4zM&&fZzRBkZBY7<5^QD2y@YLAusya{p3`{xq?YScdUA~Eq>O9sMFD zGO$@_-9YA+H*TVT_qVrxj%H(v`5YYCciIk`x2{muyd1c;SX-F3KJJoc}(@EWOE2$wH)Xro9HNHTviBf~nD zkcolhv-jg1OGu*j_MtyYT+ium<2fp7ly__S+aVj-?Pve|?Fav`qSYDGr7ms|mWeu7 z$61&iLang3OPor|Cwbp+lvCQ(s_bj!*H6fiPkB0Zy1c3J$*`741@%IX)E&MgrOPdc zvTm_)MCgtS%E5u=8S8r9gk)q@oeJus1b5r6l`Jdvu)0ll$izd%?e^IRpcEf aFI6+_8+C`Tf#tSM_?j6dahPv))qemDgKv)j delta 293 zcmX}my-LJD6b0a`#=v=c6wmBstb0;#_EKfQx{UZ%wW+iu^q|NA?~u# swRzsnOnKlZTn!)a7d;Rz, 2019 # Kornel Novak Mergulhão , 2016 # Kornel Novak Mergulhão , 2016 +# Matt Westcott , 2019 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" -"Last-Translator: Matt Westcott \n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-28 12:42+0000\n" +"Last-Translator: Istvan Farkas \n" "Language-Team: Hungarian (http://www.transifex.com/torchbox/wagtail/language/" "hu/)\n" "MIME-Version: 1.0\n" @@ -20,8 +22,211 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "Wagtail ModelAdmin" +msgstr "Wagtail ModelAdmin" + msgid "Parent page" msgstr "Szülő oldal" +#, python-format +msgid "Add %s" +msgstr "%s hozzáadása" + +#, python-format +msgid "Add a new %s" +msgstr "Új %s hozzáadása" + +msgid "Inspect" +msgstr "Vizsgálat" + +#, python-format +msgid "Inspect this %s" +msgstr "%s vizsgálata" + msgid "Edit" -msgstr "Szerkeszt" +msgstr "Szerkesztés" + +#, python-format +msgid "Edit this %s" +msgstr "%s szerkesztése" + +msgid "Delete" +msgstr "Törlés" + +#, python-format +msgid "Delete this %s" +msgstr "%s törlése" + +msgid "Unpublish" +msgstr "Visszavonás" + +#, python-format +msgid "Unpublish this %s" +msgstr "%s visszavonása" + +msgid "Copy" +msgstr "Másolás" + +#, python-format +msgid "Copy this %s" +msgstr "%s másolása" + +msgid "image" +msgstr "kép" + +msgid "Choose a parent page" +msgstr "Válasszon szülő oldalt" + +#, python-format +msgid "" +"%(plural)s can be added to more than one place within your site. Which of " +"the following would you like to be the parent of your new page?" +msgstr "" +"A(z) %(plural)s tartalmak több helyre is hozzáadhatóak. A következők közül " +"melyik legyen az új oldal szülő oldala?" + +msgid "Continue" +msgstr "Folytatás" + +msgid "Saving…" +msgstr "Mentés folyamatban..." + +msgid "Save" +msgstr "Mentés" + +#, python-format +msgid "%(model_name)s could not be deleted" +msgstr "A(z) %(model_name)s nem törölhető" + +#, python-format +msgid "" +"'%(instance_name)s' is currently referenced by other objects, and cannot be " +"deleted without jeopardising data integrity. To delete it successfully, " +"first remove references from the following objects, then try again:" +msgstr "" +"A(z) '%(instance_name)s' jelenleg kapcsolatban van más rekordokkal, és nem " +"lehet törölni az adatok integritásának megsértése nélkül. A törléshez előbb " +"távolítsa el a hivatkozásokat a következő rekordokból, majd próbálja újra: " + +msgid "Go back to listing" +msgstr "Vissza a listához" + +msgid "Yes, delete" +msgstr "Igen, törlés" + +msgid "No, don't delete" +msgstr "Nem, ne töröljük" + +msgid "Home" +msgstr "Kezdőlap" + +#, python-format +msgid " By %(filter_title)s " +msgstr "ez alapján: %(filter_title)s" + +#, python-format +msgid "Sorry, there are no %(name)s matching your search parameters." +msgstr "" +"Sajnáljuk de nincs %(name)s, amelyik megfelelne a keresési feltételeknek." + +msgid "Search for" +msgstr "Keresés:" + +#, python-format +msgid "Search %(name)s" +msgstr "%(name)s keresés" + +msgid "Filter" +msgstr "Szűrő" + +#, python-format +msgid "" +"No %(name)s have been created yet. One of the following must be created " +"before you can add any %(name)s:" +msgstr "" +"Még nincs egyetlen %(name)s sem létrehozva. Legalább egyet létre kell hozni " +"a következőkből, mielőtt hozzáadna egy %(name)s rekordot:" + +#, python-format +msgid "No %(name)s have been created yet." +msgstr "Még nincs %(name)s létrehozva." + +#, python-format +msgid "" +"\n" +" Why not add one?\n" +" " +msgstr "" +"\n" +"Miért nem ad hozzá egyet?" + +msgid "Pagination" +msgstr "Lapozó" + +#, python-format +msgid "Page %(current_page)s of %(num_pages)s." +msgstr "%(current_page)s/%(num_pages)s. oldal" + +#, python-format +msgid "Back to %(model_name)s list" +msgstr "Vissza a(z) %(model_name)s listához" + +msgid "Previous" +msgstr "Előző" + +msgid "Next" +msgstr "Következő" + +#, python-format +msgid "%(model_name)s '%(instance)s' created." +msgstr "%(model_name)s '%(instance)s' létrehozva." + +#, python-format +msgid "The %s could not be created due to errors." +msgstr "Hiba a(z) %s létrehozása közben." + +msgid "New" +msgstr "Új" + +#, python-format +msgid "Create new %s" +msgstr "Új %s létrehozása" + +msgid "Editing" +msgstr "Szerkesztés" + +#, python-format +msgid "Editing %s" +msgstr "%s szerkesztése" + +#, python-format +msgid "%(model_name)s '%(instance)s' updated." +msgstr "%(model_name)s'%(instance)s' frissítve." + +#, python-format +msgid "The %s could not be saved due to errors." +msgstr "Hiba a(z) %s mentése közben." + +#, python-format +msgid "Confirm deletion of %s" +msgstr "%s törlésének megerősítése" + +#, python-format +msgid "" +"Are you sure you want to delete this %s? If other things in your site are " +"related to it, they may also be affected." +msgstr "" +"Biztosan törölni kívánja ezt a(z) %s rekordot? Ha más tartalom is hivatkozik " +"rá, azt is értintheti a törlés." + +#, python-format +msgid "%(model_name)s '%(instance)s' deleted." +msgstr "%(model_name)s '%(instance)s' törölve." + +msgid "Inspecting" +msgstr "Vizsgálat" + +#, python-format +msgid "Inspecting %s" +msgstr "%s vizsgálata" diff --git a/wagtail/contrib/modeladmin/locale/id_ID/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/id_ID/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2a069cb4267001520700f7cf98f68650ae6aae3f GIT binary patch literal 4290 zcmb7`%a2?~6~-$hkT4-U0t7Ix!eQ_Xp6=-hBAE7L@c0pr&BQ}I#efB?)H&Zdr>g(<@O?j2v>yFq^dH@$)ESxI%RpPWPpNN%i{J;rUxJTEQSc4$1K_{GN5FgUSLy-q5Qqx(C@9}8fDeJ62N6|gz;}Ze zL6N%-irmv6KQ&>P13f76&w>ww-vLGbMUbC*iQzrq%b>{r4wQZV0E(-xgChS1co=*W z9E1M>kAOpreGvQ}D0aWVAo4#2-wD19ivCwY(f=BF68tmxS?~db7QoMeBL6jp_kkl& z?7am>{UB7T7r>tri`Zx|1(hR`#$&$@Ymq$;A4=2sJaKIgs%s|AApBI4gLar zKlm5$6X4%L;Y);NzxzSq^`Qn2HS0&3=ME_T_CdB(t01naOU?5ZDEht*ieK9x)Tvp6 z-varm=NQD!7eU$YXQ1eP6%^in3(kYDfs#M}1ed_;kc-LcyP(KD56XT&0Y%R%pz!z` zke~V!!z%b!P~!Kk z&k`5mwr!$M+9A5+zBI{!wh2ESy3~=xQuY>IQkS_)89syT9qa- zkoFO}_y=9FiI3vnr|Gy7Ir=y#ZILduDETN&>alH73z8qgu{7cQ!!nuEZ?Rn)&vae{ zeZuH*X-6jy&o5MEy66v|GD)I~+@4rAr&iyRTBX-!dVXQ#(qPLQ!G+W=dadRcvLdnR zjof7NJS?g-iCYh>X59vxATv#?(y+fCnq2b+D{P`ep|hg2I*eJxC_PQh(CQr*#xB>h zqAIm_!FKhvu^WzcF+$SnQIV#_j?1_8PTUMRow^BX3Q;X0Q&ZYJ$OlnLZg*JPwyWyM z{DRAUF!|6n79Y_LtEy5yNM{S0W;hYCeOZw@AJmy~QFub%Mn@u|&J;QR zXSGePAPq)hJIlf4mAs$M;?SC_&Xg8oS|`uO6jL?q%A8AFP%_-Hf^%_E;=>;2V6Yc7EU4(R!Fvv9N7f7XM4sV`ifF30}>o)qsGG)$VLJgxAb=FfP>_ za&nzcGMB6Cmin#>L%B>cbF(a@>^tj8=c`yrZuWKa;oMVpT9l!);kRAVS*x~vXRGMz zxy{R4otT~ocg~Wfef?N(<%^w_UT5WTy>hJI>mBW_^m+((o`PdhdVt&)`n|`G_Goio zHa>K=N|SpEuqgX_!-Sx(Ss#W4lM^rtwM?fo}BE+QQJ9}4~vB4=<8zx7j|v$ z>$un4X1q8$=ZiA)eVy0$h(Eb zQAn^gJC zxc2h!uHI2@i;0#fU=r6wWT&w^x}&)Wp$!GlV`kBi_Rcas-eFyRHQIuG+x0gIGcgLv z%OyRvCG7GqL+Cl!fPpRDq~hKXBZkGm=!tBYy1v?~1H<9DJB!|`)6>Y0umwpIJRn6F z_srnDaJgI67v02g?ui9y?Q0~JgJohk{~K%NCF1)dv9$MQA4DG@O>ML1nC%iyq32k?quGTE&ml(Avq4B%8rz~q; zY}jTd>ej>Wz#C#+qNyzy3qSDR#(nl7hlc%omXEgT!-vRty}!N;;7zS7@fsgx63`r ze?wR$h^^1JEyc1`8^(;d3J-SMTVGMBOUQ}x{*tD8Q*Olx8A&*Kjz?F!)SNp_4jyz%8mSmL2%nJ3E!BSkE5(Rx literal 0 HcmV?d00001 diff --git a/wagtail/contrib/modeladmin/locale/id_ID/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/id_ID/LC_MESSAGES/django.po new file mode 100644 index 00000000000..352323bff31 --- /dev/null +++ b/wagtail/contrib/modeladmin/locale/id_ID/LC_MESSAGES/django.po @@ -0,0 +1,210 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# M. Febrian Ramadhana , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" +"Last-Translator: Matt Westcott \n" +"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/torchbox/" +"wagtail/language/id_ID/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id_ID\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Wagtail ModelAdmin" +msgstr "Wagtail ModelAdmin" + +msgid "Parent page" +msgstr "Halaman induk" + +#, python-format +msgid "Add %s" +msgstr "Tambah %s" + +#, python-format +msgid "Add a new %s" +msgstr "Tambah %s baru" + +msgid "Inspect" +msgstr "Periksa" + +#, python-format +msgid "Inspect this %s" +msgstr "Periksa %s ini" + +msgid "Edit" +msgstr "Ubah" + +#, python-format +msgid "Edit this %s" +msgstr "Ubah %s ini" + +msgid "Delete" +msgstr "Hapus" + +#, python-format +msgid "Delete this %s" +msgstr "Hapus %s ini" + +msgid "Unpublish" +msgstr "Batal Publikasi" + +#, python-format +msgid "Unpublish this %s" +msgstr "Batalkan publikasi untuk %s ini" + +msgid "Copy" +msgstr "Salin" + +#, python-format +msgid "Copy this %s" +msgstr "Salin %s ini" + +msgid "image" +msgstr "Gambar" + +msgid "Choose a parent page" +msgstr "Pilih halaman induk" + +#, python-format +msgid "" +"%(plural)s can be added to more than one place within your site. Which of " +"the following would you like to be the parent of your new page?" +msgstr "" +"%(plural)sbisa dimasukkan pada lebih dari satu tempat pada situs Anda. " +"Manakah yang akan menjadi induk untuk halaman baru Anda?" + +msgid "Continue" +msgstr "Lanjut" + +msgid "Saving…" +msgstr "Menyimpan..." + +msgid "Save" +msgstr "Simpan" + +#, python-format +msgid "%(model_name)s could not be deleted" +msgstr "%(model_name)s tidak dapat dihapus" + +#, python-format +msgid "" +"'%(instance_name)s' is currently referenced by other objects, and cannot be " +"deleted without jeopardising data integrity. To delete it successfully, " +"first remove references from the following objects, then try again:" +msgstr "" +"'%(instance_name)s' mempunyai referensi pada objek lain dan tidak bisa " +"dihapus tanpa membahayakan integritas data. Untuk menghapus dengan benar, " +"pertama hapus referensi pada objek berikut, dan coba kembali:" + +msgid "Go back to listing" +msgstr "Kembali ke daftar" + +msgid "Yes, delete" +msgstr "Ya, hapus" + +msgid "Home" +msgstr "Beranda" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Oleh %(filter_title)s" + +#, python-format +msgid "Sorry, there are no %(name)s matching your search parameters." +msgstr "Maaf, tidak ada %(name)syang sesuai dengan parameter pencarian." + +msgid "Search for" +msgstr "Pencarian untuk" + +#, python-format +msgid "Search %(name)s" +msgstr "Pencarian %(name)s" + +msgid "Filter" +msgstr "Saring" + +#, python-format +msgid "" +"No %(name)s have been created yet. One of the following must be created " +"before you can add any %(name)s:" +msgstr "" +"Tidak ada %(name)syang telah dibuat. Salah satu dari yang selanjutnya perlu " +"dibuat sebelum %(name)s dapat ditambah:" + +#, python-format +msgid "No %(name)s have been created yet." +msgstr "Tidak ada %(name)s yang telah dibuat." + +#, python-format +msgid "" +"\n" +" Why not add one?\n" +" " +msgstr "" +"\n" +"Kenapa tidak tambah satu?" + +#, python-format +msgid "Page %(current_page)s of %(num_pages)s." +msgstr "Halaman %(current_page)s dari %(num_pages)s." + +#, python-format +msgid "Back to %(model_name)s list" +msgstr "Kembali ke daftar %(model_name)s" + +msgid "Previous" +msgstr "Sebelumnya" + +msgid "Next" +msgstr "Berikutnya" + +#, python-format +msgid "The %s could not be created due to errors." +msgstr "%s tidak dapat dibuat karena kesalahan." + +msgid "New" +msgstr "Baru" + +#, python-format +msgid "Create new %s" +msgstr "Buat %s baru" + +msgid "Editing" +msgstr "Mengubah" + +#, python-format +msgid "Editing %s" +msgstr "Mengubah %s" + +#, python-format +msgid "The %s could not be saved due to errors." +msgstr "%s tidak dapat disimpan karena suatu kesalahan." + +#, python-format +msgid "Confirm deletion of %s" +msgstr "Konfirmasi penghapusan dari %s" + +#, python-format +msgid "" +"Are you sure you want to delete this %s? If other things in your site are " +"related to it, they may also be affected." +msgstr "" +"Apakah Anda yakin ingin menghapus %s ini? Jika ada hal lain yang terkait " +"dengan hal ini pada situs Anda, hal lain tersebut akan terpengaruh juga." + +msgid "Inspecting" +msgstr "Memeriksa" + +#, python-format +msgid "Inspecting %s" +msgstr "Memeriksa %s" diff --git a/wagtail/contrib/modeladmin/locale/is_IS/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/is_IS/LC_MESSAGES/django.mo index 06335557546cd28f1d27baf5736d00e15a90bebd..f20ef20f3b7f0c215668558af8c70bc19f88eb3b 100644 GIT binary patch delta 1005 zcmX}qPe_wt9Ki9PyqdO}w)Kay4sUJH)*Qaev>FtNLOKY|Lm`;(>R#8%ZLp2Xi#ya1 zDLOR54h;&D4nhgTQ$fMJ=)r>o-a2&%q;7SHpuRtO>*0By&-3j4J@4;%fA7|Uj{~L8 z{>G<5v$&3NJ#P@{)49Pw3pI*7z%U-fHyFTGoX4-Yh506tU6^3li&wFL<9HM|@c@3u zLufRMw1||Xoe9s70P4mNda)acl|F361ZvzUYTP)|aQCI_(4CxhF|9Ki9Ptfp?cre*jq*jh_X$95MI*@^;<)QeJh2!hylM_X}MbH`#a-Gluh zf(|Z1cnAdbkU^G*QV5JqqJws*@RmWI3L+$^W8Ys+5FQ+6-sip9-|xLQznQ)7d0UbE zRG2v?9Dc5HuE!Z7jd;RA!_k~6auZvy2v^X9>v$J)vP4#K6n9`Z%`Uu(aU8}n+`zr) z$`;v&9?TI*N`MY?Nh4}vGv;9jk|QB>VK-`A0ySoj8M>@|;HF7cm!?P#1WIy1*Kq#IJY+ zs|c#X^QiGRXbM1X ztfh=v$zsZO< zrC2a(4!J7_BeA#@jD^ghN_VK=3|eNmZkv#SzVQDcTPE0ChY8yId%Mk$WwfNGb59>@ zFuZ=lSMT=u0{(^?FNd?e%{XUXi^L4ivo)@?<4w%>nWXL`Ed`WLh10nCKOPk#U(lEFCu diff --git a/wagtail/contrib/modeladmin/locale/is_IS/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/is_IS/LC_MESSAGES/django.po index 64c00e70a45..9ec733afbea 100644 --- a/wagtail/contrib/modeladmin/locale/is_IS/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/is_IS/LC_MESSAGES/django.po @@ -5,13 +5,13 @@ # Translators: # Arnar Tumi Þorsteinsson , 2016 # saevarom , 2016 -# saevarom , 2016 +# saevarom , 2016,2018 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:08+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Icelandic (Iceland) (http://www.transifex.com/torchbox/" "wagtail/language/is_IS/)\n" @@ -21,6 +21,9 @@ msgstr "" "Language: is_IS\n" "Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" +msgid "Wagtail ModelAdmin" +msgstr "Wagtail gagna stjórnborð" + msgid "Parent page" msgstr "Yfirsíða" @@ -169,10 +172,6 @@ msgstr "Fyrra" msgid "Next" msgstr "Næsta" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' búið til." - #, python-format msgid "The %s could not be created due to errors." msgstr "Ekki var hægt að búa til %s þar sem það stóðst ekki villuprófanir" @@ -191,10 +190,6 @@ msgstr "Breyti" msgid "Editing %s" msgstr "Breyti %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' uppfært." - #, python-format msgid "The %s could not be saved due to errors." msgstr "Ekki var hægt að vista %s þar sem það stóðst ekki villuprófanir" @@ -211,10 +206,6 @@ msgstr "" "Ertu viss um að þú viljir eyða þessu %s? Ef aðrir hlutir á síðunni eru háðir " "þessu þá gæti þetta haft áhrif á þá." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' eytt." - msgid "Inspecting" msgstr "Skoða" diff --git a/wagtail/contrib/modeladmin/locale/it/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/it/LC_MESSAGES/django.mo index 95f67ed1a66faa7d9a5a2a45168c36585ec74651..1e7a95b66c0d7ef2eff94d89806689661f8e972c 100644 GIT binary patch delta 1262 zcmXxiPe>F|9Ki9nxR!2hZf@HD8d7stcWrh<(Jdo2gTyk_sO&W2q?5Zdv^#a^-4 zN|h*;Rdoz_huV)au^Ii?iNvZt+<*fpaTZFPja=#~Hy_?ciNA;CIEfPf9J$mhZe{oe zC4LV5m*WkG-O8rHBaU+^i){F`i} zZ24Ur!6}r&d~D}tjAB;KypsWoQ-df8M^P%ch;kISkj+r{Q5O0bCH@7HvO`Nq4TYBn!B@uq%Y$8HlQRvWET9o(>keQw9!05e6eZzL4C4~Yyc*6& z;^QduTTv?PKys>cD0wbm54sq|w*mHF2ETbAU$;hi^0hYMZtO*=D2-C_4df(Lgf1;c zmqgMevAk;^UA9@?CsnRCS-7-qbjcyDe#^3jJMUHvbg8&1H&qn$hZyapORLSz7S&hi zjHDuI6kk|mP0r&Dmdd9kryb7k^q%(yPB;;5$gyi(ZOBZTu9+Vzsq|EzHilipN@~X) zp0*98EL)v5Gej0*l$A1u&79xYm2HW}^k}R}i!~>7yz9x+@q zp~dxBAuisc#p8uIow#lz<3{__hMh?ou9Hq^-R)Ya-L$nXXT;99jvdwxrdY(`UsCxbMDOTl5uzP zeV%>w5w74K z%+641FP31YQb`qHz*?#f<;8k*;sxX#6~t`pM2YJ`i5oyZYLw1_DU|pr%)>`0@$<+> zJ)_IPMU?nA=wyHOk%1)p9p!};EXGv~VZ#Ub2@Gss8H(MkMs%)&*K4PK*c@BvTb zS3Hg$f;`xQ65mIc%l>MFfh>FvsiJy_a)9X#U*bXLKX8)k$!7Jt%x8E>N?A=g0h8W1*-$xFs=1~r^fRfP?%9Si5MNwZc7r&vz z|3N8vCc!cD&vuMf=4!%CI>0!sgMax)|X_xGNDPud>*<&9@$iWg7QV#Y^=R@IQh91 zr^amgPPt{-UfR*rQ(Kv=xt5_wQPvLSPW`myXGwkJ);+UM`&IkwaArYT@{*A#cXb$D zhGnQoR1X=dH)=A!9MhvlzpJ!25=&TmENJwXx`J^-w~UU8Z9=-Qb^IH$Wr6j5SfDv> zb{auTYe+3+)h4SnuV3?3x_rKXzpBhjb2K+;=ZzbYM8u3~XIL@d@_T*6`7}Rql>zTY zT%(?_wAQ#DOLXa$84tM5>XzkdGZI$NWKbPt8a8g$^1opCig~LdXhv%sje0E9O|Dw2 vp+^I=gN|_e?C+emv{XE|ApD>F&F#|HL!pQnk8zaEs4W#Rx+2lY`v3m|xdh%N diff --git a/wagtail/contrib/modeladmin/locale/it/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/it/LC_MESSAGES/django.po index 49c3ce24120..d0933d55139 100644 --- a/wagtail/contrib/modeladmin/locale/it/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/it/LC_MESSAGES/django.po @@ -4,13 +4,15 @@ # # Translators: # Giacomo Ghizzani , 2016 +# giammi , 2018 +# LB (Ben Johnston) , 2019 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:08+0000\n" -"Last-Translator: Matt Westcott \n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-29 22:00+0000\n" +"Last-Translator: LB (Ben Johnston) \n" "Language-Team: Italian (http://www.transifex.com/torchbox/wagtail/language/" "it/)\n" "MIME-Version: 1.0\n" @@ -19,6 +21,9 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "Wagtail ModelAdmin" +msgstr "Amministrazione Modelli Wagtail" + msgid "Parent page" msgstr "Pagina padre" @@ -108,6 +113,9 @@ msgstr "Torna indietro alla lista" msgid "Yes, delete" msgstr "Si, elimina" +msgid "No, don't delete" +msgstr "No, non eliminarlo" + msgid "Home" msgstr "Home" @@ -169,10 +177,6 @@ msgstr "Precedente" msgid "Next" msgstr "Successivo" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' creato." - #, python-format msgid "The %s could not be created due to errors." msgstr "%s non può essere creato a causa di errori. " @@ -191,10 +195,6 @@ msgstr "Modifica" msgid "Editing %s" msgstr "Modifica %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' aggiornato." - #, python-format msgid "The %s could not be saved due to errors." msgstr "%s non può essere salvato a causa di errori." @@ -211,10 +211,6 @@ msgstr "" "Sei sicuro di voler cancellare %s? Saranno interessati tutti gli oggetti del " "sito in relazione a questo." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' eliminato." - msgid "Inspecting" msgstr "Controllo" diff --git a/wagtail/contrib/modeladmin/locale/ja/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..57fe63794f586c37d0e0e40474e84a56f2d369a0 GIT binary patch literal 4602 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 literal 0 HcmV?d00001 diff --git a/wagtail/contrib/modeladmin/locale/ja/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 00000000000..92198dda07b --- /dev/null +++ b/wagtail/contrib/modeladmin/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,220 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# shuhei hirota, 2019 +# Safu9 , 2019 +# 小口英昭 , 2019 +# Yudai Kobayashi , 2019 +# 山本 卓也 , 2019 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" +"Last-Translator: Matt Westcott \n" +"Language-Team: Japanese (http://www.transifex.com/torchbox/wagtail/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Wagtail ModelAdmin" +msgstr "Wagtail モデル管理" + +msgid "Parent page" +msgstr "親ページ" + +#, python-format +msgid "Add %s" +msgstr "%s を追加" + +#, python-format +msgid "Add a new %s" +msgstr "%s を新規追加" + +msgid "Inspect" +msgstr "詳細" + +#, python-format +msgid "Inspect this %s" +msgstr "%sの詳細" + +msgid "Edit" +msgstr "編集" + +#, python-format +msgid "Edit this %s" +msgstr "%sを編集" + +msgid "Delete" +msgstr "削除" + +#, python-format +msgid "Delete this %s" +msgstr "%sを削除" + +msgid "Unpublish" +msgstr "非公開" + +#, python-format +msgid "Unpublish this %s" +msgstr "%sを非公開" + +msgid "Copy" +msgstr "複製" + +#, python-format +msgid "Copy this %s" +msgstr "%sを複製" + +msgid "image" +msgstr "画像" + +msgid "Choose a parent page" +msgstr "親ページを選択" + +#, python-format +msgid "" +"%(plural)s can be added to more than one place within your site. Which of " +"the following would you like to be the parent of your new page?" +msgstr "" +"%(plural)sはサイト内の複数の場所に追加できます。 次のうち、新しいページの親に" +"なりたいものはどれですか?" + +msgid "Continue" +msgstr "続ける" + +msgid "Saving…" +msgstr "保存中..." + +msgid "Save" +msgstr "保存" + +#, python-format +msgid "%(model_name)s could not be deleted" +msgstr "%(model_name)sは削除できませんでした" + +#, python-format +msgid "" +"'%(instance_name)s' is currently referenced by other objects, and cannot be " +"deleted without jeopardising data integrity. To delete it successfully, " +"first remove references from the following objects, then try again:" +msgstr "" +"現在'%(instance_name)s'は他のオブジェクトによって参照されているため、データの" +"整合性を危険にさらすことなく削除できません。 正常に削除するためには、次のオブ" +"ジェクトから参照を削除してから行ってください。" + +msgid "Go back to listing" +msgstr "リストに戻る" + +msgid "Yes, delete" +msgstr "はい、削除します" + +msgid "No, don't delete" +msgstr "いいえ、削除しません" + +msgid "Home" +msgstr "ホーム" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)sによって" + +#, python-format +msgid "Sorry, there are no %(name)s matching your search parameters." +msgstr "検索パラメータに一致する%(name)sはありませんでした。" + +msgid "Search for" +msgstr "を検索する" + +#, python-format +msgid "Search %(name)s" +msgstr "%(name)sを検索" + +msgid "Filter" +msgstr "フィルター" + +#, python-format +msgid "" +"No %(name)s have been created yet. One of the following must be created " +"before you can add any %(name)s:" +msgstr "" +"%(name)sはまだ作成されていせん。%(name)sを追加する前に、次のいずれかを作成す" +"る必要があります:" + +#, python-format +msgid "No %(name)s have been created yet." +msgstr "まだ%(name)sは作成されていません。" + +#, python-format +msgid "" +"\n" +" Why not add one?\n" +" " +msgstr "" +"\n" +"追加しますか?" + +msgid "Pagination" +msgstr "ページネーション" + +#, python-format +msgid "Page %(current_page)s of %(num_pages)s." +msgstr "%(num_pages)sページ中%(current_page)sページ目" + +#, python-format +msgid "Back to %(model_name)s list" +msgstr "%(model_name)sリストに戻る" + +msgid "Previous" +msgstr "前へ" + +msgid "Next" +msgstr "次へ" + +#, python-format +msgid "The %s could not be created due to errors." +msgstr "%sはエラーにより作成されませんでした。" + +msgid "New" +msgstr "新規作成" + +#, python-format +msgid "Create new %s" +msgstr "%sを新規作成" + +msgid "Editing" +msgstr "編集" + +#, python-format +msgid "Editing %s" +msgstr "%sを編集中" + +#, python-format +msgid "The %s could not be saved due to errors." +msgstr "%sはエラーにより保存されませんでした。" + +#, python-format +msgid "Confirm deletion of %s" +msgstr "%sの削除確認" + +#, python-format +msgid "" +"Are you sure you want to delete this %s? If other things in your site are " +"related to it, they may also be affected." +msgstr "" +"%sを削除してもよいですか?サイトの他の要素がこれに関連している場合は、それら" +"も影響を受ける可能性があります。" + +msgid "Inspecting" +msgstr "詳細" + +#, python-format +msgid "Inspecting %s" +msgstr "%sの詳細" diff --git a/wagtail/contrib/modeladmin/locale/ko/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/ko/LC_MESSAGES/django.mo index bb16f395fe9c78d00bf408df090408d11b953fa1..40ab6e4e5f0cbc1e2fcfdc0c46b03ef4f38a1215 100644 GIT binary patch delta 995 zcmX}qUr19?9Ki9PP1BakrWLdjE=_7>!+SN&20fI$G>ozyLP%@4+Zz6hwn_+GM0qm_nL@pVob7KNEei9oojT-+DxuihXfJM~! zH|Qb1d}5$4`yKUxdE9{ucme<5E*#>x>+v>nNsdnAr*It>Q4_pEP4E#9;#b^*bp!>l z12z5(otOM_o`Ift0xJoSYDy08@plyPF!OeP)Y4tXAZG9ZzQdiw^-&f=WrFf;#T%Hz zJZj>7l(88Ha3fyBl$J8XKuh-sn{dhrn03~_IP2e>`A=v5%bEX0O}vKJ*L~_y572~K z*`Tv-q3+-9%zGQCzdm@%Sr~APqQ&|!>epGoR_x%|dh)Y$n&_hARpcdQ5($+IQgz9r zR<4M;-=d?>yLymbZ`*1~&at4SnMD0c^QZ@Vja0Uh9K_5Xb@}zxDoy`1Z9Z=O#wD9} z#j4t7mR-+lT24n|$w+*}I5r-&M-D|t<73iqC-xf5?4&L6(MZhBdfeg813}9ST3v?K z9Wu>U(=tu>iQ~bO_LX=dK0X#a5=q)2qusRr$L$Z9T{9W?P;GPh@$}N$x#e`GT=-y= Xo=unT%o$6w*Go@dl%L$qu6T`qda`}2 delta 1195 zcmaLWUr19?9Ki9POjB2z%}P)UN3*o-*0yMjkr3H~K50duPci1jHguL-L6{CwqVOeJ zmJcRU8kO}BJ`{uyk&jwENH5VJi0IEH!yf8I==;=Ksl$T~8m{_Wk$!BzEjWul{ESzyAW!5iUc+^mpxJKM}@iZ=X2AI%9rcf*L2K8;7M@=Y~H>widw)?SyaWhis zrDQ<%Wp_DzrGD*l@o?#wGSvS-Fl##6a%6JGF_D*PF;jcIt!BHKHYMH>Z8N32qm%K; zWVFNV@m6)mlc{tx88dsTys<7bnl@Yat`TzfbnD8HRU0gy!v;-Voe49RHX5>b3lAL# z8~&gX2zdj6NHARE=W;eR8pq6Y@l?DsX&hn4h&SjD5En3l#DyaM@MO6&mY*H=R3!eN ju+?|V>VN#>>b, 2017 +# Kyungil Choi , 2017,2019 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:08+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Korean (http://www.transifex.com/torchbox/wagtail/language/" "ko/)\n" @@ -19,6 +19,9 @@ msgstr "" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" +msgid "Wagtail ModelAdmin" +msgstr "웨그테일 모델 관리자" + msgid "Parent page" msgstr "상위 페이지" @@ -165,10 +168,6 @@ msgstr "이전" msgid "Next" msgstr "다음" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' 생성됨." - #, python-format msgid "The %s could not be created due to errors." msgstr "%s 생성이 오류로 인해 실패했습니다." @@ -187,10 +186,6 @@ msgstr "수정" msgid "Editing %s" msgstr "%s 수정" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' 수정됨." - #, python-format msgid "The %s could not be saved due to errors." msgstr "%s 저장이 오류로 인해 실패했습니다." @@ -207,10 +202,6 @@ msgstr "" "%s 항목을 삭제하는 것이 확실한가요? 사이트의 다른 것들이 연관되어 있다면 이" "에 대한 영향이 있을 수 있습니다." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' 삭제됨." - msgid "Inspecting" msgstr "분석" diff --git a/wagtail/contrib/modeladmin/locale/lt/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/lt/LC_MESSAGES/django.mo index f37455d4cf959198c43a683fde641ecbd5c056a9..282077248adda7034d7ded40e3201047a20a050d 100644 GIT binary patch delta 1042 zcma*lPe@cj9Ki9Pu3D|Gwp)g49mcgaw_19$TWkB;r$i+Pp^+d#L|F(Lx=Ff0D(t1O zs6euX4r!OV_J<9G4j#PJwNueSA|k455J8u|zwOnz;q83pz4x2n%>3T2?EDogu19K0 zLfgl02fuq&B1fy3ci7gnyI1(diY(y6|t`9Y?AGzc-T@Wvz#^*7D1=RQ($R&5^ny`c# z{}@B8FV7h0VOLQntYHja;V6E?T{y^g>v0yjWS&mr7jP4nP#1WJy1-NP@FniXpV*1* z1Z(_px-jd@5Ccs-id0diF;*=ygK6%Uc&R0Og9-eC%NU^ypYb{B{QHzmPyPt6;tIB* zrF{Bn2eB0=Q7d%|i>x7c8HDix>It5pK40~pzxMCn`}dzv7yN-5Urk4mB!c>_TTu^^ zK@KfB+>FOi^A4eY!gEd3Uw1OWgUZQKOFx6NxP*H#%52?WFKYZL)DoZdz39I$pe{I% z1Gs=%u@9(uf+S(j(uG>l-Y_p%L(cF(|8x`KMK_R&GO9GKrZ%mb9!$#D1M#}W#$exp zY|=VOn=$sF>o|KH>o~y^1Id#kSH`BsF6EO)ho?telXC38xGvYply3(^RmJ^>%;b3C z^6%O8_ivEt_Do7A`8jf4Ht}CM Xnk`8xlT4dO#vYS$O}hNG{$uTL7@l=z delta 1230 zcmaLVTSyd97{KvQylbv0C1nMp=Cw9v#*$@oD=@-(Q4C*tiE$lhw{^9>1mcY-jHstX zsTU!-5M3zn!3YE&+Lxkw3LgR!iHOJw2?~Pf|LH!6V8hJ$oip>D@67pT{!~uy9+@xA z8W#?mYbV#E43QRW&ZOaJ%@VnU$8jsZ!7BWSS1>PIWDc)m4u)wq;W>=sFz&!*+=8B5 zkut2pJdqLc(;=6%piXSXBJ4!wNDw_3Mvd!7jT=Tzxk^)jW2o_ySc-R1&q zCQ#$=qn7?j+UM!#Dbxk$uniYbD`u7)Sxt0`ENo6Lqn306SwkM9{){uIfBh@0!S85b zS?O3oroG*ytA|$E;?iR3hV7}&%<7!rKu>SC8#x_ydfXwSb|4guC!A=|9jY~gG1p1B z-TP$YkYr!?+K_b#$m?o?vHtuM2Yg=B_F7GbW%+I29+RV>z0KRL`yzbK=<@u1NcNyeN=pe|Z%nSp?1)YKT-H7f#^WgIq4!@n{<6tMNt zN|@Pfna1GYY8(&DdIBv1?WvoEi`kKlcNI^bO~w*V{C_)l5>Y1^4n^05t=oMlbt@4| G2mAvdRL4L7 diff --git a/wagtail/contrib/modeladmin/locale/lt/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/lt/LC_MESSAGES/django.po index 361f3ba8b89..a4bca83d606 100644 --- a/wagtail/contrib/modeladmin/locale/lt/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/lt/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:08+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Lithuanian (http://www.transifex.com/torchbox/wagtail/" "language/lt/)\n" @@ -17,8 +17,9 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lt\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" -"%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" msgid "Parent page" msgstr "Tėvinis puslapis" @@ -167,10 +168,6 @@ msgstr "Buvęs" msgid "Next" msgstr "Kitas" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' sukurtas." - #, python-format msgid "The %s could not be created due to errors." msgstr "%s negalėjo būti sukurtas dėl klaidų." @@ -189,10 +186,6 @@ msgstr "Redagavimas" msgid "Editing %s" msgstr "Redaguojamas %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' atnaujintas." - #, python-format msgid "The %s could not be saved due to errors." msgstr "%s negalėjo būti išsaugotas dėl klaidų." @@ -209,10 +202,6 @@ msgstr "" "Ar tikrai norite ištrinti šį %s? Jei kiti elementai jūsų tinklalapyje yra su " "juo susieti, tai gali paveikti ir juos." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' ištrintas." - msgid "Inspecting" msgstr "Tikrinama" diff --git a/wagtail/contrib/modeladmin/locale/lv/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/lv/LC_MESSAGES/django.mo index 56299fa5158872d05e0a70c3c21bdea4fddde605..476addd5d88e9c6a4834ba81cf7a7a53f5b192e7 100644 GIT binary patch delta 64 zcmdnWvXy1RGE+-kLjzqyGX+BnD+2><149D?t^j}CpwzO=;>`R!U6;g?R4WA|14Fnv Mb1MV0jklv10XZxYZvX%Q delta 64 zcmdnWvXy1RGE)m(10!8SGX+CKDcsq&_06A$9aR2}S diff --git a/wagtail/contrib/modeladmin/locale/lv/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/lv/LC_MESSAGES/django.po index 862149a15e7..41037a866f0 100644 --- a/wagtail/contrib/modeladmin/locale/lv/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/lv/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Latvian (http://www.transifex.com/torchbox/wagtail/language/" "lv/)\n" diff --git a/wagtail/contrib/modeladmin/locale/mn/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..762591143d49124a470121d635db16b98c4ab18a GIT binary patch literal 2942 zcmZvc+iw(A9LJA{w-qlS-a!v)r39wCC5o_6kz1vS#Re9Mm#EX-+1+R@Lezgz7JCVLvRUr2E<1U|`Wr~S zzd-t1f`fLKgAapkAnUOcr2p5zU7!PQ2d6>WU4SC31SLp&J3-oi6NHHHK$I<9w9AFo zh)1y{Hfz{|U0(=CtiYyk=0_V(VTUsaay=G7aFm%d`@@-FeOYVH6=SO}&Jh>;!NvNp zHjiL4H!jwOi~lPKIm`*I6i;Gvu{Mu~Pf?yiZtasTt$DlTTkc!F?U$@oo)lYhIoaZc zFr{PF!WY+)eX1(GYWz?$9bfuN=B$$CThcGu9^^L5uDn!!(Qxpa+;}sDaGCOj%FL+#cg9O4$kUl!YI*At%rkQ<* z36yLPUJGKUDqEt<@hXVC&W5Gm zvBxsqY!TgZ%rd%Ef6psd>`|`U7giGGWr-ctkV9$xEISc*A+myk!U~%1wTVp8LNGF` zs-+w>efGeE@0`q4(N`rc*HskU>r|?}$hg>iYUH@jEcm8flHCgPuq9Wv9r3E=t%;{Y z*k!h^$5s1LAfqd1yaLx~URuVAiQQI3xxUfu73`d`wOa6uj7rNy&&wGj>>q@U?Pz0K zu1&RXFxpc_`#RaaKAlRfPPL~}5Hxn9a5Q=Yx#!ZUb*ocYiI+^zH!`m2c$h-vre(M3 z`*NS<`B{aBO(+*8vi1VL%NBdp!M3a_KMyUZP(=zx#xl#$QBFaXY}1jgMc=QalgV1G z*5=cyowq`rWZgir7L_JhiftszPI6VEyQ_OgvkL8PsRSn&Q*LDXD#+5uTqG+c({?t> zY|(T*%kS8m=`_|i<>)SNxyBABt8(aYTCVT4{YI>5S#}aVrK)R|j85g2y|i>H;j7oN zcB70QJ6avNqC>W?+L#dk{UI=deu2Tz)4>Tn6`TkLg&xx1@s;y3@4Ce^^r)P@#H(Ns z`$W($gTuk0U_g)RkzkN7hd0aFi=oT_>`lmEP|xT|eHrHrm)p5zPkuRtp_G!8Sz^eENZg#J1>0xzTRLf3i>Q5=FDNKPZ9 z8RUW#=7$&@hqNAt&2NHZks~-86tfrU8Mfd`PtIO~{Yhpi^o7v!B=dtYRv>m3UCpl* z)!-avsCd3vn7ZP;S_%CLgPmtqk2fx&?}DRDdIa^E)+0U_gx>pwJ_D7} zu)ZV60cGuH22s_Ig#ProNVc9yST=SY3hX4+>LDMiUoxepMA(mJXkl3zqEWZ%-_|Q6 z^vCet4||9Y1BSF{^F}Qcb3=NH{inbM$d5%~MbXc{xIT{fM-zELXQHmm`9c{6>63To zQIDg@6oG`{Ost6&C`V_KgGzaP4K{yd!wDR#&sRKyr(g;d#NRXv9X(?V*If4wR zkpz;V5hyeU`CJ&>03yKbM7MGC5pgtjkY)n^li|NtH0$~-0vyxd>Pe|j;b962(?Wkv SJw1gi8}ldhI9}L`QSmQgOE5tI literal 0 HcmV?d00001 diff --git a/wagtail/contrib/modeladmin/locale/mn/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 00000000000..5e5fb93adab --- /dev/null +++ b/wagtail/contrib/modeladmin/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,154 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Myagmarjav Enkhbileg , 2019 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" +"Last-Translator: Matt Westcott \n" +"Language-Team: Mongolian (http://www.transifex.com/torchbox/wagtail/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Wagtail ModelAdmin" +msgstr "Модел Админ" + +msgid "Parent page" +msgstr "Эцэг хуудас" + +#, python-format +msgid "Add %s" +msgstr "%s нэмэх" + +#, python-format +msgid "Add a new %s" +msgstr "Шинэ %s нэмэх" + +msgid "Inspect" +msgstr "Шалгалт" + +#, python-format +msgid "Inspect this %s" +msgstr "%s-г шалгах" + +msgid "Edit" +msgstr "Засах" + +#, python-format +msgid "Edit this %s" +msgstr "%s-г засах" + +msgid "Delete" +msgstr "Устгах" + +#, python-format +msgid "Delete this %s" +msgstr "%s-г устгах" + +msgid "Unpublish" +msgstr "Нийтлэхгүй байх" + +#, python-format +msgid "Unpublish this %s" +msgstr "%s-г нийтлэхгүй болгох" + +msgid "Copy" +msgstr "Хуулах" + +#, python-format +msgid "Copy this %s" +msgstr "%s-г хуулах" + +msgid "image" +msgstr "зураг" + +msgid "Choose a parent page" +msgstr "Эцэг хуудас сонгох" + +msgid "Continue" +msgstr "Үргэлжлүүлэх" + +msgid "Saving…" +msgstr "Хадгалж байна" + +msgid "Save" +msgstr "Хадгалах" + +msgid "Go back to listing" +msgstr "Жагсаалт руу буцах" + +msgid "Yes, delete" +msgstr "Тийм, устга" + +msgid "Home" +msgstr "Нүүр хуудас" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s-р" + +#, python-format +msgid "Sorry, there are no %(name)s matching your search parameters." +msgstr "Уучлаарай, хайлтад тохирох %(name)s олдсонгүй." + +msgid "Search for" +msgstr "Хайлт хийх" + +#, python-format +msgid "Search %(name)s" +msgstr "%(name)s хайх" + +msgid "Filter" +msgstr "Шүүлтүүр" + +msgid "Previous" +msgstr "Өмнөх" + +msgid "Next" +msgstr "Дараагийнх" + +msgid "New" +msgstr "Шинэ" + +#, python-format +msgid "Create new %s" +msgstr "Шинэ %s үүсгэх" + +msgid "Editing" +msgstr "Засч байна" + +#, python-format +msgid "Editing %s" +msgstr "%s засч байна" + +#, python-format +msgid "The %s could not be saved due to errors." +msgstr "Алдаануудаас болж %s хадгалагдсангүй." + +#, python-format +msgid "Confirm deletion of %s" +msgstr "%s устгахыг зөвшөөрөх" + +#, python-format +msgid "" +"Are you sure you want to delete this %s? If other things in your site are " +"related to it, they may also be affected." +msgstr "" +"%s-г үнэхээр устгах уу? Үүнтэй холбоотой бусад зүйлст сөргөөр нөлөөлж " +"болзошгүй." + +msgid "Inspecting" +msgstr "Шалгаж байна" + +#, python-format +msgid "Inspecting %s" +msgstr "%s-г шалгаж байна" diff --git a/wagtail/contrib/modeladmin/locale/nb/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/nb/LC_MESSAGES/django.mo index cc1d75d2368d2c13c074a82b80cb7ff79c43cd37..e822c9c7168aa376672f2f6e31788e2be8b4c280 100644 GIT binary patch delta 1005 zcmX}qO=uHA6u|M9ZmTslvDPYBJ!~7r)O6{t+Nx0x(t0o;e)J##DQwLeSCbaqQ1qYy zZ4Z7^g4BZr4@MBhf}sa5et;nLAec+QL-8W&LGj#+{$HamJM){}yqP!qCW~EjoyCQ= z#=F90(>BuXheQT+Y|wGV8$~9t8`t79jNx0nhTpJ;=bJ>9VTx`g9>oBMaRXMd9e?6F zG?t4rixj1U0c%JMbz&SN*oVZ*07fx|8ka_m8%Az9OBcofHU2WT;UsGOJ>-@dx>Z<4 zji18^`QnNL zchK}dE~QB$8|tn6FrGARI__o*uAegxjb*&t{!HE}G`HE#|G1q=yT5WX{M86$D~0IohJUH7 Wyr#;zOSw{Rj~S4uAR~S* delta 1212 zcmaLWPe{{Y7{KwzO-oJZpE5`je!61*TW&u{Wf(+u&^l;EK@r5-UTmV<+Eyg~*})1T z>d*)}gs1e7-o)w>bkKu>b%^Q^RD>XOkT4>sOW((h2oL`F{oc>}j^};e_kCVAU-!E{ z{i!nlq43yz`}t<`M7prkNyF2fFLD!munJ$J8&~lT78Zznzz4Vk2WU$0DkgCpYj6Yi zplhedUUXxjNLm7P$R%B<6T7h#&mwaqgf1LFjT=Ud8%JKbOH+&))c8rP#3|JH7sx9w zY07XBHU1rzvc7zwqlaBbov?xR_zSOKHQV&y1n$BaeAI#v}L* zo3MeP20VirKT1=<`f{6&CVqreQJ$b~;AzektY!Qir@0;%+3zu)XOfn(i*nTA1)RW9 zTtY3Q=3UPD9tRnJMGJc=Yg+FlPDc~nLN+UpQA;_6tSPg|9C?Pi!3ET~Wu!>*HaGr= z8o!F{LDo_8{6W1E2j$U)pTkZJ;z67&@6DEafgf}uYshBh2WkRGMK)mx9$;LVvmNzH zE+RJ~&3yW_W*VLDeZK5q^UQww)qMINurtQlpC@xG&Y6Prd6R6h!e-EyBgWDHog&rh7+YZKQN@U_p?6t6k+!gEg7 reaDRx!4@mY8B%gNG8o?O46%4TL7Yi#cM5{^7>R#DTh6h$l&1I#Nsqpw diff --git a/wagtail/contrib/modeladmin/locale/nb/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/nb/LC_MESSAGES/django.po index ecc206bcae9..4108fef9364 100644 --- a/wagtail/contrib/modeladmin/locale/nb/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/nb/LC_MESSAGES/django.po @@ -3,13 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Stein Strindhaug , 2016-2017 +# Stein Strindhaug , 2016-2018 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Norwegian Bokmål (http://www.transifex.com/torchbox/wagtail/" "language/nb/)\n" @@ -19,6 +19,9 @@ msgstr "" "Language: nb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "Wagtail ModelAdmin" +msgstr "Wagtail-modelladmin" + msgid "Parent page" msgstr "Foreldreside" @@ -69,7 +72,7 @@ msgid "image" msgstr "bilde" msgid "Choose a parent page" -msgstr "Veld en foreldreside" +msgstr "Velg en foreldreside" #, python-format msgid "" @@ -167,10 +170,6 @@ msgstr "Forrige" msgid "Next" msgstr "Neste" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' opprettet." - #, python-format msgid "The %s could not be created due to errors." msgstr "%s kunne ikke opprettes grunnet feil." @@ -189,10 +188,6 @@ msgstr "Redigerer" msgid "Editing %s" msgstr "Redigerer %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' oppdatert." - #, python-format msgid "The %s could not be saved due to errors." msgstr "%s kunne ikke lagres grunnet feil." @@ -209,10 +204,6 @@ msgstr "" "Er du sikker på at du vil slette %s? Hvis andre ting på nettstedet er " "relatert kan de også bli påvirket." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' slettet." - msgid "Inspecting" msgstr "Inspiserer" diff --git a/wagtail/contrib/modeladmin/locale/nl_NL/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/nl_NL/LC_MESSAGES/django.mo index c30ad7459f1ca48682024cca69f131c7e8f174b2..32eb892d4e92c5108bd4fe7ba6c8753f696cf7ed 100644 GIT binary patch delta 1727 zcma*nU5Hd=9LMozb<%0_W!$v37u{3MzBx17nb}rsDXa`Ebyq3D?8Y8gb z*OFjCqE;^o8w~79sSqqk8Ve%Q3nS<%sEb}Mgdpf5*r2Prkox|PvlS-T!#wBnoO7Pn z|MQ$Vll!f2_ELB1xFL;_?<9ZTWy}_=E#^X+OBwSr9>F!Z;s#^-G1qZh#|ZD?`3XFN zpW(N-Wr;ETOz%=-mSI0OaRl!$X4aghu$l)K@fQ3J)A%bgruiM!@G>sP3@_DT53ayo zRJ~zTy%D6Uc?dK37^?o0*o{x4>eq28Dp^$8#MobxgC$*~3&QQ<%q(P#wQRTzl{=>iw74 zkK38{I&5MuzJUtuhp35uf>bpZQ4{{U^ZX}Nq~=le|3pQ2NtXC4M5}qLf!Crc450?{ zQK8#`EY9pgMPM&#g%Rq|&Y>dlE~>xxun*6n4%-i?`V-7*JyuZty}pY0>+rqB0}cEE z>hOGwdVU@?({E5K{1G?dFIdDpvypr7HhdLxcnbNMFSw}v_oxAXMs_OcOA}nF{a4az zHFG6}ei2z6sxyUJ2T^B2NfG&X;xkIp+Ky~*vJC~)!PLT-ZxW#qypOEK>1#{I*Gx4# z9hQ5^3e`f&cM4i1QB1yoyRe^pE7>EL$iw7?q!lYE)P7RB^53B1C|O%}JDDx-Hf0J5 zxzf$Lv`(gqt!GlH)}hpkvjcsDLD-CKIO&F(1KwohZ0st-rf;y`sJPnR(AIh3T~&=Y z?tfG}u)lK6-XXpUWiAKSzG{S+{yV7y%a5|r^2BD3EM%X%&p3m*J z)z}6#Z(NglxKa;7v&S`Ql}yA0bz60<<(aKh_ZLfkv9!S}Z5;FcykGMD%+4LfC)`ZX zq_5(m%xBCi`=y0?<$S9Gw&DQsO4@`2) z-847t3z?_7u8yCzVb#^GosO>;!WkDG45sMoy20KTOjX@M2K{fJ)9s#R8&Yc~oGW-? t;9~FZUR~H4&lWN}En##~5LVkSWQ$#eYs7J@E&S8W*k|`SSF6y#`~^#a4hsMP delta 1526 zcmaLWU2Ka{9LMo9YPPX4@9!RLhPBg{*wPS$i;ZEJge!ThM|HZ6w#dA!f(Vg_XoN_J z3rhqSti($~mWT@yBodLhz{Rde7TJwUzQ49aTizSPQZ$h z#!SL_SYk}tglI69S%Z495zBEK@{Vc43T#L9>q7PGMtMU#B6FE1$j`jsQi<;i&--yK_XDW@ zzffCNO!x$ACZHysiTZybY92o-W1CPJY8^xVwO2cNphyy^LwE+2i5}E|cd!~Cpbph1 zR7y9p3LUC0)I{fzT{D*o&#$2t){6?L4_D%A^kJFuuSNsmO~u_B`<3abb9-sdQ1MyYzc{hfR8&u#MT2 zHPH??V$G3`PVRTc-41)qsW}pjCsS^`%^s_9+7i}H*>K$uT@LIE|J&ui0rK-OKue;t z-L|ECO_|GOtM)Yb{6Sw}nG*l zB;T*uO{RRU2{)dMxv9=X$l2h!iIj~y>toS)#96*q)OF+^W>=5eUX-0&Uhm0-D{He? zE4@YOb*|SrXcLE`?O~fR?(SXI#=^WaM2xN*k64D>n;I$;5zCl|qmjSq`Y#vxNsF14 G9=`$aoaE~O diff --git a/wagtail/contrib/modeladmin/locale/nl_NL/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/nl_NL/LC_MESSAGES/django.po index af0ca90e4a6..a40436ef458 100644 --- a/wagtail/contrib/modeladmin/locale/nl_NL/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/nl_NL/LC_MESSAGES/django.po @@ -3,15 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Maarten Kling , 2017 +# Coen van der Kamp , 2019 +# Maarten Kling , 2017-2018 # Thijs Kramer , 2016-2017 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-02-17 17:43+0000\n" -"Last-Translator: Maarten Kling \n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 21:52+0000\n" +"Last-Translator: Coen van der Kamp \n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/torchbox/" "wagtail/language/nl_NL/)\n" "MIME-Version: 1.0\n" @@ -20,6 +21,9 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "Wagtail ModelAdmin" +msgstr "Wagtail ModelAdmin" + msgid "Parent page" msgstr "Bovenliggende pagina" @@ -110,6 +114,9 @@ msgstr "Ga terug naar de lijstweergave" msgid "Yes, delete" msgstr "Ja, verwijder" +msgid "No, don't delete" +msgstr "Nee, niet verwijderen" + msgid "Home" msgstr "Home" @@ -153,6 +160,9 @@ msgstr "" "\n" "Waarom niet een toevoegen?" +msgid "Pagination" +msgstr "Paginering" + #, python-format msgid "Page %(current_page)s of %(num_pages)s." msgstr "Pagina %(current_page)s van %(num_pages)s." @@ -167,9 +177,9 @@ msgstr "Vorige" msgid "Next" msgstr "Volgende" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' aangemaakt." +#, python-format +msgid "%(model_name)s '%(instance)s' created." +msgstr "%(model_name)s '%(instance)s' aangemaakt." #, python-format msgid "The %s could not be created due to errors." @@ -189,9 +199,9 @@ msgstr "Wijzigen" msgid "Editing %s" msgstr "Wijzigen %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' gewijzigd." +#, python-format +msgid "%(model_name)s '%(instance)s' updated." +msgstr "%(model_name)s '%(instance)s' bijgewerkt." #, python-format msgid "The %s could not be saved due to errors." @@ -209,9 +219,9 @@ msgstr "" "Weet u zeker dat u dit %s wilt verwijderen? Als andere dingen hieraan zijn " "gerelateerd dan zullen deze mogelijk worden beïnvloed." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' verwijderd." +#, python-format +msgid "%(model_name)s '%(instance)s' deleted." +msgstr "%(model_name)s '%(instance)s' verwijderd." msgid "Inspecting" msgstr "Bezig met inspecteren" diff --git a/wagtail/contrib/modeladmin/locale/pl/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/pl/LC_MESSAGES/django.mo index f9a4b0eb3bcc18ab93fa3b7eba2daae7992ed810..8e19107ca2b0de99cecdfe76572b0af54aabae02 100644 GIT binary patch delta 1710 zcma*nUx-vy9KiA4u2YVqyE~3%TWNdE-JR9l*}b#t#tz9=&Zk)wDFpTgEBM7puF;hPOBxQYJL zcnrVB8#wl)2p{QKF0u-{F~A{wPGnln(pXE!_qYy!#w7lM>?wbtPP~sTnBqrWupL{m z19ebN0fsBFU&Zbu!z2Qzp8b$l6@v%gemw9!#VoiK~K(Mi-K%%M&=i!a~>d>5}_ z8b?-$WN`=T{10#?P9Z~N26g@kgdgJ|UP3ckGJK8PB*7Cq^|i{26~8y1OEt-<$E^}*Bw=^-@$4SFk8-#C3n z;{7#pP0wbkrcK}TrJ@gtmK>EV$8W$!?4~|VwWxV&KXs{SYPD>k+Hq^~zd@Tz|1;0h z<`!n+^y&Mmh3tq#XA-&SU?LIK6Njg>T|LGNLdPq(n}e)XsJKq(7W<{Er|cKq(mS40 z<_GJcVf^C$k73pKi;rBb;8#mU%kx8P{(j<#_&tIyq(LxXyr#nZM)ab+ji=$ zUAf)vhbCaH+-t-$Y7N@?c--KymA6OjthnLO`kEik zP&KUimAda8eq4^KLDe%?PlxW~2G*U)uD%i}_UVL$qq6Hz#i`3b DlG+IB delta 1546 zcmaLWPiPcp7{~E9x>}Q%#H4D|wCdP2CMKEf?v{oS(qf6A0Y$43|6F9;3}!d(jNP3y zU9HK%Pza$^I#er)2r7uS2Z^9q1rc)*QoV?`HV5&bppt@~M8CgH0+K^s=6ydiyU)CT zp7)*WYewn@|E-GrZYT-rr_?`-jOoDk`81S`5o3n16PMvXSc{Kw7#A%t<`Mpe3o%Wz z7{A9H4&Wy^iA%Bk17ntBEiN)<(6n(wU#0`~;zlgP9mqQ-iRG9^#pO|P1IT4YXi6|d z#h<|{ynu?oj$GyzO$Cmj;vZrenYUr}+VQE}%`E59=Rd=nLa54p^P>E{X5#GX`;fBo@-Mj3dE+UwFKQ>m>% z1+Ky`umMxJ3zf<{Sc%V26L~XjgdYq2p!%;t{ojZiFpghhUisI_|BD}VXeRJu{2#TF zGJezws_}DNi8>1%xC(ob52lcQC`|Gr-B9#iGc~FQioTu?sWClJc-6$U|20%?LxS2! zohi)0*i?OPIuF_!&SW7|P?$)aZYXQ0TA>c)YN|!$s1!bFC}dG;aVpA=%6CeSR-)CB zy~4igu&J!2>YG)nRdm>9ioO^fB4tTM`>!)(!ik6-o{dDp8ZZ;Xv`T z!QF1I+3I!=xPfa@8E3z14rhFx_j*poJz~`#PI1Xx zSshG`LkC;4e%eh2c4v5^WZhS-b}V7XTda7zEz#N(qm*pjVsCSQNaa$#XRoKnHY*W} z6BoA=#I>}=TEoSq)wNC#SUcTZko37}&+ype_OA>4Y_eyc|6?@iXTBM2DQ%t?9<5p$ zzAD>XoOaVzF39@c=%(`HMHQZ7b@elqnIB(P+%5|Lu8fYpu3S+x(B)@^ag#-0gpxHXX0jMh|#>%-IIYIHSYi\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-25 10:04+0000\n" +"Last-Translator: Miłosz Miśkiewicz\n" "Language-Team: Polish (http://www.transifex.com/torchbox/wagtail/language/" "pl/)\n" "MIME-Version: 1.0\n" @@ -22,6 +23,9 @@ msgstr "" "%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" "%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" +msgid "Wagtail ModelAdmin" +msgstr "Wagtail ModelAdmin" + msgid "Parent page" msgstr "Strona nadrzędna" @@ -79,7 +83,7 @@ msgid "" "%(plural)s can be added to more than one place within your site. Which of " "the following would you like to be the parent of your new page?" msgstr "" -"%(plural)s może zostać dodany w więcej niż jednym miejscu na Twojej stronie. " +"%(plural)s może zostać dodany w więcej niż jednym miejscu na Twoim serwisie. " "Które z poniższych chciałbyś ustawić jako nadrzędne dla Twojej nowej strony?" msgid "Continue" @@ -111,6 +115,9 @@ msgstr "Wróć do listy" msgid "Yes, delete" msgstr "Tak, usuń" +msgid "No, don't delete" +msgstr "Nie usuwaj" + msgid "Home" msgstr "Start" @@ -156,6 +163,9 @@ msgstr "" "\"%(url)s\">dodać jednego?\n" " " +msgid "Pagination" +msgstr "Stronicowanie" + #, python-format msgid "Page %(current_page)s of %(num_pages)s." msgstr "Strona %(current_page)s z %(num_pages)s." @@ -170,9 +180,9 @@ msgstr "Wstecz" msgid "Next" msgstr "Naprzód" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' utworzona." +#, python-format +msgid "%(model_name)s '%(instance)s' created." +msgstr "%(model_name)s '%(instance)s' utworzony." #, python-format msgid "The %s could not be created due to errors." @@ -192,9 +202,9 @@ msgstr "Edytowanie" msgid "Editing %s" msgstr "Edytowanie %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' uaktualniony." +#, python-format +msgid "%(model_name)s '%(instance)s' updated." +msgstr "%(model_name)s '%(instance)s' zaktualizowane." #, python-format msgid "The %s could not be saved due to errors." @@ -210,11 +220,11 @@ msgid "" "related to it, they may also be affected." msgstr "" "Czy na pewno chcesz usunąć %s? Może mieć to wpływ na pozostałe, zależne " -"elementy na Twojej stronie." +"elementy w Twoim serwisie." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' usunięto." +#, python-format +msgid "%(model_name)s '%(instance)s' deleted." +msgstr "%(model_name)s '%(instance)s' usunięte." msgid "Inspecting" msgstr "Sprawdzanie" diff --git a/wagtail/contrib/modeladmin/locale/pt_BR/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/pt_BR/LC_MESSAGES/django.mo index fd15871e2ac1bf763492b3c2b6c66ae203324933..86f12bc97a551b047ae6df66fd72804194f09b96 100644 GIT binary patch delta 1624 zcma*nUx-v?7{~EThTCdlgDnZtBy<{X(h zW9!~bMlA>t;h>UuvEqeN?o9*HMHI17UK9~XLKg|rg%RFlH${ox-|Q@i1okq|`Mh)H zdEfJ%=Y5&;>n;p5ep#M8YG|8?2Z+xT#_YnE7IC3XCXIOq58?{Ej)T~H=e&<~oWOqW zAI8Htix+Y8UB>V+-Cf2k!IfCUe!Sn9hB;2Bmm4iyiRUqemyltwrVaBPqtiG;TrVKY`2fX;l6`?Be-mf=)L#UPld>LOtkRR1un}0mrcqPvUF% zC1xF<4E_&VvnCAIrhR!zp7&qW=n8jXZqieQd5AH%u z{323akWLL@2hxyRqzZB;1{TQe#P~;l(!nh&G;U^jEycP_?-?p<{I_XR%m%| z!3t!L%rU$VKk0n`4z;i=sM7v{+KRtW3r$fLZNX~fmgz&~jiU0#P?dQyL;dwedpZgG zP!kkU0}r5npGF$6r<)Vdri<axu`OK;xm}w1gVtIc6<{x;VHZaXFK1&Le2L*QsDL?wIzBfwY7wv ztMg}85qA(O@jBu`LI*EPsOj+B+_WWXYvyS$P-Wdn=pgFBTD;DP+9QOvRcAwuHMI|_ zUZn9b7nOFQ4R<;&QoZ(xS4jtndkKfg5hKJxQz_L{Vz1qs|1VH?;eTZ{eN}3d(AiL< zV!U^ACh0a`O(vUD$%Bodfou@gVjC9x^|c|VQ1xx>7e~xMwh|Tn@++aO@Pl(p8o&7e zBdxx__@A>CqI$XLgi-9Y{!LCV%IuCdI>jg)ik7rZaS(;4KT0K<%hFFZ z#@w9e<{ou&Tk@Va?BzT!{rq$83;uziMw+{mN9CPSFSn34>g6}(hCNz(+}2`uZ`Fpi zvW=r^-Wjh4Q_haaR{c1RoUP@FPIr5$VuSKXA*wvips-Z8CEwla+e+SPT}+=y1h*8T zPz`J`x?Q>a$wIk4H+%a;8`o_)n9`IjyJRfcvwQ9|wF$X8cE2sv{pN=mH*Hm$xij2t JeVtj8xB(Hs?!Ev3 delta 1470 zcmaLWNoZ3+9LMpAP3>l*b+^?TZEad>G>PC6DhMuAYjH;qM4rjRrZ$Nt&!yT$QAANx zdA)QQxq9%B|^LmmyK(QC{hT!v$?AFJ>q9>v0ZV_x8C9Ez*y;_qV-_MtxT81;d-xBx%l zbgU()7T2QUJ7~)IzBx=s1D{2*XfC2Aa5?8AoW%WCyvFwU82tqI_jpOEY$6>sxCM{n zQ7j;CENP@`DoLMGUyu87A!S~gScXzL33+6yu?%M;Nij>1%QVv{ zZWAgljx5$>Q48wG{eA@X{z>FA7ijeR&Ee!`n%~o zC?iV0CaR)CsmZ9+P&H8ehO(jc%Y0_a+QD$^- zYIQ@=Vf$V5k5L9Vi-SemFkU_Pi8tt;@_OCN-u9le`KR*S`9;&+RMC&vzGOOXw{1>Y zNxRb@*q2CU9V->HI|Ke$#, 2016 +# Luiz Boaretto , 2016,2019 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" -"Last-Translator: Matt Westcott \n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 20:41+0000\n" +"Last-Translator: Luiz Boaretto \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/torchbox/" "wagtail/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -109,6 +109,9 @@ msgstr "Voltar a listagem" msgid "Yes, delete" msgstr "Sim, exclua" +msgid "No, don't delete" +msgstr "Não, não apague" + msgid "Home" msgstr "Página inicial" @@ -155,6 +158,9 @@ msgstr "" "\">adicionar uma?\n" " " +msgid "Pagination" +msgstr "Paginação" + #, python-format msgid "Page %(current_page)s of %(num_pages)s." msgstr "Página %(current_page)s de %(num_pages)s." @@ -169,9 +175,9 @@ msgstr "Anterior" msgid "Next" msgstr "Próximo" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' criado." +#, python-format +msgid "%(model_name)s '%(instance)s' created." +msgstr "%(model_name)s '%(instance)s' criado." #, python-format msgid "The %s could not be created due to errors." @@ -191,9 +197,9 @@ msgstr "Editando" msgid "Editing %s" msgstr "Editando %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' atualizado." +#, python-format +msgid "%(model_name)s '%(instance)s' updated." +msgstr "%(model_name)s '%(instance)s' atualizado." #, python-format msgid "The %s could not be saved due to errors." @@ -211,9 +217,9 @@ msgstr "" "Tem certeza de que quer apagar este %s? Se outras coisas em seu site estão " "relacionadas a ele, eles também podem ser afetados." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' removido." +#, python-format +msgid "%(model_name)s '%(instance)s' deleted." +msgstr "%(model_name)s '%(instance)s' excluído." msgid "Inspecting" msgstr "Inspecionando" diff --git a/wagtail/contrib/modeladmin/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/pt_PT/LC_MESSAGES/django.mo index cf515ee88d04f938689d562d3c263d4beb8eddff..3e605099b7a06c63f5751819ab7e971ce1d682d9 100644 GIT binary patch delta 886 zcmX}qPe@cz6vy$S7(}&|2>$6*dirVRE(%i$$&x_q_$`lvoKM? zK$vDHwhD6PfUaD)7zkHw%P3s5vcN?MqPXe%i=oSX_w)XockaFCy@i`AP3gm`lC070 zaNOW{S7g?Y;Sd8YR$}%BYwAG`I5>%lpTR1eN5wBA-QF@>#VjiR16DA< zZW6WD6Dlsqp+WR&)Ig zmH!wk@gl-HRl+b?l`x7beI35U1gdm7)DFL+;*L-g{6Q_?9QDmh$*KurIF2poVhY=F z6BYjjwV~&Om3c>wB)>)#&#Gp4aC2 lp684VyQ9fh)3ehrX54#E=aNC=UC;j?*By9W+pA8r{4dHWRyF_t delta 1137 zcmaLVO-K}B7{Ku-*3`A!ZS9M-f=#oPYGP(0lSS#U9;{1I8F-RmcdA|7k9JqV{8+*Y zETU-X>riyaOGy+SiXiObDJndOm#_{+R1o5&y7hlz47AWdG; z`EeRGeimz)Up_I=&HhAvVG$ef7oNd-mKnxTT!W91CeP_K{xy1W8g+vAs1tm|cKnXJ zu$iD{JdPSaL>FLwxx_#d-$AM<4^bEJsO($Z#`OX|<@5N+-p%zCFKH=*l%okvypAXF z8-7Ka%uvn%&ZEw^fIBfuS&Kmiw;8C9_ohWL2clo*FXFcn=k>Z9)97H8R?-@S)BEp`p?^wU7n`O*kCFXcYAx%PRbn)g$EPqe8EY_+~II2mUEqg z8{aD{hxBFROGB0=Ag`+lN(0`*`&$juHmsJAWku}P-6luP(Idt&w?C0jWYR_lc_Ja( vw1~3|o4A&Ud0_IlH&AtI<@sZ|gcHyFZ-q{w&*@E^TN1Twkxte*{qN~tocpZG diff --git a/wagtail/contrib/modeladmin/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/pt_PT/LC_MESSAGES/django.po index 4effc316f00..bbcca031e58 100644 --- a/wagtail/contrib/modeladmin/locale/pt_PT/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/pt_PT/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/torchbox/" "wagtail/language/pt_PT/)\n" @@ -170,10 +170,6 @@ msgstr "Anterior" msgid "Next" msgstr "Seguinte" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' criado." - #, python-format msgid "The %s could not be created due to errors." msgstr "Não foi possível criar o %s devido a erros." @@ -192,10 +188,6 @@ msgstr "A editar" msgid "Editing %s" msgstr "A editar %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' atualizado." - #, python-format msgid "The %s could not be saved due to errors." msgstr "O %s não pôde ser guardado devido a erros." @@ -212,10 +204,6 @@ msgstr "" "Tem a certeza que quer apagar este %s? Se outras coisas no seu site " "estiverem relacionados com ele, também podem ser afetadas." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' apagado." - msgid "Inspecting" msgstr "A inspecionar" diff --git a/wagtail/contrib/modeladmin/locale/ro/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/ro/LC_MESSAGES/django.mo index 402416dc0fd2f613b7732668b12210d31e12221a..5f18a71cbc73d94cc835cec3fe311278ff3b9450 100644 GIT binary patch delta 1001 zcmZwFO=uHA6u|LUwjVK?wkc|DD|Kxujkd9~kyabYL7Iz!ViiOS5?IU{7uy7yQ1qa= zSWxsJ1gRe_2vP)vDilGy=)s5xdMHRedGR8Mf`?wjga6kCPcF0bo6Wv?Z+0e+d#gR= zFKzX=h0Ad7P&<)c89{lLfjK zTttn3jv?yHYXXEFWe%K$RNq}wAJnb#)zb4wv4|)XqQ5O(LJ%YnHgBjE<{DiHjohAs^?80`Q z_aGsXL|yn8rtl={{Cn7sRn$M@uhzkhiH$5*zqlK9r4DL>Bys}llR!-6s1@nZkzP7O zuTF0Lk4t6N%GC`n|FE7k^qz8aCD)&{#|l|*@aTD$OpPWF1e7tvm_s%=_-t*4YOx@Ih)YppK z$HEoj*~2rFBhrG$Jv3Zxxgxi)9e3botjF(o7Yp)4zTgCI!(N&a?8hXIVGXWfC6?uj z?8JI35J^dd4r@sZ>cloI#q-DFCG)M4hmPb@&UfU^Qtr;5ZiJG;+%vjmCe#Ld>9Uu!y?BH#~tWcn}*2 zYQ(ds@i%C^>@Thy zGHN2Flus*Cg%`02Yw;eY_R*Q5qi6C7*+Z656Inr$msQjSej`PZ5icl^{mHED=;ilws7KU|`oXbs>d%@o%n!QI9n^&;P>yTtqGD>Fpxi z(oduFZ)SafyBI$~Lgfu=V(+mP=TYYudpjrxoiOR?U*~1iiPumwe26;n8EV`l25}Mn zsAb_q{=U=Uk+k1azgr{p(wbR3)jaw?5K0?QPmatkc&77G7fkYyugmlq*N79ddyI_4 z5{xg!?U)($HH$bab!lv)Y#+p7S=EMvBh5i9&K*NXt diff --git a/wagtail/contrib/modeladmin/locale/ro/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/ro/LC_MESSAGES/django.po index 48c287a351a..f839027a433 100644 --- a/wagtail/contrib/modeladmin/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/ro/LC_MESSAGES/django.po @@ -4,14 +4,14 @@ # # Translators: # Dan Braghis, 2016 -# Dan Braghis, 2016 +# Dan Braghis, 2016,2019 # Matt Westcott , 2016 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Romanian (http://www.transifex.com/torchbox/wagtail/language/" "ro/)\n" @@ -22,6 +22,9 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" "2:1));\n" +msgid "Wagtail ModelAdmin" +msgstr "Wagtail ModelAdmin" + msgid "Parent page" msgstr "Pagină părinte" @@ -171,10 +174,6 @@ msgstr "Precedent" msgid "Next" msgstr "Următor" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' a fost creat(ă)." - #, python-format msgid "The %s could not be created due to errors." msgstr "%s nu a fost creat(ă) din cauza erorilor." @@ -193,10 +192,6 @@ msgstr "Editare" msgid "Editing %s" msgstr "Editare %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' a fost actualizat(ă)." - #, python-format msgid "The %s could not be saved due to errors." msgstr "%s nu a fost salvat(ă) din cauza erorilor." @@ -213,10 +208,6 @@ msgstr "" "Sigur doriți să ștergeți %s? Alte părți ale sait-ului legate de aceasta pot " "fi afectate." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' a fost eliminat(ă)." - msgid "Inspecting" msgstr "Examinare" diff --git a/wagtail/contrib/modeladmin/locale/ru/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/ru/LC_MESSAGES/django.mo index ca20f9f41651665648ec671ea11f1cfe8a14766a..bbb5528dfd7499e8eb54fba12ccfc636058c27d2 100644 GIT binary patch delta 887 zcmX}qJxmlq7{>7zj}O@cgu}xFF%roMN;b|yICTw1zy`xtBw(S1Xh0h1gSAU}It7|Iv$++4=3vy|eG!%zW|Rw`I3u#W|y# z;A!M}Tx8aZ6%iUrqS)*n)?*x>Vl%GcB7Vh9yjEgXiXlw}c4Gzy@gQ#Ce%!`7{E2(b zvgVbU@eQj*O-x`VCXpEHz$y$;aeb(`L8RJc8V|3d;?o$z8C3iNQtctlKFp!wUtlHq z?F}#bvu{xoHt-03z)9S}793%@QM`*(o2OCy5|(2QmEajF!E5Zobv%y0uoasLR(wBA z4f$=17kzjV*+rYiqkGKm;0pcc{CEJ*@V8Sqf-M}=eO$s-wyT!$Ub4$exPvz^z_Ds} z4;N4id51cRADGokq~>3O1nLer)Rqq*)vgr!=|X=N754}a<4e?$d_wKq7Ha-)B!@*g z4=t<_)pvz{cTDHcz$gP$yGnBmGx!~!U?Y2eW%w)|WqS-M>1^>v>11Lp^+ srr=cQT$>A=^M;4~ixan}GE+Cx{`v9giLj~N1^?qthAx$V;C+t%0feeoh5!Hn delta 1155 zcmaLVQAkr!7{Ku_x75wFw$jL~Mq;zZjok}dGAcx)te2vY2!fLBLQ2kTR*0#XVMH&| zh?1aQ>ZJ@c3xhCvPMeROoN|sGsUI>K|%GeZL=BTkiYWf30jN`(PY(JcGK0pOGft2-`7_ALr4;2>Pg2pC3Ri zyp^E&eW-;GpdQ*`)I#3iHGGGA@nmteNDZC4WL4lC>Nj$8M9C2Y^|aOy^bDN95cZ({ zqbDV4uglsHrmL5(ZE}}#>!G(s>RlDN@s8$}gnjl@vZ2}T3&R=JFmnY#g;OHl`X|lEyyf zi3O~%NuFs~\n" "Language-Team: Russian (http://www.transifex.com/torchbox/wagtail/language/" "ru/)\n" @@ -171,10 +171,6 @@ msgstr "Предыдущая" msgid "Next" msgstr "Следующая" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' создан." - #, python-format msgid "The %s could not be created due to errors." msgstr "Невозможно создать %s из-за ошибок." @@ -193,10 +189,6 @@ msgstr "Редактирование" msgid "Editing %s" msgstr "Редактирование %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' обновлен." - #, python-format msgid "The %s could not be saved due to errors." msgstr "Невозможно сохранить %s из-за ошибок." @@ -213,10 +205,6 @@ msgstr "" "Вы уверены, что хотите удалить %s? Если другие объекты на вашем сайте " "связаны с удаляемым объектом, они тоже могут быть затронуты." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' удален." - msgid "Inspecting" msgstr "Просмотр" diff --git a/wagtail/contrib/modeladmin/locale/sk_SK/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/sk_SK/LC_MESSAGES/django.mo index bca57483fc3f4acdabd7ee62136a8c11a87abdd5..214c82b68afc2472d1755b24d73ac54c7e69e628 100644 GIT binary patch delta 1195 zcmZA0Pe>GD7{~F)n$_HGQ`a(GD_=LA)@)^G6|3F0jSf+SQFPDk5LlRmQBVpl;Iu?Nt-hvJybn8+OL=<$1z=fbg34MRlCe*{c?`PiKciunGymPl_J~j0r;msN` zK-or_sWU6$uXR+!%6hX~Sj8=P)ic|PGk6D|<6F!}%<3^gwGlh;GWytwbGR8_U>m;1 z4Q5mJi5teSuc!xCFpjIpWw8dcO_)IS>qhnSk;?|DqF6xnKY|GyLG>>qmz|?(!i%W> zH!;rqHq8y2vqz{0<}iixIEJrq7xuH<7@kHh8>LeJF$@RBa9~shr*StfVH&I0h)Jpz z?7}y(9k_(O_z~}8J=J)ZwinYp@0$4##OB|76@U6zxEv9jTK->DNNqDcZ3@ABNJXP@4Bp^yO%wO0y=^ zWdFwiKWNe&6rZ9qmDKxJIEq%TRqHUa;qculeM*%+IfZtuU?bK=(LvQAROr?8QIu+q zQ25z_ZKde^^r-PSqArZeW6!Ug^t^=&o*$`vZ#>q#KNDm#!LSSV<+IuTY)~1Aw#V0g z+?&r1FHA<0b>*RgyEJ}f^6YpqJ>hy?;EF|;b-wQ=bQic1tvro?|2kN7xj&r_6x|S= cg0)WFdcNdxc{kWsh+5@=mkC$)E%q$(8&LXf$p8QV delta 1408 zcmaLWOGs2v9LMovYC4+v>S6Y}nyKS+X0#l&Dd<7aB8Y;(0=w!!(###x(NHl-Ymp0! zL|O<%5L62#7-~}l5oNS;5d{SOx7_cx6og8jMYe(t$*<~;uA+}p)tCByT1 zDU*iqQnpa;CK+=8tCG19{uE;_V}73c1WZZfgG!;~itXV+`+-aTb-zkH})oH`GdhCF*HZG(ZlL zEK`IU*p1qXder}$Q42hZ%)y*MorSh+@~;6e@IsCz8eT&UIEj^b3;Xd6DwPKrRTB)O zCUA+H+TTE>b}CVy#$(hUqxwnbM{P+xY9g(<O|n)MLYeST3Mu*`ycD;XLQ+gX`>w;FP-?X=I_(Objm6Lxq6}z% z6-r-0>}&F=)b_z}q$3z=b?k6($SND`bb6w;(;gfuv)a3Zb~M;gV^(g`+tsnO$+8aU zH>eIK4!e%z_^Um>YVU5#>uvJ+D?OfxJFbGP_)A}dKusl*-Kh3Thc(-9{Bh3U&x@nJ^%m! diff --git a/wagtail/contrib/modeladmin/locale/sk_SK/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/sk_SK/LC_MESSAGES/django.po index cc96c677112..062998b2143 100644 --- a/wagtail/contrib/modeladmin/locale/sk_SK/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/sk_SK/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-02-27 17:05+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/torchbox/wagtail/" "language/sk_SK/)\n" @@ -19,7 +19,8 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sk_SK\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" msgid "Parent page" msgstr "Rodičovská strana" @@ -167,10 +168,6 @@ msgstr "Predchádzajúce" msgid "Next" msgstr "Ďalšie" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' vytvorené." - #, python-format msgid "The %s could not be created due to errors." msgstr "%s nemôže byť vytvorené kvôli chybám." @@ -189,10 +186,6 @@ msgstr "Úprava" msgid "Editing %s" msgstr "Úprava %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' aktualizované." - #, python-format msgid "The %s could not be saved due to errors." msgstr "%s nemôže byť uložené kvôli chybám." @@ -209,10 +202,6 @@ msgstr "" "Ste si istý, že chcete zmazať %s? Môže to ovplyvniť niektoré závislosti v " "rámci sídla." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' zmazané." - msgid "Inspecting" msgstr "Kontrola %s" diff --git a/wagtail/contrib/modeladmin/locale/sv/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/sv/LC_MESSAGES/django.mo index 8b57631df430b6b871ba0a26628e08aaa6d3c3f9..8b9aba2f2c85b3a8d79c6b0558920dec09047cf6 100644 GIT binary patch delta 998 zcmZwFPe>F|9Ki9P&T6)`x!NB{BgQ6dOBZJftrjZEF1rw=mk>f4+i4qGU2>)fg7%UJ zX%E37c1Y+V9fJNKbt$YvUJ8P|cq@W3FU4NE1VP_lJ9KK8d7n2kzc;`4es5k_KfB5w z+ha4rVRP-^y4N5wsC|QmBNY?5g?n);K0*uM;54q`3QjhOG-HltBMxDJqu7bdxCMXU zHZ<0Ww1||YgAU&i3w2-$6WEW$${=pS9BSMMYTPJt%4M232B`5ju^p#S* zgj(6ps1^B&x_}z$LSwDepGirQx;5fX)DLu_i75;*i@F7is0mk56V^~G^*efQFnj%8 z0ySYL9>s3#Mi2Gpt)NceNwTm0SH9$dmgYnB;tT5D){q^L9xgrXYSyr}*ZcJm+V9}f z^-6WhC^Ymfd^a98?LO-kLf0>vr%HLRcsxJuPsoTD^qSmxp(p;hTkxuhc&`6&+OgBl zfax5{*mjTY*mnHP>GZI7%@6$2MEax~dKq)S?fi>7n6U>ID)Hyd|I3kcd(F@_$4Zl- JobZcz`2&Uob(8=A delta 1206 zcmajdPe>F|9Ki9Pt(tE6w?C8?jV`67qq_@jvRH(6&<-g||4uRO4z}j*+U{&1ri&DT z6clbzQFN*f*&z@tj35e+77^90B0NPz2+>LC`*Rlx4>rua&%ELH-tWENn_o50Jn2uB z`PYTZ&$ET+QJzRUwz_DzI`Ty>U?*_?3oLX8_mZn;F`#tdrwU980WsPRvcTb|RD z;Vf$Wdn_TpeBnhm`vY~r0@mVhJcU&(vkuSW8k|IKc|xP{FR&PAQ4_pDP4F4_;y2ud z^#s*pFKYZbnhNsEMP78`n@APq9_j)f=A6T=^ncr55!_no;KupjNsEwL(YAsK4&O;)7Nog}UM~T!mLqCzwD3Z=r)Ts7KPw>NMd| z)Pxpl1!KAI4(fcPs0lCQKD>cD@I!f5_HSO~gD#+kZRlTWqW0TR&-f75U@vaR6mG-Y z$cab;k6z80oi5L2Z??1a8~S*!;?e#4Gq$TQPp0NvlLhJHcCyh3+XJ>^OC)Ob*)klB z(?1cjqV|YUHynv29V-^HN9v4F!nPbc+_XYSYB2n7$g&Btd6=L(5%0G{j@g-cP`rP4 zi|O^7zJTHL1^q1zUM_ccm)T>VjU*%Sn0bI1gNEPhBhF{~i3, 2017 +# Philip Andersen , 2018 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Swedish (http://www.transifex.com/torchbox/wagtail/language/" "sv/)\n" @@ -19,6 +20,9 @@ msgstr "" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "Wagtail ModelAdmin" +msgstr "Wagtail ModelAdmin" + msgid "Parent page" msgstr "Topp-sida" @@ -167,10 +171,6 @@ msgstr "Föregående" msgid "Next" msgstr "Nästa" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}' skapad." - #, python-format msgid "The %s could not be created due to errors." msgstr "%s kunde inte läggas till p.g.a. fel." @@ -189,10 +189,6 @@ msgstr "Redigerar" msgid "Editing %s" msgstr "Redigerar %s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}' uppdaterad." - #, python-format msgid "The %s could not be saved due to errors." msgstr "%s kunde inte sparas p.g.a. av fel." @@ -209,10 +205,6 @@ msgstr "" "Är du säker att du vill ta bort %s? Om andra objekt på din webbsida är " "relaterad till den kan även de påverkas." -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}' borttagen." - msgid "Inspecting" msgstr "Inspekterar" diff --git a/wagtail/contrib/modeladmin/locale/tet/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/tet/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..75d5c3a424c0d76580ffc1089264521f1db4c203 GIT binary patch literal 3802 zcma);ON<;x8OMtxK(Y`B37BV+0<-LFJUu&`L$Jr#PW*}&@5U>89LopGs+q2tE>CyW z&{dtuAR*<#0S-tUd_)ma!ZDG^ffEuZE=XLW2nit&5g_G)asnj8fs75ESEL*P3f z6yl@cZ$J;e2Yw#Bg~?BXbMOfGJ@7&Bbr7$LH$cAk7WgpuGY~)VOI$t%z5`P34O!%r2MlW_qhzx#G4@HZ-HL|2Ve$%8+-)( zGq?u+3*`H2Q2ry}(;)3QjSJs@9()Mg2D#shAmvBkDexQMQ{bCm3;Z=m`TKGC1o$vW z{htKm`XF2=PJ=%{OwNOh!@F4YbKu{=9DEGI^zSPmM8sW?etQ+P;2R+0@Hm`@p*R8Z z{sIUUgaWzG9S}b;ZTKyae*G>;e|;aM+^fy}>mcp>aWnr@5H1qGXzt$z>EGXjl=~w{ zJKqN%1MkD47>Xlcj90@J$UIEIo8Z?$`sFo{arg;Hy?zJM-aj?>?}Oa$uOQd`JBXin z5YC`pN5IqI6X0jTTj1m145VM~g4FMaAoqI<C$!XVn{Y& zE8Az#yXf=*8`Kw1#8I7}w3&WpdkUQ~Im#O}=Gmg%hXMUWU$fCCpXNZGoy*nM$mBtn zw}T0}UiVV0whEW({I*pE?}x6+Q)yk011<4f2c1G@npdUDIj<~dRGR8k1}6(wY8f&- zbymx1u7+C9OvsFtb61tpo1i=LMrMYYbR$S=IdXaKX2y=?EN%ulnVSigaa@`rQ&nmk z_(EL7>KPu5^%=3Y+A`J$Wrw=acug8;Rh4`ppUYB@G=@WHH<(L@#Y*W0cl0p$wp2Ey z0SB#%>bfe(JKAC2)Of0vs-UE?L61ul<{jC0jW?tT(pSTw_I_05`MfPhrt|?D7w#p! zx4)O8(iMjcUTOlptPJH`s60+TWaqOd+TP zjc5&{-l?4H(D^?^BF%Y}5PfvJ&p(9Y-*T4+&nk(`tZVXJR>8hWCaV2W4`(!>aaNS{N&CYMlN0&l8|hr z$&1huPU^|##g(gi>dKJp__0Zov(?xqebKK3&G?ne9T4fA@|i@_nBi|w3Th;L((sm^*Efa?8zM!g1n)97&;8T2G7Ff zvu80k%m(h|&d?R7@s=G|Fd^w{RrF+EhpLb*!mi6!7Q(c*u`!#?I)N*jk&f?eEEd_A z)$ZBIn{_sV4jbz$J6k&!_FS>q>8|huqogMN`4pxGoQn-qcVkb=VWvv2!>Q~2i^=gl zIqrwrn_RF%mm(v2^7z1nrNUeztn9|`NOIAYh3`pQe^&gd&6D_a@C$RQdvZl&&KqRn z!7r6KSdwxzP`Q?wDxAmE^81vbZWjs_p;Qy3%>)@X!YQ!Qq)KLv-=oTRoVwXDyc#h z6?QD!RZK1$Tf{pLG5Azr&ZAmPPAc3$)$}{BTdbnRUOvE zD0awMsEbNmGP!B25SQz+t)$Kkj!1MyR?+RAbFAG;Ox)Bo*QgriCZ$pMfY-Ls`S5;? zg+!)OycDmCN0<0WX7~ufJBuNAk}Tn6wbYvRTZ!w1sw?w^YV8{?){A93PRc-+!E#7V zb^QqIQbEy21jV+Zz@n-}?H8|f{^z9JLSn=uz$us*8DGUl_`{RCI$Z|%bRnKizU9?& zn;uq1fVNd55xrE`W5^t=+(^j-g}bTSVwrkEUUs3Hh^xx5?^%4dn(SF7;@v=r^TtoA ze5%?peI!ooKKqeM%y6qcQaYylfQvNcx~w{46~!oOUAsyZNI8_}{WB$%SWd*S(v>on bWURJ-95?sk9yNIznbU?Y(KlNx%2xav-0A1A literal 0 HcmV?d00001 diff --git a/wagtail/contrib/modeladmin/locale/tet/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/tet/LC_MESSAGES/django.po new file mode 100644 index 00000000000..a32347faf48 --- /dev/null +++ b/wagtail/contrib/modeladmin/locale/tet/LC_MESSAGES/django.po @@ -0,0 +1,203 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Mariano de Deus , 2019 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" +"Last-Translator: Matt Westcott \n" +"Language-Team: Tetum (Tetun) (http://www.transifex.com/torchbox/wagtail/" +"language/tet/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tet\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Wagtail ModelAdmin" +msgstr "Wagtail ModelAdmin" + +msgid "Parent page" +msgstr "inan-aman" + +#, python-format +msgid "Add %s" +msgstr "hatama %s" + +#, python-format +msgid "Add a new %s" +msgstr "Hatama foun %s" + +msgid "Inspect" +msgstr "Inspeksaun" + +#, python-format +msgid "Inspect this %s" +msgstr "Inspeksaun iha %s" + +msgid "Edit" +msgstr "hadia" + +#, python-format +msgid "Edit this %s" +msgstr "hadia iha %s" + +msgid "Delete" +msgstr "hamoos" + +#, python-format +msgid "Delete this %s" +msgstr "hamoos iha %s" + +msgid "Unpublish" +msgstr "La publika " + +#, python-format +msgid "Unpublish this %s" +msgstr "La publika iha %s" + +msgid "Copy" +msgstr "kopia" + +#, python-format +msgid "Copy this %s" +msgstr "kopia iha %s" + +msgid "image" +msgstr "Imagen" + +msgid "Choose a parent page" +msgstr "Hili pajina" + +#, python-format +msgid "" +"%(plural)s can be added to more than one place within your site. Which of " +"the following would you like to be the parent of your new page?" +msgstr "" +"%(plural)s hatama barak dukue fatin ida ho situs. Opsaun saida mak ita ita " +"hakarak tuir inan-aman no pajina?" + +msgid "Continue" +msgstr "Kontinua" + +msgid "Saving…" +msgstr "Rai tiha ona" + +msgid "Save" +msgstr "Rai" + +#, python-format +msgid "%(model_name)s could not be deleted" +msgstr "%(model_name)slabale hamos" + +#, python-format +msgid "" +"'%(instance_name)s' is currently referenced by other objects, and cannot be " +"deleted without jeopardising data integrity. To delete it successfully, " +"first remove references from the following objects, then try again:" +msgstr "'%(instance_name)s' " + +msgid "Go back to listing" +msgstr "Fila ba lista" + +msgid "Yes, delete" +msgstr "Loos, hamoos" + +msgid "No, don't delete" +msgstr "Lae, Labele hamoos" + +msgid "Home" +msgstr "Uma" + +#, python-format +msgid " By %(filter_title)s " +msgstr "hosi %(filter_title)s" + +#, python-format +msgid "Sorry, there are no %(name)s matching your search parameters." +msgstr "Diskulpa, ne'e laiha %(name)smaka hanesan ita buka parametru." + +msgid "Search for" +msgstr "Buka ba" + +#, python-format +msgid "Search %(name)s" +msgstr "Buka %(name)s" + +msgid "Filter" +msgstr " Filtru" + +#, python-format +msgid "" +"No %(name)s have been created yet. One of the following must be created " +"before you can add any %(name)s:" +msgstr "" +"Laiha %(name)skria tiha ona. Ida tuir tenki kria ona molok ita bele hatama " +"balu %(name)s:" + +#, python-format +msgid "No %(name)s have been created yet." +msgstr "Laiha %(name)skria tiha ona." + +msgid "Pagination" +msgstr "Pagina" + +#, python-format +msgid "Page %(current_page)s of %(num_pages)s." +msgstr "Pagina %(current_page)sho %(num_pages)s" + +#, python-format +msgid "Back to %(model_name)s list" +msgstr "Fila ba %(model_name)slista" + +msgid "Previous" +msgstr " Kotuk" + +msgid "Next" +msgstr "Tuir" + +#, python-format +msgid "The %s could not be created due to errors." +msgstr "%slabele kria tamba erru." + +msgid "New" +msgstr "foun" + +#, python-format +msgid "Create new %s" +msgstr "kria foun %s" + +msgid "Editing" +msgstr "Hadia hela" + +#, python-format +msgid "Editing %s" +msgstr "Hadia hela %s" + +#, python-format +msgid "The %s could not be saved due to errors." +msgstr "%slabele rai tamba erru hela." + +#, python-format +msgid "Confirm deletion of %s" +msgstr "Konfirma eliminsaun husi %s" + +#, python-format +msgid "" +"Are you sure you want to delete this %s? If other things in your site are " +"related to it, they may also be affected." +msgstr "" +"Ita serteza atu hamoos %sne'e? se buat seluk iha ita situs ne'ebe mak relata " +"ba ida ne'e, sira sei afeita ona." + +msgid "Inspecting" +msgstr "Inspeksaun tiha ona" + +#, python-format +msgid "Inspecting %s" +msgstr "Inpeksaun %s" diff --git a/wagtail/contrib/modeladmin/locale/th/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cdf1285abe68eeaf0c5fc70e4cebdaa3b47d73d5 GIT binary patch literal 5941 zcmbuCON<;>6^09v;CR9_yu<6_Fn9(}&-CyxPWy%J*x(2!Lp;HXKruDl)zcMsSBNX z{|deVMmIUmJHWd*y%YQf7=sUh9|K7r@ovB~bkT5)}Wx0yl%Nfu93!#%Kim0x0(1 z=JY_B=~7? z3Y7YYz%qCoyaVillCOV&GOv)7dKd;}o^7DK_d)T05S04+Avg~I*TD7MzxjUd!7@c8 zJokg5$B)1Y_$>Gl@Gqe7`8Vi;22$SzPl8Qw6~!k!5>Wh}1HTCV4itYkec0-_24s3? z9X~lFCLZY_`5EIUeB_Y0p;sJG*5fwL6000i1Nngz8iVwa)EX()8YPu_h%S;FIX=rz z@*uS)aT$JZ=ODCY@&q+1Ws@>BdIR#K)Ke*%I|8;c^8dCf76~ufBQB@JKsqj>c=YxV4%I18>uWyJhQJa_gAw3ubtv z?l%)J+MoDI(;JPAGd$7?YhH7I;I`zx8n&A?oqEPIJogf>hRs~F9l6YJs%~I-0}HQa zlF+om$TLZUr;svpO}FZqc|U3RfmsOKk%|4p8#ntJezjr3I+mWPhs|a+TjsDh!Z!cdKu%j#)nlqk^#*HgIFGyRoKle zm=I@?31=Sks!2R%+@K}_h_Jorly2Bg%!6LYyfr@-YBe`;jUOc5Y~&{k<7PU{)G&Tx z;&!#_#c{peY%YwMx*x>}6Su;HUT^-`)T6MqEZ~9(yaJO%3&x#w{h;D(Bdf!)f@>sP zxj|XcCT?dJ^Ddeol1&S)iF`QTYIfJNKt=Z17}`DU4N5|)>5@ko>nCHvX~DEyCU3?n zxm&LzkXIXbw!75>Vz#U*ntq%(I~rjallnY6k`ZS|7!ZHUa`HpUpf22bocKXo-p?)Q zDW~h~h&;&TLEfn)=2$3fcGmpFk<-8vg42hRALiJlmF#?#5Hi+6Q;fbAwmfHd5YG`+ zj)kY}x!CnC#oyiDJikMUbGO8w^+UrYsWTqgsw(fAS@4qa>o76*&<|Hte5*~VPp*K{T}^o z8^iHiQkhdxC~aTbT`PSPmegj&WCMrp_2$ATDeZ}8{aR^zdp0gjhZQq4b+!&8N<@OXe>@wu={eQynbDoW9aK{oRp>`H;8G# zFshh6ZjzXNUYt}zE;gYolFxsIch$yBcxb#Dwze=Tm~9h6Y1(sJ6*Jv%eKXQXlDW#n z#QgmHcp?t{x~Jw7`PhkhtI9+(8$OXVCPs($?B27pC&1)*c}RMb#j-TLFh_t16+gkc z?FSo8wc$pwmu$XodRJ*f&rYUeRW0ods$q>fsF)2iep1lHM`LJ8H;B@%FlxmW6WIMC z-aNUHJwdjP&E<_lY=dd%Y}$D_?H)@zi)n{*C+$3%-FA>!2ic4S4^08aQBk><$N*iJf?qLo#0a1d0Z_| zr`;1yZx38y&@z$|o(#$z!Y(-y}qDameTG+Vjw;lf`Mgm zN_{?(b_kQ$d7jCKsJW2xVoAL)A9}r@UI^rhj^UxsEzB$rURgB@r+o&(gWJVi`WH2% zrImMK4e{l)V?DwSDOE@Da#BZHa$Rv}3qVqObplj(sS|Pz(T9s1^irI5p3rm=#4{Qw z7X*h4Pv`l>@1jU2BuFep)-T=BoDen`TtdUg^bwA((okZ;5fWJi$PJU>l(UN5Ig`61 zZfkrd=Ru~)?g<^js~6P3=Fhf5zsNkltZsRAx#BDymH*y8%)%gy2#*Wq;v(~53&N%Zp^4`Cu~Z61t~8t2T5+T*lyLW?&IeWg z5a!Pf!4tOH-g=RvS7ex(ZN$yK3qGmcXQQtBr*LE;2k6M?Sm=#uE zM$*~LOK}|^xVi3_2OSLR(f3aM5#8e&c3+m5m8DfR(0bRaq_Lf^K&T|ucotvRXZB2h?jN!tRZ z$h(*?05mu4!UU4*-o7#z!2k~_O>Hlkl)&^OL+tTv-I77p`@@5u7WlU, 2019 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" +"Last-Translator: Matt Westcott \n" +"Language-Team: Thai (http://www.transifex.com/torchbox/wagtail/language/" +"th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Wagtail ModelAdmin" +msgstr "บริหารรูปแบบของWagtail" + +msgid "Parent page" +msgstr "หน้าแรก,หน้าหลัก" + +#, python-format +msgid "Add %s" +msgstr "เพิ่ม %s" + +#, python-format +msgid "Add a new %s" +msgstr "เพิ่มอันใหม่ %s" + +msgid "Inspect" +msgstr "ตรวจ" + +#, python-format +msgid "Inspect this %s" +msgstr "ตรวจสิ่งนี้ %s" + +msgid "Edit" +msgstr "แก้ไข" + +#, python-format +msgid "Edit this %s" +msgstr "แก้ไขสิ่งนี้ %s" + +msgid "Delete" +msgstr "ลบ" + +#, python-format +msgid "Delete this %s" +msgstr "ลบสิ่งนี้ %s" + +msgid "Unpublish" +msgstr "ยกเลิกประกาศ" + +#, python-format +msgid "Unpublish this %s" +msgstr "ยกเลิกการพิมพ์นี้ %s" + +msgid "Copy" +msgstr "ก๊อปปี้,คัดลอก" + +#, python-format +msgid "Copy this %s" +msgstr "ก๊อปปี้สิ่งนี้ %s" + +msgid "image" +msgstr "รูปภาพ" + +msgid "Choose a parent page" +msgstr "เลือกหน้าหลัก" + +#, python-format +msgid "" +"%(plural)s can be added to more than one place within your site. Which of " +"the following would you like to be the parent of your new page?" +msgstr "" +"%(plural)sสามารถเพิ่มได้มากกว่าหนึ่งที่ภายในเว็บไซด์ของคุณ " +"คุณอยากจะเลือกหน้าหลักของหน้าใหม่มั้ย?" + +msgid "Continue" +msgstr "ต่อ,ต่อเนื่อง" + +msgid "Saving…" +msgstr "กำลังเซฟ,กำลังบันทึก" + +msgid "Save" +msgstr "เซฟ,บันทึก" + +#, python-format +msgid "%(model_name)s could not be deleted" +msgstr "%(model_name)s ไม่สามารถถูกลบได้" + +#, python-format +msgid "" +"'%(instance_name)s' is currently referenced by other objects, and cannot be " +"deleted without jeopardising data integrity. To delete it successfully, " +"first remove references from the following objects, then try again:" +msgstr "" +"'%(instance_name)s' กำลังถูกใช้อยู่ไม่สามารถลบทิ้งได้ โดยปราศจากความสมบูรณ์ของข้อมูล " +"ถ้าอยากจะลบขั้นแรกจะต้องลบตามนี้และลองทำใหม่อีกที:" + +msgid "Go back to listing" +msgstr "กลับไปที่รายชื่อ" + +msgid "Yes, delete" +msgstr "ใช่,ลบทิ้ง" + +msgid "Home" +msgstr "หน้าหลักของเว็บไซด์" + +#, python-format +msgid " By %(filter_title)s " +msgstr " โดย %(filter_title)s " + +#, python-format +msgid "Sorry, there are no %(name)s matching your search parameters." +msgstr "ขออภัย,ไม่มี %(name)s ที่ตรงกันของการค้นหา." + +msgid "Search for" +msgstr "ค้นหาสำหรับ" + +#, python-format +msgid "Search %(name)s" +msgstr "ค้นหา %(name)s" + +msgid "Filter" +msgstr "คัดกรอง" + +#, python-format +msgid "" +"No %(name)s have been created yet. One of the following must be created " +"before you can add any %(name)s:" +msgstr "" +"ไม่%(name)s มีการถูกสร้างขึ้นเลย " +"หนึ่งในทั้งหมดที่กล่าวมาจะต้องถูกสร้างขึ้นก่อนคุณสามารถเพิ่มอันไหนก็ได้ %(name)s:" + +#, python-format +msgid "No %(name)s have been created yet." +msgstr "ยังไม่ %(name)s มีการถูกสร้าง" + +#, python-format +msgid "" +"\n" +" Why not add one?\n" +" " +msgstr "" +"\n" +" ทำไมคุณไม่ เพิ่มสักอัน?\n" +" " + +#, python-format +msgid "Page %(current_page)s of %(num_pages)s." +msgstr "หน้า %(current_page)s ของ %(num_pages)s." + +#, python-format +msgid "Back to %(model_name)s list" +msgstr "กลับไปที่ %(model_name)s รายการ" + +msgid "Previous" +msgstr "หน้าก่อนหน้านี้" + +msgid "Next" +msgstr "ถัดไป" + +#, python-format +msgid "The %s could not be created due to errors." +msgstr "ไม่ %s สามารถถูกสร้างได้ในขณะที่มีข้อผิดพลาด" + +msgid "New" +msgstr "ใหม่" + +#, python-format +msgid "Create new %s" +msgstr "สร้างอันใหม่ %s" + +msgid "Editing" +msgstr "กำลังแก้ไข" + +#, python-format +msgid "Editing %s" +msgstr "กำลังแก้ไข %s" + +#, python-format +msgid "The %s could not be saved due to errors." +msgstr "ไม่%s สามารถเซฟได้ในขณะที่มีข้อผิดพลาด" + +#, python-format +msgid "Confirm deletion of %s" +msgstr "ยืนยันการลบ %s" + +#, python-format +msgid "" +"Are you sure you want to delete this %s? If other things in your site are " +"related to it, they may also be affected." +msgstr "คุณแน่ใจว่าคุณต้องการจะลบทิ้งสิ่งนี้ %s? ถ้ามีสิ่งอื่นที่เกี่ยวข้องอาจจะได้รับผลกระทบไปด้วย" + +msgid "Inspecting" +msgstr "กำลังตรวจ" + +#, python-format +msgid "Inspecting %s" +msgstr "กำลังตรวจสอบ %s" diff --git a/wagtail/contrib/modeladmin/locale/tr/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/tr/LC_MESSAGES/django.mo index 3d5c15a64d6cad76f36775f85891f4b78c85a9d5..326383c9b94263f8e5b93f76b6e9289de67bfb8c 100644 GIT binary patch delta 66 zcmbQlHi>ORIisniuAzahp_ziAg_VJUwt=C60at*(Zcu7jW^rbIo~}z`Nvf5Ck%1vx Oow=2P+2%EjX^a3kRS^FG delta 66 zcmbQlHi>ORIisnCu7Q!Rp_ziAp_P$^wgC`u1^DX*rIuwDXXfYWx+IpQS}7PA7y{K9 S>KXynnOPZ_Z(hTg#s~m7lo0^{ diff --git a/wagtail/contrib/modeladmin/locale/tr/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/tr/LC_MESSAGES/django.po index c888eb3bd58..0967b4eddcd 100644 --- a/wagtail/contrib/modeladmin/locale/tr/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/tr/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Turkish (http://www.transifex.com/torchbox/wagtail/language/" "tr/)\n" diff --git a/wagtail/contrib/modeladmin/locale/uk/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9eb864643053047406b2fdcb28e5c78f4161fe7e GIT binary patch literal 5552 zcmbW4TaX-88OIwzg%xjj2QP=InGACU(SPT=nBXA7B~!k4E!~C1Na*F zIQSRvO)z@5r*fnNZxL}&25w8^YS?bptm$#jFz+Q^4VlSiJ94pas%~KTf)`%RB%x`Ak!O+y zvp8iYn{L%JQ-0F$12Y}ABNO|HS2Q~tezjr3I+C8Lhs|a<>LD&CDxn-FD@3CADu zs!6=kxIs+;h}ebbth-@5F%Nkmc58kt*J^I!8b3(9iO5f;i)JkBuwnef#O-R;i{pB` z*_>W!>V6a_7;c3RdkgksQ;)*dqJVpz;8$RhXxg|Ft{+sK+sNu*Y{4}OR|A+8H*vf3 zGUdVvB;{#AHIWa-8_bq^Cs5Ho5##m(_XZ|$s_BwPt@V?Y@@d+%T#PqkOSxOGLy%W1 zI=8#kT@qVV6-_@*oQ;hzj7fbrJIaW&F${>mmHXs}ltEp-GoAQBTi++A?W60ivoZ2; zrW@oPw#1wqdNP}8e&XnH!3@FKN#zF{ciKvJHWNa}Yq=?*FNZD9*%HK)MAgNfrp~-oNSA{hyAb}JNM$e9>n^m zJwJEu_1uUy>?-e$@xZw^j3P=|?LvmRgFX&gZctD-zS)#-sgz1Lmdd3Pf`#pHETv1xeX&xy`Nk60z*pQjDU3yK5YvERR54rK zBr!X^IH`ubtb6-0W~N)W?^i4k|-0(euT~2 z57wG$!;NAu8Qn2#ESiVSMX9+Hpw4gg&KYG&z`fnZX`-;9%{OkFTz0vX- zGb{_MDrWWY+JQ?y@Y7$U=h8FTev=+E>Dlze5+{Fp9FgPc(QIEj|9>3+>0El0-hYSl z-`Y;kVCf`Iq{p)TGH24+bY8a8)9DFB&N+QQ336!(W{3J#bi7T^W-~^v>(fknIy;md zBtl+K8XFI<+2QPnLG`)xRl<9W35K)09%SkjmS%e~eF_8nizfY*bj^vS`SfIVKyIE- zPh@+z52W*mc6_ue6#>>2ikQm|rLSUoHruN=6r7P0$5v#Ancv4N9g>;)b9}yjW9Y>^;?%;Mr57pM9u1c($8j3 zDN;GHA7`yR? z$$0h{o}TLWkEN`@{sA#b6cj6=LM-H?$XeF-y|{hadSG3ilP-Me*QHoj8pW>#`xu_F z+Tji7NEyji(&q9MWcw=)f%M8>$Mr?yr}H|c79frm5+QlGHu>pE+&-MET_83OR==Xs zmk9}OOm>(ou=t>IfqUufitH&HDGF5xY6&>AWXl4DVd>J_QL;+!m|hEIM-;hAf=Wf5 zHCVLOV|5z|YUkfEyMNogRi`6Z_8>KFK^7TJ@p?Dot&wIk&u#a83#uHr=#R_J+{QOUkS z;(O+nm|RLY55!3qiTB0#GqR~|XJ595U~QP%Eza6J!m--wEY?-a$MbAlNdNa(qs>WG zbyOMqUq&P!TsdeP-f*tDpIY`JK6wEHQ0456#iwLAALQ1rBzl~Kvy z+oJu#)@Yxzb~9oUbu(<2Y-WdYowU0OYhlCH(Y5GDFblBU|06j4u4;AB9)C2as83a2 z^Ev5}ytk;pSMoCd0WsU1r?amSVki7!5psV?jp~$AeBHn=oXx95b*@G|faD3bI&DZf zJ>6B^y=e|kXJjQmBl3c@XNL|zjwtPG+9nTL)2hSXWPZ?`p(3en{6x0M|MYRENG>|Z zFHQiv5-U&Wu+m1<$g1ar)ClDmk0=RYNixNiUe literal 0 HcmV?d00001 diff --git a/wagtail/contrib/modeladmin/locale/uk/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 00000000000..8b1e282afa1 --- /dev/null +++ b/wagtail/contrib/modeladmin/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,217 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Sergiy Shkodenko , 2018 +# Zoriana Zaiats, 2018 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" +"Last-Translator: Matt Westcott \n" +"Language-Team: Ukrainian (http://www.transifex.com/torchbox/wagtail/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "Wagtail ModelAdmin" +msgstr "Wagtail ModelAdmin" + +msgid "Parent page" +msgstr "Батьківська сторінка" + +#, python-format +msgid "Add %s" +msgstr "Додати %s" + +#, python-format +msgid "Add a new %s" +msgstr "Додати %s" + +msgid "Inspect" +msgstr "Переглянути" + +#, python-format +msgid "Inspect this %s" +msgstr "Дослідити %s" + +msgid "Edit" +msgstr "Редагувати" + +#, python-format +msgid "Edit this %s" +msgstr "Редагувати %s" + +msgid "Delete" +msgstr "Видалити" + +#, python-format +msgid "Delete this %s" +msgstr "Видалити %s" + +msgid "Unpublish" +msgstr "Зняти з публікації" + +#, python-format +msgid "Unpublish this %s" +msgstr "Зняти з публікації %s" + +msgid "Copy" +msgstr "Копіювати" + +#, python-format +msgid "Copy this %s" +msgstr "Копіювати %s" + +msgid "image" +msgstr "зображення" + +msgid "Choose a parent page" +msgstr "Оберіть батьківську сторінку" + +#, python-format +msgid "" +"%(plural)s can be added to more than one place within your site. Which of " +"the following would you like to be the parent of your new page?" +msgstr "" +"%(plural)s можуть бути додані до більш ніж однієї локації вашого сайту. Що з " +"нижче перечисленого буде батьківським об'єктом вашої нової сторінки?" + +msgid "Continue" +msgstr "Продовжити" + +msgid "Saving…" +msgstr "Йде зберігання..." + +msgid "Save" +msgstr "Зберегти" + +#, python-format +msgid "%(model_name)s could not be deleted" +msgstr "%(model_name)s не може бути видалено" + +#, python-format +msgid "" +"'%(instance_name)s' is currently referenced by other objects, and cannot be " +"deleted without jeopardising data integrity. To delete it successfully, " +"first remove references from the following objects, then try again:" +msgstr "" +"На '%(instance_name)s' зараз вказують декілька об'єктів і його видалення " +"порушить цілісність даних. Для того, щоб успішно видалити цей об'єкт, " +"спочатку заберіть посилання з цих об'єктів, а потім спробуйте знову:" + +msgid "Go back to listing" +msgstr "Повернутися назад до списку" + +msgid "Yes, delete" +msgstr "Так, видалити" + +msgid "Home" +msgstr "Головна" + +#, python-format +msgid " By %(filter_title)s " +msgstr "за %(filter_title)s " + +#, python-format +msgid "Sorry, there are no %(name)s matching your search parameters." +msgstr "" +"Вибачте, немає %(name)s, що збігаються з вашими пошуковими параметрами. " + +msgid "Search for" +msgstr "Шукати на" + +#, python-format +msgid "Search %(name)s" +msgstr "Шукати %(name)s" + +msgid "Filter" +msgstr "Фільтр" + +#, python-format +msgid "" +"No %(name)s have been created yet. One of the following must be created " +"before you can add any %(name)s:" +msgstr "" +"Жодного %(name)s ще не було створено. Перед додаванням будь якого %(name)s " +"має бути спочатку створено щось із цього:" + +#, python-format +msgid "No %(name)s have been created yet." +msgstr "Жодних %(name)s ще не було створено." + +#, python-format +msgid "" +"\n" +" Why not add one?\n" +" " +msgstr "" +"\n" +" Чому б не додати?\n" +" " + +#, python-format +msgid "Page %(current_page)s of %(num_pages)s." +msgstr "Сторінка %(current_page)s з %(num_pages)s." + +#, python-format +msgid "Back to %(model_name)s list" +msgstr "Назад до %(model_name)s списку" + +msgid "Previous" +msgstr "Назад" + +msgid "Next" +msgstr "Далі" + +#, python-format +msgid "The %s could not be created due to errors." +msgstr "%s не може бути створено через помилки." + +msgid "New" +msgstr "Новий" + +#, python-format +msgid "Create new %s" +msgstr "Створити новий %s" + +msgid "Editing" +msgstr "Редагування" + +#, python-format +msgid "Editing %s" +msgstr "Редагування %s" + +#, python-format +msgid "The %s could not be saved due to errors." +msgstr "%s не може бути збережено через помилки." + +#, python-format +msgid "Confirm deletion of %s" +msgstr "Схваліть видалення %s" + +#, python-format +msgid "" +"Are you sure you want to delete this %s? If other things in your site are " +"related to it, they may also be affected." +msgstr "" +"Ви впевнені, що бажаєте видалити %s? Якщо є інші пов'язані сутності, то це " +"також може їх зачепити." + +msgid "Inspecting" +msgstr "Перегляд" + +#, python-format +msgid "Inspecting %s" +msgstr "Перегляд %s" diff --git a/wagtail/contrib/modeladmin/locale/vi/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/vi/LC_MESSAGES/django.mo index e0f50d68faf401f08d612459d720817363e50bb8..7a7d0f247e35231e264e177112c661294198c960 100644 GIT binary patch delta 66 zcmeyu{)K(RD@IdGT|)z1Lo)?K3o8QyZ39CC1Fisn-JsO6%;L=aJYAQ>l2j`NBLhRY OI&&)nv(55MR~Z3>tr8mm delta 66 zcmeyu{)K(RD@IcbT>~RsLo)?KLn|W-Z37_S3h>trN-fJQ&dkr#bxABqwNfxLFa)YI S)HMRCGqW-<-z?8`l@S1h>=GRS diff --git a/wagtail/contrib/modeladmin/locale/vi/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/vi/LC_MESSAGES/django.po index 2c952369d01..d1f79ad1830 100644 --- a/wagtail/contrib/modeladmin/locale/vi/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/vi/LC_MESSAGES/django.po @@ -3,13 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Nguyễn Hồng Quân , 2017 +# Hồng Quân Nguyễn , 2017 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-10-16 17:06+0000\n" "Last-Translator: Matt Westcott \n" "Language-Team: Vietnamese (http://www.transifex.com/torchbox/wagtail/" "language/vi/)\n" diff --git a/wagtail/contrib/modeladmin/locale/zh_CN/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/zh_CN/LC_MESSAGES/django.mo deleted file mode 100644 index 4630eec7b44ea0a5c8ccd7b95765a29e6107beae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4419 zcmb7`Uvv~#9mlVC2&L$x( z9+|UuK6CHt=w2wGq# z_{7H<`xE#p@Dt!6+&&Hd6g0p$!LNe%!7qU8KgrlL;70HXFa$yss|RV`F7PwpJ`ht_ z7+en?0!c0dlH8jhe(X4IWndpj^5?;)z{?=XXF>c}9=Fee?}8+M7o>Im29m2EfFyq( z+yMRyjDgR>$a1g^{1kW{#E;G4M)JP}p9J3pN&g=~(*IX*3-}N4J75KbD!{!U$^RU; z&x1!n(t8#}2-!GD>tFNud+_V%{}a4~+^mQ4ZuD(@;E%wcfE3R;5I^=lZX|afqqrEfY+ye^E6tu*QdDGppjp+H)_$yr_x1r;YXu=Mr)FPC`Y$W0Jk2=Cc3_j zMs`vyeiMzOtwW=lpbO>aUSIJ@F{X=reGctgXmHJq0r^E&B^vEjs#m(G&Po^Um2aS- z4BZRm#J)^VW&9DZ1F;NOHIvs#Jf_RhEgO6lDLr0kY}hJAB3x7Dx}dam+asxEe0zrb zDxylVg{R%c zAjjj%t5BnnY7$9Gx~!Ts!BwKlX$-Z<+gQ1;LQxGWITpp zU2}$OP^NRO`H&nojVdmw5psY6yW*W|u9hL9Wd8zbdCq$R`zK@w?!YIyE5w(*9j=O~4}#emr>vFC^+jEYOhBh6LJDzYiV z6A~7W8*a#@XcPgGBLTKu3cpHXYpNoy7$&QaX_|r5m$E|{VfC5{{}aL{MMD`x$#x8z zikhPL$&7m|nak>R8OD^He9N#7nhjds{%d&qxpKg1*?wOK~C!miyBo{`PK{~^L(#(wxv z#V1lI71UlyS+g9a4Mb_Cokg2lQfZrt_Q51g_=sZeWTI{K+fGU zZcZ9?`87pL8Eh|%ryG2IzjcD`l_ee9u%x`yhXrh}rt2tW+Ahd2nz||m3CRpoWqDO4 zv|y{?i-AuG7H`6q^{x4Klst^2+>I^ky7n+p17=3}8o_;PGS!TP#@O=HatePeV>63g zz?1});p;0Ou{U`6>!okR8|9@)2mXghDv8}r)i1QHQ6SdA+eTfZ?})!4;@=OqQS2dp zKx#21C0_Q5oYZvFzuRb0BL3~E7Q^49g?L%x%T0c_-XZLN5sQR)ZFS8ie|4?D<^^6; z6RO?xd^Iiz`d>lPNa+J|HU3)2y%4JYu8@04GE9GyE~y4~w5EsnZpk$H0ogFa8XoG9 zD&#QzeY^|Dnzh4$u$I_b_L8Kwq!1>5lPo1dydKGvv6Cz4L8{~xG1E+jg28k;9WY6^ z5|!PV!IGL_TKE}^dzykjiyf@r6Ra%T-LQMdN;ql))n&Bx@h$c@Ws-2$#D)suSWwi> zJRFmBLpHbUYuf4Gv?50<;-l@~p@y{x$}Ge;H7n+_(IM`xRo3VpLH?bZo-jgO6(^Fh zrDiiu9Xg!0RBtYO^n=#Q&Rh9@E8Fwolh&Eb*j@`EQ z#Kq7`wPG`4ar?xy-7&f}IL=m%T8vq_%f*Y=g&lUsjFlfP-*Q^7z-(cd({a-7x*%rRQ*D^IG%;YecUZYz z_*Gn-5evZ`Po}hD;mE9gvUllNPjR~c-og+Q!J^N(c!G2A30(@_7*-ylFu2w^ljA-E zNwp{5a?X#e3htyc(&@Q(wB4S%ZDo7WEevPv_M5OwgxGdpAxUtU+&ggw84^yyD^^@Q zZ4aM+Fw=I&nc~=0w$$3`9RD@taQ=#jG=pWusc~TzY%S!j6mpZy9`CU`W<3j*v6botBR8)FpEj$ynhojoE%4}0ZB*ezdsv3+SQhf)v< zMEN=>!L~fAmNsZEhaFr}Of?{aN?UKuu^FVXRmUcWpz@0_T*V6q9r=OgdY=?c~l$~v3t2=H@tST?0 k`A(tp*u#%Qd+vrXgw}oNxe6&~_!iRrk%y+M!~LH97vI47X#fBK diff --git a/wagtail/contrib/modeladmin/locale/zh_Hans/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..79ade48e5503a52c7e926dae7c09aff9039ad1ce GIT binary patch literal 4616 zcmb7{TWl298OKl3^n%-_ZPKP`df}8{Yy*3Pv?2?J1P6%KLag9G+lQj@?yPsh?uO?M;O}!CO(B9JekKBI|g=uUjrZiG-K<) zwUR%OG{I*v-UoJoGvJ@VJ)dC=e{A(<8T$gb4z$3{;5We$@T=f&!Kc7KgP#K*fLN0K z8>D&v1-}SZ;3MgK8hjjF4U(K6B)QEXMA-{q1^6;Z^83Ljz@LC5p9D$H1iu8n36lIt zkk;t|DFjzRk{mJJAmz2o%Tr;Ck=_Npgz% z8$inQ0g&V^@FqyXr1frr6xSL2=-?m0XTYs6n$|x6(svD{xE_)G1&F2CaS(s(oE*Oj zlHMD#e;XvZyyPE1()R&Kas@g550Lc#NAghwo93;Od4$kmUa<$3FyV-YNu{#-9X9{uz+szFv-R1Gk}H2Xe4YG7FMjzX569`ykcx zU*-6}K+^jNf`>G@YgK|IOV4-Es7~m48tqZEZ=kJ3Ta89FNcBJu)zRXI_76SZ_Tbt< zG1-VlHA(AYdACkBgU_LnZB!rhP(D#MtOhNBM*F+`Y>+QL5Fv7F|GVHiw6CLav=Evf zt^A;r+=t>El<#yV&{IBNC^uBUo6uCyl6@IHW5{>Q_}(Yr17C zdIY^H9x+wLR-^v^BL)TPLx`nXq93a*Vx$sL*WV_UOI=v8C6O`}IL#x9&hZ7Vt5I$n zJZYFJx8oQ^BzQ|giKx6)v*Vi1(?-hVmS(GdelV^@;@pTqQsprtkuX{{y_vVVi$RVj zw8KzikZKZXQA}00X@aXnS6eaEtnOfoVj{y-#Wh%!GHF60&5 zrQ}Pif|wvkURt0Uo>y8sczsMdN?~udVD>`nIU)(85|nJ3tJxdLrZi6~SUh35Ay;BC z1c+*DrxH0#V#`V~p;`6WwlzIP-&@k|PuW~n z=hkuA$(P)6Wgg~bc11Ot(a(|*IOh&hez3-Fcl)qCa6wv4W|Gj$Mp9+apxA=z;@|2CiA zgG#flXbHZTj?x#SNlj-zR2Tf)KMhF~ZdgrM(L#F&&W zkqh~PAs*Zu4n4Oah^OL*ie>v6O+~k`ISn(+cf02Z4dbq9ifm}cF`8<6A(_?<cy-*iTf%`rYiq0DCe>O@J>riT$pBV}#G8yG zfmSa*frQi)cr$*eZeO6LVsHK4T?^3&`GXa-iE*m>8q+QC*2dNd;DFcktvnJ}OiQ(E zUu)d$+p-`>E8_U|?b0Jg6h#r{TbeX`-smuQ*Q#i6FB9Kx!%SLXu6uWjRU6uh`-85T z+ThlTmEY5a+*Dzvr;zLV=tb?^&5M&mg5S-!O~R>)r~ zU3td~gvd-5W`>G0XN&Lj6>=ww{l~;`KSCo0C!OAV&|Aozn!9+VG}~908kozzhj%e^ zu8%SD|Zg>GL%nZ7rAA%m3C9YiZrcigH%X|OWi@P{5E;_nkm1w_H z$oGngd!=`?V!Eezev}rn?U_Qp8-A5$C%uK>j+7~{SUh$|oavrB(N&u0c`)72 zykODI;Jv{)_=GM6FN>A?DGaW4&e(9Jg{l(Q-*PSuE(-3LGuR>BJKiqF?-g?0=oSZZ zqWu;u^Fl1#Pe>9RCihNXK!!XgDaobT^J3uA(oBoYg;I8u&9!wnr+!5_oEq^W&0tw+ zeAqJ!wifdv#rzl(!(AeCN1`-wZMj#}_vT2@KykXabpNabTy!UmT@{0)@{6;m1NqYI z2`4`+`bHV-B^Nv+3%NXOW6sq!=khg)CEChgTy0(l+NhTDQw%vnosojl?Ay-GECtlv zRpqP73(+Tik`Z>xSIoB0W%DQnPk~py4odLo462q+hI%+an*VM50E1abxWJ# zy}Pi;3xv~gpZ0RD+neKD%og%@MCZM^_AXQ^8RTl92ssyqoLfCIau!C!iK$}uM_R9c>hX9$*9E+9_#I(IVS^jVQR$`*I1EXud8Gny5bP8G+q#WTm3lp;#vezD^O F`yYtGDe3?K literal 0 HcmV?d00001 diff --git a/wagtail/contrib/modeladmin/locale/zh_CN/LC_MESSAGES/django.po b/wagtail/contrib/modeladmin/locale/zh_Hans/LC_MESSAGES/django.po similarity index 86% rename from wagtail/contrib/modeladmin/locale/zh_CN/LC_MESSAGES/django.po rename to wagtail/contrib/modeladmin/locale/zh_Hans/LC_MESSAGES/django.po index d741217f77b..bd76547b301 100644 --- a/wagtail/contrib/modeladmin/locale/zh_CN/LC_MESSAGES/django.po +++ b/wagtail/contrib/modeladmin/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,6 +3,8 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Ed <724195301@qq.com>, 2018 +# First Last , 2019 # Fred Zeng <979738295@qq.com>, 2016 # Vincent Zhao , 2017 # 汇民 王 , 2017 @@ -10,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-16 11:28+0000\n" -"PO-Revision-Date: 2018-01-26 16:07+0000\n" -"Last-Translator: Matt Westcott \n" +"POT-Creation-Date: 2019-10-16 18:00+0100\n" +"PO-Revision-Date: 2019-11-01 03:14+0000\n" +"Last-Translator: First Last \n" "Language-Team: Chinese (China) (http://www.transifex.com/torchbox/wagtail/" "language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -21,6 +23,9 @@ msgstr "" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" +msgid "Wagtail ModelAdmin" +msgstr "Wagtail 模型管理" + msgid "Parent page" msgstr "上一级页面" @@ -109,6 +114,9 @@ msgstr "回到列表" msgid "Yes, delete" msgstr "确认删除" +msgid "No, don't delete" +msgstr "否,不删除" + msgid "Home" msgstr "主页" @@ -152,6 +160,9 @@ msgstr "" "加一个?\n" " " +msgid "Pagination" +msgstr "分页" + #, python-format msgid "Page %(current_page)s of %(num_pages)s." msgstr "页面 %(current_page)s / %(num_pages)s " @@ -166,9 +177,9 @@ msgstr "上一页" msgid "Next" msgstr "下一页" -#, python-brace-format -msgid "{model_name} '{instance}' created." -msgstr "{model_name} '{instance}'已创建。" +#, python-format +msgid "%(model_name)s '%(instance)s' created." +msgstr "%(model_name)s '%(instance)s' 已创建。" #, python-format msgid "The %s could not be created due to errors." @@ -188,9 +199,9 @@ msgstr "正在编辑" msgid "Editing %s" msgstr "正在编辑%s" -#, python-brace-format -msgid "{model_name} '{instance}' updated." -msgstr "{model_name} '{instance}'已更新" +#, python-format +msgid "%(model_name)s '%(instance)s' updated." +msgstr "%(model_name)s '%(instance)s' 已更新。" #, python-format msgid "The %s could not be saved due to errors." @@ -207,9 +218,9 @@ msgid "" msgstr "" "你确定要删除此%s?如果你网站中有其他内容与其相关,这些内容可能会受到影响。" -#, python-brace-format -msgid "{model} '{instance}' deleted." -msgstr "{model} '{instance}'已删除" +#, python-format +msgid "%(model_name)s '%(instance)s' deleted." +msgstr "%(model_name)s '%(instance)s' 已删除。" msgid "Inspecting" msgstr "正在检查" diff --git a/wagtail/contrib/modeladmin/locale/zh_Hant/LC_MESSAGES/django.mo b/wagtail/contrib/modeladmin/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2c604e05c71f0671decb360bd80098b0c398bd13 GIT binary patch literal 4229 zcmb7`U2q#$6~`~MKrsbM%V&UcNfEJ0WXUkJLHVL_lg6QLOyd$dlWArxU0K^myJmM4 zMLcvIf7EttV-KzE+L066bsX0jf7DGJ`MVDc56r+r9>^OHpxu=oN@jRurZfD{?#f?n zXUHAj{q4Pb?z!ijdycOE@%Y1i3@wQMJ@m|H7^|fBhwwlveVDNpunhbLI0HTf{t4^= z^WZ&D`y6AR2T$VhDEMno2VVuh3*H644*nbbCiu`77<&ZV1wsXT3Z!+V;FrOlgAiqv z;8(ztAj!P~lH98x{@8guN7NBj|2lXG{0sOK@DT`=fdl7W>g9s%X0B_<%6z_h*pS{}m*A?}5Js{{vF|eg&h*t_ygO+#4XR>-FXbK#J!LZ+;Ox zi17y?2S4)o572*v4p*Er`#wmm44r(Ye56KsRcurXPoh%}Q$w1tZ_`T&f53Jomgb6T z@PiVMX(D=Px34s*#mn^Fhowk_tBN=nkPaVtAhnDiO>s7T$JgY`AQRN zM8wZ2Qi8@|H5rdMTh|GWd0~hMWE$d0O~U>>EGZmcV1NVL&m-AZHiw2hst|!A`q3h9PJf7aiqq3$O z*f^nH5S#n!JgTXQ9S(0;0=pD$XlX9hOR^GT&*D^lx&w)myEH&#DK>i2dr3)%34-Jv z3sl2%pMHc_MLkC;?Daa#-i$p*BwTllFkQv9CtFAJr5T=tI13fI-w>6t5Wm^cva+vCU2hPHeX5K ziz0=7(O@r<|6V=BBphm;z-fgYyCXa;jPn0Ogr7n^d@SP=Nu&yLuc)j}M5%!2n5nX; zxFvV^}4@S4e^qiQ?-64Jt6FW4p|!F zKMhv=!e0^eS3J!t_J@MOy}^oL5Q6@f5MxsM33AVbf=}-aqLsWL>4v{nlN22VsA?fz zEg1$sBXlFI;^iPBi;$;&iErUpoqDl6tR@a)l~SLC3;tRmB|^Lsu@@*j=s`tbODWDv zV}{WX3ItNARJlR=<*0C02a2i!DK|)gxTh`f`bDTjgwN*?@vw40W4t9`j__s1_ttAEZMyPC^3nvI=w zOWt3(_F(s<)z!gKBs(ukOl`XyeJ-~;VlT|w zHwSas%l1%qCzxc1lrd+nOuyni7IG9_yQW&{Z7#_3x7IN9?`zu{oXf?l| zpSWbcIpzA3Tg^D0k3f&B-&=y=Y`6RViI=2(Wyb92hE-6qK zM%nIs^D2FHyupmwJ7IRTS(#>Y^}WKib*nFHy*XsgbXk43ti~HK+cnH;?=>%9b61%& z%~)8N=r>#2%{3fAXMTOo-3ab@GQ}P3mIZUItI*b+e|O^k$`Es%pBK!z-HLToypa7b{N z-0K;@3As+fE0$k>%e-=R`$?Pa1NqTOR=9*1wAt+oZkQR&%1?E>Ho;JPam8NhV)^m5 z{5z{2^6$>?bcx398V@vK-%zA)-&Z6me%*>?s#o97}eBsg`to1c>aFW4Tvfs5Z zmtBT!%$gdru3h)AO6hoP6D(Y`h0 z9fUh3!_Ag?bNX%OM#~-0y=V1i>|0}w9`~PIZ-yZ|DfMsPL3+3zTODhNCo;!fV~q{x zmKV&f#X@U0@{ufYG*Bq)mQm~dJ}*Q%X3VxFyJxM?HJhIrCjp=Ci8xkKQSA^gd-|<~ nc6)He%r>*F13LfW9cN9BnpZpRnNhpD\n" +"Language-Team: Chinese Traditional (http://www.transifex.com/torchbox/" +"wagtail/language/zh-Hant/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh-Hant\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Wagtail ModelAdmin" +msgstr "Wagtail 模型管理" + +msgid "Parent page" +msgstr "上一級頁面" + +#, python-format +msgid "Add %s" +msgstr "新增 %s" + +#, python-format +msgid "Add a new %s" +msgstr "新增新的%s" + +msgid "Inspect" +msgstr "檢查" + +#, python-format +msgid "Inspect this %s" +msgstr "檢查此 %s" + +msgid "Edit" +msgstr "編輯" + +#, python-format +msgid "Edit this %s" +msgstr "編輯此 %s" + +msgid "Delete" +msgstr "刪除" + +#, python-format +msgid "Delete this %s" +msgstr "刪除 %s" + +msgid "Unpublish" +msgstr "取消發布" + +#, python-format +msgid "Unpublish this %s" +msgstr "取消發布 %s" + +msgid "Copy" +msgstr "複製" + +#, python-format +msgid "Copy this %s" +msgstr "複製該 %s" + +msgid "image" +msgstr "圖片" + +msgid "Choose a parent page" +msgstr "選擇父頁面" + +#, python-format +msgid "" +"%(plural)s can be added to more than one place within your site. Which of " +"the following would you like to be the parent of your new page?" +msgstr "" +"%(plural)s可以被新增到你網站上的多個地方。下麵這些頁面當中,你想要哪一個作為" +"你的新增頁面的母頁面?" + +msgid "Continue" +msgstr "繼續" + +msgid "Saving…" +msgstr "正在儲存…" + +msgid "Save" +msgstr "儲存" + +#, python-format +msgid "%(model_name)s could not be deleted" +msgstr " %(model_name)s 不可刪除" + +#, python-format +msgid "" +"'%(instance_name)s' is currently referenced by other objects, and cannot be " +"deleted without jeopardising data integrity. To delete it successfully, " +"first remove references from the following objects, then try again:" +msgstr "" +"'%(instance_name)s'目前被其他對象引用,不能被刪除,否則會影響數據完整性。想要" +"成功刪除它,首先從下述對象中刪除引用,然後重試:" + +msgid "Go back to listing" +msgstr "回到列表" + +msgid "Yes, delete" +msgstr "確認刪除" + +msgid "Home" +msgstr "主頁" + +#, python-format +msgid " By %(filter_title)s " +msgstr "按 %(filter_title)s " + +#, python-format +msgid "Sorry, there are no %(name)s matching your search parameters." +msgstr "對不起,沒有找到與搜索條件匹配的 %(name)s。" + +msgid "Search for" +msgstr "搜索" + +#, python-format +msgid "Search %(name)s" +msgstr "搜索 %(name)s " + +msgid "Filter" +msgstr "過濾器" + +#, python-format +msgid "" +"No %(name)s have been created yet. One of the following must be created " +"before you can add any %(name)s:" +msgstr "還沒有創建%(name)s。這些當中必須先創建一個才能增加任何%(name)s:" + +#, python-format +msgid "No %(name)s have been created yet." +msgstr "還沒有創建%(name)s。" + +#, python-format +msgid "" +"\n" +" Why not add one?\n" +" " +msgstr "" +"\n" +" 為何不新" +"增一個?\n" +" " + +#, python-format +msgid "Page %(current_page)s of %(num_pages)s." +msgstr "頁面 %(current_page)s / %(num_pages)s " + +#, python-format +msgid "Back to %(model_name)s list" +msgstr "返回%(model_name)s列表" + +msgid "Previous" +msgstr "上一頁" + +msgid "Next" +msgstr "下一頁" + +#, python-format +msgid "The %s could not be created due to errors." +msgstr "無法創建%s。出現錯誤。" + +msgid "New" +msgstr "新建" + +#, python-format +msgid "Create new %s" +msgstr "新增新的 %s" + +msgid "Editing" +msgstr "正在編輯" + +#, python-format +msgid "Editing %s" +msgstr "正在編輯%s" + +#, python-format +msgid "The %s could not be saved due to errors." +msgstr "%s無法儲存,出現錯誤。" + +#, python-format +msgid "Confirm deletion of %s" +msgstr "確認刪除%s" + +#, python-format +msgid "" +"Are you sure you want to delete this %s? If other things in your site are " +"related to it, they may also be affected." +msgstr "" +"你確定要刪除此%s?如果你網站中有其他內容與其相關,這些內容可能會受到影響。" + +msgid "Inspecting" +msgstr "正在檢查" + +#, python-format +msgid "Inspecting %s" +msgstr "正在檢查%s" diff --git a/wagtail/contrib/modeladmin/options.py b/wagtail/contrib/modeladmin/options.py index 728615ed474..8bea4c04e5c 100644 --- a/wagtail/contrib/modeladmin/options.py +++ b/wagtail/contrib/modeladmin/options.py @@ -1,15 +1,19 @@ from django.conf.urls import url +from django.contrib.admin import site as default_django_admin_site from django.contrib.auth.models import Permission +from django.core import checks from django.core.exceptions import ImproperlyConfigured from django.db.models import Model from django.utils.safestring import mark_safe +from wagtail.admin.checks import check_panels_in_model +from wagtail.admin.edit_handlers import ObjectList, extract_panel_definitions_from_model_class from wagtail.core import hooks from wagtail.core.models import Page from .helpers import ( - AdminURLHelper, ButtonHelper, PageAdminURLHelper, PageButtonHelper, PagePermissionHelper, - PermissionHelper) + AdminURLHelper, ButtonHelper, DjangoORMSearchHandler, PageAdminURLHelper, PageButtonHelper, + PagePermissionHelper, PermissionHelper) from .menus import GroupMenuItem, ModelAdminMenuItem, SubMenu from .mixins import ThumbnailMixin # NOQA from .views import ChooseParentView, CreateView, DeleteView, EditView, IndexView, InspectView @@ -92,6 +96,8 @@ class ModelAdmin(WagtailRegisterable): inspect_template_name = '' delete_template_name = '' choose_parent_template_name = '' + search_handler_class = DjangoORMSearchHandler + extra_search_kwargs = {} permission_helper_class = None url_helper_class = None button_helper_class = None @@ -118,6 +124,10 @@ def __init__(self, parent=None): self.model, self.inspect_view_enabled) self.url_helper = self.get_url_helper_class()(self.model) + # Needed to support RelatedFieldListFilter in Django 2.2+ + # See: https://github.com/wagtail/wagtail/issues/5105 + self.admin_site = default_django_admin_site + def get_permission_helper_class(self): """ Returns a permission_helper class to help with permission-based logic @@ -230,6 +240,22 @@ def get_search_fields(self, request): """ return self.search_fields or () + def get_search_handler(self, request, search_fields=None): + """ + Returns an instance of ``self.search_handler_class`` that can be used by + ``IndexView``. + """ + return self.search_handler_class( + search_fields or self.get_search_fields(request) + ) + + def get_extra_search_kwargs(self, request, search_term): + """ + Returns a dictionary of additional kwargs to be sent to + ``SearchHandler.search_queryset()``. + """ + return self.extra_search_kwargs + def get_extra_attrs_for_row(self, obj, context): """ Return a dictionary of HTML attributes to be added to the `` @@ -297,8 +323,8 @@ def get_inspect_view_fields(self): for f in self.model._meta.get_fields(): if f.name not in self.inspect_view_fields_exclude: if f.concrete and ( - not f.is_relation or - (not f.auto_created and f.related_model) + not f.is_relation + or (not f.auto_created and f.related_model) ): found_fields.append(f.name) return found_fields @@ -350,7 +376,7 @@ def inspect_view(self, request, instance_pk): def edit_view(self, request, instance_pk): """ Instantiates a class-based view to provide 'edit' functionality for the - assigned model, or redirect to Wagtail's edit view if the assinged + assigned model, or redirect to Wagtail's edit view if the assigned model extends 'Page'. The view class used can be overridden by changing the 'edit_view_class' attribute. """ @@ -362,7 +388,7 @@ def delete_view(self, request, instance_pk): """ Instantiates a class-based view to provide 'delete confirmation' functionality for the assigned model, or redirect to Wagtail's delete - confirmation view if the assinged model extends 'Page'. The view class + confirmation view if the assigned model extends 'Page'. The view class used can be overridden by changing the 'delete_view_class' attribute. """ @@ -370,6 +396,29 @@ def delete_view(self, request, instance_pk): view_class = self.delete_view_class return view_class.as_view(**kwargs)(request) + def get_edit_handler(self, instance, request): + """ + Returns the appropriate edit_handler for this modeladmin class. + edit_handlers can be defined either on the model itself or on the + modeladmin (as property edit_handler or panels). Falls back to + extracting panel / edit handler definitions from the model class. + """ + if hasattr(self, 'edit_handler'): + edit_handler = self.edit_handler + elif hasattr(self, 'panels'): + panels = self.panels + edit_handler = ObjectList(panels) + elif hasattr(self.model, 'edit_handler'): + edit_handler = self.model.edit_handler + elif hasattr(self.model, 'panels'): + panels = self.model.panels + edit_handler = ObjectList(panels) + else: + fields_to_exclude = self.get_form_fields_exclude(request=request) + panels = extract_panel_definitions_from_model_class(self.model, exclude=fields_to_exclude) + edit_handler = ObjectList(panels) + return edit_handler + def get_templates(self, action='index'): """ Utility funtion that provides a list of templates to try for a given @@ -497,6 +546,14 @@ def modify_explorer_page_queryset(self, parent_page, queryset, request): queryset = queryset.not_type(self.model) return queryset + def register_with_wagtail(self): + super().register_with_wagtail() + + @checks.register('panels') + def modeladmin_model_check(app_configs, **kwargs): + errors = check_panels_in_model(self.model, 'modeladmin') + return errors + class ModelAdminGroup(WagtailRegisterable): """ @@ -584,6 +641,16 @@ def modify_explorer_page_queryset(self, parent_page, queryset, request): parent_page, queryset, request) return queryset + def register_with_wagtail(self): + super().register_with_wagtail() + + @checks.register('panels') + def modeladmin_model_check(app_configs, **kwargs): + errors = [] + for modeladmin_class in self.items: + errors.extend(check_panels_in_model(modeladmin_class.model)) + return errors + def modeladmin_register(modeladmin_class): """ diff --git a/wagtail/contrib/modeladmin/static_src/wagtailmodeladmin/scss/breadcrumbs_page.scss b/wagtail/contrib/modeladmin/static_src/wagtailmodeladmin/scss/breadcrumbs_page.scss new file mode 100644 index 00000000000..325b59269db --- /dev/null +++ b/wagtail/contrib/modeladmin/static_src/wagtailmodeladmin/scss/breadcrumbs_page.scss @@ -0,0 +1,11 @@ +@import 'wagtailadmin/scss/helpers'; + +.breadcrumb { + margin: -1.2em 0 2em; +} + +@include media-breakpoint-up(sm) { + .breadcrumb { + margin-top: -1.8em; + } +} diff --git a/wagtail/contrib/modeladmin/static_src/wagtailmodeladmin/scss/index.scss b/wagtail/contrib/modeladmin/static_src/wagtailmodeladmin/scss/index.scss index 4c4604b8629..afd812031cd 100644 --- a/wagtail/contrib/modeladmin/static_src/wagtailmodeladmin/scss/index.scss +++ b/wagtail/contrib/modeladmin/static_src/wagtailmodeladmin/scss/index.scss @@ -1,4 +1,4 @@ -@import 'wagtailadmin/scss/variables'; +@import 'wagtailadmin/scss/helpers'; .content header { margin-bottom: 0; @@ -84,7 +84,6 @@ text-transform: uppercase; position: relative; overflow: hidden; - outline: none; box-sizing: border-box; -webkit-font-smoothing: auto; // stylelint-disable-next-line property-no-vendor-prefix @@ -123,7 +122,7 @@ } -div.pagination { +.pagination { margin-top: 3em; border-top: 1px dashed #d9d9d9; padding: 2em 1em 0; @@ -139,7 +138,7 @@ p.no-results { } -@media screen and (min-width: $breakpoint-mobile) { +@include media-breakpoint-up(sm) { .changelist-filter { float: right; padding: 0 1.5%; @@ -161,12 +160,12 @@ p.no-results { } } - div.pagination { + .pagination { padding-left: 50px; padding-right: 50px; } - div.pagination.col9 { + .pagination.col9 { width: 73.5%; } @@ -175,8 +174,7 @@ p.no-results { } } - -@media screen and (min-width: $breakpoint-desktop-large) { +@include media-breakpoint-up(lg) { .result-list.col9 { width: 79%; } @@ -185,7 +183,7 @@ p.no-results { width: 21%; } - div.pagination.col9 { + .pagination.col9 { width: 77.5%; } } diff --git a/wagtail/contrib/modeladmin/templates/modeladmin/choose_parent.html b/wagtail/contrib/modeladmin/templates/modeladmin/choose_parent.html index 59d20d0f311..21468ecba48 100644 --- a/wagtail/contrib/modeladmin/templates/modeladmin/choose_parent.html +++ b/wagtail/contrib/modeladmin/templates/modeladmin/choose_parent.html @@ -1,25 +1,28 @@ {% extends "wagtailadmin/base.html" %} -{% load i18n admin_static %} +{% load i18n modeladmin_tags wagtailadmin_tags %} {% block titletag %}{{ view.get_meta_title }}{% endblock %} {% block extra_css %} {% include "wagtailadmin/pages/_editor_css.html" %} - + {{ form.media.css }} + + {% endblock %} {% block extra_js %} {% include "wagtailadmin/pages/_editor_js.html" %} + {{ form.media.js }} {% endblock %} {% block content %} -
- {% block header %} - {% include "modeladmin/includes/breadcrumb.html" %} - {% include "wagtailadmin/shared/header.html" with title=view.get_page_title subtitle=view.get_page_subtitle icon=view.header_icon %} - {% endblock %} +{% block header %} + {% include "modeladmin/includes/header_with_breadcrumb.html" with title=view.get_page_title subtitle=view.get_page_subtitle icon=view.header_icon tabbed=True %} +{% endblock %} + +

{% blocktrans %}Choose a parent page{% endblocktrans %}

diff --git a/wagtail/contrib/modeladmin/templates/modeladmin/create.html b/wagtail/contrib/modeladmin/templates/modeladmin/create.html index 4ce7361ff55..ab8421edc1a 100644 --- a/wagtail/contrib/modeladmin/templates/modeladmin/create.html +++ b/wagtail/contrib/modeladmin/templates/modeladmin/create.html @@ -5,11 +5,16 @@ {% block extra_css %} {% include "wagtailadmin/pages/_editor_css.html" %} + {{ edit_handler.form.media.css }} + {{ view.media.css }} {% endblock %} {% block extra_js %} {% include "wagtailadmin/pages/_editor_js.html" %} + {{ edit_handler.form.media.js }} + {{ edit_handler.html_declarations }} + {{ view.media.js }} {% endblock %} @@ -25,12 +30,12 @@ {% block form %}{{ edit_handler.render_form_content }}{% endblock %} {% block footer %} -
+
  • {% block form_actions %} diff --git a/wagtail/contrib/modeladmin/templates/modeladmin/delete.html b/wagtail/contrib/modeladmin/templates/modeladmin/delete.html index 4d4f1f620c2..4ae6cc3dab4 100644 --- a/wagtail/contrib/modeladmin/templates/modeladmin/delete.html +++ b/wagtail/contrib/modeladmin/templates/modeladmin/delete.html @@ -23,6 +23,7 @@

    {% blocktrans with view.verbose_name|capfirst as model_name %}{{ model_name
    {% csrf_token %} + {% trans "No, don't delete" %}
    {% endif %}

diff --git a/wagtail/contrib/modeladmin/templates/modeladmin/edit.html b/wagtail/contrib/modeladmin/templates/modeladmin/edit.html index 6d2be7e4387..309915297e9 100644 --- a/wagtail/contrib/modeladmin/templates/modeladmin/edit.html +++ b/wagtail/contrib/modeladmin/templates/modeladmin/edit.html @@ -5,13 +5,13 @@ {% block form_actions %}