|
@@ -37,79 +37,79 @@ The behaviour of scheduled publishing has been revised so that pages are no long
|
|
|
Other features
|
|
|
~~~~~~~~~~~~~~
|
|
|
|
|
|
- * Moved Wagtail API v1 implementation (``wagtail.contrib.api``) to an `external app <https://github.com/wagtail/wagtailapi_legacy>`_ (Karl Hobley)
|
|
|
- * The page chooser now searches all fields of a page, instead of just the title (Bertrand Bordage)
|
|
|
- * Implement ordering by date in form submission view (LB (Ben Johnston))
|
|
|
- * Elasticsearch scroll API is now used when fetching more than 100 search results (Karl Hobley)
|
|
|
- * Added hidden field to the form builder (Ross Crawford-d'Heureuse)
|
|
|
- * Usage count now shows on delete confirmation page when WAGTAIL_USAGE_COUNT_ENABLED is active (Kees Hink)
|
|
|
- * Added usage count to snippets (Kees Hink)
|
|
|
- * Moved usage count to the sidebar on the edit page (Kees Hink)
|
|
|
- * Explorer menu now reflects customisations to the page listing made via the `construct_explorer_page_queryset` hook and `ModelAdmin.exclude_from_explorer` property (Tim Heap)
|
|
|
- * "Choose another image" button changed to "Change image" to avoid ambiguity (Edd Baldry)
|
|
|
- * Added hooks ``before_create_user``, ``after_create_user``, ``before_delete_user``, ``after_delete_user``, ``before_edit_user``, ``after_edit_user`` (Jon Carmack)
|
|
|
- * Added ``exclude_fields_in_copy`` property to Page to define fields that should not be included on page copy (LB (Ben Johnston))
|
|
|
- * Improved error message on incorrect ``{% image %}`` tag syntax (LB (Ben Johnston))
|
|
|
- * Optimized preview data storage (Bertrand Bordage)
|
|
|
- * Added ``render_landing_page`` method to ``AbstractForm`` to be easily overridden and pass ``form_submission`` to landing page context (Stein Strindhaug)
|
|
|
- * Added ``heading`` kwarg to ``InlinePanel`` to allow heading to be set independently of button label (Adrian Turjak)
|
|
|
- * The value type returned from a ``StructBlock`` can now be customised. See :ref:`custom_value_class_for_structblock` (LB (Ben Johnston))
|
|
|
- * Added ``bgcolor`` image operation (Karl Hobley)
|
|
|
- * Added ``WAGTAILADMIN_USER_LOGIN_FORM`` setting for overriding the admin login form (Mike Dingjan)
|
|
|
- * Snippets now support custom primary keys (Sævar Öfjörð Magnússon)
|
|
|
- * Upgraded jQuery to version 3.2.1 (Janneke Janssen)
|
|
|
- * Update autoprefixer configuration to better match browser support targets (Janneke Janssen)
|
|
|
- * Update React and related dependencies to latest versions (Janneke Janssen, Hugo van den Berg)
|
|
|
- * Remove Hallo editor ``.richtext`` CSS class in favour of more explicit extension points (Thibaud Colas)
|
|
|
- * Updated documentation styling (LB (Ben Johnston))
|
|
|
- * Rich text fields now take feature lists into account when whitelisting HTML elements (Matt Westcott)
|
|
|
- * FormPage lists and Form submission lists in admin now use class based views for easy overriding (Johan Arensman)
|
|
|
- * Form submission csv exports now have the export date in the filename and can be customized (Johan Arensman)
|
|
|
- * FormBuilder class now uses bound methods for field generation, adding custom fields is now easier and documented (LB (Ben Johnston))
|
|
|
- * Added ``WAGTAILADMIN_NOTIFICATION_INCLUDE_SUPERUSERS`` setting to determine whether superusers are included in moderation email notifications (Bruno Alla)
|
|
|
- * Added a basic Dockerfile to the project template (Tom Dyson)
|
|
|
- * StreamField blocks now allow custom ``get_template`` methods for overriding templates in instances (Christopher Bledsoe)
|
|
|
- * Simplified edit handler API (Florent Osmont, Bertrand Bordage)
|
|
|
- * Made 'add/change/delete collection' permissions configurable from the group edit page (Matt Westcott)
|
|
|
- * Expose React-related dependencies as global variables for extension in the admin interface (Thibaud Colas)
|
|
|
- * Added helper functions for constructing form data for use with ``assertCanCreate``. See :ref:`form_data_test_helpers` (Tim Heap, Matt Westcott)
|
|
|
+* Moved Wagtail API v1 implementation (``wagtail.contrib.api``) to an `external app <https://github.com/wagtail/wagtailapi_legacy>`_ (Karl Hobley)
|
|
|
+* The page chooser now searches all fields of a page, instead of just the title (Bertrand Bordage)
|
|
|
+* Implement ordering by date in form submission view (LB (Ben Johnston))
|
|
|
+* Elasticsearch scroll API is now used when fetching more than 100 search results (Karl Hobley)
|
|
|
+* Added hidden field to the form builder (Ross Crawford-d'Heureuse)
|
|
|
+* Usage count now shows on delete confirmation page when WAGTAIL_USAGE_COUNT_ENABLED is active (Kees Hink)
|
|
|
+* Added usage count to snippets (Kees Hink)
|
|
|
+* Moved usage count to the sidebar on the edit page (Kees Hink)
|
|
|
+* Explorer menu now reflects customisations to the page listing made via the `construct_explorer_page_queryset` hook and `ModelAdmin.exclude_from_explorer` property (Tim Heap)
|
|
|
+* "Choose another image" button changed to "Change image" to avoid ambiguity (Edd Baldry)
|
|
|
+* Added hooks ``before_create_user``, ``after_create_user``, ``before_delete_user``, ``after_delete_user``, ``before_edit_user``, ``after_edit_user`` (Jon Carmack)
|
|
|
+* Added ``exclude_fields_in_copy`` property to Page to define fields that should not be included on page copy (LB (Ben Johnston))
|
|
|
+* Improved error message on incorrect ``{% image %}`` tag syntax (LB (Ben Johnston))
|
|
|
+* Optimized preview data storage (Bertrand Bordage)
|
|
|
+* Added ``render_landing_page`` method to ``AbstractForm`` to be easily overridden and pass ``form_submission`` to landing page context (Stein Strindhaug)
|
|
|
+* Added ``heading`` kwarg to ``InlinePanel`` to allow heading to be set independently of button label (Adrian Turjak)
|
|
|
+* The value type returned from a ``StructBlock`` can now be customised. See :ref:`custom_value_class_for_structblock` (LB (Ben Johnston))
|
|
|
+* Added ``bgcolor`` image operation (Karl Hobley)
|
|
|
+* Added ``WAGTAILADMIN_USER_LOGIN_FORM`` setting for overriding the admin login form (Mike Dingjan)
|
|
|
+* Snippets now support custom primary keys (Sævar Öfjörð Magnússon)
|
|
|
+* Upgraded jQuery to version 3.2.1 (Janneke Janssen)
|
|
|
+* Update autoprefixer configuration to better match browser support targets (Janneke Janssen)
|
|
|
+* Update React and related dependencies to latest versions (Janneke Janssen, Hugo van den Berg)
|
|
|
+* Remove Hallo editor ``.richtext`` CSS class in favour of more explicit extension points (Thibaud Colas)
|
|
|
+* Updated documentation styling (LB (Ben Johnston))
|
|
|
+* Rich text fields now take feature lists into account when whitelisting HTML elements (Matt Westcott)
|
|
|
+* FormPage lists and Form submission lists in admin now use class based views for easy overriding (Johan Arensman)
|
|
|
+* Form submission csv exports now have the export date in the filename and can be customized (Johan Arensman)
|
|
|
+* FormBuilder class now uses bound methods for field generation, adding custom fields is now easier and documented (LB (Ben Johnston))
|
|
|
+* Added ``WAGTAILADMIN_NOTIFICATION_INCLUDE_SUPERUSERS`` setting to determine whether superusers are included in moderation email notifications (Bruno Alla)
|
|
|
+* Added a basic Dockerfile to the project template (Tom Dyson)
|
|
|
+* StreamField blocks now allow custom ``get_template`` methods for overriding templates in instances (Christopher Bledsoe)
|
|
|
+* Simplified edit handler API (Florent Osmont, Bertrand Bordage)
|
|
|
+* Made 'add/change/delete collection' permissions configurable from the group edit page (Matt Westcott)
|
|
|
+* Expose React-related dependencies as global variables for extension in the admin interface (Thibaud Colas)
|
|
|
+* Added helper functions for constructing form data for use with ``assertCanCreate``. See :ref:`form_data_test_helpers` (Tim Heap, Matt Westcott)
|
|
|
|
|
|
|
|
|
Bug fixes
|
|
|
~~~~~~~~~
|
|
|
|
|
|
- * Do not remove stopwords when generating slugs from non-ASCII titles, to avoid issues with incorrect word boundaries (Sævar Öfjörð Magnússon)
|
|
|
- * The PostgreSQL search backend now preserves ordering of the ``QuerySet`` when searching with ``order_by_relevance=False`` (Bertrand Bordage)
|
|
|
- * Using ``modeladmin_register`` as a decorator no longer replaces the decorated class with ``None`` (Tim Heap)
|
|
|
- * Fixed crash in XML sitemap generator when all pages on the site are private (Stein Strindhaug)
|
|
|
- * The ``{% routablepageurl %}`` template tag no longer generates invalid URLs when the ``WAGTAIL_APPEND_SLASH`` setting was set to ``False`` (Venelin Stoykov)
|
|
|
- * The "View live" button is no longer shown if the page doesn't have a routable URL (Tim Heap)
|
|
|
- * API listing views no longer fail when no site records are defined (Karl Hobley)
|
|
|
- * Fixed rendering of border on dropdown arrow buttons on Chrome (Bertrand Bordage)
|
|
|
- * Fixed incorrect z-index on userbar causing it to appear behind page content (Stein Strindhaug)
|
|
|
- * Form submissions pagination no longer looses date filter when changing page (Bertrand Bordage)
|
|
|
- * PostgreSQL search backend now removes duplicate page instances from the database (Bertrand Bordage)
|
|
|
- * ``FormSubmissionsPanel`` now recognises custom form submission classes (LB (Ben Johnston))
|
|
|
- * Prevent the footer and revisions link from unnecessarily collapsing on mobile (Jack Paine)
|
|
|
- * Empty searches were activated when paginating through images and documents (LB (Ben Johnston))
|
|
|
- * Summary numbers of pages, images and documents were not responsive when greater than 4 digits (Michael Palmer)
|
|
|
- * Project template now has password validators enabled by default (Matt Westcott)
|
|
|
- * Alignment options correctly removed from ``TableBlock`` context menu (LB (Ben Johnston))
|
|
|
- * Fix support of ``ATOMIC_REBUILD`` for projects with Elasticsearch client ``>=1.7.0`` (Mikalai Radchuk)
|
|
|
- * Fixed error on Elasticsearch backend when passing a QuerySet as an ``__in`` filter (Karl Hobley, Matt Westcott)
|
|
|
- * ``__isnull`` filters no longer fail on Elasticsearch 5 (Karl Hobley)
|
|
|
- * Prevented intermittent failures on Postgres search backend when a field is defined as both a ``SearchField`` and a ``FilterField`` (Matt Westcott)
|
|
|
- * Alt text of images in rich text is no longer truncated on double-quote characters (Matt Westcott)
|
|
|
- * Ampersands in embed URLs within rich text are no longer double-escaped (Matt Westcott)
|
|
|
- * Using RGBA images no longer crashes with Pillow >= 4.2.0 (Karl Hobley)
|
|
|
- * Copying a page with PostgreSQL search enabled no longer crashes (Bertrand Bordage)
|
|
|
- * Style of the page unlock button was broken (Bertrand Bordage)
|
|
|
- * Admin search no longer floods browser history (Bertrand Bordage)
|
|
|
- * Version comparison now handles custom primary keys on inline models correctly (LB (Ben Johnston))
|
|
|
- * Fixed error when inserting chooser panels into FieldRowPanel (Florent Osmont, Bertrand Bordage)
|
|
|
- * Reinstated missing error reporting on image upload (Matt Westcott)
|
|
|
- * Only load Hallo CSS if Hallo is in use (Thibaud Colas)
|
|
|
- * Prevent style leak of Wagtail panel icons in widgets using ``h2`` elements (Thibaud Colas)
|
|
|
+* Do not remove stopwords when generating slugs from non-ASCII titles, to avoid issues with incorrect word boundaries (Sævar Öfjörð Magnússon)
|
|
|
+* The PostgreSQL search backend now preserves ordering of the ``QuerySet`` when searching with ``order_by_relevance=False`` (Bertrand Bordage)
|
|
|
+* Using ``modeladmin_register`` as a decorator no longer replaces the decorated class with ``None`` (Tim Heap)
|
|
|
+* Fixed crash in XML sitemap generator when all pages on the site are private (Stein Strindhaug)
|
|
|
+* The ``{% routablepageurl %}`` template tag no longer generates invalid URLs when the ``WAGTAIL_APPEND_SLASH`` setting was set to ``False`` (Venelin Stoykov)
|
|
|
+* The "View live" button is no longer shown if the page doesn't have a routable URL (Tim Heap)
|
|
|
+* API listing views no longer fail when no site records are defined (Karl Hobley)
|
|
|
+* Fixed rendering of border on dropdown arrow buttons on Chrome (Bertrand Bordage)
|
|
|
+* Fixed incorrect z-index on userbar causing it to appear behind page content (Stein Strindhaug)
|
|
|
+* Form submissions pagination no longer looses date filter when changing page (Bertrand Bordage)
|
|
|
+* PostgreSQL search backend now removes duplicate page instances from the database (Bertrand Bordage)
|
|
|
+* ``FormSubmissionsPanel`` now recognises custom form submission classes (LB (Ben Johnston))
|
|
|
+* Prevent the footer and revisions link from unnecessarily collapsing on mobile (Jack Paine)
|
|
|
+* Empty searches were activated when paginating through images and documents (LB (Ben Johnston))
|
|
|
+* Summary numbers of pages, images and documents were not responsive when greater than 4 digits (Michael Palmer)
|
|
|
+* Project template now has password validators enabled by default (Matt Westcott)
|
|
|
+* Alignment options correctly removed from ``TableBlock`` context menu (LB (Ben Johnston))
|
|
|
+* Fix support of ``ATOMIC_REBUILD`` for projects with Elasticsearch client ``>=1.7.0`` (Mikalai Radchuk)
|
|
|
+* Fixed error on Elasticsearch backend when passing a QuerySet as an ``__in`` filter (Karl Hobley, Matt Westcott)
|
|
|
+* ``__isnull`` filters no longer fail on Elasticsearch 5 (Karl Hobley)
|
|
|
+* Prevented intermittent failures on Postgres search backend when a field is defined as both a ``SearchField`` and a ``FilterField`` (Matt Westcott)
|
|
|
+* Alt text of images in rich text is no longer truncated on double-quote characters (Matt Westcott)
|
|
|
+* Ampersands in embed URLs within rich text are no longer double-escaped (Matt Westcott)
|
|
|
+* Using RGBA images no longer crashes with Pillow >= 4.2.0 (Karl Hobley)
|
|
|
+* Copying a page with PostgreSQL search enabled no longer crashes (Bertrand Bordage)
|
|
|
+* Style of the page unlock button was broken (Bertrand Bordage)
|
|
|
+* Admin search no longer floods browser history (Bertrand Bordage)
|
|
|
+* Version comparison now handles custom primary keys on inline models correctly (LB (Ben Johnston))
|
|
|
+* Fixed error when inserting chooser panels into FieldRowPanel (Florent Osmont, Bertrand Bordage)
|
|
|
+* Reinstated missing error reporting on image upload (Matt Westcott)
|
|
|
+* Only load Hallo CSS if Hallo is in use (Thibaud Colas)
|
|
|
+* Prevent style leak of Wagtail panel icons in widgets using ``h2`` elements (Thibaud Colas)
|
|
|
|
|
|
Upgrade considerations
|
|
|
======================
|
|
@@ -131,19 +131,19 @@ Wagtail module path updates
|
|
|
|
|
|
Many of the module paths within Wagtail have been reorganised to reduce duplication - for example, ``wagtail.wagtailcore.models`` is now ``wagtail.core.models``. As a result, ``import`` lines and other references to Wagtail modules will need to be updated when you upgrade to Wagtail 2.0. A new command has been added to assist with this - from the root of your project's code base:
|
|
|
|
|
|
- .. code-block:: console
|
|
|
+.. code-block:: console
|
|
|
|
|
|
- $ wagtail updatemodulepaths --list # list the files to be changed without updating them
|
|
|
- $ wagtail updatemodulepaths --diff # show the changes to be made, without updating files
|
|
|
- $ wagtail updatemodulepaths # actually update the files
|
|
|
+ $ wagtail updatemodulepaths --list # list the files to be changed without updating them
|
|
|
+ $ wagtail updatemodulepaths --diff # show the changes to be made, without updating files
|
|
|
+ $ wagtail updatemodulepaths # actually update the files
|
|
|
|
|
|
Or, to run from a different location:
|
|
|
|
|
|
- .. code-block:: console
|
|
|
+.. code-block:: console
|
|
|
|
|
|
- $ wagtail updatemodulepaths /path/to/project --list
|
|
|
- $ wagtail updatemodulepaths /path/to/project --diff
|
|
|
- $ wagtail updatemodulepaths /path/to/project
|
|
|
+ $ wagtail updatemodulepaths /path/to/project --list
|
|
|
+ $ wagtail updatemodulepaths /path/to/project --diff
|
|
|
+ $ wagtail updatemodulepaths /path/to/project
|
|
|
|
|
|
For the full list of command line options, enter ``wagtail help updatemodulepaths``.
|
|
|
|
|
@@ -208,13 +208,13 @@ Hallo.js customisations are unavailable on the Draftail rich text editor
|
|
|
|
|
|
The Draftail rich text editor has a substantially different API from Hallo.js, including the use of a non-HTML format for its internal data representation; as a result, functionality added through Hallo.js plugins will be unavailable. If your project is dependent on Hallo.js-specific behaviour, you can revert to the original Hallo-based editor by adding the following to your settings:
|
|
|
|
|
|
- .. code-block:: python
|
|
|
+.. code-block:: python
|
|
|
|
|
|
- WAGTAILADMIN_RICH_TEXT_EDITORS = {
|
|
|
- 'default': {
|
|
|
- 'WIDGET': 'wagtail.admin.rich_text.HalloRichTextArea'
|
|
|
- }
|
|
|
- }
|
|
|
+ WAGTAILADMIN_RICH_TEXT_EDITORS = {
|
|
|
+ 'default': {
|
|
|
+ 'WIDGET': 'wagtail.admin.rich_text.HalloRichTextArea'
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
|
|
|
Data format for rich text fields in ``assertCanCreate`` tests has been updated
|
|
@@ -222,23 +222,23 @@ Data format for rich text fields in ``assertCanCreate`` tests has been updated
|
|
|
|
|
|
The ``assertCanCreate`` test method (see :doc:`/advanced_topics/testing`) requires data to be passed in the same format that the page edit form would submit. The Draftail rich text editor posts this data in a non-HTML format, and so any existing ``assertCanCreate`` tests involving rich text fields will fail when Draftail is in use:
|
|
|
|
|
|
- .. code-block:: python
|
|
|
+.. code-block:: python
|
|
|
|
|
|
- self.assertCanCreate(root_page, ContentPage, {
|
|
|
- 'title': 'About us',
|
|
|
- 'body': '<p>Lorem ipsum dolor sit amet</p>', # will not work
|
|
|
- })
|
|
|
+ self.assertCanCreate(root_page, ContentPage, {
|
|
|
+ 'title': 'About us',
|
|
|
+ 'body': '<p>Lorem ipsum dolor sit amet</p>', # will not work
|
|
|
+ })
|
|
|
|
|
|
Wagtail now provides a set of helper functions for constructing form data: see :ref:`form_data_test_helpers`. The above assertion can now be rewritten as:
|
|
|
|
|
|
- .. code-block:: python
|
|
|
+.. code-block:: python
|
|
|
|
|
|
- from wagtail.tests.utils.form_data import rich_text
|
|
|
+ from wagtail.tests.utils.form_data import rich_text
|
|
|
|
|
|
- self.assertCanCreate(root_page, ContentPage, {
|
|
|
- 'title': 'About us',
|
|
|
- 'body': rich_text('<p>Lorem ipsum dolor sit amet</p>'),
|
|
|
- })
|
|
|
+ self.assertCanCreate(root_page, ContentPage, {
|
|
|
+ 'title': 'About us',
|
|
|
+ 'body': rich_text('<p>Lorem ipsum dolor sit amet</p>'),
|
|
|
+ })
|
|
|
|
|
|
|
|
|
|
|
@@ -269,35 +269,35 @@ legacy versions of the API until everyone has migrated to an officially supporte
|
|
|
|
|
|
The ``construct_whitelister_element_rules`` hook, used to specify additional HTML elements to be permitted in rich text, is deprecated. The recommended way of whitelisting elements is now to use rich text features - see :ref:`whitelisting_rich_text_elements`. For example, a whitelist rule that was previously defined as:
|
|
|
|
|
|
- .. code-block:: python
|
|
|
+.. code-block:: python
|
|
|
|
|
|
- from wagtail.core import hooks
|
|
|
- from wagtail.core.whitelist import allow_without_attributes
|
|
|
+ from wagtail.core import hooks
|
|
|
+ from wagtail.core.whitelist import allow_without_attributes
|
|
|
|
|
|
- @hooks.register('construct_whitelister_element_rules')
|
|
|
- def whitelist_blockquote():
|
|
|
- return {
|
|
|
- 'blockquote': allow_without_attributes,
|
|
|
- }
|
|
|
+ @hooks.register('construct_whitelister_element_rules')
|
|
|
+ def whitelist_blockquote():
|
|
|
+ return {
|
|
|
+ 'blockquote': allow_without_attributes,
|
|
|
+ }
|
|
|
|
|
|
can be rewritten as:
|
|
|
|
|
|
- .. code-block:: python
|
|
|
+.. code-block:: python
|
|
|
|
|
|
- from wagtail.admin.rich_text.converters.editor_html import WhitelistRule
|
|
|
- from wagtail.core import hooks
|
|
|
- from wagtail.core.whitelist import allow_without_attributes
|
|
|
+ from wagtail.admin.rich_text.converters.editor_html import WhitelistRule
|
|
|
+ from wagtail.core import hooks
|
|
|
+ from wagtail.core.whitelist import allow_without_attributes
|
|
|
|
|
|
- @hooks.register('register_rich_text_features')
|
|
|
- def blockquote_feature(features):
|
|
|
+ @hooks.register('register_rich_text_features')
|
|
|
+ def blockquote_feature(features):
|
|
|
|
|
|
- # register a feature 'blockquote' which whitelists the <blockquote> element
|
|
|
- features.register_converter_rule('editorhtml', 'blockquote', [
|
|
|
- WhitelistRule('blockquote', allow_without_attributes),
|
|
|
- ])
|
|
|
+ # register a feature 'blockquote' which whitelists the <blockquote> element
|
|
|
+ features.register_converter_rule('editorhtml', 'blockquote', [
|
|
|
+ WhitelistRule('blockquote', allow_without_attributes),
|
|
|
+ ])
|
|
|
|
|
|
- # add 'blockquote' to the default feature set
|
|
|
- features.default_features.append('blockquote')
|
|
|
+ # add 'blockquote' to the default feature set
|
|
|
+ features.default_features.append('blockquote')
|
|
|
|
|
|
Please note that the new Draftail rich text editor uses a different mechanism to process rich text content, and does not apply whitelist rules; they only take effect when the Hallo.js editor is in use.
|
|
|
|
|
@@ -330,16 +330,16 @@ Hallo editors for extension.
|
|
|
|
|
|
For example,
|
|
|
|
|
|
- .. code-block:: diff
|
|
|
+.. code-block:: diff
|
|
|
|
|
|
- /* JS */
|
|
|
- - var widget = $(elem).parent('.richtext').data('IKS-hallo');
|
|
|
- + var widget = $(elem).parent('[data-hallo-editor]').data('IKS-hallo');
|
|
|
+ /* JS */
|
|
|
+ - var widget = $(elem).parent('.richtext').data('IKS-hallo');
|
|
|
+ + var widget = $(elem).parent('[data-hallo-editor]').data('IKS-hallo');
|
|
|
|
|
|
- [...]
|
|
|
+ [...]
|
|
|
|
|
|
- /* Styles */
|
|
|
- - .richtext {
|
|
|
- + .halloeditor {
|
|
|
- font-family: monospace;
|
|
|
- }
|
|
|
+ /* Styles */
|
|
|
+ - .richtext {
|
|
|
+ + .halloeditor {
|
|
|
+ font-family: monospace;
|
|
|
+ }
|