==========================
FeinCMS 1.11 release notes
==========================

Welcome to FeinCMS 1.11!


Template inheritance with application contents
==============================================

FeinCMS adds a decorator and a ``TemplateResponse`` subclass which can be
returned from apps embedded through ``ApplicationContent``. The template
response's template will override the template used by FeinCMS' main view and
the context will be merged. A selection of HTTP response headers
(currently *Cache-Control*, *Last-Modified* and *Expires*) will also be copied
to the main response. The following two examples are fully equivalent::

    from django.template.response import TemplateResponse
    from feincms.content.application.models import UnpackTemplateResponse
    from feincms.views.decorators import unpack

    @unpack
    def app_detail(request, ...):
        return TemplateResponse(request, 'template.html', {...})

    # or

    def app_detail(request, ...):
        return UnpackTemplateResponse(request, 'template.html', {...})

The response class can also be easily used with Django's class-based views::

    class MyListView(generic.ListView):
        response_class = UnpackTemplateResponse

This mechanism supersedes returning a tuple of ``(template_name, context)``.
This is still supported, but lacks the possibility to override HTTP response
headers.


Explicit definition of navigation extensions is now possible
============================================================

The auto-discovery of navigation extensions always was fragile and had to
happen before the navigation extension itself was registered with the page
class. This has been fixed; it's now possible to explicitly define the list
of navigation extensions which should be available::

    from feincms.module.page.extensions import navigation
    from feincms.module.page.models import Page
    from myapp.navigation_extensions import MyappNavigationExtension

    class NavigationExtension(navigation.Extension):
        navigation_extensions = [
            MyappNavigationExtension,
        ]

    Page.register_extensions(
        NavigationExtension,
    )

The previous method has been deprecated and will stop working in future
versions of FeinCMS.


Backwards-incompatible changes
==============================

* FeinCMS requires a minimum of Django 1.6.

* The example project has been removed, because it did not really demonstrate
  a best practices FeinCMS setup. A standard installation of FeinCMS will
  often include additional libraries such as
  `feincms-oembed <https://github.com/feincms/feincms-oembed>`_,
  `form-designer <https://github.com/feincms/form_designer>`_ and additional
  modules.


Removal of deprecated features
------------------------------

There were no deprecated features to be removed.


New deprecations
================

* ``RSSContent`` and ``update_rsscontent`` have been deprecated, those being
  the only reason why ``FeinCMS`` depends on ``feedparser``. This will allow
  us to remove this dependency. Users should switch to
  `feincms-syndication <https://github.com/feincms/feincms-syndication>`_
  instead.

* The automatic discovery of subclasses of ``NavigationExtension`` has been
  replaced with an explicit mechanism of defining navigation extensions.

* ``Page.cache_key`` has never been used by FeinCMS itself and will therefore
  be removed in a future release. Comparable functionality has been available
  for a long time with ``Page.path_to_cache_key``.


Notable features and improvements
=================================

* Fix the inconsistent filtering of pages inside ``feincms_nav``. Navigation
  extensions always came last, but the last release of FeinCMS added navigation
  group filtering afterwards. This has been fixed. The workaround for the
  previous behavior was to add the matching navigation group to page pretenders
  as well.

* Support for importing PIL as `import Image` has been removed.

* The builtin and mostly broken frontend editing support has been removed. This
  is not a decision against frontend editing / on site editing in general, it
  is more about creating a space for new ideas and new implementations.

* The home-grown schema checking support has been removed. Real migrations
  should be used instead.

* We are logging more stuff.

* The admin CSS has been updated in preparation for Django's (hopefully!)
  upcoming
  `django-flat-theme <https://pypi.python.org/pypi/django-flat-theme>`_ merge.


Bugfixes
========

* ``{% feincms_nav %}`` now filters by navigation group before applying
  navigation extensions for internal consistency.

* ``{% page_is_active %}`` correctly handles page pretenders now.


Compatibility with Django and other apps
========================================

FeinCMS 1.11 requires Django 1.6 or better.
