- Changed the way that we specify the homepage: create a page with url override /. This is the way fluent does it. As a fallback, we look for a page with slug home. If you mount pages under a page with override URL and slug, the child pages inherit the override URL, making the page tree more natural.
- Page Admin no longer replaces the change_list table with a tree.
- Provide default Localization formats.
- Improvements to Events admin and calendar. Calendar shows for single event.
- Better Date/Time/Datetime widgets in Admin forms
- Front-end improvements: updated preview links in templates, included Bootstrap in backend and front-end by default.
- Added implementation of key parts of IIIF 2.1 spec for privileged users.
- Fleshed out Image model with more metadata and fields for rights/usage.
icekit.admin_toolsin preparation for admin consolidation and extension. Previous classes, templates and functions are deprecated.
- A new setting
ICEKIT['DASHBOARD_SORTED_APPS']to manually group models in the list below the dashboard panels. Models that aren’t manually grouped are grouped by their apps as normal.
- New dashboard panels for Recent Actions (the Django admin changelist) and
Assigned To Me (a workflow list).
datetime_modifiedfield to support this.
raw_id``s have previews and edit links if the admin subclasses ``RawIdPreviewAdminMixin(which ICEkit’s default admins do; note
InlineAdmin``s do not need this subclass). If the linked object has a ``preview()method, it is used for the preview, wrapped in an ‘edit’ link.
PreviewAdminMixinwhich calls an object’s
preview()method. The existing
ThumbnailAdminMixinnow inherits from this class and consequently, models which use
ThumbnailAdminMixinhave a visual preview in
- A new setting
icekit.apiapplication to provide APIs to read data from, and sometimes write data to, items in the site from program clients.
- Relocate public-access and read-only API for published pages to the new
- app location.
- Add new authenticated-access and permissions-based API for images.
- See documentation in docs/topics/apis.rst.
icekit.workflowapplication to associate, manage, and filter workflow state information like status and user-assigment for arbitrary models.
ICEkitFluentContentsMixinabstract classes in
icekit.modelsto use as a base for models that will include publishing and workflow features.
ICEkitFluentContentsAdminadmin classes in
icekit.adminas bases for admins for models with publishing and workflow features.
- Add workflow features to all publishable models in ICEkit using the new abstract model mixins and admin base classes mentioned above.
- Preview pages are now visually highlighted, and have a different HTML title.
- “Preview draft” button is now near “View published” button.
- “Slideshow” is now renamed “Image Gallery” and there is a new Image Gallery content plugin available (which renders a grid of thumbnails into a lightbox).
icekit.content_collectionsapp which defines an abstract listing page type that lists a collection of content, and an abstract model for collected content that appears in such a collection. This is a common pattern.
icekit.page_types.authorapp which models a content author and a listing page, based on the
icekit.page_types.articleapp which is a concrete implementation of the content collections pattern.
docker-cloud.*.ymlfiles, which frequently contain secrets that should not be committed.
ContactPersonmodel + and plugin added, allowing adding of staff contacts to most types of content.
- Verbose Name for “o embed with caption” is now “Embedded media”
- Text plugin now has a style setting
- Overhaul of search system, using a consistent approach to index and depict rich/publishable/polymorphic models, and to facet on them.
- Documentation is refactored into ReStructuredText. This means much more coherence, and the ability to generate documentation from within code. Also documentation focuses on GLAMkit rather than ICEkit to align with current development focus.
DASHBOARD_FEATURED_APPS['models']should now be a list of tuples, not a dict, so that ordering is preserved. Dict-based definitions still work, but operations that rely on the value being a dict (such as
update()) will fail.
AbstractLayoutPagenow includes ListableMixin and HeroMixin. All models which inherit from this will need a new migration.
The initial migration for
icekit.plugins.slideshowhad the wrong database table name, which meant that the
0004_auto_20160821_2140migration would not have correctly renamed the database table when upgrading to
>=0.10from an earlier version.
To fix this, run the following SQL manually:
ALTER TABLE "slideshow_slideshow" RENAME TO "icekit_plugins_slideshow_slideshow";
If you have yet to upgrade from
<0.10, you don’t need to do anything.
icekit.articlesis no more. Functionality is moved to
icekit.dashboardhas moved to
FEATURED_APPSsetting has moved to
ICEKIT['DASHBOARD_FEATURED_APPS'], and the
['models']values are now tuples of 2-tuples, not dicts, so as to support item ordering. ``update()``ing the default settings no longer works, use tuple operations instead.
Added HeroMixin and ListableMixin to LayoutPage and Article. This will break ported/subclass models that define similarly-named fields. Either remove the definition or migrate data somehow.
The required version of Press Releases removes the
PressContactmodel, in favour of
ContactPerson. If you have
PressContacts, you will need to migrate to the new model.
- Improvements to publishing to make it accomodate more types of content.
- Fix bug where the content items and placeholders associated with a fluent content model (other than a page) were not included in the published copy.
icekit.publishing.admin.PublishableFluentContentsAdminas base classes for fluent content models and admins, to help keep things DRY.
- Minor docs on testing.
- Greater test coverage.
- Import model mixins
icekit.mixinsmodule instead of
- Import admin mixin
icekit.admin_tools.mixinsmodule instead of
- ICEkit gets a facelift. Content editing now looks cleaner and easier to scan. Reordering items is animated, meaning it’s easier to keep track of what got moved.
- Improved Image controls, optionally including a title in the caption.
alt_textis no longer required - some images don’t provide content that is useful to users who can’t see them, though the
alt=attribute is still always included in HTML.
- Fix a bug where looking for
help_textin a placeholder slot that had no manual configuration raised a 500, resulting in no layout data found.
- Fix fatal error (typo) in
.editorconfig, and add to project template.
- Tag Docker images during build on Travis CI for release versions.
Update the recommended method of running projects via
go.shto provide a more consistent and familiar experience for developers.
$ docker-compose up # Run all services and log to stdout (no interactivity) $ docker-compose exec django entrypoint.sh # Shell into running `django` container to run interactive processes
$ docker-compose run --rm --service-ports django # Start dependant services and shell into a new `django` container
The benefits are that:
- We start with an interactive terminal in which we can any number of interactive processes in a familiar way.
- It’s much easier and quicker to stop and restart the main process (e.g. the Django dev server) without having to stop and restart dependant services.
- We aren’t overwhelmed by several screens of log output from all the service dependencies.
- We don’t start a WSGI process in a non-interactive
djangoservice, then have to shell into the container to stop it and replace it with an interactive one.
Use different locations for
PYTHONUSERBASE(via Docker) and virtualenv (via
go.sh) directories, to avoid conflicts.
go.shBASH shell from user’s personal
.profilefiles to avoid conflicts and unexpected behaviour.
Validate that manually installed dependencies are available when run via
go.sh, and fail loudly.
setup-django.shby default when
go.shis called without arguments, to mimic
docker-compose run ... djangodefault behaviour.
- Use a database name derived from project directory and Git branch.
initial_data.sqlbefore running tests, so
initial_data.sqlcan be used for development.
- Only run and report on project tests when run in a project context.
Improve detection of
*.sqlfile vs source database to restore when creating a database.
Don’t clobber the version of ICEkit installed into the base Docker image when building a project image.
Avoid failing test builds when Coveralls fails to push its update.
Add an authors app.
You can now define
help_textfor a fluent placeholder in
ICEkitURLField, which uses correct
Backwards incompatible changes:
The default command for
djangoservice now starts an interactive shell instead of
supervisord.sh(which starts Nginx and Gunicorn). Use the new
docker-compose run --rm --service-ports djangocommand to shell into a new
djangocontainer and then manually call
entrypoint.shscript is now executed via the
Dockerfile. You don’t need to explicitly include it as an argument to
docker-compose run ...commands or in
Move Node modules and Bower components out of
icekitpackage and into project template for simplicity and greater visibility. Add ICEkit dependencies to your project
django-supervisor. We are now using Supervisor directly because it uses a lot of memory and is slow to invoke the whole Django machinery just to render a
supervisord.conftemplate before starting Supervisor.
Define additional services in
docker-compose.ymland a Supervisor config file (referenced by the
SUPERVISORD_CONFIG_INCLUDEenvironment variable) or shell scripts to run additional processes interactively.
- Refactored templates so as to only use bootstrap markup when layout is intrinsic. Improved markup for some, particularly quote and OEmbed.
- Added instructions covering uninstalling a docker project.
- Installation improvements.
- Thumbnail configuration should now be specified in settings, not templates.
- Make project run more consistently without Docker (via
- Refactor docs to provide better onboarding.
- Fix intermittent cache related test failures.
- Serve Django with Nginx/Gunicorn under Supervisord, to buffer requests, facilitate large file uploads (500MB), and take full advantage of multiple CPU cores.
SITE_PORTsetting now represents the public port that the site is listening on (Nginx), not the WSGI process (Gunicorn).
initial_data.sqldump to bypass old migrations on first run, not only when running tests.
- Use wrapper scripts for program commands, so we can run programs consistently in Docker containers of via Supervisord when not using Docker.
- Expose private ports (e.g. Gunicorn, PostgreSQL, Redis) to the host on a dynamic port during development.
- Update the
Siteobject matching the
SITE_IDsetting in a post-migrate signal handler with the
- Run celery programs via Supervisord when not using Docker.
- Configure Docker and non-Docker environments to be more similar so we can use more of the same scripts to run.
- Don’t use Redis lock to avoid parallel setup when not using Docker, on a single server.
- Run tests in a Docker image on Travis CI and push to Docker Hub on success.
- Test the same settings module in Docker and Tox.
- Fix broken tests.
- Speed up tests by restoring a database with migrations already applied.
- Fix broken tests.
- #3 Include a Django project with ICEkit, making it easier to run in development, need less boilerplate code, be less likely to diverge over time, and easier to keep up-to-date.
- #4 Make content plugins “portable”, making it easier to fork and customise them for a project.
Backwards incompatible changes:
Make content plugins portable. You will need to run an SQL statement for each plugin manually to fix Django’s migration history when upgrading an existing project.
UPDATE django_migrations SET app='icekit_plugins_brightcove' WHERE app='brightcove'; UPDATE django_migrations SET app='icekit_plugins_child_pages' WHERE app='child_pages'; UPDATE django_migrations SET app='icekit_plugins_faq' WHERE app='faq'; UPDATE django_migrations SET app='icekit_plugins_file' WHERE app='file'; UPDATE django_migrations SET app='icekit_plugins_horizontal_rule' WHERE app='horizontal_rule'; UPDATE django_migrations SET app='icekit_plugins_image' WHERE app='image'; UPDATE django_migrations SET app='icekit_plugins_instagram_embed' WHERE app='instagram_embed'; UPDATE django_migrations SET app='icekit_plugins_map' WHERE app='map'; UPDATE django_migrations SET app='icekit_plugins_map_with_text' WHERE app='map_with_text'; UPDATE django_migrations SET app='icekit_plugins_oembed_with_caption' WHERE app='oembed_with_caption'; UPDATE django_migrations SET app='icekit_plugins_page_anchor' WHERE app='page_anchor'; UPDATE django_migrations SET app='icekit_plugins_page_anchor_list' WHERE app='page_anchor_list'; UPDATE django_migrations SET app='icekit_plugins_quote' WHERE app='quote'; UPDATE django_migrations SET app='icekit_plugins_reusable_form' WHERE app='reusable_form'; UPDATE django_migrations SET app='icekit_plugins_slideshow' WHERE app='slideshow'; UPDATE django_migrations SET app='icekit_plugins_twitter_embed' WHERE app='twitter_embed';
- Initial release.