* Add test for #2962
* Refactor format_permissions to avoid poking around in BoundField.initial
Django 1.10 changed the internal representation of initial values of ModelChoiceFields; they are now
model instances rather than IDs. This broke the format_permissions tag, which inspected the initial value
of the field in order to reconstruct it as checkboxes. This internal poking-around is now avoided entirely,
by setting GroupForm to use the CheckboxSelectMultiple widget itself; format_permissions simply has to
reorganise those checkboxes appropriately, rather than building them from first principles.
* Created Elasticsearch 2 backend
* Added tests for Elasticsearch 2 backend
* Split models up into different indices
pages, images and documents are now in separate indices
* Prefix fields of child models to prevent mapping clashes
* Replaced index_analyzer with analyzer/search_analyzer
index_analyzer has been removed in Elasticsearch 2.0
https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_20_mapping_changes.html#_analyzer_mappings
There's no indication in Elasticsearch's docs that this wouldn't work on Elasticsearch 1.x. However, we found that the new configuration isn't reliable on Elasticsearch 1.6 and below (causes the test_query_analyzer test to fail randomly).
* Implemented new way of representing content types in search index
Instead of using a long string of model names that is queried using a
"prefix" query, we instead use a multi-value string field and query it
using a simple "match" query.
The only reason why this isn't implemented in the Elasticsearch 1.x
backend yet is backwards compatibility
* Added another child model of SearchTest with clashing field mapping
This checks that the namespacing of fields on child models is working properly (if it doesn't the update_index tests will fail)
* Added tests for get_model_root function
* fixup! Added tests for get_model_root function
* Docs updates for Elasticsearch 2 support
Also tweak examples to use elasticsearch2 backend by default
* Test against Elasticsearch 2 on travis
* added base cloudfrontbackend and testcase
* added boto3 cloudfront client
* implemented create invalidation method
added error handling botocore
* added aws docs
* fixed typo
* flake8 fixes
* added boto3 configuration docs
* removed return
* purge path instead of full url
* added multisite hostname mapping
* added validation of DISTRIBUTION_ID
* renamed Cloudfront to CloudFront
* added note to include www in mapping
added tests for cloudfront site mapping
* removed deprecated has_key, used in
fixed _create_invalidation
* changed type checking of dict
removed debug line of code to check hostname
* fixed dict type checking condition
added assert t make sure no invalid cache is being purged
* changed import order
* fixed isort error
* more detailed error message for cloudfront
pep8 fixes 120 chars per line
* Log missing cloudfront distribution id as info
Was logging as error, but it may be possible that a developer wants cloudfront on only specific hostnames.
* , => .
* Docs edits
* Removed hard-dependency on boto3
* Revert "Disable client-side validation on Django 1.10 for multipart forms"
This reverts commit 197d85ce9f.
* Disable client-side validation on all admin forms
Client-side validation fails to handle all the nuances of how forms are
used in Wagtail, such as indicating errors across tabbed forms, and generally
results in a worse user experience than our existing server-side validation.
Fixes #2934
* Don't pre-emptively validate long-running forms if novalidate is set
We run checkValidity before enabling the spinner on long-running forms, so that we don't end up with a form that's been blocked from submission but still has the spinner running. Unfortunately, if novalidate is set, then checkValidity still returns False and aborts enabling the spinner, even though the 'real' validation (the one that prevents submission) never happens.
To make matters worse, if we abort before we've set up the cancelSpinner function, and then promptly encounter a custom onsubmit handler that recognises the error and attempts to call cancelSpinner, the JS breaks completely.
Eww.
To remedy this, we now only run checkValidity on forms that don't have novalidate, and only after setting up cancelSpinner.
* Ship our own copies of urlify.js and xregexp.min.js
This avoids issues with missing files when using Django 1.8 or omitting django.contrib.admin from INSTALLED_APPS (#2927), and guards against any breaking changes to these files in future Django releases.
* Add a WAGTAIL_ALLOW_UNICODE_SLUGS setting
Django's standard behaviour is to preserve managers that are set on abstract
superclasses, so this allows us to eliminate the metaclass hackery.
Fixes #2933
It should be max and min value - not length. See [here](07c3ba84fb/wagtail/wagtailcore/blocks/field_block.py (L306)).
So this would work
`blocks.IntegerBlock(max_value=10, min_value=0)`
but this wouldn't do anything
`blocks.IntegerBlock(max_length=10, min_length=0)`