Changelog ========= 1.3 (xx.xx.xxxx) ~~~~~~~~~~~~~~~~ * Django 1.9 support * Support for indexing fields across relations in Elasticsearch * Added toolbar to cross-link between different search areas, and `register_admin_search_area` hook to register new areas (Ben Kerle) * Added `WagtailPageTests`, a helper module to simplify writing tests for Wagtail sites * Added system checks to check the `subpage_types` and `parent_page_types` attributes of page models * Added `WAGTAIL_PASSWORD_RESET_ENABLED` setting to allow password resets to be disabled independently of the password management interface (John Draper) * Submit for moderation notification emails now include the editor name (Denis Voskvitsov) * Updated fonts for more comprehensive Unicode support * Added `.alt` attribute to image renditions * The default `src`, `width`, `height` and `alt` attributes can now be overridden by attributes passed to the `{% image %}` tag * Added keyboard shortcuts for preview and save in the page editor * Added `Page` methods `can_exist_under`, `can_create_at`, `can_move_to` for customising page type business rules * `wagtailadmin.utils.send_mail` now passes extra keyword arguments to Django's `send_mail` function (Matthew Downey) * `page_unpublish` signal is now fired for each page that was unpublished by a call to `PageQuerySet.unpublish()` * Add `get_upload_to` method to `AbstractImage`, to allow overriding the default image upload path (Ben Emery) * Notification emails are now sent per user (Matthew Downey) * Added the ability to override the default manager on Page models * Added an optional human-friendly `site_name` field to sites (Timo Rieber) * Added success message after updating image from the image upload view (Christian Peters) * New translations for Arabic and Latvian * Fix: Images and page revisions created by a user are no longer deleted when the user is deleted (Rich Atkinson) * Fix: HTTP cache purge now works again on Python 2 (Mitchel Cabuloy) * Fix: Locked pages can no longer be unpublished (Alex Bridge) * Fix: Site records now implement `get_by_natural_key` * Fix: Creating pages at the root level (and any other instances of the base `Page` model) now properly respects the `parent_page_types` setting * Fix: Settings menu now opens correctly from the page editor and styleguide views * Fix: `subpage_types` / `parent_page_types` business rules are now enforced when moving pages * Fix: Multi-word tags on images and documents are now correctly preserved as a single tag (LKozlowski) * Fix: Changed verbose names to start with lower case where necessary (Maris Serzans) * Fix: Invalid images no longer crash the image listing (Maris Serzans) * Fix: `MenuItem` `url` parameter can now take a lazy URL (Adon Metcalfe, rayrayndwiga) * Fix: Restored correct highlighting behaviour of rich text toolbar buttons 1.2 (12.11.2015) ~~~~~~~~~~~~~~~~ * Added `wagtail.contrib.settings`, a module to allow administrators to edit site-specific settings * Core templatetags (pageurl, image, wagtailuserbar, etc) are now compatible with Jinja2 * Redirects can now be created for specific sites * The Page.get_latest_revision_as_page method now returns the live page object if there are no draft changes to the page * Image and document models now provide a `search` method on their QuerySets * Search methods now accept an `operator` argument to determine whether multiple terms are ORed or ANDed together * Search methods now accept an `order_by_relevance` argument, which can be set to False to preserve the original QuerySet ordering * InlinePanel now accepts `max_num` and `min_num` arguments to limit the number of inline items * 'Add' button on inline panels is disabled when `max_num` is reached (Salvador Faria) * StreamField blocks now provide a `get_context` method for passing additional variables to the block template * Wagtail API now incorporates the browsable front-end provided by Django REST Framework * Python 3.5 support * WagtailRedirectMiddleware can now ignore the query string if there is no redirect that exactly matches it (Michael Cordover) * Order of URL parameters now ignored by redirect middleware (Michael Cordover) * Added SQL Server compatibility to image migration (Timothy Allen) * Added classnames to Wagtail rich text editor buttons to aid custom styling (Rob Shelton) * Simplified body_class in default homepage template (Josh Barr) * page_published signal now called with the revision object that was published (Josh Barr) * Added an overrideable favicon to the admin interface * Added spinner animations to long-running form submissions * The EMBEDLY_KEY setting has been renamed to WAGTAILEMBEDS_EMBEDLY_KEY (Anurag Sharma) * StreamField blocks are now added automatically, without showing the block types menu, if only one block type exists (Alex Gleason) * Wagtail admin now standardises on a single thumbnail image size, to reduce the overhead of creating multiple renditions * The `first_published_at` and `latest_revision_created_at` fields on page models are now available as filter fields on search queries * Rich text fields now strip out HTML comments * Page editor form now sets enctype="multipart/form-data" as appropriate, allowing FileField to be used on page models (Petr Vacha) * Explorer navigation menu on a completely empty page tree now takes you to the root level, rather than doing nothing * Added animation and fixed display issues when focusing a rich text field (Alex Gleason) * Added a system check to warn if Pillow is compiled without JPEG / PNG support * Page chooser now prevents users from selecting the root node where this would be invalid * New translations for Dutch (Netherlands), Georgian, Swedish and Turkish (Turkey) * Fix: Page slugs are no longer auto-updated from the page title if the page is already published * Fix: Deleting a page permission from the groups admin UI does not immediately submit the form * Fix: Wagtail userbar is shown on pages that do not pass a `page` variable to the template (e.g. because they override the `serve` method) * Fix: request.site now set correctly on page preview when the page is not in the default site * Fix: Project template no longer raises a deprecation warning (Maximilian Stauss) * Fix: `PageManager.sibling_of(page)` and `PageManager.not_sibling_of(page)` now default to inclusive (i.e. `page` is considered a sibling of itself), for consistency with other sibling methods * Fix: The "view live" button displayed after publishing a page now correctly reflects any changes made to the page slug (Ryan Pineo) * Fix: API endpoints now accept and ignore the `_` query parameter used by jQuery for cache-busting * Fix: Page slugs are no longer cut off when Unicode characters are expanded into multiple characters (Sævar Öfjörð Magnússon) * Fix: Searching a specific page model while filtering it by either ID or tree position no longer raises an error (Ashia Zawaduk) * Fix: Scrolling an over-long explorer menu no longer causes white background to show through (Alex Gleason) * Fix: Removed jitter when hovering over StreamField blocks (Alex Gleason) * Fix: Non-ASCII email addresses no longer throw errors when generating Gravatar URLs (Denis Voskvitsov, Kyle Stratis) * Fix: Dropdowns for ForeignKeys are now styled consistently (Ashia Zawaduk) * Fix: Date choosers now appear on top of StreamField menus (Sergey Nikitin) * Fix: Fixed a migration error that was raised when block-updating from 0.8 to 1.1+ * Fix: Page copy no longer breaks on models with a ClusterTaggableManager or ManyToManyField * Fix: Validation errors when inserting an embed into a rich text area are now reported back to the editor 1.1 (15.09.2015) ~~~~~~~~~~~~~~~~ * Implemented the `specific()` method on PageQuerySet, to return pages as their most specific type * "Promoted search results" has moved into its own module * Elasticsearch backend now supports an experimental `ATOMIC_REBUILD` flag to keep the existing index available while the `update_index` task is running * The wagtailapi module has been refactored to use Django REST Framework (Tom Christie) * A number of permissions fixes have been made to the Wagtail admin interface. See release notes for a list of specific changes made. * Snippets that inherit from `wagtail.wagtailsearch.index.Indexed` now appear as searchable within the Wagtail admin * Implemented deletion of form submissions (Kyungil Choi) * Implemented pagination in the page chooser modal * Changed INSTALLED_APPS in project template to list apps in precedence order (Piet Delport) * The `{% image %}` tag now supports filters on the image variable, e.g. `{% image primary_img|default:secondary_img width-500 %}` * Moved the style guide menu item into the Settings sub-menu * Search backends can now be specified by module (e.g. `wagtail.wagtailsearch.backends.elasticsearch`), rather than a specific class (`wagtail.wagtailsearch.backends.elasticsearch.ElasticSearch`) * Added ``descendant_of`` filter to the API (Michael Fillier) * Added optional directory argument to "wagtail start" command (Mitchel Cabuloy) * Non-superusers can now view/edit/delete sites if they have the correct permissions * Image file size is now stored in the database, to avoid unnecessary filesystem lookups * Page URL lookups hit the cache/database less often (Michael van Tellingen) * Updated URLs within the admin backend to use namespaces * The `update_index` task now indexes objects in batches of 1000, to indicate progress and avoid excessive memory use * Added database indexes on PageRevision and Image to improve performance on large sites * Search in page chooser now uses Wagtail's search framework, to order results by relevance * `PageChooserPanel` now supports passing a list (or tuple) of accepted page types * The snippet type parameter of `SnippetChooserPanel` can now be omitted, or passed as a model name string rather than a model class (Joss Ingram) * Added aliases for the `self` template variable to accommodate Jinja as a templating engine: `page` for pages, `field_panel` for field panels / edit handlers, and `value` for blocks * Added signposting text to the explorer to steer editors away from creating pages at the root level unless they are setting up new sites * "Clear choice" and "Edit this page" buttons are no longer shown on the page field of the group page permissions form * Altered styling of stream controls to be more like all other buttons * Added ability to mark page models as not available for creation using the flag `is_creatable`; pages that are abstract Django models are automatically made non-creatable * New translations for Norwegian Bokmål and Icelandic * Fix: Text areas in the non-default tab of the page editor now resize to the correct height * Fix: Tabs in "insert link" modal in the rich text editor no longer disappear (Tim Heap) * Fix: H2 elements in rich text fields were accidentally given a click() binding when put insite a collapsible multi field panel * Fix: The wagtailimages module is now compatible with remote storage backends that do not allow reopening closed files * Fix: Search no longer crashes when auto-indexing a model that doesn't have an id field (Scot Hacker) * Fix: The `wagtailfrontendcache` module's HTTP backend has been rewritten to reliably direct requests to the configured cache hostname * Fix: Resizing single pixel images with the "fill" filter no longer raises "ZeroDivisionError" or "tile cannot extend outside image" * Fix: The queryset returned from `search` operations when using the database search backend now correctly preserves additional properties of the original query, such as `prefetch_related` / `select_related` * Fix: Responses from the external image URL generator are correctly marked as streaming and will no longer fail when used with Django's cache middleware * Fix: Page copy now works with pages that use multiple inheritance (Jordi Joan) * Fix: Form builder pages now pick up template variables defined in the `get_context` method (Christoph Lipp) * Fix: When copying a page, IDs of child objects within page revision records were not remapped to the new objects; this would cause those objects to be lost from the original page when editing the new one * Fix: Newly added redirects now take effect on all sites, rather than just the site that the Wagtail admin backend was accessed through * Fix: Add user form no longer throws a hard error on validation failure 1.0 (16.07.2015) ~~~~~~~~~~~~~~~~ * Added StreamField, a model field for freeform page content * Added Wagtail API, a module for creating a RESTful API for your content * MySQL support * Django 1.8 support * Removed dependency on libsass (Tim Heap) * Users without usernames can now be created and edited in the admin interface (Tim Heap) * Added update notifications * Javascript includes in the admin backend have been moved to the HTML header, to accommodate form widgets that render inline scripts that depend on libraries such as jQuery * Improvements to the layout of the admin menu footer. * Menu items of custom apps are now highlighted when being used (Josh Barr) * Added thousands separator for counters on dashboard * Added contextual links to admin notification messages * When copying pages, it is now possible to specify a place to copy to (Timo Rieber) * FieldPanel now accepts an optional 'widget' parameter to override the field's default form widget (Alejandro Giacometti) * Page URL paths can now be longer than 255 characters * Dropped Django 1.6 support * Dropped Python 2.6 and 3.2 support * Dropped Elasticsearch 0.90.x support * Serving documents will now use django-sendfile if it's configured (Jordi Joan) * Documents are now served with correct mime-type (Jordi Joan, Damian Moore) * Support for If-Modified-Since HTTP header (Jordi Joan) * Search view accepts "page" GET parameter in line with pagination * Reversing `django.contrib.auth.admin.login` will no longer lead to Wagtails login view (making it easier to have front end views) * Removed dependency on `LOGIN_URL` and `LOGIN_REDIRECT_URL` settings * Password reset view names namespaced to wagtailadmin * Removed the need to add permission check on admin views (now automated) * Added cache-control headers to all admin views * Page model fields without a FieldPanel are no longer displayed in the form * No longer need to specify the base model on InlinePanel definitions * The project template Vagrantfile now listens on port 8000 * The external link chooser in rich text areas now accepts URLs of the form '/some/local/path', to allow linking to non-Wagtail-controlled URLs within the local site (Eric Drechsel) * SCSS files in wagtailadmin now use absolute imports, to permit overriding by user stylesheets (Martin Sanders) * Bare text entered in rich text areas is now automatically wrapped in a paragraph element * Added pagination to the snippets listing and chooser (Martin Sanders) * Page / document / image / snippet choosers now include a link to edit the chosen item * The `document_served` signal now correctly passes the Document class as `sender` and the document as `instance` * Image/Document edit page no longer throws OSError when the original image is missing * Page classes can specify an edit_handler property to override the default Content / Promote / Settings tabbed interface * The Page model now records the date/time that a page was first published, as the field `first_published_at` * Increased the maximum length of a page slug from 50 to 255 characters * Plain text fields in the page editor now use auto-expanding text areas * Date / time pickers now consistently use times without seconds, to prevent Javascript behaviour glitches when focusing / unfocusing fields * Added hooks `register_rich_text_embed_handler` and `register_rich_text_link_handler` for customising link / embed handling within rich text fields * Added hook `construct_homepage_summary_items` for customising the site summary panel on the admin homepage * No longer automatically tries to use Celery for sending notification emails * Added "Add child page" button to admin userbar (Eric Drechsel) * Renamed the `construct_wagtail_edit_bird` hook to `construct_wagtail_userbar` * 'static' template tags are now used throughout the admin templates, in place of STATIC_URL * Added a new decorator-based syntax for RoutablePage, compatible with Django 1.8 * Collapsible blocks stay open on any form error (Salvador Faria) * Document upload modal no longer switches tabs on form errors (Salvador Faria) * Added `AUTO_UPDATE` flag to search backend settings to enable/disable automatically updating the search index on model changes * Made the built-in project template follow the Django one, with several Wagtail-specific additions. The template comes with two apps (home and search) * `with_metaclass` is now imported from Django's bundled copy of the `six` library, to avoid errors on Mac OS X from an outdated system copy of the library being imported * Added new translations for Croatian and Finnish 0.8.10 (16.09.2015) ~~~~~~~~~~~~~~~~~~~ * Fix: When copying a page, IDs of child objects within page revision records were not remapped to the new objects; this would cause those objects to be lost from the original page when editing the new one * Fix: Search no longer crashes when auto-indexing a model that doesn't have an id field (Scot Hacker) * Fix: Resizing single pixel images with the "fill" filter no longer raises "ZeroDivisionError" or "tile cannot extend outside image" 0.8.9 (16.09.2015) ~~~~~~~~~~~~~~~~~~ [release withdrawn due to packaging issues] 0.8.8 (18.06.2015) ~~~~~~~~~~~~~~~~~~ * Fix: Formbuilder no longer raises TypeError when submitting unchecked boolean field (Arne Schauf) * Fix: Image upload form no longer breaks when using i10n thousand separators (@signalkraft) * Fix: Multiple image uploader now escapes HTML in filenames (Mac Chapman) * Fix: Retrieving an individual item from a sliced BaseSearchResults object now properly takes the slice offset into account * Fix: Removed dependency on unicodecsv which fixes a crash on Python 3 * Fix: Submitting unicode text in form builder form no longer crashes with UnicodeEncodeError on Python 2 * Fix: Creating a proxy model from a Page class no longer crashes in the system check (Nar Chhantyal) * Fix: Unrecognised embed URLs passed to the |embed filter no longer cause the whole page to crash with an EmbedNotFoundException * Fix: Underscores no longer get stripped from page slugs 0.8.7 (29.04.2015) ~~~~~~~~~~~~~~~~~~ * Fix: wagtailfrontendcache no longer tries to purge pages that are not in a site * Fix: The contents of