mirror of
https://github.com/wagtail/wagtail.git
synced 2024-11-28 17:13:31 +01:00
364 lines
24 KiB
Plaintext
364 lines
24 KiB
Plaintext
Changelog
|
|
=========
|
|
|
|
1.0 (xx.xx.xxxx)
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
* 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)
|
|
* 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
|
|
|
|
|
|
0.8.8 (xx.xx.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 <div> elements in the rich text editor were not being whitelisted
|
|
* Fix: Due to the above issue, embeds/images in a rich text field would sometimes be saved into the database in their editor representation
|
|
* Fix: RoutablePage now prevents subpage_urls from being defined as a property, which would cause a memory leak
|
|
* Fix: Added validation to prevent pages being created with only whitespace characters in their title fields (Frank Wiles)
|
|
* Fix: Prevent logout on changing password when SessionAuthenticationMiddleware is in use
|
|
* Fix: Work around a Python / Django issue that prevented documents with certain non-ASCII filenames from being served
|
|
|
|
|
|
0.8.6 (10.03.2015)
|
|
~~~~~~~~~~~~~~~~~~
|
|
* Translations updated, including new translations for Czech, Italian and Japanese
|
|
* The "fixtree" command can now delete orphaned pages
|
|
* Fix: django-taggit library updated to 0.12.3, to fix a bug with migrations on SQLite on Django 1.7.2 and above (https://github.com/alex/django-taggit/issues/285)
|
|
* Fix: Fixed a bug that caused children of a deleted page to not be deleted if they had a different type
|
|
|
|
|
|
0.8.5 (17.02.2015)
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
* Fix: On adding a new page, the available page types are ordered by the displayed verbose name
|
|
* Fix: Active admin submenus were not properly closed when activating another
|
|
* Fix: get_sitemap_urls is now called on the specific page class so it can now be overridden (Jerel Unruh)
|
|
* Fix: (Firefox and IE) Fixed preview window hanging and not refocusing when "Preview" button is clicked again
|
|
* Fix: Storage backends that return raw ContentFile objects are now handled correctly when resizing images (@georgewhewell)
|
|
* Fix: Punctuation characters are no longer stripped when performing search queries
|
|
* Fix: When adding tags where there were none before, it is now possible to save a single tag with multiple words in it
|
|
* Fix: richtext template tag no longer raises TypeError if None is passed into it (Alejandro Varas)
|
|
* Fix: Serving documents now uses a streaming HTTP response and will no longer break Django's cache middleware
|
|
* Fix: User admin area no longer fails in the presence of negative user IDs (as used by django-guardian's default settings)
|
|
* Fix: Password reset emails now use the ``BASE_URL`` setting for the reset URL
|
|
* Fix: BASE_URL is now included in the project template's default settings file
|
|
|
|
|
|
0.8.4 (04.12.2014)
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
* Fix: It is no longer possible to have the explorer and settings menu open at the same time
|
|
* Fix: Page IDs in page revisions were not updated on page copy, causing subsequent edits to be committed to the original page instead
|
|
* Fix: Copying a page now creates a new page revision, ensuring that changes to the title/slug are correctly reflected in the editor (and also ensuring that the user performing the copy is logged)
|
|
* Fix: Prevent a race condition when creating Filter objects
|
|
|
|
|
|
0.8.3 (18.11.2014)
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
* Fix: Added missing jQuery UI sprite files, causing collectstatic to throw errors (most reported on Heroku)
|
|
* Fix: Page system check for on_delete actions of ForeignKeys was throwing false positives when page class decends from an abstract class (Alejandro Giacometti)
|
|
* Fix: Page system check for on_delete actions of ForeignKeys now only raises warnings, not errors
|
|
* Fixed a regression where form builder submissions containing a number field would fail with a JSON serialisation error
|
|
* Fix: Resizing an image with a focal point equal to the image size would result in a divide-by-zero error
|
|
* Fix: Focal point indicator would sometimes be positioned incorrectly for small or thin images
|
|
* Fix: Focal point chooser background colour changed to grey to make working with transparent images easier
|
|
* Fix: Elasticsearch configuration now supports specifying HTTP authentication parameters as part of the URL, and defaults to ports 80 (HTTP) and 443 (HTTPS) if port number not specified
|
|
* Fixed a TypeError when previewing pages that use RoutablePageMixin
|
|
* Fix: Rendering image with missing file in rich text no longer crashes the entire page
|
|
* Fix: IOErrors thrown by underlying image libraries that are not reporting a missing image file are no longer caught
|
|
* Fix: Minimum Pillow version bumped to 2.6.1 to work around a crash when using images with transparency
|
|
* Fix: Images with transparency are now handled better when being used in feature detection
|
|
|
|
|
|
0.8.2 (18.11.2014)
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
[release withdrawn due to packaging issues]
|
|
|
|
|
|
0.8.1 (05.11.2014)
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
* Fixed a regression where images would fail to save when feature detection is active
|
|
|
|
|
|
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.
|