Changelog
=========

0.8 (05.11.2014)
~~~~~~~~~~~~~~~~

 * Added logging for page operations
 * The save button on the page edit page now redirects the user back to the edit page instead of the explorer
 * Signal handlers for ``wagtail.wagtailsearch`` and ``wagtail.contrib.wagtailfrontendcache`` are now automatically registered when using Django 1.7 or above. (Tim Heap)
 * Added a Django 1.7 system check to ensure that foreign keys from Page models are set to on_delete=SET_NULL, to prevent inadvertent (and tree-breaking) page deletions
 * Improved error reporting on image upload, including ability to set a maximum file size via a new setting WAGTAILIMAGES_MAX_UPLOAD_SIZE
 * The external image URL generator now keeps persistent image renditions, rather than regenerating them on each request, so it no longer requires a front-end cache
 * Added Dutch translation
 * Fix: Replaced references of .username with .get_username() on users for better custom user model support (John-Scott Atlakson)
 * Fix: Unpinned dependency versions for six and requests to help prevent dependency conflicts
 * Fix: Fixed TypeError when getting embed HTML with oembed on Python 3 (John-Scott Atlakson)
 * Fix: Made HTML whitelisting in rich text fields more robust at catching disallowed URL schemes such as "jav\tascript:" (Tim Heap)
 * Fix: created_at timestamps on page revisions were not being preserved on page copy, causing revisions to get out of sequence
 * Fix: When copying pages recursively, revisions of sub-pages were being copied regardless of the copy_revisions flag
 * Fix: Updated the migration dependencies within the project template to ensure that Wagtail's own migrations consistently apply first.
 * Fix: The cache of site root paths is now cleared when a site is deleted.
 * Fix: Search indexing now prevents pages from being indexed multiple times, as both the base Page model and the specific subclass
 * Fix: Search indexing now avoids trying to index abstract models
 * Fix: Fixed references to "username" in login form help text for better custom user model support (John-Scott Atlakson)
 * Fix: Later items in a model's search_field list now consistently override earlier items, allowing subclasses to redefine rules from the parent
 * Fix: Image uploader now accepts JPEG images that PIL reports as being in MPO format
 * Fix: Multiple checkbox fields on form-builder forms did not correctly save multiple values
 * Fix: Editing a page's slug and saving it without publishing could sometimes cause the URL paths of child pages to be corrupted
 * Fix: 'latest_revision_created_at' was being cleared on page publish, causing the page to drop to the bottom of explorer listings
 * Fix: Searches on partial_match fields were wrongly applying prefix analysis to the search query as well as the document (causing e.g. a query for "water" to match against "wagtail")

0.7 (09.10.2014)
~~~~~~~~~~~~~~~~
 * Added interface for choosing focal point on images
 * Redesigned and reorganised navigation menu to include a 'Settings' submenu
 * Added Groups administration area
 * Added Sites administration area
 * Added the ability to lock a page to (temporarily) prevent edits to that page
 * Removed 'content_type' template filter from the project template, as the same thing can be accomplished with self.get_verbose_name|slugify
 * Page copy operations now also copy the page revision history
 * Page models now support a 'parent_page_types' property in addition to 'subpage types', to restrict the types of page they can be created under
 * 'register_snippet' can now be invoked as a decorator
 * Project template updated to Django 1.7
 * 'boost' applied to the title field on searches reduced from 100 to 2
 * The 'type' method of PageQuerySet (used to filter the queryset to a specific page type) now includes subclasses of the given page type.
 * The 'update_index' management command now updates all backends listed in WAGTAILSEARCH_BACKENDS, or a specific one passed on the command line, rather than just the default backend
 * The 'fill' image resize method now supports an additional parameter defining the closeness of the crop
 * Added support for invalidating Cloudflare caches
 * Pages in the explorer can now be ordered by last updated time
 * Fix: 'wagtail start' command now works on Windows
 * Fix: The external image URL generator no longer stores generated images in Django's cache
 * Fix: Elasticsearch backend can now search querysets that have been filtered with an 'in' clause of a non-list type (such as a ValuesListQuerySet)
 * Fix: Logic around the has_unpublished_changes flag has been fixed, to prevent issues with the 'View draft' button failing to show in some cases
 * Fix: It is now easier to move pages to the beginning and end of their section
 * Fix: Image rendering no longer creates erroneous duplicate Rendition records when the focal point is blank.

0.6 (11.09.2014)
~~~~~~~~~~~~~~~~
 * Added 'wagtail start' command and project template
 * Added Django 1.7 support
 * Added {% routablepageurl %} template tag (Tim Heap)
 * Added RoutablePageMixin (Tim Heap)
 * MenuItems can now have bundled JavaScript
 * Added the register_admin_menu_item hook for registering menu items at startup
 * Added version indicator to the admin interface
 * Renamed wagtailsearch.indexed to wagtailsearch.index
 * Added Russian translation
 * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' (Nathan Brizendine)
 * Fix: Search results in the page chooser now respect the page_type parameter on PageChooserPanel
 * Fix: Rendition filenames are now prevented from going over 60 chars, even with a large focal_point_key
 * Fix: Child relations that are defined on a model's superclass (such as the base Page model) are now picked up correctly by the page editing form, page copy operations and the replace_text management command
 * Fix: (For Django 1.7 support) Do not import South when using Django 1.7 (thenewguy)
 * Fix: Tags on images and documents are now committed to the search index immediately on saving

0.5 (01.08.2014)
~~~~~~~~~~~~~~~~
 * Added multiple image uploader
 * Added support for face and feature detection on images using the OpenCV library
 * Added RoutablePage model to allow embedding Django-style URL routing within a page
 * Added image/document/snippet usage stats
 * Explorer nav now rendered separately and fetched with AJAX when needed
 * Added decorator syntax for hooks
 * Replaced lxml dependency with html5lib, to simplify installation
 * Added page_unpublished signal
 * Added mechanism to obtain external URLs to images, at any size
 * Added Copy Page action to the explorer

 * Fix: Updates to tag fields are now properly committed to the database when publishing directly from the page edit interface

0.4.1 (14.07.2014)
~~~~~~~~~~~~~~~~~~
 * ElasticSearch backend now respects the backward-compatible URLS configuration setting, in addition to HOSTS
 * Documentation fixes

0.4 (10.07.2014)
~~~~~~~~~~~~~~~~
 * ElasticUtils/pyelasticsearch swapped for elasticsearch-py
 * Python 3.2, 3.3 and 3.4 support
 * Added scheduled publishing
 * Added support for private (password-protected) pages
 * Added frontend cache invalidator
 * Added sitemap generator
 * Added notification preferences
 * Added a new way to configure searchable/filterable fields on models
 * Added 'original' as a resizing rule supported by the 'image' tag
 * Hallo.js updated to version 1.0.4
 * Snippets are now ordered alphabetically
 * Removed the "More" section from the admin menu
 * Added pagination to page listings in admin
 * Support for setting a subpage_types property on page models, to define which page types are allowed as subpages
 * Added a new datetime picker widget
 * Added styleguide (mainly for wagtail developers)
 * Aesthetic improvements to preview experience
 * 'image' tag now accepts extra keyword arguments to be output as attributes on the img tag
 * Login screen redirects to dashboard if user is already logged in
 * Renamed some template tag libraries
 * Any extra arguments given to serve are now passed through to get_context and get_template
 * Added an 'attrs' property to image rendition objects to output src, width, height and alt attributes all in one go
 * Added 'construct_whitelister_element_rules' hook for customising the HTML whitelist used when saving rich text fields
 * Added 'in_menu' and 'not_in_menu' methods to PageQuerySet
 * Added 'get_next_siblings' and 'get_prev_siblings' to Page
 * Added init_new_page signal
 * Added page_published signal
 * Added copy method to Page to allow copying of pages
 * Added ``search`` method to ``PageQuerySet``
 * Added ``get_indexed_objects`` allowing developers to customise which objects get added to the search index
 * Major refactor of Elasticsearch backend
 * Use ``match`` instead of ``query_string`` queries
 * Fields are now indexed in Elasticsearch with their correct type
 * Filter fields are no longer included in '_all' (in Elasticsearch)
 * Fields with partial matching are now indexed together into '_partials'

 * Fix: Animated GIFs are now coalesced before resizing
 * Fix: Wand backend clones images before modifying them
 * Fix: Admin breadcrumb now positioned correctly on mobile
 * Fix: Page chooser breadcrumb now updates the chooser modal instead of linking to Explorer
 * Fix: Embeds - Fixed crash when no HTML field is sent back from the embed provider
 * Fix: Multiple sites with same hostname but different ports are now allowed
 * Fix: No longer possible to create multiple sites with is_default_site = True

0.3.1 (03.06.2014)
~~~~~~~~~~~~~~~~~~
 * Fix: When constructing dummy requests for pages with no routable URL, fall back on a hostname from ALLOWED_HOSTS and finally 'localhost', to avoid 'Invalid HTTP_HOST header' errors on preview when DEBUG=False.
 * Fix: Ensure that url_path is populated when previewing a newly created page, to avoid unnecessarily taking the above fallback.
 * Fix: Deleting an item from an InlinePanel, then generating a validation error on saving, no longer causes the deleted item to confusingly reappear with an error of its own.

0.3 (28.05.2014)
~~~~~~~~~~~~~~~~
 * Added toolbar to allow logged-in users to add and edit pages from the site front-end
 * Support for alternative image processing backends such as Wand, via the WAGTAILIMAGES_BACKENDS setting
 * Added support for generating static sites using django-medusa
 * Added custom Query set for Pages with some handy methods for querying pages
 * Added 'wagtailforms' module for creating form pages on a site, and handling form submissions
 * Editor's guide documentation
 * Expanded developer documentation
 * Editor interface now outputs form media CSS / JS, to support custom widgets with assets
 * Migrations and user management now correctly handle custom AUTH_USER_MODEL settings
 * Added 'slugurl' template tag to output the URL of a page with a given slug
 * MultiFieldPanel definitions now accept a 'classname' attribute, including a special classname of 'collapsible' to allow showing / hiding them on click
 * Added 'insert_editor_css' and 'insert_editor_js' hooks for passing in custom CSS / JS to the editor interface
 * Made JPEG compression level configurable through the IMAGE_COMPRESSION_QUALITY setting, and increased default to 85
 * Added document_served signal which gets fired when a document is downloaded
 * Added translations for Portuguese Brazil and Traditional Chinese (Taiwan).
 * Made compatible with Python 2.6
 * 'richtext' template filter now wraps output in <div class="rich-text"></div>, to assist in styling
 * Embeds now save author_name and provider_name if set by oEmbed provider
 * Fix: non-ASCII characters in image filenames are now converted into ASCII equivalents rather than becoming all underscores
 * Fix: paths to fonts and images within CSS are no longer hard-coded to /static/
 * Fix: Localization files for the JQuery UI datepicker are stored locally and only imported when a localization is known to be available
 * Fix: Page slugs are now validated on page edit
 * Fix: Filter objects are cached to avoid a database hit every time an {% image %} tag is compiled
 * Fix: Moving or changing a site root page no longer causes URLs for subpages to change to 'None'
 * Fix: Eliminated raw SQL queries from wagtailcore / wagtailadmin, to ensure cross-database compatibility
 * Fix: Snippets menu item is hidden for administrators if no snippet types are defined
 * Fix: 'Upload' tab in image chooser now retains focus if submit action returns a form error.
 * Fix: Search input now appears on image chooser after form validation error.

0.2 (11.03.2014)
~~~~~~~~~~~~~~~~
 * SQLite support added
 * Internationalisation of the admin backend
 * Translations for Bulgarian, Catalan, Chinese, Galician, German, Greek, Polish, Romanian and Spanish. Partial translations for Basque and Mongolian.
 * Stylesheets ported from Less to Sass, to eliminate dependency on an external CSS compiler
 * Coffeescript replaced by vanilla Javascript
 * OEmbed supported as an alternative backend for wagtailembeds, eliminating dependency on Embedly
 * Database supported as an alternative search backend, eliminating dependency on ElasticSearch
 * Background tasks now fall back on in-process handling if Celery is not available (also eliminating Redis as a dependency)
 * Users decoupled from Django default user model, to allow custom user models
 * Added explicit 'Can access Wagtail admin' permission, rather than treating all logged-in users as Wagtail users
 * Date fields now work with USE_L10N=True
 * "Your most recent edits" only shows the latest edit per page
 * Unified search view configurable in urls.py
 * Support for searching within a subtree
 * Added initial documentation
 * Added Ubuntu / Debian installation scripts
 * Extensive tests and test runner infrastructure
 * Numerous bugfixes

0.1 (07.02.2014)
~~~~~~~~~~~~~~~~
 * Initial release.
